为什么locate命令找不到明显的文件?

locate命令听起来很直观。 我希望它能找到文件系统上的文件。 但是,它很少在系统上找到确实存在的文件:

$ locate ipsec.secrets 

即使从文件系统根目录/运行,也不会产生任何结果。 该文件确实存在:

 $ whereis ipsec.secrets ipsec: /usr/sbin/ipsec /etc/ipsec.secrets /etc/ipsec.d /etc/ipsec.conf /usr/lib/ipsec /usr/share/man/man8/ipsec.8.gz 

为什么找不到这个文件?

updatedb每天只运行一次,您需要以root权限运行它以查找最近的文件。

如果您无法locate 明显存在的文件,我只看到两种可能:

  1. 文件(目录)是在上次更新locate数据库之后创建的。 默认情况下,它会在一天内更新一次( /etc/cron.daily/mlocate )。
    有足够的权限,您可以修复它强制更新

     sudo updatedb 
  2. 文件(目录)是在未被updatedb扫描的路径下创建的(更罕见的情况):您可以在配置文件/etc/updatedb.conf找到已修剪文件的键。 搜索PRUNENAMES,PRUNEPATHS或PRUNEFS并进行修改,然后再次更新数据库。

     sudo pico /etc/updatedb.conf sudo updatedb 

当然,即使没有权限,您仍然可以搜索该文件,例如从某个位置开始扫描所有目录和子目录

 find . -name '*ipsec.secrets*' # to start from the current directory find / -name '*ipsec.secrets*' # to start from the root # long long 

请注意whereis有一个硬编码路径(在哪里搜索),因此可能无法始终找到您要查找的内容。