为什么“updatedb”程序运行得这么快?

为什么“updatedb”程序运行得这么快?

通常,当我有程序进行全磁盘扫描并检查系统中的所有文件时,它们需要很长时间才能运行。相比之下,为什么updatedb 运行得这么快?

答案1

答案取决于您使用的版本locate,但很可能是mlocateupdatedb,通过避免进行全盘扫描,其运行速度很快:

mlocate 是一个locate/updatedb 实现。 “m”代表“合并”:updatedb 重用现有数据库以避免重新读取大部分文件系统,这使得 updateb 更快并且不会浪费太多系统缓存。

(数据库存储每个目录的时间戳,ctimemtime,以较新者为准。)

与 的大多数实现一样updatedbmlocate也会跳过它配置为忽略的文件系统和路径。默认情况下, 's 情况下没有mlocate,但发行版通常提供一个基本的updatedb.conf,忽略网络文件系统、虚拟文件系统等(请参阅Debian 的配置文件例如;这是 Debian 中的标准做法,所以 GNUupdatedb配置类似)。

答案2

除了检查修改时间之外,mlocate还忽略文件系统的某些子树,这些子树具有大量无趣或可能重复的文件,如 /etc/updatedb.conf 中指定的(并在man updatedb.conf):

  • 绑定坐骑
  • 某些类型的文件系统(9p、afs、bdev 等)
  • VCS 存储库数据库(.git、.hg 等)
  • 一些硬编码目录(/media、/tmp、/var/spool/cups 等)。

相关内容