Найти тему

Locate — ищем файлы в системе.

Оглавление

Мы создаем много файлов в процессе работы в системе, и запомнить все их расположение не самая простая задача. В таком случае можно использовать команду «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