无法使用“locate”定位目录?

tux*_*xtu 20 server command-line locate

我想使用“locate”命令在我的系统中定位一个目录。我知道有一个名为“bench-repo”的目录。当我给出以下命令时,它显示以下错误:

locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我如何找到目录?

Zan*_*nna 28

locate( /var/lib/mlocate/mlocate.db)使用的二进制数据库由每天更新一次cron,因此locate不会找到新文件。

您可以通过首先运行来解决此问题 sudo updatedb

sudo updatedb && locate -e bench-repo
Run Code Online (Sandbox Code Playgroud)

使用该-e标志是个好主意,因此您只能找到仍然存在的文件。

哦,这是一个额外的提示 - 你可以locate通过传递给你一个详细的列表ls -l

ls -l $(locate -e bench-repo)
Run Code Online (Sandbox Code Playgroud)


Pee*_*Kay 7

跑步

sudo updatedb
Run Code Online (Sandbox Code Playgroud)

定位之前。这将更新数据库。


Has*_*tur 5

两个原因两个动作

通常,当您无法访问locate文件或因为最近创建(在上次数据库更新之后)或因为它不在updatedb 将要搜索其条目或匹配某些修剪规则的路径中时(见下文):

  1. 如果它是一个新文件或目录,如果您有足够的权限,您可以强制更新

    sudo updatedb 
    
    Run Code Online (Sandbox Code Playgroud)

    这将更新所有且仅存在于允许路径中且不会被丢弃的文件和目录(情况 2)。

  2. 如果文件不在由 updatedb扫描的路径中,或者匹配某些排除规则,您可以修改配置文件并更新数据库:

    sudo pico /etc/updatedb.conf  # manual update
    sudo updatedb
    
    Run Code Online (Sandbox Code Playgroud)

    实际上,您可以在配置文件中找到修剪过的文件/目录的键/etc/updatedb.conf。搜索PRUNENAMESPRUNEPATHSPRUNEFS,相应地进行修改,然后再次更新数据库。

更多关于locate和的一些话updatedb

为了能够访问locate文件或目录,它必须实际包含在您的mlocate 数据库中,通常存储在/var/lib/mlocate/mlocate.db.

该数据库会定期更新。默认情况下,它每天更新,您可以cron/etc/cron.daily/mlocate. 如果不存在,您可以搜索它locate mlocate | grep cron并查看它的位置和更新频率。

使用man locateman updatedb进一步阅读。

  • 关于 PRUNE* 变量的好提示。 (3认同)