Использование команд find, locate, which и whereis для поиска файлов в Linux

Существует несколько способов найти и локализовать файлы из терминала в Linux, и find, locate, which и whereis — это некоторые из наиболее часто используемых команд для этого. Давайте рассмотрим эти четыре команды поиска, их сходства и различия.
1. find
Простой способ поиска файлов в любом указанном каталоге — использовать команду find. Если каталог для выполнения поиска не указан явно, то поиск будет выполнен в текущем каталоге.
Следующий скриншот показывает, как в текущем каталоге (.) выполняется поиск всех имен файлов, заканчивающихся на .txt.

Поиск также может выполняться на основе временных меток, прав доступа к файлам, размера файлов, типа файлов, владельца файлов и т. д. Для управления параметрами поиска можно использовать регулярные выражения. Более подробные инструкции по команде find можно найти здесь.
2. locate
Эта команда — еще один способ найти файлы по имени. Предыдущая команда ищет в указанном каталоге, а затем предоставляет результаты пользователю. Этот инструмент выполняет поиск по базе данных, называемой “mlocate.db”, которая находится в “ /var/lib/mlocate/mlocate.db”. Эта база данных обновляется каждое утро с помощью утилиты cron.
Команда выполняется быстрее, чем find, потому что поиск осуществляется по существующей базе данных, которая уже собрала список всех файлов и каталогов в системе.
locate, за которым следует имя файла, отображает абсолютный путь, по которому существует этот файл.
Предположим, что в домашнем каталоге был создан скрипт.
Если мы попытаемся найти недавно созданный и скопированный скрипт, мы не получим никакого вывода.
locate myscriptПоскольку cron обновляет базу данных только утром, любые файлы, добавленные в систему в течение дня, требуют ручного обновления базы данных. Это можно сделать с помощью команды updatedb.
sudoupdatedbЕсли мы попытаемся “найти” пользовательский скрипт, он сможет найти файл.
3. which
После обсуждения команд для поиска файлов давайте перейдем к одной команде, которая может помочь найти абсолютный путь исполняемых файлов в системе: which.
Один исполняемый файл/скрипт/бинарный файл может находиться в нескольких местах в системе. which ищет в каталогах, указанных в переменных окружения $PATH и $MANPATH, наличие указанного исполняемого файла.
Без каких-либо переключателей which отображает первый найденный абсолютный путь для исполняемого файла.
Переключатель -a отображает все вхождения найденных абсолютных путей для указанного исполняемого файла.
Абсолютные пути для нескольких исполняемых файлов можно найти, указывая исполняемые файлы один за другим.
4. whereis
whereis — это еще одна команда, которая используется для получения трех частей информации о исполняемом файле:
- абсолютный путь бинарного файла
- абсолютный путь, где находится исходный код этого бинарного файла в системе
- абсолютный путь к руководству, которое существует для этого бинарного файла
Для “bzgrep” бинарный файл находится в “/bin”, а руководство находится в “/usr/share/man/man1”. Его исходный код не существует в системе.
whereis можно настроить на поиск только абсолютного пути бинарного файла с помощью переключателя -b. Поиск может быть выполнен только в каталогах, перечисленных после переключателя -B. Имена после -f указывают все бинарные файлы, для которых необходимо получить информацию.
Аналогично, поиск можно ограничить только исходным кодом или только руководствами, используя переключатели -s и -m. -S и -M, за которыми следуют имена каталогов, указывают каталоги для поиска исходного кода и руководств соответственно.
Переключатель -l предоставит детализированный список абсолютных путей всех каталогов, используемых whereis для выполнения поиска.

Заключение
Не существует недостатка в инструментах для поиска и локализации файлов в терминале. Я надеюсь, что теперь у вас есть хорошее представление о четырех полезных инструментах поиска в системах Linux. Если вам нужны более подробные сведения об их использовании, вы можете ознакомиться с их страницами руководства для получения подробной документации.