跳至內容
出自 Arch Linux 中文维基

locate (即定位)是一種常用的 Unix 工具,用於通過文件名快速查找文件。與 find 工具相比,locate 通過搜索預先構建的資料庫文件,而不是直接搜索文件系統,提高了查找速度。這種方法的缺點是,locate 無法檢測到資料庫文件生成後的更改。通過按計劃更新資料庫,可以將這一問題降至最低。

隨著時間的推移,各種替代實現經歷了迭代更替:從僅顯示用戶可訪問文件的 slocate(secure locate,安全定位),到每次更新時合併資料庫的 mlocate(merging locate,合併定位)—— 這種合併機制通過跳過已檢查文件實現了性能提升,再到如今基於倒排列表構建的 plocate(posting locate,列表定位),它通過預先處理資料庫生成速度更快、體積更小的索引。

安裝

安裝 plocate 軟體包。它提供了 plocateupdatedbplocate-build 等命令以及指向 plocate 的符號連結 locatemlocate

雖然 GNU findutils 也包含 locate 實現,但 Arch 的 findutils 軟體包並不包含。

LS-Shandong 維護了一個 plocate 分叉,這個分叉包含了 Steinar 正考慮合併入官方 plocate 的 i18n 支持及軟體的簡體中文翻譯和手冊頁翻譯。安裝 plocate-enhanced-gitAUR 軟體包以獲取它。

用法

在使用 plocate(1) 之前,需要先創建資料庫,這可以通過 updatedb(8) 命令完成,顧名思義,該命令用於更新資料庫。

plocate 包含一個 plocate-updatedb.timer 單元,每天都會調用資料庫更新,安裝時已啟用。如果想在重啟前使用,請手動啟動啟動。您也可以隨時以根用戶身份手動運行 updatedb

為節省時間,(默認情況下)可以通過編輯 /etc/updatedb.conf 配置 updatedb 忽略某些文件系統和路徑。updatedb.conf(5) 介紹了該文件的語義。值得注意的是,默認配置(PRUNEPATHS)中忽略的路徑包括 /media/mnt,因此 locate 可能無法發現外部設備上的文件。

問題解決

Btrfs

默認配置會阻止結果中包含 Btrfs 文件系統。要允許包含 btrfs 掛載點,請添加

/etc/updatedb.conf
PRUNE_BIND_MOUNTS = "no"

當然,這也意味著其他綁定掛載點也會被包含在內。如果需要排除這些掛載點,可以使用同一配置文件中的 PRUNEPATHS 設置。

參見