Найдите любой файл в Linux за секунды: Полное руководство по команде locate
Вы когда-нибудь тратили минуты, а то и часы, на поиск одного-единственного файла в лабиринте каталогов Linux? Есть способ лучше, чем медленный `find`.
Команда `locate` — ваш молниеносный сыщик. Она находит что угодно почти мгновенно, потому что ищет не в реальной файловой системе, а в предварительно собранной базе данных.
Эта база обновляется автоматически каждый день, но вы всегда можете запустить обновление вручную одной командой.
Хотите искать только по имени файла, игнорируя путь? Легко. Нужно сделать поиск нечувствительным к регистру? И это возможно. А может, вы хотите ограничить количество результатов или использовать мощь регулярных выражений? `locate` справится со всем этим.
Мы покажем вам, как именно это работает. Вы узнаете все ключевые опции команды, увидите наглядные примеры и поймёте, в чём её главное преимущество перед другими инструментами.
Перестаньте копаться вручную. Научитесь находить файлы быстрее всех. Всё, что нужно знать для мастерского владения `locate`, ждёт вас в полной статье.
Команда 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 позволяет быстро и легко найти файлы, затерявшиеся в недрах системы. Если какие-то аспекты её работы остались для вас непонятными, задавайте вопросы в комментариях.