Pravilna uporaba ukazov Find in Grep v Linuxu

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.