Хотя в Linux существует много способов поиска и обнаружения файлов и каталогов, самым простым и быстрым из них, вероятно, является терминал. Однако не многие пользователи Linux знают об этом, что приводит к ненужной фрустрации. Вот краткое руководство, которое, надеюсь, поможет вам найти то, что вы ищете в своей системе. Здесь мы рассмотрим два разных приложения для поиска. Команда locate, которая использует базу данных для ускорения поиска, и команда find, которая выполняет поиск непосредственно в файловой системе.
Использование команды Locate
Команда «locate» — это первое средство, которое должен использовать пользователь Linux, поскольку оно работает намного быстрее, чем любые другие. Причина такой непревзойденной скорости заключается в том, что команда locate на самом деле не ищет на локальных жестких дисках нужные вам файлы или каталоги, а скорее читает файл базы данных mlocate.db, который содержит все пути к файлам в вашей системе.
Если вы еще не установили locate, используйте следующие команды:
Debian и Ubuntu
sudo apt install locate
CentOS, AlmaLinux и Rocky Linux
dnf install locate
Подготовка команды locate к первому использованию
Чтобы обновить базу данных mlocate.db перед первым использованием, выполните:
sudo updatedb
Чтобы использовать locate, откройте терминал и введите locate, а затем имя файла, который вы ищете. В этом примере я ищу файлы, в имени которых содержится слово «sunny».
locate sunny

Locate также может сообщить, сколько раз ключевое слово поиска совпадает в базе данных. Это достигается путем включения в команду параметра «-c», который означает «count» (подсчет).
locate -c sunny

Пользователи должны помнить, что «locate» требует точного и конкретного имени искомого файла, в отличие от других, более гибких инструментов. Это означает, что locate отлично подходит для поиска того, в чьем имени вы уверены, но не так хорош, когда вы не помните точное имя файла.
locate unixs
vs
locate Unixs

Кроме того, поскольку «locate» считывает файл базы данных, результаты могут быть устаревшими и не совсем верными. Чтобы решить эту проблему, вы можете обновить базу данных путей к файлам, набрав «sudo updatedb» в терминале.
Здесь вы найдете дополнительные примеры использования команды locate.
Если после этого вы все еще не нашли то, что искали, или просто перегружены количеством результатов, перейдите к следующему шагу — команде «find».
Используйте команду Find
Команда «find» — это гораздо более мощная, но и более медленная утилита поиска. Это связано с тем, что в отличие от команды «locate», «find» фактически ищет на дисках файлы и каталоги, которые ищет пользователь. Find идеально подходит для тех случаев, когда вы пытаетесь найти файл или каталог, но не можете вспомнить его имя, потому что «find» может искать файлы, принадлежащие определенному пользователю или группе пользователей, файлы, которые были изменены или открыты недавно, файлы определенного диапазона размеров, скрытые файлы, исполняемые файлы, файлы только для чтения и файлы с определенными правами доступа. Самое приятное, что пользователь может свободно комбинировать несколько из вышеперечисленных критериев в одной команде «find», что существенно сужает круг результатов.
Говоря об сужении результатов, первое, что нужно сделать при запуске «find», — это указать ему, что поиск должен проводиться в определенном каталоге. Это значительно ускорит процесс поиска, но всегда зависит от размера каталога. Если вы знаете, где может находиться файл, откройте терминал, перейдите в каталог и запустите «find . [filename]». Эта точка указывает find на поиск в текущем каталоге. Если вы хотите выполнить поиск в домашнем каталоге, замените точку на «~/», а если вы хотите выполнить поиск во всей файловой системе, используйте «/».
Например, я хочу найти файл, содержащий плакат, в моем каталоге загрузок. Я знаю, что в имени файла есть слово «poster», но не помню точно, как он называется. Поэтому я перейду в папку загрузок с помощью команды cd в терминале, введя «cd Downloads», а затем введу команду:
sudo find . -name "*poster*"
Вот результат:

Это говорит мне о том, что в папке «Загрузки» есть файл pdf с именем «billy_poster copy». Если бы я не знал, где он находится, «find» все равно сообщил бы мне, что он находится в папке «Загрузки», если бы я выполнил поиск в родительском каталоге.

Теперь, если я заменю параметр «-name» на «-iname», я смогу получить результаты без учета регистра букв. Этого нет в «locate», поэтому это еще один полезный элемент, когда вы не уверены в имени файла.
sudo find . -iname "*poster*"

Теперь давайте предположим, что я все еще ищу тот же файл с постером, и единственное, что я помню, это то, что его размер меньше 5 МБ. В этом случае я бы использовал следующую команду:
find ~/ -size -5M
Если бы я знал, что его размер превышает, скажем, 2 МБ, команда была бы «find ~/ -size +2M». Самое приятное, что find поддерживает булевы операторы, которые позволяют сделать поиск еще более эффективным. В этом примере я использую команду, которая сочетает в себе мою информацию о том, что размер файла меньше 5 мегабайт, а также больше 2. Команда для этого будет следующей:
find / -size -5M -and -size +2M

Наконец, давайте предположим, что мы ничего не помним о файле, но помним, что мы открывали его три минуты назад. Чтобы найти его, используйте команду find:
find / -amin -3
Это будет «find / -amin -30» для получаса и «-amin -120» для двух часов и т. д. Если вы открывали файл два дня назад, используйте вместо этого:
find / -time -2
Это отобразит все файлы, к которым был доступ в течение последних двух дней в месте поиска.

Я думаю, что вышеуказанное охватывает большинство обычных сценариев использования. Для получения дополнительной информации о мощной команде «find» откройте терминал и введите «man find».