30 Grep-voorbeelden voor systeembeheerders

30 Grep Examples System Admins



Je kunt grep vinden diep in het dierenbrein van Unix en Unix-achtige besturingssystemen. Het is een basisprogramma dat wordt gebruikt voor het matchen van patronen en het is in de jaren 70 geschreven samen met de rest van de UNIX-tool die we kennen en waar we van houden (of haten).

Terwijl het leren over formele talen en reguliere expressies een spannend onderwerp is. Het leren van grep heeft veel meer te bieden dan regexes. Om ermee aan de slag te gaan en om de schoonheid en elegantie van grep te zien, moet je eerst enkele voorbeelden uit de echte wereld zien.







Voorbeelden die handig zijn en je leven een stukje makkelijker maken. Hier zijn 30 van dergelijke grep alledaagse use-cases en opties.



1. ps aux | grep

De ps aux geeft een overzicht van alle processen en de bijbehorende pids. Maar vaak is deze lijst te lang voor een mens om te inspecteren. Door de uitvoer naar een grep-opdracht te sturen, kunt u processen weergeven die worden uitgevoerd met een zeer specifieke toepassing in gedachten. Het kan bijvoorbeeld sshd of nginx of httpd zijn.



# ps naar | grep sshd
wortel400 0.0 0.2 69944 5624? ss17:47 0: 00/usr/sbin/sshd-NS
wortel1076 0.2 0.3 95204 6816? ss18:29 0:00 sshd: root@punten/0
wortel1093 0.0 0.0 12784 932punten/0S+18:29 0: 00greepsshd

2. Uw IP-adressen grijpen

In de meeste besturingssystemen kunt u al uw netwerkinterfaces en het IP-adres dat aan die interface is toegewezen, weergeven met de opdracht ifconfig of ip addr. Beide commando's zullen veel extra informatie opleveren. Maar als u alleen het IP-adres wilt afdrukken (bijvoorbeeld voor shellscripts), kunt u de onderstaande opdracht gebruiken:





$ip adres | greepinet| awk '{ druk $ 2 af; }'
$ip adres | greep -ininet| awk '{ druk $ 2 af; }' #Voor lijnen met alleen inet, niet inet6 (IPv6)

Het ip addr-commando krijgt alle details (inclusief de IP-adressen), het wordt vervolgens doorgesluisd naar het tweede commando grep inet dat alleen de regels met inet erin uitvoert. Dit wordt vervolgens doorgesluisd naar awk print de verklaring die het tweede woord in elke regel afdrukt (om het simpel te zeggen).

P.S: Je kunt dit ook doen zonder de grep als je awk goed weet.



3. Kijken naar mislukte SSH-pogingen

Als je een op het internet gerichte server hebt, met een openbaar IP-adres, wordt deze constant gebombardeerd met SSH-pogingen en als je gebruikers toestaat om op wachtwoord gebaseerde SSH-toegang te hebben (een beleid dat ik niet zou aanbevelen), kun je al dergelijke mislukte pogingen zien met behulp van de volgende grep-opdracht:

# cat /var/log/auth.log | grep mislukt
Steekproef uit zetten
december5 16:twintig:03 debian sshd[509]:Mislukt wachtwoordvoorroot van poort 192.168.0.10052374ssh2
december5 16:twintig:07 debian sshd[509]:Mislukt wachtwoordvoorroot van poort 192.168.0.10052374ssh2
december5 16:twintig:elfdebian sshd[509]:Mislukt wachtwoordvoorroot van poort 192.168.0.10052374ssh2

4. Leiding Grep naar Uniq

Soms geeft grep veel informatie. In het bovenstaande voorbeeld heeft mogelijk een enkel IP-adres geprobeerd uw systeem binnen te komen. In de meeste gevallen zijn er slechts een handvol van dergelijke aanstootgevende IP's die u uniek moet identificeren en op de zwarte lijst moet zetten.

#kat /waar/log/auth.log| greep 'Mislukking' | uniek -F 3

Het uniq-commando zou alleen de unieke regels moeten afdrukken. De uniq -f 3 slaat de eerste drie velden over (om de tijdstempels die nooit worden herhaald over het hoofd te zien) en gaat dan op zoek naar unieke regels.

5. Grijpen naar foutmeldingen

Het gebruik van Grep voor toegangs- en foutenlogboeken is niet beperkt tot alleen SSH. Webservers (zoals Nginx) loggen fouten en toegangslogboeken vrij nauwkeurig. Als u monitoringscripts instelt die u waarschuwingen sturen wanneer grep 404 een nieuwe waarde retourneert. Dat kan best handig zijn.

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

192.168.0.100 - -[06/december/2018: 02:twintig: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, zoals Gecko) Chrome/70.0.3538.110 Safari/537.36'


192.168.0.101 - -[06/december/2018: 02:Vier vijf:16+0530] 'GET /favicon.ico HTTP/1.1' 404 143
'http://192.168.0.102/' 'Mozilla/5.0 (iPad; CPU OS 12_1 zoals Mac OS X)
AppleWebKit/605.1.15 (KHTML, zoals Gecko) Versie/12.0 Mobiel/15E148 Safari/604.1'

De regex is misschien geen 404, maar een andere regex-filtering voor alleen mobiele clients of alleen Apple-apparaten die een webpagina bekijken. Hierdoor krijgt u een dieper inzicht in hoe uw app presteert.

6. Pakketaanbieding:

Voor op Debian gebaseerde systemen vermeldt dpkg -l alle pakketten die op uw systeem zijn geïnstalleerd. U kunt dat in een grep-opdracht pipen om te zoeken naar pakketten die bij een specifieke toepassing horen. Bijvoorbeeld:

#dpkg -de | greep 'Ik kwam'

7. grep -v bestandsnamen

Om alle regels weer te geven die: niet doen een bepaald patroon bevatten, gebruik dan de vlag -v. Het is eigenlijk het tegenovergestelde van een normaal grep-commando.

8. grep -l

Het geeft een overzicht van alle bestanden die ten minste één exemplaar van het opgegeven patroon bevatten. Dit is handig wanneer u zoekt naar een patroon in een map met meerdere bestanden. Het drukt alleen de bestandsnaam af en niet de specifieke regel met het patroon.

9. Enkel woord optie -w

$greep -in <PATROON>bestandsnamen

De vlag -w vertelt grep om naar het gegeven patroon te zoeken als een heel woord en niet alleen als een substring van een regel. Eerder hebben we bijvoorbeeld gezocht naar het IP-adres en het patroon inet de regels met beide afgedrukt inet en inet6 met zowel IPv4- als IPv6-adressen. Maar als we -w gebruikten, markeer alleen de regels met inet als een woord voorafgegaan en gevolgd door spaties een geldige overeenkomst is.

10. Uitgebreide reguliere expressie

Je zult vaak merken dat de reguliere expressies die eigen zijn aan Grep een beetje beperkend zijn. In de meeste scripts en instructies vindt u het gebruik van de -E-vlag en dit stelt u in staat om een ​​patroon in te voeren in wat de uitgebreide modus wordt genoemd.

Hier zijn de grep en grep -E commando's om te zoeken naar woorden Superman en Spiderman.

$greep '(Super|Spin)man'tekst
$greep -EN '(Super|Spider)man'tekst

Zoals u kunt zien, is de uitgebreide versie veel gemakkelijker te lezen.

11. Grep voor je containers

Als je een groot cluster van containers op je host hebt draaien, kun je ze grep op naam van de afbeelding, status, poorten die ze blootleggen en vele andere attributen. Bijvoorbeeld,

$havenarbeiderps | greep [afbeeldingNaam]

12. Grep voor je pods

Nu we het toch over containers hebben. Kubernetes hebben vaak de neiging om meerdere pods te lanceren onder een bepaalde implementatie. Hoewel elke pod een unieke naam heeft, beginnen ze in een bepaalde naamruimte meestal met de implementatienaam. We kunnen daar een grep van maken en alle pods weergeven die aan een bepaalde implementatie zijn gekoppeld.

$kubectl krijg pods| greep <implementatienaam>

13. Grip op Big data

Vaak omvat de zogenaamde Big Data-analyse eenvoudig zoeken, sorteren en tellen van patronen in een bepaalde dataset. UNIX-hulpprogramma's op laag niveau zoals grep, uniq, wc zijn hier bijzonder goed in. Deze blogpost toont een mooi voorbeeld van een taak die in slechts enkele seconden is voltooid met grep en andere Unix-hulpprogramma's, terwijl Hadoop bijna een half uur duurde.

Deze dataset is bijvoorbeeld meer dan 1,7 GB groot. Het bevat informatie over een groot aantal schaakpartijen, inclusief de gemaakte zetten, wie heeft gewonnen, enz. We zijn geïnteresseerd in alleen resultaten, dus we voeren het volgende commando uit:

$greep 'Resultaat'miljoenbasis-2.22.pgn| soort | uniek -C
221 [Resultaat'*']
653728 [Resultaat'0-1']
852305 [Resultaat'1-0']
690934 [Resultaat'1 / 2-1 / 2']

Dit duurde ongeveer 15 seconden op een 4 jaar oude 2-cores/4-thread processor. Dus de volgende keer dat u een big data-probleem oplost. Bedenk of je in plaats daarvan grep kunt gebruiken.

14. grep –kleur=auto

Met deze optie markeert grep het patroon binnen de lijn waar het werd gevonden.

15. grep -i

Grep-patroonovereenkomst is inherent hoofdlettergevoelig. Maar als u daar niet om geeft, maakt het gebruik van de vlag -i grep hoofdletterongevoelig.

16. grep -n

De vlag -n toont de regelnummers, zodat u zich geen zorgen hoeft te maken om later dezelfde regel te vinden.

17. git grep

Git, het versiebeheersysteem, heeft zelf een ingebouwd grep-commando dat ongeveer hetzelfde werkt als je gewone grep. Maar het kan worden gebruikt om naar patronen te zoeken in elke vastgelegde boom met behulp van de native git CLI, in plaats van vervelende buizen. Als u zich bijvoorbeeld in de master-branch van uw repo bevindt, kunt u over de repo heen grep met behulp van:

(meester)$git grep <patroon>

18. grep -o

De vlag -o is erg handig wanneer u probeert een regex te debuggen. Het zal alleen het overeenkomende deel van de regel afdrukken, in plaats van de hele regel. Dus voor het geval u te veel ongewenste lijnen krijgt voor een geleverd patroon, en u begrijpt niet waarom dat gebeurt. U kunt de vlag -o gebruiken om de beledigende subtekenreeks af te drukken en vanaf daar over uw regex achteruit te redeneren.

19. grep -x

De vlag -x zou een regel afdrukken, als en alleen als de hele regel overeenkomt met uw opgegeven regex. Dit is enigszins vergelijkbaar met de vlag -w die een regel afdrukte als en slechts van een heel woord overeenkwam met de meegeleverde regex.

20. grep -T

Bij het omgaan met logboeken en uitvoer van shell-scripts, zult u meer dan waarschijnlijk harde tabbladen tegenkomen om onderscheid te maken tussen verschillende uitvoerkolommen. De vlag -T zal deze tabbladen netjes uitlijnen, zodat de kolommen netjes zijn gerangschikt, waardoor de uitvoer voor mensen leesbaar wordt.

21. grep -q

Dit onderdrukt de uitvoer en voert stilletjes het grep-commando uit. Zeer handig bij het vervangen van tekst of het uitvoeren van grep in een daemon-script.

22. grep -P

Mensen die gewend zijn om de syntaxis van reguliere expressies te perl, kunnen de vlag -P gebruiken om precies dat te gebruiken. U hoeft geen standaard reguliere expressie te leren, die grep standaard gebruikt.

23. grep -D [ACTIE]

In Unix kan bijna alles als een bestand worden behandeld. Bijgevolg kan elk apparaat, een socket of een FIFO-gegevensstroom naar grep worden gevoerd. U kunt de vlag -D gebruiken gevolgd door een ACTIE (de standaardactie is LEZEN). Een paar andere opties zijn SKIP om specifieke apparaten stil over te slaan en RECURSE om recursief door mappen en symbolische links te gaan.

24. Herhaling

Als u op zoek bent naar een bepaald patroon dat een herhaling is van een bekend eenvoudiger patroon, gebruik dan accolades om het aantal herhalingen aan te geven

$greep -EN [0-9]{10}

Hiermee worden regels afgedrukt met strings van 10 of meer cijfers lang.

25. Herhaling steno

Sommige speciale tekens zijn gereserveerd voor een specifiek soort patroonherhaling. U kunt deze gebruiken in plaats van accolades, als ze aan uw behoeften voldoen.

? : Het patroon voorafgaand aan het vraagteken moet nul of één keer overeenkomen.

* : Het patroon dat aan de ster voorafgaat, moet nul of meer keer overeenkomen.

+ : Het patroon dat voorafgaat aan plus moet een of meerdere keren overeenkomen.

25. Byte-offsets

Als u de byte-offset wilt zien van de regels waar de overeenkomende uitdrukking wordt gevonden, kunt u de vlag -b gebruiken om de offsets ook af te drukken. Om de offset van alleen het overeenkomende deel van een lijn af te drukken, kunt u de vlag -b met vlag -o gebruiken.

$greep -B -of <PATROON> [bestandsnaam]

Offset betekent eenvoudigweg, na hoeveel bytes vanaf het begin van het bestand begint de overeenkomende string.

26. egrep, fgrep en rgerp

Je zult vaak de aanroep van egrep zien, om de uitgebreide syntaxis van reguliere expressies te gebruiken die we eerder hebben besproken. Dit is echter een verouderde syntaxis en het wordt aanbevolen deze niet te gebruiken. Gebruik in plaats daarvan grep -E. Gebruik op dezelfde manier grep -F in plaats van fgrep en grep -r in plaats van rgrep.

27. grep -z

Soms zijn de invoer voor grep geen regels die eindigen op een teken voor een nieuwe regel. Als u bijvoorbeeld een lijst met bestandsnamen verwerkt, kunnen deze uit verschillende bronnen komen. De vlag -z vertelt grep om het NULL-teken te behandelen als het einde van de regel. Hierdoor kunt u de inkomende stream behandelen als een gewoon tekstbestand.

28. grep -a [bestandsnaam]

De vlag -a vertelt grep om het aangeleverde bestand te behandelen alsof het gewone tekst is. Het bestand kan een binair bestand zijn, maar grep zal de inhoud erin behandelen alsof het tekst is.

29. grep -U [bestandsnaam]

De vlag -U vertelt grep om de aangeleverde bestanden te behandelen alsof het binaire bestanden zijn en geen tekst. Standaard raadt grep het bestandstype door naar de eerste paar bytes te kijken. Het gebruik van deze vlag overschrijft dat giswerk.

Grep -m NUM

Bij grote bestanden kan het zoeken naar een uitdrukking eeuwig duren. Als u echter alleen de eerste NUM aantallen overeenkomsten wilt controleren, kunt u de vlag -m gebruiken om dit te bereiken. Het is sneller en de output is vaak ook beheersbaar.

Conclusie

Een groot deel van het dagelijkse werk van een systeembeheerder omvat het doorzoeken van grote stukken tekst. Dit kunnen beveiligingslogboeken zijn, logboeken van uw web- of mailserver, gebruikersactiviteit of zelfs grote tekst van man-pagina's. Grep geeft je dat extra beetje flexibiliteit bij het omgaan met deze use-cases.

Hopelijk hebben de bovenstaande voorbeelden en use-cases je geholpen om dit levende fossiel van software beter te begrijpen.