2012年11月16日
Java遍歷Map
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "value1");
map.put("2", "value2");
map.put("3", "value3");
//第一種:普遍使用,二次取值
System.out.println("通過Map.keySet遍歷key和value:");
for (String key : map.keySet()) {
System.out.println("key= "+ key + " and value= " + map.get(key));
}
//第二種
System.out.println("通過Map.entrySet使用iterator遍歷key和value:");
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第三種:推薦,尤其是容量大時
System.out.println("通過Map.entrySet遍歷key和value");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第四種
System.out.println("通過Map.values()遍歷所有的value,但不能遍歷key");
for (String v : map.values()) {
System.out.println("value= " + v);
}
}
Java遍歷Set
對 set 的遍歷
1.迭代遍歷:
Set<String> set = new HashSet<String>();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}
2.for循環遍歷:
for (String str : set) {
System.out.println(str);
}
優點還體現在泛型 假如 set中存放的是Object
Set<Object> set = new HashSet<Object>();
for循環遍歷:
for (Object obj: set) {
if(obj instanceof Integer){
int aa= (Integer)obj;
}else if(obj instanceof String){
String aa = (String)obj
}
........
}
當一個人找不到出路的時候,最好的辦法就是將當前能做好的事情做到極致,做到無人能及。
今天在研究了一下關于ORACLE的導入導出的功能,周五快要下班的時候給同事新建一個表空間,將同一個數據庫中的某個用戶下的表導入新的表空間上,建好表空間和用戶后,直接用 exp ,imp 來導入數據到新的表空間,查是發現后來導入的數據還在原來的表空間上,(周五那天的我是用工具編輯DMP文件,修改里的表空間名后導入的),后來想起來了eygle的書上寫了關于這個的問題,于是今天就來試驗了一下。
第一種:修改用戶的一些權限。
首先使用sytem帳戶登陸
--創建新表空間的用戶
SQL> create user pangzi identified by pangzi default tablespace pangzi temporary tablespace temp;
用戶已創建。
--授給新用戶一般的權限
SQL> grant export full database to pangzi;
授權成功。
SQL> grant import full database to pangzi;
授權成功。
SQL> grant connect,resource to pangzi;
授權成功。
SQL> grant create procedure to pangzi;
授權成功。
SQL> grant create job to pangzi;
授權成功。
SQL> grant create view to pangzi;
授權成功。
SQL> grant create synonym to pangzi;
授權成功。
--從這里開始將是增加的,為了使導入的數據,不放在原來的表空間上
SQL> grant dba to pangzi;
--收回用戶的umlimited tablespace權限
SQL> revoke unlimited tablespace from pangzi;
--設置新創建的用戶可使用syb表空間的大小0(原數據所在的表空間為syb)
SQL> alter user pangzi quota 0 on syb;
--設置新創建的用戶可使用pangzi表空間的大小不限制
SQL> alter user pangzi quota unlimited on pangzi;
--收回DBA權限
SQL> revoke dba from pangzi;
執行導入數據
C:\Users\dyspangzi>imp pangzi/pangzi@testdev file=syb.dmp full=y
Import: Release 10.2.0.3.0 - Production on 星期六 4月 21 17:48:54 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
經由常規路徑由 EXPORT:V10.02.01 創建的導出文件
警告: 這些對象由 SYB 導出, 而不是當前用戶
已經完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的導入
. 正在將 SYB 的對象導入到 PANGZI
. . 正在導入表 "ALL_SALES"導入了 360 行
. . 正在導入表 "COUPONS"導入了 6 行
. . 正在導入表 "CUSTOMERS"導入了 5 行
. .中間部分內容省略,都是導入的信息
. . 正在導入表 "REG_EXPS"導入了 1 行
. . 正在導入表 "SALARY_GRADES"導入了 4 行
即將啟用約束條件...
成功終止導入, 沒有出現警告。
導入成功,我們看導的表已經在新的表空間中了
SQL> show user
USER 為 "PANGZI"
SQL> select table_name,tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
DYSPANGZI PANGZI
CUSTOMERS PANGZI
PRODUCT_TYPES PANGZI
PRODUCTS PANGZI
PURCHASES PANGZI
EMPLOYEES PANGZI
SALARY_GRADES PANGZI
PURCHASES_WITH_TIMESTAMP PANGZI
PURCHASES_TIMESTAMP_WITH_TZ PANGZI
PURCHASES_WITH_LOCAL_TZ PANGZI
COUPONS PANGZI
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
PROMOTIONS PANGZI
ORDER_STATUS PANGZI
PRODUCT_CHANGES PANGZI
MORE_PRODUCTS PANGZI
MORE_EMPLOYEES PANGZI
DIVISIONS PANGZI
JOBS PANGZI
EMPLOYEES2 PANGZI
ALL_SALES PANGZI
PRODUCT_PRICE_AUDIT PANGZI
REG_EXPS PANGZI
已選擇22行。
第二種:使用EXPDP和IMPDP來導入和導出
使用expdp來導出,首先要為一個參數來指定一個路徑——directory,expdp是在服務器端工作,導出的文件需要放在本地目錄,這個參數就是保存導出文件的位置。這個可以自己創建,也可以是默認的,我自己創建了一個,名字是expdir
SQL> CREATE OR REPLACE DIRECTORY expdir AS '/var/backup';
目錄已創建。
SQL> select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------- ------------------------------- -----------------------------------------
SYS ADMIN_DIR /ade/aime_10.2_lnx_push/oracle/md/admin
SYS DATA_PUMP_DIR /usr/app/oracle/product/10.2.0/db_1/rdbms/log/
SYS WORK_DIR /ade/aime_10.2_lnx_push/oracle/work
SYS EXPDIR /var/backup
--給用戶授予讀寫權限
SQL> grant read,write on directory expdir to syb;
開始導出數據
[oracle@dyspangzi ~]$ expdp dumpfile=syb.dmp directory=expdir;
Export: Release 10.2.0.1.0 - Production on Saturday, 21 April, 2012 18:06:46
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Starting "SYB"."SYS_EXPORT_SCHEMA_01": dumpfile=syb.dmp directory=expdir
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 1.375 MB
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
. . exported "SYB"."DYSPANGZI" 48.50 KB 659 rows
. . exported "SYB"."ALL_SALES" 13.68 KB 360 rows
中間導出信息省略
. . exported "SYB"."REG_EXPS" 5.437 KB 1 rows
. . exported "SYB"."SALARY_GRADES" 5.710 KB 4 rows
. . exported "SYB"."PRODUCT_PRICE_AUDIT" 0 KB 0 rows
Master table "SYB"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYB.SYS_EXPORT_SCHEMA_01 is:
/var/backup/syb.dmp
Job "SYB"."SYS_EXPORT_SCHEMA_01" successfully completed at 18:07:11
導出成功后查看一下剛才創建目錄里邊的內容
[root@dyspangzi var]# cd backup
[root@dyspangzi backup]# ls -l
總計 720
-rw-r--r-- 1 oracle oinstall 3472 04-21 18:07 export.log
-rw-r----- 1 oracle oinstall 729088 04-21 18:07 syb.dmp
多了兩個文件,一個是日志文件一個是導出的數據文件,在導入的時候需要這兩個文件。下面開始導入。
===================================================================================
出現了第一個錯誤
[oracle@dyspangzi ~]$ impdp pangzi/pangzi dumpfile=syb.dmp directory=expdir remap_tablespace=syb:pangzi
Import: Release 10.2.0.1.0 - Production on Saturday, 21 April, 2012 18:45:35
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39087: directory name EXPDIR is invalid
出現了錯誤,后來發現這個是因為新用戶pangzi沒有對目錄的讀寫權限造成的,于是加上權限
SQL> grant read,write on directory expdir to pangzi;
授權成功。
==================================================================================
出現了第二個錯誤
[oracle@dyspangzi ~]$ impdp pangzi/pangzi dumpfile=syb.dmp directory=expdir remap_tablespace=syb:pangzi
Import: Release 10.2.0.1.0 - Production on Saturday, 21 April, 2012 18:47:38
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORA-31655: no data or metadata objects selected for job
ORA-39154: Objects from foreign schemas have been removed from import
Master table "PANGZI"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "PANGZI"."SYS_IMPORT_FULL_01": pangzi/******** dumpfile=syb.dmp directory=expdir remap_tablespace=syb:pangzi
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Job "PANGZI"."SYS_IMPORT_FULL_01" successfully completed at 18:47:41
這個是由于原來的用戶和現在的不一樣了,加上這個參數就好了 remap_schema=syb:pangzi
=====================================================================================================
下面是沒有任何錯誤的導入了
[oracle@dyspangzi ~]$ impdp pangzi/pangzi dumpfile=syb.dmp directory=expdir remap_schema=syb:pangzi remap_tablespace=syb:pangzi
Import: Release 10.2.0.1.0 - Production on Saturday, 21 April, 2012 18:49:24
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Master table "PANGZI"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "PANGZI"."SYS_IMPORT_FULL_01": pangzi/******** dumpfile=syb.dmp directory=expdir remap_schema=syb:pangzi remap_tablespace=syb:pangzi
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "PANGZI"."DYSPANGZI" 48.50 KB 659 rows
. . imported "PANGZI"."ALL_SALES" 13.68 KB 360 rows
中間部分導入信息省略
. . imported "PANGZI"."PURCHASES_WITH_TIMESTAMP" 5.609 KB 1 rows
. . imported "PANGZI"."REG_EXPS" 5.437 KB 1 rows
. . imported "PANGZI"."SALARY_GRADES" 5.710 KB 4 rows
. . imported "PANGZI"."PRODUCT_PRICE_AUDIT" 0 KB 0 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Job "PANGZI"."SYS_IMPORT_FULL_01" successfully completed at 18:49:37
成功導入?。。。?/p>
查看默認的表空間
SQL> select table_name,tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
DYSPANGZI PANGZI
CUSTOMERS PANGZI
PRODUCT_TYPES PANGZI
PRODUCTS PANGZI
PURCHASES PANGZI
EMPLOYEES PANGZI
SALARY_GRADES PANGZI
PURCHASES_WITH_TIMESTAMP PANGZI
PURCHASES_TIMESTAMP_WITH_TZ PANGZI
PURCHASES_WITH_LOCAL_TZ PANGZI
COUPONS PANGZI
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
PROMOTIONS PANGZI
ORDER_STATUS PANGZI
PRODUCT_CHANGES PANGZI
MORE_PRODUCTS PANGZI
MORE_EMPLOYEES PANGZI
DIVISIONS PANGZI
JOBS PANGZI
EMPLOYEES2 PANGZI
ALL_SALES PANGZI
PRODUCT_PRICE_AUDIT PANGZI
REG_EXPS PANGZI
已選擇22行。
此表空間中沒有索引,所以第一種方法也沒有報錯,如果出現有索引的第一種方法還得增加幾步,等我明天找到周五那個數據再來再著做試驗。
-----------------------------------------------------------
今天特意去公司找來了那天導的數據庫,回來做實驗。采用第一種方法不可行,雖然說可以使用IMP 加indexs參數來導出一些索引,但是導入的時候總有莫名其妙的錯誤,估計還是我沒弄好,所以為了省事還是直接用第二種吧,方便,無錯。
1.在Oracle中可以用下面兩種:
01:
create table newtable as select * from oldtable;//用于復制前未創建新表newtable不存在的情況
02:
insert into newtable select * from oldtable;//已經創建了新表newtable 的情況
注意:第一種方式只是復制了表結構,但是主鍵什么的并沒有復制進去,所以用的時候要小心在意。
2.如果想簡單快速的復制表結構,而不需要oldtable里面的數據,可以用下面的語句:
create table newtable as select * from oldtable where 1=2;(把數據過濾掉)
3.如過newtable 和oldtable的表結構不同,可以使用下面的方式:
create table newtable as select s.c1,s.c2 from oldtable s;
4.如果想重新命名newtable的列名:
在oracle中:
create table newtable(id,name1) as select s.c1,s.c2 from oldtable s;
或者
create table newtable as select s.c1 ,s.c2 from oldtable s;
在mysql中恐怕只能用第二種方式了。
5.如果是只需要把一部分的oldtable中的數據添加到newtable中??梢赃@樣:
create table newtable as (select * from oldtable where ...);//加where過濾條件
6.最常見的情況是id列新表中要用,并且和舊表中的不同,使用下面的語句就可以了(我們可以重新建一個sequence)
create table yang(id,name) as select hibernate_sequence.nextval,t.ename from emp t;
7.要注意,導出表的時候不能用select...into語句。
方法1:在shell中執行LANG=en 將語言設為英語就可以了.SSH下很多中文都不支持.
方法2:
在使用ssh遠程控制redhat服務器時,中文顯示為亂碼。這個問題困擾了好久,后來發現修改i18n這個文件能夠修正亂碼。
方法如下:修改/etc/sysconfig/i18n文件,將其改成以下內容:
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"
重啟機器,問題應該解決了。
方法3:
如果你用的是putty ,你只要在字符編碼里選擇utf-8就正常了
補充:這樣做的后果是,在linux啟動時,那些提示文字中文都變成了“?”符號。如果不習慣的話將ssh顯示端改成英文吧。如下:
LANG=en_US
一、java實現DES加密算法為了實現一對密鑰對整個項目所有加密解密文件都適用的方法,采用先生成一對密鑰.保存到xml文件中,以后獲得私匙和公鑰只需要從xml文件中取得就可以了./*** 把成生的一對密鑰保存到DesKey.xml文件中*/public static void saveDesKey(){ try { SecureRandom sr = new SecureRandom(); //為我們選擇的DES算法生成一個KeyGenerator對象 KeyGenerator kg = KeyGenerator.getInstance ("DES" ); kg.init (sr); FileOutputStream fos = new FileOutputStream("C:/DesKey.xml"); ObjectOutputStream oos = new ObjectOutputStream(fos); //生成密鑰 Key key = kg.generateKey(); oos.writeObject(key); oos.close(); } catch (Exception e) { e.printStackTrace(); }}獲取密鑰方法如下:
/*** 獲得DES加密的密鑰。在交易處理的過程中應該定時更* 換密鑰。需要JCE的支持,如果jdk版本低于1.4,則需要* 安裝jce-1_2_2才能正常使用。* @return Key 返回對稱密鑰*/ public static Key getKey() { Key kp = null; try { String fileName = "conf/DesKey.xml"; InputStream is = DesUtil.class.getClassLoader() .getResourceAsStream(fileName); ObjectInputStream oos = new ObjectInputStream(is); kp = (Key) oos.readObject(); oos.close(); } catch (Exception e) { e.printStackTrace(); } return kp; }文件采用DES算法加密文件
/**
* 文件file進行加密并保存目標文件destFile中
* @param file
* 要加密的文件 如c:/test/srcFile.txt
* @param destFile
* 加密后存放的文件名 如c:/加密后文件.txt
*/
public static void encrypt(String file, String destFile) throws Exception {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, getKey());
InputStream is = new FileInputStream(file);
OutputStream out = new FileOutputStream(dest);
CipherInputStream cis = new CipherInputStream(is, cipher);
byte[] buffer = new byte[1024];
int r;
while ((r = cis.read(buffer)) > 0) {
out.write(buffer, 0, r);
}
cis.close();
is.close();
out.close();
}文件采用DES算法解密文件
/**
* 文件file進行加密并保存目標文件destFile中
* @param file
* 已加密的文件 如c:/加密后文件.txt
* @param destFile
* 解密后存放的文件名 如c:/ test/解密后文件.txt
*/
public static void decrypt(String file, String dest) throws Exception { Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, getKey()); InputStream is = new FileInputStream(file); OutputStream out = new FileOutputStream(dest); CipherOutputStream cos = new CipherOutputStream(out, cipher); byte[] buffer = new byte[1024]; int r; while ((r = is.read(buffer)) >= 0) { cos.write(buffer, 0, r); } cos.close(); out.close(); is.close(); }
1、查看操作系統版本和內核版本#uname –a
#more /etc/redhat-release
2、創建相關目錄/usr/src/redhat/SOURCES //存放源代碼,補丁,圖標等文件。
/usr/src/redhat/SPECS //存放用于管理rpm制作進程的spec文件。
/usr/src/redhat/BUILD //解壓后的文件存放在這里。
/usr/src/redhat/RPMS //存放由rpmbuild制作好的二進制包。
/usr/src/redhat/SRPMS //存放由rpmbuild制作好的源碼包。
#mkdir -p /usr/src/redhat/
#cd /usr/src/redhat/
#mkdir SOURCES SPECS BUILD RPMS SRPMS
3、下載Nginx源碼包下載源碼包到SOURCES目錄,不需要解壓
#wget http://nginx.org/download/nginx-1.3.9.tar.gz
4、手工創建SPEC文件由于spec文件是由spec語言編寫的,請注意spec語言的語法。
#cd /usr/src/redhat/SPECS/
#cat < nginx.spec > EOC
Summary: High Performance Web Server Name: nginx Version: 1.3.9 Release: el5 License: GPL Group: Applications/Server Source: http://nginx.org/download/nginx-1.3.9.tar.gz URL: http://nginx.org/ Distribution: Linux Packager: JingSheng <jingsheng1@staff.sina.com.cn> %description nginx [engine x] is a HTTP and reverse proxy server %prep useradd nginx -s /sbin/nologin rm -rf $RPM_BUILD_DIR/nginx-1.3.9 zcat $RPM_SOURCE_DIR/nginx-1.3.9.tar.gz | tar -xvf - %build cd $RPM_BUILD_DIR/nginx-1.3.9 ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/ --with-http_stub_status_module --with-http_ssl_module make %install cd $RPM_BUILD_DIR/nginx-1.3.9 make install %preun if [ -z "`ps aux | grep nginx | grep -v grep`" ];then killall nginx >/dev/null exit 0 fi %files /usr/local/nginx |
#:以#開頭是注釋,rpm會忽略它。
Summary:簡單描述軟件。
Name :定義rpm的名稱。
Version: 定義軟件版本
Release: 發行版本
License: 定義許可證
Group: 軟件分類
Source: 源碼下載地址
URL: 源碼相關網站
Distribution: 發行版系列
Packager: 打包人的信息
scription:軟件詳細描述,可多行
%prep :軟件編譯之前的處理,如解壓。
%build :開始編譯軟件,如make
%install :開始安裝軟件,如make install
%files :指定哪些文件需要被打包,如/usr/local/nginx
%preun :定義卸載之前的動作,如殺掉進程。
5、開始RPM制作在制作RPM包之前,需要安裝必要的編譯工具
#yum install -y gcc rpm-build pcre-devel
開始編譯生成rpm包
# rpmbuild-bb nginx.spec
注意:如果安裝生成報錯,請將安裝過的東東全部去除,再重新打包
# rpm –qpl *.rpm 查看rpm包含哪些
最近一直在折騰linux,centos、redhat裝了又裝,到最后還是裝了redhat。
以前多少接觸過linux,但是都不深入(這次雖然也是皮毛,但是稍微知道了一些東東,現在就賣了),這次從零開始自己折騰linux,確實是被linux折騰了。linux跟windows確實有很多不同,有機會再繼續介紹,這次先說一下使用Xmanager遠程連接Redhat的經歷。
Xmanager不多說了,是一款非常不錯的管理工具。但是,如果要讓Xmanager遠程連接redhat,其實遠程連接,主要還是想要做成跟windows的遠程桌面一樣的東西,圖形界面方便啦!
只是這次配置Xmanager相當痛苦,按照網上各種資料對redhat進行配置,然后不停的reboot,但是,xmanager總是連不上。
這其中,修改的文件包括:
/usr/share/gdm/defaults.conf這個gdm的配置文件,主要是以下內容:
Enable=true
DisplaysPerHost=10
Port=177
還有/etc/inittab文件,主要是首先默認級別為5,這個文件貌似在安裝的時候就已經默認為5了。id:5:initdefault:
然后最后一行的“x:5:respawn:/etc/X11/prefdm -nodaemon”調整為:
x:5:respawn:/usr/sbin/gdm
當然,還得改!
依然是/usr/share/gdm/defaults.conf,在[security]中調整以下的值:
AllowRoot=true
AllowRemoteRoot=true
AllowRemoteAutoLogin=true
如果開著防火墻,那還是要放開177端口,我暫時把防火墻關了。
reboot!reboot總是很重要的!
如果上述調整完成之后,依然無法連接,我就是這樣的情況,連接不上?。。。?!
又隨便找了幾篇文章,也許跟hosts文件有關系哦!
打開/etc/hosts文件一看,空的?。?!
在其中加上127.0.0.1 localhost,reboot,我總是喜歡reboot,這樣比較干凈!比較徹底!
在Xstart中配置好相應的參數,一定要在Commond中選擇“GNOME”,這樣再Run,Xbrowser將久違的redhat桌面打開了!
今天開發的同事,和我說
SecureCRT連接到IDC服務器,老超時斷開,影響工作了
研究了下。
因為客戶端與服務器之間存在路由器,防火墻以及為了本身的安全性,在超過特定的時間后就會把空閑連接斷開。或者是服務器端設置了斷開空閑連接。
解決方法:
既然會斷開超時的空閑連接,那么我們就應該讓客戶端與服務器之間的連接“忙”起來,方法有兩個:
從服務器方面入手:
修改/etc/ssh/sshd_config配置文件 ClientAliveInterval 300(默認為0)
這個參數的是意思是每5分鐘,服務器向客戶端發一個消息,用于保持連接
service sshd reload 生效
從客戶端入手:
上面是配置需要服務器權限,如果沒有服務器權限則可以使用這個方法,其思想是:客戶端向服務器發一個消息,用于保持連接
secureCRT在選項 終端 反空閑 中設置每隔多少秒發送一個字符串,或者是NO-OP協議包
putty:putty -> Connection -> Seconds between keepalives ( 0 to turn off ), 默認為0, 改為300
CentOS 5遠程SSH連接超時設定
操作系統:CentOS 5.6 SSH版本:OpenSSH_4.3p2
網上很多文章都說,遠程SSH連接的超時設定是在/etc/ssh/sshd_config里,使用ClientAliveInterval和ClientAliveCountMax選項,我原來也這么認為的,不過一直沒配置過超時。
今天配置了一下,發現這個是不對的,正確的配置是在/etc/profile里,使用TMOUT選項進行控制,如TMOUT=300,設定超時間隔為300秒。
遠程桌面服務使局域網 (LAN) 上的計算機可以連接到服務器(也稱為遠程計算機)并運行位于服務器上的程序。這可以只需要在1臺機器上安裝應用程序,其他機器共享使用。遠程桌面連接使用遠程桌面服務技術,使一臺計算機可遠程控制另一臺計算機。
windows 遠程終端服務是單用戶的,也就是說通過遠程登錄到服務器時,服務器本地將黑屏。如何做到不管用本地登錄還是遠程登錄,同一時刻容許多個用戶操作服務器計算機。
首先:
要安裝工具包,需要從微軟下載(遠程服務器管理工具 http://www.microsoft.com/downloads/zh-cn/details.aspx?displaylang=zh-cn&FamilyID=7d2f6ad7-656b-4313-a005-4e344e43997d ),安裝升級包后,在控制面板--程序和功能--打開或關閉WINDOWS功能---遠程服務器管理工具--角色管理工具--遠程桌面服務工具,選中前面的選擇框。
在開始--命令框輸入cmd,在彈出的Dos界面輸入netstat -na ,如果出現 3389 端口,就說明遠程終端已經啟動了。
然后:
1, 下載 補丁UniversalTermsrvPatch,功能就是去除單用戶登陸的限制,允許多人多用戶同時并行訪問登錄。
2, 根據你的系統運行對應的程序:
32位系統請運行 UniversalTermsrvPatch-x86.exe;
64位系統請運行 UniversalTermsrvPatch-x64.exe。
3, 需要管理員權限。右鍵點程序,選擇以管理員身份運行。
4, 破解后需要重啟生效。
5, 備份文件: \windows\system32\termsrv.dll.backup.(如果想還原設置 請將備份文件改名為termsrv.dll替換破解的文件即可)
遠程桌面的其它可能的設置:
運行gpedit.msc打開組策略,計算機配置-管理模板-Windows組件-遠程桌面服務-遠程桌面會話主機-連接-“限制連接數量”,如果將狀態設置為“禁用”或“未配置”,則在“組策略”級別上不強制限制連接的數量。
在Windows 2003系統上的遠程桌面實際上就是終端服務,雖然遠程桌面最初在Windows XP上就已經存在,但由于Windows XP的遠程桌面功能,只能提供一個用戶使用計算機,因此使用率并不高。而Windows 2003提供的遠程桌面功能則可供多用戶同時使用,在其上可以運行程序、保存文件和使用網絡資源,在很多方面可以像使用終端一樣,并且在管理及配置方面比原來的終端服務更方便。要更好地發揮遠程桌面的作用就要對遠程桌面進行相應的配置。 www.2cto.com
組策略編譯器(gpedit.msc)配置
使用組策略編譯器配置用戶遠程連接數以及用戶會話數,
1,“開始”—>“運行”輸入gpedit.msc回車打開組策略編譯器->“計算機配置”->“管理模板”->“
windows組件”->“終端服務”,右側鼠標右鍵選擇“限制連接數”打開屬性,選擇“設置”—>選擇“已啟用”, “TS 允許的最大連接數”填寫你所需要的數量,例如:20。確定完成最大連接數限制設置。雙擊“會話”->選擇“為斷開的會話設置時間限制”右鍵選擇屬性-》“設置”->xuanze選擇“已啟用”-》“結束斷開連接會話”填寫合適的時間,五分鐘為好。
終端服務配置(Tscc.msc)的使用
使用終端服務配置可以更改本地計算機上該連接的屬性、添加新連接或設置服務器。打開“控制面板”—〉“管理工具”,單擊“終端服務器配置”啟動終端服務配置窗口。
1 單擊左邊窗口的“連接”項,右邊窗口即出現可選的RDP-TCP連接,右擊“RDP-TCP”,選“屬性”出現RDP-Tcp屬性對話框,主要配置有:
(1)連接數設置:可在“網卡”選項中更改。設置更多地連接數可使更多的用戶同時登錄服務器。默認最多同時兩個用戶連接,如果想要使3個以上的用戶同時使用遠程桌面功能,則必須安裝終端服務,安裝后就可以任意設定用戶數制。 www.2cto.com
安裝終端服務可通過Windows的“添加/刪除程序”—〉“添加/刪除Windows組件”中,選中“終端服務器”來添加,根據需要完成相應配置,完成終端服務安裝,重啟機器生效。
由于每個用戶連接遠程桌面后最小占用12MB左右的內存,因此可根據服務器內存大小來設定用戶數,一般用戶數不要太多,以免影響性能。如256MB內存可設定用戶數8個左右,512MB內存可設定20~30個。
(2)調整顏色分辨率(顏色深度):在“客戶端設置”項中。限制顏色深度可以增強連接性能,尤其是對于慢速鏈接,并且還可以減輕服務器負載。“遠程桌面”連接的當前默認最大顏色深度設置為 16 位。
選中“顏色深度最大值”,可修改限定的最大顏色深度為8、15、16或24位。若不選中,則使用登錄的客戶端顏色設置。
(3)讓客戶自動登錄:在“登錄設置”選項卡上。這對普通應用非常方便,可加快登錄速度,提高服務效率。
要使用自動登錄,需選中“總是使用下列登錄信息”,在“用戶名”中,鍵入允許自動登錄到服務器的用戶的名稱,在“密碼”和“確認密碼”中,鍵入該用戶的密碼。 這樣客戶端連接時將不用再輸入用戶名和密碼,而自動進入Windows 2003桌面(注意:若此后再有用戶登錄,那么原來的連接將被斷開)。若輸入不完整,則登錄時還會要求輸入用戶名或密碼。
如要想更安全的使用服務器,則應選中“總是提示密碼”以指定該用戶在登錄到服務器之前始終要被提示輸入密碼,從而限制客戶端的自動登錄。
(4)對連接自動限制管理:單擊“會話”項來設定。主要用來設定超時的限制,以便釋放會話所占用的資源,“結束已斷開的會話”和“空閑會話限制”的時間,一般應用設為5分鐘較好。對安全性要求高的也可設定“活動會話限制”的時間。“達到會話限制或者連接被中斷時”下的選項,最好選“結束會話”,這樣連接所占的資源就會被釋放。
(5)設置加密級別:單擊“常規”項,可指定在終端服務會話期間,對于客戶端與遠程計算機之間發送的所有數據是否強制加密級別。分四個級別:符合 FIPS(最高級別的加密)、高(加密數據經過強 128 位加密。)、客戶端兼容(加密數據經過客戶端支持的最大密鑰強度加密)和低(從服務器發送到客戶端的數據將不會被加密)。
(6)啟用終端客戶音頻:在“客戶端設置”項下邊,默認為禁用,以節約服務器資源。當用戶少時 ,單擊“音頻映射”去掉被禁用的選項,使終端客戶能使用多媒體設備。當然,客戶端計算機也必須裝有聲卡。 www.2cto.com
如果有多個用戶連接到相同的服務器,則會以同一個用戶名登錄。
(7)啟用驅動器映射;此項可方便終端與服務器磁盤間文件的相互傳送。啟用后本地驅動器將作為網絡驅動器顯示在終端中。
同樣還有打印機、剪貼板、com端口等也可設置映射。但每設置一個都要占用一定的系統資源;所以,一般用戶最好禁用。
(8)服務器的安全設置:在“權限”項,可選擇組或用戶,限制其對終端的配置權限。另外,由于只有Administrators 和 Remote Desktop Users 組的成員可以使用終端服務連接與遠程計算機連接,所以可對不同用戶分組管理,對于要求安全性高的,可利用NTFS分區設置不同用戶的權限。
“服務器設置”—》“限制每個用戶使用一個會話”右鍵選擇屬性,去除“限制每個用戶使用一個會話”的勾選,確認完成設置。
整個多用戶的遠程連接設置到此結束。
在遠程管理方面,Windows Server 2003系統一個最明顯的進步就是增加了“遠程桌面”功能。這樣一來,從Windows 2000保留下來的終端服務似乎就顯得有點多余了。然而情況并不是這樣,因為在不安裝“終端服務器”的前提下,“遠程桌面”功能的可管理性比較有限。搭建終端服務器以后,對Windows 2000 Server和Windows Server 2003系統的遠程管理操作將更加靈活。
在Windows Server 2003(SP1)中默認沒有安裝終端服務器組件,用戶需要手動添加該組件。安裝終端服務組件的步驟如下所述:
步驟/方法
第1步,在開始菜單中依次單擊“控制面板”→“添加或刪除程序”菜單項,打開“添加或刪除程序”窗口。然后單擊“添加/刪除Windows組件”按鈕,打開“Windows組件向導”對話框。在“組件”列表中選中“終端服務器”復選框,如圖2008112107所示。
圖2008112107 選中“終端服務器”復選框
第2步,打開“配置警告”對話框,提示用戶關于IE安全配置方面的信息。因為配置終端服務器的目的主要是為了遠程管理Windows Server 2003服務器,對于瀏覽Internet方面的要求并不高,因此直接單擊“是”按鈕。返回“Windows組件”對話框,選中“終端服務器授權”復選框,并單擊“下一步”→“下一步”按鈕即可,如圖2008112108所示。
圖2008112108 “配置警告”對話框
第3步,在打開的為應用程序兼容性選擇默認權限對話框中列出兩種安裝模式,即“完整安全模式”和“寬松安全模式”。選擇不同的模式會應用到Windows Server 2003系統的不同安全級別。選中“完整安全模式”單選框,并單擊“下一步”按鈕,如圖2008112109所示。
圖2008112109 選中“完整安全模式”單選框
第4步,打開指定終端服務器許可證服務器對話框,提示用戶該終端服務器必須在120天內與Windows Server 2003終端服務器許可證服務器連接才能保證正常使用。由于在“Windows組件”對話框中選中了“終端服務器授權”復選框,則意味著這臺Windows Server 2003終端服務器將同時作為許可證服務器。因此選中“使用下列許可證服務器”單選框,并在編輯框中輸入這臺服務器的名稱或IP地址。設置完畢單擊“下一步”按鈕,如圖2008112110所示。
圖2008112110 輸入許可證服務器IP地址
第5步,在打開的終端服務器授權模式對話框中,要求用戶指定這臺終端服務器使用的授權模式。選中“每設備授權模式”單選框,并單擊“下一步”按鈕,如圖2008112111所示。
圖200811211 選中“每設備授權模式”單選框
第6步,打開“終端服務器授權安裝程序”對話框,要求用戶選擇安裝許可證服務器數據庫的路徑。一般可以保持默認路徑,并單擊“下一步”按鈕,如圖2008112112所示。
圖2008112112 選擇許可證服務器數據庫路徑
第7步,Windows組件向導開始安裝終端服務器和終端服務器授權組件,在安裝過程中要求提供Windows Server 2003(SP1)系統的安裝光盤或指定安裝程序路徑。完成安裝后單擊“完成”按鈕關閉Windows組件向導,并按照提示重新啟動計算機。
package com;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* SAX解析XML,事件驅動
* 只有兩種節點
* Element Node元素節點
* Text Node文本節點
*/
public class SaxResolveXML {
public static void main(String[] args){
try {
SaxResolveXML saxResolveXML = new SaxResolveXML();
InputStream inStream = new FileInputStream("D:\\xml.xml");
List<Person> list = saxResolveXML.getList(inStream);
for(Person person : list){
System.out.println(person.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public List<Person> getList(InputStream inStream) throws Exception {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parse = factory.newSAXParser();
SaxResolve saxResolve = new SaxResolve();
parse.parse(inStream, saxResolve);
inStream.close();
return saxResolve.getPerson();
}
private final class SaxResolve extends DefaultHandler {
private List<Person> list = null;
private Person person = null;
private String tag = null;
public List<Person> getPerson(){
return list;
}
//開始文檔事件
public void startDocument() throws SAXException {
//初始化
list = new ArrayList<Person>();
}
//開始元素語法事件 參數說明:命名空間、不帶命名空間的標簽名、含有命名空間前綴的標簽名、屬性
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
if("person".equals(qName)){
person = new Person();
person.setId(Integer.parseInt(atts.getValue(0)));
}
tag = qName;
}
//觸發文本節點事件 參數說明:整個xml內容的字符串、當前讀到文本類型的開始位置、當前讀到文本的數據長度
public void characters(char[] ch, int start, int length)
throws SAXException {
if(tag != null){
String data = new String(ch, start, length);
if(tag.equals("name")){
person.setName(data);
}else if(tag.equals("age")){
person.setAge(Integer.parseInt(data));
}
}
}
//結束元素語法事件 參數說明:命名空間、不帶命名空間的標簽名、含有命名空間前綴的標簽名
public void endElement(String uri, String localName, String qName)
throws SAXException {
if("person".equals(qName)){
list.add(person);
person = null;
//對象設為空
}
tag = null;
}
}
/*//開始文檔事件
public void startDocument() throws SAXException {
}
//開始元素語法事件 參數說明:命名空間、不帶命名空間的標簽名、含有命名空間前綴的標簽名、屬性
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
}
//觸發文本節點事件 參數說明:整個xml內容的字符串、當前讀到文本類型的開始位置、當前讀到文本的數據長度
public void characters(char[] ch, int start, int length)
throws SAXException {
}
//結束元素語法事件 參數說明:命名空間、不帶命名空間的標簽名、含有命名空間前綴的標簽名
public void endElement(String uri, String localName, String qName)
throws SAXException {
}
public void endDocument() throws SAXException {
}
public void endPrefixMapping(String prefix) throws SAXException {
}
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
}
public void processingInstruction(String target, String data)
throws SAXException {
}
public void setDocumentLocator(Locator locator) {
}
public void skippedEntity(String name) throws SAXException {
}
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
}*/
}
xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="1">
<name>liming</name>
<age>23</age>
</person>
<person id="2">
<name>lixiangmei</name>
<age>24</age>
</person>
</persons>

export LD_LIBRARY_PATH=/usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/runtime/glnx86:/usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/sys/os/glnx86:/usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/sys/java/jre/glnx86/jre/lib/i386/native_threads:/usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/sys/java/jre/glnx86/jre/lib/i386/server:/usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/sys/java/jre/glnx86/jre/lib/i386
export XAPPLRESDIR=/usr/local/MATLAB/MATLAB_Compiler_Runtime/v716/X11/app-defaults
把以上兩行加入系統的環境變量里面:具體操作如下:
vi /etc/profile
按 i 就可以編輯這個文件,開始復制
把上面兩行拷貝到這個文件的最下面然后保存就可以了!
保存退出時先按一下“ESC”,然后再按“:wq”就可以保存退出了!