我想使用“locate”命令在我的系统中定位一个目录。我知道有一个名为“bench-repo”的目录。当我给出以下命令时,它显示以下错误:
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
为什么会发生这种情况?我如何找到该目录?
答案1
locate
( )使用的二进制数据库/var/lib/mlocate/mlocate.db
每天由 更新一次cron
,因此locate
不会找到新文件。
您可以通过先运行来修复此问题sudo updatedb
sudo updatedb && locate -e bench-repo
使用该-e
标志是一个好主意,这样您只能找到仍然存在的文件。
哦,这里还有一个额外提示——你可以locate
通过将以下内容传递给ls -l
ls -l $(locate -e bench-repo)
答案2
两个原因两个行动
一般来说,当您无法locate
归档或因为最近创建(上次数据库更新后)或因为它不在路径中其中 updatedb 将搜索其条目或匹配某些修剪规则(见下文):
如果是新文件或目录,如果你有足够的特权,你可以强制更新:
sudo updatedb
这将更新全部和唯一存在于允许的路径中且未被丢弃的文件和目录(情况 2)。
如果该文件是扫描路径之外由 updatedb,或匹配一些排除规则您可以修改配置文件并更新数据库:
sudo pico /etc/updatedb.conf # manual update sudo updatedb
实际上,你可以在配置文件中找到被修剪的文件/目录的键
/etc/updatedb.conf
。搜索PRUNENAMES
或PRUNEPATHS
,PRUNEFS
进行修改,然后再次更新数据库。
关于locate
和的一些话updatedb
为了能够访问locate
文件或目录,它必须实际包含在您的重新定位数据库,通常存储在 中/var/lib/mlocate/mlocate.db
。
此数据库定期更新。默认情况下,它每天更新一次,您可以cron
在 中看到它的文件/etc/cron.daily/mlocate
。如果不存在,您可以使用 搜索它locate mlocate | grep cron
并查看它的位置以及更新频率。
使用man locate
和man updatedb
进行进一步阅读。
答案3
跑步
sudo updatedb
定位之前。这将更新数据库。