一天一個Linux命令--find
檔案查詢:(以find為主)
which:查詢命令字所在的位置
locate:模糊匹配(只要包含關鍵字的檔案都查找出來)
不是實時的,基於資料庫查詢, updatedb升級locate資料庫
查詢速度特別快
find:檢視檔案或目錄的工具
實時查詢
精確查詢
遍歷整個指定目錄中的檔案,速度很慢
支援多種查詢條件(屬主,屬組,許可權,檔名等)
語法:
find_path:如果不寫,預設在當前工作目錄查詢
條件:如果不寫,會查找出該路徑下所有的檔案處理動作:預設列印到螢幕上 print
條件:(匹配標準)
-name file_name:根據檔名進行查詢,區分大小寫
-iname file_name:根據檔名進行查詢,不區分大小寫
-regex PATTERN:根據正則表示式的模式進行查詢
-user:通過屬主進行查詢
-group:通過屬組程序查詢
-uid UID:通過UID號進行查詢
-gid GID:通過GID號進行查詢
-nouser:查詢沒有屬主的檔案
-nogroup:查詢沒有屬組的檔案
-type:根據檔案型別進行查詢
-b:塊裝置
-c:字元裝置
-d:目錄
-f:檔案
-p:命名管道
-s:套接字檔案
-l:連結檔案
-size [+ | -] k m g
-size 5k:精確匹配
+:大於
-:小於
根據時間戳進行查詢: # stat file_name //檢視檔案的時間戳
-atime:時間單位為天,access時間 -mtime:時間單位為天,modify時間 -ctime:時間單位為天,change時間 -mmin:時間單位為分鐘,modify時間 -amin:時間單位為分鐘,access時間-cmin:時間單位為分鐘,change時間
根據許可權查詢:
-perm MODE:
MODE:644,精確匹配
/MODE:任意一位匹配
-MODE:檔案許可權能夠完全包含此MODE時才能匹配
條件組合:
-a:同時滿足多個條件,比如查詢屬主是tom並且許可權為644的檔案
-o:滿足一個條件即可,比如查詢屬主是tom或者許可權為包含644的檔案
-not:不滿足條件的被查找出來
出來動作:
-print:預設動作,預設查詢結果列印到螢幕
-ls:預設以類似於ls -l的形式顯示結果的資訊
-ok COMMAND {} \;執行動作時提示使用者是否執行,必須以\;結尾,{}代表檔名佔位符
-exec COMMAND {} \;執行動作時不提示使用者直接執行,必須以\;結尾,{}代表檔名佔位符
查詢條件萬用字元:
*:通配任意個數的任意字元
# find /etc/ -name "pass*"
# find /etc/ -name "*pass"
?:通配單個的任意字元
# find /etc/ -name "passw*"
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及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 {} \;
5、查詢/etc目錄下大於1M的檔案,並將其檔名寫入/tmp/etc.largefiles檔案中;
find /etc -size +1M >> /tmp/etc.largefiles
6、查詢/etc目錄下所有使用者都沒有寫許可權的檔案,顯示出其詳細資訊;
find /etc -not -perm /222 -ls