Не самой распространенной задачей, но всё же имеющей место быть, является поиск исполняемого файла программы. Для этого в Linux есть специальная команда which. Она принимает в качестве параметра имя программы, а после выполнения выводит в терминал список с расположением совпадающих файлов.
Поиск файлов через базу данных
Linux имеет встроенные механизмы индексирования файловой системы и осуществления быстрого поиска. Для этого раз в день запускается сканирование директорий и формирование системной базы данных. Обычно она располагается в /var/lib/mlocate/mlocate.db. Механизм сканирования также можно вызвать вручную с помощью команды updatedb.
Для осуществления поиска файлов в системной базе данных нужно использовать команду locate. Просто укажите имя файла сразу за именем команды. Например, «locate my-favorite-book».
Поиск по текстовому содержимому
Команды locate и which полезны лишь при поиске файла по его имени. Однако для проверки текстового содержимого документов на вхождение искомых данных нужно использовать другой инструмент. Linux имеет специальную команду grep, которая принимает шаблон для поиска и имя файла. В случае нахождения совпадений, они будут выведены в терминал. В общем виде выражение можно составить как «grep шаблон_поиска имя_файла».
Шаблон для поиска является регулярным выражением, а имя файла может быть задано с использованием механизмов подстановки и групповых символов. Таким образом, поиск текста осуществляется по нескольким файлам сразу.
Команда grep имеет много дополнительных опций. Например, опция -v заставит выводить текстовые строки, не совпадающие с шаблоном, а опция -P позволит интерпретировать регулярное выражение в стиле языка программирования Perl.
Универсальный поиск по файлам
Своего рода швейцарским ножом в поиске файлов является команда find. Отметим, что она имеет множество опций, которые могут кардинально изменять механизм поиска. Мы изложим лишь основные принципы, а с остальными возможностями ознакомьтесь в справке по команде.
Базовый принцип использования find состоит в указании директории поиска и опций. Например, выражение «find ~/ -name *.cpp» осуществит поиск файлов, имеющих расширение «cpp» по всем каталогам, находящимся в личной директории пользователя.
Значение, указанное после опции -name, задает шаблон соответствия имени файла. Вы можете использовать опцию -type для указания типа файла, где в качестве значений нужно использовать специальные буквы: d — директория, f — файл, l - символическая ссылка и т. д. Опции -user, -group и -size также довольно полезны. Их значениями являются имя пользователя, имя группы и размер файла в байтах.
С помощью опции -exec каждому файлу, предназначенному для установки соответствия, можно добавить произвольную обработку. Таким образом, появляется возможность осуществления поиска, как по имени файла, так и по содержимому. Ниже приводится пример комбинирования команды find и grep за счет использования опции -exec.