一、非實時超找工具 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則將文件路徑作為一個整體進行匹配,例如
-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)處理動作
默認的處理動作,顯示至屏幕
-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