Все знают и любят
. Сегодня мы с вами рассмотрим пять утилит, «заточенных» для применения функционала grep в определённых условиях, а именно: pgrep, grepcidr, 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 можно получить из её
.grepcidr
grepcidr очень удобна в случаях, когда необходимо отыскать вхождения IP-адресов или их диапазонов в формате
. Так же, как и 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 можно найти на её
.ngrep
Задачей ngrep является поиск соответствия grep-шаблонов в сетевом трафике. ngrepявляется pcap-совместимой утилитой, что даёт пользователю возможность использовать шестнадцатиричные строки при определении шаблонов.
Если вы запустите ngrep без параметров, вы увидите весь трафик, проходящий через ваш компьютер. Чтобы сузить полосу поиска вхождений шаблона лучше воспользоваться опцией -d для определения сетевого интерфейса, который нужно прослушивать. Например, следующая команда будет выводить содержимое пакетов, проходящих через интерфейса eth0 и в которых порт источника или порт получателя равны 80:
# ngrep -d eth0 port 80
А при помощи следующей команды вы получите содержимое пакетов любого интерфейса, содержащих 'error' и в которых порт источника или порт получателя равны 514:
# ngrep -d any 'error' port syslog
Дополнительную информацию об ngrep можно найти в соответствующей
.pdfgrep
pdfgrep, как можно догадаться из её названия, предназначена для поиска по шаблону в тексте PDF-файлов. Набор опций pdfgrep похож на набор опций классической grep, то есть вы можете определить вывод номеров страниц, имён файлов, включить регистронезависимость и тому подобное. Например:
$ pdfgrep -in seven SomeBook.pdf
будет выполнять регистронезависимый поиск слова 'seven' в файле SomeBook.pdf с указанием номеров страниц, на которых соответствие шаблону было найдено.
Дополнительную информацию об pdfgrep можно найти в соответствующей
.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 можно найти в соответствующей
.