1. 程式人生 > >一天一個Linux命令--find

一天一個Linux命令--find

檔案查詢:(以find為主)
  which:查詢命令字所在的位置
  locate:模糊匹配(只要包含關鍵字的檔案都查找出來)
         不是實時的,基於資料庫查詢, updatedb升級locate資料庫
         查詢速度特別快

  find:檢視檔案或目錄的工具
       實時查詢
       精確查詢
       遍歷整個指定目錄中的檔案,速度很慢
       支援多種查詢條件(屬主,屬組,許可權,檔名等)
       語法:

find [find_path] [條件] [處理動作]
       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