歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

linux常用命令-part3

中文怎麼發音
Ubuntu 有奔頭,烏版圖
Fedora 費德勒,菲朵拉
Debian 迪扁,德槟
CentOS 桑托斯 森頭斯

Linux發展歷史:
1) RedHat ---> 1.RedHat
2.CentOS
3.Fedora 桌面圖形系統

rpm, yum 命令


2) Debian ---> 1.Debian
2.Ubuntu 桌面圖形系統
3.Knoppix

apt-get, dpkg

3) Slackware --->


================================
使用find和wc命令統計代碼行數
================================
wc -l `find . -name "*.js" | xargs`


查看當前目錄下文件的個數 ls -l | grep "^-" | wc -l
查看當前目錄下文件的個數,包括子目錄裡的。
ls -lR| grep "^-" | wc -l
查看某目錄下文件夾(目錄)的個數,包括子目錄裡的。
ls -lR| grep "^d" | wc -l


ls -l 長列表輸出該目錄下文件信息(注意這裡的文件,不同於一般的文件,可能是目錄、鏈接、設備文件等)
grep "^-" 這裡將長列表輸出信息過濾一部分,只保留一般文件,如果只保留目錄就是 ^d
wc -l 統計輸出信息的行數,因為已經過濾得只剩一般文件了,所以統計結果就是一般文件信息的行數,又由於一行信息對應一個文件,所以也就是文件的個數


=======================================
KB與KIB,free命令輸出的是KB,不是KIB
=======================================
KB:
kilobyte(千字節),常寫作KB或K,是一種資訊計量單位,現今通常在標示內存等具有一般容量的儲存媒介之儲存容量時使用。
1KB = 1,000Byte
1MB = 1,000KB
1GB = 1,000,000(106)KB
1TB = 1,000,000,000(109)KB
KIB:
Kibibyte是一種資訊計量單位,代表1024字節,即210字節,一般簡稱為KiB。Kibibyte是自來英文 kilo binary byte 的縮寫,意思為“千位二進制字節”。
1KiB = 1,024Byte
1MiB = 1,024KiB
1GiB = 1,024MiB = 1,048,576 (10242)KiB
1TiB = 1,024GiB = 1,073,741,824 (10243)KiB
Byte:
字節,英文名稱是Byte。Byte是Binary Term的縮寫。一個字節代表八個比特。它是通常被作為計算機信息計量單位,不論被存儲數據的類型為何。
Bit:
位(英語:Bit),亦稱二進制位,指二進制中的一位,是信息的最小單位。Bit是Binary digit(二進制數位)的縮寫
1個字節(Byte)——8個位(bit)
1個字(Word)——16個位(bit)


================================
configure,make,make install
================================
這裡也簡單介紹一下在Linux/Unix下安裝軟件的源碼三部曲,在後面我們會經常看到它們的身影。
./configure
make
make install


./configure是用來檢查環境變量及配置編譯選項的,
make是用來將源代碼編譯成二進制文件的,
make install則會將make編譯出來的文件安裝到指定位置(或默認位置)。


tail -f SystemOut.log 可以實時觀測 最新產生的log,會不停的刷新屏幕。
tar -zvxf v4.tar 解壓
ll 並不是linux下一個基本的命令,它實際上是ls -l的一個別名
ll -a 顯示隱藏目錄。
dmesg|less 查詢linux內核啟動時的信息
less /var/log/dmesg




在linux遞歸刪除某個文件夾(svn)的命令:
find . -name ".svn" -type d | xargs rm -rf 或者
find . -name ".svn" -type d -print -exec rm -rf {} ;


(1) "."表示從當前目錄開始遞歸查找。
(2) “ -name "svn" "根據名稱來查找。
(3) " -type d "查找的類型為目錄
(4) "-print" 輸出查找的文件目錄名
(5) 最主要的是是-exec了,-exec選項後邊跟著一個所要執行的命令,表示將find出來的文件或目錄執行該命令。
exec選項後面跟隨著所要執行的命令或腳本,然後是一對兒{},一個空格和一個/,最後是一個分號。


find . -name "*.o" | xargs rm -f
可以通過管道命令來操作,先find出主目錄下想刪除的文件,然後通過“xargs”這個構造參數列表並運行命令。
find named/ -name *.bak | xargs rm -f


find . -name ".svn" -type d | xargs rm -rf


==============================================
管道和命令替換的區別是:
==============================================
管道: 管道符號"|"左邊命令的輸出作為右邊命令的輸入
命令替換: 將命令替換符"``"中命令的輸出作為其他命令相應位置的參數


# pstree -p `ps -e | grep server | awk '{print $1}'` | wc -l
這裡利用了管道和命令替換,
就是說用``括起來的命令會優先執行,然後以其輸出作為其他命令的參數,
上述就是用 ps -e | grep server | awk '{print $1}' 的輸出(進程號),作為 pstree -p 的參數


--------------------
nohup 命令
--------------------
如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。
nohup就是不掛斷的意思( no hang up)。
用途 LINUX命令用法,不掛斷地運行命令。


nohup Command [ Arg ... ] [ & ]


nohup 命令運行由 Command參數和任何相關的 Arg參數指定的命令,忽略所有掛斷(SIGHUP)信號。在注銷後使用 nohup 命令運行後台中的程序。
要運行後台中的 nohup 命令,添加 & ( 表示“and”的符號)到命令的尾部。


如果不將 nohup 命令的輸出重定向,輸出將附加到當前目錄的 nohup.out 文件中。如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。
如果沒有文件能創建或打開以用於追加,那麼 Command 參數指定的命令不可調用。如果標准錯誤是一個終端,
那麼把指定的命令寫給標准錯誤的所有輸出作為標准輸出重定向到相同的文件描述符。


如果使用nohup命令提交作業,那麼在缺省情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中,除非另外指定了輸出文件:
nohup command > myout.file 2>&1 &
在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
2>&1是將標准錯誤(2)重定向到標准輸出(&1),標准輸出(&1)再被重定向輸入到myout.file文件中。
使用 jobs 查看任務。
使用 fg %n 關閉。


--------------------
nohup 與&區別
--------------------
1)普通的一些程序,& 結尾,終端關閉,那麼程序也被關!
2)單是&, 後台運行,你關掉終端會停止運行
3)nohup command & 後台運行,你關掉終端也會繼續運行
4)一個很明顯的區別是,&得後台,是終端關閉,自己也會退出,而nohup 則相當於一個獨立的後台進程。
5)nohup執行的話,不管終端機怎麼操作,後台會一直執行 但是如果單&的話,終端機突然掉電或是拔網線時,後台會被堵死,無法運行


Unix/Linux下一般想讓某個程序在後台運行,很多都是使用 & 在程序結尾來讓程序自動運行。比如我們要運行mysql在後台:
/usr/local/mysql/bin/mysqld_safe –user=mysql &
但是我們很多程序並不象mysqld一樣可以做成守護進程,可能我們的程序只是普通程序而已,一般這種程序即使使用 & 結尾,如果終端關閉,
那麼程序也會被關閉。為了能夠後台運行,我們需要使用nohup這個命令,比如我們有個start.sh需要在後台運行,並且希望在後台能夠一直運行,那麼就使用nohup:
nohup /root/start.sh &
在shell中回車後提示:
[~]$ appending output to nohup.out
原程序的的標准輸出被自動改向到當前目錄下的nohup.out文件,起到了log的作用。
但是有時候在這一步會有問題,當把終端關閉後,進程會自動被關閉,察看nohup.out可以看到在關閉終端瞬間服務自動關閉。
咨詢紅旗Linux工程師後,他也不得其解,在我的終端上執行後,他啟動的進程竟然在關閉終端後依然運行。
在第二遍給我演示時,我才發現我和他操作終端時的一個細節不同:
他是在當shell中提示了nohup成功後還需要按終端上鍵盤任意鍵退回到shell輸入命令窗口,然後通過在shell中輸入exit來退出終端; **************重點****
而我是每次在nohup執行成功後直接點關閉程序按鈕關閉終端。所以這時候會斷掉該命令所對應的session,導致nohup對應的進程被通知需要一起shutdown。
這個細節有人和我一樣沒注意到,所以在這兒記錄一下了。




AIX, Linux下將腳本放到後台執行——加nohup與不加nohup的區別:

1)對於Linux下來說,當在系統上執行下面的命令,將test.sh腳本放到後台執行
/location/test.sh &
此時,分兩種情況考慮問題,
一:繼續執行exit命令退出當前session, 則 test.sh這個腳本仍然在Linux系統裡面運行,
二:不執行exit命令退出,而直接斷開當前連接,則 test.sh腳本會立即退出


如果使用下面命令,將test.sh腳本放到後台執行
nohup /location/test.sh &
則,針對上面的兩種情況來說,test.sh腳本都會繼續在系統上運行,所以,不管什麼時候如果想把腳本放到後台執行,都需要使用nohup 和 & 命令。


2)對於AIX下來說,當在系統上執行下面的命令,將test.sh腳本放到後台執行
/location/test.sh &
此時,按照上面Linux系統下的兩種情況來看
一:繼續執行exit命令退出當前session, 第一次會提示"You have running jobs", 再次執行exit後,test.sh腳本也將停止運行
二:不執行exit命令退出,而直接斷開當前連接,則 test.sh腳本會立即退出


如果使用下面命令,將test.sh腳本放到後台執行
nohup /location/test.sh &
則針對上面的兩種情況來說,test.sh腳本都會繼續在系統上運行。


------------------------------------------------
查找目錄下的所有文件中是否含有某個字符串
------------------------------------------------
find .|xargs grep -ri "IBM"
查找目錄下的所有文件中是否含有某個字符串,並且只打印出文件名
find .|xargs grep -ri "IBM" -l
1.正則表達式
(1)正則表達式一般用來描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(稱為元字符,如/、*、?等)組成。
(2)基本元字符集及其含義
^ :只匹配行首。 如^a 匹配以a開頭的行abc,a2e,a12,aaa,......
$ :只匹配行尾。 如^a 匹配以a結尾的行bca,12a,aaa,.......
* :匹配0個或多個此單字符。 如(a)* 匹配 空,a,aa,aaa,....
[] :只匹配[]內字符。可以是一個單字符,也可以是字符序列,用","將裡面要匹配的不同字符串分開。也可以使用-來表示[]內字符序列的范圍,如[1-5]表示[12345]
\ :只用來屏蔽一個元字符的特殊含義。 如\*,\',\",\|,\+,\^,\. 等
.:(點)只匹配任意單字符。
pattern\{n\}:只用來匹配前面pattern出現的次數.n為次數。如a\{2\}匹配aa.
pattern\{n,\}:含義同上,但次數最少為n.如a\{2,\}匹配aa,aaa,aaaa,.....
pattern\{n,m\}:含義同上,但次數在n和m之間。如a\{2,4\}匹配aa,aaa,aaaa三個
(3)舉例說明:
^$ :匹配空行
^.$ :匹配包含一個字符的行
\*\.pas :匹配以*.pas結尾的所有字符或文件
[0123456789]或[0-9] :假定要匹配任意一個數字
[a-z] :任意小寫字母
[A-Za-z] :任意大小寫字母
[S,s] :匹配大小寫S
[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} :匹配IP地址 [0-9]\{3\}三個0-9組成的字符串;\. :匹配點(注意這裡點是特殊的字符,所以要用"\"來屏蔽其含義)
2.find介紹 (1)查找具有某些特征文件的命令,可遍歷當前目錄甚至於整個文件系統來查看某些文件或目錄,其遍歷大的文件系統時一般放在後台執行。
(2)find命令的一般形式
find pathname -options [-print -exec -ok]
-pathname :find命令所查找的目錄路徑。如用"."來表示當前的目錄,用/來表示系統根目錄
-print :find命令將匹配的文件輸出到標准輸出
-exec: find命令對匹配的文件執行該參數所給出的shell命令,相應的命令形式為
'command'{} \; (注意{}和\之間的空格)
-ok 和 -exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行。
options有如下幾種:
-name :按照文件名查找文件
-perm :按照文件權限來查找文件
-user :按照文件屬主來查找文件
-group :按照文件所屬的組來查找文件
-mtime -n +n 按照文件的更改時間來查找文件,-n表示文件更改時間距現在n天以內,+n表示文件更改時間距現在n天以前。find命令還有-atime 和-ctime選項,但它們都和-mtime選項相似。
-size n[c]查找文件長度為n塊的文件,帶有c時表示文件長度以字節計。
-nogroup 查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在
-newer file1 !file2查找更改時間比文件file1新但比文件file2舊的文件
-depth 先查找指定目錄有無匹配文件,若無則再在子目錄中查找
-type 查找某一類型的文件,如
b :塊設備文件
d:目錄
e:字符設備文件
p;管道文件
l:符號鏈接文件
f:普通文件
(3)find命令舉例
find -name "*.txt" -print 查找txt結尾的文件並輸出到屏幕上
find /cmd ".sh" -print 查找/cmd目錄下所有sh文件,並輸出
find . -perm 755 -print 查找當前目錄下權限為755的文件,並輸出
find `pwd` -user root -print 查找當前目錄下屬主為root的文件,並輸出
find ./ -group sunwill -print 查找當前目錄下所屬主是sunwill的文件
find /var -mtime -5 -print 查找/var目錄下更改時間為5天內的所有文件
find /var -mtime +5 -print 查找/var目錄下更改時間為5天以前的所有文件
find /var -newer "myfile1" ! -newer "myfile2" -print 查找/var目錄下比myfile1新,但是比myfile2舊的所有文件。
find /var -type d -print 查找/var目錄下所有目錄
find /var -type l -print 查找/var目錄下所有的符號鏈接文件。
find . -size +1000000c -print 查找當前目錄下大於1000000字節的文件
find / -name "con.file" -depth -print 查找根目錄下有無"con.file",若無則在其子目錄中查找
find . -type f -exec ls -l {} \; 查找當前目錄下是否有普通文件,若有則執行ls -l
(4)xargs命令
在 使用find命令的-exec選項處理匹配到的文件時,find命令將所有匹配到的文件一起傳遞給exec。不幸的是,有些系統對能夠傳遞給exec的命 令長度有限制,這樣find命令運行幾分鐘之後就算出現溢出錯誤。錯誤信息通常是“參數列太長”或“參數列溢出”。這就是xargs的用處所在,特別是與 find命令一起使用,exec會發起多個進程,而xargs會多個,只有一個
find ./ -perm -7 -print | xargs chmod o-w 查找權限為7的文件並傳遞給chmod處理
3.grep介紹 (1)grep 的一般格式為 grep [options] 基本正則表達式 [文件]
字符串參數最好采用是雙引號括,一是以防被誤解為shell命令,二是可以用來查找多個單詞組成的字符串
-c:只輸出匹配行的記數
-i:不區分大小寫(只適用於單個字符)
-h:查詢多個文件時不顯示文件名
-H:只顯示文件名
-l:查詢多文件時只輸出包含匹配字符的文件名
-n:只顯示匹配行及其行號
-s:不顯示不存在或無匹配文本的錯誤信息。
-v:顯示不包含匹配文本的所有行。
(2)舉例說明:
grep ^[^210] myfile 匹配myfile中以非2、1、0開頭的行
grep "[5-8][6-9][0-3]" myfile 匹配myfile中第一位為5|6|7|8,第二位6|7|8|9,第三位為0|1|2|3的三個字符的行
grep "4\{2,4\}" myfile 匹配myfile中含有44,444或4444的行
grep "\?" myfile匹配myfile中含有任意字符的行
(3)grep命令類名
[[:upper:]] 表示[A-Z]
[[:alnum:]] 表示[0-9a-zA-Z]
[[:lower:]] 表示[a-z]
[[:space:]] 表示空格或者tab鍵
[[:digit:]] 表示[0-9]
[[:alpha:]] 表示[a-zA-Z]
如:grep "5[[:digit:]][[:digit:]]" myfile 匹配myfile中含有5開頭接下去兩位都是數字的行。
4.awk介紹
可以從文件或字符串中基於指定規則浏覽和抽取信息,是一種自解釋的變成語言。
(1)awk命令行方式 awk [-F filed-spearator] 'command' input-files
awk腳本:所有awk命令插入一個文件,並使awk程序可執行,然後用awk命令解釋器作為腳本的首行,以便通過鍵入腳本名稱來調用它。awk腳本是由各種操作和模式組成。
模式部分決定動作語句何時觸發及觸發事件。(BEGIN,END)
動作對數據進行處理,放在{}內指明(print)
(2)分隔符、域和記錄
awk執行時,其浏覽域標記為$1,$2,...$n.這種方法成為域標識。$0為所有域。
(3)舉例說明:
awk '{print $0}' test.txt |tee test.out 輸出test.txt中所有行$0表示所有域
awk -F : '{print $1} test.txt |tee test.out' 同上。。只是分隔符為":"
awk 'BEGIN {print "IPDate\n"}{print $1 "\t" $4} END{print "end-of-report"}' test.txt
開始時打印“IPDate”結束時打印“end-of-report”中間打印主體信息,比如總共匹配三條信息,則輸出如下:
IPDate
1 first
2 second
3 third
end-of-report
(4)匹配操作符 ~ 匹配,!~ 不匹配
cat test.txt |awk '$0~/210.34.0.13/' 匹配test.txt中為210.34.0.13的行
awk '$0!~/210.34.0.13' test.txt 匹配test.txt中不是210.34.0.13的行
awk '{if($1=="210.34.0.13") print $0}' test.txt 匹配 test.txt中第一個域為210.34.0.13的行。
5.sed介紹 sed不與初始化文件打交道,它操作的只是一個拷貝,然後所有的改動如果沒有重定向到一個文件,將輸出到屏幕。
sed是一種很重要的文本過濾工具,使用一行命令或者使用管道與grep與awk相結合。是一種非交互性文本流編輯。
(1)調用sed的三種方式
使用sed命令行格式為:sed [options] sed命令 輸入文件
使用sed腳本文件格式為:sed[options] -f sed腳本文件 輸入文件
sed腳本文件[options] 輸入文件
--不管是使用shell命令行方式或腳本文件方式,如果沒有指定輸入文件,sed從標准輸入中接受輸入,一般是鍵盤或重定向結果。
(2)sed 命令的options如下
-n:不打印
-c:下一命令是編輯命令
-f:如果正在調用sed腳本文件
(3)sed在文件中查詢文本的方式
--使用行號,可以是一個簡單的數字,或是一個行號的范圍
--使用正則表達式
(4)讀取文本的方式
x x為一行號
x,y 表示行號范圍從x到y
/pattern/ 查詢包含模式的行
/pattern/pattern/ 查詢包含兩個模式的行
pattern/,x 在給定的行號上查詢包含模式的行
x,/pattern/ 通過行號和模式查詢匹配行
x,y! 查詢不包含指定行號x和y的行
(5)基本sed編輯命令
p 打印匹配行
d 刪除匹配行
= 顯示文件行號
a\ 在定位行號後附加新文本信息
i\ 在定位行號後插入新文本信息
c\ 用新文本替換定位文本
s 使用替換模式替換相應模式
r 從另一個文件中讀文件
w 寫文本到一個文件
q 第一個模式匹配完成後推出或立即退出
l 顯示與八禁止ASCII代碼等價的控制字符
{} 在定位行執行的命令組
n 從另一個文件中讀文本下一行,並附加在下一行
g 將模式2粘貼到/pattern n/
y 傳送字符
(6)舉例說明:
sed -n '2p' test.txt 打印第二行的信息(注意:-n是不打印不匹配的信息,若沒加-n,則打印文件的所有信息而不是匹配信息)
sed -n '1,4p' test.txt 打印第一行到第四行的信息
sed -n '/los/p' test.txt模式匹配los,並打印出來
sed -n '2,/los/p' test.txt 從第二行開始。。知道匹配第一個los
sed -n '/^$/p' test.txt 匹配空行
sed -n -e '/^$/p' -e '/^$/=' test.txt 打印空行及行號
sed -n '/good/a\morning' test.txt 在匹配到的good後面附加morning
sed -n '/good/i\morning' test.txt 在匹配到的good前面插入morning
sed -n '/good/c\morning' test.txt 將匹配到的good替換成morning
sed '1,2d' test.txt 刪除第1和2行
sed 's/good/good morning/g' test.txt 匹配good並替換成goodmorning
send 's/good/& hello /p' test.txt 匹配到good就在其後面加上hello
send 's/good/ hello &/p' test.txt 匹配到good就在其前面加上hello
6.合並與分割(sort,uniq,join,cut,paste,split) (1)sot命令
sort [options] files 許多不同的域按不同的列順序排序
-c 測試文件是否已經排序
-m 合並兩個排序文件
-u 刪除所有同樣行
-o 存儲sort結果的輸出文件名
-t 域分隔符,用非空格或tab開始排序
+n :n 為列號,使用此列號開始排序
-n 指定排序是域上的數字分類項
-r 比較求逆
sort -c test.txt 測試文件是否分類過
sort -u test.txt 排序並合並一樣的行
sort -r test.txt 以相反的順序排列
sort -t "/" +2 test.txt 以"/"分隔,第二個域開始分類
(2)uniq命令
uniq [options ] files 從一個文本文件中去除或禁止重復行
-u 只顯示不重復行
-d 只顯示有重復數據行,每種重復行只顯示其中一行
-c 打印每一重復行出現次數
-f :n為數字,前n個域被忽略
uniq -f 2 test.txt 忽略前2個域
(3)join 命令
join [options] file1 file2 用來將來自兩個分類文本文件的行連在一起
-an,n為一數字,用於連接時從文件n中顯示不匹配行
-onm ,連接域,n為文件號,m為域號
-jnm,n為文件號,m為域號,使用其他域作連接域
-t ,域分隔符。用來設置非空格或tab鍵的域分隔符。
(4)split命令
split -output_file_size intput_filename output_filename
用來將大文件分割成小文件。
-b n,每個分割文件的大小n
-C n,每個分割文件一行最多n字節
-l n,每個分割文件的行數
-n,同-l n
split -10 test.txt 將test.txt分割成10行的小文件
(5)cut 命令
cut -c n1-n2 filename 顯示每行從開頭算起 n1 到 n2 的文字。
cut -c 3-5 test.txt 顯示test.txt中每行從第3到第5個字符


==============================================
linux下查看線程數的幾種方法
==============================================
1、cat /proc/${pid}/status
2、pstree -p ${pid}
3、top -p ${pid} 再按H 或者
直接輸入 top -bH -d 3 -p ${pid}
top -H手冊中說:-H : Threads toggle
加上這個選項啟動top,top一行顯示一個線程。否則,它一行顯示一個進程。
4、ps xH手冊中說:H Show threads as if they were processes
這樣可以查看所有存在的線程。
5、ps -mp <PID>手冊中說:m Show threads after processes
這樣可以查看一個進程起的線程數。


=======================
linux環境查看命令:
=======================
CPU: cat /proc/cpuinfo, top
進程: ps -ef
內存: cat /proc/meminfo, top, free
磁盤: df -sh, df -ht,df -lh,
磁盤分區情況: sfdisk -l, fdisk -l, parted, cat /proc/partitions,
IO: iostat -x 1
操作系統: uname -a, cat /proc/version,more /etc/issue


[root@oam-nas ~]# more /etc/issue
Red Hat Enterprise Linux Server release 6.1 (Santiago)
Kernel \r on an \m


[root@oam-nas ~]# uname -a
Linux oam-nas 2.6.33.20 #1 SMP PREEMPT Wed Apr 3 17:07:07 CST 2013 x86_64 x86_64 x86_64 GNU/Linux


[root@oam-nas ~]# more /proc/version
Linux version 2.6.33.20 (root@oam-nas) (gcc version 4.4.5 20110214 (Red Hat 4.4.5-6) (GCC) ) #1 SMP PREEMPT Wed Apr 3 17
:07:07 CST 2013


如何知道自己的Linux發行版本的所支持的類型有哪些:
以超級用戶權限登陸Linux,進入/lib/modules/2.4.21-4.EL/kernel/fs/目錄
執行命令(不同Linux發行版本 的Fs目錄有些不同你可以用查找FS文件夾的方法找到它):
(abigbadboy的內核版本是2.6.18-164.el5)
[root@rh root]# cd /lib/modules/2.6.18-164.el5/kernel/fs/
[root@localhost fs]# ls
autofs4 cramfs ext3 fscache hfsplus lockd nfsd vfat
cachefiles dlm ext4 fuse jbd msdos nls
cifs ecryptfs fat gfs2 jbd2 nfs squashfs
configfs exportfs freevxfs hfs jffs2 nfs_common udf


查看開機信息: dmesg
Linux命令dmesg用來顯示開機信息,kernel會將開機信息存儲在ring buffer中。您若是開機時來不及查看信息,
可利用dmesg來查看。開機信息亦保存在/var/log目錄中,名稱為dmesg的文件裡
文件系統的掛載情況: cat /etc/fstab
查看文件系統:
fdisk -l ---查看磁盤信息以及分區表情況 或者使用 cat /proc/partitions
df ---當前系統剩余空間
mount ---查看目錄掛載情況
查看某個目錄的大小: du -sh /uploadimages
系統運行情況: top,uptime
當前打開的服務: service --status-all
服務的運行級別: chkconfig --list
所有服務所占用的端口: cat /etc/services |less ------看所有服務所占用的端口
當前打開的端口: netstat -nat, netstat -tnlp
網絡配置:ifconfig -a |grep add,
ifup eth0,
ifdown eth0,
ethtool eth0,
mii-tool -v eth0,
/etc/init.d/network status,
route,
/etc/sysconfig/network-scripts

[root@oam-nas2 yuanjs]# service network ?
用法:/etc/init.d/network {start|stop|status|restart|reload|force-reload}


環境變量: export
安裝了哪些軟件: rpm -qa , yum list,yum grouplist


top 看進程和cpu的使用率
uptime 看cpu負載和系統運行時間。
free 看內存 虛擬內存 -m 是以兆為單位顯示
df -hT 硬盤.查看個各個分區的使用情況,-h是以G為單位顯示 -T是顯示分區的系統類型
iostat -x 1 可以查看磁盤的IO信息




/sbin
/bin
/usr/sbin
/usr/bin
/usr/local/sbin
/usr/local/bin
/usr/lib64/qt-3.3/bin
/root/bin


========================
linux軟件安裝方式:
(dpkg,apt-get)(rpm,yum)
========================
APT --- Advanced Package Tool
apt-get --------是debian、ubuntu發行版的包管理工具,與紅帽中的yum工具非常類似。
apt-get install packagename ---安裝一個新軟件包(參見下文的aptitude)
apt-get remove packagename ---卸載一個已安裝的軟件包(保留配置文檔)
apt-get autoremove packagename ---卸載一個已安裝的軟件包(刪除配置文檔)
軟件源設置 /etc/apt/sources.list
更新軟件源數據 apt-get update
更新已安裝軟件 apt-get upgrade
更換系統版本 apt-get dist-upgrade
通過安裝包或卸載包來修復依賴錯誤 apt-get -f install
搜索軟件源數據 apt-cache search foo
解壓安裝軟件包 apt-get install foo
重新安裝軟件包 apt-get --reinstall install foo
刪除軟件包釋放的內容 apt-get remove foo
卸載軟件,同時清除該軟件配置文件 apt-get --purge remove foo
刪除不需要的包 apt-get autoclean
刪除所有已下載的包 apt-get clean
自動安裝編譯一軟件所需要的包 apt-get build-dep foo
獲取源碼 apt-get source foo apt-get source rox-filer
安裝編譯依賴 apt-get build-dep foo apt-get build-dep rox-filer
解壓源碼 dpkg-source -x foo_version-revision.dsc dpkg-source -x rox_2.11-3.dsc
修改源碼部分 nano ROX-Filer/src/main.c
創建包 dpkg-buildpackage -rfakeroot -b
修改軟件可升級狀態 echo -e "foo hold" | dpkg --set-selections


dpkg --- Debian Packager ”的簡寫。為 “Debian” 專門開發的套件管理系統,方便軟件的安裝、更新及移除。
所有源自“Debian”的“Linux ”發行版都使用 “dpkg”,例如 “Ubuntu”、“Knoppix”等。是Debian軟件包管理器的基礎,它被伊恩·默多克創建於1993年。
dpkg與RPM十分相似,同樣被用於安裝、卸載和供給.deb軟件包相關的信息。dpkg本身是一個底層的工具。上層的工具,
如APT,被用於從遠程獲取軟件包以及處理復雜的軟件包關系。
顯示DEB包信息 dpkg -I xx.deb
顯示DEB包文件列表 dpkg -c xx.deb
安裝DEB包 dpkg -i xx.deb
安裝DEB包(指定根目錄) dpkg --root=<directory> -i xx.deb
顯示所有已安裝軟件 dpkg -l
顯示已安裝包信息 dpkg -s foo
顯示已安裝包文件列表 dpkg -L foo
卸載包 dpkg -r foo
卸載軟件包並刪除其配置文件 dpkg -P foo
重新配置已安裝程序 dpkg-reconfigure foo


yum --------Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora、RedHat、CentOS中的Shell前端軟件包管理器。
基於RPM包管理,能夠從指定的服務器自動下載RPM包並且安裝,可以自動處理依賴性關系,並且一次安裝所有依賴的軟件包,
無須繁瑣地一次次下載、安裝。

[root@localhost ~]# yum update
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* c6-media:
* centosplus: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.163.com
file:///media/CentOS/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/CentOS/repodata/repomd.xml
Trying other mirror.
file:///media/cdrecorder/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/cdrecorder/repodata/repomd.xml
Trying other mirror.
file:///media/cdrom/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/cdrom/repodata/repomd.xml
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: c6-media. Please verify its path and try again
提示沒有找到YUM倉庫文件,原因是鏡像沒有掛上或的YUM倉庫路徑寫錯了,也可能是這個YUM倉庫路徑無效。


解決辦法:
把/etc/yum.repos.d/CentOS-Media.repo轉移到其他文件夾。同時保證你的linux要能聯網。

yum list 或者 yum grouplist ---查找
yum install 或者 yum groupinstall ---安裝
yum remove 或者 groupremove ---卸載
yum info 或者 yum groupinfo ---查看某包或者組的詳細信息
yum deplist ---顯示軟件包依賴關系


安裝軟件: yum install foo-x.x.x.rpm (以foo-x.x.x.rpm為例)
刪除軟件:yum remove foo-x.x.x.rpm或者yum erase foo-x.x.x.rpm
升級軟件:yum upgrade foo或者yum update foo
查詢信息:yum info foo
搜索軟件(以包含foo字段為例):yum search foo
顯示軟件包依賴關系:yum deplist foo


-e 靜默執行
  -t 忽略錯誤
  -R[分鐘] 設置等待時間
  -y 自動應答yes
  --skip-broken 忽略依賴問題
  --nogpgcheck 忽略GPG驗證


  check-update 檢查可更新的包
  clearn 清除全部
  clean packages 清除臨時包文件(/var/cache/yum 下文件)
  clearn headers 清除rpm頭文件
  clean oldheaders 清除舊的rpm頭文件
  deplist 列出包的依賴
  list 可安裝和可更新的RPM包
  list installed 已安裝的包
  list extras 已安裝且不在資源庫的包
  info 可安裝和可更新的RPM包 信息
  info installed 已安裝包的信息(-qa 參數相似)
  install[RPM包] 安裝包
  localinstall 安裝本地的 RPM包
  update[RPM包] 更新包
  upgrade 升級系統
  search[關鍵詞] 搜索包
  provides[關鍵詞] 搜索特定包文件名
  reinstall[RPM包] 重新安裝包
  repolist 顯示資源庫的配置
  resolvedep 指定依賴
  remove[RPM包] 卸載包


rpm -----Redhat Package Manager OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分發版本都有采用 -vh:顯示安裝進度;
rpm -ivh packagename ---安裝 比如: rpm -ivh tcl-8.5.7-6.el6.x86_64.rpm tcl-devel-8.5.7-6.el6.x86_64.rpm tcl-pgtcl-1.6.2-3.el6.x86_64.rpm
rpm -ev packagename ---卸載 比如: rpm -ev tcl
rpm -qa |grep php 查看當前系統安裝了PHP了的哪些內容。
rpm -qpl xxxxxx.rpm 怎樣查看rpm安裝包的安裝路徑 ******


如何在Fedora,CentOS,RHEL中檢查RPM包的依賴性 --- http://www.linuxidc.com/Linux/2014-08/105626.htm
$ rpm -qR tcpdump --- 注意,這種方法只適用於已安裝的包。使用RPM命令可以列出目標包所依賴的所有包.
$ rpm -qpR tcpdump-4.4.0-2.fc19.i686.rpm --- 如果你需要檢查一個未安裝包的依賴關系,使用 "-qpR"參數顯示該包的依賴關系。


1.如何安裝rpm軟件包(強行安裝)
執行下面的命令:
rpm -i your-package.rpm 或者 rpm -i --force --nodeps your-package.rpm (強制安裝)
其中your-package.rpm是你要安裝的rpm包的文件名,一般置於當前目錄下。


安裝過程中可能出現下面的警告或者提示:
1)... conflict with ... 可能是要安裝的包裡有一些文件可能會覆蓋現有的文件,缺省時這樣的情況下是無法正確安裝的:
rpm --force -i 強制安裝即可
2)... is needed by ... 或... is not installed ... 此包需要的一些軟件你沒有安裝可以用:
rpm --nodeps -i 來忽略此信息


也就是說,rpm -i --force --nodeps 可以忽略所有依賴關系和文件問題,什麼包都能安裝上,但這種強制安裝的軟件包不能保證完全發揮功能。


2.如何卸載rpm軟件包 (強行卸載)_
使用命令 rpm -ev 包名,包名可以包含版本號等信息,但是不可以有後綴.rpm
比如卸載軟件包proftpd-1.2.8-1,可以使用下列格式:
rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd
不可以是下列格式:
rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
rpm -e proftpd-1


有時會出現一些錯誤或者警告:
... is needed by ... 這說明這個軟件被其他軟件需要,不能隨便卸載
可以用:
rpm -e --nodeps (強制卸載)


強制卸載一個例子:
[root@A22770797 yuanjs]# rpm -ev --nodeps httpd-2.2.15-9.el6.x86_64
warning: /etc/httpd/conf/httpd.conf saved as /etc/httpd/conf/httpd.conf.rpmsave
[root@A22770797 yuanjs]# rpm -qa|grep httpd
httpd-tools-2.2.15-9.el6.x86_64
[root@A22770797 yuanjs]# rpm -ivh httpd-2.2.15-9.el6.x86_64.rpm
warning: httpd-2.2.15-9.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:httpd ########################################### [100%]
[root@A22770797 yuanjs]# apachectl -v
Server version: Apache/2.2.15 (Unix)
Server built: Apr 9 2011 08:58:28


====================================================================
Linux下which、whereis、locate、find 命令的區別
====================================================================
which 查看可執行文件的位置 : which是通過 PATH環境變量到該路徑內查找可執行文件,所以基本的功能是尋找可執行文件
whereis 配合數據庫查看文件的位置
locate 配合數據庫查看文件的位置
find 實際搜尋硬盤查詢文件名稱


1、which
語法:
[root@redhat ~]# which 可執行文件名稱
例如:
[root@redhat ~]# which passwd
/usr/bin/passwd
which是通過 PATH環境變量到該路徑內查找可執行文件,所以基本的功能是尋找可執行文件


2、whereis
語法:
[root@redhat ~]# whereis [-bmsu] 文件或者目錄名稱
參數說明:
-b : 只找二進制文件
-m: 只找在說明文件manual路徑下的文件
-s : 只找source源文件
-u : 沒有說明文檔的文件
例如:
[root@redhat ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
將和passwd文件相關的文件都查找出來


[root@redhat ~]# whereis -b passwd
passwd: /usr/bin/passwd /etc/passwd
只將二進制文件查找出來


和find相比,whereis查找的速度非常快,這是因為linux系統會將 系統內的所有文件都記錄在一個數據庫文件中,當使用whereis和下面即將介紹的locate時,會從數據庫中查找數據,而不是像find命令那樣,通 過遍歷硬盤來查找,效率自然會很高。
但是該數據庫文件並不是實時更新,默認情況下是一星期更新一次,因此,我們在用whereis和locate 查找文件時,有時會找到已經被刪除的數據,或者剛剛建立文件,卻無法查找到,原因就是因為數據庫文件沒有被更新。


3、 locate
語法:
[root@redhat ~]# locate 文件或者目錄名稱
例如:
[root@redhat ~]# locate passwd
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_DB_war/DB.war/jsp/as/user/passwd.jsp
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_admin_war/admin.war/jsp/platform/passwd.jsp
/lib/security/pam_unix_passwd.so
/lib/security/pam_passwdqc.so
/usr/include/rpcsvc/yppasswd.x
/usr/include/rpcsvc/yppasswd.h
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/rpcsvc/yppasswd.ph
/usr/lib/kde3/kded_kpasswdserver.la
/usr/lib/kde3/kded_kpasswdserver.so
/usr/lib/ruby/1.8/webrick/httpauth/htpasswd.rb
/usr/bin/vncpasswd
/usr/bin/userpasswd
/usr/bin/yppasswd
…………


4、 find
語法:
[root@redhat ~]# find 路徑 參數


參數說明:


時間查找參數:
-atime n :將n*24小時內存取過的的文件列出來
-ctime n :將n*24小時內改變、新增的文件或者目錄列出來
-mtime n :將n*24小時內修改過的文件或者目錄列出來
-newer file :把比file還要新的文件列出來
名稱查找參數:
-gid n :尋找群組ID為n的文件
-group name :尋找群組名稱為name的文件
-uid n :尋找擁有者ID為n的文件
-user name :尋找用戶者名稱為name的文件
-name file :尋找文件名為file的文件(可以使用通配符)


例如:
[root@redhat ~]# find / -name zgz
/home/zgz
/home/zgz/zgz
/home/weblogic/bea/user_projects/domains/zgz
/home/oracle/product/10g/cfgtoollogs/dbca/zgz
/home/oracle/product/10g/cfgtoollogs/emca/zgz
/home/oracle/oradata/zgz


[root@redhat ~]# find / -name '*zgz*'
/home/zgz
/home/zgz/zgz1
/home/zgz/zgzdirzgz
/home/zgz/zgz
/home/zgz/zgzdir
/home/weblogic/bea/user_projects/domains/zgz
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00006
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00002
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00004
/home/weblogic/bea/user_projects/domains/zgz/zgz.log
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00008
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00005


當我們用whereis和locate無法查找到我們需要的文件時,可以使用find,但是find是在硬盤上遍歷查 找,因此非常消耗硬盤的資源,而且效率也非常低,因此建議大家優先使用whereis和locate。


locate 是在數據庫裡查找,數據庫大至每天更新一次。
whereis 可以找到可執行命令和man page
find 就是根據條件查找文件。
which 可以找到可執行文件和別名(alias)


==================================
linuxshell中"2>&1"含義(重要)
==================================
腳本是:
nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & "把標准錯誤輸出重定向到標准輸出,然後扔到/DEV/NULL下面去。"
對於&1 更准確的說應該是文件描述符 1,而1一般代表的就是STDOUT_FILENO,實際上這個操作就是一個dup2(2)調用.他標准輸出到all_result,
然後復制標准輸出到文件描述符2(STDERR_FILENO),其後果就是文件描述符1和2指向同一個文件表項,也可以說錯誤的輸出被合並了.
其中:
0表示鍵盤輸入,
1表示屏幕輸出,
2表示錯誤輸出.
把標准錯誤輸出重定向到標准輸出,然後扔到/DEV/NULL下面去。


通俗的說,就是把所有標准輸出和標准出錯都扔到垃圾桶裡面。


command >out.file 2>&1 &
1. command >out.file是將command的輸出重定向到out.file文件,即輸出內容不打印到屏幕上,而是輸出到out.file文件中。
2. 2>&1 是將標准出錯重定向到標准輸出,這裡的標准輸出已經重定向到了out.file文件,即將標准出錯也輸出到out.file文件中。
3. 最後一個&,是讓該命令在後台執行。


試想2>1代表什麼,2與>結合代表錯誤重定向,而1則代表錯誤重定向到一個文件1,而不代表標准輸出;
換成2>&1,&與1結合就代表標准輸出了,就變成錯誤重定向到標准輸出.


---------------------------------------------------------------------------------------------------
你可以用
ls 2>1測試一下,不會報沒有2文件的錯誤,但會輸出一個空的文件1;
ls xxx 2>1測試,沒有xxx這個文件的錯誤輸出到了1中;
ls xxx 2>&1測試,不會生成1這個文件了,不過錯誤跑到標准輸出了;
ls xxx >out.txt 2>&1, 實際上可換成 ls xxx 1>out.txt 2>&1;重定向符號>默認是1,錯誤和輸出都傳到out.txt了。


Question:
1) 為何2>&1要寫在後面?
command > file 2>&1

首先是command > file將標准輸出重定向到file中,
2>&1 是標准錯誤拷貝了標准輸出的行為,也就是同樣被重定向到file中,最終結果就是標准輸出和錯誤都被重定向到file中。


2) command 2>&1 >file
2>&1 標准錯誤拷貝了標准輸出的行為,但此時標准輸出還是在終端。>file 後輸出才被重定向到file,但標准錯誤仍然保持在終端。

用strace可以看到:
1. command > file 2>&1
這個命令中實現重定向的關鍵系統調用序列是:
open(file) == 3
dup2(3,1)
dup2(1,2)
2. command 2>&1 >file
這個命令中實現重定向的關鍵系統調用序列是:
dup2(1,2)
open(file) == 3
dup2(3,1)
可以考慮一下不同的dup2()調用序列會產生怎樣的文件共享結構。




================================================
/dev/zero和/dev/null的區別
================================================
使用/dev/null:
把/dev/null看作"黑洞". 它非常等價於一個只寫文件. 所有寫入它的內容都會永遠丟失. 而嘗試從它那兒讀取內容則什麼也讀不到. 然而, /dev/null對命令行和腳本都非常的有用.


使用/dev/zero:
像/dev/null一樣, /dev/zero也是一個偽文件, 但它實際上產生連續不斷的null的流(二進制的零流,而不是ASCII型的). 寫入它的輸出會丟失不見, 而從/dev/zero讀出一連串的null也比較困難, 雖然這也能通過od或一個十六進制編輯器來做到. /dev/zero主要的用處是用來創建一個指定長度用於初始化的空文件,就像臨時交換文件.


/dev/null,外號叫無底洞,你可以向它輸出任何數據,它通吃,並且不會撐著!
/dev/zero,是一個輸入設備,你可你用它來初始化文件。


/dev/null------它是空設備,也稱為位桶(bit bucket)。任何寫入它的輸出都會被拋棄。如果不想讓消息以標准輸出顯示或寫入文件,那麼可以將消息重定向到位桶。
/dev/zero------該設備無窮盡地提供0,可以使用任何你需要的數目——設備提供的要多的多。他可以用於向設備或文件寫入字符串0。


dd --- disk dump
$dd if=/dev/zero of=./test.txt bs=1k count=1
$ ls -l
total 4
-rw-r--r-- 1 oracle dba 1024 Jul 15 16:56 test.txt




禁止標准輸出.
1 cat $filename >/dev/null
2 # 文件內容丟失,而不會輸出到標准輸出.


禁止標准錯誤 (來自例子 12-3).
1 rm $badname 2>/dev/null
2 # 這樣錯誤信息[標准錯誤]就被丟到太平洋去了.


禁止標准輸出和標准錯誤的輸出.
1 cat $filename 2>/dev/null >/dev/null
2 # 如果"$filename"不存在,將不會有任何錯誤信息提示.
3 # 如果"$filename"存在, 文件的內容不會打印到標准輸出.
4 # 因此Therefore, 上面的代碼根本不會輸出任何信息.
5 #
6 # 當只想測試命令的退出碼而不想有任何輸出時非常有用。
7 #
8 #
9 # cat $filename &>/dev/null
10 # 也可以, 由 Baris Cicek 指出.


Deleting contents of a file, but preserving the file itself, with all attendant permissions (from Example 2-1 and Example 2-3):
1 cat /dev/null > /var/log/messages
2 #: > /var/log/messages 有同樣的效果, 但不會產生新的進程.(因為:是內建的)
3
4 cat /dev/null > /var/log/wtmp


自動清空日志文件的內容 (特別適合處理這些由商業Web站點發送的討厭的"cookies"):
--------------------------------------------------------------------------------


例子 28-1. 隱藏cookie而不再使用
1 if [ -f ~/.netscape/cookies ] # 如果存在則刪除.
2 then
3 rm -f ~/.netscape/cookies
4 fi
5
6 ln -s /dev/null ~/.netscape/cookies
7 # 現在所有的cookies都會丟入黑洞而不會保存在磁盤上了.


--------------------------------------------------------------------------------
使用/dev/zero
像/dev/null一樣, /dev/zero也是一個偽文件, 但它實際上產生連續不斷的null的流(二進制的零流,而不是ASCII型的). 寫入它的輸出會丟失不見, 而從/dev/zero讀出一連串的null也比較困難, 雖然這也能通過od或一個十六進制編輯器來做到. /dev/zero主要的用處是用來創建一個指定長度用於初始化的空文件,就像臨時交換文件.
--------------------------------------------------------------------------------


例子 28-2. 用/dev/zero創建一個交換臨時文件
1 #!/bin/bash
2 # 創建一個交換文件.
3
4 ROOT_UID=0 # Root 用戶的 $UID 是 0.
5 E_WRONG_USER=65 # 不是 root?
6
7 FILE=/swap
8 BLOCKSIZE=1024
9 MINBLOCKS=40
10 SUCCESS=0
11
12
13 # 這個腳本必須用root來運行.
14 if [ "$UID" -ne "$ROOT_UID" ]
15 then
16 echo; echo "You must be root to run this script."; echo
17 exit $E_WRONG_USER
18 fi
19
20
21 blocks=${1:-$MINBLOCKS} # 如果命令行沒有指定,
22 #+ 則設置為默認的40塊.
23 # 上面這句等同如:
24 # --------------------------------------------------
25 # if [ -n "$1" ]
26 # then
27 # blocks=$1
28 # else
29 # blocks=$MINBLOCKS
30 # fi
31 # --------------------------------------------------
32
33
34 if [ "$blocks" -lt $MINBLOCKS ]
35 then
36 blocks=$MINBLOCKS # 最少要有 40 個塊長.
37 fi
38
39
40 echo "Creating swap file of size $blocks blocks (KB)."
41 dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks # 把零寫入文件.
42
43 mkswap $FILE $blocks # 將此文件建為交換文件(或稱交換分區).
44 swapon $FILE # 激活交換文件.
45
46 echo "Swap file created and activated."
47
48 exit $SUCCESS


--------------------------------------------------------------------------------


關於 /dev/zero 的另一個應用是為特定的目的而用零去填充一個指定大小的文件, 如掛載一個文件系統到環回設備 (loopback device) (參考例子 13-8) 或"安全地" 刪除一個文件(參考例子 12-55).
--------------------------------------------------------------------------------


例子 28-3. 創建ramdisk
1 #!/bin/bash
2 # ramdisk.sh
3
4 # "ramdisk"是系統RAM內存的一段,
5 #+ 它可以被當成是一個文件系統來操作.
6 # 它的優點是存取速度非常快 (包括讀和寫).
7 # 缺點: 易失性, 當計算機重啟或關機時會丟失數據.
8 #+ 會減少系統可用的RAM.
9 #
10 # 那麼ramdisk有什麼作用呢?
11 # 保存一個較大的數據集在ramdisk, 比如一張表或字典,
12 #+ 這樣可以加速數據查詢, 因為在內存裡查找比在磁盤裡查找快得多.
13
14
15 E_NON_ROOT_USER=70 # 必須用root來運行.
16 ROOTUSER_NAME=root
17
18 MOUNTPT=/mnt/ramdisk
19 SIZE=2000 # 2K 個塊 (可以合適的做修改)
20 BLOCKSIZE=1024 # 每塊有1K (1024 byte) 的大小
21 DEVICE=/dev/ram0 # 第一個 ram 設備
22
23 username=`id -nu`
24 if [ "$username" != "$ROOTUSER_NAME" ]
25 then
26 echo "Must be root to run ""`basename $0`""."
27 exit $E_NON_ROOT_USER
28 fi
29
30 if [ ! -d "$MOUNTPT" ] # 測試掛載點是否已經存在了,
31 then #+ 如果這個腳本已經運行了好幾次了就不會再建這個目錄了
32 mkdir $MOUNTPT #+ 因為前面已經建立了.
33 fi
34
35 dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE # 把RAM設備的內容用零填充.
36 # 為何需要這麼做?
37 mke2fs $DEVICE # 在RAM設備上創建一個ext2文件系統.
38 mount $DEVICE $MOUNTPT # 掛載設備.
39 chmod 777 $MOUNTPT # 使普通用戶也可以存取這個ramdisk.
40 # 但是, 只能由root來缷載它.
41
42 echo """$MOUNTPT"" now available for use."
43 # 現在 ramdisk 即使普通用戶也可以用來存取文件了.
44
45 # 注意, ramdisk是易失的, 所以當計算機系統重啟或關機時ramdisk裡的內容會消失.
46 #
47 # 拷貝所有你想保存文件到一個常規的磁盤目錄下.
48
49 # 重啟之後, 運行這個腳本再次建立起一個 ramdisk.
50 # 僅重新加載 /mnt/ramdisk 而沒有其他的步驟將不會正確工作.
51
52 # 如果加以改進, 這個腳本可以放在 /etc/rc.d/rc.local,
53 #+ 以使系統啟動時能自動設立一個ramdisk.
54 # 這樣很合適速度要求高的數據庫服務器.
55
56 exit 0


--------------------------------------------------------------------------------
最後值得一提的是, ELF二進制文件利用了/dev/zero.
/dev/null,外號叫無底洞,你可以向它輸出任何數據,它通吃,並且不會撐著!
/dev/zero,是一個輸入設備,你可你用它來初始化文件。
/dev/null------它是空設備,也稱為位桶(bit bucket)。任何寫入它的輸出都會被拋棄。如果不想讓消息以標准輸出顯示或寫入文件,那麼可以將消息重定向到位桶。
/dev/zero------該設備無窮盡地提供0,可以使用任何你需要的數目——設備提供的要多的多。他可以用於向設備或文件寫入字符串0。
$if=/dev/zero of=./test.txt bs=1k count=1
$ ls -l
total 4
-rw-r--r-- 1 oracle dba 1024 Jul 15 16:56 test.txt


eg,find / -name access_log 2>/dev/null
這樣,一些諸如一些錯誤信息就不會顯示出來。




===============================
硬鏈接和軟鏈接的區別
===============================
一.鏈接文件
鏈接有兩種方式,軟鏈接和硬鏈接。
1.軟鏈接文件
  軟鏈接又叫符號鏈接,這個文件包含了另一個文件的路徑名。可以是任意文件或目錄,可以鏈接不同文件系統的文件。
鏈接文件甚至可以鏈接不存在的文件,這就產生一般稱之為"斷鏈"的問題(或曰“現象"),鏈接文件甚至可以循環鏈接自己。類似於編程語言中的遞歸。
  用ln -s 命令可以生成一個軟連接,如下:
------------------------------------------------------------
  ln -s source_file softlink_file
------------------------------------------------------------
  在對符號文件進行讀或寫操作的時候,系統會自動把該操作轉換為對源文件的操作,但刪除鏈接文件時,系統僅僅刪除鏈接文件,而不刪除源文件本身。
2.硬鏈接文件
  info ln 命令告訴您,硬鏈接是已存在文件的另一個名字(A "hard link" is another name for an existing file),這多少有些令人困惑。
硬連接的命令是:
------------------------------
  ln -d existfile newfile
------------------------------
  硬鏈接文件有兩個限制
  1)、不允許給目錄創建硬鏈接;
  2)、只有在同一文件系統中的文件之間才能創建鏈接。
  對硬鏈接文件進行讀寫和刪除操作時候,結果和軟鏈接相同。但如果我們刪除硬鏈接文件的源文件,硬鏈接文件仍然存在,而且保留了願有的內容。
這時,系統就“忘記”了它曾經是硬鏈接文件。而把他當成一個普通文件。

二.兩者之間的區別
硬連接指通過索引節點來進行的連接。在Linux的文件系統中,保存在磁盤分區中的文件不管是什麼類型都給它分配一個編號,稱為索引節點號(Inode Index)。
在Linux中,多個文件名指向同一索引節點是存在的。一般這種連接就是硬連接。硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要 文件,以防止“誤刪”的功能。
其原因如上所述,因為對應該目錄的索引節點有一個以上的連接。只刪除一個連接並不影響索引節點本身和其它的連接,只有當最後一個
連接被刪除後,文件的數據塊及目錄的連接才會被釋放。也就是說,文件才會被真正刪除。
軟鏈接文件有點類似於Windows的快捷方式。它實際上是特殊文件的一種。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。


========================
Linux下chkconfig命令詳解
========================
查看哪些服務打開了:sysv的服務可以用 chkconfig --list 來查看
chkconfig命令主要用來更新(啟動或停止)和查詢系統服務的運行級信息。謹記chkconfig不是立即自動禁止或激活一個服務,它只是簡單的改變了符號連接。
使用語法:
chkconfig [--add][--del][--list][系統服務] 或 chkconfig [--level <等級代號>][系統服務][on/off/reset]


chkconfig在沒有參數運行時,顯示用法。如果加上服務名,那麼就檢查這個服務是否在當前運行級啟動。
如果是,返回true,否則返回false。
如果在服務名後面指定了on,off或者reset,那麼chkconfig 會改變指定服務的啟動信息。
on和off分別指服務被啟動和停止,reset指重置服務的啟動信息,無論有問題的初始化腳本指定了什麼。
on和off開關,系統默認只對運行級3,4,5有效,但是reset可以對所有運行級有效。


參數用法:
--add  增加所指定的系統服務,讓chkconfig指令得以管理它,並同時在系統啟動的敘述文件內增加相關數據。
--del  刪除所指定的系統服務,不再由chkconfig指令管理,並同時在系統啟動的敘述文件內刪除相關數據。
--level<等級代號>  指定讀系統服務要在哪一個執行等級中開啟或關畢。
等級0表示:表示關機
等級1表示:單用戶模式
等級2表示:無網絡連接的多用戶命令行模式
等級3表示:有網絡連接的多用戶命令行模式
等級4表示:不可用
等級5表示:帶圖形界面的多用戶模式
等級6表示:重新啟動
需要說明的是,level選項可以指定要查看的運行級而不一定是當前運行級。對於每個運行級,只能有一個啟動腳本或者停止腳本。當切換運行級時,init不會重新啟動已經啟動的服務,也不會再次去停止已經停止的服務。


chkconfig --list [name]:顯示所有運行級系統服務的運行狀態信息(on或off)。如果指定了name,那麼只顯示指定的服務在不同運行級的狀態。
chkconfig --add name:增加一項新的服務。chkconfig確保每個運行級有一項啟動(S)或者殺死(K)入口。如有缺少,則會從缺省的init腳本自動建立。
chkconfig --del name:刪除服務,並把相關符號連接從/etc/rc[0-6].d刪除。
chkconfig [--level levels] name:設置某一服務在指定的運行級是被啟動,停止還是重置。


運行級文件:
每個被chkconfig管理的服務需要在對應的init.d下的腳本加上兩行或者更多行的注釋。第一行告訴chkconfig缺省啟動的運行級以及啟動和停止的優先級。如果某服務缺省不在任何運行級啟動,那麼使用 - 代替運行級。第二行對服務進行描述,可以用\ 跨行注釋。
例如,random.init包含三行:
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.


使用范例:
chkconfig --list #列出所有的系統服務
chkconfig --add httpd #增加httpd服務
chkconfig --del httpd #刪除httpd服務
chkconfig --level httpd 2345 on #設置httpd在運行級別為2、3、4、5的情況下都是on(開啟)的狀態
chkconfig --list #列出系統所有的服務啟動情況
chkconfig --list mysqld #列出mysqld服務設置情況
chkconfig --level 35 mysqld on #設定mysqld在等級3和5為開機運行服務,--level 35表示操作只在等級3和5執行,on表示啟動,off表示關閉
chkconfig mysqld on #設定mysqld在各等級為on,“各等級”包括2、3、4、5等級


如何增加一個服務:
1.服務腳本必須存放在/etc/init.d/目錄下;
2.chkconfig --add servicename
在chkconfig工具服務列表中增加此服務,此時服務會被在/etc/rc.d/rcN.d中賦予K/S入口了;
3.chkconfig --level 35 mysqld on
修改服務的默認啟動等級。

===============
執行等級
===============
[root@localhost ~]# cat /etc/inittab


# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)


========================
Linux命令:declare
========================
功能說明:聲明 shell 變量。
語 法:declare [+/-][afrix]
補充說明:declare為shell指令,在第一種語法中可用來聲明變量並設置變量的屬性([rix]即為變量的屬性),在第二種語法中可用來顯示shell函數。若不加上任何參數,則會顯示全部的shell變量與函數(與執行set指令的效果相同)。
參 數:
  +/- "-"可用來指定變量的屬性,"+"則是取消變量所設的屬性。
  -a 定義為數組array
  -f 定義為函數function
  -i 定義為整數integer
  -r 定義為只讀
  -x 定義為通過環境輸出變量


declare -x XMLRPC_TRACE_XML=1
declare +x XMLRPC_TRACE_XML


ATA --->PATA(IDE)
ATA --->SATA
SCSI --->SAS


hdb中的h代表IDE,如果顯示為sdb,則代表SATA和SCSI
最後一個字幕b代表Primary總線,第二塊硬盤即Slave位置


hda1 (IDE1:hard disk ) /boot 分區
hda2 (IDE1:hard disk ) / 分區
hdb (IDE2)
sda (SCSI1)
sdb (SCSI2)


軟盤一般為/dev/fd0 fd1,硬盤一般為/dev/hda hdb ,硬盤邏輯分區一般為期hda1 hda2…等等,光盤一般為/dev/hdc
swap分區、/ 分區和 /boot分區


more /etc/passwd 查看用戶名和組
more /etc/group 查看組
more /etc/hosts
more /etc/issue 查看OS版本
more /etc/networks
more /etc/protocols
more /etc/rpc
more /etc/services
more /etc/shadow 映射口令信息


chmod -R 777 xstart recursive 遞歸的改變所有的權限。
chmod -R +x /opt 將/opt下所有目錄、文件及其子目錄文件設置為可執行權限(+X)。


chown root:root xstart
chown -R root:root /opt 將/opt下所有目錄及其子目錄設置為root所擁有。


清除Linux防火牆:iptables -F service iptables stop


--------------------------------------------------
指令名稱 : chmod
使用權限 : 所有使用者
--------------------------------------------------
使用方式 : chmod [-cfvR] [--help] [--version] mode file...
說明 : Linux/Unix 的檔案調用權限分為三級 : 檔案擁有者、群組、其他。利用 chmod 可以藉以控制檔案如何被他人所調用。
參數 :
mode : 權限設定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中
u 表示該檔案的擁有者,g 表示與該檔案的擁有者屬於同一個群體(group)者,o 表示其他以外的人,a 表示這三者皆是。
+ 表示增加權限、- 表示取消權限、= 表示唯一設定權限。
r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該檔案是個子目錄或者該檔案已經被設定過為可執行。
-c : 若該檔案權限確實已經更改,才顯示其更改動作
-f : 若該檔案權限無法被更改也不要顯示錯誤訊息
-v : 顯示權限變更的詳細資料
-R : 對目前目錄下的所有檔案與子目錄進行相同的權限變更(即以遞回的方式逐個變更)
--help : 顯示輔助說明
--version : 顯示版本
范例 :將檔案 file1.txt 設為所有人皆可讀取 :
chmod ugo+r file1.txt
將檔案 file1.txt 設為所有人皆可讀取 :
chmod a+r file1.txt
將檔案 file1.txt 與 file2.txt 設為該檔案擁有者,與其所屬同一個群體者可寫入,但其他以外的人則不可寫入 :
chmod ug+w,o-w file1.txt file2.txt
將 ex1.py 設定為只有該檔案擁有者可以執行 :
chmod u+x ex1.py
將目前目錄下的所有檔案與子目錄皆設為任何人可讀取 :
chmod -R a+r *
此外chmod也可以用數字來表示權限如 chmod 777 file


語法為:chmod abc file
其中a,b,c各為一個數字,分別表示User、Group、及Other的權限。
r=4,w=2,x=1
若要rwx屬性則4+2+1=7;
若要rw-屬性則4+2=6;
若要r-x屬性則4+1=7。
范例:
chmod a=rwx file

chmod 777 file
效果相同
chmod ug=rwx,o=x file

chmod 771 file
效果相同
若用chmod 4755 filename可使此程序具有root的權限


--------------------------------------------------
env命令:
--------------------------------------------------
#!/usr/local/bin/python
在 #!之後寫上Python 解釋器的完整路徑
有一個更好的方案, 許多Unix 系統有一個命令叫 env, 位於 /bin 或 /usr/bin 中。它
會幫你在系統搜索路徑中找到 python 解釋器。 如果你的系統擁有 env, 你的啟動行就可以改
為下面這樣:
#!/usr/bin/env python
或者, 如果你的 env 位於 /bin 的話,
#!/bin/env python


[root@oam-nas2 yuanjs]# which env
/bin/env
[root@oam-nas2 yuanjs]# env --help
Usage: env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
Set each NAME to VALUE in the environment and run COMMAND.


-i, --ignore-environment start with an empty environment
-0, --null end each output line with 0 byte rather than newline
-u, --unset=NAME remove variable from the environment
--help display this help and exit
--version output version information and exit


A mere - implies -i. If no COMMAND, print the resulting environment.


Report env bugs to [email protected]
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
Report env translation bugs to <http://translationproject.org/team/>
For complete documentation, run: info coreutils 'env invocation'


看群晖的:
DiskStation> env
SSH_CLIENT=192.168.56.1 3402 22
MAIL=/var/mail/admin
USER=admin
OLDPWD=/var/services/homes/admin
HOME=/var/services/homes/admin
SSH_TTY=/dev/pts/0
PAGER=more
LOGNAME=admin
TERM=xterm
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
SHELL=/bin/sh
PWD=/
SSH_CONNECTION=192.168.56.1 3402 192.168.56.101 22
PGDATA=/var/service/pgsql
TZ=CST-8


看OMV:
root@openmediavault:/var/lib/php5# su openmediavault
$ env
LANGUAGE=zh_CN:zh
USER=openmediavault
SSH_CLIENT=192.168.56.1 2626 22
MAIL=/var/mail/openmediavault
SHLVL=1
OLDPWD=/tmp
HOME=/home/openmediavault
SSH_TTY=/dev/pts/0
LOGNAME=openmediavault
_=/bin/su
TERM=xterm
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
LANG=zh_CN.UTF-8
SHELL=/bin/sh
PWD=/var/lib/php5
SSH_CONNECTION=192.168.56.1 2626 192.168.56.102 22
$ exit
root@openmediavault:/var/lib/php5# env
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=192.168.56.1 2626 22
SSH_TTY=/dev/pts/0
USER=root
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/var/lib/php5
LANG=zh_CN.UTF-8
SHLVL=1
HOME=/root
LANGUAGE=zh_CN:zh
LOGNAME=root
SSH_CONNECTION=192.168.56.1 2626 192.168.56.102 22
_=/usr/bin/env
OLDPWD=/tmp


===================================================
/etc/passwd 文件內容詳細解釋
===================================================
1、/etc/passwd包含用戶信息
2、/etc/shadow包含passwd裡面用戶對應的密碼
3、/etc/group包含組信息
4、/etc/gshadow包含組加密信息
5、*-應該是相應文件的備份,如果誤操作可用此文件恢復:
/etc/passwd-
/etc/group-
/etc/shadow-
/etc/gshadow-
6、diff group group-看兩個文件的區別。


程序用戶賬號的UID號默認在1-499之間,500-60000的UID號默認分配給普通用戶賬號使用。
而程序組賬號的GID號默認在1-499之間,普通組賬號使用的UID號默認為500-60000.
普通用戶、組賬號使用的默認UID、GID號范圍定義在配置文件“/etc/login.defs”中。


系統帳號就是系統用的帳號,區別於個人帳號。其實就是一個帳號,和普通的個人帳號區別就是這個 ID 是系統程序用的。
Linux 下面的每個程序都是要有用戶帳號來運行的,一些對外提供服務的程序,為了安全做隔離,都會用非 root 帳號來運行,這些非 root 帳號,專門用來跑程序的帳號,就是系統帳號。
其實這些程序也可以用一般的個人帳號來跑,不過一旦服務程序被攻破,這個帳號的個人數據也就會暴露了。
一般說來,系統帳號的帳號編號都是 <500 的,不過其實並不絕對。(uid 500前的系統用戶,500後的創建的)




/etc/passwd 是存放用戶的地方


用戶名: 密碼 : uid : gid :用戶描述:主目錄:登陸shell
1 2 3 4 5 6 7


root: x : 0 : 0 : root : / root : / bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin



UID : 每個用戶必須被分配一個userid,”0”為root保留ID.
1-99為系統保留,分配給系統預定義帳號. HP-UX10.20支持2 147 483 646. HP-UX10.20以前支持不大於60000個.
系統中有一類用戶稱為偽用戶(psuedo users),這些用戶在/etc/passwd文件中也占有一條記錄,但是不能登錄,因為它們的登錄Shell為空。它們的存在主要是方便系統管理,滿足相應的系統進程對文件屬主的要求。常見的偽用戶如表8-1所示。
表8-1 /etc/passwd文件中常見的偽用戶
偽 用 戶
含 義
bin
擁有可執行的用戶命令文件
sys
擁有系統文件
adm
擁有帳戶文件
uucp
UUCP使用
lp
lp或lpd子系統使用
nobody
NFS使用
除了上面列出的偽用戶外,還有許多標准的偽用戶,例如:audit, cron, mail, usenet等,它們也都各自為相關的進程和文件所需要。


/etc/shadow中的記錄行與/etc/passwd中的一一對應,它由pwconv命令根據/etc/passwd中的數據自動產生。它的文件格式與/etc/passwd類似,由若干個字段組成,字段之間用“:”隔開。這些字段是:
登錄名:加密口令:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:


useradd -g mysql -d /home/test -m test(:新建一個用戶test, 屬於mysql組,開始目錄是/home/test)


===================================================
Linux下passwd和shadow文件內容詳解
===================================================
一、/etc/passwd
/etc/passwd 文件是一個純文本文件,每行采用了相同的格式:
name:password:uid:gid:comment:home:shell
name 用戶登錄名
password 用戶口令。此域中的口令是加密的,常用x表示。當用戶登錄系統時,系統對輸入的口令采取相同的算法,與此域中的內容進行比較。如果此域為空,表明該用戶登錄時不需要口令。
uid 指定用戶的 UID。用戶登錄進系統後,系統通過該值,而不是用戶名來識別用戶。
gid GID。如果系統要對相同的一群人賦予相同的權利,則使用該值。
comment 用來保存用戶的真實姓名和個人細節,或者全名。
home 指定用戶的主目錄的絕對路徑。
shell 如果用戶登錄成功,則要執行的命令的絕對路徑放在這一區域中。它可以是任何命令。
如果/etc/passwd文件存放的是用戶的信息,由6個分號組成的7個信息,解釋如下
(1):用戶名。
(2):密碼(已經加密)
(3):UID(用戶標識),操作系統自己用的
(4):GID組標識。
(5):用戶全名或本地帳號
(6):開始目錄
(7):登錄使用的Shell,就是對登錄命令進行解析的工具。
例如:abc:x:501:501::/home/abc:/bin/bash


二、/etc/shadow
如果查看/etc/shadow文件存放的特殊帳號信息如下:
name:!!:13675:0:99999:7:::
每一行給一個特殊帳戶定義密碼信息,每個字段用 : 隔開。
字段 1 定義與這個 shadow 條目相關聯的特殊用戶帳戶。
字段 2 包含一個加密的密碼。
字段 3 自 1/1/1970 起,密碼被修改的天數
字段 4 密碼將被允許修改之前的天數(0 表示“可在任何時間修改”)
字段 5 系統將強制用戶修改為新密碼之前的天數(1 表示“永遠都不能修改”)
字段 6 密碼過期之前,用戶將被警告過期的天數(-1 表示“沒有警告”)
字段 7 密碼過期之後,系統自動禁用帳戶的天數(-1 表示“永遠不會禁用”)
字段 8 該帳戶被禁用的天數(-1 表示“該帳戶被啟用”)
字段 9 保留供將來使用


如果查看/etc/shadow下存放的普通帳號信息如下:
(1):帳號名稱
(2):密碼:這裡是加密過的,但高手也可以解密的。要主要安全問題(代!符號標識該帳號不能用來登錄)
(3):上次修改密碼的日期
(4):密碼不可被變更的天數
(5):密碼需要被重新變更的天數(99999表示不需要變更)
(6):密碼變更前提前幾天警告
(7):帳號失效日期
(8):帳號取消日期
(9):保留條目,目前沒用
例如:abc:!!:14768:0:99999:7:::


===================================================
詳細解說/etc/group /etc/passwd /etc/shadow文件
===================================================
特別注意:
useradd –g users –G administrators admin
新增一個用戶admin, 主組是users, 附組是administrators, 有個主組合附組的區別。小g時主組,大G是附組。附組信息會存放在/etc/group之中,主組信息只會存放在/etc/passwd中。




在Linux中,用戶(User)和用戶組(Group)的配置文件,是作為系統管理員的你最應該了解和掌握的系統基礎文件之一。從另一方面來說,了解這些文件也是系統安全管理的重要組成部份,作為一個合格的系統管理員一定要對用戶和用戶組配置文件了解透徹才行;
一、用戶(User)相關:
  談到用戶,就不得不談用戶管理、用戶配置文件、以及用戶查詢和管理的控制工具;用戶管理主要通過修改用戶配置文件完成,用戶管理控制工具最終目的也是為了修改用戶配置文件。
  那麼,什麼是用戶查詢和管理控制工具呢?用戶查詢和控制工具是查詢、添加、修改和刪除用戶等系統管理工具,比如查詢用戶的id和finger命
令,添加用戶的useradd 或adduser 、userdel 用戶的刪除 、設置密碼的passwd命令 、修改用戶usermod
等等;我們需要知道的是通過用戶查詢和控制工具所進行的動作的最終目的也是修改用戶配置文件;所以我們進行用戶管理的時候,直接修改用戶配置文件一樣可以
達到用戶管理的目的。
  了解了上面所說的,我們便能實實在在的感覺到用戶(User)配置文件的重要性:其實用戶和用戶組在系統管理中是不可分割的,但為了說明問題,
我們還是得把用戶(User)的配置文件單列出來解說,其中包括/etc/passwd 和/etc/shadow
文件;在這之中,你還能了解UID的重要性;
  通過本標題,您可以了解或掌握的內容有:了解/etc/passwd和/etc/shadow;什麼UID ;
  與用戶相關的系統配置文件主要有/etc/passwd
和/etc/shadow,其中/etc/shadow是用戶資訊的加密文件,比如用戶的密碼口令的加密保存等;/etc/passwd
和/etc/shadow 文件是互補的;我們可以通過對比兩個文件來差看他們的區別;
  1、關於/etc/passwd 和 UID;
  /etc/passwd 是系統識別用戶的一個文件,做個不恰當的比喻,/etc/passwd
是一個花名冊,系統所有的用戶都在這裡有登錄記載;當我們以beinan 這個賬號登錄時,系統首先會查閱 /etc/passwd
文件,看是否有beinan 這個賬號,然後確定beinan的UID,通過UID 來確認用戶和身份,如果存在則讀取/etc/shadow
影子文件中所對應的beinan的密碼;如果密碼核實無誤則登錄系統,讀取用戶的配置文件;
  1)/etc/passwd 的內容理解:
  在/etc/passwd 中,每一行都表示的是一個用戶的信息;一行有7個段位;每個段位用:號分割,比如下面是我的系統中的/etc/passwd 的兩行:
   beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
   linuxsir:x:501:502::/home/linuxsir:/bin/bash
  第一字段:用戶名(也被稱為登錄名);在上面的例子中,我們看到這兩個用戶的用戶名分別是 beinan 和linuxsir;
  第二字段:口令;在例子中我們看到的是一個x,其實密碼已被映射到/etc/shadow 文件中;
  第三字段:UID ;請參看本文的UID的解說;
  第四字段:GID;請參看本文的GID的解說;
  第五字段:用戶名全稱,這是可選的,可以不設置,在beinan這個用戶中,用戶的全稱是beinan sun ;而linuxsir 這個用戶是沒有設置全稱;
  第六字段:用戶的家目錄所在位置;beinan 這個用戶是/home/beinan ,而linuxsir 這個用戶是/home/linuxsir ;
  第七字段:用戶所用SHELL 的類型,beinan和linuxsir 都用的是 bash ;所以設置為/bin/bash ;
  2)關於UID 的理解:
  UID 是用戶的ID 值,在系統中每個用戶的UID的值是唯一的,更確切的說每個用戶都要對應一個唯一的UID
,系統管理員應該確保這一規則。系統用戶的UID的值從0開始,是一個正整數,至於最大值可以在/etc/login.defs
可以查到,一般Linux發行版約定為60000; 在Linux 中,root的UID是0,擁有系統最高權限;
  UID 在系統唯一特性,做為系統管理員應該確保這一標准,UID
的唯一性關系到系統的安全,應該值得我們關注!比如我在/etc/passwd 中把beinan的UID
改為0後,你設想會發生什麼呢?beinan這個用戶會被確認為root用戶。beinan這個帳號可以進行所有root的操作;
  UID 是確認用戶權限的標識,用戶登錄系統所處的角色是通過UID 來實現的,而非用戶名,切記;把幾個用戶共用一個UID
是危險的,比如我們上面所談到的,把普通用戶的UID 改為0,和root共用一個UID
,這事實上就造成了系統管理權限的混亂。如果我們想用root權限,可以通過su或sudo來實現;切不可隨意讓一個用戶和root分享同一個UID ;
  UID是唯一性,只是要求管理員所做的,其實我們修改/etc/passwd 文件,可以修改任何用戶的UID的值為0,
  一般情況下,每個Linux的發行版都會預留一定的UID和GID給系統虛擬用戶占用,虛擬用戶一般是系統安裝時就有的,是為了完成系統任務所必須的用戶,但虛擬用戶是不能登錄系統的,比如ftp、nobody、adm、rpm、bin、shutdown等;
  在Fedora 系統會把前499 個UID和GID 預留出來,我們添加新用戶時的UID
從500開始的,GID也是從500開始,至於其它系統,有的系統可能會把前999UID和GID預留出來;以各個系統中/etc/login.defs
中的 UID_MIN 的最小值為准; Fedora 系統 login.defs的UID_MIN是500,而UID_MAX
值為60000,也就是說我們通過adduser默認添加的用戶的UID的值是500到60000之間;而Slackware
通過adduser不指定UID來添加用戶,默認UID 是從1000開始;
  2、關於/etc/shadow ;
  1)/etc/shadow 概說;
  /etc/shadow文件是/etc/passwd 的影子文件,這個文件並不由/etc/passwd
而產生的,這兩個文件是應該是對應互補的;shadow內容包括用戶及被加密的密碼以及其它/etc/passwd
不能包括的信息,比如用戶的有效期限等;這個文件只有root權限可以讀取和操作,權限如下:
  -r——– 1 root root 1.5K 10月 16 09:49 /etc/shadow
  /etc/shadow 的權限不能隨便改為其它用戶可讀,這樣做是危險的。如果您發現這個文件的權限變成了其它用戶組或用戶可讀了,要進行檢查,以防系統安全問題的發生;
  如果我們以普通用戶查看這個文件時,應該什麼也查看不到,提示是權限不夠:
  [beinan@localhost ~]$ more /etc/shadow
   /etc/shadow: 權限不夠
  2)/etc/shadow 的內容分析;
  /etc/shadow 文件的內容包括9個段位,每個段位之間用:號分割;我們以如下的例子說明;
  beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
   linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
  第一字段:用戶名(也被稱為登錄名),在/etc/shadow中,用戶名和/etc/passwd 是相同的,這樣就把passwd 和shadow中用的用戶記錄聯系在一起;這個字段是非空的;
  第二字段:密碼(已被加密),如果是有些用戶在這段是x,表示這個用戶不能登錄到系統;這個字段是非空的;
  第三字段:上次修改口令的時間;這個時間是從1970年01月01日算起到最近一次修改口令的時間間隔(天數),您可以通過passwd 來修改用戶的密碼,然後查看/etc/shadow中此字段的變化;
  第四字段:兩次修改口令間隔最少的天數;如果設置為0,則禁用此功能;也就是說用戶必須經過多少天才能修改其口令;此項功能用處不是太大;默認值是通過/etc/login.defs文件定義中獲取,PASS_MIN_DAYS 中有定義;
  第五字段:兩次修改口令間隔最多的天數;這個能增強管理員管理用戶口令的時效性,應該說在增強了系統的安全性;如果是系統默認值,是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_MAX_DAYS 中定義;
  第六字段:提前多少天警告用戶口令將過期;當用戶登錄系統後,系統登錄程序提醒用戶口令將要作廢;如果是系統默認值,是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_WARN_AGE 中定義;
  第七字段:在口令過期之後多少天禁用此用戶;此字段表示用戶口令作廢多少天後,系統會禁用此用戶,也就是說系統會不能再讓此用戶登錄,也不會提示用戶過期,是完全禁用;
  第八字段:用戶過期日期;此字段指定了用戶作廢的天數(從1970年的1月1日開始的天數),如果這個字段的值為空,帳號永久可用;
  第九字段:保留字段,目前為空,以備將來Linux發展之用;
  如果更為詳細的,請用 man shadow來查看幫助,您會得到更為詳盡的資料;
  我們再根據實例分析:
  beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
   linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
  第一字段:用戶名(也被稱之為登錄名),在例子中有峽谷兩條記錄,也表示有兩個用戶beinan和linuxsir
  第二字段:被加密的密碼,如果有的用戶在此字段中是x,表示這個用戶不能登錄系統,也可以看作是虛擬用戶,不過虛擬用戶和真實用戶都是相對的,系統管理員隨時可以對任何用戶操作;
  第三字段:表示上次更改口令的天數(距1970年01月01日),上面的例子能說明beinan和linuxsir這兩個用戶,是在同一天更改了用戶密碼,當然是通過passwd 命令來更改的,更改密碼的時間距1970年01月01日的天數為13072;
  第四字段:禁用兩次口令修改之間最小天數的功能,設置為0
  第五字段:兩次修改口令間隔最多的天數,在例子中都是99999天;這個值如果在添加用戶時沒有指定的話,是通過/etc/login.defs來獲取默認值,PASS_MAX_DAYS 99999;您可以查看/etc/login.defs來查看,具體的值;
  第六字段:提前多少天警告用戶口令將過期;當用戶登錄系統後,系統登錄程序提醒用戶口令將要作廢;如果是系統默認值,是在添加用戶時由/etc
/login.defs文件定義中獲取,在PASS_WARN_AGE 中定義;在例子中的值是7 ,表示在用戶口令將過期的前7天警告用戶更改期口令;
  第七字段:在口令過期之後多少天禁用此用戶;此字段表示用戶口令作廢多少天後,系統會禁用此用戶,也就是說系統會不能再讓此用戶登錄,也不會提示用戶過期,是完全禁用;在例子中,此字段兩個用戶的都是空的,表示禁用這個功能;
  第八字段:用戶過期日期;此字段指定了用戶作廢的天數(從1970年的1月1日開始的天數),如果這個字段的值為空,帳號永久可用;在例子中,
我們看到beinan這個用戶在此字段是空的,表示此用戶永久可用;而linuxsir這個用戶表示在距1970年01月01日後13108天後過期,算
起來也就是2005年11月21號過期;哈哈,如果有興趣的的弟兄,自己來算算,大體還是差不多的;);
  第九字段:保留字段,目前為空,以備將來Linux發展之用;
二、關於用戶組;
  具有某種共同特征的用戶集合起來就是用戶組(Group)。用戶組(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件;在本標題下,您還能了解到什麼是GID ;
  1、/etc/group 解說;
  /etc/group
文件是用戶組的配置文件,內容包括用戶和用戶組,並且能顯示出用戶是歸屬哪個用戶組或哪幾個用戶組,因為一個用戶可以歸屬一個或多個不同的用戶組;同一用
戶組的用戶之間具有相似的特征。比如我們把某一用戶加入到root用戶組,那麼這個用戶就可以浏覽root用戶家目錄的文件,如果root用戶把某個文件
的讀寫執行權限開放,root用戶組的所有用戶都可以修改此文件,如果是可執行的文件(比如腳本),root用戶組的用戶也是可以執行的;
  用戶組的特性在系統管理中為系統管理員提供了極大的方便,但安全性也是值得關注的,如某個用戶下有對系統管理有最重要的內容,最好讓用戶擁有獨立的用戶組,或者是把用戶下的文件的權限設置為完全私有;另外root用戶組一般不要輕易把普通用戶加入進去,
  2、/etc/group 內容具體分析
  /etc/group 的內容包括用戶組(Group)、用戶組口令、GID及該用戶組所包含的用戶(User),每個用戶組一條記錄;格式如下:
  group_name:passwd:GID:user_list
  在/etc/group 中的每條記錄分四個字段:
  第一字段:用戶組名稱;
  第二字段:用戶組密碼;
  第三字段:GID
  第四字段:用戶列表,每個用戶之間用,號分割;本字段可以為空;如果字段為空表示用戶組為GID的用戶名;
  我們舉個例子:
  root:x:0:root,linuxsir 注:用戶組root,x是密碼段,表示沒有設置密碼,GID是0,root用戶組下包括root、linuxsir以及GID為0的其它用戶(可以通過/etc/passwd查看);;
  beinan:x:500:linuxsir 注:用戶組beinan,x是密碼段,表示沒有設置密碼,GID是500,beinan用戶組下包括linuxsir用戶及GID為500的用戶(可以通過/etc/passwd查看);
  linuxsir:x:502:linuxsir 注:用戶組linuxsir,x是密碼段,表示沒有設置密碼,GID是502,linuxsir用戶組下包用戶linuxsir及GID為502的用戶(可以通過/etc/passwd查看);
  helloer:x:503: 注:用戶組helloer,x是密碼段,表示沒有設置密碼,GID是503,helloer用戶組下包括GID為503的用戶,可以通過/etc/passwd查看;
  而/etc/passwd 對應的相關的記錄為:
  root:x:0:0:root:/root:/bin/bash
   beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
   linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
   helloer:x:502:503::/home/helloer:/bin/bash
  由此可以看出helloer用戶組包括 helloer用戶;所以我們查看一個用戶組所擁有的用戶,可以通過對比/etc/passwd和/etc/group來得到;
  2、關於GID ;
  GID和UID類似,是一個正整數或0,GID從0開始,GID為0的組讓系統付予給root用戶組;系統會預留一些較靠前的GID給系統虛擬
用戶(也被稱為偽裝用戶)之用;每個系統預留的GID都有所不同,比如Fedora
預留了500個,我們添加新用戶組時,用戶組是從500開始的;而Slackware
是把前100個GID預留,新添加的用戶組是從100開始;查看系統添加用戶組默認的GID范圍應該查看 /etc/login.defs 中的
GID_MIN 和GID_MAX 值;
  我們可以對照/etc/passwd和/etc/group 兩個文件;我們會發現有默認用戶組之說;我們在 /etc/passwd
中的每條用戶記錄會發現用戶默認的GID
;在/etc/group中,我們也會發現每個用戶組下有多少個用戶;在創建目錄和文件時,會使用默認的用戶組;我們還是舉個例子;
  比如我把linuxsir 加為root用戶組,在/etc/passwd 和/etc/group 中的記錄相關記錄為:
  linuxsir用戶在 /etc/passwd 中的記錄;我們在這條記錄中看到,linuxsir用戶默認的GID為502;而502的GID 在/etc/group中查到是linuxsir用戶組;
  linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
  linuxsir 用戶在 /etc/group 中的相關記錄;在這裡,我們看到linuxsir用戶組的GID 為502,而linuxsir 用戶歸屬為root、beinan用戶組;
  root:x:0:root,linuxsir
   beinan:x:500:linuxsir
   linuxsir:x:502:linuxsir
  我們用linuxsir 來創建一個目錄,以觀察linuxsir用戶創建目錄的權限歸屬;
  [linuxsir@localhost ~]$ mkdir testdir
   [linuxsir@localhost ~]$ ls -lh
  總用量 4.0K
  drwxrwxr-x 2 linuxsir linuxsir 4.0K 10月 17 11:42 testdir
  通過我們用linuxsir 來創建目錄時發現,testdir的權限歸屬仍然是linuxsir用戶和linuxsir用戶組的;而沒有歸屬root和beinan用戶組,明白了吧;
  但值得注意的是,判斷用戶的訪問權限時,默認的GID 並不是最重要的,只要一個目錄讓同組用戶可以訪問的權限,那麼同組用戶就可以擁有該目錄的訪問權,在這時用戶的默認GID 並不是最重要的;
  3、/etc/gshadow 解說;
  /etc/gshadow是/etc/group的加密資訊文件,比如用戶組(Group)管理密碼就是存放在這個文件。/etc
/gshadow和/etc/group是互補的兩個文件;對於大型服務器,針對很多用戶和組,定制一些關系結構比較復雜的權限模型,設置用戶組密碼是極
有必要的。比如我們不想讓一些非用戶組成員永久擁有用戶組的權限和特性,這時我們可以通過密碼驗證的方式來讓某些用戶臨時擁有一些用戶組特性,這時就要用
到用戶組密碼;
  /etc/gshadow 格式如下,每個用戶組獨占一行;
  groupname:password:admin,admin,…:member,member,…
  第一字段:用戶組
  第二字段:用戶組密碼,這個段可以是空的或!,如果是空的或有!,表示沒有密碼;
  第三字段:用戶組管理者,這個字段也可為空,如果有多個用戶組管理者,用,號分割;
  第四字段:組成員,如果有多個成員,用,號分割;
  舉例:
  beinan:!::linuxsir
   linuxsir:oUS/q7NH75RhQ::linuxsir
  第一字段:這個例子中,有兩個用戶組beinan用linuxsir
  第二字段:用戶組的密碼,beinan用戶組無密碼;linuxsir用戶組有已經,已經加密;
  第三字段:用戶組管理者,兩者都為空;
  第四字段:beinan用戶組所擁有的成員是linuxsir ,然後還要對照一下/etc/group和/etc/passwd
查看是否還有其它用戶,一般默認添加的用戶,有時同時也會創建用戶組和用戶名同名稱; linuxsir 用戶組有成員linuxisir ;
  如何設置用戶組的密碼? 我們可以通過 gpasswd 來實現;不過一般的情況下,沒有必要設置用戶組的密碼;不過自己實踐一下也有必要;下面是一個為linuxsir用戶組設置密碼的例子;
  gpasswd 的用法: gpasswd 用戶組
  
[email=root@localhost]root@localhost[/email]
~]# gpasswd linuxsir
  正在修改 linuxsir 組的密碼
  新密碼:
  請重新輸入新密碼:
  用戶組之間的切換,應該用 newgrp ,這個有點象用戶之間切換的su ;我先舉個例子:
  [beinan@localhost ~]$ newgrp linuxsir
  密碼:
  [beinan@localhost ~]$ mkdir lingroup
   [beinan@localhost ~]$ ls -ld lingroup/
  drwxr-xr-x 2 beinan linuxsir 4096 10月 18 15:56 lingroup/
  [beinan@localhost ~]$ newgrp beinan
   [beinan@localhost ~]$ mkdir beinangrouptest
   [beinan@localhost ~]$ ls -ld beinangrouptest
  drwxrwxr-x 2 beinan beinan 4096 10月 18 15:56 beinangrouptest
  說明:我是以beinan用戶組切換到linuxsir用戶組,並且建了一個目錄,然後再切換回beinan用戶組,又建了一個目錄,請觀察兩個目錄屬用戶組的不同;還是自己體會吧;
三、通過用戶和用戶組配置文件來查詢或管理用戶;
  1、用戶和用戶組查詢的方法;


  1)通過查看用戶(User)和用戶組的配置文件的辦法來查看用戶信息
  我們已經用戶(User)和用戶組(Group)的配置文件已經有個基本的了解,通過查看用戶(User)和用戶組的配置文件,我們就能做到對系統用戶的了解,當然您也可以通過id 或finger 等工具來進行用戶的查詢等任務。
  對於文件的查看,我們可以通過 more 或cat 來查看,比如 more /etc/passwd 或cat /etc/passwd ;其它工具也一樣,能對文本查看就行,比如less 也好
  比如我們可以通過more 、cat 、less命令對/etc/passwd 的查看,雖然命令不同,但達到的目的是一樣的, 都是得到/etc/passwd 的內容;
  [root@localhost ~]# more /etc/passwd
   [root@localhost ~]# cat /etc/passwd
   [root@localhost ~]# less /etc/passwd


  2)通過id和finger 工具來獲取用戶信息;-------很重要-----
  除了直接查看用戶(User)和用戶組(Group)配置文件的辦法除外,我們還有id和finger工具可用,我們一樣通過命令行的操作,來
完成對用戶的查詢;id和finger,是兩個各有測重的工具,id工具更測重用戶、用戶所歸屬的用戶組、UID 和GID 的查看;而finger
測重用戶資訊的查詢,比如用戶名(登錄名)、電話、家目錄、登錄SHELL類型、真實姓名、空閒時間等等;


  id 命令用法;
  id 選項 用戶名
  比如:我想查詢beinan和linuxsir 用戶的UID、GID 以及歸屬用戶組的情況:
  [root@localhost ~]# id beinan
   uid=500(beinan) gid=500(beinan) groups=500(beinan)
  注:beinan的UID 是 500,默認用戶組是beinan,默認用戶組的GID 是500,歸屬於beinan用戶組;
  [root@localhost ~]# id linuxsir
   uid=505(linuxsir) gid=502(linuxsir) groups=502(linuxsir),0(root),500(beinan)
  注:linuxsir的UID 是505,默認用戶組是linuxsir ,默認用戶組的GID 是502,歸屬於linuxsir(GID為502)、root(GID為0),beinan(GID為500);
  關於id的詳細用法,我會在專門用戶查詢的文章來介紹;您可以通過man id 來查看用法,用起來還是比較簡單的;
  
finger 的用法
  finger 選項 用戶名1 用戶名2 …
  詳細用法請參看man finger ;關於更為詳細用法,我會在專門用戶查詢的文章來介紹;
  如果finger 不加任何參數和用戶,會顯示出當前在線用戶,和w命令類似;對比一下;不過各有測重;


 [root@localhost ~]# w
   14:02:42 up 1:03, 3 users, load average: 0.04, 0.15, 0.18
   USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
   linuxsir tty1 - 13:39 22:51 0.01s 0.01s -bash
   beinan tty2 - 13:53 8:48 11.62s 0.00s /bin/sh /usr/X1
   beinan pts/0 :0.0 13:57 0.00s 0.14s 1.08s gnome-terminal


   [root@localhost ~]# finger
   Login Name Tty Idle Login Time Office Office Phone
   beinan beinan sun tty2 8 Oct 18 13:53
   beinan beinan sun pts/0 Oct 18 13:57 (:0.0)
   linuxsir linuxsir open tty1 22 Oct 18 13:39 linuxsir o +1-389-866-771
  如果我們在finger 後面加上用戶名,就可以看到用戶更為詳細的信息,可以一次查看多個用戶,用空格分開,比如下面的例子中,我們一次查詢兩個用戶beinan和linuxsir的信息;
  [root@localhost ~]# finger beinan linuxsir
   Login: beinan 注:用戶名(也是登錄名) Name: beinan sun (用戶名全稱)
   Directory: /home/beinan 注:家目錄 Shell: /bin/bash 注:所用SHELL類型
   On since Tue Oct 18 13:53 (CST) on tty2 10 minutes 55 seconds idle 注:空閒時間;
   On since Tue Oct 18 13:57 (CST) on pts/0 from :0.0
   No mail.
   No Plan.
   Login: linuxsir Name: linuxsir open
   Directory: /home/linuxsir Shell: /bin/bash
   Office: linuxsir office, +1-389-866-7715
   On since Tue Oct 18 13:39 (CST) on tty1 24 minutes 58 seconds idle
   No mail.
   No Plan.


  3)用戶組查詢的辦法;
  我們可以通過用戶來查詢所歸屬的組,用groups 來查詢;比如我查詢beinan和linuxsir 所歸屬的組,我們可以用groups 來查詢;
  [root@localhost ~]# groups beinan linuxsir
   beinan : beinan
   linuxsir : linuxsir root beinan
  注:這是通過groups 同時查看了用戶beinan和linuxsir所歸屬的組;


  2、通過修改用戶(User)和用戶組(Group)配置文件的辦法來添加;
  由於我們已經在前面說過,可以通過修改配置文件的辦法來管理用戶,所以此主題應該包括此內容;當然通過用戶及用戶組管理工具(比如
adduser、userdel、usermod 、userinfo、groupadd 、groupdel
、groupmod等)也是可以的,通過管理工具對用戶的管理我們將要在專門一篇文章中介紹;
  通過修改用戶(User)和用戶組(Group)配置文件的方法管理用戶之用戶的添加流程;
  我們先以添加用戶為例,對用戶的刪除和修改都比較簡單;
  1)修改 /etc/passwd ,添加用戶記錄;
  我們按/etc/passwd的格式的約定來添加新的用戶記錄;當然您要讓一個用戶失效,可以刪除您想要刪除的用戶記錄;值得注意的是,不能讓UID 重復;
  比如我想添加lanhaitun 這個用戶,我發現UID 508沒有用戶用,並且我想把其用戶組也設置為lanhaitun ,用戶組的GID 也設置為508,如果GID 沒有占用的話;
  我們要打開 /etc/passwd ,在最下面加一行;
  lanhaitun:x:508:508::/home/lanhaitun:/bin/bash
  然後執行pwconv ,讓/etc/passwd 和/etc/shadow同步,您可以查看 /etc/shadow的內容是否同步;
  [root@localhost beinan]# pwconv
  2)修改/etc/group
  首先,我們得查看是否有lanhaitun用戶組,以及GID 508 是否被其它用戶組占用;
  [root@localhost ~]# more /etc/group |grep lanhaitun
   [root@localhost ~]# more /etc/group |grep 508
  通過查看,我們發現沒有被占用;所以我們要添加lanhaitun 的記錄到 /etc/group
  lanhaitun:x:508:
  其次,是運行 grpconv 來同步/etc/group 和/etc/gshadow內容,您可以通過查看/etc/gshadow的內容變化確認是不是添加組成功了;
  [root@localhost beinan]# grpconv
  3)創建用戶的家目錄,並把用戶啟動文件也復制過去;
  創建用戶的家目錄,我們要以/etc/passwd 中添加的新用戶的記錄為准,我們在/etc/passwd
中添加新用戶lanhaitun ,她的家目錄是處於/home/lanhaitun ;另外我們還需要把/etc/skel
目錄下的.*隱藏文件復制過去;
  [root@localhost ~]# cp -R /etc/skel/ /home/lanhaitun
   [root@localhost ~]# ls -la /home/lanhaitun/
   總用量 48
   drwxr-xr-x 3 root root 4096 10月 18 14:53 .
   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..
   -rw-r–r– 1 root root 24 10月 18 14:53 .bash_logout
   -rw-r–r– 1 root root 191 10月 18 14:53 .bash_profile
   -rw-r–r– 1 root root 124 10月 18 14:53 .bashrc
   -rw-r–r– 1 root root 5619 10月 18 14:53 .canna
   -rw-r–r– 1 root root 438 10月 18 14:53 .emacs
   -rw-r–r– 1 root root 120 10月 18 14:53 .gtkrc
   drwxr-xr-x 3 root root 4096 10月 18 14:53 .kde
   -rw-r–r– 1 root root 658 10月 18 14:53 .zshrc
  4)改變新增用戶家目錄的屬主和權限;
  我們發現新增用戶的家目錄的屬主目前是root ,並且家目錄下的隱藏文件也是root權限;
  [root@localhost ~]# ls -ld /home/lanhaitun/
   drwxr-xr-x 3 root root 4096 10月 18 14:53 /home/lanhaitun/
  所以我們要通過chown 命令來改變/home/lanhaitun目錄歸屬為lanhaitun用戶;
  [root@localhost ~]# chown -R lanhaitun:lanhaitun /home/lanhaitun
  查看是否已經更換了屬主為lanhaitun用戶所有;
  [root@localhost ~]# ls -ld /home/lanhaitun/
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/
   [root@localhost ~]# ls -la /home/lanhaitun/
   總用量 48
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .
   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..
   -rw-r–r– 1 lanhaitun lanhaitun 24 10月 18 14:53 .bash_logout
   -rw-r–r– 1 lanhaitun lanhaitun 191 10月 18 14:53 .bash_profile
   -rw-r–r– 1 lanhaitun lanhaitun 124 10月 18 14:53 .bashrc
   -rw-r–r– 1 lanhaitun lanhaitun 5619 10月 18 14:53 .canna
   -rw-r–r– 1 lanhaitun lanhaitun 438 10月 18 14:53 .emacs
   -rw-r–r– 1 lanhaitun lanhaitun 120 10月 18 14:53 .gtkrc
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .kde
   -rw-r–r– 1 lanhaitun lanhaitun 658 10月 18 14:53 .zshrc
  看來已經實現了;
  但這樣還是不夠的,因為/home/lanhaitun/的目錄權限可能會過於公開;
  drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/
  我們看到 /home/lanhaitun/ 目錄的權限為 drwxr-xr-x ,也就是同組用戶和其它用戶組所能查看,為了保密,我們有理由把新增用戶家目錄的權限設置為只有其自己可讀可寫可執行;於是… …
  [root@localhost ~]# chmod 700 /home/lanhaitun/
   [root@localhost ~]# ls -ld /home/lanhaitun/
   drwx—— 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/
  我們用其它用戶,當然得把具有超級權限的root用戶除外;比如我以beinan用戶來查看lanhaitun的家目錄會得到如下信息;
  [beinan@localhost ~]$ ls -la /home/lanhaitun/
   ls: /home/lanhaitun/: 權限不夠
  如此看來,lanhaitun用戶的家目錄是安全的
<IMG onmousewheel="return imgzoom(this);" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt="Click here to open new window\nCTRL+Mouse wheel to zoom in/out";}" onclick="if(!this.resized) {return true;} else {window.open('http://linux.qisi.org/wp-includes/images/smilies/icon_wink.gif');}" alt="" src=http://www.2cto.com/uploadfile/2016/0502/20160502112115400.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt="Click here to open new window\nCTRL+Mouse wheel to zoom in/out";}" border=0>


  5)設置新增用戶的密碼;
  以上各步驟都就序了,我們得為新增用戶設置密碼了;要通過passwd 命令來生成;這個沒有辦法通過修改文件解決;
  passwd 的用法:
  passwd 用戶
  [root@localhost ~]# passwd lanhaitun
   Changing password for user lanhaitun.
   New UNIX password: 注:輸入您的密碼
   Retype new UNIX password: 再輸入一次
   passwd: all authentication tokens updated successfully. 注:設置密碼成功
  6)測試添增用戶是否成功;
  您可以用新增用戶登錄測試,也可以通過su 來切換用戶測試;
  [beinan@localhost ~]$ su lanhaitun
   Password:
   [lanhaitun@localhost beinan]$ cd ~
   [lanhaitun@localhost ~]$ pwd
   /home/lanhaitun
   [lanhaitun@localhost ~]$ ls -la
   總用量 52
   drwx—— 3 lanhaitun lanhaitun 4096 10月 18 15:15 .
   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..
   -rw-r–r– 1 lanhaitun lanhaitun 24 10月 18 14:53 .bash_logout
   -rw-r–r– 1 lanhaitun lanhaitun 191 10月 18 14:53 .bash_profile
   -rw-r–r– 1 lanhaitun lanhaitun 124 10月 18 14:53 .bashrc
   -rw-r–r– 1 lanhaitun lanhaitun 5619 10月 18 14:53 .canna
   -rw-r–r– 1 lanhaitun lanhaitun 438 10月 18 14:53 .emacs
   -rw-r–r– 1 lanhaitun lanhaitun 120 10月 18 14:53 .gtkrc
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .kde
   -rw——- 1 lanhaitun lanhaitun 66 10月 18 15:15 .xauthOhEoTk
   -rw-r–r– 1 lanhaitun lanhaitun 658 10月 18 14:53 .zshrc
   [lanhaitun@localhost ~]$ mkdir testdir
   [lanhaitun@localhost ~]$ ls -lh
   總用量 4.0K
   drwxrwxr-x 2 lanhaitun lanhaitun 4.0K 10月 18 15:16 testdir
  通過上面一系列動作,我們會發現所創建的lanhaitun用戶已經成功;
  2、通過修改用戶(User)和用戶組(Group)配置文件的辦法來修改用戶或用戶組;
  我們可以修改/etc/passwd 和/etc/group 來達到修改用戶和用戶所歸屬的組,這個過程和添加新用戶時差不多;比如我想修改lanhaitun的用戶名全稱、公司以及電話等信息;我們可以修改/etc/passwd 實現;
  1)修改用戶信息;
  lanhaitun:x:508:508::/home/lanhaitun:/bin/bash 注:這是初始記錄;
  我們可以修改為
  lanhaitun:x:508:508:lanhaitun wu,Office Dalian,13000000000:/home/lanhaitun:/bin/bash
  當然我們還可以修改用戶的bash 類型,家目錄等,當然如果修改家目錄,還得進行建家目錄、屬主和權限的操作,這和前面添加用戶的辦法在程序上有些是相同的;
  修改完成後,我們要進行pwconv 同步,通過finger 來查看用戶的信息等;
  [root@localhost lanhaitun]# pwconv
   [root@localhost lanhaitun]# finger lanhaitun
   Login: lanhaitun Name: lanhaitun wu
   Directory: /home/lanhaitun Shell: /bin/bash
   Office: Office Dalian, +1-300-000-0000
   Never logged in.
   No mail.
   No Plan.


  2)修改用戶所歸屬的組,可以通過/etc/group 修改實現;
  當然修改用戶和用戶組,不僅能通過修改配置文件來實現,還能過過 usermod 及chfn來實現;我將在以後的文檔中寫一寫,也比較簡單;您可以通過man來查看用法;在這裡我們先講一講如何通過修改配置文件來達到目的;
  如果我們想把lanhaitun 這個用戶歸屬到root用戶組,所以我們還能修改/etc/group 的辦法來達到目的;找到/etc/group 中的root開頭的一行,按其規劃加入lanhaitun;
  root:x:0:root,lanhaitun
  如果不明白,看前面/etc/group的解釋,謝謝;
  然後執行 grpconv 命令來同步/etc/group 和/etc/gshadow兩個文件的內容;
  [root@localhost ~]# grpconv
  查看lanhaitun歸屬組的信息;
  [root@localhost ~]# id lanhaitun
   uid=508(lanhaitun) gid=508(lanhaitun) groups=508(lanhaitun),0(root)
  3)刪除用戶及用戶組的辦法;
  這個比較簡單,我們可以通過刪除/etc/passwd 和/etc/group 相應的用戶和用戶組記錄就能達到目的,也能過過userdel 和groupdel 來實現對用戶及用戶組的刪除;
  如果是通過修改用戶和用戶組配置文件的辦法來刪除用戶,就是刪除相應的記錄就行了,如果不想保留其家目錄,刪除就是了。
  [root@localhost ~]# userdel lanhaitun
   [root@localhost ~]# userdel -r lanhaitun
  注:可以用userdel 來刪除lanhaitun 用戶,我們看到第二個例子中多了一個參數-r
,第一個例子是說只刪除lanhaitun用戶,其家目錄和mail等仍會保存;加上-r
參數,是刪除家目錄及mail等;所以要小心操作;用userdel 刪除用戶的同時,也會把其用戶組刪除;我們可以通過/etc/passwd
和/etc/group 的內容變化來查看。


===================================================
linux系統賬號和密碼策略
===================================================
一.情況說明
為了滿足系統安全性要求和最大限度的保障主機及數據安全。特為linux系統的賬號和密碼作以下安全策略設置。
Linux系統中對賬號和密碼的管理是通過下面這些配置文件:
/etc/login.defs
/etc/shadow
其中/etc/login.defs文件是一個全局性的文件它的設置是對系統中所有新創建的用戶起作用(root用戶除外)
然而/etc/shadow文件可以針對每個特定賬號進行策略設置。
因此我們可以修改/etc/login.defs文件使以後新創建的用戶都嚴格遵循策略限制,同時我們可以手動修改/etc/shadow文件對系統現有的賬號進行設置以滿足策略要求。


二.修改/etc/login.defs文件
修改賬號密碼最大有效使用時間
添加test賬號測試效果並查看test賬號目前信息
1.調整系統時間,人為使test賬號過期
2.用test賬號登陸系統
提示密碼過期需要修改
系統提示需要修改賬號密碼。而且修改的密碼必須符合密碼復雜度要求,否則不予進入系統。
3.登陸系統後查看test賬號情況
密碼過期日期自動往後推移1天
而且從輸出信息可以得知此賬號過期時間已經往後又推遲了1天


三.在/etc/login.defs文件中還可以修改賬號的密碼長度
PASS_MIN_LEN 5 系統默認是最少5個字符


四.修改/etc/shadow文件
這個文件我們可以手動去修改但是為了安全和正確性,我們建議使用系統提供的一個命令來修改:chage
-m :密碼可更改的最小天數。為零時代表任何時候都可以更改密碼。
  -M :密碼保持有效的最大天數。
  -W :用戶密碼到期前,提前收到警告信息的天數。
  -E :帳號到期的日期。過了這天,此帳號將不可用。
  -d :上一次更改的日期
  -l :例出當前的設置。由非特權用戶來確定他們的密碼或帳號何時過期。
這個命令的使用必須是root賬號(除了-l參數),因此我們可以使用以下命名和參數:
#chage –M 90 –W 7 賬號 ?—修改密碼有效期限為90天並且提前7天警告用戶密碼將過期

五.Sudo設置
為了便於日後的維護和避免當root賬號密碼過期後無法操作系統的情況出現。特意為某個特殊賬號配置sudo權限。
1. 基本步驟
以root用戶登陸系統
運行#visudo
在文件的結尾添加內容:
test ALL=(root)/usr/bin/chage
賬號名稱
主機名ALL代表所有主機
賦予普通用戶具有root權限執行命令
賦予普通用戶有執行chage的權限


======================================
Linux時鐘簡介:非常重要
======================================
Linux機器裡有兩個時鐘,一個是硬件時鐘(CMOS時鐘),一個是內核時鐘。
硬件時鐘是電池驅動的,通過專門的芯片工作。可以通過BIOS設置屏或一些系統命令(如hwclock)進行設置。
內核時鐘是由 內核維護的,啟動時從硬件讀取時間,之後獨立運行。
RTC(Real Time Clock)
即Linux實時的時鐘驅動,通常它們被嵌在計算機的芯片中,也有一些是在主板上使用Motorola MC146818(或clone)實現的。該硬件設備可映射到/dev/rtc, 供root編程訪問。


Linux將時鐘分為系統時鐘(System Clock)和硬件(Real Time Clock,簡稱RTC)時鐘兩種。系統時間是指當前Linux Kernel中的時鐘,而硬件時鐘則是主板上由電池供電的那個主板硬件時鐘,這個時鐘可以在BIOS的“Standard BIOS Feture”項中進行設置。 既然Linux有兩個時鐘系統,那麼大家所使用的Linux默認使用哪種時鐘系統呢?會不回出現兩種系統時鐘沖突的情況呢?這些疑問和擔心不無道理。首 先,Linux並沒有默認哪個時鐘系統。當Linux啟動時,系統時鐘會去讀取硬件時鐘的設置,然後系統時鐘就會獨立於硬件運作。
從Linux啟動過程來看,系統時鐘和硬件時鐘不會發生沖突,但Linux中的所有命令(包括函數)都是采用的系統時鐘設置。不僅如此,系統時鐘和硬件時 鐘還可以采用異步方式,即系統時間和硬件時間可以不同。這樣做的好處對於普通用戶意義不大,但對於Linux網絡管理員卻有很大的用處。例如,要將一個很大的網絡中(跨越若干時區)的服務器同步,假如位於美國紐約的Linux服務器和北京的Linux服務器,其中一台服務器無須改變硬件時鐘 而只需臨時設置一個系統時間,如要將北京服務器上的時間設置為紐約時間,兩台服務器完成文件的同步後,再與原來的時鐘同步一下即可。這樣系統和硬件時鐘就 提供了更為靈活的操作。
在Linux中,用於時鐘查看和設置的命令主要有date、hwclock和clock。其中,clock和hwclock用法相近,只不過clock命 令除了支持x86硬件體系外,還支持Alpha硬件體系。由於目前絕大多數用戶使用x86硬件體系,所以可以視這兩個命令為一個命令來學習。




1.hwclock –r : 查看硬件時鐘是否為本地時間
為了查看硬件時鐘是否為本地時間,運行命令hwclock –r。結果系統提示:“Could not open RTC: No such file or directory”,即找不到RTC文件。


2./dev/rtc如何創建RTC文件
cat /dev/rtc
cat /proc/driver/rtc -----這個很重要
mknod /dev/rtc c 10 135
date


由於內核在編譯過程中沒有提供RTC支持,需要重新編譯內核(或為內核增加一個module)。方法為,在make menuconfig階段,選中“Character device”的“Enhanced Real Time Clock Support”一項的支持。為內核增加了該模塊後,目錄/proc/drive/下已出現了rtc文件,cat也能查看到正常的內容。但/dev/目錄下仍沒有rtc文件。
於是通過mknod命令在/dev目錄下增加rtc文件。通過man rtc可以得知,RTC為只讀字符設備,主10,從135。因此命令為“mknod /dev/rtc c 10 135”。命令執行完畢後,/dev下成功生成了rtc文件。運行hwclock –r,能夠看到硬件時間為本地時間。通過date命令查看系統時間,卻為UTC時間。這說明系統沒有進行本地時間的設置。


3./etc/localtime 決定了哪個時區
[root@nas-oam1 etc]# date -R 查看時間和時區。
Mon, 23 Dec 2013 11:33:48 +0800
Linux的系統時區是通過符號連接/etc/localtime來得到的。
可以通過tzset命令來設置時區。如果沒有該命令,可以通過命令“ln –s /etc/localtime /usr/share/zoneinfo/Asia/Shanghai”來將時區設置為亞洲的上海。


4./etc/sysconfig/clock
該配置文件可用來設置用戶選擇何種方式顯示時間。
如果硬件時鐘為本地時間,則UTC設為0(缺省值),並且不用設置環境變量TZ。
如果硬件時鐘為UTC時間,則要設置UTC為1,並設置環境變量TZ(或配置文件/etc/TZ)為時區信息,如“Asia/Shanghai”。


我機器的硬件時間為本地時間,因此該配置文件內容為:
ZONE="Asia/Shanghai"
UTC=0
ARC=0





1.在虛擬終端中使用date命令來查看和設置系統時間
查看系統時鐘的操作:
# date --------------------------有用


設置系統時鐘的操作:
# date 091713272003.30 --------------------------有用
通用的設置格式:
# date 月日時分年.秒


2.使用hwclock或clock命令查看和設置硬件時鐘
查看硬件時鐘的操作:
# hwclock --show 或# clock –show --------------------------有用
2003年09月17日 星期三 13時24分11秒 -0.482735 seconds
設置硬件時鐘的操作:
# hwclock --set --date="08/23/2013 09:52:00"
或者# clock --set --date="09/17/2003 13:26:00"
通用的設置格式:hwclock/clock --set --date=“月/日/年 時:分:秒”。


3.系統時鐘和硬件時鐘同步:
# hwclock --hctosys 或者 --------------------------有用
# clock --hctosys --------------------------有用
上面命令中,--hctosys表示Hardware Clock to SYStem clock。


硬件時鐘與系統時鐘同步:
hwclock --systohc 或者 --------------------------有用
clock –systohc --------------------------有用


注意的是:clock是hwclock的軟鏈接
[root@oam-nas2 yuanjs]# ls -l /sbin/clock*
lrwxrwxrwx. 1 root root 7 4月 3 15:55 /sbin/clock -> hwclock


===============================
linux 下修改日期和時間
===============================
我們一般使用“date -s”命令來修改系統時間。比如將系統時間設定成2009年11月13日的命令如下。
#date -s 11/13/09
將系統時間設定成下午1點12分0秒的命令如下。
#date -s 13:12:00


---- 注意,這裡說的是系統時間,是linux由操作系統維護的。


在系統啟動時,Linux操作系統將時間從CMOS中讀到系統時間變量中,以後修改時間通過修改系統時間實現。為了保持系統時間與CMOS時間的一致性, Linux每隔一段時間會將系統時間寫入CMOS。由於該同步是每隔一段時間(大約是11分鐘)進行的,在我們執行date -s後,如果馬上重起機器,修改時間就有可能沒有被寫入CMOS,這就是問題的原因。如果要確保修改生效可以執行如下命令。
#clock -w ----這個命令強制把系統時間寫入CMOS。




======================================
Linux時區簡介:非常重要
======================================
CST China Standard Time -----UTC+8:00 中國沿海時間(北京時間)
UTC 世界協調時間(Universal Time Coordinated,UTC)
GPS 系統中有兩種時間區分,一為UTC,另一為LT(地方時)兩者的區別為時區不同,UTC就是0時區的時間,地方時為本地時間,如北京為早上八點(東八區),UTC時間就為零點,時間比北京時晚八小時,以此計算即可
HKT-8 香港時間
JST-9 Janpanese Standard Time 日本標准時間


《1》查看時區
The time zone of the system is defined by the contents of /etc/localtime.
1)cat /etc/localtime 查看當前選中哪個時區。--------重點----------
cat /etc/timezone unix
cat /etc/TZ unix
2)cat /etc/sysconfig/clock 查看當前系統時鐘時區和硬件時鐘時區以及他們的時差是多少
該配置文件可用來設置用戶選擇何種方式顯示時間。
如果硬件時鐘為本地時間,則UTC設為0,並且不用設置環境變量TZ。
如果硬件時鐘為UTC時間,則要設置UTC為1,並設置環境變量TZ(或配置文件/etc/TZ)為時區信息,如“Asia/Shanghai”。
我機器的硬件時間為本地時間,因此該配置文件內容為:
ZONE="Asia/Shanghai"
UTC=0 #缺省值
ARC=0


如何查看硬件時鐘是否為本地時間:
hwclock –r


《2》設置時區:
1)在/usr/share/zoneinfo/目錄下查詢想要更換的時區名稱,修改格式同上
2)/etc/localtime可以是二進制文件也可以是軟連接文件。
將原有的localtime文件移走;
# mv /etc/localtime /etc/localtime-old
3)兩個方法:
(1)做新的localtime文件,將對應的時區文件鏈接過來:
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime --------重點----------
(2)或者cp /usr/share/zoneinfo/$主時區/$次時區 /etc/localtime:
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime --------重點----------
4)在/etc/sysconfig/clock文件上設置時區條目: (e.g. "Asia/Shanghai") ----設置硬件時鐘是否用local time or UTC
ZONE="Asia/Shanghai"
UTC=0 #缺省值 參考上面

[root@xiangfch etc]# cat /etc/sysconfig/clock
# The time zone of the system is defined by the contents of /etc/localtime.
# This file is only for evaluation by system-config-date, do not rely on its
# contents elsewhere.
ZONE="Asia/Shanghai"




======================================
linux下如何修改時區(TIMEZONE)
======================================
如何修改linux的timezone?謝謝!
你可以看看/etc路徑下有沒有一個文件localtime,如果有的話,它應該是一個軟鏈接,更改鏈接指向就可以更改系統時區設定。


現在的集群軟件,大部分都需要多台機器的時間差不能超過1000秒,所以如果用戶都用date命令去修改時間,這個比較簡單就不多說了。然而,有時候兩台機器的時間雖然一致,但是時區卻不同,那麼用戶就不得不去修改機器的時區,這個修改在不同操作系統是不同的,所以這裡分別介紹一下主流操作系統修改時區的方法:


Solaris:
在solaris中,修改時區需要修改/etc/TIMEZONE文件,其中的TZ=PRC就表示中國時區,我們可以將其替換為TZ=US/Pacific,再重啟機器,就將時區修改為美國太平洋時區了。
這裡需要注意三點:
1,在X86的機器上,需要再執行如下命令,更新/etc/rtc_config文件:
# rtc -z zone-name(這裡的zone-name就是/etc/TIMEZONE中TZ的值)
# rtc -c
2,到底有多少種時區可以選擇呢?我們可以進入/usr/share/lib/zoneinfo目錄,其中有很多目錄,包括US,也有很多文件,比如PRC;這表示US下還有很多時區,而PRC就是統一的時區。正因為如此,我們才看到TZ=PRC和TZ=US/Pacific這兩種不同的形式。
3,需要重啟系統使之生效。


Linux(Redhat and Suse):
1,在/usr/share/zoneinfo/目錄下查詢想要更換的時區名稱,修改格式同上
2,將原有的localtime文件移走;
# mv /etc/localtime /etc/localtime-old
3,做新的localtime文件,將對應的時區文件鏈接過來
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
4,與硬件同步
# /sbin/hwclock --systohc


AIX:
1,查看當前時區(其他操作系統是date命令即可)
cat /etc/environment (查找TZ所在行)
2,為了妥善起見,建議使用smit修改時區
smit chtz
3,所有的時區信息在/usr/share/lib/zoneinfo目錄


HPUX:
1,# set_parms timezone,可以通過交互的方式來修改時區。


所有Unix系統(不包括Linux),可以通過echo $TZ來查看當前時區。

另外你也可以安裝system-config-date工具:
yum install system-config-date


更多信息:
Linux Time Zone Configuration guide:
Background - The Earth is divided into time zones that are 15 degrees of longitude each, for this corresponds to the amount of angular distance the Sun appears to travel in 1 hour. 0 degrees longitude runs through the Royal Observatory in Greenwich, England. This is the origin of Greenwich Mean Time, or GMT. For all practical purposes, GMT and UTC are the same. To complicate matters, some countries observe Daylight Savings Time (DST), while others do not. Even within some countries, some states or districts do not observe DST while the rest of the country does! DST can also begin and end on different days in different countries! What a mess...
There are several files and directories that are used for time zones, and several tools:
l /etc/sysconfig/clock- this is a short text file that defines the timezone, whether or not the hardware clock is using UTC, and an ARC option that is only relevant to DEC systems.
eg:/ect/sysconfig/clock file content on jstest3:
ZONE="Asia/Shanghai"
UTC=true
ARC=false

l /etc/localtime - this is a symbolic link to the appropriate time zone file in /usr/share/zoneinfo
l /usr/share/zoneinfo - this directory contains the time zone files that were compiled by zic(The time zone compiler. Zic creates the time conversion information files.)These are binary files and cannot be viewed with a text viewer. The files contain information such as rules about DST. They allow the kernel to convert UTC UNIX time into appropriate local dates and times.
l /etc/rc.d/rc.sysinit- This script runs once, at boot time. A section of this script sets the system time from the hardware clock and applies the local time zone information.
l /etc/init.d/halt- This script runs during system shutdown. A section of this script synchronizes the hardware clock from the system clock.
l /etc/adjtime - This file is used by the adjtimex function, which can smoothly adjust system time while the system runs. settimeofday is a related function.
l redhat-config-date or dateconfig - These commands start the Red Hat date/time/time zone configuration GUI.
l zdump - This utility prints the current time and date in the specified time zone. Example:
# zdump Japan
Japan Sat Mar 29 00:47:57 2003 JST
# zdump Iceland
Iceland Fri Mar 28 15:48:02 2003 GMT


RedHat Linux操作系統修改時區的方法
Most modern Linux distributions have user-friendly programs to set the timezone, often accesible through the program menus or right-clicking the clock in a desktop environment such as KDE or GNOME. Failing that it's possible to manually change the system timezone in Linux in a few short steps.
It's possible to change the system timezone in Linux in a few short steps.
Steps
1. Logged in as root, check which timezone your machine is currently using by executing `date`. You'll see something like "Mon 17 Jan 2005 12:15:08 PM PST -0.461203 seconds", PST in this case is the current timezone.
2. Change to the directory to /usr/share/zoneinfo, here you will find a list of time zone regions. Choose the most appropriate region, if you live in Canada or the US this directory is the "Americas" directory.
3. If you wish, backup the previous timezone configuration by copying it to a different location. Such as `mv /etc/localtime /etc/localtime-old`.
4. Create a symbolic link from the appropiate timezone to /etc/localtime. Example: `ln -s /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime`.
5. If you have the utility rdate, update the current system time by executing `/usr/bin/rdate -s time.nist.gov`. (This step can be skip!)
6. Set the ZONE entry in the file /etc/sysconfig/clock file (e.g. "America/Los_Angeles")
7. Set the hardware clock by executing: ` /sbin/hwclock --systohc`
Tips
· On some versions of RedHat Linux, Slackware, Gentoo, SuSE, Debian, Ubuntu, and anything else that is "normal", the command to display and change the time is 'date', not 'clock'
· On RedHat Linux there is a utility called "Setup" that allows one to select the timezone from a list, but you must have installed the 'redhat-config-date' package.
Warnings
· Some applications (such as PHP) have separate timezone settings from the system timezone.
· On some systems, /etc/localtime is actually a symlink to the appropriate file under the /usr/share/zoneinfo directory (rather than a copy of that file).
· On some systems, there is a system utility provided that will prompt for the correct timezone and make the proper changes to the system configuration. For example,Debianprovides the "tzsetup" utility.
Here is an example of changing the timezone: (Logged in as root)
In order to manually change the timezone, you can edit the /etc/sysconfig/clockfile and then make a new soft link to /etc/localtime. Here is an example of changing the timezone manually to "America/Denver":
1. Select the appropriate time zone from the /usr/share/zoneinfo directory. Time zone names are relative to that directory. In this case, we will select "America/Denver"
2. Edit the /etc/sysconfig/clocktext file so that it looks like this:
ZONE="America/Denver"
UTC=true
ARC=false
Of course, this assumes that your hardware clock is running UTC time...
3. Delete the following file: /etc/localtime (backup it when you need it !)
4. Create a new soft link for /etc/localtime. Here is an example of step 3 and step 4:
# cd /etc
# ls -al localtime
lrwxrwxrwx 1 root root 39 Mar 28 07:00 localtime -> /usr/share/zoneinfo/America/Los_Angeles
# rm /etc/localtime
# ln -s /usr/share/zoneinfo/America/Denver /etc/localtime
# ls -al localtime
lrwxrwxrwx 1 root root 34 Mar 28 08:59 localtime -> /usr/share/zoneinfo/America/Denver
# date
Fri Mar 28 09:00:04 MST 2003

extern configuration of timezone:
---- allows computers, servers, and network devices to synchronize their internal clock systems
NTP Configuration and Usage:
Background - Network Time Protocol (NTP) allows computers, servers, and network devices to synchronize their internal clock systems to an external reference source. In some cases, the reference source can be an atomic clock or GPS receiver. This is useful for a number of reasons. If you would like to automatically keep the time on your Linux system synchronized to standard world times, you have two built-in tools to do this:
ntpdate and ntpd (NTP Daemon)


ntpdate:
ntpdate was written by David L. Mills at the University of Delaware. For details on Dr. Mills, enter this:
$ finger [email protected] allows you to view or set system time from one or more NTP servers. The first thing you need to do is find a time server you can query. Here is a list of public time servers, or you can use one of the following:
clock.redhat.com
clock2.redhat.com
ns1.tuxfamily.org
time.nist.gov
For example, if you only want to query an NTP server and make sure that you can reach it, use the following command:


# ntpdate -q clock2.redhat.com
server 66.187.224.4, stratum 1, offset -0.067532, delay 0.38452
28 Mar 18:14:20 ntpdate[10724]: adjust time server 66.187.224.4 offset -0.067532 sec
Note that some firewall systems do not allow NTP traffic. NTP uses UDP port 123. If you would like to query more than one server and
# ntpdate clock2.redhat.com clock.redhat.com
28 Mar 18:20:59 ntpdate[10754]: adjust time server 66.187.233.4 offset -0.043222 sec
You can add the -v
This command is very similar to the rdate command. The ntpdate command can be used in startup scripts or cron jobs to automatically set the system time without running a dedicated server process. You will definitely want to try to retrieve the time from an NTP server with ntpdate before setting up your own NTP server. This will ensure that (a) you have connectivity (b) your firewall does not block NTP. Another thing to note about the ntpdate command is that it will not work in update mode if you are running a local NTP server process. It will work in query mode.


flag for verbose output.set your system clock with the result, use the following:
NTP Server:
The NTP server (ntpd) can be setup to run continuously. This will keep the system clock synchronized. You will also be able to server NTP clients on your LAN, if you wish. I had problems with the Red Hat configuration GUI not setting the NTP server up correctly.


The configuration file is /etc/ntp.conf, and there is also an /etc/ntp directory which contains keys and the drift file. I will show you a working configuration file, with comments:
# Prohibit general access to this service.
restrict default ignore
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
# -- CLIENT NETWORK -------
# Permit systems on this network to synchronize with this
# time service. Do not permit those systems to modify the
# configuration of this service. Also, do not use those
# systems as peers for synchronization.
# This is my internal LAN network address
restrict 192.168.212.0 mask 255.255.255.0 notrust nomodify notrap
# --- OUR TIMESERVERS -----
# or remove the default restrict line
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
# The statements below limit what the servers can do to your server
# I am using IP instead of DNS name because the "restrict" construct
# requires IP addresses
restrict 66.187.224.4 mask 255.255.255.255 nomodify notrap noquery
restrict 80.67.177.2 mask 255.255.255.255 nomodify notrap noquery
# The server listed below is clock2.redhat.com
server 66.187.224.4
# The server listed below is ns1.tuxfamily.org
server 80.67.177.2
# --- NTP MULTICASTCLIENT ---
#multicastclient # listen on default 224.0.1.1
# restrict 224.0.1.1 mask 255.255.255.255 notrust nomodify notrap
# restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
# I don't want to use multicast for my NTP server
# --- GENERAL CONFIGURATION ---
#
# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available. The
# default stratum is usually 3, but in this case we elect to use stratum
# 0. Since the server line does not have the prefer keyword, this driver
# is never used for synchronization, unless no other other
# synchronization source is available. In case the local host is
# controlled by some external source, such as an external oscillator or
# another protocol, the prefer keyword would cause the local host to
# disregard all other synchronization sources, unless the kernel
# modifications are in use and declare an unsynchronized condition.
#
# If you un-comment the two statements below, you could run an NTP server
# off of your local (and inaccurate) system clock.
#restrict 127.127.1.0
#server 127.127.1.0
fudge 127.127.1.0 stratum 10
#
# Drift file. Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
#
driftfile /etc/ntp/drift
broadcastdelay 0.008


#
# Authentication delay. If you use, or plan to use someday, the
# authentication facility you should make the programs in the auth_stuff
# directory and figure out what this number should be on your machine.
#
# I am not using any authentication for this simple setup.
authenticate no


#
# Keys file. If you want to diddle your server at run time, make a
# keys file (mode 600 for sure) and define the key number to be
# used for making requests.
#
# PLEASE DO NOT USE THE DEFAULT VALUES HERE. Pick your own, or remote
# systems might be able to reset your clock at will. Note also that
# ntpd is started with a -A flag, disabling authentication, that
# will have to be removed as well.
#
keys /etc/ntp/keys
After you install this new version of the config file, you can start the service with /etc/init.d/ntpd startTo monitor the service, you can run the following command: ntpdc -p or ntpdc -p -n
If you are really impatient, you can use this command to watch the system until it synchronizes: watch nptdc -p -n
The ntpdc command can be run interactively as well. There are a number of informative ntpdc commands, such as iostats, sysstats, and peers.
When enough time has gone by, one of the servers will have an * placed in front of it to tell you that your system is synchronized to it. The lower the stratum number, the more accurate the server.
If you want to have the NTP server start up automatically, you can use the checkconfig command as follows:
# chkconfig --level 345 ntpd on
# chkconfig --level 0126 ntpd off
# chkconfig --list | grep ntpd
ntpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
To see that your NTP server is listening on UDP port 123, use the following command: netstat -tunaPlease note that the NTP server makes NTP queries from a UDP source port of 123. Some firewalls will not allow this, even if ntpdate worked (ntpdate uses a source port > 1023.)
You can also use the ntpq utility, and the ntptrace utility for additional diagnostic support. For complete documentation on setting up and using NTP servers, see http://www.ntp.org/.



How to Set the Time Zone in Unix:
Step1
Turn your machine on and locate the time zone file. You can do this by entering “command /etc/TIMEZONE.”
Step2
Locate the line within this file that indicates what time zone you’re clock is set to. It will look like this: TZ=US/Pacific. In this example, the time zone is set to the Pacific time zone of the U.S.
Step3
Change the value of the time zone to the desired time zone. This could be, for example, U.S./Eastern. It is important to know what time zone you are in so the time zone function can be set correctly.
Step4
Reboot your machine for the changes to take effect. Shut down and restart your computer. This will cause the computer’s clock to reset and show the correct time zone


===================================================
淺談RedHat AS中英文字符集配置
===================================================
linux字符集查看與設置redhat 5.8
locale 查看當前設置的字符集 the current locale environment
locale -a 查看可以支持的所有的locale Write names of available locales.
locale -m 查看所有支持的字符集(CP1125,UTF-8,ISO-8859-1等) Write names of available charmaps.
echo $LANGUAGE 查看當前默認設置
echo $LANG 查看當前默認設置
echo $LC_ALL


記錄系統默認使用語言的文件是/etc/sysconfig/i18n,如果默認安裝的是中文的系統,i18n的內容如下:
LANG="zh_CN.UTF-8" SYSFONT="latarcyrheb-sun16" SUPPORTED="zh_CN.UTF-8:zh_CN:zh"


LANG變量: 是language的簡稱,稍微有英語基礎的用戶一看就看出來這個變量是決定系統的默認語言的,即系統的菜單、程序的工具欄語言、輸入法默認語言等。
SYSFONT: 是system font的簡稱,決定系統默認用哪一種字體。
SUPPORTED:決定系統支持的語言,即系統能夠顯示的語言。
需要說明的是,由於計算機起源於英語國家,因此,不管你把這些變量設置成什麼,英語總是默認支持的,而且不管用什麼字體,英文字體總包含在其中。


locale字符集的設置:
1.臨時 LANG="zh_CN.UTF-8" ; export LANG= "zh_CN.UTF-8"
2.永久 修改/etc/sysconf/i18n文件,把 LANG="zh_CN.UTF-8"


/etc/environment 控制GNOME的語言環境(可以自己創建這個文件)
/etc/sysconfig/i18n 控制啟動過程以及真個系統的語言環境


[root@jsjzhang ~]$ cat /etc/environment
#中文界面配置
LANGUAGE="zh_CN:zh:en_US:en"
LC_ALL=zh_CN.UTF-8
LANG=zh_CN.UTF-8
GST_ID3_TAG_ENCODING=GB2312


#英文界面配置
#LANGUAGE="en_US:en"
#LC_CTYPE=zh_CN.UTF-8
#LANG=en_GB.UTF-8
#GST_ID3_TAG_ENCODING=GBK


[root@jsjzhang ~]$ cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"


如果只修改/etc/environment文件,而不修改/etc/sysconfig/i18n文件,
那麼啟動過程還是中文,只是Gnome環境變成了英文。
要配置從啟動過程到Gnome環境均是英文,並讓Fcitx中文輸入法能夠在英文環境下正常使用,
除按上面修改/etc/environment文件外,還要如下修改/etc/sysconfig/i18n文件:


[root@jsjzhang ~]# vim /etc/sysconfig/i18n
#LANG="zh_CN.UTF-8"
#SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
LANG="en_US.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:zh_CN.GBK:zh_CN.GB18030:zh_CN.GB2312"
SYSFONT="latarcyrheb-sun16"


---------------------------------------
如何設置linux的locale
---------------------------------------
1.查看語言設置:
[root@brs98 ~]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=


2.編寫/etc/environment文件
vi /etc/environment
LC_ALL=zh_CN.UTF-8


3.編寫/etc/sysconfig/i18n文件
vi /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"


4.重啟機器:
reboot


===================================================
/etc/profile和/etc/environment的比較
===================================================
Question:
先將export LANG=zh_CN加入/etc/profile ,退出系統重新登錄,登錄提示顯示英文。將/etc/profile 中的export LANG=zh_CN刪除,將LNAG=zh_CN加入/etc/environment,退出系統重新登錄,登錄提示顯示中文。用戶環境建立的過程中總 是先執行/etc/profile然後在讀取/etc/environment。為什麼會有如上所敘的不同呢?


Answer:
/etc/profile 是所有用戶的環境變量
/etc/enviroment是系統的環境變量
登陸系統時shell讀取的順序應該是
/etc/enviroment -> /etc/profile -->$HOME/.profile -->$HOME/.env
原因應該是下面所說的用戶環境和系統環境的區別了:
/etc/environment是設置整個系統的環境,而/etc/profile是設置所有用戶的環境,前者與登錄用戶無關,後者與登錄用戶有關。
系統應用程序的執行與用戶環境可以是無關的,但與系統環境是相關的,所以當你登錄時,你看到的提示信息,象日期、時間信息的顯示格式與系統環境的LANG 是相關的,缺省LANG=en_US,如果系統環境LANG=zh_CN,則提示信息是中文的,否則是英文的。




(1)/etc/profile: 此文件為系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行. 並從/etc/profile.d目錄的配置文件中搜集shell的設置。
(2)/etc/bashrc: 為每一個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取。
(3)~/.bash_profile:
每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的.bashrc文件。
(4)~/.bashrc: 該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該該文件被讀取。
(5)~/.bashlogin: 該文件包含專用於當登錄時,執行該文件.
(6)~/.profile: 該文件包含專用於當登錄完成後,執行該文件.
(7) ~/.bash_logout:當每次退出系統(退出bash shell)時,執行該文件.


另外,/etc/profile中設定的變量(全局)的可以作用於任何用戶,而~/.bashrc等中設定的變量(局部)只能繼承 /etc/profile中的變量,他們是"父子"關系。
官方文檔:
http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.baseadmn/doc/baseadmndita/etc_env_file.htm

The /etc/environment, /etc/profile, and ~/.profile files are run once at login time and ~/.env also run at login time.
The ~/.env file, on the other hand, is run every time you open a new shell or a window.
* /etc/environment file
The first file that the operating system uses at login time is the /etc/environment file. The /etc/environment file contains variables specifying the basic environment for all processes.
* /etc/profile file
The second file that the operating system uses at login time is the /etc/profile file.
* .profile file
The .profile file is present in your home ($HOME) directory and lets you customize your individual working environment.
* .env file
A fourth file that the operating system uses at login time is the .env file, if your .profile contains the following line: export ENV=$HOME/.env

===================================================
如何改變linux的語言環境
===================================================
1)全局(所有用戶):
/etc/sysconfig/i18n
/etc/i18n 或者 ~/.i18n


將文件中的LANG=zh_CN.UTF-8更改為LANG=en_US.UTF-8。
其他字符集。
LANG=en_US.UTF-8
LANG=zh_CN.gbk


2)個體用戶:
~/.bash_profile個人路徑與環境變量的文件名稱。
~/.bashrc:重要的個人設定文件


/etc/profile: ---->~/.bash_profile
/etc/bashrc : ---->~/.bashrc


---------------------------------------
LINUX SSH顯示中文亂碼,如何解決?
---------------------------------------
ssh登陸後,執行:
export LANG=zh_CN.gb2312
就可以顯示中文了。
編輯/etc/sysconfig/i18n 將LANG="zh_CN.UTF-8" 改為 LANG="zh_CN.GB18030" 可永久顯示中文 或者 LANG="zh_CN.gb2312"


export LANG=US_EN 你這樣 按照我說的做,進入字符界面,輸入gdm 出現一個讓你登陸的界面,那有個language選項,選擇simple chinese就OK了


[root@php ~]# vi /etc/sysconfig/i18n
#LANG="zh_CN.UTF-8"
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030;zh_CN.GB2313:zh_CN"
SUPPORTED="zh_CN.GB18030;zh_CN;zh:en_US.UTF-8;en_US:en"
SYSFONT="lat0-sun16"




如果ls -al 顯示的中文目錄是亂碼的話,那麼就是客戶端的字符集有問題:
如果你用的secureCRT的話,可以設置客戶端的字符集,可以是GB2312,UTF-8等


---------------------------------------
linux下強制踢掉登陸用戶,查詢終端
---------------------------------------
查看機器中登陸的用戶
[root@sunsyk ~]# w
16:29:02 up 2 days, 2:35, 5 users, load average: 0.03, 0.05, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 :0.0 Tue15 2days 1:44 0.04s -bash
root pts/2 :0.0 Tue15 46:42m 0.05s 0.05s bash
root pts/3 :0.0 Tue15 2days 0.02s 0.02s bash
root pts/4 172.20.52.114 14:17 58:48 0.16s 0.03s sqlplus
root pts/5 172.20.52.114 15:31 0.00s 0.03s 0.00s w
我把pts/1踢掉(只有root才能去踢掉用戶)
[root@sunsyk ~]# pkill -kill -t pts/0,pts/1,pts/2,pts/12,pts/15 -kill 是signal -t terminal


查看是不是踢掉
[root@sunsyk ~]# w
16:34:16 up 2 days, 2:40, 2 users, load average: 0.00, 0.05, 0.02
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/4 172.20.52.114 14:17 1:04m 0.16s 0.03s sqlplus
root pts/5 172.20.52.114 15:31 0.00s 0.03s 0.00s w
root可以踢掉其他用戶包括自己


------------------------------------------------------------------------------
Linux命令kill和signal
------------------------------------------------------------------------------
kill命令用於終止指定的進程(terminate a process),是Unix/Linux下進程管理的常用命令。通常,我們在需要終止某個或某些進程時,先使用ps/pidof/pstree/top等工具獲取進程PID,然後使用kill命令來殺掉該進程。kill命令的另外一個用途就是向指定的進程或進程組發送信號(The command kill sends the specified signal to the specified process or process group),或者確定進程號為PID的進程是否還在。比如,有許多程序都把SIGHUP信號作為重新讀取配置文件的觸發條件。


一 常用參數
格式:kill <pid>
格式:kill -TERM <pid>
發送SIGTERM信號到指定進程,如果進程沒有捕獲該信號,則進程終止(If no signal is specified, the TERM signal is sent. The TERM signal will kill processes which do not catch this signal.)

格式:kill -l
列出所有信號名稱(Print a list of signal names. These are found in /usr/include/linux/signal.h)。只有第9種信號(SIGKILL)才可以無條件終止進程,其他信號進程都有權利忽略。下面是常用的信號:
HUP 1 終端斷線
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 終止
KILL 9 強制終止
CONT 18 繼續(與STOP相反, fg/bg命令)
STOP 19 暫停(同 Ctrl + Z)
格式:kill -l <signame>
顯示指定信號的數值。

格式:kill -9 <pid>
格式:kill -KILL <pid>
強制殺掉指定進程,無條件終止指定進程。

格式:kill %<jobid>
格式:kill -9 %<jobid>
殺掉指定的任務(使用jobs命令可以列出)

格式:kill -QUIT <pid>
格式:kill -3 <pid>
使得程序正常的退出。

killall命令
killall命令殺死同一進程組內的所有進程。其允許指定要終止的進程的名稱,而非PID。
# killall httpd

二 示例
1)先用ps查找進程,然後用kill殺掉。
[root@new55 ~]# ps -ef|grep vim
root 3368 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
[root@new55 ~]# kill 3368
[root@new55 ~]# kill 3368
-bash: kill: (3368) - 沒有那個進程

2)init進程是不可殺的。
3)列出所有信號名稱
[root@new55 ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[root@new55 ~]#

/usr/include/linux/signal.h 寫道
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT 6
#define SIGBUS 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGURG 23
#define SIGXCPU 24
#define SIGXFSZ 25
#define SIGVTALRM 26
#define SIGPROF 27
#define SIGWINCH 28
#define SIGIO 29
#define SIGPOLL SIGIO
/*
#define SIGLOST 29
*/
#define SIGPWR 30
#define SIGSYS 31
#define SIGUNUSED 31
/* These should not be considered constants from userland. */
#define SIGRTMIN 32
#define SIGRTMAX _NSIG

參考:
http://codingstandards.iteye.com/blog/847299


------------------------------------------------------------------------------
Linux下用於查看系統當前登錄用戶信息的4種方法
------------------------------------------------------------------------------
作為系統管理員,你可能經常會(在某個時候)需要查看系統中有哪些用戶正在活動。有些時候,你甚至需要知道他(她)們正在做什麼。本文為我們總結了4種查看系統用戶信息(通過編號(ID))的方法。
1. 使用w命令查看登錄用戶正在使用的進程信息
w命令用於顯示已經登錄系統的用戶的名稱,以及他們正在做的事。該命令所使用的信息來源於/var/run/utmp文件。w命令輸出的信息包括:


用戶名稱
用戶的機器名稱或tty號
遠程主機地址
用戶登錄系統的時間
空閒時間(作用不大)
附加到tty(終端)的進程所用的時間(JCPU時間)
當前進程所用時間(PCPU時間)
用戶當前正在使用的命令
w命令還可以使用以下選項


-h忽略頭文件信息
-u顯示結果的加載時間
-s不顯示JCPU, PCPU, 登錄時間
$ w
23:04:27 up 29 days, 7:51, 3 users, load average: 0.04, 0.06, 0.02
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ramesh pts/0 dev-db-server 22:57 8.00s 0.05s 0.01s sshd: ramesh [priv]
jason pts/1 dev-db-server 23:01 2:53 0.01s 0.01s -bash
john pts/2 dev-db-server 23:04 0.00s 0.00s 0.00s w


$ w -h
ramesh pts/0 dev-db-server 22:57 17:43 2.52s 0.01s sshd: ramesh [priv]
jason pts/1 dev-db-server 23:01 20:28 0.01s 0.01s -bash
john pts/2 dev-db-server 23:04 0.00s 0.03s 0.00s w -h


$ w -u
23:22:06 up 29 days, 8:08, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ramesh pts/0 dev-db-server 22:57 17:47 2.52s 2.49s top
jason pts/1 dev-db-server 23:01 20:32 0.01s 0.01s -bash
john pts/2 dev-db-server 23:04 0.00s 0.03s 0.00s w -u


$ w -s
23:22:10 up 29 days, 8:08, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM IDLE WHAT
ramesh pts/0 dev-db-server 17:51 sshd: ramesh [priv]
jason pts/1 dev-db-server 20:36 -bash
john pts/2 dev-db-server 1.00s w -s


2.使用who命令查看(登錄)用戶名稱及所啟動的進程
who命令用於列舉出當前已登錄系統的用戶名稱。其輸出為:用戶名、tty號、時間日期、主機地址。


$ who
ramesh pts/0 2009-03-28 22:57 (dev-db-server)
jason pts/1 2009-03-28 23:01 (dev-db-server)
john pts/2 2009-03-28 23:04 (dev-db-server)
如果只希望列出用戶,可以使用如下語句:
$ who | cut -d' ' -f1 | sort | uniq
john
jason
ramesh
補充:users命令,可用於打印輸出登錄服務器的用戶名稱。該命令除了有help和version選項外,再沒有其他選項。如果某用戶使用了多個終端,則相應的會顯示多個重復的用戶名。
$ users
john jason ramesh
3. 使用whoami命令查看你所使用的登錄名稱
whoami命令用於顯示登入的用戶名。


$ whoami
john
whoami命令的執行效果和id -un的效果完全一樣,例如:
$ id -un
john
whoami命令能顯示當前登入的用戶名稱,以及當前所使用的tty信息。該命令的輸出結果包括如下內容:用戶名、tty名、當前時間日期,同時還包括用戶登錄系統所使用的鏈接地址。
$ who am i
john pts/2 2009-03-28 23:04 (dev-db-server)


$ who mom likes
john pts/2 2009-03-28 23:04 (dev-db-server)


Warning: Don't try "who mom hates" command.
當然,如果你使用su命令改變用戶,則該命令(whoami)所顯示的結果將隨之改變。


4. 隨時查看系統的歷史信息(曾經使用過系統的用戶信息)
last命令可用於顯示特定用戶登錄系統的歷史記錄。如果沒有指定任何參數,則顯示所有用戶的歷史信息。在默認情況下,這些信息(所顯示的信息)將來源於/var/log/wtmp文件。該命令的輸出結果包含以下幾列信息:


用戶名稱
tty設備號
歷史登錄時間日期
登出時間日期
總工作時間
$ last jason
jason pts/0 dev-db-server Fri Mar 27 22:57 still logged in
jason pts/0 dev-db-server Fri Mar 27 22:09 - 22:54 (00:45)
jason pts/0 dev-db-server Wed Mar 25 19:58 - 22:26 (02:28)
jason pts/1 dev-db-server Mon Mar 16 20:10 - 21:44 (01:33)
jason pts/0 192.168.201.11 Fri Mar 13 08:35 - 16:46 (08:11)
jason pts/1 192.168.201.12 Thu Mar 12 09:03 - 09:19 (00:15)
jason pts/0 dev-db-server Wed Mar 11 20:11 - 20:50 (00:39


-----------------------------------------------------
查找文件和查找文件中的字符:
-----------------------------------------------------
查找文件中的字符:grep
-R, -r, --recursive equivalent to --directories=recurse
--include=FILE_PATTERN search only files that match FILE_PATTERN
--exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN
--exclude-from=FILE skip files matching any file pattern from FILE
--exclude-dir=PATTERN directories that match PATTERN will be skipped.
-R 表示在其子目錄下也查找。


grep -FR 'type="array"' ./* 查找當前目錄下的文件以及子目錄中是否含有這種字符串type="array"


grep 'type="array"' ./* |less 查找當前目錄下的文件中是否含有這種字符串type="array"


假設您正在‘/usr/src/linux/Documentation’目錄下搜索帶字符串‘magic’的文件:
$ grep magic /usr/src/linux/Documentation/*


當然,如果預料到有許多輸出,您可以通過 管道 將其轉到‘less’上閱讀
$ grep magic /usr/src/linux/Documentation/* | less


有一點要注意,您必需提供一個文件過濾方式(搜索全部文件的話用 *)。如果您忘了,‘grep’會一直等著,直到該程序被中斷。如果您遇到了這樣的情況,按 <CTRL c> ,然後再試。
下面是一些有意思的命令行參數:
grep -i pattern files :不區分大小寫地搜索。默認情況區分大小寫,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整個單詞,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分別顯示[number]行,
grep pattern1 | pattern2 files :顯示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :顯示既匹配 pattern1 又匹配 pattern2 的行。
這裡還有些用於搜索的特殊符號:
< 和 > 分別標注單詞的開始與結尾。
例如:
grep man * 會匹配 ‘Batman’、‘manic’、‘man’等,
grep \'<man\' * 匹配‘manic’和‘man’,但不是‘Batman’,
grep \'<man>\' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
\'^\':指匹配的字符串在行首,
\'$\':指匹配的字符串在行尾,
如果您不習慣命令行參數,可以試試圖形界面的‘grep’,如 reXgrep 。這個軟件提供 AND、OR、NOT 等語法,還有漂亮的按鈕 :-) 。如果您只是需要更清楚的輸出,不妨試試 fungrep 。


.grep 搜索字符串
命令格式:
grep string filename
尋找字串的方法很多,比如說我想找所有以M開頭的行.此時必須引進pattern的觀
念.以下是一些簡單的□例,以及說明:
^M 以M開頭的行,^表示開始的意思
M$ 以M結尾的行,$表示結束的意思
^[0-9] 以數字開始的行,[]內可列舉字母
^[124ab] 以1,2,4,a,或b開頭的行
^b.503 句點表示任一字母
* 星號表示0個以上的字母(可以沒有)
+ 加號表示1個以上的字母
. 斜線可以去掉特殊意義
<eg> cat passwd | grep ^b 列出大學部有申請帳號者名單
cat passwd | grep ^s 列出交換學生申請帳號者名單
cat passwd | grep \'^b.503\' 列出電機系各年級...
grep \'^.\' myfile.txt 列出所有以句點開頭的行


查找文件: find, locate, whereis
-name 按照文件名查找文件
-perm 按照文件權限來查找文件
-prune 不在當前指定的目錄中查找
-user 按照文件屬主來查找文件
-group 按照文件所屬的組來查找文件
-mtime -n +n 按照文件的更改時間來查找文件,-n表示文件更改時間距現在n天以內,+ n表示文件更改時間距現在n天以前.
-nogroup 查找無有效所屬組的文件,即該文件所屬的組不存在
-nouser 查找無有效屬主的文件
-newer file1 ! file2 查找更改時間比文件file1新但比文件file2舊的文件
-type 查找某一類型的文件
文件類型:
b 塊設備文件
d 目錄
c 字符設備文件
p 管道文件
l 符號鏈接文件
f 普通文件
-size n[c] 查找文件長度為n塊的文件,帶有c時表示文件長度以字節計
-depth 在查找文件時,首先查找當前目錄中的文件,然後再在其子目錄中查找
-mount 在查找文件時不跨越文件系統mount點
-follow 如果find命令遇到符號鏈接文件,就跟蹤到鏈接所指向的文件
-cpio 對匹配的文件使用cpio命令,就將這些文件備份到磁盤設備中


對find命令選項的一些例子:
$ find /etc -name oamdatcfg.ini 在/etc目錄下查找所有的目錄是否有oamdatcfg.ini這個文件。
$ find /etc -type d 在/etc目錄下查找所有的目錄
$ find /etc -user yaoyuan #在/etc目錄下查找文件屬主為yaoyuan的文件
$ find . -size +1000000c #在當前目錄下查找文件長度大於1 M字節的文件

whereis命令會在指定的目錄中查找符合條件的文件,文件應的屬性應屬於原始代碼,二進制文件,或是幫助文件.


選項:
-b 只查找二進制文件
-B 只在設置的目錄下查找二進制文件
-f 不顯示文件名前的路徑名稱
-m 只查找說明文件
-M 只在設置的目錄下查找說明文件
-s 只查找原始代碼文件
-S 只在設置的目錄下查找原始代碼文件
-u 查找不包含指定類型的文件


whereis例子
$ whereis mysql
mysql: /usr/bin/mysql /etc/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz


locate命令用於查找符合條件的文件,它會去保存文件與目錄名稱的數據庫內,查找符合條件的文件或目錄


選項:
-u 建立數據庫,由根目錄開始
-U 建立數據庫,可以指定開始的位置
-e 將排除在尋找的范圍之外
-f 將特定的檔案系統排除在外
-q 安靜模式,不會顯示任何錯誤訊息
-n 至多顯示n個輸出
-r 使用正規運算式 做尋找的條件
-o 指定數據庫存的名稱
-d 指定數據庫的路徑
-h 顯示輔助訊息
-v 顯示更多的訊息
-V 顯示程序的版本訊息


$ locate inittab
/usr/lib/upstart/migrate-inittab.pl
/usr/share/terminfo/a/ansi+inittabs






rm -r recursive 刪除目錄和下面的文件
-f force 強迫刪除文件
rm -rf 目錄或者文件。

-----------------------------------------------------
touch命令:
-----------------------------------------------------
TOUCH(1) User Commands TOUCH(1)
NAME
touch - change file timestamps
SYNOPSIS
touch [OPTION]... FILE...
DESCRIPTION
Update the access and modification times of each FILE to the current time.
A FILE argument that does not exist is created empty, unless -c or -h is supplied.
A FILE argument string of - is handled specially and causes touch to change the times of the file associated with standard output.
Mandatory arguments to long options are mandatory for short options too.
-a change only the access time
-c, --no-create
do not create any files


-d, --date=STRING
parse STRING and use it instead of current time


-f (ignored)


-h, --no-dereference
affect each symbolic link instead of any referenced file (useful
only on systems that can change the timestamps of a symlink)


-m change only the modification time


-r, --reference=FILE
use this file’s times instead of current time


-t STAMP
use [[CC]YY]MMDDhhmm[.ss] instead of current time


--time=WORD
change the specified time: WORD is access, atime, or use: equiv-
alent to -a WORD is modify or mtime: equivalent to -m
--help display this help and exit


--version
output version information and exit


Note that the -d and -t options accept different time-date formats.


DATE STRING
The --date=STRING is a mostly free format human readable date string
such as "Sun, 29 Feb 2004 16:21:42 -0800" or "2004-02-29 16:21:42" or
even "next Thursday". A date string may contain items indicating cal-
endar date, time of day, time zone, day of week, relative time, rela-
tive date, and numbers. An empty string indicates the beginning of the
day. The date string format is more complex than is easily documented
here but is fully described in the info documentation.

-----------------------------------------------------
less命令:
-----------------------------------------------------


SEARCHING


/pattern * Search forward for (N-th) matching line.
?pattern * Search backward for (N-th) matching line.
n * Repeat previous search (for N-th occurrence).
N * Repeat previous search in reverse direction.
ESC-n * Repeat previous search, spanning files.
ESC-N * Repeat previous search, reverse dir. & spanning files.
ESC-u Undo (toggle) search highlighting.
&pattern * Display only matching lines
---------------------------------------------------
Search patterns may be modified by one or more of:
^N or ! Search for NON-matching lines.
^E or * Search multiple files (pass thru END OF FILE).
^F or @ Start search at FIRST file (for /) or last file (for ?).
^K Highlight matches, but don't move (KEEP position).
^R Don't use REGULAR EXPRESSIONS.

-----------------------------------------------------
如何更改當前用戶、密碼或者切換用戶、注銷用戶:
-----------------------------------------------------
第一次修改root密碼的話 命令是 sodu passwd root


su 和 su -:命令 su 給你到根賬號或系統上其它賬號的訪問權。當你在用戶賬號的 shell 內鍵入 su 來切換到根賬號時,你就能夠改變重要的系統文件(若不小心,你會損壞它們)。使用 su - 命令使你成為使用根賬號 shell 的根用戶。登錄為根用戶時請務必小心。


su yuanjs 表示以yuanjs登陸,但是當前的路徑不發生改變
su - yuanjs 表示以yuanjs登陸,同時當前的路徑變為yuanjs賬號的home路徑
su 表示以root登陸,但是當前的路徑不發生改變
su - 表示以root登陸,同時當前的路徑變為root賬號的home路徑


sudo 功能說明:以其他身份來執行指令。
語  法:sudo [-bhHpV][-s <shell>][-u <用戶>][指令] 或 sudo [-klv]
例子:
jorge@ubuntu:~$ sudo killall rm


更改密碼:
名稱:passwd
  
  使用權限:所有使用者
  
  使用方式:passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]
  
  說明:用來更改使用者的密碼
  
  參數:
  -k keep non-expired authentication tokens
  -l 關閉賬號密碼。效果相當於usermod -L,只有root才有權使用此項。
  -u 恢復賬號密碼。效果相當於usermod -U,同樣只有root才有權使用。
  -g 修改組密碼。gpasswd的等效命令。
  -f 更改由finger命令訪問的用戶信息。
  -d 關閉使用者的密碼認證功能, 使用者在登入時將可以不用輸入密碼, 只有具備 root 權限的使用者方可使用.
  -S 顯示指定使用者的密碼認證種類, 只有具備 root 權限的使用者方可使用.
  [username] 指定帳號名稱.


最常用最簡單的用法: passwd tom,修改tom用戶密碼。
sudo su先切到root再用passwd修改,具體參數可使用passwd -help


不用root登錄也可以,如果你是系統安裝時指定的用戶,默認有sudo權限,可以直接
$ sudo passwd user1
接下來同上


-------------------------------------------
linux introduction:
-------------------------------------------
On top of the Linux kernel effort, the creators of Linux also drew on a great deal of system software and applications that are now bundled with Linux distributions from the GNU software effort (GNU stands for “GNU is Not UNIX”), which is directed by the Free Software Foundation (www.gnu.org). There is a vast amount of software that can be used with Linux, making it an operating system that can compete with or surpass features available in any other operating system in the world.


If you have heard Linux described as a free version of UNIX, there is good reason for it. Although much of the code for Linux started from scratch, the blueprint for what the code would do was created to follow POSIX (Portable Operating System Interface for UNIX) standards. POSIX is a computer industry operating system standard that every major version of UNIX complied with. In other words, if your operating system was POSIX-compliant, it was UNIX.


netstat -tnlp |grep smb
netstat -lan |grep 80 查詢被打開80端口的東東
或者
netstat -nat 查詢哪個IP地址和它建立連接


-------------------------------------------
vncserver配置:
-------------------------------------------
netstat -tlnp |grep vnc 或者netstat -tlnp |grep vino
service vncserver status
service vncserver stop
service vncserver start
service vncserver restatus
ps -ef|grep vino


[root@ganshuai ~]# netstat -tlnp |grep vino
tcp 0 0 :::5900 :::* LISTEN 11099/vino-server
tcp 0 0 :::5901 :::* LISTEN 4696/vino-server




-------------------------------------------
linux的版本:
-------------------------------------------
Mandriva 10.1
Novell Linux Desktop 9.x (2.6.4)
Red Flag Linux Desktop 4.1, 5.0
Red Hat Linux AS 4.0 (2.6.9) Application Server
Red Hat Linux ES 4.0 (2.6.9) Enterprise Server
Red Hat Linux WS 4.0 (2.6.9) Workstation Server
SuSE Professional 9.2 (2.6.4), 9.3, 10.0 歐洲流行
Turbolinux 10 S (2.6) 亞洲流行
Fedora: from Redhat linux
Ubunton Linux


-------------------------------------------
Linux內核和版本查詢命令
-------------------------------------------
一:命令: uname -a
  作用: 查看系統內核版本號及系統名稱


二:命令: cat /proc/version
  作用: 查看目錄"/proc"下version的信息,也可以得到當前系統的內核版本號及系統名稱
  補充說明:
  /proc文件系統,它不是普通的文件系統,而是系統內核的映像,也就是說,該目錄中的文件是存放在系統內存之中的,它以文件系統的方式為訪問系統內核數據的操作提供接口。而我們使用命令“uname -a"的信息就是從該文件獲取的,當然用方法二的命令直接查看它的內容也可以達到同等效果.另外,加上參數"a"是獲得詳細信息,如果不加參數為查看系統名稱。


三、查看redhat的release版本
  # more /etc/redhat-release 或者 cat /etc/*release
  CentOS release 4.4 (Final)


四、lsb_release -a
  登錄到服務器執行 lsb_release -a ,即可列出所有版本信息


for example:
[root@RH52173 X11]# lsb_release -a
LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: RedHatEnterpriseServer
Description: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
Release: 5.2
Codename: Tikanga


五. 查看etc下的issue文件。
#more /etc/issue


-------------------------------------------
Fedora:
-------------------------------------------
In 2003, Red Hat, Inc. changed the name of the distribution from Red Hat Linux to Fedora Core and moved its commercial efforts toward its Red Hat Enterprise Linux products. It then set up Fedora to be:
1.Sponsored by Red Hat
2.Supported by the Linux community
3.Inclusive of high-quality, cutting-edge open source technology
4.A proving ground for software slated for commercial Red Hat deployment and support
With the recent split between community (Fedora) and commercial (Red Hat Enterprise Linux) versions of Red Hat Linux, Red Hat has created a model that can suit the fast-paced changes in the open source world, while still meeting the demands for a well-supported commercial Linux distribution.
Technical people have chosen Red Hat Linux because of its reputation for solid performance. With the new Fedora Project, Red Hat has created an environment where open source developers can bring high-quality software packages to Red Hat Linux that would be beyond the resources of Red Hat, Inc. to test and maintain on its own.
Over 1,600 individual software packages (compared to just over 600 in Red Hat Linux 6.2) are included in Fedora Core 3. These packages contain features that would cost you hundreds or thousands of dollars to duplicate if you bought them as separate commercial products. These features let you:
1.Connect your computers to a LAN or the Internet.
2.Create documents and publish your work on paper or on the Web.
3.Work with multimedia content to manipulate images, play music files, view video, and even burn your own CDs.
4.Play games individually or over a network.
5.Communicate over the Internet using a variety of Web tools for browsing, chatting, transferring files, participating in newsgroups, and sending and receiving e-mail.
6.Protect your computing resources by having Red Hat Linux act as a firewall and/or a router to protect against intruders coming in through public networks.
7.Configure a computer to act as a network server, such as a print server, Web server, file server, mail server, news server, and a database server.
This is just a partial list of what you can do with Red Hat's Fedora. Using this book as your guide, you will find that there are many more features built into Fedora as well.




-------------------------------------------
Linux下JDK的安裝與配置.
Red Hat Linux下安裝JDK :
-------------------------------------------
1、授予權限:chmod 777 jdk-1_5_0_11-linux-i586-rpm.bin
2、解壓rpm.bin文件:./jdk-1_5_0_11-linux-i586-rpm.bin
3、安裝命令:rpm -ivh jdk-1_5_0_11-linux-i586.rpm
4. 卸載命令: rpm -e jdk-1_5_0_11-linux-i586
5. 查找命令: rpm -qa jdk-1_5_0_11-linux-i586
rpm -qa |grep vnc q---query a---all package
-------------------------------------------
Linux下JDK環境變量配置 :
-------------------------------------------
1、使用SSH Secure Shell Client連接至Linux
2、執行:vi /etc/profile 命令,使用vi編輯/etc/profile文件。
3、在export PATH USER LOGNAME MAIL HOS ...


-------------------------------------------
常用Shell類型:
-------------------------------------------
Linux系統提供多種不同的Shell以供選擇。常用的有Bourne Shell(簡稱sh)、C-Shelll(簡稱csh)、Korn Shell(簡稱ksh)和Bourne Again Shell (簡稱bash)。
(1)Bourne Shell是AT&T Bell實驗室的 Steven Bourne為AT&T的Unix開發的,它是Unix的默認Shell,也是其它Shell的開發基礎。Bourne Shell在編程方面相當優秀,但在處理與用戶的交互方面不如其它幾種Shell。
(2)C Shell是加州伯克利大學的Bill Joy為BSD Unix開發的,與sh不同,它的語法與C語言很相似。它提供了Bourne Shell所不能處理的用戶交互特征,如命令補全、命令別名、歷史命令替換等。但是,C Shell與BourneShell並不兼容。
(3)Korn Shell是AT&T Bell實驗室的David Korn開發的,它集合了C Shell和Bourne Shell的優點,並且與Bourne Shell向下完全兼容。Korn Shell的效率很高,其命令交互界面和編程交互界面都很好。
(4)Bourne Again Shell (即bash)是自由軟件基金會(GNU)開發的一個Shell,它是Linux系統中一個默認的Shell。Bash不但與Bourne Shell兼容,還繼承了C Shell、Korn Shell等優點。


---------------
rename 命令:
---------------
foo1 foo2 foo10 foo99
rename foo foo0 foo??
rename foo foo0 foo?
foo 表示被替換的舊內容
foo0 用來被替換的新內容
foo?? 表示那些文件被替換 一個pattern


1.
查看當前進程ID (KornShell):
$echo $$
4992


grep a*.txt & 將當前任務放置到後台去執行。
jobs 察看所有的正在執行的任務。
bg 察看後台的任務 第一個字符為 $jobspec
bg $jobspec 繼續執行後台的$jobspec任務
fg $jobspec 將後台的$jobspec任務移動到前台來執行。
ctrl+z (掛起當前正在執行的前台進程)把進程放到後台,並使之休眠.如果想將其返回請使用:fg
ctrl+D 文件結束符可以用


bg [jobspec ...]
Resume each suspended job jobspec in the background, as if it had been started with &. If
jobspec is not present, the shella
Copyright © Linux教程網 All Rights Reserved