如何更新 Linux“定位”缓存

swe*_*dev 106 debian locate

如何更新locate的缓存/索引?我安装了新软件包,但这些文件显然尚未编入索引。那么我必须提交哪个命令才能触发索引器?

我目前正在开发 debian jessie(测试):使用 Linux mbpc 3.13-1-amd64 #1 SMP Debian 3.13.7-1 (2014-03-25) x86_64 GNU/Linux

小智 149

命令是:

sudo updatedb
Run Code Online (Sandbox Code Playgroud)

有关man updatedb更多详细信息,请参阅。

  • 如果你不是 root,无论如何你都不应该在 ServerFault 上...... (22认同)
  • @JennyD 这不是 ServerFault ...... (8认同)
  • 这里要注意一点,此命令在 Debian Stretch RC3 和 Sata SSD 驱动器上运行约 13 分钟,因此请耐心等待。 (2认同)

jco*_*lum 27

在 OSX 上,这是: sudo /usr/libexec/locate.updatedb

可以链接到: sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedb

必须为标准 unix 命令创建符号链接似乎很愚蠢,但确实如此。


wol*_*anx 6

而答案:

sudo updatedb
Run Code Online (Sandbox Code Playgroud)

从技术上讲是正确的,updatedb如果还安装了 cron 作业,单独在命令行上运行几乎从来都不是一个好主意。根据 Unix 风格,cronjob 包含锁定条款和独立updatedb命令未涵盖的任何数量的配置。

如果 locate 数据库需要经常更新,那么为特定主机确定合适的 cron 作业并手动运行它绝对值得。

根据管理员的不同,cronjob forupdatedb可能隐藏在不同的位置。因此,寻找 cron 作业的简单暴力尝试是:

( sudo crontab -l > /tmp/crontab.root;
  ( echo /tmp/crontab.root; ls -1d /etc/*cron* /etc/*cron*/* ) \
  | tr '\n' '\0' \
  | xargs -0 -r -e grep -nH -e updatedb;
  rm -f /tmp/crontab.root
) 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

在我的 Ubuntu 系统之一上显示以下结果:

/etc/cron.daily/mlocate:5:[ -x /usr/bin/updatedb.mlocate ] || exit 0
/etc/cron.daily/mlocate:21:flock --nonblock /run/mlocate.daily.lock $IONICE /usr/bin/updatedb.mlocate
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下更新定位数据库的正确命令是

/etc/cron.daily/mlocate:5:[ -x /usr/bin/updatedb.mlocate ] || exit 0
/etc/cron.daily/mlocate:21:flock --nonblock /run/mlocate.daily.lock $IONICE /usr/bin/updatedb.mlocate
Run Code Online (Sandbox Code Playgroud)

更系统的方法是确定提供locate和的包updatedb

例如,在带有 apt/dpkg 包装的操作系统上,您可以找到安装了哪种风格的 locate:

sudo /etc/cron.daily/mlocate
Run Code Online (Sandbox Code Playgroud)

就我而言,它是:

mlocate: /usr/bin/updatedb.mlocate
Run Code Online (Sandbox Code Playgroud)

要查看哪个 cron 作业(如果有)负责,请运行:

dpkg -L mlocate | grep cron
Run Code Online (Sandbox Code Playgroud)

在我的情况下显示:

/etc/cron.daily
/etc/cron.daily/mlocate
Run Code Online (Sandbox Code Playgroud)

要更新数据库,请以 root 身份运行 cron 作业:

dpkg -S locate | grep /bin/
Run Code Online (Sandbox Code Playgroud)

如果没有 cronjob,并且 updatedb 本身不起作用,请尝试使用以下命令查找已安装的风格:

mlocate: /usr/bin/updatedb.mlocate
Run Code Online (Sandbox Code Playgroud)

返回:

/usr/bin/mlocate
/usr/bin/updatedb.mlocate
Run Code Online (Sandbox Code Playgroud)

注意:如果你不赞成这个答案,那么好,让我知道为什么业余爱好者的答案被认为更好。