30 primerov grepa za sistemske skrbnike

30 Grep Examples System Admins



Grep je prisoten globoko v živalskih možganih operacijskih sistemov Unix in Unixu. Je osnovni program za ujemanje vzorcev in je bil napisan v 70. letih skupaj z ostalim orodjem UNIX, ki ga poznamo in ga imamo radi (ali ga sovražimo).

Medtem ko je učenje o uradnih jezikih in regularnih izrazih vznemirljiva tema. Učenje grepa ima veliko več kot regularni izrazi. Če želite začeti z njo in videti lepoto in eleganco grepa, morate najprej videti nekaj primerov iz resničnega sveta.







Primeri, ki so priročni in vam olajšajo življenje. Tukaj je 30 takšnih običajnih primerov in možnosti grepa.



1. ps aux | grep

Ps aux vsebuje seznam vseh procesov in z njimi povezanih strani. Toda pogosto je ta seznam predolg, da bi ga človek lahko pregledal. S prenosom izhoda v ukaz grep lahko navedete procese, ki se izvajajo z zelo specifično aplikacijo v mislih. Lahko je na primer sshd ali nginx ali httpd.



# ps do | grep sshd
koren400 0,0 0,2 69944 5624? Ss17:47 0: 00/usr/sbin/sshd-D
koren1076 0,2 0,3 95204 6816? Ss18:29 0: 00 sshd: koren@točk/0
koren1093 0,0 0,0 12784 932točk/0S+18:29 0: 00oprijemsshd

2. Prepis vaših IP naslovov

V večini operacijskih sistemov lahko z ukazom ifconfig ali ip addr navedete vse svoje omrežne vmesnike in IP, ki je dodeljen temu vmesniku. Oba ukaza ukazita veliko dodatnih informacij. Če pa želite natisniti samo naslov IP (recimo za skripte lupine), lahko uporabite spodnji ukaz:





$ip adr | oprijeminet| awk '{natisni 2 USD; } '
$ip adr | oprijem -vinet| awk '{natisni 2 USD; } ' #Za vrstice s samo inet ne inet6 (IPv6)

Ukaz ip addr dobi vse podrobnosti (vključno z naslovi IP), nato se prenese v drugi ukaz grep inet, ki odda samo vrstice z inet v njih. To se nato prenese v awk print izjavo, ki natisne drugo besedo v vsaki vrstici (poenostavljeno).

P.S .: To lahko storite tudi brez grepa, če dobro veste, awk dobro veste.



3. Pogled na neuspele poskuse SSH

Če imate strežnik, ki se sooča z internetom, z javnim IP -jem, ga bodo nenehno bombardirali s poskusi SSH in če dovolite uporabnikom dostop do SSH na podlagi gesla (pravilnik, ki ga ne priporočam), si lahko ogledate vse takšne neuspešne poskuse z uporabo po ukazu grep:

# cat /var/log/auth.log | grep Napaka
Odložen vzorec
Dec5 16:dvajset: 03 debian sshd[509]: Geslo ni uspelozaroot z vrat 192.168.0.10052374ssh2
Dec5 16:dvajset: 07 debian sshd[509]: Geslo ni uspelozaroot z vrat 192.168.0.10052374ssh2
Dec5 16:dvajset:enajstdebian sshd[509]: Geslo ni uspelozaroot z vrat 192.168.0.10052374ssh2

4. Prenos Grepa v Uniq

Včasih grep prikaže veliko informacij. V zgornjem primeru je morda en sam IP poskušal vstopiti v vaš sistem. V večini primerov je le nekaj takih žaljivih IP -jev, ki jih morate enolično identificirati in uvrstiti na črni seznam.

#mačka /kje/dnevnik/auth.log| oprijem 'Neuspeh' | uniq -f 3

Ukaz uniq naj bi natisnil samo edinstvene vrstice. Uniq -f 3 preskoči prva tri polja (za spregled časovnih žigov, ki se nikoli ne ponovijo) in nato začne iskati edinstvene vrstice.

5. Grepping za sporočila o napakah

Uporaba Grepa za dnevnike dostopa in napak ni omejena samo na SSH. Spletni strežniki (na primer Nginx) zelo natančno beležijo napake in dnevnike dostopa. Če nastavite nadzorne skripte, ki vam pošiljajo opozorila, ko grep 404 vrne novo vrednost. To je lahko zelo koristno.

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

192.168.0.100 - -[06/Dec/2018: 02:dvajset:29+0530] 'GET /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, kot Gecko) Chrome/70.0.3538.110 Safari/537.36 '


192.168.0.101 - -[06/Dec/2018: 02:Štiri, pet:16+0530] 'GET /favicon.ico HTTP /1.1' 404 143
'http://192.168.0.102/' 'Mozilla/5.0 (iPad; CPU OS 12_1, kot je Mac OS X)
AppleWebKit/605.1.15 (KHTML, kot Gecko) Različica/12.0 Mobile/15E148 Safari/604.1 '

Regex morda ni 404, ampak nekakšno drugo filtriranje regularnih izrazov samo za odjemalce Mobile ali samo za naprave Apple, ki si ogledujejo spletno stran. To vam omogoča globlji vpogled v uspešnost vaše aplikacije.

6. Seznam paketov

Za sisteme, ki temeljijo na Debianu, dpkg -l navaja vse pakete, nameščene v vašem sistemu. To lahko prenesete v ukaz grep, da poiščete pakete, ki pripadajo določeni aplikaciji. Na primer:

#dpkg - | oprijem 'Sem prišel'

7. grep -v ime datoteke

Navesti vse vrstice, ki ne vsebujejo dani vzorec, uporabite zastavico -v. V bistvu je nasprotje običajnega ukaza grep.

8. grep -l

Navaja vse datoteke, ki vsebujejo vsaj en pojav priloženega vzorca. To je uporabno, ko iščete vzorec v imeniku z več datotekami. Natisne samo ime datoteke in ne posebne vrstice z vzorcem.

9. Možnost ene besede -w

$oprijem -v <VZOREC>imena datotek

Zastavica -w pove grepu, naj poišče dani vzorec kot celo besedo in ne le kot podniz v vrstici. Na primer, prej smo iskali naslov IP in vzorec inet natisnil vrstice z obema inet in inet6 seznam naslovov IPv4 in IPv6. Če pa smo uporabili -w zastavico samo vrstice z inet kot beseda, ki ji sledijo presledki, je veljavno ujemanje.

10. Razširjeni regularni izraz

Pogosto boste ugotovili, da so regularni izrazi, ki izvirajo iz Grepa, nekoliko omejujoči. V večini skriptov in navodil boste našli uporabo zastavice -E, kar vam bo omogočilo vnos vzorca v tako imenovanem razširjenem načinu.

Tu sta ukaza grep in grep -E za iskanje besed Superman in Spiderman.

$oprijem ' (Super | Spider ) človek'besedilo
$oprijem -IN '(Super | Spider) človek'besedilo

Kot lahko vidite, je razširjeno različico veliko lažje brati.

11. Grep za svoje posode

Če imate na svojem gostitelju veliko skupino vsebnikov, jih lahko označite po imenu slike, statusu, vratih, ki jih izpostavljajo, in številnih drugih atributih. Na primer,

$dockerps | oprijem [imageName]

12. Grep za svoje stroke

Medtem ko smo pri temi zabojnikov. Kubernetes pogosto naložijo več strojev pod določeno uvedbo. Čeprav ima vsak pod edinstveno ime, se v danem imenskem prostoru običajno začnejo z imenom uvajanja. To lahko pregledamo in navedemo vse pods, povezane z določeno uvedbo.

$kubectl dobite stroke| oprijem <deploymentName>

13. Ročaj za velike podatke

Tako imenovana analiza velikih podatkov pogosto vključuje preprosto iskanje, razvrščanje in štetje vzorcev v danem naboru podatkov. Pri tem so še posebej dobri pripomočki UNIX na nizki ravni, kot so grep, uniq, wc. Ta objava na spletnem dnevniku prikazuje lep primer naloge, opravljene v nekaj sekundah z uporabo grepa in drugih pripomočkov Unix, medtem ko je Hadoop trajal skoraj pol ure.

Na primer, ta nabor podatkov je velik več kot 1,7 GB. Vsebuje informacije o množici šahovskih tekem, vključno z potezami, zmagami itd. Zanimajo nas samo rezultati, zato zaženemo naslednji ukaz:

$oprijem 'Rezultat'milijon baz-2.22.pgn| razvrsti | uniq -c
221 [Rezultat'*']
653728 [Rezultat'0-1']
852305 [Rezultat'1-0']
690934 [Rezultat'1 / 2-1 / 2']

To je trajalo približno 15 sekund pri 4-letnem 2-jedrnem/4-nitnem procesorju. Ko boste naslednjič reševali problem velikih podatkov. Pomislite, ali lahko namesto tega uporabite grep.

14. grep –barva = samodejno

Ta možnost omogoča, da grep označi vzorec v vrstici, kjer je bil najden.

15. grep -i

Ujemanje vzorcev grep je samo po sebi občutljivo na velike in male črke. Če pa vas to ne zanima, bo uporaba zastavice -i naredila grep neobčutljiv.

16. grep -n

Zastavica -n bo prikazala številke vrstic, zato vam ni treba skrbeti, da boste pozneje našli isto vrstico.

17. git grep

Git, sistem za nadzor različic, ima sam vgrajen ukaz grep, ki deluje podobno kot vaš običajni grep. Lahko pa ga uporabite za iskanje vzorcev na katerem koli predanem drevesu z uporabo izvornega git CLI, namesto dolgočasnih cevi. Če ste na primer v glavni veji svojega repo -ja, ga lahko preskočite s pomočjo:

(mojster)$git grep <vzorec>

18. grep -o

Oznaka -o je zelo koristna, ko poskušate odpraviti napake v regularnem izrazu. Natisnil bo le ustrezni del vrstice, namesto celotne vrstice. Torej, v primeru, da dobite preveč neželenih vrstic za priloženi vzorec in ne morete razumeti, zakaj se to dogaja. Z zastavico -o lahko natisnete škodljivi podniz in od tam razložite o svojem regeksu.

19. grep -x

Zastavica -x bi natisnila vrstico, če in samo, če se celotna vrstica ujema z vašim predloženim regularnim izrazom. To je nekoliko podobno zastavi -w, ki je natisnila vrstico, če in samo celotna beseda se je ujemala s priloženim regularnim izrazom.

20. grep -T

Pri obravnavi dnevnikov in izhodov iz lupinskih skriptov boste bolj verjetno naleteli na trde zavihke za razlikovanje med različnimi stolpci izhoda. Zastavica -T bo lepo poravnala te zavihke, tako da bodo stolpci lepo razporejeni, tako da bo izhod človeško berljiv.

21. grep -q

To zavira izhod in tiho izvede ukaz grep. Zelo uporabno pri zamenjavi besedila ali izvajanju grep v demonskem skriptu.

22. grep -P

Ljudje, ki so navajeni na sintaksi regularnega izraza perl, lahko za to uporabijo zastavico -P. Ni se vam treba naučiti osnovnega regularnega izraza, ki ga grep privzeto uporablja.

23. grep -D [AKCIJA]

V Unixu je skoraj vse mogoče obravnavati kot datoteko. Posledično se lahko v grep napaja katera koli naprava, vtičnica ali tok podatkov FIFO. Uporabite lahko -D zastavico, ki ji sledi ACTION (privzeto dejanje je READ). Nekaj ​​drugih možnosti je SKIP za tihi preskok določenih naprav in RECURSE za rekurzivno pregledovanje imenikov in povezav.

24. Ponavljanje

Če iščete dani vzorec, ki je ponovitev znanega enostavnejšega vzorca, uporabite kodraste oklepaje za označevanje števila ponovitev

$oprijem -IN [0-9]{10}

To natisne vrstice, ki vsebujejo nizove dolžine 10 ali več.

25. Ponavljajoče se stenografije

Nekateri posebni znaki so rezervirani za določeno vrsto ponavljanja vzorcev. Te lahko uporabite namesto kodrastih naramnic, če ustrezajo vašim potrebam.

? : Vzorec pred vprašajem se mora ujemati z ničlo ali enkrat.

*: Vzorec pred zvezdo se mora ujemati nič ali večkrat.

+: Vzorec pred plus se mora ujemati enkrat ali večkrat.

25. Odmiki bajtov

Če želite vedeti, da vidite odmik bajtov vrstic, kjer je ujemanje ujemajočega se izraza, lahko z zastavico -b natisnete tudi odmike. Če želite natisniti odmik samo ujemajočega se dela vrstice, lahko uporabite zastavico -b z zastavico -o.

$oprijem -b -ali <VZOREC> [Ime datoteke]

Odmik preprosto pomeni, po koliko bajtih od začetka datoteke se začne ujemajoči niz.

26. egrep, fgrep in rgerp

Pogosto boste videli priklic egrepa za uporabo razširjene sintakse regularnega izraza, o kateri smo govorili prej. Vendar je to zastarela sintaksa in priporočljivo je, da se temu izogibate. Namesto tega uporabite grep -E. Podobno uporabite grep -F namesto fgrep in grep -r namesto rgrep.

27. grep -z

Včasih vnos grep ni vrstice, ki se končajo z znakom nove vrstice. Na primer, če obdelujete seznam imen datotek, lahko pridejo iz različnih virov. Zz zastava -z pove grepu, naj znak NULL obravnava kot konec vrstice. To vam omogoča, da dohodni tok obravnavate kot vsako običajno besedilno datoteko.

28. grep -a [ime datoteke]

Zastavica -a pove grepu, da obravnavano datoteko obravnava kot običajno besedilo. Datoteka je lahko binarna, vendar grep obravnava vsebino v notranjosti, kot da je besedilo.

29. grep -U [ime datoteke]

Zastavica -U pove grepu, naj obravnavane priložene datoteke obravnava kot binarne datoteke in ne kot besedilo. Grep privzeto ugiba vrsto datoteke tako, da pogleda prvih nekaj bajtov. Uporaba te zastavice preglasi ugibanje.

Grep -m NUM

Pri velikih datotekah lahko grepping za izraz traja večno. Če pa želite preveriti samo prvih NUM število ujemanj, lahko za to uporabite zastavico -m. Je hitrejši in tudi izhod je pogosto obvladljiv.

Zaključek

Veliko vsakodnevnega dela sistemskega skrbnika vključuje sejanje po velikih delih besedila. To so lahko varnostni dnevniki, dnevniki z vašega spletnega ali poštnega strežnika, uporabniška dejavnost ali celo veliko besedilo man strani. Grep vam daje dodatno fleksibilnost pri obravnavi teh primerov uporabe.

Upajmo, da vam je zgornjih nekaj primerov in primerov uporabe pomagalo bolje razumeti ta živi fosil programske opreme.