文件查找
locate,find
在文件系統(tǒng)上查找符合條件的文件统抬;
實現(xiàn)工具:locate勘究,find
locate:
依賴于實現(xiàn)構建好的索引庫悯衬;
系統(tǒng)自動實現(xiàn)【定時任務】;
手動更新數(shù)據(jù)庫(updatedb);
工作特性:
查找速度快形庭;
模糊查找;
非實時查找。
使用yum安裝locate : yum install mlocate
locate [OPTION]... PATTERN...
-b 僅僅匹配基名
-c count 統(tǒng)計出符合條件的個數(shù)
-r BRE基于基本正則表達式
注意:索引構建過程挪捕,即updatedb需要遍歷整個根文件系統(tǒng),機器消耗資源
find:
實時查找工具争便,通過便利指定其實路徑下的文件系統(tǒng)層級結構完成文件查找级零;
工作特性:
查找速度略慢;
精確查找;
實時查找奏纪。
用法:
find [OPTIONS] [查找起始路徑] [查找條件] [處理動作]
查找起始路徑:指定具體搜索目標起始路徑鉴嗤,默認為當前目錄;
查找條件:指定的查找標準序调,可以根據(jù)文件名醉锅、大小、類型发绢、從屬關系硬耍、權限等標準進行,默認為找出指定路徑下的所有文件边酒。
處理動作:對符合查找條件的文件做出的操作经柴,例如刪除等操作,默認為輸出至標準輸出墩朦”优洌可以使用ls等命令。
查找條件:
表達式:選項和測試組成
測試:【結果通常為布爾型(false唬格,true)】
根據(jù)文件名查找:
-name "pattern"
-iname "pattern" 不區(qū)分大小寫
支持glob風格的通配符 *,?,[],[^]
-regex pattern 基于正則表達式模式查找文件龙誊,匹配的是整個路徑,而不是文件名【沒弄明白春哨,一般不用】
根據(jù)文件的從屬關系查找
-user username
-group groupname
-uid uid 查找屬主指定的UID的所有文件
-gid GID 查找屬組指定的GID的所有文件
-nouser 查找沒有屬主的文件
-nogroup 查找沒有屬組的文件
沒有屬主和屬組的文件是很危險的荆隘,需要定期查找系統(tǒng)中沒有屬主和屬組的文件。
根據(jù)文件的類型查找:
-type TYPE:
f:普通文件
d:目錄文件
l:符號鏈接文件
b:塊設備文件
c:字符設備文件
p:管道文件
s:套接字文件
組合測試:
與:-a 默認是與組合邏輯赴背,兩個條件都滿足才輸出
或:-o 如果一個條件符合椰拒,則輸出 shi
非:-not或者-!
例如:find /tmp -not -user "juha" -ls 顯示tmp目錄下屬主不是juha的所有文件
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
注意,使用組合時凰荚,如需使用括號燃观,則需使用轉義符即\( 和\)
根據(jù)文件的大小查找:
-size [+|-] #unit
常用單位:k,M,G
#unit:(#-1,#] 大于這個值減一,但是小于等于這個值
-#unit:[0,#-1] 小于等于這個值減一
+#unit:(#,∞) 大于這個值
根據(jù)時間戳查找:
a access,c change,m modify
以天為單位:
-atime [+|-]#
#:[#,#-1]過去#天一天之內
-#:(#,0] 距離現(xiàn)在#天之內
+#(-∞,#-1] #天之前
-mtime
-ctime
以分鐘為單位
-amin
-mtime
-ctime
根據(jù)權限查找:
-perm [/|-] mode
mode: 精確權限匹配 例如777
/ mode:任何一類用用戶(u,g,0)的任何一位(rwx)符合條件即滿足 便瑟,9位權限或關系
例如 find /tmp /111 代表查找至少一個組有執(zhí)行權限的缆毁,find /tmp /001查找其他組中有執(zhí)行權限的文件
-mode:每一類用戶(u,g到涂,o)中的每一個位同時符合條件即可脊框,9位權限是與關系
例如,find /tmp -111 代表查找三類組都應該有執(zhí)行權限践啄,find /tmp -011查找其他組且屬組中中有執(zhí)行權限的文件
處理 動作(對最后一個輸出的結果生效浇雹,如果是或,注意使用括號):
-print:輸出至標準輸出屿讽,默認的動作昭灵;
-ls:類似于對查找到的文件執(zhí)行l(wèi)s -l命令,輸出文件的詳細信息;
-delete 刪除查找到的文件
-fls /path/to/file 把查找到的所有文件的長格式信息保存至指定文件中烂完。危險试疙,不建議做。
-ok COMMAND {} \; 對查找到的每個文件執(zhí)行COMMAND命令操作窜护,{}的作用是引用查找到的文件名 的效斑,但是改了多少個文件就要手動確認多少次。
例如:find ./ -nogroup -ok chown root:root {}\; 表示對查找到的沒有屬組的文件執(zhí)行改變屬主和屬組為root柱徙。
-exec COMMAND {}\;對查找到的每個文件執(zhí)行COMMAND命令操作缓屠,無需確認操作。
例如:find ./ -perm /002 -exec mv {} {}.danger \;表示把當前目錄下的其他組有寫權限的文件更名為原文件名后加.danger护侮。
注意:find傳遞查找 的 文件路徑至后面的命令時敌完,是先查找出所有符合條件的文件路徑,并一次性傳遞給后面的命令羊初;但是有些命令不能接受過長的參數(shù)滨溉,此時命令執(zhí)行會失敗,可通過另一種方式避免此問題:
find | xargs COMMAND