檔案查詢工具 locate和find

2021-07-29 18:44:35 字數 4370 閱讀 1709

locate命令主要依賴於事先構建好的索引庫。索引庫中收集了系統中所有檔案的路徑資訊。索引庫一般通過系統的週期性任務實現自動更新,也可使用updatedb命令進行手動更新。更新索引庫是乙個很消耗系統資源的操作,一般在系統空閒時進行。

locate在進行檔案查詢時,根據給出的指定字串,在索引庫中進行查詢,並列印出絕對路徑中包含該字串的檔案,提高了查詢速度的同時,避免了遍歷檔案系統帶來的系統資源的消耗。但帶來的是檔案查詢的非實時性。如果某個檔案建立後沒有進行索引庫的更新,那麼索引庫中沒有該檔案的資訊,使用locate命令也將查詢不到該檔案。

基於locate這樣的工作原理,使得它具有查詢速度快、模糊查詢和非實時查詢的特點。

雖然locate命令是模糊查詢的,但我們可以通過靈活使用-b選項和正規表示式的位置錨定,以實現精準查詢。

pattren:

locate的匹配模式預設使用glob風格,當使用-r選項時,可使用基本正規表示式模式進行匹配。

使用locate查詢絕對路徑中包含「mailx」的檔案:

[root@localhost ~]# locate 'mailx'

/usr/bin/mailx

/usr/share/doc/mailx-12.5

/usr/share/doc/mailx-12.5/authors

/usr/share/doc/mailx-12.5/copying

/usr/share/doc/mailx-12.5/readme

/usr/share/man/man1/mailx.1.gz

使用locate查詢基名中包含「mailx」的檔案:

[root@localhost ~]# locate -b 'mail'

/usr/bin/mailx

/usr/share/doc/mailx-12.5

/usr/share/man/man1/mailx.1.gz

locate使用glob匹配模式查詢檔案:

[root@localhost ~]# locate -b 'mail?'

/usr/bin/mailq

/usr/bin/mailx

locate啟用基本正規表示式,查詢基名為「mail」和「mailx」的檔案:

[root@localhost ~]# locate -br '^mailx\?$'

/usr/bin/mail

/usr/bin/mailx

/var/mail

/var/spool/mail

find命令是乙個檔案實時查詢工具。它通過遍歷指定路徑下的檔案系統層級結構完成檔案查詢。此外,它還能對查詢到的檔案進行一些處理動作。

find命令查詢具有查詢準確實時性查詢的特點,但消耗的系統資源較多,查詢速度略慢

find使用格式及常用選項:

-name 「pattern」:根據檔名精準查詢,區分大小寫;

-iname 「pattern」:根據檔名精準查詢,不區分大小寫;

pattern支援glob風格匹配模式。

-regex pattern:基於正規表示式模式查詢檔案,匹配的是整個路徑,而非檔案或目錄的基名。

匹配/etc目錄下基名為"passwd"的檔案或目錄(區分大小寫):

[root@localhost ~]# find /etc -name passwd

/etc/passwd

/etc/pam.d/passwd

匹配/etc目錄下基名為"passwd"的檔案或目錄(區分大小寫):

[root@localhost ~]# find /etc -iname passwd

/etc/passwd

/etc/pam.d/passwd

/etc/passwd

-user username:查詢屬主為指定使用者的所有檔案;

[root@localhost ~]# find /home -user kamin
-group grpname:查詢屬組為指定組的所有檔案;

[root@localhost ~]# find /home -gruop kamin
-uid uid:查詢屬於指定uid的檔案;

[root@localhost ~]# find /home -uid 1000
-gid gid:查詢屬於指定gid的檔案;

[root@localhost ~]# find /home -gid 1000
-nouser:查詢沒有屬主的檔案;

[root@localhost ~]# find /home -nouser
-nogroup:查詢沒有屬組的檔案;

[root@localhost ~]# find /home -nogruop
-type type:

[root@localhost ~]# find /home -type d

/home

/home/kamin

與:-a,預設的組合邏輯

或:-o

非:-not,!

對於乙個大小為1500byte大小的檔案,其檔案大小大於1k、小於2k。在linux中以k為單位進行檢視時,顯示它的大小為2k。linux系統在無法準確顯示檔案大小時,趨向於使用費乙個大一點的值來表示。

當find命令根據檔案大小進行查詢時,便是以這個偏大一點的值來為標準進行查詢的。舉例說,當我們查詢乙個2k的檔案時,系統將查詢範圍內找出大於1k,小於等於2k的檔案。

-size [+|-]#unit(unit可為k, m, g):

查詢/etc目錄下大小約為(1,2]k的檔案:

[

root@localhost~]

#find

/etc

-size2k-

ls|head

1350327904-

rw-r-

-r--

1root

root

1982

6月10

2014

/etc/vimrc

1343202874-

rw-r-

-r--

1root

root

15186月7

2013

/etc/aliases

1343202894-

rw-r-

-r--

1root

root

16026月7

2013

/etc/csh

.cshrc

以「天」為單位進行查詢;

-mtime

-ctime

與根據檔案大小查詢類似,-atime 2表示查詢48小時至72小時範圍內訪問過的檔案;-atime -2表示查詢48小時內訪問過的檔案;-atime +2表示查詢最近訪問時間超過72小時的檔案。

以「分鐘」為單位:

-amin

-mmin

-cmin

以「分鐘」為單位與以「天」為單位類似。

-perm [/|-]mode

mode:精確許可權匹配;

/mode:任何一類使用者(u, g, o)的任何一位許可權(r, w, x)符合條件即滿足;9位許可權之間存在」或」關係。

-mode:每一類使用者(u, g, o)的許可權中的每一位(r, w, x)同時符合條件即滿足;9位許可權之間存在「與」關係。

-print:輸出至標準輸出,這是預設的動作;

-ls:類似於對查詢到的檔案執行 「ls -l」 命令,輸出檔案的詳細資訊;

-delete:刪除查詢到的檔案;

-fls /patn/to/somefile:把查詢到的所有檔案的長格式資訊儲存至指定檔案中;

-ok command {} \:對查詢到的每個檔案執行由command表示的命令;每次操作都由使用者進行確認;

-exec command {} \:對查詢到的每個檔案執行由command表示的命令,不必與使用者互動確認;

find在執行處理動作時,是將查詢到的檔案路徑一次性送到處理動作命令的,而有些命令不支援過長的引數,會造成錯誤。使用find | xarg command可避免這種錯誤。

用locate查詢檔案

4.6 搜尋檔案 fedora借助mlocate軟體包維護了乙個檔案系統所有檔案 etc updatedb.conf檔案指定例外情況 相關的資料庫。locate命令可以搜尋該資料庫,由於搜尋的是資料庫而非實際的檔案系統,故能立即返回結果。locate出現之前,大部分linux使用者使用find 命令...

linux檔案查詢命令 locate

locate 讓使用者可以很快速的搜尋檔案系統內是否有指定的檔案。其方法是先建立乙個包括系統內所有檔名稱及路徑的資料庫,之後當尋找時就只需查詢這個資料庫,而不必實際深入檔案系統之中了。在一般的 distribution 之中,資料庫的建立都被放在 crontab 中自動執行。1 命令格式 locat...

linux中檔案查詢命令locate和find

locate 非實時查詢 資料庫查詢 依賴於事先構建的索引 索引的勾踐是在系統較為空閒時 自動進行 週期性任務 手動更新資料庫 updatedb 索引構建過程需要遍歷整個根檔案系統,極消耗資源。工作特點 查詢快模糊查詢 非實時find 實時查詢工具,通過便利制定路徑下的檔案系統完成檔案查詢 工作特點...