當前位置:
首頁 > 知識 > 文件查找命令之locate,find

文件查找命令之locate,find

文件查找:

在文件系統上查找符合條件的文件

文件查找命令:

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


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux資訊速推 的精彩文章:

Linux系統小白的自學之路
4 種方法識別Linux系統 USB 設備

TAG:Linux資訊速推 |