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.