Večina začetnikov Unix-sistemov, zlasti Linuxa, ne pozna osnovnih operaterjev ukazne vrstice, ki se uporabljajo v tem OS. Oglejmo si podrobneje funkcije in uporabo operatorjev find in grep.
Uporaba ukazov Najdi in Grep v Linuxu.
FIND
Ukaz Linux find je pripomoček ukazne vrstice za prečkanje hierarhije datotek. Lahko se uporablja za iskanje datotek in imenikov ter izvajanje nadaljnjih operacij z njimi. Podpira iskanje po datoteki, mapi, imenu, datumu nastanka, datumu spremembe, lastniku in dovoljenjih. Če uporabljate -exec, lahko za najdene datoteke ali mape izvajate druge UNIX ukaze. Sintaksa:
$ find [kje se začne iskanje] [izraz določa, kaj najti] [-options] [kaj najti]
Možnosti:
- -exec - zahtevana datoteka, ki izpolnjuje zgornja merila in vrne 0 kot izhodno stanje za uspešno izvajanje ukaza;
- -ok - deluje enako kot -exec, razen da je uporabnik najprej pozvan;
- -inum N - iskanje s številko "N";
- -polja N - iskanje s povezavami "N";
- -name demo - iskanje datotek, ki so podane v »demo«;
- -newer file - poiščite datoteke, ki so bile spremenjene / ustvarjene po datoteki;
- -perm oktalno - iskanje, če je resolucija oktalna;
- -print - prikaže pot do najdenih dokumentov z uporabo drugih meril;
- -prazno - iskanje praznih dokumentov in imenikov;
- velikost + N / N - iskalni nizi "N"; "N" in "c" se lahko uporabita za merjenje velikosti v znakih; „+ N“ pomeni večjo velikost blokov „N“ in „N“ pomeni manjšo velikost blokov „N“;
- -user name - iskanje dokumentov, ki pripadajo uporabniškemu imenu ali identifikatorju "name";
- (expr) - True, če je "expr" resničen; Uporablja se za združevanje kriterijev v povezavi z OR ali AND.
Grep
Ukaz grep se uporablja za iskanje datotek. Funkcija pomeni »globalno tiskanje regularnih izrazov« in je eden najmočnejših in najpogosteje uporabljenih ukazov v Linuxu. Ukaz išče eno ali več vhodnih datotek, ki ustrezajo podanemu vzorcu, in zapiše vsako ustrezno črto v standardni izhod. Če ni določenih datotek, se ukaz bere s standardnega vhoda, ki je običajno izhod drugega ukaza. V tem članku vam bomo pokazali, kako vnesti ukaz, s praktičnimi primeri in podrobnimi razlagami najpogostejših možnosti GNU grep.
Skladnja ukaza
Preden začnemo uporabljati ukaz, začnimo s pregledom osnovne sintakse. Izrazi koristnosti imajo naslednjo obliko:
[OPCIJE] VZOREC [FILE ...]
Postavke v oglatih oklepajih niso obvezne.
- OPCIJE - nič ali več možnosti. Ekipa ponuja številne možnosti, ki nadzorujejo njeno vedenje.
- VZOREC - Vzorec iskanja.
- FILE - nič ali več imen vhodnih datotek.
Kako vnesti ukaz za iskanje datotek
Glavni namen ukaza je iskanje besedila v datoteki. Če želite na primer prikazati iz datoteke / etc / passwd, ki vsebuje vrstico bash, lahko uporabite naslednji ukaz:
$ grep bash / etc / passwd
Izhod mora izgledati takole:
root 0: 0: root: / root: / bin / bash
domain1000: 1000: domena: / home / domena: / bin / bash
Če niz vsebuje presledke, ga morate priložiti enojnim ali dvojnim narekovajem:
$ "Gnome Display Manager" / etc / passwd
Obrni ujemanje (prej)
Za prikaz vrstic, ki se ne ujemajo z vzorcem, vnesite parameter –v (ali –invert-match). Če želite na primer prikazati datoteko, ki ne vsebuje nologin iz datoteke / etc / passwd, lahko vnesete naslednji ukaz:
$ -v nologin / etc / passwd
Izhod:
root 0: 0: root: / root: / bin / bash
colord 124: 124 :: / var / lib / colord: / bin / false
git 994: 994: uporabnik git daemon: /: / usr / bin / git-shell
linuxize 1000: 1000: linuxize: / home / linuxize: / bin / bash
Kako uporabiti ukaz za iskanje v izhodu
Namesto tega, če podate vhodne datoteke, lahko preusmerite izhod drugega ukaza in nato prikažete samo vrstice, ki ustrezajo podanemu vzorcu. Če želite na primer ugotoviti, kateri procesi se izvajajo v sistemu kot uporabnik podatkov www, lahko uporabite naslednji ukaz:
$ ps -ef | www-podatki
Izhod:
www-podatki 18247 12675 4 16:00? 00:00:00 php-fpm: bazen www
koren 18272 17714 0 16:00 pts / 0 00:00:00 —barva = samodejno - izključi-dir = .bzr —izključi-dir = CVS —izključi-dir = .git —izključi-dir = .hg —izključi-dir = .svn www-podatki
www-data 31147 12770 0 okt22? 00:05:51 nginx: delovni proces
www-data 31148 12770 0 okt22? 00:00:00 proces nginx: upravljalnik predpomnilnika
V skupino lahko združite tudi več kanalov. Kot lahko vidite v zgornjem izpisu, obstaja tudi vrstica, ki vsebuje postopek. Če ne želite, da se ta vrstica prikaže, pošljite izhod v drug primerek, kot je prikazano spodaj.
$ ps -ef | www-podatki | grep -v grep
Izhod:
www-podatki 18247 12675 4 16:00? 00:00:00 php-fpm: bazen www
koren 18272 17714 0 16:00 pts / 0 00:00:00 —barva = samodejno - izključi-dir = .bzr —izključi-dir = CVS —izključi-dir = .git —izključi-dir = .hg —izključi-dir = .svn www-podatki
www-data 31147 12770 0 okt22? 00:05:51 nginx: delovni proces
www-data 31148 12770 0 okt22? 00:00:00 proces nginx: upravljalnik predpomnilnika
Rekurzivno iskanje
Za rekurzivno iskanje vzorca vnesite možnost –r (ali –recursive). To vam bo omogočilo iskanje po vseh datotekah v podanem imeniku, preskakovanje simboličnih povezav, ki se pojavljajo rekurzivno. Če želite pregledati vse simbolne povezave, uporabite možnost –r (ali –dereference-recursive). V naslednjem primeru iščemo domain.com v vseh datotekah v imeniku / etc:
$ -r domain.com / etc
Ukaz bo natisnil ustrezna polja s predpono polne poti datoteke.
/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: ime_ strežnika domain.com www.domain.com;
Če namesto –r uporabite možnost –R, bo ukaz sledil vsem simboličnim povezavam:
$ -R domain.com / etc
Obvestilo o zadnjem izhodnem polju. To ni natisnjeno v zgornjem primeru, ker so datoteke v imeniku Nginx z omogočenimi mesti simbolne povezave do konfiguracijskih datotek znotraj imenika, ki je na voljo.
Izhod:
/etc/hosts:127.0.0.1 node2.domain.com
/etc/nginx/sites-available/domain.com: ime_ strežnika domain.com www.domain.com;
/etc/nginx/sites-enabled/domain.com: ime_ strežnika domain.com www.domain.com;
Prikaži samo ime datoteke
Če želite izključiti privzete izhode in natisniti samo imena datotek, ki vsebujejo ujemajoči se vzorec, lahko vnesete možnost –l (ali —files-with-matches). Na primer, za iskanje vseh datotek, ki se končajo v .conf v trenutnem delovnem imeniku, in za tiskanje samo imen datotek, ki vsebujejo tip domene.com, vnesite:
$ -L domain.com * .conf
Izhod bo videti takole:
tmux.conf
haproxy.conf
Možnost -l se običajno uporablja v povezavi z možnostjo rekurzivnega -R:
$ -Rl domena.com / tmp
Neobčutljivost primerov
Ukaz je privzeto občutljiv na velike in male črke, kar pomeni, da se velike in male črke obravnavajo kot različne. Če želite prezreti primer pri iskanju, vnesite možnost –i (ali –ignore-case). Na primer, če iščete Zebro brez možnosti, naslednji ukaz ne bo prikazal nobenega izhoda, tj. obstaja ujemanje.
$ Zebra / usr / share / besede
Če pa opravite iskanje, ki ni občutljivo na velike črke, uporabite možnost –i, tako da se bo ujemala z velikimi in malimi črkami:
$ grep -i Zebra / usr / share / besede
Oznaka »Zebra« ustreza »Zebra«, »ZEbrA« ali kateri koli drugi kombinaciji velikih in malih črk.
Izhod:
zebra
zebre
zebre
Natančno ujemanje
Pri iskanju bo gnu natisnil tudi gnu, v katerega bodo vstavljene večje besede, kot so cygnus ali magnum.
$ gnu / usr / share / besede
Izhod:
cygnus
gnu
interregnum
lgnu9d
lignum
magnum
magnuson
sphagnum
krilo
Za vrnitev samo tistih izrazov, pri katerih je podano polje cela beseda (ki ni zaprta z besedami), lahko uporabite možnost -w (ali -word-regexp).
POMEMBNO. Znaki besede vključujejo alfanumerične znake (az, AZ in 0-9) in podčrtaje (_). Vsi drugi znaki se obravnavajo kot neverbalni znaki.Če zaženete isti ukaz, kot je opisano zgoraj, vključno z možnostjo –w, bo ukaz vrnil samo tiste, ki kot ločeno besedo vključujejo gnu.
$ grep -w gnu / usr / share / besede
Izhod: gnu
Pokaži številke
Za prikaz števila vrstic, ki vsebujejo vzorec, uporabite parameter –n (ali –line-number). Če uporabite to možnost, se natisne ujemanje s standardnim izhodom s predpono številke, v kateri je bila najdena. Če želite na primer iz datoteke / etc / services, ki vsebuje predpono bash, prikazati ustrezno številko, lahko uporabite naslednji ukaz:
$ grep -n 10000 / etc / services
Izhodni podatki kažejo, da so tekme na 10423 in 10424.
Izhod:
10423: ndmp 10, 000 / tcp
10424: ndmp 10000 / udp
Štetje
Če želite natisniti število ujemajočih se vrstic na standardni izhod, uporabite parameter -c (ali -count). V spodnjem primeru preštejemo število računov, ki imajo ukazno lupino / usr / bin / zsh.
$ grep -c '/ usr / bin / zsh' / etc / passwd
Izhod: 4
Več vrstic (vzorcev)
Operater OR lahko združi dva ali več iskalnih vzorcev |. Po privzetku ukaz interpretira vzorec kot glavni regularni izraz, v katerem meta-znaki izgubijo svoj poseben pomen in uporabijo se njihove različice s poševnico nazaj. V spodnjem primeru iščemo vse pojavitve besed fatalno, napako in kritično v datoteki dnevnika napak Nginx:
$ grep 'fatalna | napaka | kritična' /var/log/nginx/error.log
Če uporabite možnost razširjenega regularnega izraza -E (ali -extended-regexp), stavka ne sme biti ubežana, kot je prikazano spodaj:
$ grep -E 'usodna napaka | kritična' /var/log/nginx/error.log
Redni izraz
GNU Grep ima dva niza funkcij regularnih izrazov - Basic in Extended. Funkcija privzeto interpretira vzorec kot osnovni regularni izraz, da preklopite na razširjene regularne izraze, uporabite možnost –E. Pri uporabi regularnih izrazov v glavnem načinu so vsi drugi znaki, razen metaharakterov, dejansko regularni izrazi, ki ustrezajo drug drugemu. Spodaj je seznam najpogosteje uporabljenih metaharkov:
- Uporabite znak ^ (znak karta), da se ujema z izrazom na začetku vrstice. V naslednjem primeru se bo ^ kangaroo ujemal le, če se bo pojavil na samem začetku: $ grep "^ kangaroo" file.txt
- Uporabite simbol $ (dolar), ki ustreza izrazu na koncu. V naslednjem primeru se bo kengur $ samo ujemal, če bo naletel na samem koncu: grep "kangaroo $" file.txt
- Uporabite simbol. (pika), da se ujema z enim samim znakom. Če želite na primer primerjati vse, kar se začne s kanom dveh znakov in se konča z roo, lahko uporabite naslednji vzorec: $ grep "kan..roo" file.txt
- Uporabite [] (oklepaji), da se ujemajo z enim samim znakom, zaprtim v oklepajih. Na primer, poiščite tiste, ki vsebujejo potrditev ali "naglas, lahko uporabite naslednji vzorec: $ grep" acce [np] t "file.txt
Da bi se izognili posebnemu pomenu naslednjega znaka, uporabite znak \ t
Razširjeni regularni izrazi
Za interpretacijo vzorca kot razširjenega regularnega izraza uporabite parameter –E (ali –extended-regexp). Razširjeni regularni izrazi vključujejo vse osnovne meta-znake, kot tudi dodatne metaharikte za ustvarjanje bolj zapletenih in zmogljivih iskalnih vzorcev. Spodaj je nekaj primerov:
- Ujemite in izvlecite vse e-poštne naslove iz te datoteke: $ grep -E -o "[A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + [A-Za-z] {2.6} b "datoteka.txt
- Mapirajte in izvlecite vse veljavne IP naslove iz te 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
Možnost -o se uporablja za tiskanje samo zadetkov.
Natisnite pred štetjem
Če želite natisniti določeno število vrstic pred ujemanjem, uporabite parameter –B (ali - pred kontekstom). Če želite na primer pred ujemanjem prikazati 5 vrstic začetnega konteksta, lahko uporabite naslednji ukaz: $ grep -A 5 root / etc / passwd
Natisni po iskanju
Za tiskanje določenega števila vrstic po ujemanju uporabite parameter –A (ali-kontekst). Če želite na primer prikazati 5 vrstic končnega konteksta po ujemajočih se nizih, lahko uporabite naslednji ukaz: $ grep -B 5 root / etc / passwd
To je vse potrebno za popolno uporabo informacij o ukazih. Če že uporabljate Linux in lahko dajete nasvete začetnikom, delite komentarje po tem članku.