linux上的文件查找工具:locate和find

一、非實時超找工具 locate

    1、locate是查詢系統上預建的文件索引數據庫/var/lib/mlocate/mlocate.db文件索引實在系統比較空閑的時候自動進行的,是系統的周期性任務,因為是周期性任務,所以有些短期的數據無法更新到數據庫,如果需要馬上應用,乣管理員手動更新數據庫,用命令updatedb來執行。同時索引的構建過程是遍歷整個根文件系統,所以非常消耗系統資源,最好是在系統空閑時間進行更新。

    2、locate超找的特點:

    (1)查找速度快。因為是查找預先建立起來的索引數據庫,不需要查找整個文件系統,所以速度快速

    (2)模糊超找

    (3)非實時超找

    (4)搜索的文件是全路徑,不僅僅是文件名

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

    3、locate命令的用法

    locate [OPTION] KEYWORD

    常用選項

    -i    執行區分大小寫的搜索

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

    -r    支持正則表達式

二、實時超找工具find

   1、find是實時超找工具,查找時通過遍歷指定路徑完成文件的超找

   2、工作特點

    (1)查找速度略慢

    (2)能夠時間精確查找

    (3)實時查找

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

   3、語法

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

  [查找路徑]:

    可以使用-path選項,來使用通配符匹配路徑

    指定具體目標路徑,默認為當前工作目錄,  .指定當前工作目錄, ..指定父目錄

  [查找條件]:

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

  [處理動作]:

    對符合條件的文件做操作,默認輸出值屏幕

   4、查找條件

(1)根據文件名、inode查找和正則表達式查找

    -name “文件名稱”,支持使用glob(通配符)* ? [] [^]等。-name總是用給定的文件名進行匹配,

-path則將文件路徑作為一個整體進行匹配,例如

32.png

    -name "文件名稱",不區分字母大小寫

    -inum n      按inode號碼超找

    -samefile name   相同inode號碼超找

    -links n       鏈接數為n的文件

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

(2)根據屬主、屬組查找

-user USERNAME

    查找屬主為指定用戶(UID)的文件

-group GRPNAME 

    查找屬組為指定組(GID)的文件

-uid UserID

    查找屬主為指定的UID號的文件

-gid GroupID

    查找屬組為指定的GID號的文件

-nouser

    查找沒有屬主的文件

-nogroup    

    查找沒有屬組的文件

(3)根據文件類型查找

-type TYPE

    f:普通文件

    d:目錄文件

    l:符號鏈接文件

    s:套接字文件

    b:塊設備文件

    c:字符設備文件

    p:管道文件

(4)根據文件大小來查找

-size [文件大小]

常用單位:k,m,G

其中文件大小分為三種情況,可以將[0,+∞)的數軸分為三段,假設a正整數數字,可以將數軸分為三段,[0,a-1]、(a-1,a]、(a,+∞),在搜索時第一段可以用 -a 表示,第二段用 a 表示,第三段用 +a 表示

(5)根據時間戳來查找

    以天為單位

  -atime [時間段] 

  -mtime [時間段]

  -ctime [時間段] 

 其中時間段的劃分與根據文件大小的劃分相同

以分鐘為單位

  -amin   -mmin   -cmin 


(6)根據權限查找

   -perm [/|-]MODE

   MODE:精確權限匹配

   /MODE:任何一類(u、g、o)對象的權限中只能以為匹配即可,是或的關系

   -MODE:每一類對象都必須同時又有指定權限,與關系0表示不關注

(7)處理動作

-print

    默認的處理動作,顯示至屏幕

-ls

    類似于對查找到的文件執行"ls -l"命令

-delete

    刪除查找到的文件

-fls file

    查找到的所有文件的長格式信息保存至指定文件中

-ok COMMAND {}\

    對查找到的每個文件執行由COMMAND指定的命令;對于每個文件執行命令之前,都會交互式的要求用戶確認

(8)基于目錄深度的查找 -maxdepth和-mindepth

    find命令在使用時會遍歷所有的子目錄,我們可以使用-maxdepth和-mindepth選項來限制find命令遍歷目錄的深度。

    大多數情況下,我們只需要在當前目錄下進行查找,無需繼續往下查找。對于這用情況,我們使用深度選項來限制find命令向下查找的深度。如果只允許find在當前目錄中查找,深度可以設置為1;當需要向下兩級是,深度設置為2;其他情況以此類推。

    可以用-maxdepth指定最大深度,使用-mindepth指定最小深度

PS:-maxdepth和-mindepth應該作為find的第三個參數出項。如果作為第四個參數或者之后的參數,就可能影響find的效率,因為它不得不進行一些不必要的檢查。例如,如果-maxdepth作為第四個參數,-type作為第三個參數,find首先會找出符合-type的所有文件,然后在所有匹配的文件中再找出符合指定深度的那些。但是如果倒過來,目錄深度作為第三個參數,-type作為第四個參數,那么find就能夠在找到的所有符合指定深度的文件后,再檢查這些文件類型,這才是最有效的搜索之道



  

原創文章,作者:black_fish,如若轉載,請注明出處:http://www.www58058.com/34585

(0)
black_fishblack_fish
上一篇 2016-08-16 13:59
下一篇 2016-08-16 13:59

相關推薦

  • 馬哥linux 0726作業

    1,課堂練習 顯示當前日期,格式:2016-08-08 顯示前天是星期幾 設置當前日期為2008-08-08 08:00 使用字符端登陸時,顯示當前登錄終端號,主機名和當前時間 1,首先我們知道當前登錄信息的配置文件在/etc/issue中 2,然后我們查詢幫助看看issue的具體描述查到了相關的mingetty的命令當中關于當中的一些選項就是我們需要的三個…

    Linux干貨 2016-08-04
  • vim編輯器

    vim編輯器:          文本:ASCII, Unicode(全球統一編碼格式)          文本編輯種類:       &n…

    Linux干貨 2016-08-10
  • 軟件包管理

    軟件包的分類,主要有以下兩大類    源碼包    二進制包(rpm包,系統默認包) rpm包由Redhat公司提出,被眾多linux發行版所采用。 優點:建立統一的數據庫文件,詳細記錄軟件包的安裝、卸載等變化信息,能夠自動的分析軟件包依賴關系。 查詢已安裝的rpm軟件信息: 格式:     rpm…

    Linux干貨 2016-08-25
  • mariadb數據庫的主從復制

    mariadb的主從復制

    2018-02-27
  • 到處都是Unix的胎記

    一說起Unix編程,不必多說,最著名的系統調用就是fork,pipe,exec,kill或是socket了(fork(2),execve(2), pipe(2), socketpair(2), select(2), kill(2), sigaction(2))這些系統調用都像是Unix編程的胎記或簽名一樣,表…

    Linux干貨 2015-04-03
欧美性久久久久