30 Grep -eksempler for systemadministratorer

30 Grep Examples System Admins



Du kan finne grep til stede dypt inne i dyrehjernen til Unix og Unix-lignende operativsystemer. Det er et grunnleggende program som brukes til mønstermatching, og det ble skrevet på 70 -tallet sammen med resten av UNIX -verktøyet som vi kjenner og elsker (eller hater).

Mens det er et spennende tema å lære om formelle språk og vanlige uttrykk. Å lære grep har mye mer å si enn regexes. For å komme i gang med det og for å se skjønnheten og elegansen til grep må du først se noen virkelige eksempler.







Eksempler som er nyttige og gjør livet ditt litt lettere. Her er 30 slike vanlige grep -tilfeller og alternativer.



1. ps aux | grep

PS aux viser alle prosessene og tilhørende pids. Men ofte er denne listen for lang for et menneske å inspisere. Når du sender utgangen til en grep -kommando, kan du liste prosesser som kjører med et veldig spesifikt program i tankene. For eksempel kan det være sshd eller nginx eller httpd.



# ps til | grep sshd
rot400 0,0 0,2 69944 5624? Ss17:47 0: 00/usr/sbin/sshd-D
rot1076 0,2 0,3 95204 6816? Ss18:29 0: 00 sshd: root@poeng/0
rot1093 0,0 0,0 12784 932poeng/0S+18:29 0: 00grepsshd

2. Grepping IP -adressene dine

I de fleste operativsystemer kan du liste opp alle nettverksgrensesnittene dine og IP -en som er tilordnet det grensesnittet ved å bruke enten kommandoen ifconfig eller ip addr. Begge disse kommandoene gir mye tilleggsinformasjon. Men hvis du bare vil skrive ut IP -adressen (si for skallskript), kan du bruke kommandoen nedenfor:





$ip addr | grepinet| awk '{print $ 2; } '
$ip addr | grep -iinet| awk '{print $ 2; } ' #For linjer med bare inet ikke inet6 (IPv6)

Ip addr -kommandoen får alle detaljene (inkludert IP -adressene), deretter blir den ledet til den andre kommandoen grep inet som bare sender ut linjene med inet i dem. Dette blir deretter pipet inn i awk print setningen som skriver ut det andre ordet i hver linje (for å si det enkelt).

P.S: Du kan også gjøre dette uten grep hvis du vet awk know.



3. Ser på mislykkede SSH -forsøk

Hvis du har en internettvendt server, med en offentlig IP, vil den hele tiden bli bombardert med SSH -forsøk, og hvis du lar brukerne ha passordbasert SSH -tilgang (en policy som jeg ikke vil anbefale) kan du se alle slike mislykkede forsøk ved å bruke følgende grep -kommando:

# cat /var/log/auth.log | grep Mislykkes
Prøve ut satt
Des5 16:tjue: 03 debian sshd[509]: Mislyktes passordtilroot fra 192.168.0.100 port52374ssh2
Des5 16:tjue: 07 debian sshd[509]: Mislyktes passordtilroot fra 192.168.0.100 port52374ssh2
Des5 16:tjue:ellevedebian sshd[509]: Mislyktes passordtilroot fra 192.168.0.100 port52374ssh2

4. Piping Grep til Uniq

Noen ganger gir grep mye informasjon. I eksemplet ovenfor kan en enkelt IP ha forsøkt å gå inn i systemet ditt. I de fleste tilfeller er det bare en håndfull slike krenkende IP -er som du trenger for å identifisere og svarteliste på en unik måte.

#katt /hvor/Logg/auth.log| grep 'Mislykkes' | uniq -f 3

Uniq -kommandoen skal bare skrive ut de unike linjene. Uniq -f 3 hopper over de tre første feltene (for å overse tidsstemplene som aldri gjentas) og begynner deretter å lete etter unike linjer.

5. Grepping for feilmeldinger

Å bruke Grep for tilgangs- og feillogger er ikke begrenset til bare SSH. Nettservere (som Nginx) loggfeil og tilgangslogger ganske omhyggelig. Hvis du konfigurerer overvåkingsskript som sender deg varsler når grep 404 returnerer en ny verdi. Det kan være ganske nyttig.

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

192.168.0.100 - -[06/Des/2018: 02:tjue: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, som Gecko) Chrome/70.0.3538.110 Safari/537.36 '


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

Regex er kanskje ikke 404, men noen annen regex -filtrering for bare mobilklienter eller bare Apple -enheter som ser på en webside. Dette lar deg få en dypere innsikt i hvordan appen din fungerer.

6. Pakkeoppføring

For Debian -baserte systemer viser dpkg -l alle pakkene som er installert på systemet ditt. Du kan legge det inn i en grep -kommando for å se etter pakker som tilhører et bestemt program. For eksempel:

#dpkg -de | grep 'Jeg kom'

7. grep -v fileNames

For å liste opp alle linjene som ikke inneholde et gitt mønster, bruk flagget -v. Det er i utgangspunktet det motsatte av en vanlig grep -kommando.

8. grep -l

Den viser alle filene som inneholder minst én forekomst av det medfølgende mønsteret. Dette er nyttig når du søker etter et mønster i en katalog med flere filer. Det skriver bare ut filnavnet, og ikke den spesifikke linjen med mønsteret.

9. Enkeltordalternativ -w

$grep -i <MØNSTER>filnavn

Flagget -w forteller grep å se etter det gitte mønsteret som et helt ord og ikke bare en delstreng av en linje. For eksempel hilste vi tidligere på IP -adresse og mønster inet skrevet ut linjene med begge inet og inet6 som viser både IPv4 og IPv6 adresser. Men hvis vi brukte -w flagg bare linjene med inet et ord foran og etterfulgt av hvite mellomrom er en gyldig treff.

10. Utvidet vanlig uttrykk

Du vil ofte oppdage at de vanlige uttrykkene som er hjemmehørende i Grep, er litt begrensende. I de fleste skript og instruksjoner finner du bruken av -E flagg, og dette lar deg skrive inn mønster i det som kalles utvidet modus.

Her er grep og grep -E kommandoer for å lete etter ordene Superman og Spiderman.

$grep ' (Super | Spider ) mann'tekst
$grep -OG '(Super | Edderkopp) mann'tekst

Som du kan se er den utvidede versjonen mye lettere å lese.

11. Grep for containerne dine

Hvis du har en stor klynge med beholdere som kjører på verten din, kan du grep dem etter bildenavn, status, porter de avslører og mange andre attributter. For eksempel,

$dockerps | grep [imageName]

12. Grep for belgene dine

Mens vi er på emnet containere. Kubernetes pleier ofte å starte flere pods under en gitt distribusjon. Selv om hver pod har et unikt navn, starter de vanligvis med et distribusjonsnavn i et gitt navneområde. Vi kan grep om det og liste alle belgene som er knyttet til en gitt distribusjon.

$kubectl få belger| grep <distribusjonsnavn>

13. Grep for Big data

Ofte innebærer den såkalte Big Data -analysen enkelt søk, sortering og telling av mønstre i et gitt datasett. UNIX -verktøy på lavt nivå som grep, uniq, wc er spesielt gode på dette. Dette blogginnlegget viser et fint eksempel på en oppgave som ble utført på bare sekunder ved å bruke grep og andre Unix -verktøy mens Hadoop tok nesten en halv time.

For eksempel er dette datasettet over 1,7 GB stort. Den inneholder informasjon om et mangfold sjakkamper, inkludert trekkene som ble gjort, hvem som vant, etc. Vi er interessert i bare resultater, så vi kjører følgende kommando:

$grep 'Resultat'millionbase-2.22.pgn| sortere | uniq -c
221 [Resultat'*']
653728 [Resultat'0-1']
852305 [Resultat'1-0']
690934 [Resultat'1 / 2-1 / 2']

Dette tok rundt 15 sekunder på en 4 år gammel 2-kjerner/4-tråds prosessor. Så neste gang du løser et stort dataproblem. Tenk om du kan bruke grep i stedet.

14. grep –farge = auto

Dette alternativet lar grep markere mønsteret inne i linjen der det ble funnet.

15. grep -i

Grep-mønstermatching er iboende store og små bokstaver. Men hvis du ikke bryr deg om det, vil bruk av -i -flagget gjøre grep -bokstaver ufølsomt.

16. grep -n

Flagget -n viser linjenumrene, slik at du ikke trenger å bekymre deg for å finne den samme linjen senere.

17. git grep

Git, versjonskontrollsystemet, har selv en innebygd grep-kommando som fungerer omtrent som din vanlige grep. Men den kan brukes til å søke etter mønstre på ethvert engasjert tre ved hjelp av den opprinnelige git CLI, i stedet for kjedelige rør. For eksempel, hvis du er i hovedgrenen i repoen din, kan du gripe over repoen ved å bruke:

(herre)$git grep <mønster>

18. grep -o

-O -flagget er veldig nyttig når du prøver å feilsøke et regex. Det vil bare skrive ut den matchende delen av linjen, i stedet for hele linjen. Så hvis du får for mange uønskede linjer for et levert mønster, og du kan ikke forstå hvorfor det skjer. Du kan bruke -o -flagget til å skrive ut den støtende delstrengen og resonnere om regexet ditt bakover derfra.

19. grep -x

Flagget -x vil skrive ut en linje, hvis og bare hvis hele linjen samsvarer med det medfølgende regekset. Dette ligner noe på flagget -w som trykte en linje hvis og bare et helt ord samsvarte med den medfølgende regeksen.

20. grep -T

Når du arbeider med logger og utdata fra et skallskript, er det mer enn sannsynlig at du støter på harde faner for å skille mellom forskjellige kolonner med utgang. -T -flagget justerer disse fanene pent slik at kolonnene er pent arrangert, noe som gjør utgangen menneskelig lesbar.

21. grep -q

Dette undertrykker utgangen og kjører grep -kommandoen stille. Veldig nyttig når du bytter ut tekst, eller kjører grep i et demonskript.

22. grep -P

Folk som er vant til å utføre syntaks for vanlig uttrykk, kan bruke -P -flagget til å bruke akkurat det. Du trenger ikke å lære grunnleggende regulært uttrykk, som grep bruker som standard.

23. grep -D [ACTION]

I Unix kan nesten alt behandles som en fil. Følgelig kan en hvilken som helst enhet, en stikkontakt eller en FIFO -datastrøm mates til grep. Du kan bruke -D -flagget etterfulgt av en HANDLING (standardhandlingen er LES). Noen andre alternativer er HOPP for å hoppe over bestemte enheter i det stille og RECURSE for rekursivt å gå gjennom kataloger og symlenker.

24. Gjentagelse

Hvis du leter etter et gitt mønster som er en repetisjon av et kjent enklere mønster, kan du bruke krøllete seler til å angi antall repetisjoner

$grep -OG [0-9]{10}

Dette skriver ut linjer som inneholder strenger på 10 eller flere sifre.

25. Repetisjonskort

Noen spesialtegn er reservert for en bestemt type mønsterrepetisjon. Du kan bruke disse i stedet for krøllete seler, hvis de passer til ditt behov.

? : Mønsteret foran spørsmålstegnet skal matche null eller én gang.

*: Mønsteret foran stjernen skal matche null eller flere ganger.

+: Mønsteret foran pluss skal samsvare en eller flere ganger.

25. Byte -forskyvninger

Hvis du vil vite se byteforskyvningen av linjene der det matchende uttrykket finnes, kan du bruke -b -flagget til å skrive ut forskyvningene også. For å skrive ut forskyvningen av bare den matchende delen av en linje, kan du bruke -b -flagget med -o -flagget.

$grep -b -eller <MØNSTER> [filnavn]

Offset betyr ganske enkelt, etter hvor mange byte fra begynnelsen av filen starter den matchende strengen.

26. egrep, fgrep og rgerp

Du vil ofte se påkallelsen til egrep for å bruke den utvidede regulære uttrykkssyntaksen vi diskuterte tidligere. Dette er imidlertid en utdatert syntaks, og det anbefales at du unngår å bruke dette. Bruk grep -E i stedet. På samme måte bruker du grep -F, i stedet for fgrep og grep -r i stedet for rgrep.

27. grep -z

Noen ganger er inngangen til grep ikke linjer som slutter med et nytt linjetegn. For eksempel, hvis du behandler en liste over filnavn, kan de komme fra forskjellige kilder. Flagget -z forteller grep å behandle NULL -tegnet som linjeavslutning. Dette lar deg behandle den innkommende strømmen som en vanlig tekstfil.

28. grep -a [filnavn]

Flagget -a forteller grep å behandle den medfølgende filen som om den var vanlig tekst. Filen kan være en binær, men grep vil behandle innholdet inne, som om de er tekst.

29. grep -U [filnavn]

Flagget -U forteller grep å behandle de medfølgende filene som om de er binære filer og ikke tekst. Som standard gjetter grep filtypen ved å se på de første byte. Bruk av dette flagget overstyrer at gjetninger fungerer.

30. grep -m NUM

Med store filer kan det ta evigheter å hilse på et uttrykk. Imidlertid, hvis du bare vil se etter de første NUM antall treff, kan du bruke -m -flagget for å oppnå dette. Det er raskere og utdataene er ofte også håndterbare.

Konklusjon

Mye daglig jobb med sysadmin innebærer å sile gjennom store tekststrøk. Dette kan være sikkerhetslogger, logger fra din web- eller e -postserver, brukeraktivitet eller til og med stor tekst på man -sider. Grep gir deg den ekstra fleksibiliteten når du håndterer disse brukstilfellene.

Forhåpentligvis har de få eksemplene og brukstilfellene ovenfor hjulpet deg med å bedre forstå denne levende fossilen til en programvare.