歡迎您光臨本站 註冊首頁

linux命令補遺 - 1

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

linux命令補遺 - 1

參考:http://tianya23.blog.51cto.com/1081650/369593 在linux下面,常用的命令都比較熟悉,可是有些命令的更多用法,如果掌握了對提高工作效率還是有很大作用的. 為了方便命令行的輸入,以下命令可以加快效率: ctrl a:直接到行首 ctrl e:直接到行尾 而對於vi編輯器而言: $:直接到行尾 ^:直接到行首的第一個非空字母 0(數字0):直接到行首 w:移動到單詞的詞首 e:移動到單詞的詞末 (1)ls ls -t:按照更改時間排序 ls -S:按照大小進行排序 ls -R:遞歸處理,將子目錄及其下面的都顯示出來 更多,查閱man ls (2)cd cd -:回到上一次的目錄

(3)grep總結

^:匹配行的開始,grep '^A':以A開頭, grep '^#':以#開頭 $:匹配行的結束, grep 'y$':以y結束 .:匹配一個非換行字元 grep 'A.C' *:匹配0個或多個字元 []:匹配一個範圍, grep '[Gg]rep':Grep和grep都可以 -b:列印該行所在的塊號碼 -c:匹配的行數 -i:忽略大小寫 -a 以文本文件方式搜索
-c 計算找到的符合行的次數


-i 忽略大小寫
-n 順便輸出行號
-v 反向選擇,即找 沒有搜索字元串的行 例子:非a~z開頭的行及行號 grep -n '^[a-z]' regular_express.txt
(4)cat -b:顯示內容時顯示行數 -n:顯示內容時包含所有空行 -s:有多個空行時合併成一個空行顯示 cat時翻頁:shift pagedown, shift pageup (5) top top -d 10:每10秒刷新一次 在啟動top之後,想監控特定用戶的進程情況,按‘u’后再輸入用戶名回車即可. (6)kill kill命令殺死進程是通過向該進行發送信號來完成的,通過kill -l查看所有的信號. oracle@b2b_plat_13619:/home/oracle>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 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 killall java:殺死所有的java進程 6、統計文本的行數 wc -l filename [jiangyr@]$ wc -l CRM131500.txt
131499 CRM131500.txt 去除重複行:sort CRM131500.txt | uniq -u > abc.txt 7、刪除當前文件夾下面大於10M的文件 find ./ -size 10000k -exec rm -f {} \; 查找大於1M且最后修改時間在10天之前的文件 find ./ -mtime 10 -size 1000k 查找出大於1G且在30內無修改的, 刪除之 find ./ -mtime 30 -size 1000000k -exec rm -f {} \; 8、ifconfig 如果是root用戶,直接用ifconfig可以查看當前機器的ip地址; 如果不是,直接使用ifconfig則會提示命令找不到的問題, 此時使用/sbin/ifconfig則可以查看機器的ip地址了. 9、view命令 以只讀方式查看文件內容,而vi是可以編輯文件的 10、strings命令 查看二進位文件 11、軟鏈接的建立 ln -s source target, 【注意】source一定要是絕對路徑,否則在不同分區上建立軟體時,會出現問題,儘管執行命令時不會報錯,但是執行后的鏈接可以找到,但是不能操作,會一直閃動的現象. ln -s /guest/stanley/ /home/stanley/stanley_sum 12、查看進程的埠 查看20880被哪個進程佔用, 【注意】lsof命令需要root許可權才能執行 [Intranet root@qa13625 /root]


#lsof -i:20880
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 29192 morgan 79u IPv6 1457881361 TCP *:20880 (LISTEN) 或者 [stanley@qa13625 stanley_sum]$ netstat -anp | grep 20880
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 :::20880 :::* LISTEN - 13、文件內部查找grep, 查找文件find和locate grep "time" slow-query.log 14、網卡的關閉與自啟動 讓它們後台執行,網路斷開之後還會執行嗎? ifconfig eth0 down &
ifconfig eth1 down &
sleep 10
service network restart & 15、查看及殺死僵死進程 ps -ef|grep def 執行結果如下: root 1017 25862 0 Feb06 ? 00:00:00 [cfagent] <defunct> root 14867 25862 0 Feb06 ? 00:00:00 [cfagent] <defunct> root 4150 25862 0 Feb07 ? 00:00:00 [cfagent] <defunct> root 23480 25862 0 Feb07 ? 00:00:00 [cfagent] <defunct> root 12147 25862 0 Feb07 ? 00:00:00 [cfagent] <defunct> 16、查看當前目錄下文件的大小情況 du -h:查所有的文件情況,顯示細節 du -sh:查文件總的大小,不顯示細節 17、VI中的全局替換 :%s/被替換內容/替換內容/g 18、環境變數 使用set或env查看環境變數,unset取消環境變數 常用環境變數: echo $HOME echo $PATH echo $LANG echo $PS1 查看所有的語言種類:

locale -a 【注意】變數最好使用${a}的方式,避免$a123的出現,使用${a}123 basename /etc/X11 -> X11: 使用basename取得最后的目錄 [oracle@localhost xdk]$pwd
/u01/oracle/xdk
[oracle@localhost xdk]$basename `pwd`
xdk 19、系統日誌信息 核心啟動日誌:/var/log/dmesg, 或直接用dmesg命令 系統報錯日誌:/var/log/messages 郵件系統日誌:/var/log/mailog FTP服務日誌:/var/log/xferlog 安全信息:/var/log/secure 登錄記錄:/var/log/wtmp, 為了防止篡改,此為二進位文件, 使用strings進行查看. 20、身份的檢查 who:當前在線的用戶 groups:查詢用戶所屬的組 id:顯示當前用戶信息 finger:查詢用戶信息 [oracle@localhost xdk]$finger oracle
Login: oracle Name: (null)
Directory: /u01/oracle Shell: /bin/bash
Last login 一 3月 15 00:41 (CST) on tty1
No mail.
No Plan. 21、添加用戶的標準步驟 編輯/etc/passwd與/etc/group 創建用戶主目錄 從/etc/skel拷貝文件與目錄 讓新用戶獲得其主目錄與文件的擁有許可權 給新用戶一個密碼 22、VI中的刪除

刪除以當前行開始的n行:ndd
刪除一個單詞/游標之後的單詞剩餘部分dw 刪除以當前字元開始的n個字:ndw 刪除當前字元:x, 若在x之前加上一個數字n,則刪除從游標所在位置開始向右的n個字元. X刪除游標前面的那個字元

.若在X之前加上一個數字n,則刪除從游標前面那個字元開始向左的n個字元.
d0刪除從游標前一個字元開始到行首的內容. 游標之後的該行部分d$ D 與d$同義 d) 刪除到下一句的開始 d} 刪除到下一段的開始

d回車 刪除2行
內容全部刪除::1,$d
23、VI重複上次操作 .:執行上次的操作 u:撤消上次的操作

ctrl r:重做操作、不撤銷上次操作
24、為history增加時間戳 export HISTTIMEFORMAT="%F %T "
25、

清除/var/spool/clientmqueue/目錄下的文件:
# cd /var/spool/clientmqueue
# rm -rf *
如果文件太多,佔用空間太大,用上面命令刪除慢的話,就執行下面的命令:
# cd /var/spool/clientmqueue
# ls | xargs rm -f

26、VI的定位
vi 命令模式中可用的移動鍵:
w ---將游標向前移一個單詞
b
---將游標向後移一個單詞
e
---將游標移到下一個單詞之後
0
---將游標移到行首
$
---將游標移到行末
)
---將游標移到下一句句首
(
---將游標移到上一句句首
}
---將游標移到下一段開始處


{
---將游標移到下一段開始處
gg或者:1-----將游標移到當前文檔的頂部
G
---將游標移到當前文檔的底部
^
---將游標移到行內非空格的第一個字元
H
---將游標移到屏幕上第一行
L
---將游標移到屏幕上最后一行
vi 中滾動屏幕:
a
然後按回車---- 將游標所在的那一行移至屏幕頂部
z
然後按"-" ---將游標所在的那一行移至屏幕底部
z
然後按"."

---將游標所在的那一行移至屏幕中部
Ctrl u
------向上滾動半屏
Ctrl d
------向下滾動半屏
Ctrl f
------向前滾動全屏
Ctrl b
------向後滾動全屏
Ctrl e
------向下滾動一行
Ctrl y
------向上滾動一行
vi
的文本編輯命令:
D
------從游標定位的行末刪除文本
rc
-----c 代表字元.游標下方的字元將被替換為r 後面的字元
R
------R 后鍵入的文本將改寫當前文本,從游標所在位置開始,一直到按下Escape 返回命令模式為止
S
------刪除當前行,並開始在當前的空白行插入文本
x
------刪除游標下方的字元,並將字元右移填空
X
------刪除游標前的字元,並移動字元,令游標下方的字元來填空


~
------更改游標下方的字母的大小寫
J
------將當前行和前一行連接起來,並刪除因此而來的空行
vi
中的文件操作:
:e!
-----丟失所有更改,並從硬碟中重載已保存的文件
vi
中的查找和替換命令
/ -----------重複上一次查找,在文件中查找下一個匹配樣式
?pattern
--------pattern( 樣式) 指代的是要查找的內容.vi 將在文件中向後查找與指定內容匹配的第一樣式
?
-----------重複上一次查找,在文件中查找與上一次查找內容匹配的樣式
%
-----------把當前游標移至匹配的圓括弧或方括弧.對程序員來說,該命令非常有用
:s/pattern1/pattern2
-pattern2 替換當前行中pattern1 匹配的每個內容


:%s/pattern1/pattern2--
pattern2 替換整個文件中與pattern1 匹配的每個內容
vi
中的yank 命令
yw
-------把游標當前所在的單詞移到緩衝區
y$
-------把當前行及其以前的所有文本移到緩衝區

27、壓縮與解壓縮: 壓縮:tar jcvf test3.tar.bz2 test, 將test文件夾進行壓縮為test3.tar.bz2 解壓:tar jxvf test3.tar.bz2, 則解壓為test的文件夾 bzip2 gzip tar聯合使用
28、備份與還原: tar zxvf /dev/floppy test, 備份到軟盤 dump/restore:備份和還原ext2/3文件系統 dump -0u -f /var/tmp/hda2dump /dev/hda1:

將/dev/hda1完全備份為/var/tmp/hda2du文件, -u為備份分區的頂級目錄, 0-9代表完全備份 restore -rf /var/tmp/hda2dump :還原到當前目錄下,當前在什麼目錄就還原什麼目錄下 restore -tf /var/tmp/hda2dump:查看備份的內容 29、去掉文檔最后一行 sed -i -e '$d' test.txt sed 有一個 -i 選項,此選項指定應該編輯的輸入文件.(如果沒有此選項,則讀取輸入文件,而不對其執行寫入.)

sed 刪除每行最后一個字元

sed 's/.$//' test.txt 也可以稍複雜些,awk -F "" -v OFS="" '$NF="" {print}1' test.txt
30、查看硬體資源 #dmidecode | grep Product
Product Name: PowerEdge 1950
Product Name: 0K649H
31、文件句柄數

在Linux下,我們使用ulimit -n命令可以看到單個進程能夠打開的最大文件句柄數量(socket連接也算在裡面).系統默認值1024. 對於一般的應用來說(象Apache、系統進程)1024完全足夠使用.但是如何象java等單進程處理大量請求的應用來說就有點捉襟見肘了.如果單個進程打開的文件句柄數量超過了系統定義的值,就會提到“too many files open”的錯誤提示.在root許可權下面, 查看:lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
但是如果系統併發特別大,很有可能會超過1024.這時候就必須要調整系統參數,以適應應用變化.Linux有硬性限制和軟性限制.可以通過ulimit來設定這兩個參數.方法如下,以root用戶運行以下命令:ulimit -HSn 8092
以上命令中,H指定了硬性大小,S指定了軟性大小,n表示設定單個進程最大的打開文件句柄數量.個人覺得最好不要超過4096,畢竟打開的文件句柄數越多響應時間肯定會越慢.設定句柄數量后,系統重啟后,又會恢復默認值.如果想永久保存下來,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后


32、添加用戶帳號報錯解決方案

在使用useradd命令添加帳號的時候出現“unable to lock password file”的錯誤,或者“cannot lock shadow password file”的問題. 解決辦法: 在/etc/目錄下有passwd.lock、group.lock、gshadow.lock、passwd.lock、shadow.lock之類的文件,並把它刪除就OK了.
Tip: .lock文件就是某人在讀取時先鎖定文件以防另一個程序又來讀取產生錯誤.

33、VI中顯示行號和定位行

在VI的命令模式下輸入“:set nu

”,就有行號了
取消行號執行下面的命令:“: set nonu ”或者“:set nu!” 直接定位到某行: 方法1:在vi後面加上" n", 省略到n,則游標到最后一行 例如:vi 50 tmp.sql 方法2:進入文件后,使用‘:n’, 例如:':23'則表示游標直接定位到23行


34、WAR包的壓縮與解壓縮 在linux上面,war包的壓縮了解壓類似於tar,具體方式如下: 壓縮命令格式:java cvf 打包文件名稱 要打包的目錄 打包文件保存路徑 // 將當前目錄打包成war包 jar cvf temp.war */ . 解壓自然就是: jar xvf temp.war

35、輸入與輸出
tr 'A-Z' 'a-z' < .bash_profile 將.bash_profile文件中的大寫字母轉換為小寫字母
<<將內容送到內存,一次性送到文件中,以後面的字母結尾,比如‘!’
cat > cat.file <<! 標準輸出和錯誤輸出到不同文件 find /etc -name passwd 2> stderr > stdout 正確和錯誤輸出到同一文件 find /etc -name passwd &> allout find /etc -name passwd > allout 2>&1
36、補充命令 grep -n "a" abc: 匹配字元,且輸出行號 grep -v "a" abc:不匹配的行 //對文件/etc/passwd進行排序,以‘:’分割的第3列進行排序
sort -t: -k3 /etc/passwd
cut:顯示文件中的某一列 //顯示第三列,默認以tab來分割


cut -f3 cutfile
//顯示以‘,’分割的第二列
cut -f2 -d, cut.txt

paste將文件按列拼接, 之間以tab作為分割
paste abc ABC > merge
37、非root下面查看機器信息 查看ip [stanley@QA-144-2 ~]$ /sbin/ifconfig 查看網卡ethtool [stanley@QA-144-2 ~]$ /sbin/ethtool
38、查看用戶的名字 [platvt@qa-qd-62-180 bin]$ hostname
qa-qd-62-180
39、ISO文件安裝 mkdir /mnt/iso
mount -o loop xxxx.iso /mnt/iso
cd /mnt/iso 40、翻頁操作 整頁翻頁 ctrl-f ctrl-b
f就是forword b就是backward

翻半頁
ctrl-d ctlr-u
d=down u=up

滾一行
ctrl-e ctrl-y

zz 讓游標所在的行居屏幕中央
zt 讓游標所在的行居屏幕最上一行 t=top
zb 讓游標所在的行居屏幕最下一行 b=bottom 41、

查詢使用的命令所在的目錄:which [china@136_20 demo01]$ which whoami
/usr/bin/whoami
[china@136_20 demo01]$ which java
/usr/alibaba/java/bin/java
[china@136_20 demo01]$ which gcc
/usr/bin/gcc 42、top中內存沒有釋放的解釋 趙晉-伺服器介面人 (13:34:59):
vmstat -s
你用vmstat -s 看一下·
16432184 total memory
16343268 used memory
6766176 active memory
9119716 inactive memory
88916 free memory
132812 buffer memory
你實際活動的 內存只有6G··
有9G的 都是空閑 非活動內存··
而內核有一個 空閑內存回收閥值··


趙晉-伺服器介面人 (13:36:01):
在內存達到 這個閥值 他才會自動回收空閑內存的·

王-- (13:36:02):
那為什麼top出來說佔用了16G

趙晉-伺服器介面人 (13:36:12):
16343268 used memory
這個是used了16G沒錯··但used中 又分為 活動的 和 非活動的·
非活動的 其實就是空閑的沒有被系統 回收的內存·


趙晉-伺服器介面人 (13:37:14):
這裡 你其實還有9個G的 非活動內存·

趙晉-伺服器介面人 (13:39:26):
/proc/sys/vm/dirty_background_ratio
10 43、TOP命令

44、時間格式化

取當前時間,且按照“年月日_時分秒”進行格式化, 時間的具體轉換參考:http://tianya23.blog.51cto.com/1081650/366110 [stanley@qa13625 logs]$ date %Y%m%d_%H%M%S
20100803_110543

45、jstat監控腳本

jstat -gcutil 31789 1000 10:對進程31789進行1秒鐘監控1次,一共監控10次

#!/bin/bash
#monitor the status of java process
#5 second per time, 8640 times 8700
current_date=`date %Y%m%d_%H%M%S`

#backoffice
java_process1=20014

#authority
java_process2=21663

#subscription
java_process3=22213

#delivery
java_process4=23468

#interval time, 5000 means 5 Seconds
interval=5000

#how many times would be monitored
times=10

nohup jstat -gc -t ${java_process1} ${interval} ${times} >> /home/stanley/stanley_sum/pc2-1.2.0-t/output/logs/${java_process1}_backoffice_${current_date}.log &
nohup jstat -gc -t ${java_process2} ${interval} ${times} >> /home/stanley/stanley_sum/pc2-1.2.0-t/output/logs/${java_process2}_authority_${current_date}.log &
nohup jstat -gc -t ${java_process3} ${interval} ${times} >> /home/stanley/stanley_sum/pc2-1.2.0-t/output/logs/${java_process3}_subscription_${current_date}.log &
nohup jstat -gc -t ${java_process4} ${interval} ${times} >> /home/stanley/stanley_sum/pc2-1.2.0-t/output/logs/${java_process4}_delivery_${current_date}.log &

46、檢查apache的啟動:

netstat -tnl | grep :80
或者
lynx http://localhost

47、調到前台執行

fg
48、vi中搜索 /^Port 以Port開頭 ?Port
49、linux下面的計算器 [qaadmin@qa-qd-63-17 tags]$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1 2 3 4
10
quit

50、監控網路流量使用情況

2秒監控一次,監控10次 sar -n DEV 2 10

sar提供四種不同的語法選項來顯示網路信息.-n選項使用四個不同的開關:DEV、EDEV、SOCK和FULL.DEV顯示網路介面信息,EDEV顯示關於網路錯誤的統計數據,SOCK顯示套接字信息,FULL顯示所有三個開關. 輸出結果的含義如下:

IFACE:就是網路設備的名稱;

rxpck/s:每秒鐘接收到的包數目

txpck/s:每秒鐘發送出去的包數目

rxbyt/s每秒鐘接收的位元組數

txbyt/s每秒鐘發送出去的位元組數

rxcmp/s:每秒鐘接收到的壓縮包數目

txcmp/s:每秒鐘發送出去的壓縮包數目

txmcst/s:每秒鐘接收到的多播包的包數目

如果你使用EDEV關鍵字,那麼會針對網路設備彙報其失敗情況.具體參考:http://www.javaeye.com/articles/1903

sar命令詳解如下: sar 2 5
//每隔2秒,顯示5次,CPU使用的情況  %usr:CPU處在用戶模式下的時間百分比.   %sys:CPU處在系統模式下的時間百分比.
%wio:CPU等待輸入輸出完成時間的百分比.
%idle:CPU空閑時間百分比.

在所有的顯示中,我們應主要注意%wio和%idle,%wio的值過高,表示硬碟存在I/O瓶頸,
%idle值高,表示CPU較空閑,如果%idle值高但系統響應慢時,有可能是CPU等待分配內存,
此時應加大內存容量.%idle值如果持續低於10,那麼系統的CPU處理能力相對較低,表


明系統中最需要解決的資源是CPU. sar 1 10 > data.txt
//每隔1秒,寫入10次,把CPU使用數據保存到data.txt文件中.
sar 1 0 -e 15:00:00 > data.txt
//每隔1秒記錄CPU的使用情況,直到15點,數據將保存到data.txt文件中.(-e 參數表示結束時間,注意時間格式:必須為hh:mm:ss格式)
sar 1 0 -

r -e 15:00:00 > data.txt
//每隔1秒記錄內存使用情況,直到15點,數據將保存到data.txt文件中.
sar 1 0 -n DEV -e 15:00:00 > data.txt
//每隔1秒記錄網路使用情況,直到15點,數據將保存到data.txt文件中.

51、ps命令整理

ps -lef或者ps -eF 讓進行相關的信息全部顯示出來: -l,l long -F extra full [oracle@136_20 ~]$ ps -lef | grep memcached
1 S cobar 24551 1 0 75 0 - 77959 stext 19:40 ? 00:00:06 /usr/alibaba/memcached/bin/memcached -d -m 6000 -u cobar -p 12210 -c 4096 -t 8 -P /home/cobar/memcached/logs/memcached-s1.pid
1 S cobar 24564 1 0 75 0 - 61097 stext 19:40 ? 00:00:06 /usr/alibaba/memcached/bin/memcached -d -m 6000 -u cobar -p 11210 -c 4096 -t 8 -P /home/cobar/memcached/logs/memcached-s2.pid

52、快速查找使用過的命令

在history中使用grep進行查找

53、查看本機支持的字元編碼:locale

[stanley@qa13625 ~]$ locale
LANG=en_US
LC_CTYPE="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_COLLATE="en_US"
LC_MONETARY="en_US"
LC_MESSAGES="en_US"
LC_PAPER="en_US"
LC_NAME="en_US"
LC_ADDRESS="en_US"
LC_TELEPHONE="en_US"
LC_MEASUREMENT="en_US"
LC_IDENTIFICATION="en_US"
LC_ALL=

54、時間戳與long型相互轉換

時間戳轉換為long類型:
date %s [qaadmin@qa-qd-63-17 logs]$ date %s
1283172248
[qaadmin@qa-qd-63-17 logs]$ date
Mon Aug 30 20:44:10 CST 2010
long轉換為時間戳 [qaadmin@qa-qd-63-18 ~]$ date -d'1970-01-01 UTC 1283198594 seconds'
Tue Aug 31 04:03:14 CST 2010

55、VI中的統計信息

:%s/./&/gn 字元數
:%s/\i\ /&/gn 單詞數
:%s/^//n 行數
:%s/the

/&/gn 任何地方出現的 "the"

57、統計文件中單詞出現的個數 tr -s "\t| " "\n" < jstack.21030.head |sort|uniq -c

58、yum安裝常用軟體

yum list | grep alibaba查找 yun install alibaba-cn-suite.x86_64
會安裝jboss,httpd,cronlog,openssl,java





[火星人 ] linux命令補遺 - 1已經有724次圍觀

http://coctec.com/docs/linux/show-post-50618.html