Hrátky z řádky: grep v mnoha příchutích

Petr Krčmář 30. 8. 2012

Příkaz grep zná pravděpodobně každý, kdo už zavítal do unixové příkazové řádky. Je to jeden z klasických systémových programů a brzy oslaví čtyřicet let od svého vzniku. Existuje celá řada jeho odnoží a některé zajímavé tipy si ukážeme v dnešním článku. Budeme grepovat síť, procesy a grep si obarvíme.

Článků typu „podrobný návod k používání grepu“ byly napsány celé harddisky. Pokud projevíte zájem, můžeme pro vás nějaký další klidně připravit. Tento článek ale bude z jiného šuplíku. Jeho cílem není naučit vás dokonale používat grep za osm a půl minuty, ale spíše ukázat některé další možnosti, o kterých jste třeba neslyšeli.

Grep v barvách

Grep standardně nijak neobarvuje svůj výstup. Pokud ale grepujeme dlouhé řádky, hodí se nám možnost obarvovat nalezené řetězce. Slouží k tomu parametr --color, za který musíme uvést, kdy se má výstup obarvovat. Doporučuji přidat =auto. Grep pak inteligentně obarvuje jen výstup na terminál. Pokud použijeme přesměrování do souboru, obarvení se samo vypne. Můžete také použít variantu =never nebo  =always.

Pokud chcete obarvování nechat zapnuté trvale, připište si do souboru ~/.bashrc následující řádek.

export GREP_OPTIONS='--color=auto'

Standardně grep obarvuje červeně, jak vidíte na obrázku. Pokud se vám tahle barva nelíbí, můžete ji změnit proměnnou GREP_COLOR nebo novější a podrobnější GREP_COLORS. Pokud chcete místo červené zelenou, přidejte si do  ~/.bashrc:

export GREP_COLOR='1;32'

Pro obarvování se používají klasické escape sekvence, které najdete v článku Barvy pro shell. Podle něj si můžete zvolit svou oblíbenou barvu. Poznámka: Některé distribuce (třeba Gentoo) tohle mají ve výchozím stavu už zapnuté.

Ngrep pro grepování sítě

Velmi zajímavou a užitečnou variantou grepu je ngrep. Ten umí prakticky totéž co klasický grep, ale aplikuje se na síťový provoz. Můžete tak jednoduše ze sítě vyzobávat konkrétní data a pak je třeba podrobněji analyzovat pomocí nástroje Wireshark.

Ngrep umí filtrovat pomocí syntaxe pcap, takže můžete jednoduše vybírat pakety podle protokolu, portu, zdrojové či cílové adresy a podobně. Pokud syntaxi neznáte, podívejte se do manuálové stránky pcap-filter. Přidáme několik příkladů využití ngrep:

Potřebujete zjistit, odkud tahá flashový přehrávač rádia svůj stream.

# ngrep -q -d eth0 '^GET.*mp3'

Chcete zaznamenat veškerý DNS provoz včetně časových značek.

# ngrep -O /tmp/dns_provoz.pcap -d any -T port 53

Zapomněli jste heslo uložené ve svém FTP klientovi a chcete ho zjistit.

# ngrep -i -q 'pass|user' port 21

Toto jsou reálné příklady, ke kterým jsem už ngrep použil. Určitě jich ale najdete daleko více. Příkaz se hodí zejména při hledání problémů na síti.

Pgrep pro hledání procesů

Pokud chcete vyhledat konkrétní proces, můžete použít ps a jeho výstup poslat přes awk, grep nebo jiný „filtr“. Existuje ale utilita pgrep, který tohle umí přímo. Ve výchozím stavu vypíše PID všech procesů, jejichž název obsahuje zadaný řetězec.

$ pgrep sh
1489
1564
2856
2880
2929
27907
28065
28184
30673

Pokud chcete vidět i názvy procesů, přidejte parametr  -l.

$ pgrep sh -l
1489 flush-8:0
1564 gvfsd-trash
2856 kdmflush
2880 flush-254:0
2929 ssh-agent
27907 bash
28065 bash
28184 bash
30673 bash

Pravidel je možné aplikovat samozřejmě více, například můžete určit uživatele, kterému mají procesy patřit.

$ pgrep -u petr -l sh
1564 gvfsd-trash
2929 ssh-agent
27907 bash
28065 bash
28184 bash
30673 bash

Můžeme také invertovat požadavek (třeba úlohy, které nepatří uživateli root) pomocí -v nebo si nechat vypsat jen poslední spuštěný proces pomocí  -n.

Grepcidr hledá v IP adresách

Velmi užitečná varianta grepu, která se hodí zejména při filtrování logů ze sítě. Rozumí totiž CIDR zápisu IP adres. Tedy zápisu prefixu nebo rozsahu adres. Pokud pak prohledáváme logy, můžeme si grepnout jen ty řádky, kde se vyskytuje některá IP adresa z našeho rozsahu.

$ grepcidr 192.168.1.0/24 /var/log/sitovy_log.log

Kromě CIDR je možné použít i rozsah, třeba 192.168.1.1-192.168.10.20. Pokud máte rozsahů více, můžete si ze zapsat do souboru po řádcích a pak je načítat pomocí parametru -f. Jedinou vadou utility grepcidr je, že nepodporuje (zatím?) IPv6.

PDFgrep hledá v PDF

Další malou šikovnou grepovskou utilitkou je pdfgrep. Už podle názvu je zřejmé, že umí prohledávat obsah PDF dokumentu. Opět zvládá spoustu přepínačů z klasického grepu, v následujícím příkladu jsem použil jen -i pro ignorování velkých/malých písmen.

$ pdfgrep -i sixxs Satrapa-internetovy-protokol-ipv6-treti-vydani.pdf
6 Generátor prefixů je k dispozici na adrese http://www.sixxs.net/tools/grh/ula/
                 poskytovatelé tunelových serverů: Freenet6, SixXS a Hurricane Electric. Je-
 SixXS Velice podobné služby nabízí i síť SixXS. Opět se jedná o systém otevře-
 SixXS Velice podobné služby nabízí i síť SixXS. Opět se jedná o systém otevře-
       tras menší, než v případě konkurenčních služeb. SixXS nemá anonymní re-
www▸          http://www.sixxs.net/
       „proč já, nebohý zemský červ, požaduji na SixXS připojení“. Ne aby vás na-
       na schvalování žádostí a nutnost hlídat kredity od SixXS spolehlivě odradí
                                 Obrázek 13.2: Parametry tunelu u SixXS
žádat o založení tunelu (Create Regular Tunnel). Na rozdíl od SixXS žádost
                   U SixXS je rozjezd znatelně pomalejší, odměnou vám ale bude připojení
vykazovaly dramatické odlišnosti. Ovšem jakmile zamíříte domů, SixXS se
test6.cesnet.cz) připojení přes SixXS vykazuje pro IPv6 přibližně o 10 % nižší
Hustota sítě serverů Hurricane Electric převyšuje Freenet6, ale na SixXS ne-
radvd, 371                         SixXS, 295

Samozřejmě je možné pdfgrepovat ve více souborech najednou, program pak na výstupu sype i názvy souborů, ve kterých byl řetězec nalezen. Šikovný je ještě parametr -n, který do výstupu přidává čísla stran, na kterých se nalezené řádky nalézají.

Taggrepper prohledá vaši hudební sbírku

Taggrepper umí v hudebních souborech (mp3, Ogg, FLAC) prohledávat tagy. Můžete si tak ve své sbírce najít hudbu konkrétních interpretů, žánrů nebo z konkrétního roku. K tomu má utilita řadu parametrů, ze kterých zmíníme jen ty nejběžnější.

widgety

  • t – název skladby
  • a – jméno umělce
  • l – název alba
  • y – rok nahrání
  • g – žánr

Použití je pak už jednoduché. Můžeme si třeba nechat ve své sbírce nechat najít všechny písničky od jednoho interpreta.

$ taggrep -a Gott -r /home/petr/mp3/

Grepuji, tedy jsem

Grep je základní unixová utilita, bez které se neobejde žádný admin. Jak je vidět, za čtyřicet let své existence inspirovala řadu dalších autorů, kteří se rozhodli na jejím základě napsat utilitky pro konkrétní využití. Je užitečné jich pár znát, třeba zmíněný ngrep používám poměrně často. Znáte ještě nějaké příbuzné grepu?

Našli jste v článku chybu?
Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

DigiZone.cz: Světový pohár v přímém přenosu na ČT

Světový pohár v přímém přenosu na ČT

Lupa.cz: Kdo vyhraje Kříšťálovou Lupu? Hlasování začalo!

Kdo vyhraje Kříšťálovou Lupu? Hlasování začalo!

Lupa.cz: Proč jsou firemní počítače pomalé?

Proč jsou firemní počítače pomalé?

Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

Podnikatel.cz: ČSSZ posílá přehled o důchodovém kontě

ČSSZ posílá přehled o důchodovém kontě

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel

Vitalia.cz: dTest odhalil ten nejlepší kečup

dTest odhalil ten nejlepší kečup

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?

Vitalia.cz: Muž, který miluje příliš. Ženám neimponuje

Muž, který miluje příliš. Ženám neimponuje

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

Vitalia.cz: 5 chyb, které děláme při skladování potravin

5 chyb, které děláme při skladování potravin

Vitalia.cz: Tahák, jak vyzrát nad zápachem z úst

Tahák, jak vyzrát nad zápachem z úst

DigiZone.cz: DVB-T2 ověřeno: seznam TV zveřejněn

DVB-T2 ověřeno: seznam TV zveřejněn

DigiZone.cz: Funbox 4K v DVB-T2 má ostrý provoz

Funbox 4K v DVB-T2 má ostrý provoz

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

DigiZone.cz: Wimbledon na Nova Sport až do 2019

Wimbledon na Nova Sport až do 2019

DigiZone.cz: Mordparta: trochu podchlazený 87. revír

Mordparta: trochu podchlazený 87. revír