locate
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
设置。