locate
locate 是一个常见的 Unix 工具,用于按名称快速查找文件。它通过搜索预先构建的数据库文件,而不是直接搜索文件系统,从而比 find 工具提供更快的速度。这种方法的缺点是,自数据库文件构建以来所做的更改无法被 locate
检测到。可以通过计划的数据库更新来最大限度地减少这个问题。
随着时间的推移,替代实现方案相互取代,从仅显示用户可访问文件的 slocate (安全 locate),到在每次更新时合并数据库的 mlocate (合并 locate),后者提供了性能加速,因为它能够跳过先前检查过的文件,再到今天的 plocate (发布 locate),它是一种基于倒排索引的 locate,提前消耗数据库并从中生成更快(更小)的索引。
安装
虽然 GNU findutils 也包含 locate 的实现,但 Arch 的 findutils 软件包没有。
用法
在使用 plocate(1) 之前,需要创建数据库,这可以通过 updatedb(8) 命令完成,顾名思义,该命令会更新数据库。
plocate 包含一个 plocate-updatedb.timer
单元,它每天调用一次数据库更新,并在安装时启用。如果您想在重启前使用它,请手动启动它。您也可以随时以 root 身份手动运行 updatedb。
为了节省时间,updatedb 可以(并且默认情况下是)配置为忽略某些文件系统和路径,方法是编辑 /etc/updatedb.conf
。updatedb.conf(5) 描述了这个文件的语义。值得注意的是,在默认配置(PRUNEPATHS
)中忽略的路径包括 /media
和 /mnt
,因此 locate 可能无法发现外部设备上的文件。
故障排除
Btrfs
默认配置阻止 Btrfs 文件系统包含在结果中。要允许包含 btrfs 挂载点,请添加
/etc/updatedb.conf
PRUNE_BIND_MOUNTS = "no"
当然请注意,这也意味着其他绑定挂载点也将被包含在内。如果您需要排除这些挂载点,可以使用同一配置文件中的 PRUNEPATHS
设置。