linux 兩個查找工具 locate,find


linux 中有很多查找工具,今天主要講解locate,find兩個工具。

一、locate

1、性能介紹

查詢系統上預建的文件索引數據庫

       /var/lib/mlocate/mlocate.db  

       注意:如果這個文件刪除了,locate就無法使用了。需手動手動更新數據庫(updatedb),或重啟系統,locate才能恢復作用

依賴於事先構建的索引:

       索引的構建是在系統較為空閑時自動進行( 周期性任務 /etc/cron.daily), 管理員手動更新數據庫(updatedb)

       索引構建過程需要遍歷整個根文件系統,極消耗資源

 

 

2、工作特點

•  查找速度快

•  模糊查找

•  非實時查找

•  搜索的是文件的全路徑,不僅僅是文件名

•  只搜索用戶具備讀取和執行權限的目錄,沒有權限,即使數據庫有內容,也不顯示,為了安全

3locate   用法

                  -i     不區分大小寫的搜索

                 -n #  只列舉前#個匹配項目

                 -r  支持正則 

 

 

二、find

實時查找工具,通過遍歷指定路徑完成文件查找(find不同於其他命令的習慣,選項只加一個-)

相較於locate,find功能非常強大,除了基於文件名字查找外,還能基於權限,文件類型,大小等好多方式進行查找,所以被我們普遍應用。 

 

1、工作特點

查找速度略慢

精確查找(可以通過正則,通配符,實現模糊查詢)

實時查找

只搜索用戶具備讀取和執行權限的目錄

 

2、find 用法格式

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

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

         查找條件:指定的查找標准,可以文件名、大小、類型、權限等標准進行;默認為找出指定路徑下的所有文件

         處理動作:對符合條件的文件做操作,默認輸出至屏幕,還有更多其他的處理動作。

 

3、查找條件

① 根據搜索層級

-maxdepth level  搜索目錄深度,  -1 指定目錄為第1級,當前目錄

-mindepth level   搜索目錄深度

 

 

② 根據文件名和inode 查找:

-name   :基於名稱的精確查找 ,支持使用文字通配符 *, ?, [], [^]等

-iname  :基於名稱忽略大小寫的精確查找查找

-inum    :基於inode查找

-samefile name :基於相同inode的查找(查找硬鏈接)

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

-regex "PATTERN" 支持正則 ,默認為(emacs標准的正則),查詢正則表達的范圍

  例:".*\/[a-z].*" 搜索所有以小寫字母開頭的文件

-regextype egrep -regex 支持egrep同標准的正則

 

 根據屬主、屬組查找:

-user USERNAME :查找屬主為指定用戶(UID) 的文件

-group GRPNAME:  查找屬組為指定組(GID) 的文件

-uid UserID :查找屬主為指定的UID 號的文件

-gid GroupID :查找屬組為指定的GID 號的文件

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

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

 

④ 根據文件類型查找:

find -type

                   f:  普通文件

                   d:  目錄文件

                    l:  符號鏈接文件 (軟連接)

                   s :套接字文件 (/dev/log)

                   b:  塊設備文件 (/dev/sda)

                   c:  字符設備文件 (/dev/tty)

                   p:  管道文件

  

 

⑤  根據文件大小來查找:

  find -size [+|-]#UNIT 根據文件大小來查找     常用單位:k, M, G,c(byte

                         #UNIT: (#-1, #]         如:6k 表示(5k,6k]

                         -#UNIT[0,#-1]  如:-6k 表示[0,5k]

                        +#UNIT(#,∞)  如:+6k 表示(6k,∞)

⑥ 根據時間戳:

     天”為單位:

     -atime [+|-]#, (訪問時間)

                #: [#,#+1) 如:3  表示[3,4)

               +#: [#+1,∞] 如:+3表示[4,∞)

               -#: [0,#) 如:-3 表示[0,3)

     -mtime (修改時間)用法同上

     -ctime(元數據改變時間)用法同上

 分鍾”為單位: (用法同上)

     -amin     -mmin      -cmin

 

 

⑦ -perm  根據權限查找:

                mode:精確權限匹配

                +mode[/mode] 任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系+ 從centos7開始淘汰

                -mode   每一類對象都必須同時擁有指定權限,與關系

      0 表示不關注

 

⑧ 組合條件查找:

與:-a  可省略    例:find -nouser [-a] -nogroup

或:-o

非:-not, !

德· 摩根定律:

(非 A) 或 (非 B) =  非(A 且 B)           !A -o !B = !(A -a B)

(非 A) 且 (非 B) =  非(A 或 B)           !A -a !B = !(A -o B)

 

4、處理動作

    -print 默認

    -delete 直接刪除所查找到的文件,不詢問。

    -ls 長列出所查找到的文件,和ls -li 相似

    -fls file 將查找到的文件長列出導入到指定文件。

        > file 將查詢結果導入file       >> file 將查詢結果追加入file

    -ok command \;   對查找到的文件當做下一命令的參數去執行(交互式)(不要忘記最后的 \; 是固定格式)

    -exec command \; 對查找到的文件當做下一命令的參數去執行(非交互式

    { }:  用於引用查找到的文件名稱自身

 

5、參數替換 xargs(“萬能”的參數傳遞)

xargs  用於產生某個命令的參數,

用途:很多命令不支持管道| 來傳遞參數,xargs 命令能傳遞所有參數
                 例如:find /etc/ -name "*.sh" | xargs ls -l
          有些命令不能接受過多參數 ,命令執行可能會失敗,xargs可解決
                 例如:touch , rm 不能一次執行超過一定的參數(大概30000)
                           可以 echo {1..30000} | xargs touch
 
                                                                          希望對大家有幫助,有什么錯誤請告訴我~


免責聲明!

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



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