Команда locate

Команда locate позволяет задействовать одноименную утилиту, предназначенную для поиска файлов в иерархии директорий файловой системы. В отличие от популярной утилиты find, рассматриваемая утилита использует базу данных с путями к файлам из ФС, что позволяет ей работать значительно быстрее. Из этого следует, что для ее корректной работы необходимо предварительно создать и периодически обновлять упомянутую базу данных. Для этой цели предназначена утилита updatedb, о которой будет сказано отдельно. Что касается утилиты locate, то в данное время она не пользуется особой популярностью и не поставляется в составе ряда популярных дистрибутивов по умолчанию.

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

$ locate [параметры] имя-файла

Утилита может использоваться без каких-либо параметров — требуется лишь задать имя файла или маску для поиска. В случае необходимости тонкой настройки механизма поиска могут использоваться такие параметры, как параметр -b, позволяющий учитывать лишь имя файла без пути, параметр -w, позволяющий учитывать полное имя файла с путем, параметр -c, позволяющий выводить лишь количество найденных файлов, а не их имена, параметр -e, позволяющий проверять наличие файлов в момент поиска, параметр -L, позволяющий принудительно переходить по символьным ссылкам с целью фильтрации неработающих ссылок (должен использоваться вместе с параметром -e), параметр -P, позволяющий не переходить по символьным ссылкам (также должен использоваться вместе с параметром -e), параметр -i, позволяющий игнорировать регистр символов, параметр -l с числовым значением, предназначенный для ограничения количества результатов поиска, параметр -r, позволяющий использовать регулярные выражения, а также параметр -q, предназначенный для сокрытия сообщений об ошибках. Утилита поддерживает и ряд других параметров, которые едва ли пригодятся рядовому пользователю.

Установка утилиты

В первую очередь вам придется установить рассматриваемую утилиту; проще всего это сделать с помощью терминала путем исполнения соответствующей вашему дистрибутиву команды.

Команда для Linux Mint, Debian и Ubuntu:

# apt install plocate

Команда для Fedora Workstation:

# dnf install plocate

Примечание: пакет называется plocate, так как в данное время актуальна более современная и производительная версия утилиты с данным именем; ее функционал аналогичен функционалу классической утилиты locate.

Обратите внимание на то, что в процессе установки пакета для утилиты будет автоматически создана база данных с путями к файлам ФС. Например, в Ubuntu об этом говорят следующие сообщения:


info: Выбирается GID из диапазона от 100 по 999 ...
info: Добавляется группа «plocate» (GID 143) ...
Initializing plocate database; this may take some time... done

Разумеется, сканирование файловой системы займет некоторое время, поэтому не стоит прерывать этот процесс.

Кроме того, в системе будет активирован таймер для периодической актуализации содержимого базы данных. Об этом говорит следующее сообщение:


Created symlink /etc/systemd/system/timers.target.wants/plocate-updatedb.timer →
/lib/systemd/system/plocate-updatedb.timer.

По этой причине в реальной жизни вам едва ли придется обновлять базу данных самостоятельно.

Примеры использования

Подготовка базы данных

Перед началом работы с утилитой можно обновить базу данных файлов файловой системы с помощью следующей команды:

# updatedb

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

Поиск файлов

Для поиска файлов утилита locate может использоваться без каких-либо параметров — достаточно передать имя файла или маску для поиска.

$ locate mcastcli
/home/alex/mcastcli
/home/alex/mcastcli.c

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

$ locate -i mcastcli
/home/alex/Mcastcli.c
/home/alex/mcastcli
/home/alex/mcastcli.c

Очевидно, что был найден еще один файл.

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

$ locate -c mcastcli
2
$ locate -c -i mcastcli
3

Количество найденных файлов совпадает.

Для проверки существования файлов следует дополнительно использовать параметр -e:

$ locate -e -i mcastcli
/home/alex/Mcastcli.c
/home/alex/mcastcli
/home/alex/mcastcli.c
$ rm /home/alex/Mcastcli.c
$ locate -e -i mcastcli
/home/alex/mcastcli
/home/alex/mcastcli.c

В результате выводятся имена всех существующих на диске файлов — имя удаленного файла не было выведено.

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

$ locate -n 1 mcastcli
/home/alex/mcastcli

Как и требовалось, выводится имя одного файла.

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

$ locate discovery.d
/home/alex/discovery.d
/home/alex/media/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile-discovery.dts
/home/alex/openwrt/build_dir/toolchain-mipsel_24kc_gcc-11.2.0_musl/linux-5.10.161/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile-discovery.dts

Формально все верно, но для фильтрации двух последних результатов может использоваться аналогичное регулярное выражение:

$ locate -r /discovery.d$
/home/alex/discovery.d

По сути, все, что требуется — это использовать параметр -r для активации обработчика регулярных выражений, символ / перед именем файла и символ $ после него.