locate (Русский)
locate — это распространённый инструмент Unix для быстрого поиска файлов по имени. Он работает быстрее чем find благодаря поиску в предварительно созданном файле базы данных, а не непосредственно в файловой системе. Недостатком этого подхода является то, что изменения в файловой системе, сделанные с момента создания файла базы данных, locate
не увидит. Влияние этой проблемы можно уменьшить путём обновления базы данных по расписанию.
Со временем появлялись и сменяли друг друга разные реализации: slocate (secure locate), которая показывала только доступные пользователю файлы, mlocate (merging locate) которая объединяет базы данных при обновлении, что улучшает производительность, поскольку она может пропускать ранее просмотренные файлы, и ныне актуальная реализация plocate (posting locate), основанная на инвертированном индексе и создающая гораздо более быстрый (и меньший по размеру) индекс.
Установка
Установите пакет plocate.
Хотя GNU findutils также имеет свою реализацию locate, пакет findutils в Arch её не содержит.
Использование
Перед использованием locate(1)[устаревшая ссылка 2024-10-13] нужно создать базу данных. Это делается с помощью команды updatedb(8), которая (как следует из названия) обновляет базу данных.
Пакет plocate предоставляет юнит plocate-updatedb.timer
, который запускает обновление базы данных каждый день и изначально включен после установки пакета. Запустите его вручную, если вы хотите использовать его до перезагрузки. Вы также можете вручную выполнить команду updatedb от имени root в любое время.
Для экономии времени updatedb может быть настроен (и по умолчанию настроен) на игнорирование определённых файловых систем и путей в файле /etc/updatedb.conf
. Семантика этого файла описана в updatedb.conf(5). Стоит отметить, что среди путей, игнорируемых в настройках по умолчанию (PRUNEPATHS
), есть /media
и /mnt
, поэтому locate может не обнаружить файлы на внешних устройствах.