hug*_*omg 25 performance updatedb
通常,当我的程序进行全盘扫描并检查系统中的所有文件时,它们需要很长时间才能运行。相比之下,为什么updatedb 运行得如此之快?
Ste*_*itt 23
答案取决于版本locate
你使用,但有一个公平的机会是mlocate
,他的updatedb
奔驰,避免做整盘扫描:
mlocate 是一个 locate/updatedb 实现。'm' 代表“合并”:updatedb 重用现有数据库以避免重新读取大部分文件系统,这使得 updatedb 更快并且不会破坏系统缓存。
(数据库存储每个目录的时间戳,ctime
或mtime
,以较新者为准。)
像 , 的大多数实现一样updatedb
,mlocate
也会跳过它配置为忽略的文件系统和路径。默认有没有在mlocate
的情况下,但分布通常提供一个基本updatedb.conf
而忽略网络文件系统,虚拟文件系统等(详见Debian的配置文件例如,这是在Debian中的标准实践,所以GNU的updatedb
被类似地配置)。
除了检查修改时间之外,mlocate
还会忽略文件系统的某些子树,这些子树具有许多无趣或可能重复的文件,如 /etc/updatedb.conf 中所指定(并在man updatedb.conf 中描述):