在文件系統中查找符合條件的文件
locate :非實時查找(數據庫查找)
語法 :locate? +? 文件名? 直接查找
按照查詢系統上預建的文件索引數據庫
/var/lib/mlocate/mlocate.db? ? (每天開機以后自動生成,剛裝的系統就找不到)
特點: 查找速度快? ? ? ? 模糊查找? ? ? ?非實時查找? ? ? 搜索的是文件的全路徑,不僅僅是文件名
可能只搜索用戶具備讀取和執行權限的目錄
locate 的命令選項: -i? ? ? ? ?:不區分大小寫
-n? N? :? ?只列舉前N個
-r? ? ? ? :? ?可以使用正則表達式
查找文件 locate? ?f1.sh
locate? ?/data? ?-i? ?f1.sh
locate? -n5? ?f1.sh? ? ?顯示出前面5行
locate -r “^/usr/.*\.lua$”? ? ??在/data 目錄下 尋找以/usr 開頭 以.lua結尾
find : 實時查找工具,通過遍歷指定路徑完成文件查找
工作特點: 查找速度略慢? ? ? ? 精確查找? ? ? 實時查找? ? ? ? ?可能只搜索用戶具備讀取和執行權限的目錄
語法 : find 【OPTION】……[查找路徑]【查找條件】【處理動作】
查找路徑:指定具體目標路徑;默認為當前目錄
查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 下的所有路徑
處理動作:對符合條件的文件做操作,默認輸出至屏幕
查找條件
指搜索層級? ?-maxdepth? ? level 最大搜索目錄深度,指定目錄為第一級
-mindepth? ? ?level 最小搜索目錄深度
根據文件名或inode查找:
-name”文件名稱”:支持使用glob
*, ?, [], [^]
-iname“文件名稱”:不區分字母大小寫
-inum n 按inode號查找
-samefile name 相同inode號的文件
-links n 鏈接數為n的
-regex “PATTERN”:以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱
find /etc/ -maxdepth 2 -name passwd? ? 取/etc/ 下 含有passwd的最少第2層目錄
find /etc/? -maxdepth 2 -mindepth? 2 -name passwd? 取/etc/ 最少2層 最多2層 含有passwd的目錄
ll -ia? 可以看到文件的節點編號
find? /data? inum 68? ?取 /data 下文件? 68的節點編號
find /data -samefile lg.out? -ls? ?取 /data 目錄下和lg.out相同的節點編號
find /etc/ -regex “.*\.conf$”? ?用正則表達式取/etc/下的 以.conf結尾的文件
根據屬主,屬主查找:
user USERNAME : 查找屬主為制定用戶的(UID)的文件
-group GRPNAME: 查找屬組為指定組(GID)的文件
find? ?/home? -user? heihei? -ls? ?查找在/home 下 用戶為heihei 的文件屬性
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
find? /home? -nouser? ?查找/home下沒有所屬主的文件
find /home -nouser -a -nogroup -ls 查找/home下即沒有所屬主有沒有所屬組的文件
find /home -nouser -o -nogroup
根據文件類型查找
-type :? ? ? ? f? :普通文件? ? ?d:目錄文件? ? l :符號鏈接文件? s: 套接字文件? ? b: 塊設備文件
c: 字符設備文件? ? p : 管道文件
空文件或目錄
-empty
find /etc/ -empty -type f? ?查找/etc/ 普通空文件目錄
-not? ,? ?!
find? /data ! -empty? -type f? ?查找/data目錄下非空的普通文件
!A -a !B = !(A -o B)? ? ? ? ??!A -o !B = !(A -a B)
find /tmp \( -not -user root -a -not -name ‘f*’ \) -ls
find /tmp -not \( -user root -o -name ‘f*’ \) –ls
根據文件的大小來查找
-size? [+|-] # UNIT? 常用單位 :k, M ,G , c (byte)
#UNIT: (#-1, #]
如:6k 表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k 表示[0,5k]
+#UNIT:(#,∞)
如:+6k 表示(6k,∞)
如果SIZE 后面 跟數字 # 大小的話搜索出的數字是(數字#-1 ~ 到數字#)
如果size 后面跟數字 -#? 的大小的話搜索出的數字是【0 ~ -1】
如果size后面跟數字 +# 的大小的話搜索出的數字是(數字# ~ 無窮大)
根據事件戳 以天為單位
-atime [+|-]#,
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
以“分鐘”為單位:
-amin
-mmin
-cmin
如果-atime 后面跟 # 【# ~ #+1)
如果-atime后面跟 -#【0 ~ # )
如果-atime后面跟+#【#+1 ~ 無窮大】
查看文件的時間用? ?stat? 文件名
根據權限查找
-perm? [-|/] MODE
MODE: 精確權限匹配
/MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+ 從centos7開始淘汰
-MODE:每一類對象都必須同時擁有指定權限
find /data -perm 644? -ls? ? ?查找在/data目錄下權限為644的文件
find /data -perm? /644? -ls? 查找在/data目錄下只要有權限符合644中的任意一個都可以顯示出來find /data -perm -644? -ls? 查找在/data目錄下權限為644以上的文件
文件的處理動作
-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令,對于每個文件執行命令之前,都會交互式要求用戶確認
-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令
{}: 用于引用查找到的文件名稱自身
ind傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
find? /data? -name? “f*”? -exec mv {}? {}.bak2.org? \;? ?把/data 目錄下帶 f 的文件移動到 /data 目錄下并改名為以.bak2.org 結尾的文件
在 find 中帶有-ok? ?-exec? 必須以? ? \;? 作為結束命令
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96997