文件查找:
在文件系統上查找符合條件的文件:
locate
依賴於事先構建的索引,索引的構建是在系統較爲空閒時自動進行(週期性任務):手動更新數據庫(updatedb)在生產服務器上禁用,索引構建過程需要遍歷整個根文件系統,極其消耗資源
工作特點:
非實時查找(數據庫查找)
查找速度快(索引查找)
模糊查找
locate KEYWORD
find
實時查找工具,通過遍歷指定路徑下的文件系統完成文件查找
工作特點:
實時查找
查找速度略慢
精確查找
find [OPTION]... [查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目標路徑,默認爲當前目錄
查找條件:指定的查找標準,以文件名,大小,類型,權限等標準進行,默認爲找出指定路徑下的所有文件
處理動作:對符合條件的文件做什麼操作,默認輸出至屏幕
查找文件
根據文件名查找:
-name "文件名稱":支持使用glob
*,?,[],[^]
-iname "文件名稱":不區分字母大小寫,支持使用glob
-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱
根據屬主,屬組查找:
-user USERNAME:查找屬主爲指定用戶的文件
-group GROUPNAME:查找屬組爲指定用戶的文件
-uid UserID:查找屬主爲指定UID號的文件
-gid GroupID:查找屬組爲指定UID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
根據文件類型查找:
-type TYPE
f:普通文件
d:目錄文件
l:符號鏈接文件
s:套接字文件
b:塊設備文件
c:字符設備文件
p:管道文件
組合條件:
-a:與
-o:或
-not:非
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件
find /tmp \( -not -user root -a -not -name "fstab" \) -ls
或者
find /tmp -not \( -user root -o -name "fstab" \) -ls
根據文件大小來查找:
-size [+|-]#UNIT
例如:-size +3k
常用單位(UNIT):k,M,G
#UNIT:(#-1,#] -->假如#號替換爲3則(3-1,3]-->相當於大於2小於等於3
-#UNIT:[0,#-1]
+#UNIT:(#,oo)
根據時間戳來查找:
以“天”爲單位:
#:[#,#+1)
+#:[#+1]
-#:(0-#)
-atime [+|-]#
-mtime
-ctime
以“分鐘”爲單位
-amin
-mmin
-cmin
根據權限查找:
-perm [/|-]MODE
MODE:精確權限匹配
/MODE:任何一類(u,g,o)對象的權限中只要能有一位匹配即可
-MODE:每一類(u,g,o)對象都必須同時擁有爲其指定的權限標準
-666
766:符合
760:不符合
處理動作:
-print:默認的處理動作,顯示至屏幕
-ls:類似於對查找到的文件執行"ls -l"命令
-delete:刪除查找到的文件
-fls /PATH/TO/SOMEFILE:查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \;:對查找到的每個文件執行由COMMAND指定的命令
對於每個文件執行命令之前,都會交互式要求用戶確認
-exec COMMAND {} \;:對查找到的每個文件執行由COMMAND指定的命令
對於每個文件執行命令之前,不會要求用戶確認
{}:用於引用查找到的文件名稱自身
Note:find傳遞查找到的文件至後面指定的命令時,查找到所有符合條件的文件一次性傳遞給後面的命令,有些命令不能接受過多參數,此時命令執行可能會失敗,另一種方式可規避此問題
find | xargs COMMAND
練習:
1.查找/var目錄下屬主爲root,且屬組爲mail的所有文件或目錄
2.查找/usr目錄下不屬於root,bin或hadoop的所有文件或目錄
3.查找/etc目錄下最近一週內其內容修改過,同時屬主不爲root,也不是hadoop的文件或目錄
4.查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件或目錄
5.查找/etc目錄下大於1M且類型爲普通文件的所有文件或目錄
6.查找/etc目錄下所有用戶都沒有寫權限的文件
7.查找/etc目錄下至少有一類用戶沒有執行權限的文件
8.查找/etc/init.d目錄下,所有用戶都有執行權限,且其他用戶有寫權限的文件