Find ja Grep käskude korrektne kasutamine Linuxis

Enamik Unixi süsteemide algajaid, eriti Linuxi, ei tunne selles operatsioonisüsteemis kasutatavaid põhilisi käsureaoperaatoreid. Vaatame lähemalt otsingu- ja grep-operaatorite funktsioone ja kasutamist.

Find ja Grep käskude kasutamine Linuxis.

LUGEGE

Linuxi leidmise käsk on käsurea utiliit failihierarhia läbimiseks. Seda saab kasutada failide ja kataloogide otsimiseks ning nendega järgnevateks toiminguteks. See toetab otsimist faili, kausta, nime, loomise kuupäeva, muutmise kuupäeva, omaniku ja õiguste alusel. -Exec abil saab leitud failide või kaustade jaoks täita teisi UNIX-i käske. Süntaksi:

$ leida [kust alustada otsingut] [väljend määrab, mida leida] [-options] [mida leida]

Valikud:

  • -exec - nõutav fail, mis vastab ülaltoodud kriteeriumidele ja tagastab edukalt käsu täitmiseks 0 väljumisolekuna;
  • -ok - töötab samamoodi nagu -exec, välja arvatud see, et kasutajalt küsitakse esmalt;
  • -inum N - otsing numbriga "N";
  • lingid N - otsing lingidega "N";
  • -nimi demo - otsida “demos” määratud faile;
  • - uus fail - otsige faile, mis on muudetud pärast "faili";
  • perm octal - otsida, kui resolutsioon on oktaal;
  • -print - näidata teiste kriteeriumide alusel leitud dokumentide tee;
  • -empty - tühjade dokumentide ja kataloogide otsimine;
  • -mõõdik + N / -N - otsingu plokid "N"; "N" ja "c" saab kasutada mõõtude mõõtmiseks sümbolites; “+ N” tähendab suuremat N-plokkide suurust ja „-N” tähistab väiksemat N-plokkide suurust;
  • -kasutaja nimi - otsida kasutajatunnusele või tunnusele "nimi" kuuluvaid dokumente;
  • (expr) - tõsi, kui "expr" on tõene; Kasutatakse kriteeriumide rühmitamiseks koos OR või AND-ga.

Grep

Grep-käsku kasutatakse failide otsimiseks. Funktsioon tähistab „regulaaravaldiste globaalset printimist” ja on üks võimsamaid ja sagedamini kasutatavaid käske Linuxis. Käsk otsib üht või mitut sisendfaili, mis vastavad määratud mustrile, ja kirjutab iga vastava rea ​​standardväljundisse. Kui ühtegi faili ei ole määratud, loeb käsk standardsisendist, mis on tavaliselt teise käsu väljund. Selles artiklis näitame teile, kuidas sisestada käsk, koos praktiliste näidete ja kõige tavalisemate GNU grep valikute üksikasjalike selgitustega.

Käskude süntaks

Enne kui alustame käsu kasutamist, alustame algse süntaksiga. Kasulike väljundite vorm on järgmine:

[OPTIONS] PATTERN [FILE ...]

Ruudu sulgudes olevad esemed on vabatahtlikud.

  • VALIKUD - null või rohkem valikuid. Meeskond pakub mitmeid võimalusi, mis kontrollivad selle käitumist.
  • PATTERN - otsingumuster.
  • FILE - null või rohkem sisendfailide nimesid.

Kuidas faile otsida käsk

Käsu peamine eesmärk on otsida teksti failist. Näiteks selleks, et kuvada failist / etc / passwd fail, mis sisaldab bash-rida, saate kasutada järgmist käsku:

$ grep bash / etc / passwd

Väljund peaks olema selline:

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

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

Kui string sisaldab tühikuid, tuleb see lisada ühe- või kahekordsetesse jutumärkidesse:

$ "Gnome Display Manager" / etc / passwd

Inverteeri vaste (ex)

Musterile mittevastavate ridade kuvamiseks sisestage parameeter –v (või –invert-match). Näiteks faili, mis ei sisalda nologiini, näitamiseks failist / etc / passwd, saate sisestada järgmise käsu:

$ -v nologin / etc / passwd

Väljund:

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

Colord 124: 124 :: / var / lib / colord: / bin / false

git 994: 994: git deemon kasutaja: /: / usr / bin / git-shell

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

Kuidas kasutada käsku väljundis otsimiseks

Selle asemel, kui määrate sisendfaile, saate teise käsu väljundi suunata ja kuvada ainult need read, mis vastavad määratud mustrile. Näiteks selleks, et teada saada, millised protsessid teie süsteemis www-andmete kasutajana töötavad, saate kasutada järgmist käsku:

$ ps -ef www-andmed

Väljund:

www-andmed 18247 12675 4 16:00? 00:00:00 php-fpm: bassein www

root 18272 17714 0 16:00 pts / 0 00:00:00 —värv = automaatne välistamine-dir = .bzr —exclude-dir = CVS —välja-dir = .git —seisalda-dir = .hg —välja-dir = .svn www-andmed

www-andmed 31147 12770 0 Oct22? 00:05:51 nginx: töötaja protsess

www-andmed 31148 12770 0 Oct22? 00:00:00 nginx: vahemälu haldaja protsess

Samuti saate meeskonda ühendada mitu kanalit. Nagu näete ülaltoodud väljundis, on olemas ka protsess, mis sisaldab protsessi. Kui te seda rida ei soovi, saatke väljund teisele instantsile, nagu allpool näidatud.

$ ps -ef www-andmed grep -v grep

Väljund:

www-andmed 18247 12675 4 16:00? 00:00:00 php-fpm: bassein www

root 18272 17714 0 16:00 pts / 0 00:00:00 —värv = automaatne välistamine-dir = .bzr —exclude-dir = CVS —välja-dir = .git —seisalda-dir = .hg —välja-dir = .svn www-andmed

www-andmed 31147 12770 0 Oct22? 00:05:51 nginx: töötaja protsess

www-andmed 31148 12770 0 Oct22? 00:00:00 nginx: vahemälu haldaja protsess

Rekursiivne otsing

Musteri rekursiivseks otsimiseks sisestage –r (või –rekursiv) valik. See võimaldab teil otsida kõiki määratud kataloogi faile, jättes kõrvale rekursiivselt esinevad sümboolsed lingid. Kõigi sümboolsete linkide läbimiseks kasutage –r (või –dereference-rekursiivset) valikut. Järgmises näites otsime domeeni.com kõiki / etc kataloogi failides:

$ -r domain.com / etc

Käsk prindib vastavad väljad täieliku faili tee prefiksiga.

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

Kui kasutate –R-režiimi asemel -R, järgib käsk kõiki sümboolseid linke:

$ -R domain.com / etc

Pange tähele viimase väljundvälja. Ülaltoodud näites seda ei ole trükitud, sest saidid võimaldava kataloogi Nginx failid on sümboolsed lingid konfiguratsioonifailidele, mis asuvad saitide olemasolevas kataloogis.

Väljund:

/etc/hosts:127.0.0.1 node2.domain.com

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

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

Kuva ainult faili nimi

Vaikimisi väljundi kustutamiseks ja ainult sobitatud mustrit sisaldavate failide nimede printimiseks saate sisestada –l (või -failid-vasted) valikuga. Näiteks selleks, et otsida kõiki faile, mis lõpevad praeguses töö kataloogis .conf, ja printida ainult domeeninimede, mis sisaldavad domeeni.com tüüpi, tüüp:

$ –L domain.com * .conf

Väljund näeb välja selline:

tmux.conf

haproxy.conf

-L-võimalust kasutatakse tavaliselt koos rekursiivse -R-valikuga:

$ -Rl domain.com / tmp

Kohtuasja tundlikkus

Vaikimisi on käsk tõstutundlik, mis tähendab, et suur- ja väiketähti loetakse erinevaks. Juhu ignoreerimiseks otsingu korral sisestage valik „-i (või –ignore-case”). Näiteks, kui otsite Zebra ilma suvalise suvandita, ei kuvata järgmist käsku, st. seal on sobitamine.

$ Zebra / usr / share / sõnad

Aga kui teete juhtumipõhist otsingut, kasutage –i võimalust, see sobib nii suur- kui ka väiketähtedega:

$ grep -i Zebra / usr / share / words

Tähis “Zebra” vastab “Zebra”, “ZEbrA” või mõnele muule suur- ja väiketähtede kombinatsioonile.

Väljund:

sebra

seepra

seebras

Täpne vaste

Otsides prindib gnu ka gnu, kus sisestatakse suuremad sõnad, näiteks cygnus või magnum.

$ gnu / usr / share / words

Väljund:

cygnus

gnu

interregnum

lgnu9d

lignum

magnum

magnuson

sphagnum

wingnut

Ainult nende väljenduste tagastamiseks, kus määratud väli on terve sõna (ei ole lisatud sõnadele), saate kasutada valikut –w (või —märge-regexp).

TÄHTIS. Sõna tähemärgid sisaldavad tähtnumbrilisi tähemärke (az, AZ ja 0-9) ja allajoonit (_). Kõiki teisi märke käsitletakse mitteverbaalsetena.

Kui käivitate sama käsu nagu eespool, sealhulgas –w valikuga, siis käsk tagastab ainult need, mis sisaldavad eraldi sõna gnu.

$ grep -w gnu / usr / share / words

Väljund: gnu

Näita numbreid

Musterit sisaldavate ridade arvu näitamiseks kasutage parameetrit –n (või –line-number). Selle suvandi kasutamine prindib vasted standardväljundile selle numbri eesliitega, milles see leiti. Näiteks selleks, et kuvada / etc / services-failist, mis sisaldab bash-eesliidet vastava numbriga, saate kasutada järgmist käsku:

$ grep -n 10000 / etc / services

Alltoodud väljund näitab, et vasted on 10423 ja 10424.

Väljund:

10423: ndmp 10 000 / tcp

10424: ndmp 10000 / udp

Loendamine

Sobivate joonte arvu printimiseks standardväljundisse kasutage parameetrit –c (või –count). Allpool toodud näites loendame kontode arvu, millel on shell / usr / bin / zsh.

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

Väljund: 4

Mitmed read (mustrid)

OR-operaator saab kombineerida kahte või enamat otsingumustrit. Vaikimisi tõlgendab käsk mustrit kui peamist regulaaravaldist, kus metakõned kaotavad oma erilise tähenduse ja nende versioone tuleb kasutada tagasilükkajoonega. Allpool toodud näites otsime Nginxi vea logifailis kõiki surmaga lõppevaid, vigaseid ja kriitilisi sõnu;

$ grep 'surmav viga | kriitiline' /var/log/nginx/error.log

Kui kasutate laiendatud regulaaravaldise valikut –E (või —extended-regexp), ei tohiks avaldus jääda, nagu allpool näidatud:

$ grep -E 'surmav viga | kriitiline' /var/log/nginx/error.log

Regulaarne väljendus

GNU Grepil on kaks regulaaravaldamisfunktsiooni komplekti - Basic ja Extended. Vaikimisi tõlgendab funktsioon mustrit kui tavalist regulaaravaldist, et lülituda laiendatud regulaaravaldistele, peate kasutama -E valikut. Kui kasutate põhirežiimis regulaaravaldisi, on kõik teised tähemärgid, välja arvatud metakõned, tegelikult üksteisele vastavad regulaaravaldised. Allpool on loetelu kõige sagedamini kasutatavatest tähemärkidest:

  • Kasutage riba alguses oleva väljendiga sobitamiseks märki ^ (sümbol). Järgmises näites sobib ^ kangaroo ainult siis, kui see toimub alguses: $ grep "^ kangaroo" file.txt
  • Kasutage $ (dollari) sümbolit, et viia lõpuni väljend. Järgmises näites sobib kangaroo $ ainult siis, kui see tekib kõige lõpus: grep "kangaroo $" file.txt
  • Kasutage sümbolit. (punkt), et sobitada ükski märk. Näiteks selleks, et sobitada kõike, mis algab kahest tähemärgiga kan ja lõpeb roo, saate kasutada järgmist mustrit: $ grep "kan..roo" file.txt
  • Kasutage [] (sulgudes), et sobitada ükskõik milline sulgudes olev üksik tähemärk. Näiteks leidke need, mis sisaldavad aktsent või aktsenti, saate kasutada järgmist mustrit: $ grep "acce [np] t" file.txt

Järgmise tähemärgi erilise tähenduse vältimiseks kasutage tähemärki.

Laiendatud regulaaravaldised

Et tõlgendada mustrit laiendatud regulaaravaldisena, kasutage parameetrit –E (või –extended-regexp). Laiendatud regulaaravaldised sisaldavad kõiki põhilisi metakirjeid, aga ka täiendavaid metakirju keerukamate ja võimsamate otsingumustrite loomiseks. Allpool on mõned näited:

  • Sobita ja eemalda kõik selle faili e-posti aadressid: $ grep -E -o "b [A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + [A-Za-z] {2.6} b "file.txt
  • Kaardistage ja eemaldage kõik kehtivad IP-aadressid sellest failist: $ 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] 9] | [01]? [0-9] [0-9]?) 'File.txt

-O valikut kasutatakse ainult vastete printimiseks.

Prindi enne lugemist

Teatud arvu ridade printimiseks enne sobitamist kasutage parameetrit –B (või —before-context). Näiteks, kui soovite enne sobitamist kuvada 5 algse konteksti rida, saate kasutada järgmist käsku: $ grep -A 5 root / etc / passwd

Prindi pärast otsingut

Konkreetse arvu ridade printimiseks pärast mängu kasutage parameetrit –A (või –a-after-context). Näiteks selleks, et kuvada viie rea lõppkontekst pärast sobivat stringi, saate kasutada järgmist käsku: $ grep -B 5 root / etc / passwd

See on kõik vajalik käsuteabe täielikuks kasutamiseks. Kui kasutate juba Linuxi ja saate algajatele nõu anda, jagage selle artikli alusel kommentaare.