hugomg Asked: 2019-01-03 08:14:07 +0800 CST2019-01-03 08:14:07 +0800 CST 2019-01-03 08:14:07 +0800 CST 为什么 `updatedb` 程序运行得这么快? 772 通常,当我有程序正在执行全盘扫描并检查系统中的所有文件时,它们需要很长时间才能运行。相比之下,为什么 updatedb 运行得这么快? performance updatedb 2 个回答 Voted Best Answer Stephen Kitt 2019-01-03T08:20:04+08:002019-01-03T08:20:04+08:00 答案取决于locate您使用的版本,但很有可能它是mlocate,它updatedb通过避免进行全盘扫描而快速运行: mlocate 是一个定位/更新数据库实现。'm' 代表“合并”:updatedb 重用现有数据库以避免重新读取大部分文件系统,这使得 updatedb 更快并且不会过多地破坏系统缓存。 (数据库存储每个目录的时间戳,ctime或mtime,以较新的为准。) 与 , 的大多数实现一样updatedb,mlocate也将跳过配置为忽略的文件系统和路径。默认情况下没有mlocate's ,但发行版通常提供updatedb.conf忽略网络文件系统、虚拟文件系统等的基本配置(例如,参见Debian 的配置文件;这是 Debian 中的标准做法,因此 GNU 的updatedb配置类似)。 hugomg 2019-01-03T15:27:24+08:002019-01-03T15:27:24+08:00 除了检查修改时间之外,mlocate还会忽略文件系统的某些子树,这些子树有很多不感兴趣或可能重复的文件,如 /etc/updatedb.conf 中指定的(并在man updatedb.conf中描述): 绑定坐骑 某些类型的文件系统(9p、afs、bdev 等) VCS 存储库数据库(.git、.hg 等) 一些硬编码目录(/media、/tmp、/var/spool/cups 等)。
答案取决于
locate
您使用的版本,但很有可能它是mlocate
,它updatedb
通过避免进行全盘扫描而快速运行:(数据库存储每个目录的时间戳,
ctime
或mtime
,以较新的为准。)与 , 的大多数实现一样
updatedb
,mlocate
也将跳过配置为忽略的文件系统和路径。默认情况下没有mlocate
's ,但发行版通常提供updatedb.conf
忽略网络文件系统、虚拟文件系统等的基本配置(例如,参见Debian 的配置文件;这是 Debian 中的标准做法,因此 GNU 的updatedb
配置类似)。除了检查修改时间之外,
mlocate
还会忽略文件系统的某些子树,这些子树有很多不感兴趣或可能重复的文件,如 /etc/updatedb.conf 中指定的(并在man updatedb.conf中描述):