Hlavní navigace

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

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.

Tweetni to Odměnte autora  Jak to funguje?

Č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ší.

  • 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?

Petr Krčmář

Petr Krčmář

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Vystudoval elektroniku se zaměřením na počítačové systémy, nyní se zabývá médii, především těmi elektronickými.

Ohodnoťte jako ve škole:
Průměrná známka 1,50
Tweetni to Odměnte autora  Jak to funguje?

Naučíme vás základy programovacího jazyka C++

 


Zkušený lektor Pavel Tišnovský vás seznámí se způsobem tvorby aplikací s využitím programovacího jazyka C++, který je jedním z nejpoužívanějších programovacích jazyků současnosti.

Klikněte pro více informací o školení

       

Přehled názorů

ack (titulek musí mít aspoň 4 znaky)
m. 30. 8. 2012 00:33
Nový
└ 
Re: ack (titulek musí mít aspoň 4 znaky)
aaaaaaaaaaaaaaa 30. 8. 2012 02:00
Nový
jajaj
Stanislav Hoferek 30. 8. 2012 08:28
Nový
grepCIDR
Ondřej Caletka 30. 8. 2012 09:07
Nový
Grep pro tabulky v CSV
Frg 30. 8. 2012 09:51
Nový
└ 
Re: Grep pro tabulky v CSV
El País 30. 8. 2012 09:55
Nový
Re: Hrátky z řádky: grep v mnoha příchutích
Yoda . 30. 8. 2012 09:57
Nový
├ 
Re: Hrátky z řádky: grep v mnoha příchutích
D.A. Tiger 30. 8. 2012 10:30
Nový
│
└ 
Re: Hrátky z řádky: grep v mnoha příchutích
x14 30. 8. 2012 12:52
Nový
│
 
└ 
Re: Hrátky z řádky: grep v mnoha příchutích
D.A. Tiger 30. 8. 2012 20:21
Nový
├ 
Re: Hrátky z řádky: grep v mnoha příchutích
AlYoSHA 30. 8. 2012 15:10
Nový
└ 
Re: Hrátky z řádky: grep v mnoha příchutích
AlYoSHA 30. 8. 2012 15:15
Nový
moc rad pouzivam ..
Petr Macek 30. 8. 2012 14:02
Nový
└ 
Re: moc rad pouzivam ..
jaromrax 30. 8. 2012 15:54
Nový
 
└ 
Re: moc rad pouzivam ..
hawran diskuse 30. 8. 2012 17:35
Nový
 
 
└ 
Re: moc rad pouzivam ..
ebik 30. 8. 2012 22:21
Nový
Re: Hrátky z řádky: grep v mnoha příchutích
sumci_dest 31. 8. 2012 13:40
Nový
└ 
Re: Hrátky z řádky: grep v mnoha příchutích
hawran diskuse 31. 8. 2012 18:08
Nový
obrázek & etymologie
psvz 2. 9. 2012 13:12
Nový
└ 
Re: obrázek & etymologie
Petr Krčmář 2. 9. 2012 23:35
Nový
Diky
jeleniste 3. 9. 2012 14:44
Nový
Perl grep
jose 4. 9. 2012 12:34
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem