一、文件查找命令分類
1.locate命令
該命令是非實時的,模糊匹配,查找是根據全系統文件數據庫進行的,速度比較快;可以自己定義更新數據庫的策略,也可以使用updatedb命令手動生成或者更新文件數據庫;該命令不經常使用。
2.find命令
該命令是實時的,精確查找,遍歷所有目錄中的所有文件完成查找,速度比較慢,但是支持衆多的查找標準,是最經常使用的文件查找命令。
3.find命令的使用格式:
find 查找路徑 查找標準 查找到以後的處理動作
查找路徑:默認爲當前目錄
查找標準:默認爲指定路徑下的所有文件
查找到以後的處理動作:默認爲打印到屏幕
二、查找標準
-name 'FILENAME' |
該命令對文件名做精確匹配,可以使用文件名通配符 * : 任意長度的任意字符 ? : 長度爲1的任意字符 [] : 指定範圍內的任意字符 |
-iname 'FILENAME' | 文件名匹配時不區分大小寫 |
-regex PATTERN | 基於正則表達式進行文件名匹配 |
-user USERNAME |
根據屬主查找 |
-group GROUPNAME |
根據數組查找 |
-uid UID |
根據UID查找 |
-gid GID | 根據GID查找 |
-nouser |
查找沒有屬主的文件 |
-nogroup | 查找沒有數組的文件 |
-type |
f:普通文件 |
d:目錄 |
|
c:字符設備文件 |
|
b:塊設備文件 |
|
l:鏈接文件 |
|
p:管道設備文件 |
|
s:套接字文件 |
|
-size |
[+|-]#k:按照k爲單位查找文件 |
[+|-]#M:按照M爲單位查找文件 | |
[+|-]#G:按照G爲單位查找文件 | |
-mtime [ + | - ]# |
modify time,文件最後一次修改時間,單位是天 |
-ctime [ + | - ]# | change time,文件最後一次改變時間,單位是天 |
-atime [ + | - ]# | access time,文件最後一次訪問時間,單位是天 |
-mmin [ + | - ]# |
同上,單位是分鐘 |
-cmin [ + | - ]# | 同上,單位是分鐘 |
-amin [ + | - ]# | 同上,單位是分鐘 |
-perm MODE |
精確匹配 |
-perm -MODE | 只有文件權限完全包含此MODE時才符合條件 |
-perm /MODE |
任意一位匹配即滿足條件 |
三、組合條件
-a | -and 與條件 |
-o | -or 或條件 |
-not | 非條件 |
四、處理動作
顯示 | |
-ls |
詳細顯示每一個文檔的信息 |
-ok COMMAND {} \; |
每一次操作都需要用戶確認 |
-exec COMMAND {} \; |
不需要用戶確認 |
五、文件查找練習題
1.查找/var目錄下屬主爲root並且屬組爲mail的所有文件
find /var -user root -a -group mail
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及kdyzm用戶的文件
find /etc -mtime -7 -a -not \( -user root -o -user kdyzm \)
或者
find /etc -mtime -7 -a -not -user root -a -not -user kdyzm
4.查找當前系統上沒有屬主或屬組且最近1天內曾被訪問過的文件,並將其屬主屬組均修改爲root
find / -mtime -1 -a \( -nouser -o -nogroup \) -exec chown root.root {} \;
5.查找/etc目錄下大於1M的文件,並將其文件名寫入/tmp/etc.largefiles文件中
find /etc -size +1M >> /tmp/etc.largefiles
6.查找/etc目錄下所有用戶都沒有寫權限的文件,顯示出其詳細信息
find /etc -not -perm /222 -ls