1. 程式人生 > >find命令基本用法及練習

find命令基本用法及練習

Linux學習

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

練習題:
1、查找/var目錄下屬主為root,且屬組為mail的所有文件

find /var -user root -group mail

技術分享圖片
2、查找/var目錄下不屬於root、lp、gdm的所有文件

find /var -not \( -user root -o -user lp -o -user gdm \)

技術分享圖片
3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是 postfix的文件

find /var -not \( -user root -o -user  postfix \) -mtime -7

技術分享圖片
4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件

find /  -nogroup -nouser -atime -7 -ls

技術分享圖片
5、查找/etc目錄下大於1M且類型為普通文件的所有文件

find /etc -size +1M -type f

技術分享圖片
6、查找/etc目錄下所有用戶都沒有寫權限的文件

find /etc -not -perm /222

技術分享圖片
7、查找/etc目錄下至少有一類用戶沒有執行權限的文件

#centos7 +號使用/替代
find /etc -not -perm /222

技術分享圖片
8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件

find /etc/init.d -perm -113

技術分享圖片

find命令基本用法及練習