Pravilno korištenje naredbi Find i Grep u Linuxu

Većina početničkih korisnika Unix-sustava, posebno Linuxa, nisu upoznati s osnovnim operatorima naredbene linije koji se koriste u ovom OS-u. Pogledajmo bliže funkcije i korištenje operatora find i grep.

Korištenje naredbi Find i Grep u Linuxu.

PRONAĐITE

Linux find naredba je uslužni program naredbenog retka za prolazak kroz hijerarhiju datoteka. Može se koristiti za traženje datoteka i direktorija i izvođenje naknadnih operacija s njima. Ona podržava pretraživanje po datoteci, mapi, ime, datum stvaranja, datum promjene, vlasnik i dozvole. Korištenjem -exec, mogu se izvršiti druge UNIX naredbe za pronađene datoteke ili mape. sintaksa:

$ find [gdje započeti pretraživanje] [izraz određuje što pronaći] [-options] [što pronaći]

opcije:

  • -exec - tražena datoteka koja zadovoljava gore navedene kriterije i vraća 0 kao izlazno stanje za uspješno izvršavanje naredbe;
  • -ok - radi isto kao i -exec, osim što se korisnik najprije zatraži;
  • -inum N - pretraživanje s brojem "N";
  • -poveznice N - pretraživanje s linkovima "N";
  • -name demo - traži datoteke navedene u "demo";
  • -newer file - traži datoteke koje su modificirane / kreirane nakon "file";
  • -perm oktalno - pretraživanje ako je razlučivost oktalna;
  • -print - pokazati put do pronađenih dokumenata koristeći druge kriterije;
  • -prazno - traži prazne dokumente i direktorije;
  • - veličina + N / N - blokovi za pretraživanje "N"; "N" i "c" mogu se koristiti za mjerenje veličine u znakovima; “+ N” znači veću veličinu “N” blokova, a “N” znači manju veličinu “N” blokova;
  • -user name - potražite dokumente koji pripadaju korisničkom imenu ili identifikatoru "name";
  • (expr) - True ako je "expr" istinit; Koristi se za grupiranje kriterija u kombinaciji s OR ili AND.

grep

Za pretraživanje datoteka koristi se naredba grep. Funkcija znači "globalni ispis regularnih izraza" i jedna je od najmoćnijih i najčešće korištenih naredbi u Linuxu. Naredba pretražuje jednu ili više ulaznih datoteka koje odgovaraju navedenom uzorku i piše svaki odgovarajući redak u standardni izlaz. Ako nijedna datoteka nije navedena, naredba se čita sa standardnog ulaza, koji je obično izlaz druge naredbe. U ovom članku pokazat ćemo vam kako upisati naredbu, s praktičnim primjerima i detaljnim objašnjenjima najčešćih GNU grep opcija.

Sintaksa naredbe

Prije nego počnemo koristiti naredbu, počnimo s pregledom osnovne sintakse. Izrazi korisnosti imaju sljedeći oblik:

[OPCIJE] PATTERN [FILE ...]

Stavke u uglatim zagradama nisu obavezne.

  • OPCIJE - nula ili više mogućnosti. Tim pruža brojne opcije koje kontroliraju njegovo ponašanje.
  • OBRAZAC - Uzorak pretraživanja.
  • FILE - nula ili više naziva ulaznih datoteka.

Kako unijeti naredbu za pretraživanje datoteka

Glavna svrha naredbe je traženje teksta u datoteci. Na primjer, za prikaz iz datoteke / etc / passwd koja sadrži liniju bash, možete koristiti sljedeću naredbu:

$ grep bash / etc / passwd

Izlaz bi trebao izgledati ovako:

root 0: 0: root: / root: / bin / bash

domain1000: 1000: domena: / home / domain: / bin / bash

Ako niz sadrži razmake, morate ga priložiti u jednostruke ili dvostruke navodnike:

$ "Upravitelj prikaza gnoma" / etc / passwd

Izmijeni podudaranje (ex)

Za prikaz linija koje ne odgovaraju uzorku unesite parametar –v (ili –invert-match). Na primjer, da biste prikazali datoteku koja ne sadrži nologin iz datoteke / etc / passwd, možete unijeti sljedeću naredbu:

$ -v nologin / etc / passwd

izlaz:

root 0: 0: root: / root: / bin / bash

colord 124: 124 :: / var / lib / colord: / bin / false

git 994: 994: korisnik git daemon: /: / usr / bin / git-shell

linuxize 1000: 1000: linuxize: / home / linuxize: / bin / bash

Kako koristiti naredbu za pretraživanje u izlazu

Umjesto toga, ako navedete ulazne datoteke, možete preusmjeriti izlaz druge naredbe, a zatim prikazati samo retke koji odgovaraju navedenom uzorku. Na primjer, da biste saznali koji se procesi na vašem sustavu izvršavaju kao korisnik www podataka, možete upotrijebiti sljedeću naredbu:

$ ps -ef | www-data

izlaz:

www-data 18247 12675 4 16:00? 00:00:00 php-fpm: bazen www

root 18272 17714 0 16:00 pts / 0 00:00:00 - boja = auto - isključi - dir = .bzr - isključi - dir = CVS - isključi - dir = .git - izuzmi - dir = .hg - isključi - dir =. = .svn www-podaci

www-data 31147 12770 0 lis22? Nginx: radni proces

www-data 31148 12770 0 lis22? 00:00:00 proces nginx: upravitelja predmemorije

Također možete kombinirati više kanala u tim. Kao što možete vidjeti u gore navedenom izlazu, tu je i red koji sadrži proces. Ako ne želite da se ta linija prikazuje, pošaljite izlaz drugoj instanci, kao što je prikazano ispod.

$ ps -ef | www-podaci | grep -v grep

izlaz:

www-data 18247 12675 4 16:00? 00:00:00 php-fpm: bazen www

root 18272 17714 0 16:00 pts / 0 00:00:00 - boja = auto - isključi - dir = .bzr - isključi - dir = CVS - isključi - dir = .git - izuzmi - dir = .hg - isključi - dir =. = .svn www-podaci

www-data 31147 12770 0 lis22? Nginx: radni proces

www-data 31148 12770 0 lis22? 00:00:00 proces nginx: upravitelja predmemorije

Rekurzivno pretraživanje

Za rekurzivno traženje uzorka unesite –r (ili –recursive) opciju. To će vam omogućiti da pretražite sve datoteke u navedenom direktoriju, preskočite simboličke veze koje se rekurzivno pojavljuju. Za prolazak kroz sve simboličke veze koristite opciju –r (ili –dereference-recursive). U sljedećem primjeru tražimo domain.com u svim datotekama unutar / etc direktorija:

$ -r domain.com / etc

Naredba će ispisati odgovarajuća polja s punim prefiksom putanje datoteke.

/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: ime_poslužitelja domain.com www.domain.com;

Ako umjesto –r koristite opciju –R, naredba će slijediti sve simboličke veze:

$ -R domain.com / etc

Primijetite posljednje polje za izlaz. Ovo nije ispisano u gornjem primjeru, jer su datoteke u Nginx direktoriju s omogućenim web-lokacijama simbolične veze na konfiguracijske datoteke unutar direktorija dostupnih web-mjesta.

izlaz:

/etc/hosts:127.0.0.1 node2.domain.com

/etc/nginx/sites-available/domain.com: ime_poslužitelja domain.com www.domain.com;

/etc/nginx/sites-enabled/domain.com: ime_poslužitelja domain.com www.domain.com;

Prikaži samo naziv datoteke

Da biste suzbili zadani izlaz i ispisali samo imena datoteka koje sadrže odgovarajući uzorak, možete unijeti opciju –l (ili —file-s-podudaranjem). Na primjer, za traženje svih datoteka koje završavaju u .conf u trenutnom radnom direktoriju i za ispis samo imena datoteka koje sadrže tip domene.com, upišite:

$ -L domain.com * .conf

Izlaz će izgledati ovako:

tmux.conf

haproxy.conf

Opcija -l se obično koristi zajedno s rekurzivnom -R opcijom:

$ -Rl domain.com / tmp

Neosjetljivost slučaja

Prema zadanim postavkama, naredba je osjetljiva na velika i mala slova, što znači da se velika i mala slova tretiraju kao različita. Da biste zanemarili slučaj prilikom pretraživanja, unesite opciju –i (ili –ignore-case). Na primjer, ako tražite Zebru bez ikakve opcije, sljedeća naredba neće prikazati nikakav izlaz, tj. postoje podudaranja.

$ Zebra / usr / share / riječi

Ali ako izvršite pretragu koja nije osjetljiva na velika i mala slova, upotrijebite opciju –i koja će odgovarati velikim i malim slovima:

$ grep -i Zebra / usr / share / riječi

Oznaka "Zebra" odgovara "Zebra", "ZEbrA" ili bilo kojoj drugoj kombinaciji velikih i malih slova.

izlaz:

zebra

zebra-a

zebre

Točno podudaranje

Kada pretražuje, gnu će također ispisati gnu, u koji su umetnute veće riječi, kao što su cygnus ili magnum.

$ gnu / usr / share / riječi

izlaz:

Cygnus

gnu

interegnum

lgnu9d

Lignum

25 l šampanjca

Magnuson

sphagnum

Wingnut

Da biste vratili samo one izraze u kojima je navedeno polje cijela riječ (ne uokvirena riječima), možete upotrijebiti opciju –W (ili —word-regexp).

VAŽNO. Znakovi riječi uključuju alfanumeričke znakove (az, AZ i 0-9) i podvlake (_). Svi ostali znakovi tretiraju se kao neverbalni znakovi.

Ako pokrenete istu naredbu kao i gore, uključujući i -w opciju, naredba će vratiti samo one koje uključuju gnu kao zasebnu riječ.

$ grep -w gnu / usr / share / riječi

Izlaz: gnu

Prikaži brojeve

Da biste prikazali broj redaka koji sadrže uzorak, upotrijebite parametar –n (ili –line-number). Korištenjem ove opcije ispisat će se podudaranja sa standardnim izlazom s prefiksom broja u kojem je pronađen. Na primjer, za prikaz iz datoteke / etc / services koja sadrži prefiks bash s odgovarajućim brojem, možete koristiti sljedeću naredbu:

$ grep -n 10000 / etc / services

Izlaz u nastavku pokazuje da su utakmice na 10423 i 10424.

izlaz:

10423: ndmp 10, 000 / tcp

10424: ndmp 10000 / udp

računajući

Za ispis broja odgovarajućih redaka na standardni izlaz koristite parametar –c (ili –count). U donjem primjeru brojimo broj računa koji imaju ljusku / usr / bin / zsh.

$ grep -c '/ usr / bin / zsh' / etc / passwd

Izlaz: 4

Nekoliko redaka (uzoraka)

Operator OR može kombinirati dva ili više uzoraka pretraživanja. Prema zadanim postavkama, naredba interpretira uzorak kao glavni regularni izraz, u kojem meta-znakovi gube svoje posebno značenje, te treba koristiti njihove verzije s obrnutom crtom. U primjeru u nastavku tražimo sve pojave riječi fatalna, pogreška i kritična u datoteci dnevnika pogrešaka Nginx:

$ grep 'fatalna | pogreška | kritična' /var/log/nginx/error.log

Ako koristite opciju proširenog regularnog izraza -E (ili —extended-regexp), izraz se ne smije izbjegavati, kao što je prikazano u nastavku:

$ grep -E 'fatalna | pogreška | kritična' /var/log/nginx/error.log

Redovni izraz

GNU Grep ima dvije skupine regularnih izraza - Basic i Extended. Po zadanom, funkcija interpretira uzorak kao osnovni regularni izraz, da bi se prebacila na proširene regularne izraze, morate koristiti opciju –E. Kada koristite regularne izraze u glavnom modu, svi ostali znakovi, osim meta-znakova, zapravo su regularni izrazi koji odgovaraju jedni drugima. U nastavku se nalazi popis najčešće korištenih meta-znakova:

  • Upotrijebite znak ^ (znak sloga) da odgovara izrazu na početku retka. U sljedećem primjeru, ^ kengur će se podudarati samo ako se dogodi na samom početku: $ grep "^ kengur" file.txt
  • Koristite simbol $ (dolar) koji odgovara izrazu na kraju. U sljedećem primjeru, kengur $ će se podudarati samo ako se susreće na samom kraju: grep "kangaroo $" file.txt
  • Koristite simbol. (točka) kako bi odgovarao svakom pojedinačnom znaku. Na primjer, da biste uskladili sve što počinje s kan od dva znaka i završava s roo, možete koristiti sljedeći uzorak: $ grep "kan..roo" file.txt
  • Koristite [] (zagrade) da biste uskladili bilo koji pojedinačni znak u zagradama. Na primjer, pronađite one koje sadrže akcenat ili "naglasak", možete koristiti sljedeći uzorak: $ grep "acce [np] t" file.txt

Da biste izbjegli posebno značenje sljedećeg znaka, upotrijebite znak backslash.

Prošireni regularni izrazi

Za interpretaciju uzorka kao proširenog regularnog izraza koristite parametar –E (ili –extended-regexp). Prošireni regularni izrazi uključuju sve osnovne meta-znakove, kao i dodatne meta-znakove za stvaranje složenijih i moćnijih uzoraka pretraživanja. U nastavku slijedi nekoliko primjera:

  • Podesite i izdvojite sve adrese e-pošte iz ove datoteke: $ grep -E -o "[A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + [A-Za-z] {2.6} b "datoteka.txt
  • Mapirajte i izdvojite sve valjane IP adrese iz ove datoteke: $ grep -E -o '(25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0] (25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) 5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) (25 [0-5] | 2 [0-4] [0-9] 9] | [01]? [0-9] [0-9]?) Datoteka.txt

Opcija -o koristi se za ispis samo podudaranja.

Ispišite prije brojanja

Za ispis određenog broja redaka prije podudaranja koristite parametar –B (ili —prije konteksta). Na primjer, da biste prikazali 5 redaka početnog konteksta prije podudaranja, možete koristiti sljedeću naredbu: $ grep -A 5 root / etc / passwd

Ispis nakon pretraživanja

Za ispis određenog broja redaka nakon podudaranja koristite parametar –A (ili-nakon-konteksta). Na primjer, za prikaz 5 redaka konačnog konteksta nakon podudaranja nizova, možete koristiti sljedeću naredbu: $ grep -B 5 root / etc / passwd

To je sve potrebno za potpuno korištenje informacija o naredbama. Ako već koristite Linux i možete dati savjete početnicima, podijelite komentare prema ovom članku.