Мы создаем много файлов в процессе работы в системе, и запомнить все их расположение не самая простая задача. В таком случае можно использовать команду «locate», чтобы найти файл.
Команда locate используется для поиска файлов и каталогов в вашей системе. Он может искать файлы и каталоги по их имени, содержимому или местоположению.
В этой статье поговорим об этой команде, а так же рассмотрим несколько примеров ее использования.
Введение.
Пакет mlocate, по умолчанию, установлен в большинстве известных дистрибутивов. Узнать это, можно, просто выполнив команду locate. Если вывод будет следующим:
locate: no pattern to search for specified
То значит проблем нет, пакет присутствует в вашей системе. Если получаете, что-то вроде этого:
bash: locate: command not found
то вам необходимо будет его установить.
Установка locate
Команду locate устанавливается через официальный репозиторий, практически во всех дистрибутивах Linux. Вам просто нужно запустить следующую команду в соответствии с вашими дистрибутивами, чтобы установить пакет mlocate и получить доступ к команде locate.
Установка locate в Ubuntu/Debian
$ sudo apt update
$ sudo apt install mlocate
Установка locate в RHEL.
$ sudo dnf update
$ sudo dnf install mlocate
Установка locate в Manjaro/Endeavour/Arch Linux
$ sudo pacman -S mlocate
После завершения установки, можно и рассмотреть некоторые примеры использования команды locate.
1. Базовое использование команды locate
Использование locate интуитивно понятно. Просто нужно вызвать эту команду и передать ей имя файла в качестве аргумента, чтобы найти файл в дисковом хранилище.
$ locate [поисковой_запрос]
Например, мне нужно выполнить поиск файлов, которые содержат в имени или пути к нему, слово history. Для этого можно использовать, следующую команду:
[user@fedora ~]$ locate history
/etc/security/pwhistory.conf
/home/user/.bash_history
/home/user/.bash_history-05141.tmp
/home/user/.bash_history-05535.tmp
/home/user/.bash_history-07824.tmp
/home/user/.bash_history-19271.tmp
/home/user/.bash_history-23348.tmp
/home/user/.bash_history-32630.tmp
...
2. Постраничный вывод с помощью less.
Список искомых файлов может быть длинным. И чтобы его было удобно просматривать, может понадобиться какой-то инструмент для прокрутки вверх и вниз.
Для лучшей читаемости можно передать вывод команды locate в команду less.
$ locate [поисковой_запрос] | less
Например, можно передать команду, используемую выше в less
$ locate history | less
3. Ограничение количества строк в выводе
Можно ограничить количество результатов поиска. Для этого необходимо передать параметр -n и число строк необходимых для вывода.
$ locate [поисковой_запрос] -n [количество_строк]
Например, если мы хотим ограничить количество результатов до 5, мы можем использовать опцию -n с поисковым запросом
$ locate history -n 5
/etc/security/pwhistory.conf
/home/user/.bash_history
/home/user/.bash_history-05141.tmp
/home/user/.bash_history-05535.tmp
/home/user/.bash_history-07824.tmp
4. Подсчет количества строк результата.
Если вы хотите подсчитать количество строк в выводе, используется параметр -c.
$ locate -c [поисковой_запрос]
Например, я хочу найти количество файлов содержащих в имени или в пути слово «history»
$ locate -c history
331
5. Игнорировать регистр букв.
Вывод, который вы получаете от команды locate на экране, чувствителен к регистру. Это означает, что при поиске по слову «history» будет найдено только слово «history», и будут игнорироваться такие случаи, как «History» или «HISTORY».
Чтобы игнорировать регистр букв используется параметр -i.
$ locate -i [поисковой_запрос]
Например, если вы хотите найти все файлы, в имени или пути которых есть «history», вам нужно использовать опцию -i, как показано в следующей команде:
$ locate -i history
/etc/security/pwhistory.conf
/home/user/.bash_history
/home/user/.bash_history-05141.tmp
/home/user/.bash_history-05535.tmp
/home/user/.bash_history-07824.tmp
/home/user/.bash_history-19271.tmp
/home/user/.bash_history-23348.tmp
/home/user/.bash_history-32630.tmp
/home/user/.bash_history-34113.tmp
/home/user/.bash_history-34643.tmp
/home/user/.bash_history-37533.tmp
/home/user/.bash_history-44639.tmp
/home/user/.config/Code/User/History
/home/user/.config/Code/User/History/-10ea30c3
/home/user/.config/Code/User/History/-12397200
/home/user/.config/Code/User/History/-1250b6d
/home/user/.config/Code/User/History/-12ace685
/home/user/.config/Code/User/History/-12af2320
6. Поиск файла по точному имени.
Приведенная выше команда полезна, если вы не уверены в имени файла и местоположении указанного запроса. Но когда вы абсолютно уверены в имени файла, вы можете задать точное имя или путь к файлу.
Для этого используется параметр -r
$ locate -r [Поисковой_запрос]
Например, я хочу найти файл history.page, тогда запрос будет таким
$ $ locate -r history.page
/usr/share/help/C/gnome-calculator/history.page
/usr/share/help/bg/gnome-calculator/history.page
/usr/share/help/ca/gnome-calculator/history.page
/usr/share/help/cs/gnome-calculator/history.page
/usr/share/help/da/gnome-calculator/history.page
/usr/share/help/de/gnome-calculator/history.page
/usr/share/help/el/gnome-calculator/history.page
/usr/share/help/es/gnome-calculator/history.page
/usr/share/help/eu/gnome-calculator/history.page
...
7. Показывать только доступные файлы.
Нет, несомненно, скорость отработки команды locate не может не радовать. Но иногда можно обнаружить, что путь к файлу больше не доступен в вашей системе, а команда locate по-прежнему его отображает.
Это происходит потому, что команда updateb обновляет файл базы данных каждые 24 часа с помощью cron. Любые изменения, происходящие после цикла обновления, не будут записываться до следующего цикла или обновления вручную.
Вы можете использовать параметры -e или —existing, чтобы отображать только существующие файлы.
$ locate -e [Поисковой_запрос]
Например, удалю файл «test.pdf» из своего текущего каталога и выполнить команду без параметра -e и с параметром -e, чтобы выяснить разницу.
[user@fedora Документы]$ ls -la Test.pdf
-rw-r--r-- 1 user user 33256 июн 25 2023 Test.pdf
[user@fedora Документы]$ rm Test.pdf
[user@fedora Документы]$ ls -la Test.pdf
ls: невозможно получить доступ к 'Test.pdf': Нет такого файла или каталога
[user@fedora Документы]$ locate Test.pdf
/home/user/Документы/Test.pdf
[user@fedora Документы]$ locate -e Test.pdf -c
0
8. Использовать другую базу данных.
Иногда в вашей системе может быть несколько файлов plocate, и если вы хотите прочитать этот файл mlocate, вам нужно использовать опцию -d и указать путь к базе данных с шаблоном поиска.
Например, если у вас есть две доступные базы данных plocate, вы можете использовать следующую команду для поиска файла в той базе, которая не назначена по умолчанию:
$ locate [Новая БД] [Поисковой_запрос]
9. Обновление базы данных вручную.
Файл базы данных обновляется каждые 24 часа с помощью задания cron, и новые изменения будут отражены в файловой системе через 24 часа.
А если вы внесли какие-либо изменения и хотите обновить базу данных прямо сейчас, вам нужно запустить приведенную ниже команду в своем терминале:
$ sudo updatedb
Заключение.
Вот и все про команду locate. Если вы хотите поделиться некоторыми командами поиска, которые я пропустил, или какими-либо приемами, которые могут быть полезны пользователям Linux, поделитесь ими с нами.
P.S. Если вам интересен материал не забывайте ставить палец вверх под статьей. А так же, подписывайтесь на анонсы новых статей в телеграмм и на сайте RoadIT