1. 程式人生 > >linux 文件查找 (locate 與 find)

linux 文件查找 (locate 與 find)

proc let bcb ado evel .com cat uid 普通

文件查找

目錄

1.locate
2.find

一. locate

    locate命令基於數據庫db,所以不能實時更新
    他有如下的特點:
    1.查找速度快
    2.是模糊查找(可能搜到了文件,也有可能搜到了目錄)
    3.是非實時的查找
    4.由於權限的原因可能只查找到一部分的文件

    locate 參數:
                        -i  不區分大小寫
                        -n N 只列舉前N個項目
                        -r  支持正則表達式

    locate xiaoyu
                        搜索名稱或路徑中帶有"xiaoyu"的文件

例:
技術分享圖片

二. find

    實時查找工具,通過遍歷指定路徑完成文件查找
    有如下的工作特點:
    1.查找速度略慢
    2.精確查找
    3.實時查找
    4.可能只搜索到用戶具備讀取和執行權限的目錄

    find [查找路徑] [查找條件] [處理動作]

         查找路徑 :制定具體目標路徑,默認為當前目錄

         查找條件:
            1.按搜索層級
                    -maxdepth level 最大搜索目錄深度,指定目錄為第一級
                    -mindepth  level 最小搜索目錄深度

技術分享圖片

    2.根據文件所屬組或所屬人
         -user UserName   查找文件所屬人為指定用戶(也可以為UID)的文件
         -group groupName :查找文件所屬組為指定組(也可以為GID)的文件

技術分享圖片

         -uid UserId              :查找屬組為指定的UID的文件
         -gid GroupId             :查找屬組為指定的GID的文件

技術分享圖片

         -nouser                    :查找沒有屬主的文件
         -nogroup                   :查找沒有屬組的文件

技術分享圖片

 3.根據文件名和inode查找
         -name Name         :根據
         -iname Nmae        :不區分文件名稱大小寫

技術分享圖片
可以看到,目錄下有三個包含“xiaoyu“的文件,當執行不區分大小寫時,只顯示了一個文件,find為精確查找

         -inum   n                :按inode號查找
         -samefile name           :相同inode號的inode文件

技術分享圖片

         -links   n                 :鏈接數為n的文件

技術分享圖片

註:這裏xiaoyu和XIAOYU inode號相同,故鏈接數為2. 其他鏈接數為2的均是目錄,因為有 . 和 .. 這兩個鏈接

 -regex "PATTERN  :  以PATTERN匹配整個文件路徑字符串,不僅僅是文件名稱

技術分享圖片
註:-regextype posix-extended 表示支持擴展正則表達式

 4.根據文件類型查找
     -type TYPE :
             f : 普通文件
             d: 目錄文件
             I:  符號鏈接文件(軟鏈接)
             s: 套接字文件
             b: 塊設備文件
             c: 字符設備文件
             p: 管道文件

查找/var目錄下屬主為root,且屬組為mail的所有文件
技術分享圖片

5.組合條件
            與:-a
            或:-o
            非:-not

6.根據文件大小來查找
              -size [option]
                 num :(num-1,num]
                 -num :[0,num-1]
                 +num:(num,∞)

查找/etc目錄下大於1M且類型為普通文件的所有文件
技術分享圖片

7.根據時間戳:
            以天為單位:                  
            -atime 【num】(訪問時間)
                    num: 【num,num+1】
                    +num:【num+1,∞】
                    -num:【0,num)
            -mtime (修改時間)
            -ctime   (文件元數據修改時間)

查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
技術分享圖片

            以分鐘為單位:
            -amin 【num】(訪問時間)
                                    num:【num,num+1】
                                    +num:【num+1,∞】
                                    -num:【0,num)
            -mmin (修改時間)
            -cmin(文件元數據修改時間)

8.  根據文件權限來查找:
            -perm 【/ |  -】 MODE
                MODE: 精確權限匹配
                /MODE:任何一類對象中的權限中只要能一位匹配就行(或關系)            
                                                當權限為大於等於5時,滿足其中任意一項即可。
                -MODE:每一類對象都必須同時擁有指定權限(與關系),0表示不關註

                例:find -perm 755    匹配當前目錄下權限僅為755的文件
                             find -perm /444   三類對象只要其中一個具有r權限就行
                             find -perm -444   三類對象每個都要具有r權限才可以

查找/etc目錄下所有用戶都沒有寫權限的文件
技術分享圖片

處理動作:
            -print:   默認的處理動作
            -ls   :   類似ls命令
            -delete:   刪除查找到的文件
            -fls file :查找到的所有文件的長格式信息保存到指定文件中
            -ok COMMAND {} \ ; 對查找到的每個文件都執行COMMAND命令,執行之前都會詢問用戶是否執行  

技術分享圖片

    -exec COMMAND {} \ ; 對查找到的每個文件都執行COMMAND命令,執行之前不會詢問用戶是否執行
                           {} 用於引用查找到的文件名稱自身

參數替換 xargs
        當文件很多時,且需要後續的一些操作,搭配管道符就會出錯。xargs 可以和管道符搭配,
        實現read一些命令,例如:

技術分享圖片

linux 文件查找 (locate 與 find)