Команда 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 для активации обработчика регулярных выражений, символ / перед именем файла и символ $ после него.