find是一款實時查找工具,經過遍歷指定路徑完成文件查找 工做特色: 查找速度慢 精確查找 實時查找 可能只是搜索用戶具有讀取和執行權限的目錄 語法 find [option] [查找路徑] [查找條件][處理動做] 查找路徑:指定具體目標路徑;默認爲當前目錄 查找條件:指定的查找標準,能夠文件名,大小 類型 權限 等標準進行 默認爲找出指定路徑下的全部文件 處理動做:對符合條件的文件作操做,默認輸出至屏幕 指定搜索層級: -maxdepth level 最大搜索目錄深度,指定目錄爲第一級 -mindepth level 最小搜索目錄深度 根據文件名和inode查找 -name 「文件名稱」:支持使用glob * ? [] [^] -iname "文件名稱":不區分字母大小寫 -inum n 按inode號查找 -samefile name 相同inode號的文件 -links n 連接數爲n的文件 -regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不單單是文件名稱 根據屬主、屬組查找: -user USERNAME:查找屬主爲指定用戶(UID)的文件 -group GRPNAME: 查找屬組爲指定組(GID)的文件 -uid UserID:查找屬主爲指定的UID號的文件 -gid GroupID:查找屬組爲指定的GID號的文件 -nouser:查找沒有屬主的文件 -nogroup:查找沒有屬組的文件 根據文件類型查找 -type TYPE: f: 普通文件 d: 目錄文件 l: 符號連接文件 s:套接字文件 b: 塊設備文件 c: 字符設備文件 p: 管道文件 空文件或者目錄 -empty find /app -tpye d -empty 組合條件 與:-a 或:-o 非: -not ! 德摩根定律 (非A) 或 (非B) = 非(A且B) (非A) 且 (非B) = 非(A或B) ps: 實例: !A -a !B = !(A -o B) !A -o !B = !(A -a B) find 示例 find -name snow.png find -iname snow.png find / -name 「*.txt」 find /var –name 「*log*」 find -user joe -group joe find -user joe -not -group joe find -user joe -o -user jane find -not \( -user joe -o -user jane \) find / -user joe -o -uid 500 找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件 find /tmp \( -not -user root -a -not -name 'f*' \) -ls find /tmp -not \( -user root -o -name 'f*' \) –ls 排除目錄 示例: 查找/etc/下,除/etc/sane.d目錄的其它全部.conf後綴的文件 find /etc -path ‘/etc/sane.d’ -a –prune -o -name 「*.conf」 查找/etc/下,除/etc/sane.d和/etc/fonts兩個目錄的全部.conf後綴的文件 find /etc \(–path ‘/etc/sane.d’ –o –path ’/etc/fonts’ \) -a -prune –o -name 「*.conf」 根據文件大小來查找: -size [+|-]#UNIT 經常使用單位:k, M, G,c(byte) #UNIT: (#-1, #] 如:6k 表示(5k,6k] -#UNIT:[0,#-1] 如:-6k 表示[0,5k] +#UNIT:(#,∞) 如:+6k 表示(6k,∞) 根據時間戳: 以「天」爲單位; -atime [+|-]#, #: [#,#+1) +#: [#+1,∞] -#: [0,#) -mtime -ctime 以「分鐘」爲單位: -amin -mmin -cmin 根據權限查找: -perm [/|-]MODE MODE: 精確權限匹配 /MODE:任何一類(u,g,o)對象的權限中只要能一位匹配便可,或關係,+ 從centos7開始淘汰 -MODE:每一類對象都必須同時擁有指定權限,與關係 0 表示不關注 find -perm 755 會匹配權限模式剛好是755的文件 只要當任意人有寫權限時,find -perm +222就會匹配 只有當每一個人都有寫權限時,find -perm -222纔會匹配 只有當其它人(other)有寫權限時,find -perm -002纔會匹配 處理動做 -print:默認的處理動做,顯示至屏幕 -ls:相似於對查找到的文件執行「ls -l」命令 -delete:刪除查找到的文件 -fls file:查找到的全部文件的長格式信息保存至指定文件中 -ok COMMAND {} \; 對查找到的每一個文件執行由COMMAND指定的命令,對於 每一個文件執行命令以前,都會交互式要求用戶確認 -exec COMMAND {} \; 對查找到的每一個文件執行由COMMAND指定的命令 不進行提示直接處理要注意安全 {}: 用於引用查找到的文件名稱自身 find傳遞查找到的文件至後面指定的命令時,查找到全部符合條件的文件一次性 傳遞給後面的命令 因爲不少命令不支持管道|來傳遞參數,而平常工做中有這個必要,因此就有了 xargs命令 xargs用於產生某個命令的參數,xargs 能夠讀入 stdin 的數據,而且以空格符 或回車符將 stdin 的數據分隔成爲arguments 注意:文件名或者是其餘意義的名詞內含有空格符的狀況 有些命令不能接受過多參數,命令執行可能會失敗,xargs能夠解決 示例: ls f* |xargs rm find /sbin -perm +700 |ls -l 這個命令是錯誤的 find /sbin -perm +7000 | xargs ls –l find和xargs格式:find | xargs COMMAND ps: 備份配置文件,添加.orig這個擴展名 find -name 「*.conf」 -exec cp {} {}.orig \; 提示刪除存在時間超過3天以上的joe的臨時文件 find /tmp -ctime +3 -user joe -ok rm {} \; 在主目錄中尋找可被其它用戶寫入的文件 find ~ -perm -002 -exec chmod o-w {} \; 查找/data下的權限爲644,後綴爲sh的普通文件,增長執行權限 find /data –type f -perm 644 -name 「*.sh」 –exec chmod 755 {} \; 查看/home的目錄 find /home –type d -ls
練習題:
一、查找/var目錄下屬主爲root,且屬組爲mail的全部文件node
find /var -user root -group mail
二、查找/var目錄下不屬於root、lp、gdm的全部文件 centos
find /var -not \( -user root -o -user lp -o -user gdm \)
三、查找/var目錄下最近一週內其內容修改過,同時屬主不爲root,也不是 postfix的文件 安全
find /var -not \( -user root -o -user postfix \) -mtime -7
四、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件 app
find / -nogroup -nouser -atime -7 -ls
五、查找/etc目錄下大於1M且類型爲普通文件的全部文件 ide
find /etc -size +1M -type f
六、查找/etc目錄下全部用戶都沒有寫權限的文件 工具
find /etc -not -perm /222
七、查找/etc目錄下至少有一類用戶沒有執行權限的文件 post
#centos7 +號使用/替代 find /etc -not -perm /222
八、查找/etc/init.d目錄下,全部用戶都有執行權限,且其它用戶有寫權限的文件ui
find /etc/init.d -perm -113