@(linux)[find]
1. 文件查找
在文件系統(tǒng)上查找符合條件的文件
1.1 簡述locate
非實(shí)時(shí)查找(數(shù)據(jù)庫查找)
- 依賴于事先構(gòu)建的索引,索引的構(gòu)建是在系統(tǒng)較為空閑時(shí)自動進(jìn)行(周期性任務(wù))
- 手動更新數(shù)據(jù)庫(
updatedb
)卵渴,索引構(gòu)建過程需要遍歷整個(gè)根文件系統(tǒng)吴攒,極消耗資源
格式:
locate KEYWORD
工作特點(diǎn):
- 查找速度快
- 模糊查找
- 非實(shí)時(shí)查找
1.2 簡述find
實(shí)時(shí)查找
- 實(shí)時(shí)查找工具稀火,通過遍歷指定路徑下的文件系統(tǒng)完成文件查找
工作特點(diǎn):
- 查找速度略慢
- 精確查找
- 實(shí)時(shí)查找
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)輸出至屏幕
2.1 根據(jù)文件名查找
-
-name "文件名稱"
支持使用glob(*,
?,
[],
[^]`) -
-iname "文件名稱"
不區(qū)分字母大小寫 -
-regex "PATTERN"
以PATTERN匹配整個(gè)文件路徑字符串纷跛,而不僅僅是文件名稱喻括;
2.2 根據(jù)屬主、屬組查找
-
-user USERNAME
查找屬主為指定用戶的文件 -
group GRPNAME
查找屬組為指定組的文件 -
-uid UserID
查找屬主為指定的UID號的文件 -
-gid GroupID
查找屬組為指定的GID號的文件 -
-nouser
查找沒有屬主的文件 -
-nogroup
查找沒有屬組的文件
2.3 根據(jù)文件類型查找
-type TYPE
-
f
: 普通文件 -
d
: 目錄文件 -
l
: 符號鏈接文件 -
s
:套接字文件 -
b
: 塊設(shè)備文件 -
c
: 字符設(shè)備文件 -
p
: 管道文件
2.4 組合條件
- 與:
-a
- 或:
-o
- 非:
-not
,!
2.5 根據(jù)文件大小來查找
-
-size [+|-]#UNIT
常用單位:k, M, G -
#UNIT
: (#-1, #] -
-#UNIT
:[0,#-1] -
+#UNIT
:(#,oo)
2.6 根據(jù)時(shí)間戳
以“天”為單位
-
-atime
[+|-]#, -
#
: [#,#+1) -
+#
: [#+1,oo] -
-#
: [0,#) -mtime
-ctime
以“分鐘”為單位
-amin
-mmin
-cmin
2.7 根據(jù)權(quán)限查找
-
-perm [/|-]MODE
MODE: 精確權(quán)限匹配
/MODE:任何一類(u,g,o)對象的權(quán)限中只要能一位匹配即可
-MODE:每一類對象都必須同時(shí)擁有為其指定的權(quán)限標(biāo)準(zhǔn)
2.8 處理動作
-
-print
默認(rèn)的處理動作忽舟,顯示至屏幕 -
-ls
類似于對查找到的文件執(zhí)行“l(fā)s -l”命令 -
-delete
刪除查找到的文件 -
-fls /path/to/somefile
查找到的所有文件的長格式信息保存至指定文件中 -ok COMMAND {} \;
- 對查找到的每個(gè)文件執(zhí)行由COMMAND指定的命令
- 對于每個(gè)文件執(zhí)行命令之前双妨,都會交互式要求用戶確認(rèn)
-exec COMMAND {} \;
- 對查找到的每個(gè)文件執(zhí)行由COMMAND指定的命令
- {}用于引用查找到的文件名稱自身
Note:
find
傳遞查找到的文件至后面指定的命令時(shí)叮阅,查找到所有符合條件的文件一次性傳遞給后面的命令- 有些命令不能接受過多參數(shù)刁品,此時(shí)命令執(zhí)行可能會失敗浩姥;另一種方式可規(guī)避此問題:
find | xargs COMMAND
3. 實(shí)戰(zhàn)演示
1挑随、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄
# find /var -user root -group mail
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 \)
3、查找/etc目錄下最周一周內(nèi)其內(nèi)容修改過眯分,同時(shí)屬主不為root拌汇,也不是hadoop的文件或目錄
# find /etc -mtime -7 -a -not -user root -a -not -user hadoop
# find /etc/ -mtime -7 -a -not \( -user root -o -user hadoop \)
4、查找當(dāng)前系統(tǒng)上沒有屬主或?qū)俳M弊决,且最近一個(gè)周內(nèi)曾被訪問過的文件或目錄
# find / -nouser -a -nogroup -a -atime -7
5噪舀、查找/etc目錄下大于1M且類型為普通文件的所有文件
# find /etc -size +1M -type f
6、查找/etc目錄下所有用戶都沒有寫權(quán)限的文件
# find /etc -not -perm /222
7飘诗、查找/etc目錄下至少有一類用戶沒有執(zhí)行權(quán)限的文件
# find /etc -not -perm -111
8与倡、查找/etc/init.d目錄下,所有用戶都有執(zhí)行權(quán)限昆稿,且其它用戶有寫權(quán)限的文件
# find /etc/init.d -perm -113
9.找出/tmp目錄下纺座,屬主不是root,且文件名不是fstab的文件
# find /tmp \( -not -user root -a -not -name 'fstab' \) -ls
# find /tmp -not \( -user root -o -name 'fstab' \) -ls