find命令特點:文件查找,實時查找,速度略慢,精確匹配
使用格式:# find [options] [查找路徑] [查找條件] [處理動作]
查找路徑:默認爲當前目錄
查找條件:默認爲查找指定路徑下的所有文件
處理動作:默認爲顯示
查找/tmp目錄下文件名爲passwd的文件:# find /tmp -name "passwd"
查找/tmp目錄下文件名以passwd開頭的文件,passwd不區分大小寫:# find /tmp -iname"passwd*"
查找/tmp目錄下屬主爲linuxmi的文件:# find /tmp -user linuxmi
查找/tmp目錄下屬組爲linuxmi的文件:# find /tmp -group linuxmi
查找/tmp目錄下UID爲502的文件:# find /tmp -uid 502
查找/tmp目錄下GID爲502的文件:# find /tmp -gid 502
一個普通用戶例如linuxmi創建了/tmp/linuxmi.txt,該文件屬主和屬組都是linuxmi,但當keyso用戶被刪除之後,/tmp/linuxmi.txt文件的屬主和屬組會發生變化,此種情況無法再根據屬主爲linuxmi這個被刪除用戶查找到/tmp/linuxmi.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 \)