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