30 Exemple Grep pentru administratorii de sistem

30 Grep Examples System Admins



Puteți găsi grep prezent adânc în creierul animalelor din sistemele de operare Unix și Unix-like. Este un program de bază folosit pentru potrivirea tiparelor și a fost scris în anii 70, împreună cu restul instrumentului UNIX pe care îl cunoaștem și îl iubim (sau urâm).

În timp ce învățarea despre limbaje formale și expresii regulate este un subiect interesant. Învățarea grep are mult mai mult decât regexurile. Pentru a începe cu el și pentru a vedea frumusețea și eleganța grep, trebuie mai întâi să vedeți câteva exemple din lumea reală.







Exemple care sunt la îndemână și îți ușurează viața. Iată 30 de astfel de cazuri grep de utilizare obișnuite și opțiuni.



1. ps aux | grep

Ps aux listează toate procesele și pidurile asociate acestora. Dar de multe ori această listă este prea lungă pentru ca un om să o poată inspecta. Conduind ieșirea la o comandă grep puteți lista procesele care rulează având în vedere o aplicație foarte specifică. De exemplu, ar putea fi sshd sau nginx sau httpd.



# ps către | grep sshd
rădăcină400 0,0 0,2 69944 5624? Ss17:47 0: 00/usr/sbin/sshd-D
rădăcină1076 0,2 0,3 95204 6816? Ss18:29 0: 00 sshd: root@puncte/0
rădăcină1093 0,0 0,0 12784 932puncte/0S +18:29 0: 00prinderesshd

2. Adresați-vă adresele IP

În majoritatea sistemelor de operare puteți lista toate interfețele de rețea și IP-ul care este atribuit acelei interfețe utilizând fie comanda ifconfig, fie IP addr. Ambele comenzi vor genera o mulțime de informații suplimentare. Dar dacă doriți să imprimați doar adresa IP (să zicem pentru scripturile shell), puteți utiliza comanda de mai jos:





$ip addr | prindereinet| awk '{print 2 $; } '
$ip addr | prindere -îninet| awk '{print 2 $; } ' #Pentru liniile cu doar inet not inet6 (IPv6)

Comanda ip addr primește toate detaliile (inclusiv adresele IP), apoi este trimisă la cea de-a doua comandă grep inet care scoate doar liniile cu inet în ele. Acest lucru este apoi introdus în imprimarea awk declarația care tipărește al doilea cuvânt din fiecare linie (pentru a o spune simplu).

P.S: Puteți face acest lucru și fără grep dacă știți bine știți.



3. Privind încercările SSH eșuate

Dacă aveți un server orientat spre internet, cu un IP public, acesta va fi constant bombardat cu încercări SSH și dacă permiteți utilizatorilor să aibă acces SSH bazat pe parolă (o politică pe care nu aș recomanda-o) puteți vedea toate aceste încercări eșuate folosind următoarea comandă grep:

# cat /var/log/auth.log | grep Fail
Eșantion pus
Dec5 16:douăzeci: 03 debian sshd[509]: Parola eșuatăpentruroot din portul 192.168.0.10052374ssh2
Dec5 16:douăzeci: 07 debian sshd[509]: Parola eșuatăpentruroot din portul 192.168.0.10052374ssh2
Dec5 16:douăzeci:unsprezecedebian sshd[509]: Parola eșuatăpentruroot din portul 192.168.0.10052374ssh2

4. Piping Grep to Uniq

Uneori, grep va genera o mulțime de informații. În exemplul de mai sus, este posibil ca un singur IP să fi încercat să intre în sistemul dvs. În majoritatea cazurilor, există doar o mână de astfel de IP-uri jignitoare pe care trebuie să le identificați în mod unic și să le identificați pe lista neagră.

#pisică /Unde/Buturuga/auth.log| prindere „Fail” | uniq -f 3

Comanda uniq ar trebui să imprime doar liniile unice. Uniq -f 3 omite primele trei câmpuri (pentru a trece cu vederea marcajele de timp care nu se repetă niciodată) și apoi începe să caute linii unice.

5. Grepping pentru mesaje de eroare

Utilizarea Grep pentru jurnalele de acces și erori nu se limitează doar la SSH. Serverele web (cum ar fi Nginx) înregistrează erorile și jurnalele de acces destul de meticulos. Dacă configurați scripturi de monitorizare care vă trimit alerte atunci când grep 404 returnează o nouă valoare. Acest lucru poate fi destul de util.

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

192.168.0.100 - -[06/Dec/2018: 02:douăzeci: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, cum ar fi Gecko) Chrome / 70.0.3538.110 Safari / 537.36 '


192.168.0.101 - -[06/Dec/2018: 02:Patru cinci:16+0530] „GET /favicon.ico HTTP / 1.1” 404 143
„http://192.168.0.102/” „Mozilla / 5.0 (iPad; CPU OS 12_1 ca Mac OS X)
AppleWebKit / 605.1.15 (KHTML, cum ar fi Gecko) Versiune / 12.0 Mobile / 15E148 Safari / 604.1 '

Este posibil ca regex-ul să nu fie 404, dar alte filtre de regex doar pentru clienții mobili sau numai pentru dispozitivele Apple care vizualizează o pagină web. Acest lucru vă permite să aveți o perspectivă mai profundă asupra performanței aplicației dvs.

6. Listarea pachetelor

Pentru sistemele bazate pe Debian, dpkg -l listează toate pachetele instalate pe sistemul dumneavoastră. Puteți introduce asta într-o comandă grep pentru a căuta pachete aparținând unei anumite aplicații. De exemplu:

#dpkg -la | prindere 'Am venit'

7. grep -v FileNames

Pentru a enumera toate liniile care nu conține un model dat, folosește steagul -v. Este practic opusul unei comenzi grep obișnuite.

8. grep -l

Acesta listează toate fișierele care conțin cel puțin o apariție a modelului furnizat. Acest lucru este util atunci când căutați un model într-un director cu mai multe fișiere. Tipărește doar numele fișierului și nu linia specifică cu modelul.

9. Opțiune cu un singur cuvânt -w

$prindere -în <MODEL>fileNames

Steagul -w îi spune grep să caute modelul dat ca un cuvânt întreg și nu doar un șir de linii. De exemplu, mai devreme am căutat adresa IP și modelul inet a imprimat liniile cu ambele inet și inet6 listând atât adresele IPv4, cât și cele IPv6. Dar dacă am folosi -w semnalizează doar liniile cu inet ca un cuvânt precedat și urmat de spații albe este o potrivire validă.

10. Expresie regulată extinsă

Veți găsi adesea că expresiile regulate native pentru Grep sunt puțin limitative. În majoritatea scripturilor și instrucțiunilor veți găsi utilizarea steagului -E și acest lucru vă va permite să introduceți modelul în ceea ce se numește modul extins.

Iată comenzile grep și grep -E pentru a căuta cuvintele Superman și Spiderman.

$prindere „ (Super | Spider ) man”text
$prindere -ȘI „(Super | Spider) man”text

După cum puteți vedea, versiunea extinsă este mult mai ușor de citit.

11. Grep pentru containerele dvs.

Dacă aveți un grup mare de containere care rulează pe gazda dvs., le puteți grepe după numele imaginii, starea, porturile pe care le expun și multe alte atribute. De exemplu,

$docherps | prindere [imageName]

12. Grep pentru păstăile tale

În timp ce suntem pe tema containerelor. Kubernetes are adesea tendința de a lansa mai multe poduri într-o anumită desfășurare. Deși fiecare pod are un nume unic, într-un anumit spațiu de nume, acestea încep cu numele implementării, de obicei. Putem grep de asta și enumera toate pod-urile asociate cu o implementare dată.

$kubectl obține păstăi| prindere <deploymentName>

13. Grip pentru Big Data

De multe ori așa-numita analiză Big Data implică căutarea simplă, sortarea și numărarea tiparelor dintr-un anumit set de date. Utilitățile UNIX de nivel scăzut precum grep, uniq, wc sunt deosebit de bune la acest lucru. Această postare de blog prezintă un exemplu frumos al unei sarcini realizate în câteva secunde folosind grep și alte utilitare Unix în timp ce Hadoop a durat aproape o jumătate de oră.

De exemplu, acest set de date are o dimensiune de peste 1,7 GB. Conține informații despre o mulțime de meciuri de șah, inclusiv mișcările făcute, cine a câștigat etc. Suntem interesați doar de rezultate, așa că executăm următoarea comandă:

$prindere 'Rezultat'millionbase-2.22.pgn| fel | uniq -c
221 [Rezultat„*”]
653728 [Rezultat„0-1”]
852305 [Rezultat„1-0”]
690934 [Rezultat„1 / 2-1 / 2”]

Acest lucru a durat aproximativ 15 secunde la un procesor cu 2 nuclee / 4 fire, în vârstă de 4 ani. Așadar, data viitoare veți rezolva o problemă de date mari. Gândește-te dacă poți folosi grep în schimb.

14. grep –color = auto

Această opțiune permite grep să evidențieze modelul în interiorul liniei în care a fost găsit.

15. grep -i

Potrivirea modelului Grep este inerent sensibilă la majuscule. Dar dacă nu-ți pasă de asta, folosirea steagului -i va face grep să fie nesensibil.

16. grep -n

Steagul -n va afișa numerele de linie, astfel încât să nu vă faceți griji că găsiți aceeași linie mai târziu.

17. git grep

Git, sistemul de control al versiunilor, are în sine o comandă grep încorporată care funcționează cam ca grep-ul dvs. obișnuit. Dar poate fi folosit pentru a căuta modele pe orice copac angajat folosind CLIT-ul git nativ, în loc de conducte obositoare. De exemplu, dacă vă aflați în ramura principală a repo-ului dvs., puteți parcurge repo-ul folosind:

(maestru)$git grep <model>

18. grep -o

Steagul -o este foarte util atunci când încercați să depanați o regex. Se va imprima doar partea potrivită a liniei, în loc de întreaga linie. Deci, în cazul în care primiți prea multe linii nedorite pentru un model furnizat și nu puteți înțelege de ce se întâmplă acest lucru. Puteți utiliza semnalizatorul -o pentru a imprima șirul de caractere ofensator și a argumenta regexul dvs. înapoi de acolo.

19. grep -x

Steagul -x va imprima o linie, dacă și numai dacă, întreaga linie se potrivește cu regexul furnizat. Acest lucru este oarecum similar cu steagul -w care a tipărit o linie dacă și numai dintr-un cuvânt întreg se potrivește cu regexul furnizat.

20. grep -T

Când vă ocupați de jurnalele și ieșirile dintr-un script de shell, este mai probabil să întâlniți file rigide pentru a face diferența între diferite coloane de ieșire. Steagul -T va alinia corect aceste file, astfel încât coloanele să fie aranjate corect, făcând rezultatul să fie lizibil pentru om.

21. grep -q

Aceasta suprimă ieșirea și execută în liniște comanda grep. Foarte util atunci când înlocuiți text sau rulați grep într-un script daemon.

22. grep -P

Oamenii care sunt obișnuiți să perlească sintaxa expresiei regulate pot folosi steagul -P pentru a utiliza exact asta. Nu trebuie să învățați expresia regulată de bază, pe care grep o folosește în mod prestabilit.

23. grep -D [ACȚIUNE]

În Unix, aproape totul poate fi tratat ca un fișier. În consecință, orice dispozitiv, o priză sau un flux de date FIFO pot fi alimentate către grep. Puteți utiliza steagul -D urmat de o ACȚIUNE (acțiunea implicită este CITIȚI). Câteva alte opțiuni sunt SKIP pentru a sări în liniște anumite dispozitive și RECURSE pentru a parcurge recursiv directoare și linkuri simbolice.

24. Repetare

Dacă sunteți în căutarea unui model dat, care este o repetare a unui model cunoscut mai simplu, atunci utilizați acolade pentru a indica numărul de repetări

$prindere -ȘI [0-9]{10}

Aceasta imprimă linii care conțin șiruri de 10 sau mai multe cifre.

25. Stenografii de repetare

Unele caractere speciale sunt rezervate pentru un anumit tip de repetare a tiparului. Puteți folosi aceste în loc de aparate dentare, dacă se potrivesc nevoilor dumneavoastră.

? : Modelul care precedă semnul întrebării trebuie să se potrivească cu zero sau o singură dată.

*: Modelul care precede steaua trebuie să se potrivească de zero sau de mai multe ori.

+: Modelul precedent plus trebuie să se potrivească de una sau mai multe ori.

25. Decalaje de octeți

Dacă doriți să știți să vedeți decalajul de octeți al liniilor în care se găsește expresia potrivită, puteți utiliza steagul -b pentru a imprima și compensările. Pentru a imprima offsetul doar pentru partea potrivită a unei linii, puteți utiliza steagul -b cu steagul -o.

$prindere -b -sau <MODEL> [nume de fișier]

Offset înseamnă pur și simplu, după câte octeți de la începutul fișierului începe șirul de potrivire.

26. egrep, fgrep și rgerp

Veți vedea adesea invocarea lui egrep, pentru a utiliza sintaxa extinsă a expresiei regulate pe care am discutat-o ​​mai devreme. Cu toate acestea, aceasta este o sintaxă depreciată și se recomandă să evitați utilizarea acesteia. Folosiți grep -E în schimb. În mod similar, utilizați grep -F, în loc de fgrep și grep -r în loc de rgrep.

27. grep -z

Uneori, intrarea în grep nu este o linie care se termină cu un caracter nou. De exemplu, dacă prelucrați o listă de nume de fișiere, acestea ar putea proveni din diferite surse. Steagul -z îi spune grep să trateze caracterul NULL ca fiind sfârșitul liniei. Acest lucru vă permite să tratați fluxul de intrare ca orice fișier text obișnuit.

28. grep -a [fileName]

Steagul -a îi spune grep să trateze fișierul furnizat ca și cum ar fi un text obișnuit. Fișierul ar putea fi binar, dar grep va trata conținutul din interior, ca și cum ar fi text.

29. grep -U [FileName]

Steagul -U îi spune grep să trateze fișierele furnizate ca și cum ar fi fișiere binare și nu text. În mod implicit, grep ghicește tipul de fișier uitându-se la primii câțiva octeți. Folosind acest steag suprascrie care presupune că funcționează.

Grep -m NUM

Cu fișiere mari, căutarea unei expresii poate dura pentru totdeauna. Cu toate acestea, dacă doriți să verificați doar primele NUM numere de meciuri, puteți utiliza steagul -m pentru a realiza acest lucru. Este mai rapid, iar ieșirea este deseori ușor de gestionat.

Concluzie

O mulțime de sarcini de zi cu zi ale unui administrator de sistem implică trecerea prin secțiuni mari de text. Acestea pot fi jurnale de securitate, jurnale de pe serverul dvs. de web sau e-mail, activitatea utilizatorului sau chiar text mare de pagini manual. Grep vă oferă acel plus de flexibilitate atunci când vă ocupați de aceste cazuri de utilizare.

Sperăm că câteva exemple de mai sus și cazuri de utilizare v-au ajutat să înțelegeți mai bine această fosilă vie a unui software.