歡迎您光臨本站 註冊首頁

xargs的含義和用法 .

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

xargs的含義和用法 .

xargs的含義和用法 .





xargs - build and execute command lines from standard input

xargs通常和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_25.tar.gz:    gzip compressed data, from Unix, last modified: Wed Jun 29 14:03:13 2011
./jdk.sh:                Bourne-Again shell script text executable
./jdk-6u5-linux-x64.bin: Bourne shell script text executable(3.)在整個系統中查找內存信息轉儲文件(core dump),然後把結果保存到/tmp/core.log 文件中
#find / -name "core" -print|xargs echo "" > /tmp/core.log

(4.)在當前目錄下查找所有用戶具有讀、寫和執行許可權的文件,並收回相應的寫許可權:
#find . -perm 777 -print | xargs chmod o-w

(5.)查找查找2011-11-11 03:41:54時更改過的jdk文件#find ./ -name "jdk*"
./jdk1.6.0_25.tar.gz
./jdk.sh
./jdk-6u5-linux-x64.bin
#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 ./jdk-6u5-linux-x64.bin
-rw-r--r-- 1 root root       421 2011-10-28 17:15:31.000000000 +0800 ./jdk.sh
-rw-r--r-- 1 root root 102897638 2011-11-11 03:41:54.000000000 +0800 ./jdk1.6.0_25.tar.gz
# 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_25.tar.gz(6)還有一個用法就是在殺遠程主機的進程的時候,顯示的信息會在本地顯示。

ssh 192.168.30.137 "ps -ef |grep httpd|awk '{print $2}'|xargskill -9"
《解決方案》

雞楚
http://bbs.chinaunix.net/thread-441883-1-1.html

[火星人 ] xargs的含義和用法 .已經有572次圍觀

http://coctec.com/docs/service/show-post-1711.html