如何更新Linux“定位”缓存

如何更新Linux“定位”缓存

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

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

答案1

命令是:

sudo updatedb

man updatedb更多细节。

答案2

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

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

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

答案3

而答案是:

sudo updatedb

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

如果定位数据库需要频繁更新,那么绝对值得努力为特定主机确定正确的 cron 作业并手动运行它。

根据管理员的不同,cronjobupdatedb可能隐藏在不同的位置。因此,寻找 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

它在我的 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

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

sudo /etc/cron.daily/mlocate

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

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

dpkg -S locate | grep /bin/

就我而言,它是:

mlocate: /usr/bin/updatedb.mlocate

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

dpkg -L mlocate | grep cron

就我而言,这表明:

/etc/cron.daily
/etc/cron.daily/mlocate

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

sudo /etc/cron.daily/mlocate

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

dpkg -L mlocate | grep /bin/

返回:

/usr/bin/mlocate
/usr/bin/updatedb.mlocate

更新

还有另一种方法可以使用名为的 oneshot systemd 服务每天运行 Updatedb更新数据库服务,mlocate-updatedb.service等。该服务由相应的定时器触发更新数据库定时器,mlocate-updatedb.timer。这是我在存储库中找到的示例服务文件:

[Service]
Type=oneshot
ExecStart=/usr/bin/updatedb
IOSchedulingClass=idle

尽管ionice -c 3 /usr/bin/updatedb在这种情况下它只是调用,但最好还是启动该服务,确保它在正确的环境中运行,而无需仔细检查服务文件以了解系统维护人员在更新期间引入的更改:

sudo systemctl start updatedb.service

除了检查包文件列表之外,还可以使用如下命令来检查服务:

systemctl list-unit-files | grep 'updatedb\|locate'

答案4

“locate”包通常附带一个每天运行并更新locate 数据库的cronjob。

您可以手动运行 cronjob 来强制更新locate 数据库。

在 Debian 上,你可以这样做:

sudo /etc/cron.daily/locate

请注意,这可能会运行一段时间,具体取决于系统性能和要扫描的文件量。

相关内容