Linux find and grep

Консольный поиск в Linux: grep, find

Часто бывает нам нужно что то найти, но к сожалению или к счастью Линукс это ни Винда. Тут не льзя нажать одну кнопку и найти все что нужно, особенно если вы работает из консоли. В этой статье мы как раз и поговорим о поиске из консоли в *nix системах.

Начнем с простого. Я создал файл findmi , давайте его найдем. Собственно для этого есть мощная одноименная утилита find :

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

find [папка] [параметры] критерий шаблон

  • -name — поиск файлов по имени
  • -perm — поиск файлов в Linux по режиму доступа
  • -user — поиск файлов по владельцу
  • -group — поиск по группе
  • -mtime — поиск по времени модификации файла
  • -atime — поиск файлов по дате последнего чтения
  • -nogroup — поиск файлов, не принадлежащих ни одной группе
  • -nouser — поиск файлов без владельцев
  • -newer — найти файлы новее чем указанный
  • -size — поиск файлов в Linux по их размеру

Показать все файлы в текущей директории :

Не учитывать регистр при поиске по имени:

Найти файлы, которые не соответствуют шаблону:

Найти все файлы размером 50 мегабайт:

От пятидесяти до ста мегабайт:

Это конечно не все возможности. Но их должно хватить для большинства ситуаций. Для более глубокого разбора утилиты вы можете почитать man .

Текстовый поиск.

Конечно все круто, а что делать если нам надо найти ошибкe в логах ? Или другу текстовую информацию в файле ? Конечно у нас есть просто мега утилита grep ))))

Игнорировать регистрозависимые слова -i :

Две разные строки внутри файла :

Точное совпадение слова -w :

-n — отображать номер строки в файле;

Поиск в выводе команды:

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

  • — include=\*. Любые файлы с разрешением txt,log .
  • -r Рекурсивный поиск .
  • -e Шаблон для поиска .

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

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

Иногда может понадобится найти файл, в котором содержится определённая строка или найти строку в файле, где есть нужное слово. В Linux всё это делается с помощью одной очень простой, но в то же время мощной утилиты grep. С её помощью можно искать не только строки в файлах, но и фильтровать вывод команд, и много чего ещё.

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

Что такое grep?

Команда grep (расшифровывается как global regular expression print) — одна из самых востребованных команд в терминале Linux, которая входит в состав проекта GNU. Секрет популярности — её мощь, она даёт возможность пользователям сортировать и фильтровать текст на основе сложных правил.

Утилита grep решает множество задач, в основном она используется для поиска строк, соответствующих строке в тексте или содержимому файлов. Также она может находить по шаблону или регулярным выражениям. Команда в считанные секунды найдёт файл с нужной строчкой, текст в файле или отфильтрует из вывода только пару нужных строк. А теперь давайте рассмотрим, как ей пользоваться.

Синтаксис grep

Синтаксис команды выглядит следующим образом:

$ grep [опции] шаблон [имя файла. ]

$ команда | grep [опции] шаблон

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

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

Опции

Давайте рассмотрим самые основные опции утилиты, которые помогут более эффективно выполнять поиск текста в файлах grep:

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

Все самые основные опции рассмотрели и даже больше, теперь перейдём к примерам работы команды grep Linux.

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

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

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

В первом примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста grep в файле /etc/passwd введите следующую команду:

grep User /etc/passwd

В результате вы получите что-то вроде этого, если, конечно, существует такой пользователь:

А теперь не будем учитывать регистр во время поиска. Тогда комбинации ABC, abc и Abc с точки зрения программы будут одинаковы:

grep -i «user» /etc/passwd

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

Например, мы хотим выбрать все ошибки из лог-файла, но знаем, что в следующей строчке после ошибки может содержаться полезная информация, тогда с помощью grep отобразим несколько строк. Ошибки будем искать в Xorg.log по шаблону «EE»:

grep -A4 «EE» /var/log/xorg.0.log

Выведет строку с вхождением и 4 строчки после неё:

grep -B4 «EE» /var/log/xorg.0.log

Выведет целевую строку и 4 строчки до неё:

grep -C2 «EE» /var/log/xorg.0.log

Выведет по две строки с верху и снизу от вхождения.

Регулярные выражения в grep

Регулярные выражения grep — очень мощный инструмент в разы расширяющий возможности поиска текста в файлах. Для активации этого режима используйте опцию -e. Рассмотрим несколько примеров:

Поиск вхождения в начале строки с помощью спецсимвола «^», например, выведем все сообщения за ноябрь:

grep «^Nov 10» messages.1

Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s
Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10

Поиск в конце строки — спецсимвол «$»:

grep «terminating.$» messages

Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating.
Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.

Найдём все строки, которые содержат цифры:

grep «1» /var/log/Xorg.0.log

Вообще, регулярные выражения grep — это очень обширная тема, в этой статье я лишь показал несколько примеров. Как вы увидели, поиск текста в файлах grep становиться ещё эффективнее. Но на полное объяснение этой темы нужна целая статья, поэтому пока пропустим её и пойдем дальше.

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

Если вам нужно провести поиск текста в нескольких файлах, размещённых в одном каталоге или подкаталогах, например в файлах конфигурации Apache — /etc/apache2/, используйте рекурсивный поиск. Для включения рекурсивного поиска в grep есть опция -r. Следующая команда займётся поиском текста в файлах Linux во всех подкаталогах /etc/apache2 на предмет вхождения строки mydomain.com:

grep -r «mydomain.com» /etc/apache2/

В выводе вы получите:

grep -r «zendsite» /etc/apache2/
/etc/apache2/vhosts.d/zendsite_vhost.conf: ServerName zendsite.localhost
/etc/apache2/vhosts.d/zendsite_vhost.conf: DocumentRoot /var/www/localhost/htdocs/zendsite
/etc/apache2/vhosts.d/zendsite_vhost.conf:

Здесь перед найденной строкой указано имя файла, в котором она была найдена. Вывод имени файла легко отключить с помощью опции -h:

grep -h -r «zendsite» /etc/apache2/

ServerName zendsite.localhost
DocumentRoot /var/www/localhost/htdocs/zendsite

Поиск слов в grep

Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова с помощью опции -w:

grep -w «abc» имя_файла

Поиск двух слов

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

egrep -w ‘word1|word2’ /path/to/file

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

Утилита grep может сообщить, сколько раз определённая строка была найдена в каждом файле. Для этого используется опция -c (счетчик):

grep -c ‘word’ /path/to/file

C помощью опции -n можно выводить номер строки, в которой найдено вхождение, например:

grep -n ‘root’ /etc/passwd

Инвертированный поиск в grep

Команда grep Linux может быть использована для поиска строк в файле, которые не содержат указанное слово. Например, вывести только те строки, которые не содержат слово пар:

grep -v пар /path/to/file

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

Вы можете указать grep выводить только имя файла, в котором было найдено заданное слово с помощью опции -l. Например, следующая команда выведет все имена файлов, при поиске по содержимому которых было обнаружено вхождение primary:

grep -l ‘primary’ *.c

Цветной вывод в grep

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

grep —color root /etc/passwd

Выводы

Вот и всё. Мы рассмотрели использование команды grep для поиска и фильтрации вывода команд в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках. Если у вас остались вопросы, пишите в комментариях!

Источник

find и grep в Linux как инструмент для администрирования

Всем доброго времени суток и всяческих таких прочих разностей.

Давно что-то я ничего не писал на серверную тему в блоговую часть сайта. Сегодня немного привычных и унылых, для многих опытных человеков, банальностей, но при этом немного полезного инструментария для всех остальных.

Как Вы уже поняли из заголовка речь пойдет про команды find и grep в Linux, которые позволяют используя консоль, терминал, ssh или что там у Вас еще (или как Вы это «еще» называете) искать файлы/директории по их именам/содержимому и тому подобному.

Давайте кратенько посмотрим на них.

find — синтаксис и зачем оно нужно

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

Базовый синтаксис ключей (забран с Вики):

  • -name — искать по имени файла, при использовании подстановочных образцов параметр заключается в кавычки. Опция ` -name ‘ различает прописные и строчные буквы; чтобы использовать поиск без этих различий, воспользуйтесь опцией ` -iname ‘;
  • -type — тип искомого: f =файл, d =каталог, l =ссылка ( link ), p =канал ( pipe ), s =сокет;
  • -user — владелец: имя пользователя или UID ;
  • -group — владелец: группа пользователя или GID ;
  • -perm — указываются права доступа;
  • -size — размер: указывается в 512 -байтных блоках или байтах (признак байтов — символ «c» за числом);
  • -atime — время последнего обращения к файлу (в днях);
  • -amin — время последнего обращения к файлу (в минутах);
  • -ctime — время последнего изменения владельца или прав доступа к файлу (в днях);
  • -cmin — время последнего изменения владельца или прав доступа к файлу (в минутах);
  • -mtime — время последнего изменения файла (в днях);
  • -mmin — время последнего изменения файла (в минутах);
  • -newer другой_файл — искать файлы созданные позже, чем другой_файл;
  • -delete — удалять найденные файлы;
  • -ls — генерирует вывод как команда ls -dgils ;
  • -print — показывает на экране найденные файлы;
  • -print0 — выводит путь к текущему файлу на стандартный вывод, за которым следует символ ASCII NULL (код символа 0);
  • -exec command <> \; — выполняет над найденным файлом указанную команду; обратите внимание на синтаксис;
  • -ok — перед выполнением команды указанной в -exec, выдаёт запрос;
  • -depth или -d — начинать поиск с самых глубоких уровней вложенности, а не с корня каталога;
  • -maxdepth — максимальный уровень вложенности для поиска. «-maxdepth 0» ограничивает поиск текущим каталогом;
  • -prune — используется, когда вы хотите исключить из поиска определённые каталоги;
  • -mount или -xdev — не переходить на другие файловые системы;
  • -regex — искать по имени файла используя регулярные выражения;
  • -regextype тип — указание типа используемых регулярных выражений;
  • -P — не разворачивать символические ссылки (поведение по умолчанию);
  • -L — разворачивать символические ссылки;
  • -empty — только пустые каталоги.

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

Результатам будет нечто такое из чего можно вычленять справку по отдельному ключу или команде (кликабельно):

В качестве развлечения можно использовать:

Дабы получить мануал из самой системы по базису и ключам (тоже кликабельно);

Немного о примерах использования. Точно так же, оттуда же и тп. Просто для понимания как оно работает вообще. Наиболее просто, конечно, осознать это потренировавшись в той же консоли на реальной системе.

find примеры использования

Ищем все файлы, начиная с текущей директории, название которых начинается на sonikelf :

find . -name ‘sonikelf*’

Найти все файлы, начиная с корневой директории, название которых начинается на sonikelf :

find / -name ‘sonikelf*’

Поиск в директориях /usr/local/man и /opt/local/man файлов, название которых начинается на sonikelf :

find /usr/local/man /opt/local/man -name ‘sonikelf*’

Ищем все файлы, начиная с текущей директории, название которых начинается на sonikelf или qu . Обратите внимание, что по умолчанию все аргументы соединены с помощью логического и (опция ‘ -a ‘). Если необходимо объединить несколько аргументов логическим или — используйте ключ ‘ -o ‘:

find . \( -name «sonikelf*» -o -name «qu*» \) -print

Ищем графические файлы, начиная с текущего каталога (см.на кавычки):

find . -type f -regex «.*\.\(jpg\|jpeg\|gif\|png\|JPG\|JPEG\|GIF\|PNG\)»

Вывести список файлов (см. на / ) во всей файловой системе, чей размер больше 100 Мб :

find / -size +100M -print

Ищем файлы в указанных каталогах:

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

grep — что это и зачем может быть нужно

Про «репку» (как я её называю) почему-то в курсе не многие, что печалит. «Унылая» (не в обиду) формулировка из Википедии звучит примерно так:

grep — утилита командной строки, которая находит на вводе строки, отвечающие заданному регулярному выражению, и выводит их, если вывод не отменён специальным ключом.

Не сильно легче, но доступнее, можно сформулировать так:

grep — утилита командной строки, используется для поиска и фильтрации текста в файлах, на основе шаблона, который (шаблон) может быть регулярным выражением.

Если всё еще ничего не понятно, то условно говоря это удобный поиск текста везде и всюду, в особенности в файлах, директория в и тп. Удобно распарсивать логи и их содержимое, не прибегая к софту, как это бывает в Windows .

Справку можно вычленить так же как по find , т.е методом pgrep, fgrep , egrep и черт знает что еще:

Расписывать все ключи и даже основные тут (вы еще помните, что это блоговая часть сайта?) не буду, так как в отличии от find ‘а, последних тут вообще страшное подмножество, особенно учитывая, что существуют pgrep, fgrep, egrep и черт знает что еще, которые, в некотором смысле тоже самое, но для определенных целей.

Потрясающе удобная штука, которая жизненно необходима, особенно, если Вы что-то когда-то где-то зачем-то администрировали. Взглянем на примеры.

grep примеры использования

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

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

grep sonikelf file.txt поиск sonikelf в файле file.txt, с выводом полностью совпавшей строкой
grep -o sonikelf file.txt поиск sonikelf в файле file.txt и вывод только совпавшего куска строки
grep -i sonikelf file.txt игнорирование регистра при поиске
grep -bn sonikelf file.txt показать строку (-n) и столбец (-b), где был найден sonikelf
grep -v sonikelf file.txt инверсия поиска (найдет все строки, которые не совпадают с шаблоном sonikelf)
grep -A 3 sonikelf file.txt вывод дополнительных трех строк, после совпавшей
grep -B 3 sonikelf file.txt вывод дополнительных трех строк, перед совпавшей
grep -C 3 sonikelf file.txt вывод три дополнительные строки перед и после совпавшей
grep -r sonikelf $HOME рекурсивный поиск по директории $HOME и всем вложенным
grep -c sonikelf file.txt подсчет совпадений
grep -L sonikelf *.txt вывести список txt-файлов, которые не содержат sonikelf
grep -l sonikelf *.txt вывести список txt-файлов, которые содержат sonikelf
grep -w sonikelf file.txt совпадение только с полным словом sonikelf
grep -f sonikelfs.txt file.txt поиск по нескольким sonikelf из файла sonikelfs.txt, шаблоны разделяются новой строкой
grep -I sonikelf file.txt игнорирование бинарных файлов
grep -v -f file2 file1 > file3 вывод строк, которые есть в file1 и нет в file2
grep -in -e ‘python’ `find -type f` рекурсивный поиск файлов, содержащих слово python с выводом номера строки и совпадений
grep -inc -e ‘test’ `find -type f` | grep -v :0 рекурсивный поиск файлов, содержащих слово python с выводом количества совпадений
grep . *.py вывод содержимого всех py-файлов, предваряя каждую строку именем файла
grep «Http404» apps/**/*.py рекурсивный поиск упоминаний Http404 в директории apps в py-файлах

И так далее и тому подобное. Потрясающе доступный с точки зрения простоты чтения и понимания, мануал по grep’у есть например тут. Ну либо у буржуев, как и всегда (если Вы знаете английский).

Послесловие

Ну в двух словах как-то так. Быть может кто-то еще не знал, не умел или подзабыл и может быть пригодится кому-то зачем-то и где-то.

Как и всегда, если есть вопросы и, особенно, дополнения (разумные, адекватные и по делу), то добро пожаловать в комментарии к этой заметке.

Источник

Читайте также:  Checkpoint snx windows 10
Оцените статью