八:別玩捉迷藏了!搜索命令

          對于任何一個系統而言,文件的搜索是必不可少的,趕緊看一看Linux下“Ctrl+F”功能怎么使用!

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

          不過呢,有些時候,我們搜索一些明明存在的文件時卻搜索不到,使用了updatedb命令之后也沒有效果。
          做一個演示,在系統“/tmp”目錄下新建一個文件,名為12345678910.test,這個文件名我認為已經夠特殊了。

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

          其中我們看到了“/tmp”目錄,這有什么聯系呢?

          當你閱讀完幫助文檔之后你就會明白,數據文件的加載是有一定的規則的,這些個規則就在“/etc/updatedb.conf”文件中配置,我們會看到,這個配置文件中定義了哪些文件系統需要排除掃描,哪些文件名需要排除掃描,以及哪些目錄需要排除掃描。而上圖中,“/tmp”目錄被列入排除掃描的路徑,所以,我們在“/tmp”目錄下做演示,出現搜索不到的問題,就沒有任何問題。
          locate命令能夠快速的定位到文件,開銷小,效率高,但是遺憾的是,他只能根據文件名來定位文件,而且使用上還有一些不方便(效率帶來的代價),或許要刷新數據文件,修改配置文件。

          強大的文件搜索命令:find
          find命令非常強大,選項非常多,以至于你能想象到的搜索功能他幾乎都能實現。下面列舉幾個常用的示例。

          示例1:通過文件名匹配
          find [目錄] -name 文件名,目錄是可選項,如果不設置,則從根目錄開始匹配,但是強烈建議縮小查找的范圍,節約系統開銷,如果有需要,還可以添加“-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:]:匹配任意一個字母或數字
          示例:find ~ -name “[[:alnum:]]*.cfg”,查找家目錄下含有字母或者數字,并且以”.cfg”結尾的文件
          下列字符類使用方式相同
          [:alpha:]:匹配任意一個字母
          [:digit:]:匹配任意一個數字
          [:lower:]:匹配任意一個小寫字母
          [:upper]:匹配任意一個大寫字母

          示例2:通過所屬用戶來匹配
          有些時候,在一些公共目錄,有很多其他用戶創建的文件,我們需要把他們過濾掉
          指定所屬用戶:-user 用戶名
          示例:find /tmp -user root -name “a*”,查找tmp目錄下所有以a開頭并且屬于root用戶的文件
          順便一提,有些文件沒有所屬用戶,可以添加-nouser進行篩選。(沒有所有者的文件,一般認為是垃圾文件,但是內核產生的文件不會有所有者,比如內存文件,或者是外來文件,一般是外接設備帶來的數據,除了這兩種情況,其他情況都視為垃圾文件)

          示例3:通多特定時間來匹配
          -atime 文件訪問時間 +-10(默認單位”天“)
          -ctime 改變文件屬性 +-10
          -mtime 修改文件內容 +-10
          示例:
          find ~-mtime +10 搜索十天之前,修改過內容的文件
          find ~ -ctime -10 搜索十天之內,修改過文件屬性
          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,還需要在一天之內被訪問過的文件。

          命令交接
          -exec XXX {} \; 固定格式 ,XXX代表需要的命令,但是要注意,不是所有命令都適用
          find ~ -size +25k -o -size -10k -exec ls -l {} \;
          將查詢的結果通過一個指定的命令進行處理
          上面記錄的僅僅是選項中很小的一部分,更多需求還需要查閱幫助手冊或者搜索引擎。

          posted on 2015-06-21 14:47 都較瘦 閱讀(133) 評論(0)  編輯  收藏 所屬分類: Linux

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          公告

          博客定位:囿于目前的水平,博客定位在記錄自己的學習心得和隨手的練習

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 广水市| 雷州市| 宣汉县| 镇坪县| 东阳市| 班戈县| 梧州市| 忻州市| 枣阳市| 兴山县| 九龙县| 闻喜县| 白水县| 巢湖市| 金乡县| 伊通| 天津市| 中牟县| 安仁县| 开江县| 尤溪县| 张家口市| 新安县| 翁源县| 封丘县| 绥棱县| 裕民县| 化州市| 新巴尔虎右旗| 福海县| 瑞安市| 高尔夫| 仪陇县| 虞城县| 蓬溪县| 靖州| 鲜城| 茶陵县| 巧家县| 连南| 萝北县|