1. 程式人生 > >Linux 下 find(檔案查詢)命令的用法總結

Linux 下 find(檔案查詢)命令的用法總結

[轉自:http://blog.chinaunix.net/uid-24648486-id-2998767]

Linux下查詢檔案的命令有兩個:locate 和 find

首先說下locate,locate這個命令是對其生成的資料庫進行遍歷(生成資料庫的命令:updatedb),這一特性決定了用locate查詢檔案速度很快,但是locate命令只能對檔案進行模糊匹配,在精確度上來說差了點,簡單介紹下它的兩個選項:

  # locate 

       -i        //查詢檔案的時候不區分大小寫 比如:locate  –i   passwd

       -n       //只顯示查詢結果的前N行     比如:locate  -n  5   passwd

 

下面重點說下find,find在不指定查詢目錄的情況下是對整個系統進行遍歷查詢

  使用格式 :   find  [

指定查詢目錄]  [查詢規則]  [查詢完後執行的action]

  [指定查詢目錄]例如:

這裡要注意的是目錄之間要用空格分開

  [查詢規則] 

        (1)根據檔名查詢

           #  -name       //

根據檔名查詢(精確查詢)

           #  -iname       //根據檔名查詢,但是不區分大小寫 

 

這裡另外介紹下檔名通配的知識

*表示  通配任意的字元

     

 ?表示  通配任意的單個字元

     

[ ] 表示 通配括號裡面的任意一個字元

     (2),根據檔案所屬使用者和組來查詢檔案

           #  -user         //根據屬主來查詢檔案

           #  -group        //根據屬組來查詢檔案

 

     (3),根據uid 和 gid來查詢使用者

           #find  /tmp  -uid  500  //查詢uid是500 的檔案

           #find  /tmp  -gid  1000 // 查詢gid是1000的檔案

 

 

      (4),-a  and  -o  and  –not的使用

           # -a 連線兩個不同的條件(兩個條件必須同時滿足)

          # -o 連線兩個不同的條件(兩個條件滿足其一即可)

          # -not 對條件取反的

  

    (5),根據檔案時間戳的相關屬性來查詢檔案

          我們可以使用stat命令來檢視一個檔案的時間資訊 如下:

      

           #- atime

           #- mtime

           #- ctime

           #- amin

           #- mmin

           #- cmin

 

   所以這裡atime,mtime,ctime就是分別對應的“最近一次訪問時間”“最近一次內容修改時間”“最近一次屬性修改時間”,這裡的atime的單位指的是“天”,amin的單位是分鐘  

          #find  /tmp  –atime  +5           //表示查詢在五天內沒有訪問過的檔案

          #find  /tmp  -atime  -5            //表示查詢在五天內訪問過的檔案

          

          (6),根據檔案型別來查詢檔案

                -type

                      f     // 普通檔案

                      d     //目錄檔案

                      l     //連結檔案

                      b     //塊裝置檔案

                      c     //字元裝置檔案

                      p     //管道檔案

                      s     //socket檔案

 

        (7),根據大小來查詢檔案

         -size

          #find  /tmp  -size   2M           //查詢在/tmp 目錄下等於2M的檔案

          #find  /tmp  -size  +2M           //查詢在/tmp 目錄下大於2M的檔案

          #find  /tmp  -size  -2M           //查詢在/tmp 目錄下小於2M的檔案

         (8),根據檔案許可權查詢檔案

         -perm

 

          #find  /tmp  -perm  755           //查詢在/tmp目錄下許可權是755的檔案

          #find  /tmp  -perm  +222          //表示只要有一類使用者(屬主,屬組,其他)的匹配寫許可權就行

          #find  /tmp  -perm  -222          //表示必須所有類別使用者都滿足有寫許可權

 

        (9) -nouser  and  -nogroup

 

          #find  /  -nogroup –a –nouser       //在整個系統中查詢既沒有屬主又沒有屬組的檔案(這樣的檔案通常是很危險的,作為系統工程師的我們應該及時清除掉)

  [查詢完執行的action]

         # -print                                 //預設情況下的動作

         # -ls                                     //查詢到後用ls 顯示出來

         # -ok  [commend]                //查詢後執行命令的時候詢問使用者是否要執行

        # -exec [commend]              //查詢後執行命令的時候不詢問使用者,直接執行

 

 

 

這裡要注意{}的使用:替代查詢到的檔案

  

     #find  /tmp  -atime  +30  –exec rm –rf  {}  \;  #刪除查詢到的超過30天沒有訪問過檔案

 

     我們也可以使用xargs來對查詢到的檔案進一步操作