文件查找有兩種方式:
一、locate:非實時查找,模糊匹配,查找時根據全系統文件數據庫進行;速度快
# updatedb:是手動生成文件數據庫;速度快
二、find:實時查找,精確匹配,支持眾多查找標准,遍歷指定目錄中的所有文件完成查找;速度慢
find命令的用法
find 查找路徑 查找標准 查找到以後的處理運作
查找路徑:默認為當前目錄
查找標准:默認為指定路徑下的所有文件
處理運作:默認為顯示
其匹配標准:
-name `FILENAME`:對文件名做精確匹配
文件名通配:
*:任意長度
?:任意單個字符
[]:匹配指定范圍內的任意單個字符
[:space:]:空白字符
[:punct:]:標點符號
[:lower:]:小寫字母
[:upper:]: 大寫字母
[:alpha:]: 大小寫字母
[:digit:]: 數字
[:alnum:]: 數字和大小寫字母
例:# find /etc -name 'passwd*' --> 查找以/etc目錄下以passwd開頭的文件
-iname ‘FILENAME':文件名匹配時不區分大小寫
-regex PATTERN:基於正則表達式進行文件名匹配
-user USERNAME:根據屬主查找
例:# find /tmp -user student --> 查找/tmp目錄下屬主為student的文件
-group GROUPNAME:根據屬組查找
-uid UID:根據UID查找
例: # find /tmp -uid 2003 --> 查找/tmp目錄下uid為2003的文件
-gid GID:根據GID查找
-nouser:查找沒有屬主的文件
例: # find /tmp -nouser --> 查找/tmp目錄下沒有屬主的文件
-nogroup:查找沒有屬組的文件
-type:根據文件類型查找
文件類型:
f:普通文件
d:目錄文件
b:塊設備文件(block)
c:字符設備文件(character)
l:符號鏈接诶文件(pipe)
p:命令管道文件(pipe)
s:套接字文件(socket)
例:# find /tmp -type f --> 查找/tmp目錄下的普通文件
-size:根據文件大小查找 [+|-]
(11M 即大於10M小於等於11M)
# k
# M
# G
例:# find /tmp -size +11M --> 查找/tmp目錄下所有大於11M的文件
組合條件:(默認為與關系)
-a:與
-o:或
-not:非
其優先級為:-not > -a > -o
小練習:找出/tmp目錄下,不是目錄,並且還不能是套接字類型的文件
# find /tmp -not -type d -a -not -type s
或者 # find /tmp -not \( -type d -a -type s \)
-mtime:根據文件的修改時間查找;(天數)
-ctime:根據文件的改變時間查找;(天數)
-atime:根據文件的訪問時間進行查找;(天數)
+n:表示至少n天沒訪問過
-n:表示n天內沒訪問過
n:表示第n天訪問過
例: find /tmp -mtime -7 --> 查找/tmp目錄下7天內被修改過的文件
-mmin:根據文件的修改時間查找;(分鐘數)
-cmin:根據文件的改變時間查找;(分鐘數)
-amin:根據文件的訪問時間進行查找;(分鐘數)
(用法同上)
-perm MODE (直接跟權限表示精確匹配)按權限查找
-mode:文件權限能完全包含此MODE時才能顯示
/mode:任意一位匹配即可
例:# find /tmp -perm -011 --> 查找組用戶和其他用戶都有讀權限的文件
#find /tmp -perm /022 --> 查找組用戶或者其他用戶有寫權限的文件
運作:
-print:顯示
-ls: 類似ls -l的形式顯示每一個文件的詳細信息
-ok COMMAND {} \; 對查找的文件執行命令。每一次操作都需要用戶確認
-exec COMMAND {} \; 不需要確認
例: # find /tmp -prem -006 -exec chmod o-w {} \;
--> 查找其他用戶有讀寫權限的用戶,並且把將其寫權限去掉。
# find -type d -ok chmod +x {} \; --> 將當前的目錄都改為執行權限
# find -perm -020 -exec mv {} {}.new \;)
--> 將當前目錄下有寫權限的組用戶的名字改為後面加.new
Find命令的高級應用:
1、查找/var目錄下屬主為root並且屬組為mail的所有文件;
# find /var -user root -group mail
(這裡默認的關系為與的關系,即兩個條件為真,結果為真。中間可加-a)
2、查找/usr目錄下不屬於root,bin,或student的文件;
# find /usr -not -user root -a -not -user bin -a -not -user student
# find /usr -not \( -user root -o -user bin -o -user student \)
(上邊一句分別寫不屬於各個用戶的文件;下邊一句是將語句合起來,括號前要用\作轉義符,這裡使用摩根定律,加括號時,括號裡的與關系要轉成或關系)
3、查找/etc目錄下最近一周內內容修改過且不屬於root及student用戶的文件;
# find /etc -mtime -7 -not \( -user root -o -user student \)
# find /etc -mtime -7 -not -user root -a -not -user student
同上,使用摩根定律。
4、查找當前系統上沒有屬主或屬組且最近1天內曾被訪問過的文件,並將其屬主屬組均修改為root;
# find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;
(先找出沒有屬主或屬組的文件,要用括號括著,再找一天內被訪問過的文件。最後用-exec修改其屬主和屬組。 最後邊的 \; 一定不要忘了)
5、查找/etc目錄下大於1M的文件,並將其文件名寫入/tmp/etc.largefiles文件中;
# find /etc -size +1M >> /tmp/etc.largefiles
# find /etc -size +1M | xarges echo {} >> /tmp/etc.largefiles
擴展:
xarges --> 可用其將查找出的文件名寫入另一個文件中。
6、查找/etc目錄下所有用戶都沒有寫權限的文件,顯示出其詳細信息;
# find /etc -not -perm /222 -ls
(-ls,可查看查找到文件的詳細信息)