Riktig bruk av Finn og Grep-kommandoer i Linux

De fleste nybegynnerbrukere av Unix-systemer, spesielt Linux, er ikke kjent med de grunnleggende kommandolinjeoperatørene som brukes i dette operativsystemet. La oss ta en nærmere titt på funksjonene og bruken av finn- og grep-operatørene.

Ved hjelp av Finn og Grep-kommandoer i Linux.

FINN

Linux finne-kommandoen er et kommandolinjeverktøy for å krysse filhierarkiet. Det kan brukes til å søke etter filer og kataloger og utføre etterfølgende operasjoner med dem. Den støtter søk etter fil, mappe, navn, opprettelsesdato, endringsdato, eier og tillatelser. Ved hjelp av -exec kan andre UNIX-kommandoer utføres for funnet filer eller mapper. syntaks:

$ finn [hvor skal du starte søket] [uttrykk bestemmer hva du skal finne] [-opsjoner] [hva du skal finne]

alternativer:

  • -exec - den nødvendige filen som oppfyller de ovennevnte kriteriene og returnerer 0 som en utgangsstatus for vellykket kommandoen
  • -ok - fungerer det samme som -exek, bortsett fra at brukeren først blir bedt om det;
  • -inum N - søk med tallet "N";
  • -links N - søk med koblinger "N";
  • -navn demo - søk etter filer angitt i "demo";
  • -ny fil - søk etter filer som har blitt endret / opprettet etter "fil";
  • -perm oktal - søk om oppløsningen er oktal;
  • -print - vis banen til dokumentene som ble funnet ved hjelp av de andre kriteriene;
  • -empty - søk etter tomme dokumenter og kataloger;
  • -size + N / -N - søkeblokker "N"; "N" og "c" kan brukes til å måle størrelsen i tegn; "+ N" betyr en større størrelse av "N" blokker, og "-N" betyr en mindre størrelse av "N" blokker;
  • -brukernavn - søk etter dokumenter som tilhører brukernavnet eller identifikatoren "navn";
  • \ (expr \) - True hvis "expr" er sant; Brukes til å gruppere kriterier i forbindelse med OR eller AND.

GREP

Grep-kommandoen brukes til å søke etter filer. Funksjonen står for "global utskrift av vanlige uttrykk" og er en av de mest kraftige og ofte brukte kommandoene i Linux. Kommandoen søker etter en eller flere inngangsfiler som samsvarer med det angitte mønsteret, og skriver hver tilsvarende linje til standardutgang. Hvis ingen filer er spesifisert, kommer kommandoen fra standardinngangen, som vanligvis er resultatet av en annen kommando. I denne artikkelen vil vi vise deg hvordan du skriver inn en kommando, med praktiske eksempler og detaljerte forklaringer av de vanligste GNU grep-alternativene.

Kommandosyntax

Før vi begynner å bruke kommandoen, la oss begynne med å gjennomgå grunnleggende syntaks. Bruksuttrykkene har følgende form:

[OPTIONS] PATTERN [FIL ...]

Elementer i firkantede parenteser er valgfrie.

  • OPTIONS - null eller flere valg. Laget gir en rekke alternativer som styrer sin oppførsel.
  • PATTERN - Søk mønster.
  • FIL - null eller flere input filnavn.

Slik skriver du inn en kommando for å søke i filer

Hovedformålet med kommandoen er å søke etter tekst i filen. For eksempel, for å vise fra filen / etc / passwd som inneholder bash-linjen, kan du bruke følgende kommando:

$ grep bash / etc / passwd

Utgangen bør se slik ut:

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

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

Hvis strengen inneholder mellomrom, må du legge den inn i enkle eller doble anførselstegn:

$ "Gnome Display Manager" / etc / passwd

Inverter Match (ex)

For å vise linjer som ikke samsvarer med mønsteret, skriv inn parameteren -v (eller -invert-match). For eksempel, for å vise en fil som ikke inneholder nologin fra filen / etc / passwd, kan du skrive inn følgende kommando:

$ -v nologin / etc / passwd

utgang:

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

kolonne 124: 124 :: / var / lib / kolord: / bin / false

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

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

Slik bruker du kommandoen til å søke i utgangen

I stedet, hvis du angir inngangsfiler, kan du omdirigere utgangen av en annen kommando, og bare vise linjene som samsvarer med det angitte mønsteret. For eksempel, for å finne ut hvilke prosesser som kjører på systemet som en www-data bruker, kan du bruke følgende kommando:

$ ps -ef | www-data

utgang:

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

root 18272 17714 0 16:00 pts / 0 00:00:00 -color = auto - ekskluder-dir = .bzr -exclude-dir = CVS -exclude-dir = .git -exclude-dir = .hg -exclude-dir = .svn www-data

www-data 31147 12770 0 okt22? 00:05:51 nginx: arbeidsprosess

www-data 31148 12770 0 okt22? 00:00:00 nginx: cache manager prosess

Du kan også kombinere flere kanaler til et lag. Som du ser i utgangen ovenfor, er det også en linje som inneholder prosessen. Hvis du ikke vil at denne linjen skal vises, send utgangen til en annen forekomst, som vist nedenfor.

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

utgang:

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

root 18272 17714 0 16:00 pts / 0 00:00:00 -color = auto - ekskluder-dir = .bzr -exclude-dir = CVS -exclude-dir = .git -exclude-dir = .hg -exclude-dir = .svn www-data

www-data 31147 12770 0 okt22? 00:05:51 nginx: arbeidsprosess

www-data 31148 12770 0 okt22? 00:00:00 nginx: cache manager prosess

Rekursivt søk

For å rekursivt søke etter et mønster, skriv inn alternativet -r (eller -recursive). Dette vil tillate deg å søke gjennom alle filene i den angitte katalogen, hopper over symbolske koblinger som forekommer rekursivt. For å gå gjennom alle symbolske lenker, bruk alternativet -r (eller -rekvens-rekursivt). I det følgende eksemplet ser vi etter domain.com i alle filer i / etc-katalogen:

$ -r domain.com / etc

Kommandoen vil skrive ut de tilsvarende feltene med det fulle filsporet prefiks.

/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: server_name domain.com www.domain.com;

Hvis i stedet for -r bruker alternativet -R, følger kommandoen alle symbolske lenker:

$ -R domain.com / etc

Legg merke til det siste utdatafeltet. Dette skrives ikke ut i eksemplet ovenfor, fordi filene i Nginx-katalogen som er lokalisert, er symbolske lenker til konfigurasjonsfiler i den tilgjengelige katalogen.

utgang:

/etc/hosts:127.0.0.1 node2.domain.com

/etc/nginx/sites-available/domain.com: server_name domain.com www.domain.com;

/etc/nginx/sites-enabled/domain.com: server_name domain.com www.domain.com;

Vis bare filnavn

For å undertrykke standard utdata og bare skrive ut navnene på filer som inneholder det samsvarende mønsteret, kan du angi alternativet -l (eller -filer-med-samsvar). For eksempel, for å søke etter alle filer som slutter i .conf i den nåværende arbeidsboken, og for å skrive ut bare filnavn som inneholder domain.com-typen, skriv:

$ -L domain.com * .conf

Utgangen vil se slik ut:

tmux.conf

haproxy.conf

-L-alternativet brukes vanligvis i forbindelse med rekursiv -R-alternativet:

$ -Rl domain.com / tmp

Svært ufølsomhet

Kommandoen er som standard bokstavsfølsom, noe som betyr at store og små bokstaver behandles som forskjellige. For å ignorere saken når du søker, skriv inn alternativet -i (eller -ignore-case). Hvis du for eksempel søker etter en Zebra uten noe alternativ, vil følgende kommando ikke vise noen utgang, dvs. det er matchende.

$ Zebra / usr / del / ord

Men hvis du utfører et søk med uhell, bruk alternativet -i, det vil matche både store og små bokstaver:

$ grep -i Zebra / usr / del / ord

Indikasjonen "Zebra" vil tilsvare "Zebra", "ZEbrA" eller en annen kombinasjon av store og små bokstaver.

utgang:

sebra

sebra

sebraer

Eksakt kamp

Når du søker, vil gnu også skrive ut gnu, der større ord er satt inn, for eksempel cygnus eller magnum.

$ gnu / usr / del / ord

utgang:

cygnus

gnu

interregnum

lgnu9d

lignum

magnum

Magnuson

Sphagnum

vingemutter

For å returnere bare de uttrykkene der det angitte feltet er et helt ord (ikke vedlagt i ord), kan du bruke alternativet -w (eller -word-regexp).

VIKTIG. Tegnene i ordet inneholder alfanumeriske tegn (az, AZ og 0-9) og understreker (_). Alle andre tegn behandles som ikke-verbale tegn.

Hvis du kjører samme kommando som ovenfor, inkludert -w-alternativet, returnerer kommandoen bare de som inkluderer gnu som et eget ord.

$ grep -w gnu / usr / del / ord

Utgang: gnu

Vis tall

For å vise antall linjer som inneholder et mønster, bruk parameteren -n (eller -linjenummer). Ved å bruke dette alternativet, skrives ut til standardutgangen med prefikset for nummeret der det ble funnet. For eksempel, for å vise fra filen / etc / services som inneholder bash-prefikset med det tilsvarende nummeret, kan du bruke følgende kommando:

$ grep -n 10000 / etc / services

Utgangen nedenfor viser at kampene er på 10423 og 10424.

utgang:

10423: ndmp 10.000 / tcp

10424: ndmp 10000 / utp

telling

For å skrive ut antall matchende linjer til standardutgang, bruk parameteren -c (eller -tall). I eksemplet nedenfor teller vi antall kontoer som har shell / usr / bin / zsh.

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

Utgang: 4

Flere linjer (mønstre)

OR-operatøren kan kombinere to eller flere søkemønstre |. Som standard tolker kommandoen mønsteret som det vanlige regulære uttrykket, der meta karakterer mister sin spesielle betydning, og deres versjoner med tilbakeslag skal brukes. I eksemplet nedenfor søker vi etter alle forekomster av ordene fatale, feil og kritiske i Nginx-feilloggfilen:

$ grep 'fatale \ | feil \ | kritisk' /var/log/nginx/error.log

Hvis du bruker det utvidede regulære uttrykksalternativet -E (eller -extended-regexp), bør setningen ikke unngås, som vist nedenfor:

$ grep -E 'fatale | feil | kritisk' /var/log/nginx/error.log

Regelmessig uttrykk

GNU Grep har to sett med vanlige uttrykksfunksjoner - Basic og Extended. Som standard tolker mønsteret mønsteret som et grunnleggende regulært uttrykk, for å bytte til utvidede regulære uttrykk, må du bruke -E-alternativet. Når du bruker vanlige uttrykk i hovedmodus, er alle andre tegn, unntatt meta tegn, faktisk regelmessige uttrykk som samsvarer med hverandre. Nedenfor er en liste over de mest brukte meta tegnene:

  • Bruk ^ tegnet (karet karakteren) for å matche uttrykket i begynnelsen av en linje. I følgende eksempel vil ^ kangaroo bare matche hvis det skjer i begynnelsen: $ grep "^ kangaroo" file.txt
  • Bruk $ (dollar) symbolet for å matche uttrykket på slutten. I det følgende eksemplet vil kenguru $ bare samsvare hvis det oppstår i slutten: grep "kangaroo $" file.txt
  • Bruk symbolet. (prikk) for å matche et enkelt tegn. For eksempel, for å matche alt som begynner med kan med to tegn og ender med roo, kan du bruke følgende mønster: $ grep "kan..roo" file.txt
  • Bruk [] (parenteser) for å matche alle enkeltstående tegn i parentes. Finn for eksempel de som inneholder aksepter eller aksent, kan du bruke følgende mønster: $ grep "acce [np] t" file.txt

For å unngå den spesielle betydningen av neste tegn, bruk \ (tilbakestrek) tegnet.

Utvidede regulære uttrykk

For å tolke et mønster som et utvidet regulært uttrykk, bruk parameteren -E (eller -extended-regexp). Utvidede regulære uttrykk inkluderer alle grunnleggende meta tegn, samt flere meta tegn for å skape mer komplekse og kraftige søkemønstre. Nedenfor er noen eksempler:

  • Match og trekk ut alle e-postadresser fra denne filen: $ grep -E -o "\ b [A-Za-z0-9 ._% + -] -postbeskyttet [A-ZA-Z0-9 .-] + \. [A-Za-z] {2.6} \ b "file.txt
  • Kart og trekk ut alle gyldige IP-adresser fra denne filen: $ grep -E -o '(25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0 -9]?) (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] | [01]? [0-9] [0-9]?) 'File.txt

-Alternativet brukes til å skrive ut bare kamper.

Skriv ut før du teller

For å skrive ut et visst antall linjer før du samsvarer, bruk parameteren -B (eller -for-kontekst). For eksempel, for å vise 5 linjer av innledende kontekst før du matcher, kan du bruke følgende kommando: $ grep -A 5 root / etc / passwd

Skriv ut etter søk

For å skrive ut et bestemt antall linjer etter en kamp, ​​bruk parameteren -A (eller -kontekst). For eksempel, for å vise 5 linjer i den endelige konteksten etter matchende strenger, kan du bruke følgende kommando: $ grep -B 5 root / etc / passwd

Dette er alt nødvendig for full bruk av kommandoinformasjon. Hvis du allerede bruker Linux og kan gi noen råd til nybegynnere, kan du dele kommentarer under denne artikkelen.