30 Grep -esimerkkiä järjestelmänvalvojille

30 Grep Examples System Admins

Grep-läsnäolo löytyy syvältä Unix- ja Unix-tyyppisten käyttöjärjestelmien eläinten aivoista. Se on perusohjelma, jota käytetään kuvioiden sovittamiseen, ja se kirjoitettiin 70 -luvulla yhdessä muun UNIX -työkalun kanssa, jonka tunnemme ja rakastamme (tai vihaamme).

Muodollisten kielten ja säännöllisten lausekkeiden oppiminen on jännittävä aihe. Grepin oppimisessa on paljon muutakin kuin regexit. Aloittaaksesi sen ja nähdäksesi grepin kauneuden ja eleganssin, sinun on ensin nähtävä joitain todellisia esimerkkejä.



Esimerkkejä, jotka ovat käteviä ja helpottavat elämääsi. Tässä on 30 tällaista grepin yleistä käyttötapaa ja vaihtoehtoa.



1. ps aux | grep

Ps aux luettelee kaikki prosessit ja niihin liittyvät pidit. Mutta usein tämä luettelo on liian pitkä ihmisen tarkastettavaksi. Kun tulostat tuloksen grep -komentoon, voit luetella prosesseja, jotka ovat käynnissä tietyn sovelluksen mielessä. Esimerkiksi se voi olla sshd tai nginx tai httpd.



# ps - | grep sshd
juuri400 0,0 0.2 69944 5624? Ss17:47 0: 00/usr/sbin/sshd-D
juuri1076 0.2 0.3 95204 6816? Ss18:29 0: 00 sshd: root@p/0
juuri1093 0,0 0,0 12784 932p/0S+18:29 0: 00pitosshd

2. Grepping IP -osoitteita

Useimmissa käyttöjärjestelmissä voit luetella kaikki verkkoliitännät ja sille määritetyn IP -osoitteen käyttämällä joko ifconfig- tai ip addr -komentoa. Molemmat komennot antavat paljon lisätietoa. Mutta jos haluat tulostaa vain IP -osoitteen (esimerkiksi shell -komentosarjoille), voit käyttää alla olevaa komentoa:

$ip -osoite | pitoinet| awk '{tulosta 2 dollaria; } '
$ip -osoite | pito -sisääninet| awk '{tulosta 2 dollaria; } ' #Linjoille, joissa on vain inet ei inet6 (IPv6)

Ip addr -komento saa kaikki tiedot (mukaan lukien IP -osoitteet), ja se johdetaan sitten toiseen komentoon grep inet, joka lähettää vain rivit, joissa on inet. Tämä yhdistetään sitten awk print -lausekkeeseen, joka tulostaa jokaisen rivin toisen sanan (yksinkertaisesti sanottuna).

P.S: Voit tehdä tämän myös ilman grep, jos tiedät awk well know.



3. Epäonnistuneiden SSH -yritysten tarkastelu

Jos sinulla on Internet -palvelin, jolla on julkinen IP -osoite, sitä pommitetaan jatkuvasti SSH -yrityksillä ja jos sallit käyttäjille salasanapohjaisen SSH -yhteyden (käytäntö, jota en suosittele), näet kaikki tällaiset epäonnistuneet yritykset käyttämällä seuraava grep -komento:

# kissa /var/log/auth.log | grep Epäonnistunut
Näyte ulos
Joulukuu5 16:kaksikymmentä: 03 debian sshd[509]: Salasana epäonnistuivartenroot 192.168.0.100 -portista52374ssh2
Joulukuu5 16:kaksikymmentä: 07 debian sshd[509]: Salasana epäonnistuivartenroot 192.168.0.100 -portista52374ssh2
Joulukuu5 16:kaksikymmentä:yksitoistadebian sshd[509]: Salasana epäonnistuivartenroot 192.168.0.100 -portista52374ssh2

4. Piping Grep Uniqiin

Joskus grep antaa paljon tietoa. Yllä olevassa esimerkissä yksi IP -osoite on saattanut yrittää päästä järjestelmään. Useimmissa tapauksissa on vain kourallinen sellaisia ​​loukkaavia IP -osoitteita, jotka sinun on yksilöitävä ja lisättävä mustalle listalle.

#kissa /missä/Hirsi/auth.log| pito 'Epäonnistua' | uniq -f 3

Uniq -komennon on tarkoitus tulostaa vain ainutlaatuiset rivit. Uniq -f 3 ohittaa kolme ensimmäistä kenttää (jättää huomiotta aikaleimat, jotka eivät koskaan toistu) ja alkaa sitten etsiä ainutlaatuisia viivoja.

5. Virheilmoitusten haukkuminen

Grepin käyttö pääsy- ja virhelokeissa ei rajoitu vain SSH: hon. Verkkopalvelimet (kuten Nginx) kirjaavat virhe- ja pääsylokit melko huolellisesti. Jos määrität valvontaohjelmat, jotka lähettävät sinulle ilmoituksia, kun grep 404 palauttaa uuden arvon. Siitä voi olla varsin hyötyä.

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

192.168.0.100 - -[06/Joulukuu/2018: 02:kaksikymmentä: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, kuten Gecko) Chrome/70.0.3538.110 Safari/537.36 '


192.168.0.101 - -[06/Joulukuu/2018: 02:Neljä viisi:16+0530] 'GET /favicon.ico HTTP /1.1' 404 143
'http://192.168.0.102/' 'Mozilla/5.0 (iPad; CPU OS 12_1, kuten Mac OS X)
AppleWebKit/605.1.15 (KHTML, kuten Gecko) Versio/12.0 Mobile/15E148 Safari/604.1 '

Lauseke ei ehkä ole 404, mutta jokin muu säännöllisen lausekkeen suodatus vain mobiiliasiakkaille tai vain verkkosivuja katseleville Apple -laitteille. Näin saat paremman käsityksen sovelluksesi toiminnasta.

6. Pakettiluettelo

Debian -pohjaisissa järjestelmissä dpkg -l luettelee kaikki järjestelmään asennetut paketit. Voit yhdistää sen grep -komentoon ja etsiä tiettyyn sovellukseen kuuluvia paketteja. Esimerkiksi:

#dpkg -he | pito 'Tulin'

7. grep -v fileNames

Luetella kaikki rivit, jotka älä sisältää tietyn kuvion, käytä lippua -v. Se on pohjimmiltaan päinvastoin kuin tavallinen grep -komento.

8. grep -l

Se luettelee kaikki tiedostot, jotka sisältävät vähintään yhden toimitetun mallin esiintymän. Tästä on hyötyä, kun etsit mallia hakemistosta, jossa on useita tiedostoja. Se tulostaa vain tiedoston nimen, ei tiettyä riviä kuvion kanssa.

9. Yksisanainen vaihtoehto -w

$pito -sisään <KUVIO>tiedostonimet

-W -lippu kehottaa grepia etsimään annettua mallia kokonaisena sanana eikä vain rivin alijonona. Esimerkiksi aiemmin halasimme IP -osoitetta ja mallia inet tulostin rivit molemmilla inet ja inet6 luetellaan sekä IPv4- että IPv6 -osoitteet. Mutta jos käytimme -w -lippua, vain rivit inet sana, jota edeltää ja sen jälkeen seuraa välilyönti, on kelvollinen ottelu.

10. Laajennettu säännöllinen lauseke

Huomaat usein, että Grepin alkuperäiset säännölliset lausekkeet ovat hieman rajoittavia. Useimmissa skripteissä ja ohjeissa on -E -lipun käyttö, ja tämän avulla voit syöttää kuvion laajennettuun tilaan.

Tässä ovat grep- ja grep -E -komennot etsiä sanoja Superman ja Spiderman.

$pito ' (Super | Hämähäkki ) mies'teksti
$pito -JA '(Super | Hämähäkki) mies'teksti

Kuten näet, laajennettu versio on paljon helpompi lukea.

11. Harrasta säiliöitäsi

Jos isäntäkoneessasi on käynnissä suuri joukko säilöjä, voit tarkastella niitä kuvan nimen, tilan, niiden paljastamien porttien ja monien muiden ominaisuuksien mukaan. Esimerkiksi,

$satamatyöläinenps | pito [imageName]

12. Kurkista palkoistasi

Kun käsittelemme kontteja. Kubernetesilla on usein taipumus käynnistää useita palkoja tietyssä käyttöönotossa. Vaikka jokaisella podilla on yksilöllinen nimi, tietyssä nimitilassa ne alkavat tyypillisesti käyttöönoton nimellä. Voimme ottaa sen huomioon ja luetella kaikki tiettyyn käyttöönottoon liittyvät palot.

$kubectl hanki palkoja| pito <deploymentName>

13. Grip for Big Data

Usein ns. Big Data -analyysi sisältää yksinkertaisen haun, lajittelun ja laskennan tietyn tietojoukon malleista. Alhaiset UNIX -apuohjelmat, kuten grep, uniq, wc, ovat erityisen hyviä tässä. Tämä blogikirjoitus näyttää hyvän esimerkin tehtävästä, joka suoritetaan muutamassa sekunnissa grep- ja muiden Unix -apuohjelmien avulla, kun taas Hadoop kesti lähes puoli tuntia.

Tämä tietojoukko on esimerkiksi kooltaan yli 1,7 Gt. Se sisältää tietoa monista shakkipeleistä, mukaan lukien tehdyt liikkeet, voittajat jne. Olemme kiinnostuneita vain tuloksista, joten suoritamme seuraavan komennon:

$pito 'Tulos'miljoonakanta-2.22.pgn| järjestellä | uniq -c
221 [Tulos'*']
653728 [Tulos'0-1']
852305 [Tulos'1-0']
690934 [Tulos'' 1 / 2-1 / 2 '']

Tämä kesti noin 15 sekuntia 4-vuotiaalla 2-ytimisellä/4-säikeisellä prosessorilla. Joten seuraavan kerran ratkaiset suuren datan ongelman. Ajattele, voitko käyttää grepia sen sijaan.

14. grep - väri = auto

Tämän asetuksen avulla grep voi korostaa kuvion sen rivin sisällä, josta se löytyi.

15. grep -i

Grep-kuvioiden täsmäytys on luonteeltaan isoja ja pieniä kirjaimia. Mutta jos et välitä siitä, -i -lipun käyttäminen tekee grep -kirjainkoosta välinpitämättömäksi.

16. grep -n

-N -lippu näyttää rivinumerot, joten sinun ei tarvitse huolehtia saman rivin löytämisestä myöhemmin.

17. git grep

Gitissä, versionhallintajärjestelmässä, itsessään on sisäänrakennettu grep-komento, joka toimii melkein kuin tavallinen grep. Mutta sitä voidaan käyttää etsimään kuvioita mistä tahansa sitoutuneesta puusta käyttämällä natiivia git CLI: tä tylsien putkien sijaan. Jos olet esimerkiksi reposi päähaarassa, voit siirtyä repon halki käyttämällä seuraavaa:

(hallita)$git grep <kuvio>

18. grep -o

-O -lippu on todella hyödyllinen, kun yrität korjata säännöllistä lauseketta. Se tulostaa vain rivin vastaavan osan koko rivin sijaan. Joten, jos saat liikaa ei -toivottuja viivoja toimitettuun malliin, etkä voi ymmärtää, miksi näin tapahtuu. Voit käyttää -o -lippua tulostaaksesi loukkaavan alimerkkijonon ja syyn säännölliseen lausekkeeseesi taaksepäin.

19. grep -x

-X -lippu tulostaa viivan, jos ja vain, jos koko rivi vastaa toimitettua säännöllistä lauseketta. Tämä on jonkin verran samanlainen kuin -w -lippu, joka painoi rivin, jos ja vain kokonainen sana vastasi toimitettua säännöllistä lauseketta.

20. grep -T

Käsitellessäsi komentotiedostojen lokit ja lähdöt kohtaat enemmän kuin todennäköisesti vaikeita välilehtiä erottamaan eri tulostesarakkeet. -T -lippu kohdistaa nämä välilehdet siististi niin, että sarakkeet on järjestetty siististi, jolloin tulos on ihmisen luettavissa.

21. grep -q

Tämä tukahduttaa lähdön ja suorittaa hiljaa grep -komennon. Erittäin hyödyllinen, kun vaihdat tekstiä tai käytät grep -ohjelmaa daemon -komentosarjassa.

22. grep -P

Ihmiset, jotka ovat tottuneet suorittamaan säännöllisen lausekkeen syntaksin, voivat käyttää -P -lippua käyttääkseen juuri sitä. Sinun ei tarvitse oppia säännöllistä lauseketta, jota grep käyttää oletuksena.

23. grep -D [TOIMINTA]

Unixissa lähes kaikki voidaan käsitellä tiedostona. Näin ollen mikä tahansa laite, pistorasia tai FIFO -tietovirta voidaan syöttää grepiin. Voit käyttää -D -lippua ja sen jälkeen ACTION (oletustoiminto on READ). Muutamia muita vaihtoehtoja ovat SKIP ohittaakseen tietyt laitteet hiljaa ja RECURSE rekursiivisesti selaamaan hakemistoja ja symboleja.

24. Toisto

Jos etsit tiettyä kuviota, joka on tunnetun yksinkertaisemman kuvion toisto, osoita toistojen lukumäärä kiharailla hakasulkeilla

$pito -JA [0-9]{10}

Tämä tulostaa rivit, jotka sisältävät vähintään 10 numeron pituisia merkkijonoja.

25. Toistamisen pikavalinnat

Jotkin erikoismerkit on varattu tietyntyyppiselle kuvion toistolle. Voit käyttää näitä kiharareikien sijasta, jos ne sopivat tarpeisiisi.

? : Kysymysmerkin edellisen kuvion on vastattava nollaa tai kerran.

*: Tähtiä edeltävän kuvion on vastattava nollaa tai useammin.

+: Plussaa edeltävän kuvion on vastattava yhtä tai useampaa kertaa.

25. Tavuerot

Jos haluat nähdä niiden tavujen siirtymän rivit, joista vastaava lauseke löytyy, voit tulostaa myös siirtymät -b -lipun avulla. Voit tulostaa vain rivin vastaavan osan siirtymän käyttämällä -b -lippua ja -o -lippua.

$pito -b -tai <KUVIO> [Tiedoston nimi]

Siirtymä tarkoittaa yksinkertaisesti sitä, kuinka monta tavua tiedoston alusta vastaava merkkijono alkaa.

26. egrep, fgrep ja rgerp

Näet usein egrepin kutsumisen käyttämään aiemmin keskusteltuamme laajennettua säännöllisen lausekkeen syntaksia. Tämä on kuitenkin vanhentunut syntaksi, ja on suositeltavaa välttää sen käyttöä. Käytä sen sijaan grep -E: tä. Käytä vastaavasti grep -F: tä fgrep: n sijaan ja grep -r: tä rgrep: n sijaan.

27. grep -z

Joskus grep -tulo ei ole rivit, jotka päättyvät uuden rivin merkkiin. Jos käsittelet esimerkiksi tiedostojen luetteloa, ne voivat tulla eri lähteistä. -Z -lippu kertoo grepille, että se käsittelee NULL -merkkiä rivin lopussa. Näin voit käsitellä saapuvaa streamia tavallisena tekstitiedostona.

28. grep -a [tiedostonimi]

-A -lippu kertoo grepille, että se käsittelee toimitettua tiedostoa kuin tavallista tekstiä. Tiedosto voi olla binäärinen, mutta grep käsittelee sisällön ikään kuin tekstiä.

29. grep -U [tiedostonimi]

-U -lippu kehottaa grepia käsittelemään toimitettuja tiedostoja ikään kuin ne olisivat binääritiedostoja eivätkä tekstiä. Oletuksena grep arvaa tiedostotyypin katsomalla ensimmäisiä tavuja. Tämän lipun käyttäminen kumoaa arvauksen.

Grep -m NUM

Suurten tiedostojen tapauksessa lausekkeen halaaminen voi kestää ikuisuuden. Jos haluat kuitenkin tarkistaa vain NUM ensimmäistä osumaa, voit tehdä tämän käyttämällä -m -lippua. Se on nopeampi ja myös tulostus on usein hallittavissa.

Johtopäätös

Sysadminin jokapäiväiseen työhön kuuluu suurten tekstikuvioiden selaaminen. Nämä voivat olla suojauslokeja, lokeja verkko- tai sähköpostipalvelimeltasi, käyttäjän toimintaa tai jopa suurta man -sivujen tekstiä. Grep antaa sinulle lisää joustavuutta käsiteltäessä näitä käyttötapauksia.

Toivottavasti yllä olevat esimerkit ja käyttötapaukset ovat auttaneet sinua ymmärtämään paremmin tätä ohjelmiston elävää fossiilia.