初學Ubuntu:Linux中find命令細節詳解

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目錄下UID502的文件:# find /tmp -uid 502

  • 查找/tmp目錄下GID502的文件:# 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目錄下屬組有讀或者寫權限,或者其他用戶有讀或者寫權限的文件(41):

# 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 {} \;類似

備註:-execxargs的區別

-execfind將查找到的所有文件一次性全部傳遞給-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  <==>  非(AB      -not A -a -not B  <==> -not \( A -o B \)

A或非B  <==>  非(AB      -not A -o -not B  <==> -not \( A -a B \)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章