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

hug*_*omg 25 performance updatedb

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

Ste*_*itt 23

答案取决于版本locate你使用,但有一个公平的机会是mlocate,他的updatedb奔驰,避免做整盘扫描:

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

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

像 , 的大多数实现一样updatedbmlocate也会跳过它配置为忽略的文件系统和路径。默认有没有在mlocate的情况下,但分布通常提供一个基本updatedb.conf而忽略网络文件系统,虚拟文件系统等(详见Debian的配置文件例如,这是在Debian中的标准实践,所以GNU的updatedb类似地配置)。

  • @hugomg 我认为实际上并没有。它应该只更改其直接父级的 `mtime`。 (4认同)

hug*_*omg 9

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

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