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 實時查詢工具,通過便利制定路徑下的檔案系統完成檔案查詢 工作特點...