Linux有關xargs命令的用法說明
在Linux系統中使用xargs命令可以解決不少問題,特別是xargs命令配合find命令使用,能夠發揮出更加驚人的效果。本文就來為大家介紹一下Linux系統xargs命令的用法。
在使用find命令的-exec選項處理匹配到的檔案時, find命令將所有匹配到的檔案一起傳遞給exec執行。但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令執行幾分鐘之後,就會出現溢位錯誤。錯誤資訊通常是“引數列太長”或“引數列溢位”。這就是xargs命令的用處所在,特別是與find命令一起使用。
find命令把匹配到的檔案傳遞給xargs命令,而xargs命令每次只獲取一部分檔案而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分檔案,然後是下一批,並如此繼續下去。
在有些系統中,使用-exec選項會為處理每一個匹配到的檔案而發起一個相應的程序,並非將匹配到的檔案全部作為引數一次執行;這樣在有些情況下就會出現程序過多,系統性能下降的問題,因而效率不高;
而使用xargs命令則只有一個程序。另外,在使用xargs命令時,究竟是一次獲取所有的引數,還是分批取得引數,以及每一次獲取引數的數目都會根據該命令的選項及系統核心中相應的可調引數來確定。
可以檢視xargs的返回狀態來判斷是什麼問題:
#cut -d: -f1 《 /etc/passwd|sort|xargs echo
xargs exits with the following status:
0 if it succeeds
123 if any invocation of the command exited with status 1-125
124 if the command exited with status 255
125 if the command is killed by a signal
126 if the command cannot be run
127 if the command is not found
1 if some other error occurred.
Exit codes greater than 128 are used by the shell to indicate(指出)that a program died due to a fatal signal.
來看看xargs命令是如何同find命令一起使用的.,並給出一些例子。
(1.)用grep命令在當前目錄下的所有普通檔案中搜索hostnames這個詞:
find 。 -name * -type f -print | xargs grep -i “hostname”
find 。 -type f -print | xargs grep -i “hostname”
find 。 -name “*”-type f -print | xargs grep -i “hostname”【三者相同】
注意:在上面的例子中, 用來取消find命令中的*在shell中的特殊含義。
(2.)檢視所有以jdk開標頭檔案的檔案型別
# find 。 -name “jdk*” -type f -print | xargs file
。/jdk1.6.0_: gzip compressed data, from Unix, last modified: Wed Jun 29 14:03:13 2011
。/: Bourne-Again shell script text executable
。/: Bourne shell script text executable
(3.)在整個系統中查詢記憶體資訊轉儲檔案(core dump),然後把結果儲存到/tmp/ 檔案中
#find / -name “core” -print|xargs echo “” 》 /tmp/
(4.)在當前目錄下查詢所有使用者具有讀、寫和執行許可權的檔案,並收回相應的寫許可權:
#find 。 -perm 777 -print | xargs chmod o-w
(5.)查詢查詢2011-11-11 03:41:54時更改過的jdk檔案
#find 。/ -name “jdk*”
。/jdk1.6.0_
。/
。/
#find 。/ -name “jdk*”|xargs ls -l --full-time2》/dev/null
-rwxr-xr-x 1 root root 63724381 2011-11-11 03:41:55.000000000 +0800 。/
-rw-r--r-- 1 root root 421 2011-10-28 17:15:31.000000000 +0800 。/
-rw-r--r-- 1 root root 102897638 2011-11-11 03:41:54.000000000 +0800 。/jdk1.6.0_
# find 。/ -name “jdk*”|xargs ls -l --full-time2》/dev/null|grep “2011-11-11 03:41:54”
-rw-r--r-- 1 root root 102897638 2011-11-11 03:41:54.000000000 +0800 。/jdk1.6.0_
(6)還有一個用法就是在殺遠端主機的程序的時候,顯示的資訊會在本地顯示。
ssh “ps -ef |grep httpd|awk ‘{print $2}’|xargskill -9”
以上就是Linux系統xargs命令的用法了,可以看到xargs命令很豐富,但是大部分都離不開和find命令搭配使用。