文件查找
- 在文件系統上查找符合條件的文件;
實現工具:locate, find
詳細內容參見我的另外一篇博客
https://www.cnblogs.com/crazymagic/p/11071875.html
locate 使用(在整個根文件系統檢索,符合條件的文件)
locate:
- 依賴於事先構建好的索引庫;
- 系統自動實現(周期性任務)
- 手動更新數據庫(updatedb)
工作特性:
- 查找速度快;
- 模糊查找;
- 非實時查找;
locate [OPTION]... PATTERN...
- -b:只匹配路徑中的基名;
- -c:統計出共有多少個符合條件的文件;
- -r:BRE
注意:索引構建過程需要遍歷整個根文件系統,極消耗資源;
locate text.4tYe
find 詳解
find:
- 實時查找工具,通過遍歷指定起始路徑下文件系統層級結構完成文件查找
工作特性:
- 查找速度略慢
- 精確查找
- 實時查找
用法:
find [OPTIONS] [查找起始路徑] [查找條件] [處理動作]
查找起始路徑:指定具體搜索目標起始路徑;默認為當前目錄;
查找條件:指定的查找標准,可以根據文件名、大小、類型、從屬關系、權限等等標准進行;默認為找出指定路徑下的所有文件;
處理動作:對符合查找條件的文件做出的操作,例如刪除等操作;默認為輸出至標准輸出;
查找條件:
表達式:選項和測試
測試:結果通常為布爾型("true", "false")
根據文件名查找:
- -name "pattern"
- -iname "pattern"
- 支持glob風格的通配符;
- *, ?, [], [^]
- -regex pattern:基於正則表達式模式查找文件,匹配是整個路徑,而非其名;
根據文件從屬關系查找:
- -user USERNAME:查找屬主指定用戶的所有文件;
- -group GRPNAME:查找屬組指定組的所有文件;
- -uid UID:查找屬主指定的UID的所有文件;
- -gid GID:查找屬組指定的GID的所有文件;
- -nouser:查找沒有屬主的文件;
- -nogroup:查找沒有屬組的文件;
根據文件的類型查找:
-type TYPE:
- f: 普通文件
- d: 目錄文件
- l:符號鏈接文件
- b:塊設備 文件
- c:字符設備文件
- p:管道文件
- s:套接字文件
組合測試:
- 與:-a, 默認組合邏輯;
- 或:-o
- 非:-not, !
練習
1、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄;
find /var -user root -a -group mail -ls
2、查找/usr目錄下不屬於root, bin或hadoop的所有文件或目錄;用兩種方法;
find /usr -not -user root -a -not -user bin -a -not -user hadoop find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
3、查找/etc目錄下最近一周內其內容修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄;
find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls
4、查找當前系統上沒有屬或屬組,且最近一周內曾被訪問過的文件或目錄;
find / \( -nouser -o -nogroup \) -atime -7 -ls
5、查找/etc目錄下大於1M且類型為普通文件的所有文件;
find /etc -size +1M -type f -exec ls -lh {} \;
6、查找/etc目錄下所有用戶都沒有寫權限的文件;
find /etc -not -perm /222 -type f -ls
7、查找/etc目錄至少有一類用戶沒有執行權限的文件;
find /etc -not -perm -111 -type f -ls
8、查找/etc/init.d/目錄下,所有用戶都有執行權限,且其它用戶有寫權限的所有文件;
find /etc -perm -113 -type f -ls