Почему команда locate не находит очевидные файлы?

Команда locate звучит интуитивно понятно. Я ожидаю, что он найдет файлы в файловой системе. Тем не менее, он редко находит файлы в системе, которые действительно присутствуют:

$ locate ipsec.secrets

Это не дает результатов даже при запуске из корневого каталога файловой системы /. Файл действительно присутствует:

$ whereis ipsec.secrets
ipsec: /usr/sbin/ipsec /etc/ipsec.secrets /etc/ipsec.d /etc/ipsec.conf /usr/lib/ipsec /usr/share/man/man8/ipsec.8.gz

Почему найти не удалось найти этот файл?

2 ответа

Решение

updatedb запускается только один раз в день, вам нужно запустить его с правами суперпользователя, чтобы найти последние файлы.

Если вы не можете locate файл, который явно существует, я вижу только две возможности:

  1. Файл (каталог) был создан после последнего обновления базы данных locate. По умолчанию он обновляется один раз в день (/etc/cron.daily/mlocate).
    При наличии достаточных привилегий вы можете исправить это путем принудительного обновления

    sudo updatedb
    
  2. Файл (каталог) был создан по пути, который не проверяется с помощью updatedb (более редкий случай): ключи отсекаемых файлов можно найти в файле конфигурации /etc/updatedb.conf, Найдите PRUNENAMES, PRUNEPATHS или PRUNEFS и, соответственно, измените их, затем снова обновите базу данных.

    sudo pico /etc/updatedb.conf
    sudo updatedb
    

Конечно, даже без привилегий вы все равно можете искать файл, например, сканировать все каталоги и подкаталоги, начиная с позиции с чем-то вроде

find . -name '*ipsec.secrets*'  # to start from the current directory
find / -name '*ipsec.secrets*'  # to start from the root # long long 

Обратите внимание, что whereis имеет жестко заданный путь (где искать), поэтому не всегда может найти то, что вы ищете.

Быть немного ленивым и не желать убегать sudo updatedb и, поскольку у меня есть компьютер, который может работать на меня, он запускает sudo updatedb каждые 15 минут, так что мне не нужно.

Использовать sudo crontab -e и найдите эту строку:

# m h  dom mon dow   command

вставьте под ним:

*/15 *  *   *   *     /usr/bin/updatedb

Затем нажмите Ctrl+,O чтобы сохранить файл (написать это O ут), а затем Ctrl+X для еX это.

Если вы только что создали файлы за последние 15 минут, вам все равно нужно будет запустить:

sudo updatedb

... чтобы вручную обновить индексы, используемые locate команда.

Мое решение было очень быстрым (но, возможно, не оптимальным, так как ваш sudo updatedbкоманда займет больше времени). Однако вы больше не пропустите ни одного файла, даже если у вас несколько разделов (это удобно для меня).

Я открыл файл конфигурации updated (тебе нужно sudo права на сохранение следующего файла):

nano /etc/updatedb.conf

Затем я прокомментировал (добавив # в начале строки) все строки, начинающиеся с:PRUNENAMESPRUNEPATHSPRUNEFS

Сохраните файл (CTRL+O, ENTER, CTRL+X).

Надеюсь, это поможет кому-то другому.

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