linux下find(文件查找)命令的用法總結


前言:我們為什么要學會使用 find命令?
每一種操作系統都有成千上萬的文件組成,對於 linux這樣“一切皆文件”的操作系統來說更不例外,大家應該都能很輕松使用 windows下的文件查找功能,但是對 linux這一功能可能並不是很熟悉,其實想玩 linux的你更要牢牢掌握這個命令,因為 linux不像 windows那樣有固定的文件名后綴,並且因為 linux陣營下百家爭鳴的特性,一個相同的文件在不同的發行版,可能會有不同,所以如果你能牢牢掌握 find命令的使用,你在摸索 linux的道路上將會順利很多,同時你會發現 linux下文件查找功能其實很簡單,而且要比 windows下查找功能強大很多很多!好,下面進入正題

Linux下查找文件的命令有兩個;locate  find

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

  #locate 

       -i        //查找文件的時候不區分大小寫 比如:locate  –i   passwd
       -n       //只顯示查找結果的前N     比如:locate  -n  5   passwd

下面重點說下findfind在不指定查找目錄的情況下是對整個系統進行遍歷查找
使用格式    find  [指定查找目錄]  [查找規則]  [查找完后執行的action]

[指定查找目錄]例如:

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

 [查找規則

 1)根據文件名查找

        #  -name       //根據文件名查找(精確查找)

           #  -iname       //根據文件名查找,但是不區分大小寫  

這里另外介紹下文件名通配的知識 

*表示  通配任意的字符

     

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

   

 [ ] 表示 通配括號里面的任意一個字符


2)根據文件所屬用戶和組來查找文件

           #  -user         //根據屬主來查找文件

           #  -group        //根據屬組來查找文件

3)根據uid  gid來查找用戶

           #find  /tmp  -uid  500  //查找uid500 的文件

           #find  /tmp  -gid  1000 // 查找gid1000的文件

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     //目錄文件,它會把[目標目錄]也會顯示出來,如果使用find /tmp -type d|xargs rm -r 就會連/tmp目錄一起刪掉!

                      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來對查找到的文件進一步操作

 

    
 

之所以用到這xargs這個個命令,關鍵是由於很多命令不支持|管道來傳遞參數,而日常工作中有有這個必要,所以就有了xargs命令,例如:

 find /sbin -perm +700 |ls -l       這個命令是錯誤的

 find /sbin -perm +700 |xargs ls -l   這樣才是正確的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM