9.4 更新locate使用的数据库

updatedb

9.1节在介绍locate命令时曾经提到:该命令的执行之所以这么快,是因为它实际上搜索的是一个包含计算机中所有文件和目录名称的数据库。在安装locate时,就将它自动设置为扫描硬盘和更新数据库(通常是在午夜时进行)。这样设置确实很方便,但如果需要查找刚在计算机上放置的文件,就不是很方便了。

例如,如果你安装了Rootkit Hunter(一个用于查找rootkits的程序,黑客经常用rootkits来控制你的Linux计算机),接着想看看程序安装的文件。在这种情况下,locate命令就帮不上忙了,因为它现在还不知道这些新安装好的文件,而且直到它的数据库得以更新之前,locate命令都不会知道这些新文件的存在。不过,在任何时候都能够通过运行updatedb,手动更新locate使用的数据库。因为这个命令基本上会为计算机上的每个文件和文件夹编制索引,所以需要以root用户的身份来运行它(或使用K/Ubuntu这样Linux系统中的sudo命令,这些系统不鼓励使用root)。

  1. # apt-get install rkhunter
  2. # exit
  3. $ locate rkhunter
  4. $ su -
  5. # updatedb
  6. # exit
  7. $ locate rkhunter
  8. /usr/local/rkhunter
  9. /usr/local/rkhunter/bin
  10. /usr/local/rkhunter/etc

在上述命令中,首先安装了rkhunter(Rootkit Hunter的程序包名),然后退出root。之后搜索rkhunter,但没有结果。再成为root用户,运行updatedb,扫描硬盘空间,让locate数据库知道新发生的任何变化,然后退出root。最后再使用locate搜索rkhunter,这次就搜索到了。

但这里应该注意一件事:updatedb运行的速度与硬盘中资料的数量以及计算机的处理速度有直接关系。处理器的速度越快、硬盘的速度越快、文件越少,updatedb也就运行得越快。如果CPU很慢,硬盘的转速才有5 400 RPM,而且还有100万个文件,那就别指望updatedb能快到哪去。如果想知道updatedb的运行花费了多长时间,可以在updatedb前面加上time命令,如下所示:

  1. # time updatedb

updatedb处理完成以后,time命令就能显示整理好locate数据库花费了多长时间。这个信息很有用,需要记住,可能以后会需要使用updatedb而时间又很紧。

说明 实际上,updatedb命令与slocate -u完全相同,而且updatedb实际上只是一个指向slocate的链接,很容易就可以搞清楚这一点。

  1. $ ls -l /usr/bin/updatedb
  2. root root /usr/bin/updatedb -> slocate