linux命令: 兩個查找工具 locate,find
linux 中有很多查找工具,今天主要講解locate,find兩個工具。
1.locate
(1)查詢系統上預建的文件索引數據庫
/var/lib/mlocate/mlocate.db
註意:如果這個文件刪除了,locate就無法使用了。需手動手動更新數據庫(updatedb),或重啟系統,locate才能恢復作用
依賴於事先構建的索引:
索引的構建是在系統較為空閑時自動進行( 周期性任務 /etc/cron.daily), 管理員手動更新數據庫(updatedb)
索引構建過程需要遍歷整個根文件系統,極消耗資源
(2)工作特點:
• 查找速度快
• 模糊查找
• 非實時查找
• 搜索的是文件的全路徑,不僅僅是文件名
• 只搜索用戶具備讀取和執行權限的目錄,沒有權限,即使數據庫有內容,也不顯示,為了安全
(3)locate 用法
-i 不區分大小寫的搜索
-n # 只列舉前#個匹配項目
-r 支持正則
2.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
-ok command \; 對查找到的文件當做下一命令的參數去執行(交互式)(不要忘記最後的 \; 是固定格式)
-exec command \; 對查找到的文件當做下一命令的參數去執行(非交互式)
{ }: 用於引用查找到的文件名稱自身
(5)參數替換 xargs(“萬能”的參數傳遞)
xargs 用於產生某個命令的參數,
用途:很多命令不支持管道| 來傳遞參數,xargs 命令能傳遞所有參數 例如:find /etc/ -name "*.sh" | xargs ls -l 有些命令不能接受過多參數 ,命令執行可能會失敗,xargs可解決 例如:touch , rm 不能一次執行超過一定的參數(大概30000) 可以 echo {1..30000} | xargs touchlinux命令: 兩個查找工具 locate,find