Одна из самых распространенных операций при работе в Linux — это поиск файлов и каталогов. В системах Linux есть несколько команд, которые позволяют искать файлы, причем поиск и определение местоположения являются наиболее часто используемыми.
Команда 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 update
sudo 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/.bashrc
команду как обычный пользователь, у которого нет прав доступа к каталогу /root
.
Если список результатов длинный, для лучшей читаемости вы можете направить вывод в команду less
:
locate .bashrc | less
Команда locate
также принимает шаблоны, содержащие символы подстановки, такие как подстановочный знак *
. Если в шаблоне нет дополнительных символов, команда ищет *PATTERN*
. Поэтому в предыдущем примере отображались все файлы, содержащие в своем имени шаблон поиска.
Подстановочный знак — это символ, используемый для обозначения нуля, одного или нескольких символов. Например, чтобы найти все файлы .md
в системе, вы должны ввести:
locate *.md
Чтобы ограничить результаты поиска, используйте параметр -n
после которого укажите количество результатов, которые вы хотите отобразить. Следующая команда .py
поиск всех файлов .py
и отобразит только 10 результатов:
locate -n 10 *.py
По умолчанию locate
выполняет поиск с учетом регистра. Параметр -i
( --ignore-case
) указывает locate
игнорировать регистр и запускать поиск без --ignore-case
регистра.
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
в вашем терминале.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии.