locate | find
*** locate 路徑中包含字符串 即匹配;
-n# 指定顯示結果前幾個
-b 只匹配路徑名中的基名
-c 統計符合條件的文檔數量
-r BRE 可使用正則表達式
依賴于已建立的數據庫 速度較快 類似whatis搜索實現
數據庫:
系統自動周期實現
updatedb 手動更新數據庫
索引構建極消耗資源 建議在空閑時
特點:
速度較快 模糊查找 !非實時查找
locate ./ *.repo
本目錄下.repo結尾的文件或目錄
*** find [OPTIONS] [查找起始路徑][查找條件][處理動作]
起始路徑:指定目錄下搜索 默認當前目錄;
查找條件:指定查找標準, 文件名 大小 類型等
查找動作:對匹配到的對象進行的操作 默認為輸出至標準輸出 輸出至屏幕
特點:
查找速度略慢 精確查找 實時查找
查找條件:
表達式:選項;標準
標準: 執行結果為布爾值
查找 鏈接目錄下的文件 需要 /.*/ 以 / 結尾
1.根據文件名查找: 支持通配符
-name "patt" find /etc -name passwd[[:alnum:]]
-iname "patt"不區分大小寫 find /etc -iname *passwd
-inum # 按inode號查找
-samefile file 相同inode號的文件
-links n 鏈接數為n的文件
-regex "PATT": 匹配整個文件路徑字符串,不僅僅是文件名稱
2.根據屬主屬組查找: find /testdir -uid=1000
-user USER ==> -uid UID 屬主 為指定用戶 的文件
-group GROUP ==> -gid GID 屬組 為指定組 的文件
存在 用戶被移除 文件無屬主的情況
-nouser 查找 無屬主的文件 find /testdir -nouser
-nogroup 查找 無屬組的文件
]#find /testdir -user zjj -type p
/testdir下 屬主為zjj的 管道文件
]#find /tmp -not \( -user root -o -iname "*zz*"\)
/tmp 目錄下 屬主不為root 且 基名不包含zz的文件
3.根據類型查找: find /dev -type s -ls
-type TYPE
b: 塊設備文件
c: 字符設備文件
d: 目錄文件
f: 普通文件
l: 符號鏈接設備 軟鏈接
p: 管道文件
s: 套接字文件
4.文件大小查找:
-size [+|-]#UNIT
常用單位:K,M,G 相對 單位精確查找
#UNIT:(#-1,#]
-#UNIT:[0,#-1]
+#UNIT:(#,∞)
]#find /tmp -size +10K
/tmp下大于10K的文件 11K-∞
5.根據時間戳查找:
以 天 為單位:
-atime [+|-]#
#:[#,#-1) 前 第3天
-#:(#,0] 前 3天以內
+#:(∞,#-1) 3天之前
-mtime
-ctime
以 分鐘 為單位
-amin
-mmin
-cmin
]#find /etc -mmin -3
3分鐘內修改過的文件
6.根據權限查找:
-perm [/|-] mode mode 精確查找
]#find -perm 421
查找權限為421的文件
-mode 任何一類用戶(u,g,o)的 每一位(r,w,x)都要有對應權限
]#find ./ -perm -624
文件權限包含mode即匹配
/mode 任何一類用戶(u,g,o)的 任何一位(r,w,x)符合條件即滿足
]#find ./ -perm /124
匹配當前目錄u=1 或g=2 或o=4 的文件
滿足其中之一即匹配
]#find ./ -perm /011
不管u權限 g或o有寫權限即匹配
===========
組合標準:
與 -a 默認的邏輯
或 -o 滿足之一則匹配
非 -not,!
處理動作:
-print 輸出至標準輸出
-ls 類似對查到的文件執行 ls -l 輸出文件詳細信息
find ./ -d zjj -amin -5 -not -perm /222 -ls
-delete 刪除查找到的文件!
-fls /PATH 將文件詳細的信息 保存至指定文件
-ok CMD {} \; 對查找到的 每個文件執行CDM命令 會逐條要求確認
固定格式\; {}表示查到的所有文件
-exec 不交互 直接執行
]#find ./ -nouser -a -nogroup -ok chown zjj:zjj {} \;
查找當前目錄下 無屬主無屬組的文件 全部添加屬主屬組zjj
-exec CMD {} \; 相對-ok 無確認環節 直接執行CMD
]#find ./ -perm /002 -exec mv {} {}.danger \;
當前目錄下 o有寫權限的 文件名加上.danger后綴
!find查找到所有文件后會 將結果一次行傳遞給命令,有些命令不能接受過長的參數
找到的文件過多會導致命令執行失敗可用 find …| xargs CMD
xargs把一個數據流分割為一些足夠小的塊,以方便過濾器和命令進行處理
練習:
1、查找/var目錄下屬主為root,且屬組為mail的所有文件
]#find /var -user root -group mail
2、查找/var目錄下不屬于root、lp、gdm的所有文件
]#find /var -not \( -user root -o -user lp -o -user gdm \)
3、查找/var目錄下最近一周內其內容修改過,同時屬主不為 root,也不是postfix的文件
]#find /var -mtime -7 -not \( -user root -o -user postfix \)
4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪 問過的文件
]#find / \( -nouser -o -nogroup -atime -7 \) -ls
5、查找/etc目錄下大于1M且類型為普通文件的所有文件
]#find /etc -size +1M -type f
6、查找/etc目錄下所有用戶都沒有寫權限的文件
]#find /etc -not -perm /222
7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
]#find /etc -not -perm -111
8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它 用戶有寫權限的文件
]#find /etc/init.d/ -perm -113
原創文章,作者:Jasper,如若轉載,請注明出處:http://www.www58058.com/35366
總結的很好,find命令是以后工作或筆試中常出現的考點,需要熟練掌握。