23.06.2025

Как работает поиск в Linux?

Для работы с Linux дистрибутивами в основном используют терминал или же консоль, которые требуют знания основных команд для полноценной работы со средой. Почти для каждой задачи существует утилита, которая выполняет в заранее определенные функции. Поиск файлов и шаблонов текста в них не стал исключением, две основные утилиты, которые набрали популярность и по сей день используются в работе: find и grep. Если find используется только для поиска пути файлов по их свойствам, то grep в дополнении выполняет поиск по их содержимому. В материале рассмотрим ее синтаксис, основные опции и примеры использования в работе!

Что такое GREP и как его найти?

Как уже упоминалось выше, GREP представляет собой многофункциональную утилиту Linux для поиска файлов и текста по шаблонам, регулярным выражениям.

Регулярные выражения (regexp) – механизм поиска информации по в заранее заданным шаблонам в соответствии с определенными правилами.

В основном, на многих дистрибутивах уже существует предустановленный с ней пакет. Для того чтобы проверить наличие его на вашей машине введите команду:

grep

Скриншот №1 — Пакет grep

Если вывод выглядит следующим образом, то пакет уже установлен, иначе установите его через ваш пакетный менеджер, для Ubuntu, Debian и apt-подобных:

apt update && apt upgrade && apt install grep

Для RPM-подобных систем, команда для установки пакета м его зависимостями может выглядеть следующим образом:

dnf update && dnf upgrade && dnf install grep

После того, как мы убедились в том, что пакет был установлен перейдем к рассмотрению синтаксиса утилиты и ее опций!

Синтаксис и опции

Для поиска используется сама команда grep, а так же основные опции, которые и образуют синтаксис команды:

grep [options] [pattern] [path to file]

Для простого поиска по шаблону в файле используем команду:

grep 'named Alex' /home/kk.txt

Скриншот №2 — Поиск в файле

В заданном файле был найден и подсвечен запрашиваемый шаблон, в данном случае использовались два основных блока синтаксиса [pattern] и [path to file] без [options]. Но что если, нам нужно выполнить более сложный поиск с учетом нескольких условий? Для этого и существует целый список опций [options], рассмотрим основные и приведем пример их использования:

Настройка сопоставления шаблонов:
-E, –extended-regexp Расширенные регулярки для шаблонов;
-G, –basic-regexp Стандартные регулярки для шаблонов;
-P, –perl-regexp Использование регулярки-perl.

Источники шаблонов:
-e, –regexp= [шаблон] позволяет задать паттерн напрямую;
-f, –file=[файл] позволяет задать паттерн напрямую.

Управление регистром:
-i, –ignore-case Без учета регистра про поиске соответствия;
–no-ignore-case C учетом регистра про поиске соответствия, работает по-умолчанию.

Специальные режимы сопоставления:
-w, –word-regexp Учитывать при сопоставлении, только целые слова;
-x, –line-regexp Учитывать при сопоставлении, только целые строки.

Альтернативное окончание строки:
-z, –null-data Считать конец строки нулевым байтом вместо символа новой строки.

Все эти группы опций относятся к конфигурации способа сопоставления шаблона с массивом данных. Для чуть более сложного поиска, чем в первом примере, будем использовать обычные регулярные выражения. Сейчас остальные опции не понадобятся. Укажем тот же шаблон:

grep -e 'named Alex' /home/kk.txt

Скриншот №3 — Поиск с помощью регулярных выражений

В тексте присутствует два слова Alex и Alex’s parents, суть работы регулярок заключается в том что они разбивают данные на символы и ищут паттерны. Поэтому при поиске grep -e ‘named Alex’ /home/kk.txt будет два совпадения Alex и Alexes parents. Как найти конкретное слово или строку, чтобы не попадали иные значения? Для этого используем опцию -w, она позволит разбить предложения по словам, а не по символам в них:

grep -w -e 'Alex' /home/kk.txt

Скриншот №4 — Поиск по словам

Как видим в примере не было выделено слово Alexes, так как разбиение было по словам.

Рекурсивный поиск grep

Но что если файл не один и необходимо найти совпадение по множеству файлов в одной директории? Для этого в grep существует опция -r, позволяющая определить папку для поиска по содержимому. Реализуем запрос имени нашего пользователя в логах:

grep -r "ghn" /var/log

Скриншот №5 — Поиск по логам

Все действия были выполнены в среде облачного сервера от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать:

Скриншот №6 — Создание сервера

Потребуется некоторое время для развертывания серверных мощностей. После чего вы можете подключиться любым из удобных способов. На основе предлагаемы VPS и VDS серверов, так же можно развернуть уже свою виртуальную инфраструктуру.

Фильтрация вывода команд

Очень часто в Linux вывод команд в терминал громаден или содержит много не нужной информации, для этого используем pipe или же перенаправление в уже утилиту grep. Выглядит это так, предположим нам необходимо проверить установлен ли пакет NetworkManager для управления сетями:

dnf list || grep "NetworkManager"

Если вы используете apt-менеджер, замените dnf в команде:

apt list || grep "NetworkManager"

Скриншот №7 — Фильтрация вывода команды

Работа с дистрибутивами Linux требует уверенного владения терминалом и знания основных команд. Утилиты find и grep занимают важное место в арсенале инструментов, обеспечивая эффективный поиск файлов и их содержимого.