2021-05-12 14:32:11
Linux中find命令細節詳解
find命令特點:檔案查詢,實時查詢,速度略慢,精確匹配
使用格式:# find [options] [查詢路徑] [查詢條件] [處理動作]
查詢路徑:預設為當前目錄
查詢條件:預設為查詢指定路徑下的所有檔案
處理動作:預設為顯示
-
查詢/tmp目錄下檔名為passwd的檔案:# find /tmp -name "passwd"
-
查詢/tmp目錄下檔名以passwd開頭的檔案,passwd不區分大小寫:# find /tmp -iname "passwd*"
-
查詢/tmp目錄下屬主為keyso的檔案:# find /tmp -user keyso
-
查詢/tmp目錄下屬組為keyso的檔案:# find /tmp -group keyso
-
查詢/tmp目錄下UID為502的檔案:# find /tmp -uid 502
-
查詢/tmp目錄下GID為502的檔案:# find /tmp -gid 502
一個普通使用者例如keyso建立了/tmp/keyso.txt,該檔案屬主和屬組都是keyso,但當keyso使用者被刪除之後,/tmp/keyso.txt檔案的屬主和屬組會發生變化,此種情況無法再根據屬主為keyso這個被刪除使用者查詢到/tmp/keyso.txt檔案
-
查詢/tmp目錄下沒有屬主的檔案:# find /tmp -nouser
-
查詢/tmp目錄下沒有屬組的檔案:# find /tmp -nogroup
-
查詢/tmp目錄下的目錄:# find /tmp -type d
-type檔案型別包括:f(普通檔案)、d(目錄)、b(塊裝置)、c(字元裝置)、l(符號連結檔案)、p(命名管道)和s(通訊端)等
-
查詢/tmp目錄下大於100M的檔案:# find /tmp -size +100M
-size:根據檔案大小查詢,-size [+ | -]#[k | M | G],+(大於),-(小於),沒有+和-,就是精確匹配
#實際的取值範圍:(#-1)<x<=#
-
查詢/tmp目錄下一天之內被存取過的檔案:# find /tmp -atime -1
格式:-[a | m | c][time | min] [+ | -]#
根據time時間戳查詢(以天為單位):
-atime:存取時間,就是一個檔案最後一次被存取的時間
-mtime:修改時間,就是檔案的內容最後被修改的時間
-ctime:改變時間,就是檔案或者目錄的屬性(屬主、屬組、許可權等等)被改變的時間
根據min時間戳查詢(以分鐘為單位):
-amin:意義同-atime
-mmin:意義同-mtime
-cmin:意義同-ctime
+#:表示(#+1)天之外被存取過
-#:表示#天之內被存取過
#:表示在#<=x<(#+1)天的時間段內被存取過
-
查詢/tmp目錄下許可權為644的檔案:# find /tmp -perm 644
根據許可權查詢,格式:-perm [+ | -]MODE
+MODE:任何一類使用者的任何一位許可權匹配,常用於查詢某類使用者的某特定許可權是否存在
-MODE:每類使用者的指定要檢查的許可權位都要匹配
MODE:精確匹配所給的許可權
範例: //6=4+2=r+w
-
查詢/tmp目錄下許可權為666的檔案(精確匹配):# find /tmp -perm 666
-
查詢/tmp目錄下其他使用者有讀寫許可權的檔案:# find /tmp -perm -006
-
查詢/tmp目錄下其他使用者有讀或者寫許可權的檔案:# find /tmp -perm +006
-
查詢/tmp目錄下至少有一類使用者有寫許可權的檔案:# find /tmp -perm +222
-
查詢/tmp目錄下所有使用者都有寫許可權的檔案:# find /tmp -perm -222
-
查詢/tmp目錄下所有使用者都沒有寫許可權的檔案:# find /tmp -not -perm +222
//“所有使用者都沒有”和“只要有一類使用者有”意思相反
//只確定不能有寫許可權,並不能確定有沒有讀和執行許可權
-
查詢/tmp目錄下至少有一類使用者沒有寫許可權的檔案:# find /tmp -not -perm -222
//“至少有一類使用者沒有”和“所有使用者都有”意思相反
-
查詢/tmp目錄下屬組或者其他使用者有讀寫許可權的檔案:# find /tmp -perm -060 -o -perm -006
-
查詢/tmp目錄下屬組和其他使用者都有讀寫許可權的檔案:# find /tmp -perm -066
-
查詢/tmp目錄下屬組有讀或者寫許可權,或者其他使用者有讀或者寫許可權的檔案(4選1):
# find /tmp -perm +066
-
查詢/tmp目錄下的普通檔案,並刪除:# find /tmp -type f -exec rm -rf {} ;
-
查詢/tmp目錄下大於10M的檔案,並以長格式顯示檔案資訊:# find /tmp -size +10M -ls
-
查詢/tmp目錄下以.doc結尾的檔案,並重新命名為.docx:# find /tmp -iname "*.doc" -exec mv {} {}x ;
處理動作:
-ls:以長格式顯示檔案資訊
-exec COMMAND {} ; --> 對查詢到的檔案執行指定的命令,{}為預留位置,指代find查詢到的檔案
-ok COMMAND {} ; --> 與-exec COMMAND {} ;類似,互動式的-exec
|xargs COMMAND:對查詢到的檔案執行指定的命令,功能與-exec COMMAND {} ;類似
備註:-exec與xargs的區別
-exec:find將查詢到的所有檔案一次性全部傳遞給-exec所指定的命令,容易出現溢位錯誤。-exec為處理每一個匹配到的檔案而發起一個相應的進程,會導致進程過多,系統效能下降
xargs:對find傳遞給xargs所指定的命令的檔案,每次只獲取一部分而不是全部,不會出現溢位錯誤。另外xargs只會發起一個進程,不會導致系統效能下降
-
查詢/tmp目錄下沒有屬主或屬組,且最近1個月內曾被存取過的檔案:
# find /tmp ( -nouser -o -nogroup ) -a -atime -30 //括號內側的兩端都需要加空格
組合條件:
-a:與,同時滿足,如果組合條件中只有-a,可以省略 --> # find /tmp -user Hadoop [-a] -name "*.txt"
-o:或,只需滿足其一即可,優先順序比-a低,如果需要先執行-o條件,需要加(),()需要跳脫
-not | !:非,取反
非A且非B <==> 非(A或B) -not A -a -not B <==> -not ( A -o B )
非A或非B <==> 非(A且B) -not A -o -not B <==> -not ( A -a B )
本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-05/152609.htm
相關文章