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