Введение
Одной из самых распространенных операций при работе в Linux является поиск файлов и каталогов. В системах Linux есть несколько команд, которые позволяют вам искать файлы, наиболее часто используемыми являются find и locate.
Команда locate — это самый быстрый и простой способ поиска файлов и каталогов по их именам.
В этом уроке мы объясним, как использовать команду locate.
Найдите установку команды
В зависимости от вашего дистрибутива и того, как ваша система была подготовлена, пакет locate может быть предварительно установлен или не установлен в вашей системе Linux.
Чтобы проверить, установлена ли в вашей системе утилита locate, откройте терминал, введите locate и нажмите ENTER. Если пакет установлен, система locate: не будет отображаться указанный шаблон для поиска, в противном случае вы увидите что-то вроде locate command not found.
Если locate не установлен, вы можете легко установить его с помощью менеджера пакетов вашего дистрибутива.
Установить локацию на Ubuntu и Debian
sudo apt update
sudo apt install mlocate
Установить локацию на CentOS и Fedora
sudo yum install mlocate
Как найти
Команда locate ищет определенный шаблон в файле базы данных, сгенерированном командой updatedb. Найденные результаты выводятся на экран по одному в строке.
Во время установки пакета mlocate создается задание cron, которое запускает команду updatedb каждые 24 часа. Это гарантирует регулярное обновление базы данных. Дополнительные сведения о процессе cron см. в файле /etc/cron.daily/mlocate.
Базу данных можно обновить вручную, запустив команду updatedb от имени пользователя root или пользователя с привилегиями sudo:
sudo updatedb
Процесс обновления займет некоторое время, в зависимости от количества файлов и каталогов и скорости системы.
Файлы, созданные после обновления базы данных, не будут отображаться в результатах обнаружения.
По сравнению с командой find, которая является более мощной и ищет файловые системы, locate работает намного быстрее, но не имеет многих функций и может искать только по имени файла.
Как использовать команду локации
Синтаксис команды locate следующий:
locate [OPTION] PATTERN...
В своей простейшей форме, при использовании без каких-либо параметров, команда locate напечатает абсолютный путь ко всем файлам и каталогам, которые соответствуют шаблону поиска и для которых у пользователя есть разрешение на чтение.
Например, чтобы найти файл с именем .bashrc, вам нужно ввести:
locate.bashrc
Вывод будет включать в себя имена всех файлов, которые содержат строку .bashrc в своих именах:
/etc/bash.bashrc
/etc/skel/.bashrc
/usr/share/base-files/dot.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/bash.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/skel/dot.bashrc
Файл /root/.bashrc не появится, потому что мы запускали команду от имени обычного пользователя, у которого нет прав доступа к корневому каталогу /.
Если список результатов длинный, вы можете перенаправить вывод на команду less для лучшей читабельности:
locate.bashrc | less
Команда locate также принимает шаблоны, содержащие подстановочные символы, такие как подстановочный знак *. Когда в шаблоне нет лишних символов, команда ищет *ШАБЛОН*, поэтому в предыдущем примере мы отобразили все файлы, имена которых содержат шаблон поиска.
Подстановочный знак — это символ, используемый для представления нуля, одного или нескольких символов. Например, для поиска всех файлов .md в системе вы должны использовать:
locate *.md
Чтобы ограничить результаты поиска, используйте параметр -n, за которым следует количество результатов, которые вы хотите отобразить. Например, следующая команда выполнит поиск всех файлов .py и отобразит только 10 результатов:
locate -n 10 *.py
По умолчанию locate выполняет поиск с учетом регистра. Опция -i ( --ignore-case ) предписывает locate игнорировать регистр и выполнять поиск без учета регистра.
locate -i readme.md
/home/noviello/p1/readme.md
/home/noviello/p2/README.md
Чтобы просмотреть количество всех совпадающих записей, используйте параметр -c (--count). Следующая команда вернет количество всех файлов, которые содержат .bashrc в своих именах:
locate -c.bashrc
5
По умолчанию locate не проверяет, существуют ли еще найденные файлы в файловой системе. Если файл был удален после последнего обновления базы данных, если файл соответствует шаблону поиска, он будет включен в результаты поиска.
Чтобы отобразить только имена файлов, существующих во время выполнения, используйте параметр -e (--existing) . Например, следующий код вернет только существующие файлы .json:
locate -e *.json
Если вам нужно выполнить более сложный поиск, вы можете использовать параметр -r (--regexp), который позволяет выполнять поиск с использованием обычного регулярного выражения вместо шаблонов. Эту опцию можно указать несколько раз. Например, для двух типов расширений файлов выполните поиск всех файлов .mp4 и .avi:
locate --regex -i "(\.mp4|\.avi)"
Вывод
Команда locate ищет в файловой системе файлы и каталоги, имена которых соответствуют определенному шаблону. Синтаксис команды легко запомнить, а результаты отображаются практически мгновенно.
Для получения дополнительной информации о команде locate введите man locate в терминале.