locate 根據事先構建的索引庫進行查詢檔案,索引庫會再每天系統空閒時自動構建。
特性:模糊匹配,查詢速度快,非實時查詢,有可能返回之前已經刪除的檔案或者新建的檔案無法被查詢到,因為索引還沒有被建立。
locate [options] pattern...
命令
作用-b
只匹配 basename
-c返回查詢到多少個符合條件的項
-r可以給予正規表示式查詢
構建索引的過程需要遍歷整個根路徑,非常消耗系統資源。實時查詢工具,通過遍歷指定的路徑下的檔案系統進行查詢,速度比
locate
略慢。
find path [options]
[-command | -exec command \;
| -ok command \;
]
options
是由選項和測試條件組成,測試條件如果為真,則返回匹配結果。
選項作用
-name
-iname
根據檔名查詢檔案,pattern
匹配基於glob
風格的表示式,
iname
忽略大小寫
-regex pattern
基於正規表示式查詢檔案,匹配的是整個路徑,而非 basename
-user username
-group groupname
-uid userid
-gid groupid
nouser
nogroup
根據檔案的屬主、屬組、屬主id、屬組id查詢。
nouser、nogroup用於查詢沒有屬主、屬組的檔案
如果將使用者刪了,則原來屬於該使用者的檔案的屬主就沒有了,就變成了nouser/nogroup的檔案,這時候檔案的屬主屬組屬性會顯示為原來屬主屬組的id,沒有屬主、屬組的檔案是很可怕的,因為如果後面有新增的使用者 id 恰好和已經刪除的使用者 id 相同,則這些檔案就預設以新增使用者為屬主了。所以可以通過find / -nouser
查詢沒有屬主的檔案,方便排查。
-type
根據檔案型別查詢
d: 目錄
f: 管道檔案
b: 塊檔案
c:字元檔案
l: 符號鏈結檔案
p:管道檔案
s: 套接字檔案
-a-o
-not
與或非,用來做組合測試條件,預設情況下是-a
,也可以通過括號來提公升條件表示式的優先順序。
-size [+|-]#unit
#
表示數字,unit
表示單位k
、m
、g
find . -size 30m
表示精確查詢大小在區間(30-1, 30]
內符合條件的檔案
find . -size +30m
表示查獲找大於30m
到正無窮大的檔案
find . -size -30m
表示查詢大小在區間[0,30-1]內符合條件的檔案
-atime [+|-]#
-mtime [+|-]#
-ctime [+|-]#
根據時間戳查詢,以天為單位
-amin [+|-]#
-cmin [+|-]#
-mmin [+|-]#
根據時間戳查詢,以分鐘為單位
-perm [/|-] mode
+
已棄用,find新版使用-perm /mode
來代替-perm +mode
-perm 666
精確匹配666
許可權的檔案,需要注意精確匹配包括特殊許可權位(suid/sgid/sticky)
-perm /222
任何一類使用者(ugo
)中的任何乙個許可權位符合條件的檔案,搜尋許可權為-rwxr-xr-x
的檔案,亦即-perm +755
時,但屬性為-rw-------
也會被列出來,因有-rw
的屬性存在!
-perm -222
: 許可權大於等於對應八進位制許可權位的檔案。詳細點說就是9個
許可權位上為1
的許可權位一定要完全符合,為0
的部分隨意。查詢的檔案許可權『必須要全部囊括mode的許可權』,舉例來說,搜尋-rwxr--r--
,即許可權為0744
的檔案,使用-perm -0744
,當檔案的許可權為-rwsr-xr-x
,即4755
時,也會被列出來,因為-rwsr-xr-x
的屬性已經囊括了-rwxr--r--
的屬性了
組合測試條件示例
ll
#total 0
#-rw-rw-r--. 1 1006 1007 0 jun 14 03:57 user1.test
#-rw-rwxr--+ 1 user2 group1 0 jun 14 04:03 user2.sgid.test
#-rw-rw-r--. 1 user2 user2 0 jun 14 03:57 user2.test
# 查詢user開頭並且有屬主的檔案
find
. -name "user*" -a -not -nouser
#./user2.test
#./user2.sgid.test
# 查詢包含 sgid , 或者沒有屬主的檔案
find
. -name "*sgid*" -o -nouser
#./user1.test
#./user2.sgid.test
直接-
後面跟命令,預設-print
也可以使用-ls
類似ls -l
輸出查詢的長資訊
使用-delete
刪除查詢到的檔案
使用-fls file_path
將查詢到的結果儲存在到指定檔案中
使用-ok
後面跟命令
格式-ok command {} \;
對查詢到的每個檔案執行由command
表示的命令
# 查詢當前目錄下沒有屬主的檔案,將其屬主陣列都改為root
find
. -nouser -ok chown root:root \;
使用-exec
後面跟命令
格式-exec command {} \;
對查詢到的每個檔案執行由command
表示的命令
-ok
和-exec
之間的區別:-ok
所有的命令需要進行一一提示確認,而exec
直接執行,沒有確認的環節。
find
傳遞查詢到的檔案路徑到後面的命令時,是先查找到所有符合條件的檔案路徑,並一次性傳遞給後面的命令,但是有些命令不能接收過長的引數,此時命令執行失敗,通過使用find | xargs command
可以規避此問題。 linux學習之檔案查詢
linux學習之檔案查詢 1.可執行性檔案的查詢 which 原理 按照path環境變數的內容去查詢 格式 which a command 注 bash內建的命令找不到,比如cd命令 2.查詢檔案 2.1 快速查詢檔案 相對於下面find命令 whereis locate 原理 查詢linux作業系...
linux基礎之檔案查詢
特點 非實時,模糊匹配,查詢時根據全系統檔案資料庫進行的,此資料庫會定時更新 取決於系統配置 也可以使用 updatedb 手動生成檔案資料庫,但是這會相當慢。用法 locate filename特點 實時查詢,精確,原理就是遍歷指定目錄中的所有檔案完成查詢,所以速度慢。支援眾多的查詢選項用法 fi...
Linux之檔案查詢命令
linux之檔案查詢本地檔案查詢 實際操作即檢索其資料庫檔案 var lib mlocate mlocate.db 資料庫檔案 updatedb 更新資料庫 locate options files i 忽略大小寫 n 只列舉前 個匹配專案 r 支援基本正規表示式 locate可實現根據使用者許可權...