示例:locate 文件名,默認模糊匹配在數(shù)據(jù)文件中包含指定文件名的記錄。locate命令一個最大的特點在于搜索的速度非常快。因為locate命令不是對本地磁盤上的文件直接進行搜索,而是搜索一個數(shù)據(jù)文件的內(nèi)容(當然了,這個數(shù)據(jù)文件需要包含本地磁盤的文件信息)。這個文件通常位于/var/lib/mlocate(Linux版本之間可能會有細微的不同),看到這里你可能會想,新增的文件是不是會同步的被寫入到這個數(shù)據(jù)文件中呢,答案是不一定,這要看系統(tǒng)刷新數(shù)據(jù)文件的頻度,一般來說是一天,但是你也可以手動強制通過updatedb命令來刷新數(shù)據(jù)文件的內(nèi)容(該命令略占系統(tǒng)資源,不要頻繁使用)。
做一個演示,在系統(tǒng)“/tmp”目錄下新建一個文件,名為12345678910.test,這個文件名我認為已經(jīng)夠特殊了。

現(xiàn)在使用locate命令來查找這個文件當然找不到,使用了updatedb之后呢?答案是依然找不到。。這就讓人納悶了,這命令好不好用,為什么找不到,我本人新建的文件,明明擺在那里。
通過不斷的man,你會定位到一個叫“/etc/updatedb.conf”的文件,打開看一下

其中我們看到了“/tmp”目錄,這有什么聯(lián)系呢?
當你閱讀完幫助文檔之后你就會明白,數(shù)據(jù)文件的加載是有一定的規(guī)則的,這些個規(guī)則就在“/etc/updatedb.conf”文件中配置,我們會看到,這個配置文件中定義了哪些文件系統(tǒng)需要排除掃描,哪些文件名需要排除掃描,以及哪些目錄需要排除掃描。而上圖中,“/tmp”目錄被列入排除掃描的路徑,所以,我們在“/tmp”目錄下做演示,出現(xiàn)搜索不到的問題,就沒有任何問題。
locate命令能夠快速的定位到文件,開銷小,效率高,但是遺憾的是,他只能根據(jù)文件名來定位文件,而且使用上還有一些不方便(效率帶來的代價),或許要刷新數(shù)據(jù)文件,修改配置文件。
強大的文件搜索命令:find
find命令非常強大,選項非常多,以至于你能想象到的搜索功能他幾乎都能實現(xiàn)。下面列舉幾個常用的示例。
示例1:通過文件名匹配
find [目錄] -name 文件名,目錄是可選項,如果不設置,則從根目錄開始匹配,但是強烈建議縮小查找的范圍,節(jié)約系統(tǒng)開銷,如果有需要,還可以添加“-i”選項忽略大小寫
find ~ -name demoFile,查找家目錄下名為demoFile的文件
說到通過文件名來匹配,那么通配符是一定要知道的,find命令結合通配符能夠完成日常很多查詢工作。
常用通配符:
*注意,使用通配符的時候需要給匹配表達式添加引號引起
*:匹配任意多個字符(包括零個或一個)
示例:find ~ -name “a*”,查找家目錄下所有以a開頭的文件
?:匹配任意一個字符(不包括零個)
示例:find ~ -name “a???”,查找家目錄下所有以a開頭,文件名長度為四個字符的文件
[characters]:匹配任意一個屬于字符集中的字符
示例:find ~ -name “[abc]*”.txt,查找只能包含a或b或c任意一個或多個任意組合,并且以”.txt“結尾的文件
[!characters]:匹配任意一個不是字符集中的字符
同上,取反
常用字符類:
匹配一個字符類,[[:class:]]:匹配任意一個屬于指定字符類中的字符
[:alnum:]:匹配任意一個字母或數(shù)字
示例:find ~ -name “[[:alnum:]]*.cfg”,查找家目錄下含有字母或者數(shù)字,并且以”.cfg”結尾的文件
下列字符類使用方式相同
[:alpha:]:匹配任意一個字母
[:digit:]:匹配任意一個數(shù)字
[:lower:]:匹配任意一個小寫字母
[:upper]:匹配任意一個大寫字母
示例2:通過所屬用戶來匹配
有些時候,在一些公共目錄,有很多其他用戶創(chuàng)建的文件,我們需要把他們過濾掉
指定所屬用戶:-user 用戶名
示例:find /tmp -user root -name “a*”,查找tmp目錄下所有以a開頭并且屬于root用戶的文件
順便一提,有些文件沒有所屬用戶,可以添加-nouser進行篩選。(沒有所有者的文件,一般認為是垃圾文件,但是內(nèi)核產(chǎn)生的文件不會有所有者,比如內(nèi)存文件,或者是外來文件,一般是外接設備帶來的數(shù)據(jù),除了這兩種情況,其他情況都視為垃圾文件)
示例3:通多特定時間來匹配
-atime 文件訪問時間 +-10(默認單位”天“)
-ctime 改變文件屬性 +-10
-mtime 修改文件內(nèi)容 +-10
示例:
find ~-mtime +10 搜索十天之前,修改過內(nèi)容的文件
find ~ -ctime -10 搜索十天之內(nèi),修改過文件屬性
find ~ -atime 10 過去的第十天,被訪問過的文件
示例4:通過文件大小來匹配
-size 25k
find /root -size 25k 搜索剛好是25k的文件(但是文件大小一般不會這么巧是25k,嘗試搜索”+大于“或者”-小于“k)
示例5:組合匹配
也就是多條件查詢
-a:and
find ~ -size +25k -a -size -75k,查找大小介于25~75k的文件
-o:or
find /root -size +25k -o -size -10k,只需要大于25k或者小于10k的文件
之前提到過的種種選項,都可以組合使用,比如就寫一個長一點的
find ~ -name “a*” -user root -a -size -5k -a -atime 1,查找以a開頭,屬于root用戶,并且要小于5k,還需要在一天之內(nèi)被訪問過的文件。
命令交接
-exec XXX {} \; 固定格式 ,XXX代表需要的命令,但是要注意,不是所有命令都適用
find ~ -size +25k -o -size -10k -exec ls -l {} \;
將查詢的結果通過一個指定的命令進行處理
上面記錄的僅僅是選項中很小的一部分,更多需求還需要查閱幫助手冊或者搜索引擎。