Где находится база данных для locate/updatedb в Ubuntu?

Я читал о команде 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 / альтернативы

[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:

http://manpages.ubuntu.com/manpages/precise/man8/updatedb.8.html котором говорится, что база данных находится в /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$

Я ожидаю, что у меня просто концептуальное недоразумение, но был бы благодарен за любые комментарии, которые помогли бы мне понять, где можно найти базу данных.

С благодарностью, Уилл

2 ответа

У вас есть правильный файл, но база данных не читается по двум причинам:

  1. У вас нет разрешения на прямой доступ к нему.
    Это можно преодолеть с помощью sudo emacs mlocate.db

  2. Это не текстовый файл, поэтому открыть его в текстовом редакторе мало. Можно просматривать и редактировать его с помощью текстового редактора, но наиболее вероятным результатом является повреждение базы данных. Используйте соответствующие инструменты для чтения или изменения mlocate.db: updatedb а также locate,

Файл находится по адресу /var/lib/mlocate/mlocate.db, но принадлежит пользователю root, поэтому вы не можете получить к нему доступ без прав суперпользователя.

чтобы заполнить экран с его содержанием, введите команду sudo cat /var/lib/mlocate/mlocate.db

Не пытайтесь редактировать этот файл

Источник: ls -lhs /var/lib/mlocatelocate/mlocate.db

Кажется, что файл находится по пути /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 путь к файлу, который обычно не может быть указан.

Другие вопросы по тегам