为什么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

为什么定位无法找到此文件?

答案1

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

答案2

如果你无法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具有硬编码路径(搜索位置),因此可能无法始终找到您要查找的内容。

答案3

我有点懒,不想跑步sudo updatedb,而且因为我有一台可以为我工作的电脑,它sudo updatedb每 15 分钟运行一次,所以我不需要跑步。

使用sudo crontab -e并找到此行:

# m h  dom mon dow   command

在其下方插入:

*/15 *  *   *   *     /usr/bin/updatedb

然后按Ctrl+O保存文件(写入ut)然后 Ctrl+X到 eX它。

但是,如果您在过去 15 分钟内创建了文件,则仍然需要运行:

sudo updatedb

...手动更新命令使用的索引locate

答案4

我的解决方案非常快(但可能不是最佳的,因为你的sudo updatedb命令需要更多时间)。但是,即使你有多个分区,你也不会错过任何文件(这对我来说很方便)。

我打开了配置文件updated(您需要sudo 权限才能保存以下文件):

nano /etc/updatedb.conf

然后我注释掉(#在行首添加)所有以以下内容开头的行: PRUNENAMES PRUNEPATHS PRUNEFS

保存文件(CTRL+OENTERCTRL+X)。

我希望这对其他人有帮助。

相关内容