linux 中有很多查找工具,今天主要講解locate,find兩個工具。
一、locate
1、性能介紹
查詢系統(tǒng)上預(yù)建的文件索引數(shù)據(jù)庫
/var/lib/mlocate/mlocate.db
注意:如果這個文件刪除了,locate就無法使用了。需手動手動更新數(shù)據(jù)庫(updatedb),或重啟系統(tǒng),locate才能恢復(fù)作用
依賴于事先構(gòu)建的索引:
索引的構(gòu)建是在系統(tǒng)較為空閑時自動進(jìn)行(周期性任務(wù)/etc/cron.daily), 管理員手動更新數(shù)據(jù)庫(updatedb)
索引構(gòu)建過程需要遍歷整個根文件系統(tǒng),極消耗資源
2、工作特點(diǎn)
? 查找速度快
? 模糊查找
? 非實(shí)時查找
? 搜索的是文件的全路徑,不僅僅是文件名
? 只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄,沒有權(quán)限,即使數(shù)據(jù)庫有內(nèi)容,也不顯示,為了安全
(3)locate 用法
-i 不區(qū)分大小寫的搜索
-n # 只列舉前#個匹配項(xiàng)目
-r 支持正則
二、find
實(shí)時查找工具,通過遍歷指定路徑完成文件查找(find不同于其他命令的習(xí)慣,選項(xiàng)只加一個-)
相較于locate,find功能非常強(qiáng)大,除了基于文件名字查找外,還能基于權(quán)限,文件類型,大小等好多方式進(jìn)行查找,所以被我們普遍應(yīng)用。
1、工作特點(diǎn)
?查找速度略慢
?精確查找(可以通過正則,通配符,實(shí)現(xiàn)模糊查詢)
?實(shí)時查找
?只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄
2、find 用法格式
find [OPTION]... [查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目標(biāo)路徑;默認(rèn)為當(dāng)前目錄
查找條件:指定的查找標(biāo)準(zhǔn),可以文件名、大小、類型、權(quán)限等標(biāo)準(zhǔn)進(jìn)行;默認(rèn)為找出指定路徑下的所有文件
處理動作:對符合條件的文件做操作,默認(rèn)輸出至屏幕,還有更多其他的處理動作。
3、查找條件
① 根據(jù)搜索層級
-maxdepth level 最大搜索目錄深度, -1指定目錄為第1級,當(dāng)前目錄
-mindepth level 最小搜索目錄深度
②根據(jù)文件名和inode查找:
-name :基于名稱的精確查找 ,支持使用文字通配符 *, ?, [], [^]等
-iname :基于名稱忽略大小寫的精確查找查找
-inum :基于inode查找
-samefile name:基于相同inode號的查找(查找硬鏈接)
-links n 硬鏈接數(shù)為n的文件
-regex "PATTERN":支持正則 ,默認(rèn)為(emacs標(biāo)準(zhǔn)的正則),查詢正則表達(dá)的范圍
例:".*/[a-z].*"搜索所有以小寫字母開頭的文件
-regextype egrep -regex支持egrep同標(biāo)準(zhǔn)的正則
③根據(jù)屬主、屬組查找:
-user USERNAME:查找屬主為指定用戶(UID)的文件
-group GRPNAME: 查找屬組為指定組(GID)的文件
-uid UserID:查找屬主為指定的UID號的文件
-gid GroupID:查找屬組為指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
④ 根據(jù)文件類型查找:
find -type
f: 普通文件
d: 目錄文件
l: 符號鏈接文件 (軟連接)
s :套接字文件 (/dev/log)
b: 塊設(shè)備文件 (/dev/sda)
c: 字符設(shè)備文件 (/dev/tty)
p: 管道文件
⑤ 根據(jù)文件大小來查找:
find-size[+|-]#UNIT根據(jù)文件大小來查找 常用單位:k, M, G,c(byte)
#UNIT:(#-1, #] 如:6k表示(5k,6k]
-#UNIT:[0,#-1]如:-6k表示[0,5k]
+#UNIT:(#,∞)如:+6k表示(6k,∞)
⑥根據(jù)時間戳:
以“天”為單位:
-atime [+|-]#,(訪問時間)
#:[#,#+1)如:3 表示[3,4)
+#:[#+1,∞]如:+3表示[4,∞)
-#:[0,#)如:-3表示[0,3)
-mtime(修改時間)用法同上
-ctime(元數(shù)據(jù)改變時間)用法同上
以“分鐘”為單位: (用法同上)
-amin -mmin -cmin
⑦ -perm根據(jù)權(quán)限查找:
mode:精確權(quán)限匹配
+mode[/mode]任何一類(u,g,o)對象的權(quán)限中只要能一位匹配即可,或關(guān)系,+從centos7開始淘汰
-mode 每一類對象都必須同時擁有指定權(quán)限,與關(guān)系
0表示不關(guān)注
⑧ 組合條件查找:
與:-a 可省略 例:find -nouser [-a] -nogroup
或:-o
非:-not, !
德·摩根定律:
(非 A)或 (非 B) = 非(A且 B) !A -o !B = !(A -a B)
(非 A)且 (非 B) = 非(A或 B) !A -a !B = !(A -o B)
4、處理動作
-print默認(rèn)
-delete直接刪除所查找到的文件,不詢問。
-ls長列出所查找到的文件,和ls -li 相似
-fls file將查找到的文件長列出導(dǎo)入到指定文件。
>file 將查詢結(jié)果導(dǎo)入file >> file 將查詢結(jié)果追加入file
-okcommand; 對查找到的文件當(dāng)做下一命令的參數(shù)去執(zhí)行(交互式)(不要忘記最后的 ; 是固定格式)
-execcommand;對查找到的文件當(dāng)做下一命令的參數(shù)去執(zhí)行(非交互式)
{ }: 用于引用查找到的文件名稱自身
5、參數(shù)替換 xargs(“萬能”的參數(shù)傳遞)
xargs 用于產(chǎn)生某個命令的參數(shù),
用途:很多命令不支持管道| 來傳遞參數(shù),xargs 命令能傳遞所有參數(shù)
例如:find /etc/ -name "*.sh" | xargs ls -l
有些命令不能接受過多參數(shù) ,命令執(zhí)行可能會失敗,xargs可解決
例如:touch , rm 不能一次執(zhí)行超過一定的參數(shù)(大概30000)
可以 echo {1..30000} | xargs touch
鏈接:https://www.cnblogs.com/along21/p/7337302.html
-
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209476 -
Find
+關(guān)注
關(guān)注
0文章
54瀏覽量
11650
原文標(biāo)題:Linux 文件查找神器對決:Locate 與 Find,誰是你的最佳選擇?
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論