文件查找常見的命令: locate,find
=================================================================
locate - find files by name
工作特性:
依賴於事先建好的索引庫
系統自動實現(周期性進行)
手動更新數據庫(updatedb)
查找速度快
模糊查找
非實時查找
命令使用格式:locate [OPTION]... PATTERN...
-b:只匹配基名(指定資料庫的路徑)
-c:統計出符合條件的文件的數量
-r:使用正規運算式 做尋找的條件。
注意:索引構建過程需要遍歷整個根文件系統,極消耗資源
=================================================================
find - search for files in a directory hierarchy(目錄層次)
實時查找工具,通過遍歷指定起始路徑下文件系統層次結構完成文件查找
工作特性:
查找略慢
精確查找
實時查找
用法:
find [OPTIONS] [查找起始路徑] [查找條件] [處理動作]
查找起始路徑:指定具體搜索目標起始路徑,默認當前目錄
查找條件:指定的查找標准,可以根據文件名,大小,類型,從屬關系,權限等
標准進行,默認為找出指定路徑下的所有文件
處理動作:對符號查找文件的條件作出的操作,例如刪除...默認為輸出至標准輸出
查找條件:
表達式:選項和測試
測試:結果通常布爾型
一、根據文件名查找:
1.-name
2.-iname:不區分文件名中大小寫,支持通配符,不支持正則。
支持glob風格的通配符:*、?、[]、[^]
3.-regex :基於正則模式查找文件,匹配是整個路徑而非其名。
二、根據文件從屬關系查找:
-user:查找屬主指定用戶的所有文件
-group 查找屬組指定組的所有文件
-uid uid:查找屬主指定uid的所有文件
-gid gis:查找屬組指定gid的所有文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
三、根據文件的類型:
-type TYPE
f:普通文件 d l b s c p
四、組合測試:
與:-a,默認組合邏輯(and)
或:-o,
非:-not 或!
!A -a !B=!(A -o B)
!A -o !B=!(A -a B)
五、根據文件大小查找:
-size[+|-]#UNIT
常用單位:K M G,不帶默認字節為單位。#=數字
#UNIT:(#-1,#]
-#UNIT:[0,#-1]
+#UNIT:(#,∞)
六、根據時間戳查找:
以“天”為單位 :
-atime[+|-]#
#:[#,#-1)
-#:(#,0]
+#:(∞,#-1)
-mtian
-ctime
以分鐘為單位:
-amin
-minm
-cmin
七、根據權限查找:
-perm [/|-]mode
mode(權限位)
/mode:任何一類用戶(u g o)的權限中有任何一個權限(r w x)符合條件既滿足。
-mode:每一類用戶(u g o)的權限中的每一位權限(r w x)同時符合條件既滿足。
處理動作:
-print:輸出至標准輸出,默認的動作
-ls:類似於對查找到的文件執行“ls -l”命令,輸出文件的現實信息
-delete:刪除查找到的文件(極其危險,請勿嘗試)
-fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \; ==>對查找到的每個文件執行有COMMAND表示的命令;每次操作都由用戶確認。
-exec COMMAND {} \; ==>對查找到的每個文件執行由COMMAND表示的命令。
注意:find傳遞查找到的文件路徑至後面的命令時,是先查找出所有的符合條件的文件路徑,並一次性傳遞給後面的命令;但是有些命令不能接受過長的參數,此時命令執行會失敗,另一種方式可以規避此問題:
find |xargs COMMAND
***學習xargs命令的用法***
-----------------------------------------------------------------
實例:
[root@zyl ~]# find /etc -iname "passwd?"
/etc/passwd-
/etc/test/passwdo
[root@zyl ~]# find /etc -iname "passwd[[:alnum:]]"
/etc/test/passwdo
-----------------------------------------------------------------
[root@zyl ~]# find /etc -iname "?passwd"
/etc/security/opasswd
-----------------------------------------------------------------
[root@zyl ~]# find /etc -name "passwd"
/etc/passwd
/etc/pam.d/passwd
[root@zyl ~]# find /etc -iname "passwd"
/etc/passwd
/etc/pam.d/passwd
/etc/test/Passwd
-----------------------------------------------------------------
[root@zyl ~]# find /tmp/ -user root
[root@zyl ~]# find /tmp -group root
[root@zyl ~]# find /tmp/ -uid 0
[root@zyl ~]# find /tmp/ -gid 0
[root@zyl ~]# find /tmp/ -nouser
[root@zyl ~]# find /tmp/ -nogroup
-----------------------------------------------------------------
[root@zyl ~]# find /etc/ -type l -ls
[root@zyl ~]# find /dev/ -type b -ls
-----------------------------------------------------------------
[root@zyl ~]# find /etc/ ! -type f -ls
-----------------------------------------------------------------
[root@zyl ~]# find /etc/ -mtime -1 -ls
[root@zyl ~]# find /etc/ -atime +7 -ls
=================================================================
練習題:
1.查找/var目錄下屬主為root,且屬組為mail的所有文件或者目錄
[root@zyl ~]# find /var/ -user root -a -group mail -ls
其余的自己練習:
2.查找/usr目錄下不屬於root,bin或者hadoop的所有文件
3.查找/etc目錄下最近一周內容修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄
4.查找當前系統上沒有屬主或屬組,且最近一周內曾被訪問過的文件或目錄
5.查找/etc目錄下大於1M且類型為普通文件的所有文件
6.查找/etc目錄下所有用戶都沒有執行權限的文件
7.查找/etc目錄下至少有一類用戶沒有執行權限的文件
8.查找/etc/init.d/目錄下,所有用戶都有執行權限,且其他用戶有寫權限的所有文件。
=================================================================
本文出自 “randolph” 博客,轉載請與作者聯系!