locate

出自 ArchWiki

locate 是一个常见的 Unix 工具,用于按名称快速查找文件。它通过搜索预先构建的数据库文件,而不是直接搜索文件系统,从而比 find 工具提供更快的速度。这种方法的缺点是,自数据库文件构建以来所做的更改无法被 locate 检测到。可以通过计划的数据库更新来最大限度地减少这个问题。

随着时间的推移,替代实现方案相互取代,从仅显示用户可访问文件的 slocate (安全 locate),到在每次更新时合并数据库的 mlocate (合并 locate),后者提供了性能加速,因为它能够跳过先前检查过的文件,再到今天的 plocate (发布 locate),它是一种基于倒排索引的 locate,提前消耗数据库并从中生成更快(更小)的索引。

安装

安装 plocate 软件包。

虽然 GNU findutils 也包含 locate 的实现,但 Arch 的 findutils 软件包没有。

用法

在使用 plocate(1) 之前,需要创建数据库,这可以通过 updatedb(8) 命令完成,顾名思义,该命令会更新数据库。

plocate 包含一个 plocate-updatedb.timer 单元,它每天调用一次数据库更新,并在安装时启用。如果您想在重启前使用它,请手动启动它。您也可以随时以 root 身份手动运行 updatedb

为了节省时间,updatedb 可以(并且默认情况下是)配置为忽略某些文件系统和路径,方法是编辑 /etc/updatedb.confupdatedb.conf(5) 描述了这个文件的语义。值得注意的是,在默认配置(PRUNEPATHS)中忽略的路径包括 /media/mnt,因此 locate 可能无法发现外部设备上的文件。

故障排除

Btrfs

默认配置阻止 Btrfs 文件系统包含在结果中。要允许包含 btrfs 挂载点,请添加

/etc/updatedb.conf
PRUNE_BIND_MOUNTS = "no"

当然请注意,这也意味着其他绑定挂载点也将被包含在内。如果您需要排除这些挂载点,可以使用同一配置文件中的 PRUNEPATHS 设置。

参见