find查找是生產中最常見的日志查找工具
下面看看它的用法
基本用法:
find 查找路徑 查找標準 查找到以后的處理動作
查找路徑:需要被查找的文件所在的路徑,一定是個目錄,默認情況下為當前的目錄
查找的標準:查找的時候用什么方式去查找
處理動作:文件查找完畢后,需要對查找出來的文件進行處理的動作,默認情況下為顯示
查找深度的限制:
可以對查找中文件路徑的深度進行控制
-maxdepth #
查找標準:
查找的標準一般包括以下的幾部分:
名字,時間,權限,類型,大小,屬主和屬組
名字:
-name “filename”
基于文件名查找的時候支持通配符
*,?,[] , [^]
-iname 文件名匹配時不區分大小寫
-regex 基于正則匹配文件名正則來查找
類型:
-type 基于文件的類型查找
f 普通文件
d 目錄
s 套接字文件
l 鏈接文件
這里有個注意點 :
find 執行查找類型的時候是檢測文件本身的類型,比如A是鏈接文件A–>B,那么find判斷的是文件A的類型
與之相似的有一個叫 test 的命令,專用于檢測文件的類型,不過test檢測的時候是檢測B的類型
權限:
-perm MODE
mode 全部權限吻合才行
/mode 給出的權限中只要滿足一個即可
-mode 文件權限包含時,即權限只能多,不能少
時間:
按時間來查找
-mtime
-ctime
-atime
[+|-]#
-mmin (分鐘計)
-cmin
-amin
三種時間后面可以跟 + – 或者不加
+ 代表的是超過
– 在…….的范圍內
不加為精確匹配
大?。?/b>
-size
利用大小查找的時候需要注意的是,大小的精確定位,+ 和 – 的區別
查找10K的時候,是9-10K 的文件,而如果是 -10K 的話, 代表的是0-9K, +10K代表的是10K以上
根據這個原理,查找1G的文件,千萬別寫成1G,因為這樣會將幾K的文件都列出來,正確的寫法是1024M
如果要精確到字節那么需要使用 c 為單位
屬主和屬組:
-uid n :n 為數字,這個數字是用戶的賬號 ID,亦即 UID ,這個 UID 是記錄在 /etc/passwd 里面與賬號名稱對應的數字。
-gid n :n 為數字,這個數字是組名的 ID
-user name :name 為使用者賬號名稱
-group name:name 為組名喔,例如 users ;
-nouser :尋找文件的擁有者不存在 /etc/passwd 的用戶
-nogroup :尋找文件的擁有群組不存在于 /etc/group 的文件
其中 -nouser 和 – nogroup 是可能存在的,比如你在網上下載了一個軟件,該軟件的擁有者并不再系統的用戶中,
或者事先已經有個賬戶,且在系統中運行產生了各種數據,后來你把用戶給刪除了,那么這些數據還在,此時就需要
用到上述兩個指令
執行動作
-print:顯示
-ls 類似ls -l 的方式顯示文件
-ok COMMAND {} \; 其中的{}是用來引用需要修改文件名
-exec COMMAND {} \; 作用同 -ok 稍有區別的是-ok需要用戶每步都確認,而-exec不需要用戶的確認
多個條件之間的邏輯組合
-a 與關系,多個條件同時滿足的時候才滿足要求
-o 或關系,多個條件中一個條件滿足就行
! not : 非關系,即取反
德爾摩根定律:
(非P)或(非Q)=非(P且Q)
(非P)且(非Q)=非(P或Q)
使用-o條件時候需要注意的是 A -O B C 這個的邏輯是B與C 先相與,然后再進或的運算 如果需要A和B 或
運算之后再進行C操作,需要將A和B用括號括起來,且括號應該轉義
過濾機制:
-path “/path/to/directory” -a -prune
查找的時候排除目錄中的某一個子目錄
find實例運用:
(1) 查找/etc目錄下面,不是以.conf結尾的文件
find /etc -not -name “*.conf”
find /etc ! -name “*.conf”
(2)尋找/home目錄下,既不是用戶joe 也不是用戶 jane的文件
find /home -not -user joe -a -not -user jane
find /home -not \( -user joe -o -user jane \) # 括號里面的內容不能緊貼括號,要有空格
括號需要轉義
(3)找出/tmp目錄下面,屬主不是root,且文件名不以f開頭的文件
find /tmp -not \( -user root -o -name “f*” \) -ls
find /tmp \( -not -user root -a -not -name “f*” \) -ls #注意括號,盡量使用括號括起來
(4)搜索/etc下面除了/etc/sane.d 目錄下的所有的以.conf結尾的文件
find /etc -path “/etc/sane.d” -a -prune -o -name “*.conf” -print
(5)搜索/etc下面除了/etc/sane.d 目錄和/etc/modprobe.d以外其他目錄下的所有的以.conf結尾的文件
find /etc \( -path “/etc/sane.d” -o -path “/etc/modprobe” \) -a -prune -o -name “*.conf”
(6)備份配置文件,添加.orig擴展名
find /etc -name “*.conf” -exec cp {} {}.orig \;
(7)在家目錄下面尋找可以被其他用戶寫入的文件,去除寫的權限
find /hone -perm -002 -exec chmod o-x {} \;
原創文章,作者:Double f,如若轉載,請注明出處:http://www.www58058.com/75016