Вопрос или проблема
На стандартной настольной установке Ubuntu 24.04, когда я пытаюсь использовать команду locate
, поиск файлов, которые я явно имею в своем домашнем каталоге, не выдает результатов — кажется, что база данных locate никогда не обновлялась.
Тем не менее, я могу запустить sudo updatedb
, который вручную обновляет базу данных locate
, и затем я могу искать файлы, как ожидалось. Это продолжает работать в течение дня, после чего поиск файлов в моем домашнем каталоге снова перестает работать. Так что я предполагаю, что после выполнения скрипта locate в cron.daily
база данных изменяется или стирается.
Одно из решений состоит в том, чтобы просто удалить скрипт locate
из cron.daily
, что, я думаю, “решит” проблему. Но есть ли более правильный способ справиться с этим?
Это можно исправить, заменив строку
LOCALUSER=nobody
в crond.daily
на
LOCALUSER=root
Я думаю, что это безопасно, так как updatedb
все равно должен выполняться от имени root.
Ответ или решение
Чтобы понять, почему команда locate
не отображает файлы из вашего домашнего каталога после выполнения сценария в cron.daily
, необходимо рассмотреть, как работает система обновления базы данных locate
на Ubuntu 24.04.
Проблема обновления базы данных locate
По умолчанию команда locate
использует базу данных, которая периодически обновляется. Это обновление происходит через планировщик задач cron
, и в данном случае — через скрипт, который находится в каталоге cron.daily
. Как вы заметили, после выполнения команды sudo updatedb
, результаты поиска обновляются, но через день после последнего обновления, файлы больше не появляются в выводе команды locate
. Это говорит о том, что скрипт не полностью обновляет базу данных так, как предполагалось.
Анализ скрипта обновления базы данных
По вашему описанию, скрипт в cron.daily
выполняется от имени пользователя nobody
, что может вызвать проблемы с правами доступа. Конкретная строка:
LOCALUSER=nobody
Фактически означает, что база данных обновляется с ограниченными правами доступа, которые не могут видеть ваш домашний каталог или другие файлы, находящиеся под управлением вашего пользователя. Чтобы изменить эту ситуацию, необходимо изменить эту строку на:
LOCALUSER=root
Безопасность и правильное поведение
Если вы решите отредактировать этот файл, убедитесь, что вы понимаете все потенциальные риски. Запуск скрипта updatedb
от имени root
является более безопасным подходом, так как гарантирует, что команда получит необходимые права доступа для поиска файлов в системных и пользовательских каталогах. Несмотря на распространённые опасения по поводу безопасности, данный метод является стандартной практикой для обеспечения правильной работы команды locate
.
Рекомендации по реализации решения
-
Изменение файла: Откройте файл
/etc/cron.daily/mlocate
в текстовом редакторе с правами суперпользователя и замените строкуLOCALUSER=nobody
наLOCALUSER=root
. -
Тестирование: После внесения изменений, дождитесь следующего автоматического обновления или выполните команду
sudo updatedb
вручную. Проверьте вывод командыlocate
для подтверждения правильного функционирования. -
Мониторинг: После обновления следите за изменениями в выводе команды на протяжении нескольких дней, чтобы убедиться в отсутствии дальнейших проблем.
-
Документация: Рекомендуется документировать ваши изменения и причины их выполнения для будущих пользователей системы.
Эти действия позволят вам оптимизировать работу команды locate
и избежать потенциальных проблем с доступом к файлам. Вы также можете рассмотреть возможность настройки другого способа обновления базы данных, например, с помощью systemd timers
, если хотите повысить гибкость и контроль.
Заключение
Модификация переменной LOCALUSER
в скрипте cron.daily
является полезным и безопасным методом решения проблемы с обновлением базы данных locate
. Следуя приведённым рекомендациям, вы сможете обеспечить корректное отображение искомых файлов в системе поиска, что в свою очередь улучшит вашу продуктивность в работе с файлами в Ubuntu 24.04.