通常,当我有程序进行全磁盘扫描并检查系统中的所有文件时,它们需要很长时间才能运行。相比之下,为什么updatedb 运行得这么快?
答案1
答案取决于您使用的版本locate
,但很可能是mlocate
updatedb
,通过避免进行全盘扫描,其运行速度很快:
mlocate 是一个locate/updatedb 实现。 “m”代表“合并”:updatedb 重用现有数据库以避免重新读取大部分文件系统,这使得 updateb 更快并且不会浪费太多系统缓存。
(数据库存储每个目录的时间戳,ctime
或mtime
,以较新者为准。)
与 的大多数实现一样updatedb
,mlocate
也会跳过它配置为忽略的文件系统和路径。默认情况下, '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 等)。