Linux檔案查詢工具的探索

roc_guo發表於2021-03-25

經過  Linux 系統不斷探索 ,不斷髮展到現代文明,我們都必須堅信: 一個典型的 Linux 系統 包含 很多檔案的,即是由檔案組成的!那麼新的問題就會湧現到我們的腦海中-- “我們如何查詢呢?”。當然,發展到現在的 Linux 檔案系統 已經 被良好地組織起來了。 不過呢, 海量的檔案 往往 會引起 一些可怕的問題。

 

作為一名 LINUX 運維人員,每天面對著這些 linux 系統實際生產環境,必須有過硬的技術能力和良好的心理素質才能勝任。 在今天這篇文章中,我們將介紹2 個用來查詢檔案的工具。

命令 locate updatedb find xargs 都是 GNU 專案 findutils 軟體包的一部分。這個 GUN 專案提供了大量的線上文件,這些文件相當出色,如果你在高安全性的環境中使用 這些程式,你應該讀讀相關文件。當然,在編寫這篇文章過程中我還參考了 這本書,內容很貼近實踐,很有理論指導實踐價值的一本書籍。

GNU 查詢實用程式是 GNU 作業系統的基本目錄搜尋實用程式。這些程式通常與其他程式結合使用,以便向其他命令提供模組化和強大的目錄搜尋和檔案定位功能。

此包隨附的工具包括:

  Find -- search for files in a directory hierarchy

// 在目錄層次結構中搜尋檔案

  locate --list files in databases that match a pattern    

// 列出與模式匹配的資料庫中的檔案

  updatedb -- update a file name database

// 更新檔名資料庫

  xargs -- build and execute command lines from standard input

// 從標準輸入生成和執行命令列

find 程式搜尋目錄樹以查詢檔案或檔案組。它遍歷目錄樹並報告與使用者規範匹配的檔案的所有出現。 find 程式包括非常強大的搜尋功能。

locate 程式掃描一個或多個檔名資料庫並顯示任何匹配項。如果檔案存在於上一個檔名資料庫更新期間,這可用作非常快速的查詢命令。

updatedb 程式更新定位程式使用的檔名資料庫。檔名資料庫包含上次更新資料庫時在特定目錄樹中的檔案列表。這通常每晚由 cron 系統守護程式執行。

xargs 程式透過收集它在標準輸入上讀取的引數來生成和執行命令列。大多數情況下,這些引數是由 find 生成的檔名列表。

下面是一個示例操作,使子目錄 docs 中的所有 HTML 檔案由所有使用 find xargs 的可讀性。這是一個典型的示例,說明 Find xarg 如何與其他實用程式一起使用,以提供強大的目錄遍歷功能。

[ centos @linux ~]$ find docs -name '*.html' -print0 | xargs -0 chmod a+r

查詢檔案的簡單方法 --  locate

Locate 命令 會執行一次快速的路徑名資料庫搜尋 程式 同時 輸出每個與給定子字串相匹配的 路徑名稱。例如:我們想要找到 test /”   目錄下所有以 zip” 開頭的程式 名稱 接下來 ,我們 這種方式使用 locate 命令, 用來 到我們想要的檔案:

[me@linux ~]$ locate test /zip

locate 命令將會搜尋它的路徑名資料庫,輸出任一個包含字串 tset /zip” 的路徑名:

114/usr/test/zip

/usr/test/zipinfo

/usr/test/zipgrep

複雜點的話,  locate 可以結合其它工具,比如說 grep 命令,來設計更加有 趣的搜尋方式:

[ Centos @ Linux  ~]$ locate zip | grep test

/test/bunzip2

/test/bzip2

/test/gzip

/usr/test/unzip

/usr/test/unzipsfx

/usr/test/zip

/usr/test/zipgrep

/usr/test/zipinfo

查詢檔案的複雜方式 -- find

locate 程式 有一個缺陷是 只能依據檔名來查詢檔案,而 find 程式 支援 基於各種各樣的屬性搜尋一個給定目錄 或者它的子目錄,來執行查詢檔案程式。本人建議要花費大量的時間去學習  find 命令,因為它有許多有趣 的特性,很有意思的。

比較簡單的應用方式中,  find 命令 接收一個或多個目錄名 來執行搜尋 程式 。例如,輸出我們 的家目錄的路徑名列表:

[ Centos @linux ~]$ find ~

對於一個比較活躍的使用者帳號,這條命令將會產生一張很大的列表。避免檢視不方便的現象,我們可以把這個列表透過管道符號輸出到其它的程式中。例如:使用  wc 程式來計算出檔案的數量:

[ Centos @  ~]$ find ~ | wc -l

10029

透過 find 命令 用來找到符合特定標準的檔案,這就是它的魅力所在。

個人總結了些find 命令選項,這些選項被用作配合 find 命令 限定一定的 搜尋範圍。 當構建 find 表示式的時 候,這些選型可能會被其它的測試條件和行為包含或者覆蓋。常見選項的列表:

選型

描述

-depth

指示  find 程式先處理目錄中的檔案,再處理目錄自身。當 指定 -delete 行為時,會自動應用這個選項。

-maxdepth levels

當執行測試條件和行為的時候,設定  find 程式陷入目錄樹 的最大級別數

-mindepth levels

在應用測試條件和行為之前,設定  find 程式陷入目錄數的 最小級別數。

-mount

指示  find 程式不要搜尋掛載到其它檔案系統上的目錄。

-noleaf

指示  find 程式不要基於自己在搜尋 Unix 的檔案系統的假 設,來最佳化它的搜尋。在搜尋  DOS/Windows 檔案系統和CD/ROMS 的時候,我們需要這個選項

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2764991/,如需轉載,請註明出處,否則將追究法律責任。

相關文章