30 příkladů Grepu pro správce systému

30 Grep Examples System Admins



Můžete najít grep přítomný hluboko uvnitř zvířecího mozku Unixu a unixových operačních systémů. Je to základní program používaný pro párování vzorů a byl napsán v 70. letech spolu se zbytkem nástroje UNIX, který známe a milujeme (nebo nenávidíme).

Zatímco učení o formálních jazycích a regulárních výrazech je vzrušující téma. Naučit se grep má mnohem víc než regexy. Chcete-li s tím začít a vidět krásu a eleganci grepu, musíte nejprve vidět několik příkladů ze skutečného světa.







Příklady, které jsou užitečné a trochu vám usnadní život. Zde je 30 takových případů a možností běžného používání grep.



1. ps aux | grep

Ps aux uvádí všechny procesy a jejich přidružené pidy. Tento seznam je ale často příliš dlouhý na to, aby ho člověk mohl zkontrolovat. Přesměrováním výstupu na příkaz grep můžete vypsat procesy spuštěné s ohledem na velmi konkrétní aplikaci. Může to být například sshd nebo nginx nebo httpd.



# ps do | grep sshd
vykořenit400 0,0 0,2 69944 5624? Ss17:47 0: 00/usr/sbin/sshd-D
vykořenit1076 0,2 0,3 95204 6816? Ss18:29 0: 00 sshd: root@body/0
vykořenit1093 0,0 0,0 12784 932body/0S+18:29 0: 00rukojeťsshd

2. Sejmutí vašich IP adres

Ve většině operačních systémů můžete vypsat všechna vaše síťová rozhraní a IP, která je tomuto rozhraní přiřazena, buď pomocí příkazu ifconfig nebo ip addr. Oba tyto příkazy přinesou spoustu dalších informací. Pokud však chcete vytisknout pouze IP adresu (řekněme pro shell skripty), můžete použít následující příkaz:





$IP adresa | rukojeťinet| awk '{tisk $ 2; } '
$IP adresa | rukojeť -vinet| awk '{tisk $ 2; } ' #Pro linky s pouze inet not inet6 (IPv6)

Příkaz ip addr získá všechny podrobnosti (včetně IP adres), poté je připojen k druhému příkazu grep inet, který vydává pouze řádky, v nichž je inet. To se pak připojí do awk print prohlášení, které vytiskne druhé slovo v každém řádku (zjednodušeně řečeno).

P.S: Můžete to také udělat bez grep, pokud víte, že dobře víte.



3. Pohled na neúspěšné pokusy o SSH

Pokud máte internetový server s veřejnou IP, bude neustále bombardován pokusy SSH a pokud uživatelům povolíte přístup SSH založený na heslech (zásada, kterou bych nedoporučoval), můžete všechny takové neúspěšné pokusy zobrazit pomocí následující příkaz grep:

# kočka /var/log/auth.log | grep Selhání
Ukázkový výstup
Prosince5 16:dvacet: 03 debian sshd[509]: Heslo se nezdařiloproroot z portu 192.168.0.10052374ssh2
Prosince5 16:dvacet: 07 debian sshd[509]: Heslo se nezdařiloproroot z portu 192.168.0.10052374ssh2
Prosince5 16:dvacet:jedenáctdebian sshd[509]: Heslo se nezdařiloproroot z portu 192.168.0.10052374ssh2

4. Piping Grep to Uniq

Někdy grep vydá spoustu informací. Ve výše uvedeném příkladu se možná jedna IP pokoušela vstoupit do vašeho systému. Ve většině případů existuje jen hrstka takových IP adres, které urážejí obsah, které potřebujete k jedinečné identifikaci a černé listině.

#kočka /kde/log/autorizační protokol| rukojeť 'Selhat' | uniq -F 3

Příkaz uniq má vytisknout pouze jedinečné řádky. Uniq -f 3 přeskočí první tři pole (aby přehlédl časová razítka, která se nikdy neopakují) a poté začne hledat jedinečné řádky.

5. Hledání chybových zpráv

Použití protokolu Grep pro přístup a protokoly chyb není omezeno pouze na SSH. Webové servery (jako Nginx) zaznamenávají chyby a přistupují k nim velmi pečlivě. Pokud nastavíte monitorovací skripty, které vám budou zasílat upozornění, když grep 404 vrátí novou hodnotu. To může být docela užitečné.

# grep -w '404' /var/www/nginx/access.log

192.168.0.100 - -[06/Prosince/2018: 02:dvacet:29+0530] 'ZÍSKEJTE /favicon.ico HTTP /1.1' 404 200
'http://192.168.0.102/' 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, jako Gecko) Chrome/70.0.3538.110 Safari/537.36 '


192.168.0.101 - -[06/Prosince/2018: 02:Čtyři pět:16+0530] 'ZÍSKEJTE /favicon.ico HTTP /1.1' 404 143
'http://192.168.0.102/' 'Mozilla/5.0 (iPad; CPU OS 12_1 jako Mac OS X)
AppleWebKit/605.1.15 (KHTML, jako Gecko) verze/12.0 Mobile/15E148 Safari/604.1 '

Regex nemusí být 404, ale některé další filtry regexů pouze pro mobilní klienty nebo pouze zařízení Apple zobrazující webovou stránku. To vám umožní získat hlubší přehled o tom, jak si vaše aplikace vede.

6. Seznam balíčků

U systémů založených na Debianu dpkg -l uvádí všechny balíčky nainstalované ve vašem systému. Můžete to přepsat do příkazu grep a vyhledat balíčky patřící konkrétní aplikaci. Například:

#dpkg -ten | rukojeť 'Přišel jsem'

7. Názvy souborů grep -v

Chcete -li zobrazit všechny řádky, které ne obsahovat daný vzor, ​​použijte příznak -v. Je to v podstatě opak běžného příkazu grep.

8. grep -l

Obsahuje seznam všech souborů, které obsahují alespoň jeden výskyt zadaného vzoru. To je užitečné, když hledáte vzor uvnitř adresáře s více soubory. Vytiskne pouze název souboru, nikoli konkrétní řádek se vzorem.

9. Možnost jednoho slova -w

$rukojeť -v <VZOR>názvy souborů

Příznak -w říká grep, aby hledal daný vzor jako celé slovo a ne jen jako podřetězec řádku. Například dříve jsme hledali IP adresu a vzor inet vytiskl řádky oběma inet a inet6 seznam adres IPv4 i IPv6. Pokud bychom ale použili -w příznak pouze řádky s inet protože slovo předcházející a za ním mezery je platná shoda.

10. Rozšířený regulární výraz

Často zjistíte, že regulární výrazy původem z Grepu jsou trochu omezující. Ve většině skriptů a pokynů najdete použití příznaku -E, což vám umožní zadat vzor v takzvaném rozšířeném režimu.

Zde jsou příkazy grep a grep -E k vyhledání slov Superman a Spiderman.

$rukojeť ' (Super | Spider ) muž'text
$rukojeť -A '(Super | Spider) muž'text

Jak vidíte, rozšířená verze se čte mnohem snáz.

11. Grep pro vaše kontejnery

Pokud máte na hostiteli spuštěný velký shluk kontejnerů, můžete je grepovat podle názvu obrázku, stavu, portů, které vystavují, a mnoha dalších atributů. Například,

$přístavní dělníkps | rukojeť [imageName]

12. Grep pro vaše lusky

Když už jsme u tématu kontejnerů. Kubernetes často mají tendenci spouštět více lusků pod daným nasazením. Každý pod má jedinečný název, ale v daném oboru názvů obvykle začíná názvem nasazení. Můžeme to napravit a uvést všechny pody spojené s daným nasazením.

$kubectl získat lusky| rukojeť <deploymentName>

13. Grip pro velká data

Takzvaná analýza velkých dat často zahrnuje jednoduché vyhledávání, třídění a počítání vzorů v dané datové sadě. Obzvláště dobré jsou na tom nástroje UNIX nízké úrovně jako grep, uniq, wc. Tento blogový příspěvek ukazuje pěkný příklad úkolu splněného během pouhých několika sekund pomocí grep a dalších unixových nástrojů, zatímco Hadoop trval téměř půl hodiny.

Tato datová sada má například velikost větší než 1,7 GB. Obsahuje informace o mnoha šachových zápasech, včetně provedených tahů, kdo vyhrál atd. Zajímají nás jen výsledky, takže spustíme následující příkaz:

$rukojeť 'Výsledek'milionová základna2.22.pgn| třídit | uniq -C
221 [Výsledek'*']
653728 [Výsledek'0-1']
852305 [Výsledek'1-0']
690934 [Výsledek'1 / 2-1 / 2']

Čtyřletému 2jádrovému/4vláknovému procesoru to trvalo přibližně 15 sekund. Příště tedy budete řešit problém s velkými daty. Přemýšlejte, jestli místo toho můžete použít grep.

14. grep –color = auto

Tato možnost umožňuje grep zvýraznit vzor uvnitř řádku, kde byl nalezen.

15. grep -i

Shoda vzorů Grep ve své podstatě rozlišuje velká a malá písmena. Pokud vás to ale nezajímá, pak použití parametru -i způsobí, že grep nerozlišuje velká a malá písmena.

16. grep -n

Příznak -n zobrazí čísla řádků, takže si nemusíte dělat starosti s nalezením stejného řádku později.

17. git grep

Git, systém pro správu verzí, má vestavěný příkaz grep, který funguje téměř jako váš běžný grep. Lze jej však použít k hledání vzorů na libovolném potvrzeném stromu pomocí nativního git CLI, namísto nudných potrubí. Pokud se například nacházíte v hlavní větvi vašeho repo, můžete se v repo grepovat pomocí:

(mistr)$git grep <vzor>

18. grep -o

Příznak -o je opravdu užitečný, když se pokoušíte ladit regex. Místo celého řádku vytiskne pouze odpovídající část řádku. V případě, že pro dodaný vzor dostáváte příliš mnoho nežádoucích čar, a nemůžete pochopit, proč se to děje. Příznak -o můžete použít k vytištění problematického podřetězce a důvodu vašeho regexu zpět odtamtud.

19. grep -x

Příznak -x vytiskne řádek, pokud a pouze v případě, že celý řádek odpovídá zadanému regexu. To je do jisté míry podobné příznaku -w, který vytiskl řádek pouze v případě, že celé slovo odpovídalo zadanému regexu.

20. grep -T

Když pracujete s protokoly a výstupy ze skriptů shellu, je více než pravděpodobné, že narazíte na pevné karty k rozlišení mezi různými sloupci výstupu. Příznak -T tyto karty úhledně zarovná, takže sloupce jsou úhledně uspořádány, takže výstup bude čitelný pro lidi.

21. grep -q

Tím se potlačí výstup a tiše se spustí příkaz grep. Velmi užitečné při nahrazování textu nebo spouštění grep ve skriptu démona.

22. grep -P

Lidé, kteří jsou zvyklí na syntaxi regulárních výrazů perlu, mohou použít parametr -P, aby přesně to použili. Nemusíte se učit základní regulární výrazy, které grep standardně používá.

23. grep -D [AKCE]

V Unixu lze téměř se vším zacházet jako se souborem. V důsledku toho lze do grep přivádět jakékoli zařízení, soket nebo datový proud FIFO. Můžete použít příznak -D a následovat AKCI (výchozí akce je READ). Několik dalších možností je SKIP pro tiché přeskočení konkrétních zařízení a RECURSE pro rekurzivní procházení adresářů a symbolických odkazů.

24. Opakování

Pokud hledáte daný vzor, ​​který je opakováním známého jednoduššího vzoru, pak pomocí počtu složených závorek označte počet opakování

$rukojeť -A [0-9]{10}

Vytiskne se řádky obsahující řetězce o délce 10 a více číslic.

25. Opakovací zkratky

Některé speciální znaky jsou vyhrazeny pro určitý druh opakování vzoru. Můžete je použít místo složených závorek, pokud vyhovují vašim potřebám.

? : Vzorek před otazníkem by měl odpovídat nule nebo jednou.

*: Vzor předcházející hvězdě by se měl shodovat nula nebo vícekrát.

+: Vzor předcházející plus by se měl shodovat jednou nebo vícekrát.

25. Byte Offsety

Chcete -li zjistit posunutí bajtů řádků, kde je nalezen odpovídající výraz, můžete také použít posun -b k tisku ofsetů. Chcete -li vytisknout odsazení pouze odpovídající části řádku, můžete použít příznak -b s příznakem -o.

$rukojeť -b -nebo <VZOR> [název souboru]

Offset jednoduše znamená, po kolika bajtech od začátku souboru začíná odpovídající řetězec.

26. egrep, fgrep a rgerp

Často uvidíte vyvolání egrep, abyste použili syntaxi rozšířeného regulárního výrazu, kterou jsme probrali dříve. Toto je však zastaralá syntaxe a doporučujeme, abyste se tomuto používání vyhnuli. Místo toho použijte grep -E. Podobně použijte grep -F místo fgrep a grep -r místo rgrep.

27. grep -z

Někdy vstup do grep nejsou řádky končící znakem nového řádku. Pokud například zpracováváte seznam názvů souborů, mohou pocházet z různých zdrojů. Příznak -z říká grep, aby považoval znak NULL za konec řádku. To vám umožní považovat příchozí stream za jakýkoli běžný textový soubor.

28. grep -a [název_souboru]

Příznak -a říká grep, aby s dodaným souborem zacházel jako s běžným textem. Soubor může být binární, ale grep bude zacházet s obsahem uvnitř, jako by to byl text.

29. grep -U [název_souboru]

Příznak -U říká grep, aby zacházel s dodanými soubory jako s binárními soubory a ne s textem. Ve výchozím nastavení grep odhadne typ souboru podle prvních několika bajtů. Použití tohoto příznaku přepíše, že hádání funguje.

Grep -m NUM

U velkých souborů může přepisování výrazu trvat věčnost. Pokud však chcete zkontrolovat pouze prvních NUM čísel shod, můžete k tomu použít příznak -m. Je rychlejší a výstup je často také zvládnutelný.

Závěr

Spousta každodenní práce sysadmina zahrnuje procházení velkých řádků textu. Může se jednat o protokoly zabezpečení, protokoly z vašeho webového nebo poštovního serveru, aktivitu uživatelů nebo dokonce velký text manuálových stránek. Grep vám poskytuje extra flexibilitu při řešení těchto případů použití.

Naštěstí vám výše uvedených několik příkladů a případů použití pomohlo lépe porozumět této živé fosilii softwaru.