Linux中find命令详解
find:
? ?find是一個實(shí)時查找工具,通過遍歷指定起始路徑下文件系統(tǒng)層級結(jié)構(gòu)完成文件查找;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一、find的工作特性:
????????1、精確查找
????????2、實(shí)時查找
????????3、查找速度略慢?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
二、find命令的用法:
????????find [OPTIONS] ?[查找起始路徑] ?[查找條件] ?[處理動作]
? ??
查找起始路徑:指定具體搜索目標(biāo)起始路徑;默認(rèn)為當(dāng)前目錄;
查找條件:指定的查找標(biāo)準(zhǔn),可以根據(jù)文件名、大小、類型、從屬關(guān)系、權(quán)限等等標(biāo)準(zhǔn)進(jìn)行查找;默認(rèn)為找出指定路徑下的所有文件;
處理動作:對符合查找條件的文件做出的操作,例如刪除等操作;默認(rèn)為輸出至標(biāo)準(zhǔn)輸出;
??
[查找條件]:
????????表達(dá)式:選項和測試
????????測試:結(jié)果通常為布爾型("true", "false")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
????????1、根據(jù)文件名查找:
????????-name ?"pattern":精確匹配文件名
????????-iname "pattern":匹配文件名時不區(qū)分字符大小寫
????????pattern模式支持glob風(fēng)格的通配符:
????????????????*:匹配任意長度的任意字符
?????????????????:匹配任意單個字符
????????????????[]:匹配指定范圍內(nèi)的任意單個字符
????????????????[^]:匹配指定范圍外的任意單個字符
示例:
1、查找/etc目錄下文件名為passwd的文件
2、查找/etc目錄下文件名為包含passwd的文件,不區(qū)分大小寫
3、查找/etc目錄下文件名為passwd后面跟了單個字符的文件
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
????2、根據(jù)文件從屬關(guān)系(屬主、屬組)查找:
????????-user USERNAME:查找屬主為指定用戶的所有文件;
????????-group GRPNAME:查找屬組為指定組的所有文件;
????????-uid UID:查找屬主為指定的UID的所有文件;
????????-gid GID:查找屬組為指定的GID的所有文件;
????????-nouser:查找沒有屬主的文件;
????????-nogroup:查找沒有屬組的文件;
示例:
1、查找/tmp目錄下屬主為hadoop的所有文件
小提示:使用find命令可在最后加上-ls可以以長格式列出文件的屬性
2、查找/tmp下屬組的GID為4015的文件
3、查找/var/tmp目錄下沒有屬主的文件
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
????3、根據(jù)文件的類型查找:
????????-type TYPE:
????????????f: 普通文件
????????????d: 目錄文件
????????????l:符號鏈接文件
????????????b:塊設(shè)備 文件
????????????c:字符設(shè)備文件
????????????p:管道文件
????????????s:套接字文件
示例:
1、查找/dev目錄下文件類型為塊設(shè)備的所有文件
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
? ?4、根據(jù)文件的大小查找:
????????-size [+|-]#UNIT ? ? (#號表示數(shù)字 ? ?UNIT:單位,默認(rèn)為字節(jié),不帶+-號表示精確查找)
????????常用單位:k, M, G
? ? ? 注意:單位換算后的結(jié)果通常是非精確的數(shù)值,例如(#-1,#]這個單位范圍內(nèi)的文件都會被換算為#
????????????#UNIT:匹配到的是(#-1,#]這個范圍內(nèi)大小的文件? ? ?
????????????-#UNIT:[0,#-1] 匹配到的是[0,#-1]這個范圍內(nèi)大小的文件,因?yàn)槲募拇笮〔豢赡苄∮?
????????????+#UNIT:(#,+∞) ?匹配到的是(#,+∞)這個范圍內(nèi)大小的文件
示例:
1、查找/etc目錄下大于500k的文件或目錄
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~??
?????5、根據(jù)文件的時間戳查找:??
????????以“天”為單位:??
????????注意:和查找文件類似,天數(shù)的換算通常也為非精確值,例如(#-1, #]范圍內(nèi)的時間都會換算為#?????????
? ? ? ?#:[#, #+1)?匹配到的是距現(xiàn)在執(zhí)行查找命令這一刻經(jīng)過了[#, #+1)單位時間內(nèi)的時間
? ? ? -#:[0, #) ?匹配過去了[0, #)單位時間內(nèi)的時間
? ? ? +#:[#+1,+∞) 匹配距現(xiàn)在過去了[#+1,+∞)單位時間之內(nèi)的時間
? ? ?例如,查找過去3天內(nèi)訪問過的文件,匹配到的是過去[72,96)小時之內(nèi)訪問過的文件
????????????-atime ?[+|-]# ? atime表示最近一次訪問時間
????????????-mtime ?[+|-]# ? mtime表示最近一次修改時間
????????????-ctime ?[+|-]# ? ctime表示最近一次改變時間
????????以“分鐘”為單位:
????????????-amin ?[+|-]#
????????????-mmin ?[+|-]#
????????????-cmin ?[+|-]#
示例:
1、找出在/tmp目錄下過去5分鐘之內(nèi)訪問過的文件或目錄
小提示:可使用stat命令檢查文件時間是否符合查找條件
2、找出/var/tmp目錄下最近1天內(nèi)修改過了的文件或目錄
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
????6、根據(jù)文件的權(quán)限查找:?
??????? ?
????????-perm ?[/|-]mode? ?(mode代表權(quán)限) ? ??
???????????? mode (不加/或-)表示精確權(quán)限查找
????????????/mode:任何一類用戶(u,g,o)的權(quán)限中的任何一位(r,w,x)符合條件即滿足;mode中的9位權(quán)限之間存在“或”關(guān)系;
????????????-mode:每一類用戶(u,g,o)的權(quán)限中的每一位(r,w,x)同時符合條件即滿足;mode中的9位權(quán)限之間存在“與”關(guān)系;
示例:
1、查找當(dāng)前目錄下權(quán)限為440的文件
2、查找當(dāng)前目錄下至少有一類用戶有讀寫權(quán)限的文件
????提示:/666表示三類用戶中只要滿足讀寫權(quán)限中的一種就視為符合條件
3、查找當(dāng)前目錄下所有用戶都有寫權(quán)限的文件
???提示:-222表示三類用戶中的每一類用戶都必須對文件有寫權(quán)限才符合條件
?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~??7、組合測試條件進(jìn)行查找:?
????組合測試:測試邏輯
? ? ??與:-a, 默認(rèn)組合邏輯;必須滿足所有條件才予以顯示
? ? ??或:-o,只要符合條件之一就顯示
? ? ??非:-not, ! 不符合條件的才予以顯示
????????????
? ? ??!A -a !B = !(A -o B) ?非A且非B 等于 非(A或B)
? ? ??!A -o !B = !(A -a B) ?非A或非B 等于 非(A且B)
示例:
1、找出/var/tmp目錄下文件名中不包含fstab字符串的文件或目錄;
???
2、找出/var/tmp目錄下屬主為非root,而且文件名不包含passwd字符串的文件;
????
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[處理動作]:? ?
????????-print:輸出至標(biāo)準(zhǔn)輸出;默認(rèn)的動作;
????????-ls:類似于對查找到的文件執(zhí)行“l(fā)s -l”命令,輸出文件的詳細(xì)信息;
????????-delete:刪除查找到的文件;
????????-fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中;
????????-ok COMMAND {} \; ? :對查找到的每個文件執(zhí)行由COMMAND表示的命令;每次操作都由用戶進(jìn)行確認(rèn);
????????-exec COMMAND {} \; ?:對查找到的每個文件執(zhí)行由COMMAND表示的命令;-exec 不用用戶每次確認(rèn),直接執(zhí)行操作 {}是用來引用找到的文件名
示例:
1、找出/var/tmp目錄中屬主為root的文件或目錄,并將其詳細(xì)信息保存至/tmp/root.txt中
2、查找/tmp目錄中既沒有屬主也沒有屬組的文件或目錄,并將其屬主和屬組都改為root
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
練習(xí):
1、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄;
2、查找/usr目錄下不屬于root, bin或hadoop的所有文件或目錄;用兩種方法;
3、查找/tmp目錄下最近一周內(nèi)其內(nèi)容修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄,用兩種方法:
4、查找/var目錄下沒有屬或?qū)俳M,且最近一周內(nèi)曾被訪問過的文件或目錄;
5、查找/etc目錄下大于1M且類型為普通文件的所有文件;
6、查找/tmp目錄下所有用戶都沒有寫權(quán)限的文件;
7、查找/var/tmp目錄至少有一類用戶沒有執(zhí)行權(quán)限的文件;
8、查找/etc目錄下,所有用戶都有執(zhí)行權(quán)限,且其它用戶有寫權(quán)限的所有文件;
轉(zhuǎn)載于:https://blog.51cto.com/coffeeyep/1725425
總結(jié)
以上是生活随笔為你收集整理的Linux中find命令详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux基础8 bash的特性
- 下一篇: Linux下Openssl的安装全过程