Поиск файлов в Linux. Как осуществить его по имени документа и содержимому?

поиск файлов в linux. как осуществить его по имени документа и содержимому?

Поиск исполняемой программы

Не самой распространенной задачей, но всё же имеющей место быть, является поиск исполняемого файла программы. Для этого в Linux есть специальная команда which. Она принимает в качестве параметра имя программы, а после выполнения выводит в терминал список с расположением совпадающих файлов.

#поиск системной программы
which cat
/bin/cat

#поиск пользовательской программы
which docker-stack
/home/username/.local/bin/docker-stack

Заметка
Команда which ищет только те файлы, у которых есть право на выполнение как программы. Поиск осуществляется по директориям, заданным в переменной окружения PATH. Содержимое переменной PATH может отличаться для различных пользователей.

Чтобы охватить как можно большее количество системных директорий, необходимо войти в систему под учетной записью администратора.

Поиск файлов через базу данных

Linux имеет встроенные механизмы индексирования файловой системы и осуществления быстрого поиска. Для этого раз в день запускается сканирование директорий и формирование системной базы данных. Обычно она располагается в /var/lib/mlocate/mlocate.db. Механизм сканирования также можно вызвать вручную с помощью команды updatedb.

Для осуществления поиска файлов в системной базе данных нужно использовать команду locate. Просто укажите имя файла сразу за именем команды. Например, «locate my-favorite-book».

#поиск по вхождению фразы
locate config
/var/lib/dpkg/info/cups-bsd.config
/var/lib/dpkg/info/dash.config
/var/lib/dpkg/info/debconf.config
/var/lib/dpkg/info/dictionaries-common.config
...

Заметка
Поиск, производимый командой locate очень быстр. Однако учитывайте тот факт, что системная база данных может быть не актуальной на момент осуществления операции. Механизм сканирования файловой системы, время его проведения и вообще наличие такого инструмента может разниться в различных дистрибутивах Linux.

Поиск по текстовому содержимому

Команды locate и which полезны лишь при поиске файла по его имени. Однако для проверки текстового содержимого документов на вхождение искомых данных нужно использовать другой инструмент. Linux имеет специальную команду grep, которая принимает шаблон для поиска и имя файла. В случае нахождения совпадений, они будут выведены в терминал. В общем виде выражение можно составить как «grep шаблон_поиска имя_файла».

Шаблон для поиска является регулярным выражением, а имя файла может быть задано с использованием механизмов подстановки и групповых символов. Таким образом, поиск текста осуществляется по нескольким файлам сразу.

Команда grep имеет много дополнительных опций. Например, опция -v заставит выводить текстовые строки, не совпадающие с шаблоном, а опция -P позволит интерпретировать регулярное выражение в стиле языка программирования Perl.

#достаем все сообщения ядра из лог-файла
grep "kernel" /var/log/syslog

#комбинируем grep с выводом других команд
ls -l ~/ | grep "username"

Универсальный поиск по файлам

Своего рода швейцарским ножом в поиске файлов является команда find. Отметим, что она имеет множество опций, которые могут кардинально изменять механизм поиска. Мы изложим лишь основные принципы, а с остальными возможностями ознакомьтесь в справке по команде.

Базовый принцип использования find состоит в указании директории поиска и опций. Например, выражение «find ~/ -name *.cpp» осуществит поиск файлов, имеющих расширение «cpp» по всем каталогам, находящимся в личной директории пользователя.

Значение, указанное после опции -name, задает шаблон соответствия имени файла. Вы можете использовать опцию -type для указания типа файла, где в качестве значений нужно использовать специальные буквы: d — директория, f — файл, l - символическая ссылка и т. д. Опции -user, -group и -size также довольно полезны. Их значениями являются имя пользователя, имя группы и размер файла в байтах.

С помощью опции -exec каждому файлу, предназначенному для установки соответствия, можно добавить произвольную обработку. Таким образом, появляется возможность осуществления поиска, как по имени файла, так и по содержимому. Ниже приводится пример комбинирования команды find и grep за счет использования опции -exec.

#поиск по имени файла
find ~/ -name *.cpp

#по конкретному пользователю и группе
find ~/ -name *.cpp -user 'my-username' -group 'my-group'

#комбинирование поиска по имени и содержанию
find ~/ -name '*.config' -type f -exec grep 'user' {} \;

Последние публикации