Пять grep-подобных программ






Все знают и любят grep. Сегодня мы с вами рассмотрим пять утилит, «заточенных» для применения функционала grep в определённых условиях, а именно: pgrepgrepcidr, ngrep, pdfgrep и taggrepper. Использовать эти утилиты вы можете из своей любимой оболочки. также в заметке приводятся примеры использования каждой утилиты.



pgrep

pgrep становится довольно часто используемой командой (или это мне так кажется). Задачей этой утилиты является просмотр списка запущенных процессов и вывод их PID согласно заданным критериям, не выводя при этом PID самой pgrep. Например:

$ pgrep ssh
378
1854

В этом примере pgrep вывела идентификаторы процессов, имеющих в своих именах слово 'ssh'. Для сравнения, пользуясь «традиционным» способом, вам пришлось бы дать команду:

$ ps -ef |grep ssh |grep -v grep | awk '{print $2}'

Также, вы можете указывать дополнительные критерии поиска. Например команда:

$ pgrep -u root sshd

выведет PID всех процессов, в командной строке запуска которых есть слово 'sshd' и эффективный UID которых равен root. Или же, например, при помощи команды

$ pgrep -u root,daemon

вы можете получить список PID процессов, эффективные UID которые равны root или daemon. Дополнительную информацию об утилите pgrep можно получить из её man-страницы.

grepcidr

grepcidr очень удобна в случаях, когда необходимо отыскать вхождения IP-адресов или их диапазонов в формате Classless Inter-Domain Routing (CIDR). Так же, как и grep, grepcidr понимает опцию инвертирования и может производить поиск в файле. grepcidr может производить сравнение с шаблоном тысячи и даже миллионы IP-адресов, используя небольшое количество памяти и делая это быстро.

Формат вызова grepcidr для поиска IP-адресов в файле в общем случае таков:

$ grepcidr шаблон файл

Шаблон может быть определён:

  • в CIDR формате: a.b.c.d/xx
  • в виде диапазона: a.b.c.d-e.f.g.h
  • в виде одиночного адреса: a.b.c.d

Например, найдём наших клиентов, оказавшихся в чёрном списке:

$ grepcidr -f ournetworks blocklist > abuse.log

Следующая команда отыщет все появления loopback-адресов в файле iplog:

$ grepcidr 127.0.0.0/8 iplog

Следующей командой выполняется поиск IP-адресов из диапазона:

$ grepcidr "192.168.0.1-192.168.10.13" iplog

А в этой команде список шаблонов берётся из файла list1:

$ grepcidr -f list1 iplog

Больше информации об использовании grepcidr можно найти на её man-странице.

ngrep

Задачей ngrep является поиск соответствия grep-шаблонов в сетевом трафике. ngrep является pcap-совместимой утилитой, что даёт пользователю возможность использовать шестнадцатиричные строки при определении шаблонов.

Если вы запустите ngrep без параметров, вы увидите весь трафик, проходящий через ваш компьютер. Чтобы сузить полосу поиска вхождений шаблона лучше воспользоваться опцией -d  для определения сетевого интерфейса, который нужно прослушивать. Например, следующая команда будет выводить содержимое пакетов, проходящих через интерфейса eth0 и в которых порт источника или порт получателя равны 80:

# ngrep -d eth0 port 80

А при помощи следующей команды вы получите содержимое пакетов любого интерфейса, содержащих 'error' и в которых порт источника или порт получателя равны 514:

# ngrep -d any 'error' port syslog

Дополнительную информацию об ngrep можно найти в соответствующей man-странице.

pdfgrep

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

$ pdfgrep -in seven SomeBook.pdf

будет выполнять регистронезависимый поиск слова 'seven' в файле SomeBook.pdf с указанием номеров страниц, на которых соответствие шаблону было найдено.

Дополнительную информацию об pdfgrep можно найти в соответствующей man-странице.

taggrepper

taggrepper — это небольшая утилита для grep'а тэгов в медиафайлах. На сегодняшний день она умеет выполнять поиск на основе регулярных выражений в тэгах файлов MP3, Ogg Vorbis и FLAC. Поддерживается рекурсивный обход файлов. Вот некоторые часто используемые опции утилиты, определяющие тип информации для вывода:

  • --display-title
  • --display-artist
  • --display-album
  • --display-year
  • --display-genre
  • --display-comment
  • --display-track
  • --display-composer
  • --display-orig-artist
  • --display-copyright
  • --display-url
  • --display-encoded-by

Например, следующая команда выведет имена всех mp3-файлов 2009 года издания, начиная с текущего каталога:

$ taggrepper -y 2009 -r *.mp3

А эта команда будет выведет список файлов каталога ~/AV/Music_collection/, в тэге исполнителя которых будет найден фрагмент 'Rahman':

$ taggrepper -r -a Rahman ~/AV/Music_collection/

Дополнительную информацию об taggrepper можно найти в соответствующей man-странице.

В заключение

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

Источник: linuxaria.com




Пять grep-подобных программ: 3 комментария

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

    ps -eo pid,comm | grep ssh

    1. anon, спасибо вам сердешное! Вот так иногда не хватает умного совета ;)

Комментарии запрещены.