De fleste nybegyndere af Unix-systemer, især Linux, er ikke bekendt med de grundlæggende kommandolinjeoperatører, der anvendes i dette operativsystem. Lad os se nærmere på funktionerne og brugen af find og grep operatørerne.
Brug Find og Grep kommandoer i Linux.
FIND
Linux find-kommandoen er et kommandolinjeværktøj til at krydse filhierarkiet. Det kan bruges til at søge efter filer og mapper og udføre efterfølgende operationer med dem. Den understøtter søgning efter fil, mappe, navn, oprettelsesdato, ændringsdato, ejer og tilladelser. Brug af -exec, andre UNIX-kommandoer kan udføres for fundne filer eller mapper. syntaks:
$ find [hvor skal man starte søgningen] [udtryk bestemmer hvad man skal finde] [-optioner] [hvad man finder]
muligheder:
- -exec - den nødvendige fil, der opfylder ovenstående kriterier og returnerer 0 som en exit tilstand til succesfuld kommandoen udførelse;
- -ok - fungerer det samme som -exec, bortset fra at brugeren først bliver bedt om det;
- -inum N - søg med nummeret "N";
- -links N - søgning med links "N";
- -name demo - søg efter filer angivet i "demo";
- -ny fil - søg efter filer, der er blevet ændret / oprettet efter "fil";
- -perm oktal - søg om opløsningen er oktal;
- -print - vis stien til de dokumenter, der blev fundet ved hjælp af de øvrige kriterier
- -empty - Søg efter tomme dokumenter og mapper;
- -size + N / -N - søge blokke "N"; "N" og "c" kan bruges til at måle størrelsen i tegn; "+ N" betyder en større størrelse af "N" -blokke, og "-N" betyder en mindre størrelse af "N" -blokke;
- -bruger navn - søg efter dokumenter tilhørende brugernavnet eller identifikatoren "navn";
- \ (expr \) - True hvis "expr" er sandt; Bruges til at gruppere kriterier i forbindelse med OR eller AND.
GREP
Grep-kommandoen bruges til at søge filer. Funktionen står for "global udskrivning af regulære udtryk" og er en af de mest kraftfulde og hyppigt anvendte kommandoer i Linux. Kommandoen søger efter en eller flere inputfiler, der matcher det angivne mønster, og skriver hver tilsvarende linje til standard output. Hvis der ikke er angivet nogen filer, læser kommandoen fra standardindgangen, som normalt er output fra en anden kommando. I denne artikel vil vi vise dig, hvordan du indtaster en kommando med praktiske eksempler og detaljerede forklaringer på de mest almindelige GNU grep-muligheder.
Kommandosyntax
Før vi begynder at bruge kommandoen, lad os begynde med at gennemgå den grundlæggende syntaks. Nyttelsesudtrykene har følgende form:
[OPTIONS] PATTERN [FILE ...]
Varer i firkantede parenteser er valgfrie.
- OPTIONS - nul eller flere valgmuligheder. Holdet giver en række muligheder, der styrer sin adfærd.
- PATTERN - Søg mønster.
- FIL - nul eller flere input filnavne.
Sådan indtastes en kommando for at søge filer
Hovedformålet med kommandoen er at søge efter tekst i filen. For eksempel at vise fra filen / etc / passwd, der indeholder bash-linjen, kan du bruge følgende kommando:
$ grep bash / etc / passwd
Udgangen skal se sådan ud:
root 0: 0: root: / root: / bin / bash
domain1000: 1000: domain: / home / domain: / bin / bash
Hvis strengen indeholder mellemrum, skal du vedlægge den i enkelt eller dobbelt citater:
$ "Gnome Display Manager" / etc / passwd
Inverter Match (ex)
For at få vist linjer, der ikke passer til mønsteret, skal du indtaste parameteren -v (eller -invert-match). For eksempel at vise en fil, der ikke indeholder nologin fra filen / etc / passwd, kan du indtaste følgende kommando:
$ -v nologin / etc / passwd
Output:
root 0: 0: root: / root: / bin / bash
kolonne 124: 124 :: / var / lib / kolord: / bin / false
git 994: 994: git daemon bruger: /: / usr / bin / git-shell
linuxize 1000: 1000: linuxize: / home / linuxize: / bin / bash
Sådan bruger du kommandoen til at søge i output
I stedet kan du omdirigere output fra en anden kommando, hvis du angiver inputfiler, og kun viser de linjer, der matcher det angivne mønster. For at finde ud af, hvilke processer der kører på dit system som en www-data-bruger, kan du bruge følgende kommando:
$ ps -ef | www-data
Output:
www-data 18247 12675 4 16:00? 00:00:00 php-fpm: pool www
root 18272 17714 0 16:00 pt / 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: arbejdsproces
www-data 31148 12770 0 okt22? 00:00:00 nginx: cache manager proces
Du kan også kombinere flere kanaler til et hold. Som du kan se i udgangen ovenfor, er der også en linje, der indeholder processen. Hvis du ikke vil have denne linje vist, skal du sende output til en anden instans, som vist nedenfor.
$ ps -ef | www-data | grep -v grep
Output:
www-data 18247 12675 4 16:00? 00:00:00 php-fpm: pool www
root 18272 17714 0 16:00 pt / 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: arbejdsproces
www-data 31148 12770 0 okt22? 00:00:00 nginx: cache manager proces
Rekursiv søgning
For at rekursivt søge efter et mønster skal du indtaste -r (eller -recursive) indstillingen. Dette giver dig mulighed for at søge gennem alle filerne i den angivne mappe og hoppe over symboliske links, der forekommer rekursivt. For at gå igennem alle symbolske links, brug alternativet -r (eller -reference-rekursiv). I det følgende eksempel søger vi efter domain.com i alle filer inde i mappen / etc:
$ -r domain.com / etc
Kommandoen udskriver de tilsvarende felter med det fulde filsti-præfiks.
/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 bruger alternativet -R, følger kommandoen alle symbolske links:
$ -R domain.com / etc
Bemærk det sidste uddatafelt. Dette udskrives ikke i eksemplet ovenfor, fordi filerne i Nginx-mappen, der er lokaliseret, er symbolske links til konfigurationsfiler inde i den tilgængelige mappe.
Output:
/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 kun filnavn
For at undertrykke standard output og kun udskrive navne på filer, der indeholder det matchede mønster, kan du indtaste -l (eller -files-med-kampe) indstillingen. Hvis du for eksempel søger efter alle filer, der slutter i .conf i den aktuelle arbejdsmappe og kun udskriver filnavne, der indeholder domain.com-typen, skal du skrive:
$ -L domain.com * .conf
Udgangen vil se sådan ud:
tmux.conf
haproxy.conf
Alternativet -l bruges normalt i forbindelse med rekursiv -R-indstillingen:
$ -Rl domain.com / tmp
Case ufølsomhed
Kommandoen er som standard hovedtekstfølsom, hvilket betyder at store og små bogstaver behandles som forskellige. For at ignorere tilfælde, når du søger, skal du indtaste -i (eller -ignore-case) -alternativet. Hvis du for eksempel søger efter en Zebra uden nogen valg, vil den følgende kommando ikke vise nogen output, dvs. der er matchende.
$ Zebra / usr / del / ord
Men hvis du udfører en case-insensitive søgning, skal du bruge -i-indstillingen, den passer til både store og små bogstaver:
$ grep -i Zebra / usr / del / ord
Indikationen "Zebra" svarer til "Zebra", "ZEbrA" eller en anden kombination af store og små bogstaver.
Output:
zebra
zebra
zebraer
Præcis kamp
Ved søgning vil gnu også udskrive gnu, hvori større ord indsættes, såsom cygnus eller magnum.
$ gnu / usr / share / words
Output:
cygnus
gnu
interregnum
lgnu9d
lignum
magnum
Magnuson
sphagnum
wingnut
For kun at returnere de udtryk, hvor det angivne felt er et helt ord (ikke vedlagt i ord), kan du bruge -w-indstillingen (eller -word-regexp).
VIGTIGT. Ordets tegn indeholder alfanumeriske tegn (az, AZ og 0-9) og understregninger (_). Alle andre tegn behandles som ikke-verbale tegn.Hvis du kører samme kommando som ovenfor, herunder -w-indstillingen, returnerer kommandoen kun de, der indeholder gnu som et særskilt ord.
$ grep -w gnu / usr / del / ord
Output: gnu
Vis numre
For at vise antallet af linjer, der indeholder et mønster, skal du bruge parameteren -n (eller -linjenummer). Ved hjælp af denne indstilling udskrives matchninger til standardudgangen med præfikset for det nummer, hvori det blev fundet. For eksempel at vise fra filen / etc / services, der indeholder bash-prefixet med det tilsvarende nummer, kan du bruge følgende kommando:
$ grep -n 10000 / etc / services
Udgangen nedenfor viser, at kampene er på 10423 og 10424.
Output:
10423: ndmp 10.000 / tcp
10424: ndmp 10000 / udp
tælle
For at udskrive antallet af matchende linjer til standard output, brug parameteren -c (eller -count). I eksemplet nedenfor tæller vi antallet af konti, der har shell / usr / bin / zsh.
$ grep -c '/ usr / bin / zsh' / etc / passwd
Udgang: 4
Flere linjer (mønstre)
OR-operatøren kan kombinere to eller flere søgemønstre |. Som standard fortolker kommandoen mønsteret som det primære regulære udtryk, hvor metat karakterer mister deres særlige betydning, og deres versioner med tilbageslag skal bruges. I eksemplet nedenfor søger vi efter alle forekomster af ordene fatale, fejl og kritiske i Nginx-fejllogfilen:
$ grep 'fatalt \ | fejl \ | kritisk' /var/log/nginx/error.log
Hvis du bruger den udvidede regulære ekspressionsindstilling -E (eller -extended-regexp), skal opgørelsen ikke undslippes, som vist nedenfor:
$ grep -E 'fatale | error | critical' /var/log/nginx/error.log
Regelmæssigt udtryk
GNU Grep har to sæt regulære ekspressionsfunktioner - Basic og Extended. Som standard tolker funktionen mønsteret som et grundlæggende regulært udtryk, for at skifte til udvidede regulære udtryk, skal du bruge -E-indstillingen. Når du bruger regulære udtryk i hovedtilstanden, er alle andre tegn, undtagen metategn, faktisk regelmæssige udtryk, som svarer til hinanden. Nedenfor er en liste over de mest anvendte meta tegn:
- Brug ^ karakteren (karet karakteren) til at matche udtrykket i begyndelsen af en linje. I det følgende eksempel vil ^ kangaroo kun matche, hvis det sker i begyndelsen: $ grep "^ kangaroo" file.txt
- Brug $ (dollar) symbolet til at matche udtrykket i slutningen. I det følgende eksempel vil kangaroo $ kun matche, hvis det findes i slutningen: grep "kangaroo $" file.txt
- Brug symbolet. (punkt) for at matche ethvert enkelt tegn. For eksempel at matche alt, der begynder med kan med to tegn og ender med roo, kan du bruge følgende mønster: $ grep "kan..roo" file.txt
- Brug [] (parenteser) til at matche et enkelt tegn vedlagt i parenteser. Find f.eks. Dem, der indeholder accept eller "accent, du kan bruge følgende mønster: $ grep" acce [np] t "file.txt
For at undgå den særlige betydning af det næste tegn, brug \ (backslash) karakteren.
Udvidede regulære udtryk
For at fortolke et mønster som et udvidet regulært udtryk skal du bruge parameteren -E (eller -extended-regexp). Udvidede regulære udtryk omfatter alle grundlæggende metakarakterer samt yderligere metategn for at skabe mere komplekse og kraftfulde søgemønstre. Nedenfor er nogle eksempler:
- Match og udtrække alle e-mailadresser fra denne fil: $ grep -E -o "\ b [A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + \. [A-Za-z] {2.6} \ b "file.txt
- Kort og hent alle gyldige IP-adresser fra denne fil: $ 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]?). (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]?) 'File.txt
Den -o indstilling bruges til at udskrive kun kampe.
Udskriv før tællingen
Hvis du vil udskrive et bestemt antal linjer, før du matcher, skal du bruge parameteren -B (eller -for-kontekst). For eksempel at vise 5 linjer af indledende kontekst før matchning, kan du bruge følgende kommando: $ grep -A 5 root / etc / passwd
Udskriv efter søgning
Hvis du vil udskrive et bestemt antal linjer efter en kamp, skal du bruge parameteren -A (eller -kontekst). For eksempel at vise 5 linjer i den endelige kontekst efter matchende strenge, kan du bruge følgende kommando: $ grep -B 5 root / etc / passwd
Dette er alt nødvendigt for fuld brug af kommandoer information. Hvis du allerede bruger Linux og kan give noget råd til begyndere, kan du dele kommentarer under denne artikel.