位置: 編程技術(shù) - 正文
推薦整理分享Linux命令(shell)從入門到精通 學(xué)習(xí)筆記之2 使用find和xargs (linux shell怎么用),希望有所幫助,僅作參考,歡迎閱讀內(nèi)容。
文章相關(guān)熱門搜索詞:shell下命令,shell下命令,linux shell 獲取命令輸出值,linux獲取shell輸出,要從shell命令行中執(zhí)行一條命令,linux shell怎么用,要從shell命令行中執(zhí)行一條命令,shell linux命令詳解,內(nèi)容如對您有幫助,希望把文章鏈接給更多的朋友!
1. 使用 find 可以查找出符合某一特性(如權(quán)限、屬主、長度、類型、名字等)的文件或目錄,結(jié)合 -exec、-ok 和 -xargs,可以完成更多的工作。
2.find 的 name 選項(xiàng):
根據(jù)文件名字匹配查找,如在自己的根目錄下查找符合 *.txt 的文件:
擴(kuò)展:find / ! -name "myshell" -print(從上面的輸出可以看出,對于 root 用戶而言:~$HOME/root代表的都是同一個(gè)目錄,就是 /root。
特別的,對于用戶 xxx 而言, $HOME 和 ~ 代表的就是 /xxx 目錄,這個(gè)目錄的位置(以 zhy 用戶為例),如下:
可以看到,/zhy 是在 /home 下。對于非管理員用戶, /xxx 目錄都是在 /home下,而 root用戶的 /root 目錄位置如下:
是直接位于根目錄下的(管理員是老大嘛,當(dāng)然優(yōu)待咯)。)
在當(dāng)前目錄下查找,就用 “.“:# find . -name "*.txt" -print該命令會(huì)查找當(dāng)前目錄及子目錄下滿足條件的文件。
在當(dāng)前目錄中查找大寫字母開頭的文件:# find . -name "[A-Z]*" -print注意后面有個(gè) *
在 /etc 中查找以 "host" 開頭的文件:# find /etc -name "host*" -print
在 $HOME 下查找所有文件:# find ~ -name "*" -print或# find ~ -print
如果想讓系統(tǒng)高負(fù)荷運(yùn)轉(zhuǎn),就用從根目錄查找:# find / -name "*" -print ( # find / -print)對這個(gè)命令稍加修改:# find / -name "*" -print &就可以讓它在后臺(tái)運(yùn)行了,這個(gè)時(shí)候,通過 ctrl + c ,也不能中斷它的執(zhí)行了。。。
查找文件以兩個(gè)小寫字母開頭,跟著是兩個(gè)數(shù)字的 .txt 文件,可以用:# find / -name "[a-z][a-z][0-9][0-9].txt" -print
3. find 的 perm 選項(xiàng):
按照文件權(quán)限來查找文件。
查找文件屬主可以讀、寫、執(zhí)行,其他用戶可以讀、執(zhí)行的文件:# find . -perm -print如:
擴(kuò)展:find . ! -perm -print
4. find 的 prune 選項(xiàng):
查找文件時(shí),忽略某個(gè)目錄,如:如果希望在 /apps 目錄下查找文件,但不希望在 /apps/bin 目錄下查找,可以用:# find /apps -name "/apps/bin" -prune -o -print
5. user 和 nouser 選項(xiàng):
user : 根據(jù)文件的屬主查找文件:# find . -user zhy -print
在linux下,可能有些屬主,可能被管理員刪掉了,這個(gè)時(shí)候,就能用-nouser 選項(xiàng)找到那些在屬主在 /etc/passwd文件中沒有有效賬戶的文件。在用 -nouser 時(shí),不用給出用戶名。# find / -nouser -print
6. 使用 group 和 nogroup:
就像使用 user 和 nouser 一樣,group 與 nogroup 選項(xiàng)能找出屬于某一用戶組的文件,和用戶組已經(jīng)不存在的文件。# find / -group zhy -print# find / -nogroup -print
7. 使用 -mtime 選項(xiàng):
該選項(xiàng)可以查找指定時(shí)間內(nèi)或指定時(shí)間外修改的文件,如果系統(tǒng)突然沒有可用空間了,很有可能某一個(gè)文件的長度在此期間增長迅速,這時(shí)就可以用 mtime 選項(xiàng)來查找這樣的文件:
-1表示1日(小時(shí))之內(nèi)更改過的文件。+2表示2日(小時(shí))之前更改過的文件。
8. newer 選項(xiàng):
newer 命令能讓我們找出更改時(shí)間介于兩個(gè)文件之間的文件,如有下面兩個(gè)文件,它們更改時(shí)間相差大概兩天:
通過下面的命令,我們就可以找出更改時(shí)間介于這兩者的文件了:# find / -newer age.awk ! -newer belts.awk -exec ls -l {} ;
從上面可以看出,這種比較必須有參考的文件,比如要查找更改時(shí)間在兩個(gè)小時(shí)以內(nèi)的文件,就必須有一個(gè)更改時(shí)間正好在兩個(gè)小時(shí)之前那個(gè)時(shí)刻的文件可以供參考。這里我們可以通過 touch 來創(chuàng)建一個(gè)指定更改時(shí)間的文件:假如現(xiàn)在是 月日點(diǎn)分,那就需要?jiǎng)?chuàng)建一個(gè)更改時(shí)間在月日點(diǎn)分的文件:# touch -t oldfile然后通過:# find / -newer oldfile -print來查找更改時(shí)間在兩個(gè)小時(shí)內(nèi)的文件。
9. 用 type 查找指定類型的文件:
在根目錄下,查找所有的目錄:# find / -type d - print
查找除目錄以外所有類型的文件:# find / ! -type d -print
查找所有符號鏈接文件:# find / -type l -print
查找所有普通文件:# find / -type f -print
. 使用 size 選項(xiàng):
使用可以查找指定長度的文件,可以以字節(jié)為單位,也可以用塊為單位,1塊 = 字節(jié)(0.5M)。以字節(jié)為單位,需要在數(shù)字后面加 c,如:在根目錄下查找文件長度大于 1M 的文件:# find / -size +c -print
用塊表示就是:# find / -size +2 -print
查找剛好是字節(jié)的文件:# find / -size c -print
查找小于字節(jié)的文件:# find / -size -c -print
. 使用 depth 選項(xiàng):
查找時(shí)使用depth命令,可以先在指定文件的根目錄下查找所有文件,再進(jìn)入子目錄中查找,有時(shí)備份可能需要這樣做。如:從根目錄開始,查找名為 "CON.FILE" 的文件,它將首先匹配所有的文件然后再進(jìn)入子目錄查找:# find / -name "CON.FILE" -depth -print
. 使用 mount 選項(xiàng):
查找文件時(shí),可以只在指定目下查找,而不進(jìn)入子目錄下查找,這可以通過 mount 指定。如:# find . -name "*.XC" -mount -print
. 使用cpio選項(xiàng):
cpio 選項(xiàng)可以用來向磁帶設(shè)備備份文件或從中恢復(fù)文件。結(jié)合find,可以在整個(gè)文件系統(tǒng)中查找文件,然后用 cpio 命令將其備份到磁帶上。下面的命令:# cd / # find etc home apps -depth -print | cpio -ivcdC -o /dev/rmt0
用來告訴系統(tǒng),shell 命令還沒有結(jié)束,請忽略 后面的回車。該命令用來將 /etc、/home 和 /apps 目錄下的文件備份到設(shè)備 /dev/rmt0 中。
上面命令中 etc 、home、 apps 前都沒有 / ,這是用了相對路徑(用了 / 就是絕對路徑),之所以用相對路徑,是因?yàn)椋?/p>
在從磁帶中恢復(fù)這些文件的時(shí)候,可以選擇恢復(fù)文件的路徑。例如,可以將這些文件先恢復(fù)到另外一個(gè)目錄中,對它們進(jìn)行某些操作后,再恢復(fù)到原始目錄中。如果在備份時(shí)使用了絕對路徑,例如 /etc,那么在恢復(fù)時(shí),就只能恢復(fù)到 /etc 目錄中去,別無其他選擇。
上面的命令,告訴 find 命令首先進(jìn)入 /etc 目錄,然后是 /home 和 /apps 目錄,先匹配這些目錄下的文件,然后再匹配其子目錄中的文件,所有這些結(jié)果將通過管道傳遞給 cpio 命令進(jìn)行備份。
順便說一下,在上面的例子中 cpio 命令使用了 C 選項(xiàng),我本可以使用 B 選項(xiàng),不過這樣每塊的大小只有 字節(jié),而使用了 C 選項(xiàng)后,塊的大小變成了 K 字節(jié)( / ) 。
. 使用 exec 或 ok 選項(xiàng):
用 find 匹配到一些文件之后,可以用 exec 和 ok 選項(xiàng)來對其進(jìn)行某些操作。用 exec 和 ok 的格式是:exec(ok) 選項(xiàng)后面跟隨著所要執(zhí)行的命令,然后是一對兒 {},一個(gè)空格和一個(gè),最后是一個(gè)分號。如:
# find . -type f -exec ls -l {} ;該命令查找并列出匹配到的文件。
# find logs -type f -mtime +5 -exec rm {} ;該命令查找更改時(shí)間在5天以前的普通文件,并刪除它們。
exec 的安全模式:ok# find . -name "*.LOG" -mtime +5 -ok rm {} ;該命令和用 exec 的唯一區(qū)別就是 該命令在刪除時(shí),會(huì)給出提示。
# find /etc -name "passwd*" -exec grep "zhy" {} ;
該命令首先匹配所有名為 "passwd*" 的文件,如:passwd、pssswd.old、passwd.bak,然后執(zhí)行 grep 命令查看在這些命令中是否存在 zhy 用戶。
find 的其他例子:# find ~ -print ( find $HOME -print)查找所有文件
# find . -type f -perm -print查找 suid 置位,文件屬主具有讀、寫、執(zhí)行權(quán)限,其他用戶具有讀和執(zhí)行權(quán)限的文件。
# find / -group zhy -print查找屬主是 zhy 的文件。
# $ find /logs -name 'admin.log[0-9][0-9][0-9]' -mtime +7 -exec rm {} ;查找具有指定名稱的,修改日期在7天以前的文件,并刪除。
# find /dev/rmt -print查找系統(tǒng)中所有的 rmt 磁帶設(shè)備。
. 使用 xargs 選項(xiàng):
為什么使用 xargs:
在使用f i n d命令的- e x e c選項(xiàng)處理匹配到的文件時(shí),f i n d命令將所有匹配到的文件一起傳遞給e x e c執(zhí)行。不幸的是,有些系統(tǒng)對能夠傳遞給 e x e c的命令長度有限制,這樣在f i n d命令運(yùn)行幾分鐘之后,就會(huì)出現(xiàn)溢出錯(cuò)誤。錯(cuò)誤信息通常是“參數(shù)列太長”或“參數(shù)列溢出” 。這就是x a rg s命令的用處所在,特別是與 f i n d命令一起使用。F i n d命令把匹配到的文件傳遞給 x a rg s命令,而x a rg s命令每次只獲取一部分文件而不是全部,不像 - e x e c選項(xiàng)那樣。這樣它可以先處理最先獲取的一部分文件,然后是下一批,并如此繼續(xù)下去。在有些系統(tǒng)中,使用 - e x e c選項(xiàng)會(huì)為處理每一個(gè)匹配到的文件而發(fā)起一個(gè)相應(yīng)的進(jìn)程,并非將匹配到的文件全部作為參數(shù)一次執(zhí)行;這樣在有些情況下就會(huì)出現(xiàn)進(jìn)程過多,系統(tǒng)性能下降的問題,因而效率不高;而使用 xargs 命令則只有一個(gè)進(jìn)程。另外,在使用 x a rg s命令時(shí),究竟是一次獲取所有的參數(shù),還是分批取得參數(shù),以及每一次獲取參數(shù)的數(shù)目都會(huì)根據(jù)該命令的選項(xiàng)及系統(tǒng)內(nèi)核中相應(yīng)的可調(diào)參數(shù)來確定。
例:
# find / -type f -print | xargs file | tee /root/shell/xargs.log查找系統(tǒng)中的每一個(gè)普通文件,然后使用 x a rg s命令來測試它們分別屬于哪類文件,并將輸出導(dǎo)入到 xargs.log 文件中。用 -exec 試下,就是:
# find / -type f -print -exec file {} ; | tee /root/shell/exec.log通過對比 xargs.log 和 exec.log ,發(fā)現(xiàn)二者的輸出,確實(shí)一樣,但執(zhí)行 xargs 命令的效率明顯比 -exec 快很多(從執(zhí)行速度上看)。
# find /apps/audit -perm -print | xargs chmod o-w在/ a p p s / a u d i t目錄下查找所有用戶具有讀、寫和執(zhí)行權(quán)限的文件,并收回其他用戶的寫權(quán)限。
# find / -type f -print | xargs grep "device"用 grep 命令在所有的普通文件中搜索device這個(gè)詞:
# find . -name * -type f -print | xargs grep "..5."該命令在當(dāng)前目錄下的所有普通文件中搜索 ..5. 這個(gè)詞,用來取消 find 命令中的*在 shell 中的特殊含義。
通過登陸IP記錄Linux所有用戶登錄所操作日志的方法 對于Linux用戶操作記錄一般通過命令history來查看歷史記錄,但是如果在由于誤操作而刪除了重要的數(shù)據(jù)的情況下,history命令就不會(huì)有什么作用了。那么
Ubuntu .解決重啟后resolv.conf清空的問題 這跟以前用RHT系的情況是完全不一樣的:在google上搜了一下,發(fā)現(xiàn)這里面還真有些奧妙:1/etc/resolv.conf其實(shí)是一個(gè)Link它其實(shí)指向的是/run/resolvconf/resolv.conf2
redhat linux enterprise 5 輸入ifconfig無效的解決方法 如果我們輸入/sbin/ifconfig或/usr/bin/gcc就可以執(zhí)行命令行。為了不輸入命令行的完整路徑,最好給用戶配置好路徑。vi~/.bash_profile里,添加PATH=$PATH:/sbin回車
標(biāo)簽: linux shell怎么用
本文鏈接地址:http://jsrtzm.cn/biancheng/363195.html 轉(zhuǎn)載請保留說明!上一篇:Linux命令(shell)從入門到精通 學(xué)習(xí)筆記之1 文件安全與權(quán)限 (linux shell命令大全)
網(wǎng)站地圖: 企業(yè)信息 工商信息 財(cái)稅知識 網(wǎng)絡(luò)常識 編程技術(shù)
友情鏈接: 武漢網(wǎng)站建設(shè)