30 príkladov Grepu pre správcov systému

30 Grep Examples System Admins



Grep nájdete prítomný hlboko vo zvieracom mozgu operačných systémov Unix a Unix. Je to základný program používaný na porovnávanie vzorov a bol napísaný v 70. rokoch spolu so zvyškom nástroja UNIX, ktorý poznáme a milujeme (alebo nenávidíme).

Naučiť sa formálne jazyky a regulárne výrazy je vzrušujúca téma. Naučiť sa grep má oveľa viac ako regexy. Aby ste s tým mohli začať a aby ste videli krásu a eleganciu grepu, musíte najskôr vidieť niekoľko príkladov zo skutočného sveta.







Príklady, ktoré sú praktické a trochu vám uľahčia život. Tu je 30 takýchto bežných prípadov použitia a možností grep.



1. ps aux | grep

Ps aux uvádza všetky procesy a ich súvisiace pidy. Tento zoznam je však často príliš dlhý na to, aby ho človek mohol skontrolovať. Po prepojení výstupu na príkaz grep môžete uviesť zoznam spustených procesov s ohľadom na veľmi konkrétnu aplikáciu. Môže to byť napríklad sshd alebo nginx alebo httpd.



# ps do | grep sshd
koreň400 0,0 0,2 69944 5624? Ss17:47 0: 00/usr/sbin/sshd-D
koreň1076 0,2 0,3 95204 6816? Ss18:29 0: 00 sshd: root@pts/0
koreň1093 0,0 0,0 12784 932pts/0S+18:29 0: 00uchopeniesshd

2. Grepping your IP addresses

Vo väčšine operačných systémov môžete zobraziť zoznam všetkých svojich sieťových rozhraní a IP priradených tomuto rozhraniu pomocou príkazu ifconfig alebo ip addr. Oba tieto príkazy prinesú veľa ďalších informácií. Ak však chcete vytlačiť iba adresu IP (napríklad pre skripty shell), môžete použiť nasledujúci príkaz:





$ip addr | uchopenieinet| awk '{tlač 2 doláre; } '
$ip addr | uchopenie -vinet| awk '{tlač 2 doláre; } ' #Pre linky s iba inet not inet6 (IPv6)

Príkaz ip addr získa všetky podrobnosti (vrátane IP adries), potom je pripojený k druhému príkazu grep inet, ktorý vydá iba riadky, v ktorých je inet. Toto sa potom vloží do awk a vytlačí sa výpis, ktorý vytlačí druhé slovo v každom riadku (zjednodušene povedané).

P.S: Môžete to tiež urobiť bez grep, ak viete dobre, dobre viete.



3. Pohľad na neúspešné pokusy o SSH

Ak máte server s prístupom na internet s verejnou IP adresou, bude naň neustále bombardované pokusmi o SSH a ak povolíte používateľom prístup SSH založený na hesle (zásada, ktorú by som neodporúčal), všetky tieto neúspešné pokusy môžete vidieť pomocou nasledujúci príkaz grep:

# cat /var/log/auth.log | grep Zlyhanie
Ukážka výstupu
Dec5 16:dvadsať: 03 debian sshd[509]: Heslo zlyhaloprekoreň z portu 192.168.0.10052374ssh2
Dec5 16:dvadsať: 07 debian sshd[509]: Heslo zlyhaloprekoreň z portu 192.168.0.10052374ssh2
Dec5 16:dvadsať:jedenásťdebian sshd[509]: Heslo zlyhaloprekoreň z portu 192.168.0.10052374ssh2

4. Pripojenie Grep k Uniq

Niekedy grep poskytne veľa informácií. Vo vyššie uvedenom príklade sa do vášho systému pokúšala vstúpiť jedna IP. Vo väčšine prípadov existuje len niekoľko takýchto IP, ktoré sú v rozpore s predpismi, ktoré musíte jedinečne identifikovať a zaradiť na čiernu listinu.

#kat /kde/log/auth.log| uchopenie „Zlyhať“ | uniq -f 3

Príkaz uniq má vytlačiť iba jedinečné riadky. Uniq -f 3 preskočí prvé tri polia (aby sa prehliadli časové pečiatky, ktoré sa nikdy neopakujú) a potom začne hľadať jedinečné čiary.

5. Hľadanie chybových hlásení

Použitie Grepu na prístup a protokoly chýb nie je obmedzené iba na SSH. Webové servery (ako Nginx) zaznamenávajú chyby a prístupové protokoly pomerne starostlivo. Ak nastavíte monitorovacie skripty, ktoré vám budú posielať upozornenia, keď grep 404 vráti novú hodnotu. To môže byť celkom užitočné.

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

192.168.0.100 - -[06/Dec/2018: 02:dvadsať:29+0530] „ZÍSKAŤ /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, ako Gecko) Chrome/70.0.3538.110 Safari/537.36 '


192.168.0.101 - -[06/Dec/2018: 02:Štyria, piati:16+0530] „ZÍSKAJTE /favicon.ico HTTP /1.1“ 404 143
„http://192.168.0.102/“ „Mozilla/5.0 (iPad; CPU OS 12_1 ako Mac OS X)
AppleWebKit/605.1.15 (KHTML, ako Gecko) verzia/12.0 Mobile/15E148 Safari/604.1 '

Regulárny výraz nemusí byť 404, ale niektoré ďalšie filtre regulárnych výrazov iba pre mobilných klientov alebo iba zariadenia Apple, ktorí si prezerajú webovú stránku. To vám umožní získať podrobnejší prehľad o výkonnosti vašej aplikácie.

6. Zoznam balíkov

V prípade systémov založených na Debiane dpkg -l uvádza všetky balíky nainštalované vo vašom systéme. Môžete to vložiť do príkazu grep a vyhľadať balíky patriace konkrétnej aplikácii. Napríklad:

#dpkg -ten | uchopenie 'Prišiel som'

7. Názov súboru grep -v

Ak chcete zobraziť všetky riadky, ktoré nie obsahujú daný vzor, ​​použite príznak -v. Je to v podstate opak bežného príkazu grep.

8. grep -l

Obsahuje zoznam všetkých súborov, ktoré obsahujú aspoň jeden výskyt zadaného vzoru. Je to užitočné, keď hľadáte vzor v adresári s viacerými súbormi. Vytlačí sa iba názov súboru, nie konkrétny riadok so vzorom.

9. Možnosť jedného slova -w

$uchopenie -v <VZOR>názvy súborov

Príznak -w hovorí grepu, aby hľadal daný vzor ako celé slovo, a nie iba ako podreťazec riadka. Napríklad predtým sme hľadali adresu IP a vzor inet riadky vytlačili oboma inet a inet6 zoznam adries IPv4 aj IPv6. Ale ak by sme použili -w príznak iba riadky s inet pretože slovo, ktorému predchádzajú medzery a za ktorými nasledujú medzery, je platná zhoda.

10. Rozšírený regulárny výraz

Často prídete na to, že regulárne výrazy pochádzajúce z Grepu sú trochu obmedzujúce. Vo väčšine skriptov a pokynov nájdete použitie príznaku -E, čo vám umožní zadať vzor v takzvanom rozšírenom režime.

Tu sú príkazy grep a grep -E na hľadanie slov Superman a Spiderman.

$uchopenie „ (Super | Spider ) muž“text
$uchopenie -A „(Super | Spider) muž“text

Ako vidíte, rozšírená verzia sa číta oveľa jednoduchšie.

11. Grep pre vaše kontajnery

Ak máte na hostiteľovi spustenú veľkú skupinu kontajnerov, môžete ich odstrániť podľa názvu obrázku, stavu, portov, ktoré zverejňujú, a mnohých ďalších atribútov. Napríklad,

$dokps | uchopenie [imageName]

12. Grep pre vaše lusky

Keď už sme na tému kontajnery. Kubernetes má často tendenciu spúšťať viacero luskov pod daným nasadením. Aj keď má každý pod jedinečný názov, v danom mennom priestore spravidla začínajú názvom nasadenia. Môžeme to napraviť a vytvoriť zoznam všetkých luskov spojených s daným nasadením.

$kubectl získať lusky| uchopenie <deploymentName>

13. Grip pre veľké dáta

Takzvaná analýza veľkých dát často obsahuje jednoduché vyhľadávanie, triedenie a počítanie vzorov v danej množine údajov. Obzvlášť dobré sú na tom nízke nástroje UNIX ako grep, uniq, wc. Tento blogový príspevok ukazuje pekný príklad úlohy, ktorú bolo možné vykonať za pár sekúnd pomocou programu grep a ďalších nástrojov Unixu, pričom Hadoop trval takmer pol hodiny.

Tento súbor údajov má napríklad veľkosť viac ako 1,7 GB. Obsahuje informácie o množstve šachových zápasov vrátane vykonaných ťahov, kto vyhral atď. Zaujímajú nás iba výsledky, preto spustíme nasledujúci príkaz:

$uchopenie 'Výsledok'miliónová základňa-2.22.pgn| triediť | uniq -c
221 [Výsledok'*']
653728 [Výsledok'0-1']
852305 [Výsledok„1-0“]
690934 [Výsledok„1 / 2-1 / 2“]

Trvalo to asi 15 sekúnd 4-ročnému 2-jadrovému/4-vláknovému procesoru. Nabudúce teda budete riešiť problém veľkých dát. Zamyslite sa, či namiesto toho môžete použiť grep.

14. grep –color = auto

Táto možnosť umožňuje grep zvýrazniť vzor v riadku, kde bol nájdený.

15. grep -i

Zhoda vzoru Grep vo svojej podstate rozlišuje veľké a malé písmena. Ale ak vám to nie je jedno, potom použitie príznaku -i spôsobí, že grep nebude rozlišovať malé a veľké písmená.

16. grep -n

Príznak -n zobrazí čísla riadkov, takže si už nemusíte robiť starosti s nájdením rovnakého riadku.

17. git grep

Git, systém na správu verzií, má vstavaný príkaz grep, ktorý funguje podobne ako váš bežný grep. Dá sa však použiť na hľadanie vzorov na akomkoľvek viazanom strome pomocou natívneho git CLI, namiesto únavných potrubí. Ak sa napríklad nachádzate v hlavnej vetve vášho repo, môžete sa v repo grepovať pomocou:

(majster)$git grep <vzor>

18. grep -o

Príznak -o je skutočne nápomocný pri pokuse o ladenie regexu. Namiesto celého riadku vytlačí iba zodpovedajúcu časť riadka. Takže v prípade, že sa vám dodáva príliš veľa nechceného riadku na dodaný vzor, ​​nemôžete pochopiť, prečo sa to deje. Pomocou príznaku -o odtiaľto vytlačíte problematický podreťazec a dôvod svojho regulárneho výrazu.

19. grep -x

Príznak -x by vytlačil riadok, ak a iba vtedy, ak sa celý riadok zhoduje s vašim zadaným regulárnym výrazom. Je to trochu podobné príznaku -w, ktorý vytlačil riadok, iba ak sa celé slovo zhodovalo s dodaným regexom.

20. grep -T

Pri práci s protokolmi a výstupmi zo skriptov shellu je viac ako pravdepodobné, že narazíte na tvrdé karty na rozlíšenie medzi rôznymi stĺpcami výstupu. Príznak -T tieto karty úhľadne zarovná, aby boli stĺpce úhľadne usporiadané, takže výstup bude čitateľný pre ľudí.

21. grep -q

Tým sa potlačí výstup a v tichosti sa spustí príkaz grep. Veľmi užitočné pri výmene textu alebo pri spustení príkazu grep v skripte démona.

22. grep -P

Ľudia, ktorí sú zvyknutí na syntax regulárnych výrazov perlu, môžu použiť príznak -P na to, aby to používali presne. Nemusíte sa učiť základný regulárny výraz, ktorý grep štandardne používa.

23. grep -D [AKCIA]

V Unixe je takmer všetko možné považovať za súbor. V dôsledku toho je možné do grep napájať akékoľvek zariadenie, zásuvku alebo prúd údajov FIFO. Môžete použiť príznak -D a potom AKCIU (predvolená akcia je READ). Niekoľko ďalších možností je SKIP na tiché preskočenie konkrétnych zariadení a RECURSE na rekurzívne prechádzanie cez adresáre a symbolické odkazy.

24. Opakovanie

Ak hľadáte daný vzor, ​​ktorý je opakovaním známeho jednoduchšieho vzoru, potom pomocou počtu zložených zátvoriek uveďte počet opakovaní

$uchopenie -A [0-9]{10}

Vytlačí sa riadky obsahujúce reťazce dlhé 10 alebo viac číslic.

25. Opakovanie skratiek

Niektoré špeciálne znaky sú vyhradené pre konkrétny druh opakovania vzoru. Môžete ich použiť namiesto zložených zátvoriek, ak vyhovujú vašim potrebám.

? : Vzorec predchádzajúci otáznik by sa mal zhodovať s nulou alebo raz.

*: Hviezdička pred hviezdičkou by sa mala zhodovať nula alebo viackrát.

+: Vzor pred znamienkom plus by sa mal zhodovať raz alebo viackrát.

25. Byte Ofsety

Ak chcete vedieť posunutie bajtov riadkov, v ktorých sa nachádza zodpovedajúci výraz, môžete pomocou príznaku -b vytlačiť aj posuny. Na vytlačenie odsadenia iba zodpovedajúcej časti riadka môžete použiť príznak -b s príznakom -o.

$uchopenie -b -alebo <VZOR> [názov súboru]

Offset jednoducho znamená, po koľkých bajtoch od začiatku súboru sa spustí zodpovedajúci reťazec.

26. egrep, fgrep a rgerp

Pri použití rozšírenej syntaxe regulárnych výrazov, o ktorej sme hovorili vyššie, sa často stretnete s vyvolaním príkazu egrep. Toto je však zastaraná syntax a odporúča sa, aby ste sa tomuto používaniu vyhli. Namiesto toho použite grep -E. Podobne použite grep -F namiesto fgrep a grep -r namiesto rgrep.

27. grep -z

Niekedy vstup do grep nie sú riadky končiace znakom nového riadka. Ak napríklad spracúvate zoznam názvov súborov, môžu pochádzať z rôznych zdrojov. Príznak -z hovorí grepu, aby považoval znak NULL za koniec riadka. To vám umožní zaobchádzať s prichádzajúcim prúdom ako s bežným textovým súborom.

28. grep -a [názov súboru]

Príznak -a hovorí grepu, aby s dodaným súborom zaobchádzal ako s bežným textom. Súbor môže byť binárny, ale grep bude s obsahom vo vnútri zaobchádzať ako s textom.

29. grep -U [názov súboru]

Príznak -U hovorí grepu, aby s dodanými súbormi zaobchádzal tak, ako keby išlo o binárne súbory a nie o text. Štandardne grep odhadne typ súboru podľa prvých niekoľkých bajtov. Použitie tohto príznaku prepíše, že hádanie funguje.

Grep -m NUM

Pri veľkých súboroch môže hľadanie výrazu trvať večne. Ak však chcete skontrolovať iba prvých NUM čísel zhody, môžete na to použiť príznak -m. Je to rýchlejšie a výstup je často tiež zvládnuteľný.

Záver

Väčšina každodennej práce správcu systému obsahuje prebratie veľkého množstva textu. Môžu to byť denníky zabezpečenia, protokoly z vášho webového alebo poštového servera, aktivita používateľov alebo dokonca veľký text manuálových stránok. Grep vám poskytuje extra flexibilitu pri riešení týchto prípadov použitia.

Našťastie niekoľko vyššie uvedených príkladov a prípadov použitia vám pomohlo lepšie porozumieť tejto živej fosílii softvéru.