locate (即定位)是一種常用的 Unix 工具,用於通過文件名快速查找文件。與 find 工具相比,locate 通過搜索預先構建的資料庫文件,而不是直接搜索文件系統,提高了查找速度。這種方法的缺點是,locate
無法檢測到資料庫文件生成後的更改。通過按計劃更新資料庫,可以將這一問題降至最低。
隨著時間的推移,各種替代實現經歷了迭代更替:從僅顯示用戶可訪問文件的 slocate(secure locate,安全定位),到每次更新時合併資料庫的 mlocate(merging locate,合併定位)—— 這種合併機制通過跳過已檢查文件實現了性能提升,再到如今基於倒排列表構建的 plocate(posting locate,列表定位),它通過預先處理資料庫生成速度更快、體積更小的索引。
安裝
安裝 plocate包 軟體包。它提供了 plocate
、updatedb
、plocate-build
等命令以及指向 plocate
的符號連結 locate
、mlocate
。
雖然 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
設置。