В Linux команда locate
выполняет ту же задачу, что и find
, но она ведёт поиск не по всей файловой системе, а по базе данных, обновляемой ежесуточно.
Для получения свежего списка файлов можно вручную запустить updatedb
для обновления базы данных.
Команда locate
чувствительна к регистру.
Содержание
Синтаксис
$ locate [OPTION]... PATTERN...
Опции
- -b, --basename
- Искать файл по части имени
- -c, --count
- Выводить файл при совпадении имени шаблону
- -d, --database DBPATH
- Искать файлы в пользовательской базе данных
- -i, --ignore-case
- Поиск без учета регистра
- -l, --limit LIMIT
- Останавливаться после лимита в количестве файлов
- -0, --null
- Использовать NUL вместо новой строки
- -N, --literal
- Не заключать имена файлов в кавычки
- -r, --regexp
- Интерпретировать шаблоны как базовые регулярные выражения (медленно)
- --regex
- Интерпретировать шаблоны как расширенные регулярные выражения (медленно)
- -w, --wholename
- Поиск по любому из символов имени файла
Установка
Установка в Arch Linux:
oleg@mobile:~:$ sudo pacman -S locate
разрешение зависимостей...
проверка конфликтов...
Пакеты (2) liburing-2.2-1 plocate-1.1.16-1
Будет загружено: 0,25 MiB
Будет установлено: 0,64 MiB
:: Приступить к установке? [Y/n] y
:: Получение пакетов...
plocate-1.1.16-1-x86_64 130,5 KiB 373 KiB/s 00:00 [###############################################] 100%
liburing-2.2-1-x86_64 128,3 KiB 782 KiB/s 00:00 [###############################################] 100%
Total (2/2) 258,8 KiB 462 KiB/s 00:01 [###############################################] 100%
(2/2) проверка ключей [###############################################] 100%
(2/2) проверка целостности пакета [###############################################] 100%
(2/2) загрузка файлов пакетов [###############################################] 100%
(2/2) проверка конфликтов файлов [###############################################] 100%
(2/2) проверка доступного места [###############################################] 100%
:: Обработка изменений пакета...
(1/2) установка liburing [###############################################] 100%
(2/2) установка plocate [###############################################] 100%
:: Запуск post-transaction hooks...
(1/4) Creating system user accounts...
Creating group 'locate' with GID 21.
(2/4) Reloading system manager configuration...
(3/4) Creating temporary files...
(4/4) Arming ConditionNeedsUpdate...
oleg@mobile:~:$
Установка в Ubuntu:
$ sudo apt install locate
Примеры использования команды locate в Linux
Обновление базы данных
Перед использованием утилиты крайне желательно обновить базу данных:
$ sudo updatedb
Поиск файла
Самым простым способом использования утилиты является поиск файла по шаблону:
oleg@mobile:~/webprojects/linuxcookbook.ru/articles:$ locate locate
/home/http/linuxcookbookru/howto/mini/Ext2fs-Undeletion-Dir-Struct.old/locate.html
/home/oleg/webprojects/linuxcookbook.ru/articles/linux-locate
/home/oleg/webprojects/linuxcookbook.ru/content/howto/mini/Ext2fs-Undeletion-Dir-Struct/locate.html
/home/oleg/webprojects/linuxcookbook.ru/img/locate-command-1.jpg
/home/oleg/webprojects/linuxcookbook.ru/img/locate-command.jpg
/home/oleg/webprojects/websites/PHP/f/imagecolorallocate.html
/home/oleg/webprojects/websites/PHP/f/imagecolordeallocate.html
/usr/bin/fallocate
/usr/bin/locate
...
Форматирование вывода
Список выводимых файлов может быть очень длинным. В связи с этим рекомендуется добавить команду less
:
oleg@mobile:~/webprojects/linuxcookbook.ru/articles:$ locate pwd | less
/etc/.pwd.lock
/home/http/base/inc/lang/ar/resendpwd.txt
/home/http/base/inc/lang/az/resendpwd.txt
/home/http/base/inc/lang/bg/resendpwd.txt
/home/http/base/inc/lang/ca/resendpwd.txt
/home/http/base/inc/lang/ca-valencia/resendpwd.txt
/home/http/base/inc/lang/cs/resendpwd.txt
/home/http/base/inc/lang/da/resendpwd.txt
/home/http/base/inc/lang/de/resendpwd.txt
/home/http/base/inc/lang/de-informal/resendpwd.txt
/home/http/base/inc/lang/el/resendpwd.txt
...
Вывод лишь существующих файлов
Иногда команда locate
выводит файлы, которые были уже удалены, так как команда автоматически обновляется лишь раз в сутки. Устранить это можно обновлением базы командой $ sudo updatedb
, либо использованием опции -e
, которая позволит вывести лишь существующие файлы:
oleg@mobile:~/webprojects/linuxcookbook.ru/articles:$ locate -e pwd
/etc/.pwd.lock
/home/http/base/inc/lang/ar/resendpwd.txt
/home/http/base/inc/lang/az/resendpwd.txt
/home/http/base/inc/lang/bg/resendpwd.txt
/home/http/base/inc/lang/ca/resendpwd.txt
/home/http/base/inc/lang/ca-valencia/resendpwd.txt
/home/http/base/inc/lang/cs/resendpwd.txt
/home/http/base/inc/lang/da/resendpwd.txt
/home/http/base/inc/lang/de/resendpwd.txt
...
Подсчёт существующих файлов
oleg@mobile:~/webprojects/linuxcookbook.ru/articles:$ locate -c pwd
126
oleg@mobile:~/webprojects/linuxcookbook.ru/articles:$
Вывод содержит лишь количество файлов, содержащих строку pwd
в имени.
Количество результатов поиска
Для ограничения количества результатов поиска используется опция -n
, к которой через пробел добавляется число необходимых строк:
oleg@mobile:~/webprojects/linuxcookbook.ru/articles:$ locate -n 5 pwd
/etc/.pwd.lock
/home/http/base/inc/lang/ar/resendpwd.txt
/home/http/base/inc/lang/az/resendpwd.txt
/home/http/base/inc/lang/bg/resendpwd.txt
/home/http/base/inc/lang/ca/resendpwd.txt
oleg@mobile:~/webprojects/linuxcookbook.ru/articles:$
Игнорирование файла с учётом регистра
В этом случае используется опция -i
:
oleg@mobile:~/webprojects/linuxcookbook.ru/articles:$ locate -i pwd
/etc/.pwd.lock
/home/http/base/inc/lang/ar/resendpwd.txt
/home/http/base/inc/lang/az/resendpwd.txt
/home/http/base/inc/lang/bg/resendpwd.txt
/home/http/base/inc/lang/ca/resendpwd.txt
/home/http/base/inc/lang/ca-valencia/resendpwd.txt
...
Поиск файла с точным именем
В данном случае используется опция -r
:
oleg@mobile:~/webprojects/linuxcookbook.ru/articles:$ locate -r pwd
/etc/.pwd.lock
/home/http/base/inc/lang/ar/resendpwd.txt
/home/http/base/inc/lang/az/resendpwd.txt
/home/http/base/inc/lang/bg/resendpwd.txt
/home/http/base/inc/lang/ca/resendpwd.txt
/home/http/base/inc/lang/ca-valencia/resendpwd.txt
/home/http/base/inc/lang/cs/resendpwd.txt
/home/http/base/inc/lang/da/resendpwd.txt
/home/http/base/inc/lang/de/resendpwd.txt
/home/http/base/inc/lang/de-informal/resendpwd.txt
...
Были найдены все файлы в имени которых присутствуют буквы pwd.
Выводы
В связи с тем, что в Linux команда locate
используется для получения мгновенных результатов, она является незаменимой утилитой, когда скорость является приоритетом.