Команда locate Linux используется для поиска файлов, расположенных на машине пользователя или на сервере. Фактически она выполняет ту же работу, что и команда find, однако, ведёт поиск в собственной базе данных. Find же шаг за шагом проходит через всю иерархию директорий.
Обновление базы данных locate происходит автоматически, как правило, раз в сутки. Настроить желаемый интервал между сканированиями системы можно с помощью планировщика задач Cron.
Содержание статьи
Синтаксис и опции locate
В эмуляторе терминала команда locate записывается в таком формате:
locate опции шаблон_для_поиска
Опции:
- -A (--all) — выводит только файлы, соответствующие всем заданным шаблонам.
- -b (--basename) — выводит файл, если его название соответствует шаблону.
- -c (--count) — вместо адресов выводит количество найденных файлов.
- -d (--database) — меняет базу данных для поиска, установленную по умолчанию, на пользовательскую.
- -e (--existing) — поиск файлов, существующих на момент запуска команды.
- -L (--follow) — при применении --existing заставляет команду использовать символические ссылки вместо жёстких. Опция --follow включена по умолчанию.
- -h (--help) — выводит справку.
- -i (--ignore-case) — делает команду нечувствительной к регистру.
- -p (--ignore-spaces) — заставляет команду игнорировать пробелы и знаки пунктуации.
- -t (--transliterate) — игнорирует диакритические знаки.
- -l, -n (--limit) — ограничивает количество файлов в выводе команды.
- -P (--nofollow) — заставляет команду использовать жёсткие ссылки вместо символических.
- -0 (--null) — включает использование NUL в качестве разделителя строк.
- -S (--statistics) — выводит статистику по каждой базе данных вместо поиска файлов.
- -q (--quiet) — запрещает команде выводить сообщения об ошибках до завершения поиска.
- -r (--regexp) — поиск с использованием регулярных выражений.
- -V (--version) — показывает версию установленной в системе утилиты locate.
- -w (--wholename) — выводит файл, если в его названии либо адресе есть символы, соответствующие шаблону.
Примеры использования locate
Если нужно найти файлы, соответствующие сразу нескольким шаблонам, используется опция -A. Шаблоны разделяются пробелом:
locate -A zima 64
Опция -w включена по умолчанию, поэтому locate проверяет на соответствие шаблону не только имена файлов, но и названия папок, в которых эти файлы расположены. Например, если Документ1.ods находится по адресу Компьютер/БухалтерияДоки/ВсеДокументы/, он будет выведен командой при использовании шаблонов «Док», «Бух» и «Все». Для того, чтобы в результатах отображались только файлы с именами, в которых присутствует шаблон, применяется опция -b.
Для сравнения:
locate -b zima
locate -w zima
На скриншоте видно, как команда обрабатывает запросы с каждой из упомянутых опций.
Команда locate чувствительна к регистру. Если, к примеру, шаблон имеет вид «GrEEn», файлы с именами green и GREEN в процессе поиска будут игнорироваться. Для того, чтобы найти все документы, независимо от наличия строчных и заглавных букв в их названиях, используется опция -i.
Порой в названиях файлов встречаются буквы с диакритическими знаками (умлаутами, акутами, тремами и прочими). Эти документы не будут найдены, если в команде используется шаблон, состоящий из обычных букв. И наоборот, если в шаблоне есть буквы с диакритическими знаками, команда проигнорирует файлы, в названиях которых отсутствуют аналогичные символы. «Стереть» разницу между буквами с диакритическими знаками и без них можно при помощи опции -t.
По умолчанию команда locate осуществляет поиск в собственной базе данных mlocate.db, однако, умеет работать и с пользовательскими БД. Для этого предусмотрена следующая опция: --database.
locate --database main-user-tor-database1.db bin/raw
Можно одновременно осуществлять поиск в нескольких базах данных, при этом названия файлов этих баз нужно разделять двоеточием:
locate --database main-user-tor-database1.db:main-user-tor-database2.db bin/raw
Результаты будут выведены отдельно для каждой базы данных, в той же очерёдности, с которой базы данных были перечислены в запросе.
Файлы, добавленные в систему после обновления стандартной базы данных, не обнаруживаются командой locate. Также в результатах могут появляться уже несуществующие (удалённые) документы. Для того, чтобы актуализировать выдачу, используется опция -e.
Глядя на скриншот, легко сравнить результаты поиска с опцией -е и без неё.
Кроме того, можно обновить базу данных вручную, выполнив в терминале команду:
sudo updatedb
Выводы
Команда locate linux позволяет быстро и легко найти файлы, затерявшиеся в недрах системы. Если какие-то аспекты её работы остались для вас непонятными, задавайте вопросы в комментариях.
111@debian:~$ locate -A mkv
bash: locate: команда не найдена
Debian 10, cinnamon
Значит, locate надо установить: sudo apt install locate
Значит, locate надо установить: sudo apt install locate
Да я это понимаю и знаю :). Просто нашел для интереса статью на другом сайте. Так там в первых строчках конкретно написано, что locate нужно установить. А уж потом всё остальное.
Раньше во многих ОС команда locate шла "искропки", потом ставить перестали, видимо не очень актуальная тема.
> Файлы, добавленные в систему ДО обновления стандартной базы данных,
> не обнаруживаются командой locate.
Может быть тут имелось ввиду не ДО а ПОСЛЕ?
>> Для того, чтобы актуализировать выдачу, используется опция -e.
А как можно актуализировать выдачу, не прошерстив всю реально существующую структуру каталогов? Ну, то есть, создали мы файл ПОСЛЕ обновления стандартной базы данных - как его найдет locate, хоть с опцией, хоть без?
Или это работает только в одну сторону - не показывать файлы, которых реально нет?