如何更新locate的缓存/索引?我安装了新软件包,并且文件显然尚未索引。那么我必须提交哪个命令才能触发索引器?
我目前正在开发 debian jessie (测试):使用 Linux mbpc 3.13-1-amd64 #1 SMP Debian 3.13.7-1 (2014-03-25) x86_64 GNU/Linux
答案1
答案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
请注意,这可能会运行一段时间,具体取决于系统性能和要扫描的文件量。