30 Grep -exempel för systemadministratörer

30 Grep Examples System Admins



Du kan hitta grep som finns djupt inne i djurhjärnan hos Unix och Unix-liknande operativsystem. Det är ett grundläggande program som används för mönstermatchning och det skrevs på 70 -talet tillsammans med resten av UNIX -verktyget som vi känner och älskar (eller hatar).

Medan lärande om formella språk och reguljära uttryck är ett spännande ämne. Att lära sig grep har mycket mer att göra än regexer. För att komma igång med det och för att se skönheten och elegansen hos grep måste du först se några verkliga exempel.







Exempel som är praktiska och gör ditt liv lite enklare. Här är 30 sådana vanliga grep -fall och alternativ.



1. ps aux | grep

PS aux listar alla processer och deras tillhörande pids. Men ofta är denna lista för lång för en människa att inspektera. Genom att leda utmatningen till ett grep -kommando kan du lista processer som körs med ett mycket specifikt program i åtanke. Det kan till exempel vara sshd eller nginx eller httpd.



# ps till | 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@poäng/0
rot1093 0,0 0,0 12784 932poäng/0S+18:29 0: 00greppsshd

2. Grepping dina IP -adresser

I de flesta operativsystem kan du lista alla dina nätverksgränssnitt och IP: n som tilldelas gränssnittet med antingen kommandot ifconfig eller ip addr. Båda dessa kommandon kommer att mata ut mycket ytterligare information. Men om du bara vill skriva ut IP -adressen (säg för skalskript) kan du använda kommandot nedan:





$ip addr | greppinet| ock '{print $ 2; } '
$ip addr | grepp -iinet| ock '{print $ 2; } ' #För linjer med bara inet inte inet6 (IPv6)

Kommandot ip addr får alla detaljer (inklusive IP -adresser), det rörs sedan till det andra kommandot grep inet som bara matar ut raderna med inet i dem. Detta läggs sedan in i awk print -satsen som skriver ut det andra ordet i varje rad (för att uttrycka det enkelt).

P.S: Du kan också göra detta utan grep om du vet ok vet.



3. Tittar på misslyckade SSH -försök

Om du har en Internet -server, med en offentlig IP, kommer den att ständigt bombarderas med SSH -försök och om du tillåter användare att ha lösenordsbaserad SSH -åtkomst (en policy som jag inte rekommenderar) kan du se alla sådana misslyckade försök med hjälp av följande grep -kommando:

# cat /var/log/auth.log | grep Misslyckas
Prov ut satt
Dec5 16:tjugo: 03 debian sshd[509]: Misslyckat lösenordförroot från 192.168.0.100 -porten52374ssh2
Dec5 16:tjugo: 07 debian sshd[509]: Misslyckat lösenordförroot från 192.168.0.100 -porten52374ssh2
Dec5 16:tjugo:elvadebian sshd[509]: Misslyckat lösenordförroot från 192.168.0.100 -porten52374ssh2

4. Piping Grep till Uniq

Ibland kommer grep att mata ut mycket information. I exemplet ovan kan en enda IP ha försökt komma in i ditt system. I de flesta fall finns det bara en handfull sådana kränkande IP -adresser som du behöver identifiera och svartlista på ett unikt sätt.

#katt /var/logga/auth.log| grepp 'Misslyckas' | uniq -f 3

Kommandot uniq ska bara skriva ut de unika raderna. Uniq -f 3 hoppar över de tre första fälten (för att förbise tidsstämplarna som aldrig upprepas) och börjar sedan leta efter unika linjer.

5. Grepping för felmeddelanden

Att använda Grep för åtkomst- och felloggar är inte endast begränsat till SSH. Webbservrar (som Nginx) loggfel och åtkomstloggar ganska noggrant. Om du konfigurerar övervakningsskript som skickar dig varningar när grep 404 returnerar ett nytt värde. Det kan vara ganska användbart.

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

192.168.0.100 - -[06/Dec/2018: 02:tjugo: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/Dec/2018: 02:Fyra 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) Version/12.0 Mobile/15E148 Safari/604.1 '

Regexen kanske inte är 404, men någon annan regex -filtrering för endast mobila klienter eller endast Apple -enheter som tittar på en webbsida. Detta gör att du kan få en djupare inblick i hur din app fungerar.

6. Paketlista

För Debian -baserade system listar dpkg -l alla paket som är installerade på ditt system. Du kan göra det till ett grep -kommando för att leta efter paket som tillhör en specifik applikation. Till exempel:

#dpkg -de | grepp 'Jag kom'

7. grep -v filnamn

För att lista alla rader som inte innehålla ett givet mönster, använd flaggan -v. Det är i princip motsatsen till ett vanligt grep -kommando.

8. grep -l

Den listar alla filer som innehåller minst en förekomst av det medföljande mönstret. Detta är användbart när du söker efter ett mönster i en katalog med flera filer. Det skriver bara ut filnamnet, och inte den specifika raden med mönstret.

9. Alternativ för enstaka ord -w

$grepp -i <MÖNSTER>filnamn

Flaggan -w berättar för grep att leta efter det givna mönstret som ett helt ord och inte bara en delsträng av en rad. Till exempel, tidigare grepped vi för IP -adress och mönstret inet skrivit ut raderna med båda inet och inet6 med både IPv4- och IPv6 -adresser. Men om vi använde -w flagga endast raderna med inet som ett ord som föregås och följs av vita mellanslag är en giltig matchning.

10. Utökat reguljärt uttryck

Du kommer ofta att upptäcka att de reguljära uttrycken som är infödda i Grep är lite begränsande. I de flesta skript och instruktioner hittar du användningen av -E flagga och detta gör att du kan ange mönster i det som kallas Extended Mode.

Här är grep och grep -E kommandon för att leta efter ord Superman och Spiderman.

$grepp ' (Super | Spider ) man'text
$grepp -OCH '(Super | Spider) man'text

Som du kan se är den utökade versionen mycket lättare att läsa.

11. Grep för dina behållare

Om du har ett stort antal containrar som körs på din värd kan du grep dem med bildnamn, status, portar som de exponerar och många andra attribut. Till exempel,

$hamnarbetareps | grepp [imageName]

12. Grep för dina skida

Medan vi är på ämnet behållare. Kubernetes tenderar ofta att starta flera kapslar under en given distribution. Medan varje pod har ett unikt namn, i ett givet namnutrymme, börjar de vanligtvis med distributionsnamnet, vanligtvis. Vi kan grep om det och lista alla böcker som är associerade med en given distribution.

$kubectl få skida| grepp <distributionName>

13. Grepp för Big data

Ofta innebär den så kallade Big Data -analysen enkel sökning, sortering och räkning av mönster i en given datamängd. Lågnivå UNIX -verktyg som grep, uniq, wc är särskilt bra på detta. Det här blogginlägget visar ett bra exempel på en uppgift som utförs på bara några sekunder med hjälp av grep och andra Unix -verktyg medan Hadoop tog nästan en halvtimme.

Till exempel är denna datamängd större än 1,7 GB. Den innehåller information om en mängd schackmatcher, inklusive de drag som gjorts, vem som vann, etc. Vi är intresserade av bara resultat så vi kör följande kommando:

$grepp 'Resultat'miljonbas-2.22.pgn| sortera | uniq -c
221 [Resultat'*']
653728 [Resultat'0-1']
852305 [Resultat'1-0']
690934 [Resultat'1 / 2-1 / 2']

Detta tog cirka 15 sekunder på en 4-årig 2-kärnor/4-trådig processor. Så nästa gång du löser ett stort dataproblem. Tänk om du kan använda grep istället.

14. grep –färg = auto

Med det här alternativet kan grep markera mönstret inom raden där det hittades.

15. grep -i

Grep-mönstermatchning är inneboende skiftlägeskänslig. Men om du inte bryr dig om det kommer användningen av -i -flaggan att göra grep skiftlägeskänslig.

16. grep -n

Flaggan -n visar radnumren så att du inte behöver oroa dig för att hitta samma rad senare.

17. git grep

Git, versionskontrollsystemet, har i sig ett inbyggt grep-kommando som fungerar ungefär som din vanliga grep. Men den kan användas för att söka efter mönster på alla engagerade träd med den inbyggda git CLI, istället för tråkiga rör. Om du till exempel befinner dig i huvudgrenen i din repo kan du grep över repo med:

(bemästra)$git grep <mönster>

18. grep -o

-O -flaggan är verkligen till hjälp när du försöker felsöka en regex. Det kommer bara att skriva ut den matchande delen av raden, i stället för hela raden. Så om du får för många oönskade rader för ett medföljande mönster, och du kan inte förstå varför det händer. Du kan använda -o -flaggan för att skriva ut den felande delsträngen och resonera om din regex bakåt därifrån.

19. grep -x

Flaggan -x skulle skriva ut en rad, om och bara om hela raden matchar din levererade regex. Detta liknar något -w -flaggan som skrev ut en rad om och bara ett helt ord matchade den medföljande regexen.

20. grep -T

När du hanterar loggar och utdata från ett skalskript är det mer än troligt att du stöter på hårda flikar för att skilja mellan olika kolumner med utdata. -T -flaggan kommer att justera dessa flikar snyggt så att kolumnerna är snyggt ordnade, vilket gör utmatningen mänsklig läsbar.

21. grep -q

Detta undertrycker utmatningen och kör tyst kommandot grep. Mycket användbart när du byter ut text eller kör grep i ett daemon -skript.

22. grep -P

Personer som är vana vid att perlsa syntax för reguljärt uttryck kan använda -P -flaggan för att använda exakt det. Du behöver inte lära dig grundläggande reguljärt uttryck, vilket grep använder som standard.

23. grep -D [ÅTGÄRD]

I Unix kan nästan allt behandlas som en fil. Följaktligen kan alla enheter, ett uttag eller en FIFO -dataström matas till grep. Du kan använda -D -flaggan följt av en ÅTGÄRD (standardåtgärden är LÄS). Några andra alternativ är SKIP för att tyst hoppa över specifika enheter och RECURSE för att rekursivt gå igenom kataloger och symlänkar.

24. Upprepning

Om du letar efter ett givet mönster som är en upprepning av ett känt enklare mönster, använd sedan lockiga hängslen för att ange antalet repetitioner

$grepp -OCH [0-9]{10}

Detta skriver ut rader som innehåller strängar 10 eller fler siffror långa.

25. Repetitionstecken

Vissa specialtecken är reserverade för en specifik typ av mönsterrepetition. Du kan använda dessa istället för lockiga hängslen, om de passar dina behov.

? : Mönstret före frågetecknet ska matcha noll eller en gång.

*: Mönstret före stjärnan ska matcha noll eller fler gånger.

+: Mönstret som föregår plus ska matcha en eller flera gånger.

25. Byteförskjutningar

Om du vill veta se byteförskjutningen för raderna där matchande uttryck finns kan du också använda -b -flaggan för att skriva ut förskjutningarna. För att skriva ut förskjutningen av bara den matchande delen av en rad kan du använda -b -flaggan med -o -flaggan.

$grepp -b -eller <MÖNSTER> [filnamn]

Offset betyder helt enkelt, efter hur många byte från början av filen börjar matchningssträngen.

26. egrep, fgrep och rgerp

Du kommer ofta att se påkallandet av egrep, för att använda den utökade syntaxen för reguljärt uttryck som vi diskuterade tidigare. Detta är dock en utfasad syntax och det rekommenderas att du undviker att använda detta. Använd grep -E istället. Använd på samma sätt grep -F, istället för fgrep och grep -r istället för rgrep.

27. grep -z

Ibland är ingången till grep inte rader som slutar med ett nyradstecken. Om du till exempel bearbetar en lista med filnamn kan de komma från olika källor. Flaggan -z berättar för grep att behandla NULL -tecknet som raderna. Detta gör att du kan behandla den inkommande strömmen som en vanlig textfil.

28. grep -a [filnamn]

Flaggan -a säger till grep att hantera den medföljande filen som om det vore vanlig text. Filen kan vara en binär, men grep kommer att behandla innehållet inuti, som om de är text.

29. grep -U [filnamn]

Flaggan -U berättar för grep att behandla de medföljande filerna som om de är binära filer och inte text. Som standard gissar grep filtypen genom att titta på de första bytena. Att använda denna flagga överskrider att gissningar fungerar.

Grep -m NUM

Med stora filer kan greeping för ett uttryck ta evigheter. Men om du bara vill leta efter de första NUM -antalet matchningar kan du använda -m -flaggan för att uppnå detta. Det är snabbare och resultatet är ofta också hanterbart.

Slutsats

Mycket vardagligt jobb för en sysadmin innebär att man siktar igenom stora delar av text. Det kan vara säkerhetsloggar, loggar från din webb- eller e -postserver, användaraktivitet eller till och med stor text på manliga sidor. Grep ger dig den extra flexibiliteten när du hanterar dessa användningsfall.

Förhoppningsvis har ovanstående få exempel och användningsfall hjälpt dig att bättre förstå denna levande fossil av en programvara.