當前位置:
首頁 > 最新 > Linux下的文件查找

Linux下的文件查找

當計算機中的文件多到一定程度,憑記憶查找特定的文件會變得很麻煩,我們就需要藉助一些工具。

大約在十年前,MS Windows 下一款叫的文件查找軟體很流行,據說是日常工作的利器。不過,我對這樣的小工具不太感興趣:從十多年前開始,除了要處理必須用 Word 的行政管理類文件,我幾乎沒怎麼用過 Windows,這是原因之一。另一個原因,在 Linux/Unix 下,這樣的文件檢索工具是系統自帶的,沒必要為這樣的功能去費心尋找軟體。這些年來,Linux 下的軟體發展很迅速,文件查找類工具也經歷過很多演變,不妨小結一下。

文件查找類工具可大致分為兩大類:一類是無資料庫的遍歷檢索,其代表是 GNUfindutils套件;另一類是有資料庫的緩衝檢索,從古老的slocate到現代桌面系統的各類「語義檢索」,如 GNOME 下Tracker和 KDE 下的Baloo。不妨分類簡介之。

是一個老牌的 Unix 命令,大多數類 Unix 系統中都默認安裝了。它能在一或多個目錄樹下查找並定位文件,對匹配的文件執行相應的操作。其查找功能十分強大,包括通配符、正規表達式運算、類型時間等屬性匹配,等等。 是用來查找任意文件的,它需要能夠實時訪問存儲介質。

命令最早在 Unix V5 (1974 年)中引入,並成為 POSIX 系統的一部分。早期的 設計是為了同 命令一起使用,最常見的場景是把特定的文件打包備份到磁帶上。

目前使用最多的是 GNU 實現的自由軟體 中所包含的 GNU find,它添加了許多傳統 Unix 下所沒有的特性。在 軟體包中還有另一個命令 , 它的主要用於通過管道操作對 的輸出進行調整,以便其他命令執行進一步的處理。

熟練使用 , 與其他命令的組合,會讓日常文件的維護管理變得很便利。比如,將當前目錄下在過去 60 分鐘內被修改的實驗數據文件全部打包壓縮到一個文件中,如下一個命令就足夠了:

find . -cmin -60 -iname "*.bin" | xargs tar Jcvf exp-1h.tar.xz

要查找可執行文件、程序參考文檔等特殊文件,一般不用 , 而是用 包中提供的 命令,或者用 bash/zsh 等 shell 中內嵌的 及 命令。


當目錄下文件很多時,或者要檢索整個系統文件時(比如 ),使用 的檢索速度會很慢,這是因為 命令需要實時讀取存儲介質的索引(也就是文件系統的 inode)。其實,系統中有大量的文件很少會變更,如果把這些文件信息建立一個資料庫,再從這個小資料庫中查找,就會比檢索整個文件系統快很多。這就是 Unix 系統上的 命令所實現的功能。

命令最早於 1983 年出現在 Unix 系統上。其後有多個變種,包括 (a.k.a., Secure Locate), 以及 . 其中 出現最晚,由於其性能比其他幾個實現更好,是目前許多 Linux 系統中默認的 命令提供者。其中的 也代表著 , 即合併了以前的多個 命令實現。

命令的使用需要經過如下幾步:

安裝 軟體包,比如

建立文件索引,需要執行命令 , 會創建一個數據文件(大致位於 )

使用 檢索文件。

當系統文件有變更時,相應的 資料庫也需要變更,因此,使用 包通常需要創建一個系統定時任務 (),讓系統在指定時間(如半夜時分)更新該資料庫。

圖形界面是現代桌面型操作系統的標配。這些年來,流行的操作系統中都提供了文件管理器類工具,文件檢索也是這類程序的標配功能,並且,現代的文件檢索不僅能檢索文件名,還能夠按關鍵字檢索可讀取文檔全文。在 Unix/Linux 桌面系統中也具備了相應的功能。這類能夠對部分類型的全文及附加屬性進行檢索的軟體叫「語義檢索」(semantic searching)。

與 類似,語義檢索也需要建立相應的索引資料庫。 程序只是對文件名建立一個索引資料庫,其刷新資料庫和檢索的操作都比較快。語義檢索的索引資料庫通常較大,其中不止包含文件名信息,還有很多文件的關聯屬性,也就是文件的「元數據」(metadata),如 EXIF 信息、用戶添加的標籤,等等。相應地,建立語義索引的時間也比較久。

很多人在初次接觸到 GNOME Tracker或 Plamsa (KDE) Baloo 時,往往會關閉語義檢索功能,就是因為建立語義索引會消耗額外的硬碟空間,並且,其索引守護進程在監視系統文件變更時會降低系統的響應時間。其實,如果系統性能足夠,語義檢索會給桌面應用帶來很多便利。

目前,在 Linux/Unix 下流行的語義檢索軟體有兩個:GNOME 桌面下的Tracker和 KDE 桌面(plasma)下的Baloo(巴魯)。在圖形界面下使用文件瀏覽器進行檢索時,在後台提供支撐的就是這兩個軟體之一。

GNOME 桌面的默認文件瀏覽器是 Nautilus,在其文件檢索框內可以按類型、時間、文件名等進行關鍵字搜索。其後台提供服務的程序是 Tracker.

Tracker 使用 作為資料庫引擎,主命令 下有一系列的子命令,提供了文件系統變更監視、檢索、SQL 查詢、標籤管理等功能。不使用圖形界面,你也可以在命令行下或腳本中很高效地使用語義檢索。


KDE 桌面在 4.0 版本初期使用了 Nepomuk 和 Strigi 來提供語義檢索功能。Nepomuk 使用RDF嘗試將所有的元數據都連接起來。RDF 也是語義網路的信息建模標準,是一項十分先進的技術。可是,處理 RDF 信息在初期需要耗費大量的系統資源和時間,導致系統響應緩慢,資料庫也變得很臃腫。從 4.13 版本開始,KDE 桌面檢索切換到了 Baloo 引擎,不再使用 RDF 作為中心資料庫,而是採用插件的形式來分類處理各種服務。

與 Tracker 類似, Baloo 提供了一個底層命令介面 , 你可以通過這個命令在執行相應的語義檢索操作。當然,你可以拋開命令行,通過 Dolphin或 Konqueror 等圖形工具進行檢索。不過,在一些效率至上的場景下,命令行會比圖形操作更便捷。


在 Linux 檢索文件有兩大類:

這樣的實時硬檢索工具,它需要遍歷文件系統來查找文件,當文件數據龐大時,操作會很慢。

使用資料庫進行緩衝的檢索工具,包括早期的 及現代的 或 .

在文件刷新迅速的場合,使用 命令快速檢索一個目錄下的內容會比較恰當。當從很多幾乎不再變更的歷史文件中檢索資料時,使用古老的 或現代的 , 等工具則比較合適。


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

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


請您繼續閱讀更多來自 簡齋漫談 的精彩文章:

TAG:簡齋漫談 |