一、了解find的基本含義及格式
find在我們所學英語中作動詞時,有“發現、查找、找到等”含義,如今,在linux中“find”是文件查找命令,有實時、精確、支持眾多查找標准的特點。
在查找文件時,因為find是遍歷指定目錄中的所有文件依次查找完成,查找速度相當慢,主要取決你查找的文件大小。
格式:find 查找路徑 查找標准 查找到以後的處理動作
查找路徑可以省略,默認為當前目錄,如果是在其它目錄下可以在find後面直接寫你所在的目錄
查找標准:默認為指定路徑下的所有文件
查找到以後的處理動作:默認為顯示到屏幕上
二、匹配查找標准
1、根據文件名查找:
-name ‘FILENAME’:對文件名作精確匹配
也支持文件名通配:
*:表示匹配任意長度的任意字符
?:表示匹配任意單個字符
[ ]:表示匹配范圍內的任意單個字符
[[:space:]]:所有空格字符
[[:punct:]]:標點符號
[[:lower:]]:小寫字母
[[:upper:]]:大寫字母
[[:digit:]]:數字
[[:alnum:]]:數字和大小寫字母
[^]:托字符;匹配指定范圍之外的任意單個字符
-iname 'FILENAME':文件名匹配時不區分大小寫
-regex PATTERN:基於正則表達式進行文件名匹配,如果後面沒有跟類型,默認為基本正則表達式
-user USERNAME:根據屬主查找,如果把某個用戶的屬主刪除,以這個屬主命名的文件的屬主就會變成用戶之前屬主的ID號
例如:#userdel -r Hadoop
#ls –l /tmp 再查看以hadoop為屬主的用戶就沒有了
-group GROUPNAME:根據屬組查找與-user USERNAME含義一樣
-uid UID:根據UID查找
例如:find /tmp –uid 2003 (表示查找/tmp下用戶的uid為2003的文件)
-gid GID:根據GID查找
例如:find /tmp –gid 2003 (表示查找/tmp下用戶的gid為2003的文件)
-nouser:查找沒有屬主的文件
例如:find /tmp –nouser (表示查找/tmp下沒有屬主的用戶)
-nogroup:查找沒有屬組的文件
例如:find /tmp –nogroup (表示查找/tmp下沒有屬組的用戶)
2、根據文件類型查找:
-type 文件類型
文件類型:
f:普通文件
d: 目錄文件
b:塊設備文件中可供存儲的接口設備(block)
c: 字符設備文件,如:鍵盤、鼠標 (character)
l:符號鏈接文件(symbolic link file)
p: 命令管道文件(pipe)
s:套接字文件(socket)
3、根據文件的大小查找:
-size [+|-] 如果不帶單位默認為字節,想要顯示查找到的文件大小可以使用ls
#k:可以自己設定查找文件大小為多少k,可以與[+|-]一起使用
+#k:表示文件大小在設定多少k以上的文件
例如:find /var –size +10k (表示/var目錄上文件大小在10k以上)
-#k:表示文件大小在設定多少k以下的文件
例如:find /var –size -10k (表示/var目錄上文件大小在10k以下)
#M:可以自己設定查找文件大小為多少M,可以與[+|-]一起使用
+#M:表示文件大小在設定多少M以上的文件
例如:find /var –size +10M (表示/var目錄上文件大小在10M以上)
-#M:表示文件大小在設定多少M以下的文件
例如:find /var –size -10M (表示/var目錄上文件大小在10M以下)
#G:可以自己設定查找文件大小為多少G,可以與[+|-]一起使用
+#G:表示文件大小在設定多少G以上的文件
例如:find /var –size +10G (表示/var目錄上文件大小在10G以上)
-#G:表示文件大小在設定多少G以下的文件
例如:find /var –size -10G (表示/var目錄上文件大小在10G以下)
4、查找可以與組合條件一起使用:
-a:與關系,如果沒有說明組合條件默認為與關系
例如:find /tmp -type d –a –type s (表示查找文件類型既屬於目錄又是套接字文件)
-o:或關系
例如:find /tmp -type d –o –type s (表示查找文件類型屬於目錄或是套接字文件)
-not:非關系
例如:find /tmp -not -type d (表示查找文件類型不是目錄)
5、根據修改時間戳查找:
-mtime n:(單位為天),查找系統中n天被修改的文件,可以與[+|-]#(數字)一起使用
例如:find /tmp –mtime +5 (表示查找/tmp中至少5天被修改過的文件)
find /tmp –mtime -5 (表示查找/tmp中5天內被修改過的文件)
-ctime n:(單位為天),查找系統中n天被改變的文件,可以與[+|-]#(數字)一起使用
例如:find /tmp –ctime +5 (表示查找/tmp中至少5天被改變過的文件)
find /tmp –ctime -5 (表示查找/tmp中5天內被改變過的文件)
-atime n:(單位為天),查找系統中n天被訪問的文件,可以與[+|-]#(數字)一起使用
例如:find /tmp –atime +5 (表示查找/tmp中至少5天被訪問過的文件)
find /tmp –atime -5 (表示查找/tmp中5天內被訪問過的文件)
-mmin n:(單位為分鐘),查找系統中n分鐘被修改過的文件,可以與[+|-]#(數字)一起使用
例如:find /tmp –mmin +5 (表示查找/tmp中至少5分鐘被修改過的文件)
find /tmp –mmin -5 (表示查找/tmp中5分鐘內被修改過的文件)
-cmin n:(單位為分鐘),查找系統中n分鐘被改變過的文件,可以與[+|-]#(數字)一起使用
例如:find /tmp –cmin +5 (表示查找/tmp中至少5分鐘被改變過的文件)
find /tmp –cmin -5 (表示查找/tmp中5分鐘內被改變過的文件)
-amin n:(單位為分鐘),查找系統中n分鐘被訪問過的文件,可以與[+|-]#(數字)一起使用
例如:find /tmp –amin +5 (表示查找/tmp中至少5分鐘被訪問過的文件)
find /tmp –amin -5 (表示查找/tmp中5分鐘內被訪問過的文件)
6、通過文件權限查找:
-perm MODE 精確匹配
/MODE 文件權限符合任一位即可 (任意一位匹配即滿足條件)
例如:find ./ -perm /022 表示在家目錄下組有寫權限或者其它用戶有寫權限才能符合條件
-MODE 文件權限能完全包括此MODE才符合條件,有包含關系 (對應的位必須完全匹配)
例如:find ./ -perm -001 表示在家目錄下只有其它用戶有執行權限
思考:find ./ -perm -644 如果是權限為755、750的文件能匹配到嗎?
分析: 644:rw-r--r--
755:rwxr-xr-x
750:rwxr-x---
只要權限為644的位,權限755都滿足而權限為750不包含其它用戶的位,所以權限為755的文件能匹配到而權限為750的文件不能匹配
在-perm前加-not,就代表後面的-001表示相反的意思(任意一位匹配即滿足條件)