3.3.2 数据库查找:locate

与find不同,locate命令依赖于一个数据库文件,Linux系统默认每天会检索一下系统中的所有文件,然后将检索到的文件记录到数据库中。在运行locate命令的时候可直接到数据库中查找记录并打印到屏幕上,所以使用locate命令要比find命令反馈更为迅速。在执行这个命令之前一般需要执行updatedb命令(这不是必须的,因为系统每天会自动检索并更新数据库信息,但是有时候会因为文件发生了变化而系统还没有再次更新而无法找到实际上确实存在的文件。所以有时需要主动运行该命令,以创建最新的文件列表数据库),以及时更新数据库记录。下面是使用locate命令来查找httpd.conf文件:


  1. [root@localhost ~]# updatedb

  2. [root@localhost ~]# locate httpd.conf

  3. etchttpd/conf/httpd.conf


为了让大家更好地理解locate的工作原理,在这里给大家展示一个实验,如下所示:


#

创建一个文件

[root@localhost ~]# touch test_locate

#

用find

命令查找

[root@localhost ~]# find / -name test_locate

roottest_locate #

找到了

#

再用locate

找一下

[root@localhost ~]# locate test_locate

[root@localhost ~]# #

没找到!为什么?

#

执行一下updatedb

,更新数据库

[root@localhost ~]# updatedb

[root@localhost ~]# locate test_locate

roottest_locate #

找到了!说明由于没有更新数据库,所以无法使用locate

命令找到刚创建的文件

#

将该文件删除

[root@localhost ~]# rm test_locate

rm: remove regular empty file 'test_locate'? y #

确认删除了

#

再次locate

,但仍然可以找到

[root@localhost ~]# locate test_locate

roottest_locate

#

用updatedb

再次更新一下

[root@localhost ~]# updatedb

[root@localhost ~]# locate test_locate

[root@localhost ~]# #

再找,没有这个文件了


这个实验表明,locate命令依赖于其用于记录文件的数据库,该数据库需要使用updatedb来更新。当然,系统每天也会自动运行一次,但是不必等系统运行,必要的时候可主动进行手动更新。