Почему команда 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
файл, который явно существует, я вижу только две возможности:
Файл (каталог) был создан после последнего обновления базы данных locate. По умолчанию он обновляется один раз в день (
/etc/cron.daily/mlocate
).
При наличии достаточных привилегий вы можете исправить это путем принудительного обновленияsudo updatedb
Файл (каталог) был создан по пути, который не проверяется с помощью 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
Затем я прокомментировал (добавив
#
в начале строки) все строки, начинающиеся с:PRUNENAMES
PRUNEPATHS
PRUNEFS
Сохраните файл (CTRL+O
,
ENTER
,
CTRL+X
).
Надеюсь, это поможет кому-то другому.