![为什么locate命令找不到明显的文件?](https://linux22.com/image/1103073/%E4%B8%BA%E4%BB%80%E4%B9%88locate%E5%91%BD%E4%BB%A4%E6%89%BE%E4%B8%8D%E5%88%B0%E6%98%8E%E6%98%BE%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
定位命令听起来很直观。我期望它能找到文件系统上的文件。然而,它很少能找到系统上确实存在的文件:
$ 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
提交显然存在
我只看到两种可能性:
该文件(目录)是在locate数据库上次更新后创建的。默认情况下,它每天更新一次(
/etc/cron.daily/mlocate
)。
如果有足够的权限,你可以修复它,强制更新sudo updatedb
该文件(目录)是在 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+O
,ENTER
,CTRL+X
)。
我希望这对其他人有帮助。