Открыть сервис

Locate: значение и применение команды

Locate (от англ. locate — «находить», «определять местонахождение») — это команда в операционных системах семейства Unix и Linux, предназначенная для быстрого поиска файлов и каталогов по имени в файловой системе. В отличие от команды find, которая выполняет прямой обход каталогов в реальном времени, locate работает с предварительно созданной базой данных, что обеспечивает практически мгновенный вывод результатов, но ценой возможной устарелости информации.

Принцип работы

Основой функционирования locate является база данных, содержащая перечень всех путей к файлам и каталогам в файловой системе. Эта база создаётся и периодически обновляется специальной служебной программой. В большинстве дистрибутивов Linux эту роль выполняет утилита updatedb, которая запускается автоматически по расписанию через cron или systemd-таймеры, как правило, ежедневно или еженедельно.

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

История

Команда locate появилась в операционной системе BSD в начале 1980-х годов. Одним из первых её реализаций была программа, написанная Вудсом (James Woods) для системы 4.2BSD. Первоначальная версия использовала сжатие данных для уменьшения размера базы и ускорения поиска. Позднее команда была портирована в различные версии Unix и Linux.

В 1990-х годах, с распространением Linux, появились альтернативные реализации, включая пакет GNU findutils, в состав которого входят как locate, так и updatedb. В 2000-х годах была разработана программа slocate, которая хранила дополнительную информацию о правах доступа к файлам, что позволяло скрывать от пользователя файлы, недоступные ему для чтения. Впоследствии на её основе была создана mlocate (merging locate), которая стала стандартом во многих дистрибутивах благодаря более эффективному обновлению базы данных и встроенной проверке прав доступа.

Синтаксис и основные опции

Общий синтаксис команды выглядит следующим образом:

`` locate [опции] [шаблон] ``

Наиболее часто используемые опции:

  • -i — поиск без учёта регистра символов;
  • -c — вывод только количества найденных совпадений вместо самих путей;
  • -l N (или -n N) — ограничение количества выводимых результатов числом N;
  • -r — интерпретация шаблона как регулярного выражения;
  • -e — проверка существования файлов на момент выполнения команды (в версии mlocate);
  • -q — подавление сообщений об ошибках, например, если база данных ещё не создана.

По умолчанию locate выводит все пути, содержащие указанную подстроку. Например, команда locate .conf выведет список всех файлов и каталогов, в имени которых встречается сочетание «.conf». Если требуется найти файл с точным именем, используется опция -r с регулярным выражением, например: locate -r '/etc/hosts$'.

Отличия от команды find

Команда find выполняет поиск путём рекурсивного обхода указанного каталога в момент выполнения. Это гарантирует актуальность данных, но при большом объёме файловой системы поиск может занимать значительное время. Locate же обращается к заранее подготовленной базе, что делает его практически мгновенным, однако результаты могут не отражать изменения, произошедшие после последнего обновления базы.

Ключевые различия можно свести к следующему:

  • Скорость: locate значительно быстрее find при поиске по всей файловой системе.
  • Актуальность: find всегда показывает текущее состояние, locate — состояние на момент последнего обновления базы.
  • Гибкость: find поддерживает поиск по типу файла, размеру, времени модификации, правам доступа и другим атрибутам; locate ищет только по имени пути.
  • Права доступа: find показывает все файлы, к которым имеет доступ процесс; mlocate учитывает права пользователя и скрывает недоступные пути.

Обновление базы данных

Для корректной работы locate необходимо, чтобы база данных была создана и регулярно обновлялась. Команда updatedb, запущенная от имени суперпользователя, сканирует файловую систему и формирует новый список путей. По умолчанию из базы исключаются некоторые каталоги, такие как /proc, /sys, /dev, а также временные каталоги и точки монтирования сетевых файловых систем. Параметры исключений задаются в файле конфигурации /etc/updatedb.conf.

В случае, если пользователь создал или удалил файл, но база ещё не обновлена, locate может выдать устаревшую информацию. Для немедленного обновления базы можно вручную выполнить команду sudo updatedb. В некоторых современных реализациях, например в mlocate, используется инкрементальное обновление, которое пересканирует только изменённые каталоги, что сокращает время выполнения.

Аналоги в других операционных системах

В операционной системе Windows отсутствует прямой аналог команды locate, однако функцию быстрого поиска по индексу выполняет поиск в проводнике, основанный на службе индексирования Windows Search. В macOS команда locate также доступна, поскольку система основана на BSD-варианте Unix, и использует базу данных, обновляемую через launchd.

Существуют также сторонние программы, реализующие подобный принцип поиска, например Everything для Windows, которая создаёт индекс всех файлов NTFS-томов и обеспечивает мгновенный поиск по мере ввода запроса.

Применение на практике

Команда locate широко используется системными администраторами и разработчиками для быстрого нахождения конфигурационных файлов, исполняемых программ и документации. Например, чтобы найти расположение файла конфигурации веб-сервера Apache, достаточно выполнить locate httpd.conf или locate apache2.conf. При работе с большими серверами, где файловая система содержит миллионы файлов, locate позволяет сэкономить значительное время по сравнению с find.

Однако при написании сценариев автоматизации, где требуется гарантированная актуальность данных, предпочтение обычно отдаётся команде find или использованию locate с предварительным обновлением базы. Также следует учитывать, что locate не предназначен для поиска по содержимому файлов — для этой цели применяются другие инструменты, такие как grep в сочетании с find, или специализированные системы полнотекстового поиска.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →