文件查找在文件系統上查找符合條件的文件文件查找命令:locate:非實時查找( 資料庫查找)find:實時查找 locate:查詢系統上預建的文件索引資料庫/var/lib/mlocate/mlocate.db 依賴於事先構建的索引索引的構建是在系統較為空閑時自動進行( 周期性 任務),管理員 手動 ...
文件查找
在文件系統上查找符合條件的文件
文件查找命令:
locate:非實時查找( 資料庫查找)
find:實時查找
locate:
查詢系統上預建的文件索引資料庫
/var/lib/mlocate/mlocate.db
依賴於事先構建的索引
索引的構建是在系統較為空閑時自動進行( 周期性 任務),管理員 手動更新資料庫(updatedb)
索引構建過程需要遍歷整個根文件系統,極消耗資源
工作特點:
• 查找速度快
• 模糊查找
• 非實時查找
• 搜索的是文件的全路徑,不僅僅是文件名
• 可能只搜索用戶具備讀取和執行許可權的目錄
locate 命令
locate KEYWORD
-i:執行不區分大小寫的搜索
-n N:只列舉前N 個匹配項目
-b:只匹配路徑中的基名
-c:只顯示統計多少個符合條件的路徑
-r:能基於基本正則表達式來編寫命令
locate foo
• 搜索名稱或路徑中帶有“foo ”的文件
locate -r ‘.foo$’
• 使用Regex 來搜索以“.foo ”結尾的文件
find
實時查找工具,通過遍歷指定路徑完成文件查找;
工作特點:
• 查找速度略慢
• 精確查找
• 實時查找
• 可能只搜索用戶具備讀取和執行許可權的目錄
用法:
find [OPTION]... [ 查找路徑] [ 查找條件] [ 處理動作]
查找路徑:
指定具體目標路徑,預設為當前目錄
查找條件:
指定的查找標準,可以文件名、大小、類型、許可權等標準進行;預設為找出指定路徑下的所有文件
處理動作:
對符合條件的文件做操作,預設輸出至屏幕
查找條件
表達式:選項和測試
根據文件名和inode 查找:
-name " 文件名稱":支持使用glob *, ?, [], [^]
-iname " 文件名稱":不區分字母大小寫
-inum n:按inode 號查找
-samefile name:相同inode 號的文件
-links n:鏈接數為n 的文件
-regex "PATTERN":以PATTERN(正則表達式)匹配整個文件路徑字元串,而不僅僅是文件名稱ID
根據屬主、屬組查找:
-user USERNAME:查找屬主為指定用戶(UID) 的文件
-group GRPNAME:查找屬組為指定組(GID) 的文件
-uid UserID:查找屬主為指定的UID 號的文件
-gid GroupID:查找屬組為指定的GID 號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
根據文件類型查找:
-type TYPE
f:普通文件
d:目錄文件
l:符號鏈接文件
s:套接字文件
b:塊設備文件
c:字元設備文件
p:管道文件
組合條件:
與:-a
或:-o
非:-not !
德· 摩根 定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B)
示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
find 示例
find -name snow.png
搜索名為snow.png 的文件
find -iname A.png
不分大小寫查找名為A.png 、a.png、 A.PNG 等等的文件
find / -name “.txt”
查找根目錄下尾碼名為txt的文件
find /var –name "log*"
查找var目錄下包含log的文件
find -user test -group test
搜索被用戶test 以及組群test所擁有的文件
其它示例:
find -user test -not -group test
find -user test -o -user test
find -not ( -user test -o -user test )
find / -user test -o -uid 500
找出/tmp 目錄下,屬主不是root ,且 文件名 不以f 開頭的 文件
find /tmp ( -not -user root -a -not -name 'f' ) -ls
find /tmp -not ( -user root -o -name 'f' ) –ls
排除目錄
示例:查找/etc/ 下,除/etc/sane.d 目錄的其它所有.conf 尾碼的文件
find /etc -path ‘/etc/sane.d’ -a -prune -o -name “*.conf” -print
根據文件大小來查找:
-size [+,-]#unit
常用單位:k, M, G
如:6k 表示(5k,6k]
-#unit :[0到#-1]
如:-6k 表示[0到5k]
+#unit :(#和大於#)
如:+6k 表示(6k或大於6k )
根據時間戳
以天為單位(time):
-atime [+|-]# 訪問時間
+#:表示(#+1)天之外被訪問
-#:表示#天內被訪問過的
#:表示小於(#+1)大於或者#天的時間段被訪問過
-ctime:改變時間
-mtime:修改時間
以分鐘為單位(min)
-amin
-mmin
-cmin
根據許可權查找:
-perm [+|-]MODE
MODE:精確匹配
+MODE:任何一類用戶的任何一位許可權匹配即可,常用於查找某類用用戶的某特定許可權是否存在
-MODE:每類用戶的指定要檢查的許可權位都匹配
示例:
find -perm 755,會匹配許可權模式恰好是755 的文件
只要當任意人有寫許可權時,find -perm +222 就會匹配
只有當每個人都有寫許可權時,find -perm -222 才會匹配
只有當其它人(other )有寫許可權時,find -perm -002才會匹配
處理動作:
-print:預設,列印在標準輸出上
-ls:以長格式輸出各文件信息,類似於ls -l
-delete:刪除查找到的文件
-fls file:查找到的所有文件的長格式信息保存至指定文件中
-exec COMMAND {} ;:對查找到的文件指定的命令
-ok COMMAND {} ;:互動式,對查找到的每個文件執行由COMMAND 指定的命令
find |xargs COMMAND: find把查找到的所有文件一次性地傳遞給-exec執行
{}:用於引用查找到的文件名稱自身
參數代換:xargs
用於產生某個命令的參數 xargs 入可以讀入stdin的數據,並且以空格符或回車符將stdin的數據分隔成為arguments
註意:文件名或者是其他意義的名詞內含有空格符的情況
有些命令不能接受過多參數 ,命令執行可能會失敗,xargs可以解決
示例:
find | xargs COMMAND
find /sbin -perm +7000 | xargs ls -l
示例:
find -name “*.conf” -exec cp {} {}.orig ;
備份配置文件,添加.orig 這個擴展名
find /tmp -ctime +3 -user joe -ok rm {} ;
提示刪除存在時間超過3天以上的joe 的臨時文件
find ~ -perm -002 -exec chmod o-w {} ;
在你的主目錄中尋找可被其它用戶寫入的文件
find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} ;
find /home –type d -ls