
Одна из самых распространённых операций при работе в Linux — поиск файлов и каталогов. В системах Linux существует несколько команд для поиска файлов, среди которых наиболее часто используются find и locate.
Команда locate — самый быстрый и простой способ поиска файлов и каталогов по их именам.
В этой статье мы объясним, как использовать команду locate .
Установка locate (команда locate не найдена)
В зависимости от дистрибутива и того, как была подготовлена система, пакет locate может быть предустановлен или не предустановлен в вашей системе Linux.
Чтобы проверить, установлена ли утилита locate , откройте терминал, введите locate и нажмите Enter . Если пакет установлен, система выведет сообщение locate: no pattern to search for specified . В противном случае вы увидите сообщение: locate command not found .
Если locate не установлен, вы можете легко установить его с помощью менеджера пакетов вашего дистрибутива.
Установка locate в Ubuntu и Debian
sudo apt updatesudo apt install mlocate
Установка locate на CentOS и Fedora
sudo yum install mlocate
Как locate рабочий
Команда locate ищет заданный шаблон в файле базы данных, созданном командой updatedb . Найденные результаты отображаются на экране по одному в каждой строке.
Во время установки пакета mlocate создаётся cron-задание , которое запускает команду updatedb каждые 24 часа. Это обеспечивает регулярное обновление базы данных. Подробнее о cron-задании см. в файле /etc/cron.daily/mlocate .
Базу данных можно обновить вручную, запустив updatedb от имени пользователя root или пользователя с привилегиями sudo:
sudo updatedb
Процесс обновления займет некоторое время в зависимости от количества файлов и каталогов, а также скорости вашей системы.
Файлы, созданные после обновления базы данных, не будут отображаться в результатах поиска.
По сравнению с более мощной командой find , которая выполняет поиск в файловой системе, locate работает гораздо быстрее, но не имеет многих функций и может выполнять поиск только по имени файла.
Как использовать команду locate
Синтаксис команды locate следующий:
locate [ OPTION ] PATTERN...
В самой простой форме, при использовании без каких-либо параметров, команда locate выведет абсолютный путь ко всем файлам и каталогам, которые соответствуют шаблону поиска и для которых у пользователя есть разрешение на чтение.
Например, чтобы найти файл с именем .bashrc , введите:
locate .bashrc
Вывод будет включать имена всех файлов, содержащих строку .bashrc в своих именах:
/etc/bash.bashrc /etc/skel/.bashrc /home/linuxize/.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 не будет показан, поскольку мы запустили команду как обычный пользователь, не имеющий прав доступа к каталогу /root .
Если список результатов длинный, для лучшей читаемости можно передать вывод команде less :
locate .bashrc | less
Команда locate также принимает шаблоны, содержащие символы подстановки, например, подстановочный знак * . Если шаблон не содержит символов подстановки, команда ищет *PATTERN* . Именно поэтому в предыдущем примере были отображены все файлы, содержащие в своих именах искомый шаблон.
Подстановочный знак — это символ, используемый для обозначения нуля, одного или нескольких символов. Например, чтобы найти все файлы .md в системе, введите:
locate *.md
Чтобы ограничить результаты поиска, используйте опцию -n а затем укажите количество результатов, которые нужно отобразить. Следующая команда выполнит поиск всех файлов .py и отобразит только 10 результатов:
locate -n 10 *.py
По умолчанию locate выполняет поиск с учётом регистра. Параметр -i ( --ignore-case ) указывает locate игнорировать регистр и выполнять поиск без учёта регистра.
locate -i readme.md
/home/linuxize/p1/readme.md /home/linuxize/p2/README.md /home/linuxize/p3/ReadMe.md
Чтобы отобразить количество всех соответствующих записей, используйте опцию -c ( --count ). Следующая команда вернет количество всех файлов, содержащих .bashrc в своих именах:
locate -c .bashrc
6
По умолчанию locate не проверяет, существуют ли найденные файлы в файловой системе. Если вы удалили файл после последнего обновления базы данных, и он соответствует шаблону поиска, он будет включён в результаты поиска.
Чтобы отобразить только имена файлов, существующих на момент запуска locate , используйте параметр -e ( --existing ). Например, следующий код вернет только существующие файлы .json :
locate -e *.json
Если вам нужен более сложный поиск, используйте опцию -r ( --regexp ), которая позволяет выполнять поиск с использованием простого регулярного выражения вместо шаблонов. Эту опцию можно указать несколько раз.
Например, чтобы найти все файлы .mp4 и .avi в вашей системе и игнорировать регистр, выполните:
locate --regex -i "(.mp4|.avi)"
Заключение
Команда locate ищет в файловой системе файлы и каталоги, имена которых соответствуют заданному шаблону. Синтаксис команды легко запомнить, а результаты отображаются практически мгновенно.
Для получения дополнительной информации обо всех доступных параметрах команды locate введите в терминале команду man locate .
Если у вас есть вопросы, не стесняйтесь оставлять комментарии.
определение местоположения терминала
Связанные руководства