Ubuntu 上locate/updatedb的数据库在哪里?

Ubuntu 上locate/updatedb的数据库在哪里?

我一直在阅读有关locate命令的信息,我使用的教程说/var/log/updatedb是updatedb所在的位置。它在ubuntu(xubuntu)上不存在,而且原则上似乎无法定位(讽刺的是)。这是我尝试找到它的方法:

[HOST]:~$ sudo find / -name updatedb
[sudo] password for [USERNAME]:
find: ‘/run/user/1000/gvfs’: Permission denied
/etc/alternatives/updatedb
/usr/bin/updatedb

如果我查看 /usr/bin 并长列表 updatedb,它会链接(浅蓝色链接 - 并且权限中带有'l',因此是符号链接)到 /etc/alternatives/updatedb。

如果我查看 /etc/alternatives

[HOST]:/usr/bin$ cd /etc/alternatives
[HOST]:/etc/alternatives$ ls -l updatedb
lrwxrwxrwx 1 root root 25 Jul 15 02:35 updatedb -> /usr/bin/updatedb.mlocate

你获得了上述指向 /usr/bin/updatedb.mlocate 的符号链接

[HOST]:/usr/bin$ ls -l updatedb.mlocate
-rwxr-xr-x 1 root root 43768 Nov 18 2014 updatedb.mlocate

[HOST]:/usr/bin$ file updatedb.mlocate
updatedb.mlocate: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=85d4fb92c2e099510893b0c2eccb13d49943e81e, stripped

然后我在 ubuntu 上阅读了这个链接:

Ubuntu 手册页:updatedb - 更新 mlocate 数据库

它表明数据库位于 /var/lib/mlocate.db,但是我得到的是这个(就在下面),当在文本编辑器中打开时,消息显示数据不可读:

[HOST]:/var/lib/mlocate$ ls
mlocate.db
[HOST]:/var/lib/mlocate$ emacs mlocate.db
[HOST]:/var/lib/mlocate$ file mlocate.db
mlocate.db: regular file, no read permission
[HOST]:/var/lib/mlocate$ ls -l mlocate.db
-rw-r----- 1 root mlocate 5291101 Aug 1 08:45 mlocate.db
[HOST]:/var/lib/mlocate$

我希望我只是存在概念上的误解,但如果有任何评论可以帮助我了解数据库的位置,我将不胜感激。

答案1

您有正确的文件,但由于两个相关原因,数据库无法读取:

  1. 您无权直接访问它。
    可以使用以下方法解决此问题sudo emacs mlocate.db

  2. 它不是一个文本文件,因此公用事业在文本编辑器中打开它。可以使用文本编辑器查看和编辑它,但最可能的结果是数据库损坏。使用适当的工具来读取或修改mlocate.db:updatedblocate

答案2

该文件位于 /var/lib/mlocate/mlocate.db 但归 root 所有,因此如果没有超级用户访问权限,您就无法访问它。

要用内容填充屏幕,请发出命令sudo cat /var/lib/mlocate/mlocate.db

不要尝试编辑此文件

来源:ls -lhs /var/lib/mlocatelocate/mlocate.db

答案3

该文件似乎驻留在/var/cache/locate/locatedb我的系统(Ubuntu 20.04)的路径上。

在如下man页面中对此进行了解释:updatedb

--output=dbfile
    The database file to build.  Default is system-dependent.
    In Debian GNU/Linux, the default is /var/cache/locate/locatedb.

同样,该info页面还显示:

'--output=DBFILE'
  The database file to build.  The default is system-dependent, but
  when this document was formatted it was '/var/cache/locate/locatedb'.

请注意该文件及其父目录的权限如下:

$ stat /var/cache/locate/locatedb | grep -m1 Access:
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
$ stat /var/cache/locate | grep -m1 Access:
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
$ stat /var/cache | grep -m1 Access:
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

这意味着非特权用户能够访问locate通常无法列出的文件路径。

相关内容