Правила использования операторов grep и find в Linux

Изначально в операционных системах Unix / Linux не было графического интерфейса, поскольку они были ориентированы на использование серверов. Сегодня в этом отношении они не сильно уступают Windows, поэтому пользователи, использующие эту операционную систему, редко знают синтаксис и назначение основных команд Linux. Между тем, это очень мощный инструмент, позволяющий быстро выполнять проблемные или невыполнимые операции с помощью основных инструментов операционной системы. Сегодня вам будут представлены инструкции find и grep, которые являются основой файловой системы всех дистрибутивов Linux.

Правила использования grep и инструкции по поиску в Linux

Назначение операторов find и grep

Команда find в Linux — это оператор командной строки для работы с файлами, игнорирующий существующую иерархию. Он позволяет искать файлы с помощью различных фильтров, а также выполнять некоторые действия с файлами после успешного поиска. Среди критериев поиска файлов присутствуют практически все доступные атрибуты, от даты создания до разрешения.

Правила использования grep и инструкции по поиску в Linux

Команда grep в Linux также относится к поиску, но внутри файлов. Дословный перевод команды — «печать глобального регулярного выражения», но печать здесь означает вывод результатов задания на устройство по умолчанию, которым обычно является монитор. Обладая большим потенциалом, оператор используется довольно часто и позволяет искать в одном или нескольких файлах указанные фрагменты (шаблоны). Поскольку терминология в Linux значительно отличается от терминологии в среде Windows, многие пользователи испытывают значительные трудности при использовании этих команд. Мы постараемся устранить это неудобство.

Синтаксис grep и find

Начнем с оператора find. Синтаксис команды поиска файлов выглядит так:

найти [где искать] [параметры] [-опции] [действия]

Некоторые полезные параметры:

  • -version: отображает версию команды;
  • -type f: искать только файлы;
  • -type d — искать только в каталогах (папках).
  • -print: показывать полные имена файлов (в Linux они могут быть сколь угодно большими);
  • -depth: поиск в текущей папке и подкаталогах;

Правила использования grep и инструкции по поиску в Linux

Список доступных опций (обозначен тире):

  • пермь: по атрибуту «режим доступа»;
  • atime: с даты последнего открытия файла;
  • nouser: ищите файлы, для которых не указан атрибут владельца».
  • новее: искать файл с более поздней датой, чем та, которая указана в шаблоне директивы;
  • группа: по группе;
  • пользователь: поиск по имени владельца файла;
  • size: от размера файла в байтах;
  • имя: поиск файлов по имени;
  • mtime: с момента последней модификации (редактирования) файла;

Синтаксис grep:

grep [параметры] шаблон [где искать]

Опции следует понимать как дополнительные параметры спецификации, например, использование реверсивного режима или поиск заданного количества строк.

Читайте также:  Что делать, если телефон или планшет не подключается к Wi-Fi

Правила использования grep и инструкции по поиску в Linux

Шаблон указывает, что искать, используя указанную строку или регулярное выражение напрямую.

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

Давайте посмотрим на наиболее распространенные параметры grep:

  • -i: поиск без различия верхнего и нижнего регистра;
  • -v: перевернутый поиск, то есть отображает все строки, не содержащие указанный фрагмент;
  • -Bn: то же самое, но с линиями по образцу.
  • -w: искать фрагмент, окруженный пробелами с обеих сторон;
  • -s: игнорировать вывод ошибки;
  • -n: отправить номер строки, в которой был найден нужный фрагмент или шаблон, в стандартный вывод;
  • -An: возвращает желаемый фрагмент и предыдущие n строк;
  • -c: необходимо посчитать количество вхождений нужного фрагмента;
  • -b: распечатать номер блока перед выдачей результирующей строки;
  • -e: параметр указывает следующее регулярное выражение с собственным синтаксисом;
  • — l: вывод должен содержать только имена файлов с найденным фрагментом поиска;

Теперь есть смысл перейти от теоретического к практическому

Примеры использования утилит

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

Поиск текста в файлах

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

grep Имя пользователя / etc / passwd

Правила использования grep и инструкции по поиску в Linux

Если результат поиска положительный, мы получаем строку результата, подобную следующей:

Имя пользователя: x: 1021: 1021: Имя пользователя ,,,: / home / Пользователь: / bin / bash

Если вам нужно найти фрагмент текста без учета регистра, команда будет выглядеть так:

grep -i «имя пользователя» / etc / passwd

В этом случае будут найдены как пользователь NameUser, так и его «тезка» nameuser, а также все другие возможные комбинации.

Вывод нескольких строк

Допустим, нам нужно регистрировать все ошибки из окна оболочки Xorg.log. Задача усложняется тем, что после неправильного может следовать строка, содержащая ценную информацию. Это решается, если мы заставим команду отображать больше строк, используя строку «PP» в качестве шаблона»:

grep -A5 «PP» /var/log/xorg.0.log

Правила использования grep и инструкции по поиску в Linux

Берем строку, содержащую узор, и 5 строк после нее.

grep –C3 «PP» /var/log/xorg.0.log

Печатает одну строку с текстом и три строки до и после.

Использование в grep регулярных выражений

Это один из самых мощных инструментов Linux, который значительно расширяет возможности создания шаблона поиска. Регулярные выражения имеют собственный довольно сложный синтаксис. Не будем вдаваться в подробности, ограничившись примером использования RT. Как вы уже знаете, параметр -e используется, чтобы указать, что следующим будет использоваться регулярное выражение.

Попробуем в файле message.2 захватить все строки за сентябрь:

grep «^ 9 сентября»

Правила использования grep и инструкции по поиску в Linux

Результат будет примерно таким:

09 сен, 01:11:45 gs124 ntpd [2243]: сброс времени +0,197579 с

09 сен, 01:19:10 gs124 ntpd [2243]: сброс времени +0.203484 с

Чтобы найти образец, расположенный в конце строки файла, используйте символ «$»:

сообщения grep «term

Результат:

17 июня 19:01:19 клонема ядра: записывает завершение работы демона.

11 сентября 06:30:54 клонема ядра: записывает завершение работы демона.

Читайте также:  Настройка вибрации на iPhone — добавление, изменение, удаление

А вот пример использования регулярного выражения для поиска строк, содержащих ненулевые цифры:

grep «[1-9]» /var/log/Xorg.1.log

Использование рекурсивного поиска в grep

Если вы знакомы с термином «рекурсия», в Linux этот метод используется, в частности, для поиска фрагмента в нескольких файлах, расположенных в каталоге и его подкаталогах. Наличие рекурсии будет обозначено опцией -r. Начнем искать фрагмент namedomain.org в файлах, находящихся в подкаталогах папки / etc / apache1:

grep -r «domainname.org» / etc / apache1/

Правила использования grep и инструкции по поиску в Linux

Результат может быть примерно таким:

/etc/apache1/vhosts.d/ namedomain.org

Если вам не нужно отображать имя файла, используйте параметр -h:

grep -h -r «domainname.org» / etc / apache1/

Поиск слов

По умолчанию поиск фрагмента qwe завершается выводом всех слов, в которых встречается этот фрагмент: kbqwe, qwe123, aafrqwe32. Чтобы сузить поиск до определенного фрагмента, вам нужно использовать параметр -w:

grep -w «qwe» где_поиск

Поиск двух или нескольких слов

Усложняем задачу: нам нужно найти все строки, в которых встречаются два слова. Команда будет выглядеть так:

grep -w «word01 | word02» где_поиск

Количество вхождений строки

Если хотите посчитать. Как часто нужный фрагмент встречается в файле, используем конструкцию с параметром -c:

grep -c «‘текст» где_поиск

Правила использования grep и инструкции по поиску в Linux

Параметр -n поможет узнать, в какой строке встречается нужный шаблон:

grep -n «пользователь» / etc / passwd

Инвертированный поиск с помощью grep

Иногда задача поиска с помощью grep по содержимому файлов направлена ​​на поиск не самой записи, а строк, в которых этот фрагмент отсутствует. Параметр –v поможет нам:

grep -v «txt» где_поиск

Вывод имени файла

Хотя вам нужно найти все файлы в указанном каталоге, содержащие искомую модель. Это можно сделать с помощью опции -l. Итак, полная команда для вывода файлов, содержащих «вторичную» строку в папке / etc, будет выглядеть так:

grep -l «вторичный» / и т д

Цветной вывод с использованием grep

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

grep — «вторичный» цвет / etc

Перейдем к примерам использования поисковой утилиты в Linux.

Поиск всех файлов

Чтобы просмотреть список файлов, находящихся в текущем каталоге, используйте команду в следующем формате:

находит .

Если вам нужно показать полное имя файла, используйте команду

находит. -Нажмите

Вывод файлов в заданном каталоге

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

найти ./etc

Правила использования grep и инструкции по поиску в Linux

А вот как в текущем каталоге можно найти файлы, содержащие в названии определенный фрагмент:

находит. -name «* .gif»

Если поиск должен выполняться без учета регистра, команду необходимо изменить:

Игнорировать регистр при поиске по имени:

находит. -iname «* .gif»

Ограничение глубины поиска

Еще одна довольно типичная задача — поиск файлов в определенной папке с определенным именем:

находит. –Maxdepth01 1 -name «* .html»

Инвертирование шаблона

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

находит. -not -name «пользователь*»

Поиск по нескольким критериям

Вот пример командной строки, в которой утилита поиска используется для поиска двух критериев с помощью оператора not (исключение):

находит. -name «user» -not -name «* .html»

Читайте также:  Как прошить смартфон Samsung с помощью программы Odin

В этом случае будут найдены файлы, имя которых включает фрагмент пользователя, но расширение не html. Вместо оператора исключения можно использовать логику «И» / «ИЛИ»:

find -name «* .js» -o -name «* .sql»

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

Поиск в нескольких каталогах

Если нам нужно найти файлы в двух каталогах, мы просто указываем from через пробел:

find -type f ./test01 ./test02 -name «* .sql»

Поиск скрытых файлов

В Linux, как и в Windows, есть скрытые файлы, которые не будут отображаться при использовании команды find без специального символа. Этот символ представляет собой «тильду», и директива будет выглядеть так:

найти ~ -имя «.*»

Поиск файлов в Linux по разрешениям

Иногда бывает необходимо отфильтровать каталог по определенной маске прав. Например, если нам нужно найти файлы с атрибутом 0661, мы используем команду:

находит. -постоянный 0661

Задача фильтрации файлов с атрибутом «только чтение» решается следующим образом:

найти / etc / user -perm / u = r

А вот как будет выглядеть поиск исполняемых файлов в каталоге etc:

найти / etc -perm / a = x

Поиск файлов по группах/пользователях

Администратор часто сталкивается с задачей поиска файлов, принадлежащих определенному пользователю и / или группе. Поиск по пользователю:

находит. -пользователь славко

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

найти / var -group разработчиков

Поиск по дате последней модификации

Формат видимой даты файла в Linux привязан к дате его изменения (тот же принцип используется в Windows). Чтобы сформировать список по дате, используйте опцию mtime. Предположим, мы хотим найти файлы, которые были изменены два месяца назад:

найти / домой -mtime 60

Правила использования grep и инструкции по поиску в Linux

Атрибуты файла включают дату последнего открытия (без изменений). Такие файлы выдаются следующей командой:

find / home -atime 60

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

find / home -mtime +60 –mtime -120

А вот как найти файлы, которые вы только что изменили (двухчасовой давности):

найти / home -cmin 120

Поиск файлов по размеру

Вы подозреваете, что кто-то использует диск для размещения фильмов? Ищем файлы размером 1,4 ГБ:

найти / -размер 1400M

Правила использования grep и инструкции по поиску в Linux

Или используйте диапазон:

найти / -размер + 1400M -размер -2800M

Поиск пустых файлов/каталогов

Да не удивляйтесь. Задача наведения порядка в СМИ не является уникальной для операционной системы Android. В Linux это решается с помощью следующей директивы:

найти / var -type f -empty

Пример действий с найденными файлами

В Linux команда find может рекурсивно выполнять определенные действия с файлами, которые вы ищете. Параметр exec должен использоваться для выполнения файловых команд. Итак, директива для отображения информации обо всех файлах с помощью команды ls будет выглядеть так:

находит. -exec ls -l {} \;

А вот как легко удалить временные файлы с определенной маской в ​​каталоге / home / temp:

find / tmp -type f -name «* .html» -exec rm -f {} \;

Конечно, новичку использование командной строки с огромным количеством опций для поиска поиска покажется немного навороченным, но в Linux это нормально. Как бы вы решили описанные здесь проблемы в Windows? Это то же самое. В этом отношении Linux явно впереди.

Ссылка на основную публикацию