Etsi- ja Grep-komentojen oikea käyttö Linuxissa

Useimmat Unix-järjestelmien aloittelevat käyttäjät, erityisesti Linux, eivät tunne tässä käyttöjärjestelmässä käytettyjä komentorivin perusoperaattoreita. Tarkastellaan lähemmin haku- ja grep-operaattoreiden toimintoja ja käyttöä.

Etsi- ja Grep-komentoja Linuxissa.

ETSI

Linux-hakukomento on komentorivin apuohjelma hierarkian siirtämiseksi. Sitä voidaan käyttää tiedostojen ja hakemistojen etsimiseen ja myöhempien toimintojen suorittamiseen niiden kanssa. Se tukee tiedostojen, kansion, nimen, luontipäivän, päivämäärän, omistajan ja käyttöoikeuksien hakua. -Exec-toiminnolla voidaan suorittaa muita UNIX-komentoja löydetyille tiedostoille tai kansioille. syntaksi:

$ löytää [mistä haku aloitetaan] [lauseke määrittää, mitä löytää] [-optiot] [mitä löytää]

vaihtoehdoista:

  • -exec - vaadittu tiedosto, joka täyttää edellä mainitut kriteerit, ja palauttaa 0: n poistumistilaksi onnistuneelle komennon suorittamiselle;
  • -ok - toimii samalla tavalla kuin -exec, paitsi että käyttäjältä kysytään ensin;
  • -inum N - haku numerolla "N";
  • -linkit N - haku linkeillä "N";
  • -nimi-demo - etsi ”demossa” määritettyjä tiedostoja;
  • - uudempi tiedosto - etsi tiedostoja, jotka on muokattu / luotu tiedoston jälkeen;
  • -perm octal - haku, jos resoluutio on oktaali;
  • -printti - näytä löydettyjen asiakirjojen polku muiden kriteerien avulla;
  • -empty - etsi tyhjiä asiakirjoja ja hakemistoja;
  • -size + N / -N - hakulohkot "N"; "N" ja "c" voidaan käyttää mittaamaan merkkejä; ”+ N” tarkoittaa N-lohkojen suurempaa kokoa, ja ”-N” tarkoittaa pienempää N-lohkojen kokoa;
  • -käyttäjän nimi - etsi käyttäjätunnukseen tai tunnukseen "nimi" kuuluvia asiakirjoja;
  • (expr) - Totta, jos "expr" on totta; Käytetään ryhmittelemään kriteerit yhdessä OR: n tai AND: n kanssa.

GREP

Grep-komentoa käytetään etsimään tiedostoja. Toiminto edustaa "säännöllisten lausekkeiden globaalia tulostamista" ja on yksi tehokkaimmista ja usein käytetyistä komentoista Linuxissa. Komento etsii yhden tai useamman syötetyn tiedoston, joka vastaa määritettyä kuviota, ja kirjoittaa jokaisen vastaavan rivin vakiolähtöön. Jos tiedostoja ei ole määritetty, komento lukee standarditulosta, joka on yleensä toisen komennon lähtö. Tässä artikkelissa näytämme, miten komento syötetään, käytännön esimerkkejä ja yksityiskohtaisia ​​selityksiä yleisimmistä GNU grep -vaihtoehdoista.

Komentosyntaksi

Ennen kuin aloitamme komennon käytön, aloitetaan tarkastelemalla perus syntaksia. Apuohjelman ilmaisuilla on seuraava muoto:

[OPTIONS] PATTERN [FILE ...]

Suluissa olevat kohteet ovat valinnaisia.

  • VAIHTOEHDOT - nolla tai enemmän valintoja. Tiimi tarjoaa useita vaihtoehtoja, jotka ohjaavat sen käyttäytymistä.
  • PATTERN - Hakumalli.
  • TIEDOSTO - nolla tai useampi syötetiedoston nimi.

Miten komento syötetään tiedostojen etsimiseen

Komennon päätarkoitus on etsiä tiedostoa tiedostosta. Jos haluat esimerkiksi näyttää / etc / passwd-tiedostosta, joka sisältää bash-rivin, voit käyttää seuraavaa komentoa:

$ grep bash / etc / passwd

Tuloksen pitäisi näyttää tältä:

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

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

Jos merkkijono sisältää välilyöntejä, sinun on liitettävä se yhden tai kahden lainausmerkin avulla:

$ "Gnome Display Manager" / etc / passwd

Vaihda ottelu (ex)

Jos haluat näyttää rivejä, jotka eivät vastaa kuviota, syötä –v (tai –invert-match) -parametri. Jos haluat esimerkiksi näyttää tiedoston, joka ei sisällä nologiinia / etc / passwd-tiedostosta, voit syöttää seuraavan komennon:

$ -v nologin / etc / passwd

lähtö:

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

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

git 994: 994: git-daemon-käyttäjä: /: / usr / bin / git-shell

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

Miten komentoa käytetään etsimään lähdettä

Sen sijaan, jos määrität tulotiedostoja, voit ohjata toisen komennon lähdön ja näyttää vain rivit, jotka vastaavat määritettyä kuviota. Jos haluat esimerkiksi selvittää, mitkä prosessit ovat käynnissä järjestelmässäsi www-datan käyttäjänä, voit käyttää seuraavaa komentoa:

$ ps -ef | www-data

lähtö:

www-tiedot 18247 12675 4 16:00? 00:00:00 php-fpm: allas www

juuret 18272 17714 0 16:00 pts / 0 00:00:00 —väri = automaattinen - sulje pois-dir = .bzr —exclude-dir = CVS — sulje-dir = .git —exclude-dir = .hg —exclude-dir = .svn www-tiedot

www-tiedot 31147 12770 0 Oct22? 00:05:51 nginx: työntekijäprosessi

www-tiedot 31148 12770 0 Oct22? 00:00:00 nginx: välimuistin hallinta

Voit myös yhdistää useita kanavia ryhmään. Kuten edellä olevasta lähdöstä näkyy, myös prosessi sisältää rivin. Jos et halua tämän rivin näyttämistä, lähetä tulostus toiseen esimerkkiin, kuten alla on esitetty.

$ ps -ef | www-tiedot | grep -v grep

lähtö:

www-tiedot 18247 12675 4 16:00? 00:00:00 php-fpm: allas www

juuret 18272 17714 0 16:00 pts / 0 00:00:00 —väri = automaattinen - sulje pois-dir = .bzr —exclude-dir = CVS — sulje-dir = .git —exclude-dir = .hg —exclude-dir = .svn www-tiedot

www-tiedot 31147 12770 0 Oct22? 00:05:51 nginx: työntekijäprosessi

www-tiedot 31148 12770 0 Oct22? 00:00:00 nginx: välimuistin hallinta

Rekursiivinen haku

Jos haluat hakea kuviota uudelleen, kirjoita –r (tai –recursive) -vaihtoehto. Tämän avulla voit etsiä kaikki määritetyn hakemiston tiedostot, ohittaen symbolisia linkkejä, jotka esiintyvät rekursiivisesti. Jos haluat käydä läpi kaikki symboliset linkit, käytä –r (tai –dereference-rekursiivista) vaihtoehtoa. Seuraavassa esimerkissä etsimme domain.com-sivustoa kaikissa / etc-hakemiston sisällä olevissa tiedostoissa:

$ -r domain.com / etc

Komento tulostaa vastaavat kentät koko tiedoston polun etuliitteellä.

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

Jos käytät –R-vaihtoehtoa, komento seuraa kaikkia symbolisia linkkejä:

$ -R domain.com / etc

Huomaa viimeinen tulostuskenttä. Tätä ei tulosteta yllä olevassa esimerkissä, koska sivustojen käytössä olevan Nginx-hakemiston tiedostot ovat symbolisia linkkejä kokoonpanotiedostoihin, jotka ovat käytettävissä olevien hakemistojen sisällä.

lähtö:

/etc/hosts:127.0.0.1 node2.domain.com

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

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

Näytä vain tiedostonimi

Voit poistaa oletuslähteen ja tulostaa vain vastaavat tiedostot sisältävien tiedostojen nimet ja syöttää –l (tai —files-with-sob) -vaihtoehdon. Jos haluat esimerkiksi etsiä kaikkia tiedostoja, jotka päättyvät .conf-tiedostoon nykyisessä työhakemistossa, ja tulostaa vain domain.com-tyyppiä sisältäviä tiedostoja, kirjoita:

$ –L verkkotunnus.com * .conf

Tulos näyttää tältä:

tmux.conf

haproxy.conf

-L-vaihtoehtoa käytetään yleensä yhdessä rekursiivisen -R-vaihtoehdon kanssa:

$ -Rl domain.com / tmp

Tapausherkkyys

Oletuksena komento on tapauskohtainen, mikä tarkoittaa, että isoja ja pieniä kirjaimia käsitellään erilaisina. Jos haluat jättää huomiotta haun, kirjoita –i (tai –ignore-case) -vaihtoehto. Jos esimerkiksi etsit Zebraa ilman mitään vaihtoehtoa, seuraava komento ei näytä mitään lähtöä, ts. on yhteensopivia.

$ Zebra / usr / share / words

Mutta jos teet epäasianmukaisen haun, käytä -i-vaihtoehtoa, se vastaa sekä isoja että pieniä kirjaimia:

$ grep -i Zebra / usr / share / words

Merkintä "Zebra" vastaa "Zebra", "ZEbrA" tai muuta isojen ja pienten kirjainten yhdistelmää.

lähtö:

seepra

seepra

seeproja

Tarkka ottelu

Kun etsit, gnu tulostaa myös gnun, johon lisätään suurempia sanoja, kuten cygnus tai magnum.

$ gnu / usr / share / words

lähtö:

Cygnus

gnu

väliaika

lgnu9d

LIGNUM

magnum

Magnuson

Sphagnum

siipimutteri

Voit palauttaa vain ne lausekkeet, joissa määritetty kenttä on koko sana (ei sisällä sanoja), voit käyttää -w-vaihtoehtoa (tai —merkki-regexp).

TÄRKEÄÄ. Sanan merkit sisältävät aakkosnumeeriset merkit (az, AZ ja 0-9) ja alaviivat (_). Kaikkia muita merkkejä pidetään sanattomina.

Jos suoritat saman käskyn kuin yllä, mukaan lukien –w-vaihtoehto, komento palauttaa vain ne, jotka sisältävät gnun erillisenä sanana.

$ grep -w gnu / usr / share / words

Tuotos: gnu

Näytä numerot

Jos haluat näyttää kuvion sisältävien rivien lukumäärän, käytä -n (tai –line-number) -parametria. Tämän vaihtoehdon käyttäminen tulostaa vastaukset standardilähtöön sen numeron etuliitteellä, johon se löytyi. Jos haluat esimerkiksi näyttää / etc / services-tiedostosta, joka sisältää bash-etuliitteen vastaavan numeron, voit käyttää seuraavaa komentoa:

$ grep -n 10000 / etc / services

Alla oleva tulos osoittaa, että ottelut ovat 10423 ja 10424.

lähtö:

10423: ndmp 10 000 / tcp

10424: ndmp 10000 / udp

laskenta

Jos haluat tulostaa vastaavien viivojen määrän standardilähtöön, käytä parametria –c (tai –count). Alla olevassa esimerkissä lasketaan niiden tilien lukumäärä, joilla on kuori / usr / bin / zsh.

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

Tuotos: 4

Useita rivejä (kuvioita)

OR-operaattori voi yhdistää kaksi tai useampia hakumalleja. Oletusarvoisesti komento tulkitsee mallin tärkeimmäksi säännölliseksi lausekkeeksi, jossa metakirjoittajat menettävät merkityksensä, ja niiden versioita, joissa on käänteinen viiva, tulisi käyttää. Seuraavassa esimerkissä etsimme kaikki sanat fatal, error ja kriittiset Nginx-virhelokitiedostossa:

$ grep 'fatal | error \ _' kriittinen '/var/log/nginx/error.log

Jos käytät laajennettua säännöllistä lauseketta -E (tai —extended-regexp), lausuntoa ei pitäisi välttää, kuten alla on esitetty:

$ grep -E 'kohtalokas | virhe | kriittinen' /var/log/nginx/error.log

Säännöllinen ilmaisu

GNU Grepillä on kaksi säännöllistä lausekkeen toimintoa - Basic ja Extended. Oletusarvoisesti funktio tulkitsee mallin perusasetukseksi, siirtyä laajennettuun säännölliseen lausekkeeseen, sinun on käytettävä –E-vaihtoehtoa. Kun käytät säännöllisiä lausekkeita päätilassa, kaikki muut merkit, paitsi metahahmot, ovat itse asiassa säännöllisiä lausekkeita, jotka vastaavat toisiaan. Alla on luettelo yleisimmin käytetyistä metakoodeista:

  • Käytä ^ -merkkiä (caret-merkkiä) vastaamaan rivin alussa olevaa lauseketta. Seuraavassa esimerkissä ^ kangaroo vastaa vain, jos se tapahtuu alussa: $ grep "^ kangaroo" file.txt
  • Käytä $ (dollari) -symbolia vastaamaan lauseketta lopussa. Seuraavassa esimerkissä kangaroo $ vastaa vain, jos se esiintyy aivan lopussa: grep "kangaroo $" file.txt
  • Käytä symbolia. (piste) sopii yhteen yksittäiseen merkkiin. Jos haluat esimerkiksi vastata kaikkea, joka alkaa kahdella merkillä varustetulla kanilla ja päättyy rooon, voit käyttää seuraavaa kuviota: $ grep "kan..roo" file.txt
  • Käytä [] (suluissa) yhtään yksittäistä merkkiä, joka on suluissa. Etsi esimerkiksi ne, jotka sisältävät hyväksynnän tai "aksentti", voit käyttää seuraavaa mallia: $ grep "acce [np] t" file.txt

Jos haluat välttää seuraavan merkin erityislauseen, käytä \ t

Laajennettu säännöllinen lauseke

Jos haluat tulkita kuviota laajennetuksi säännölliseksi lausekkeeksi, käytä -E (tai –extended-regexp) -parametria. Laajennetut säännölliset lausekkeet sisältävät kaikki perusmerkki- merkit sekä lisämateriaalimerkit monimutkaisempien ja tehokkaampien hakumallien luomiseksi. Alla on muutamia esimerkkejä:

  • Sovita ja poista kaikki tämän sähköpostiosoitteen sähköpostiosoitteet: $ grep -E -o "b [A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + [A-Za-z] {2.6} b "file.txt
  • Kartta ja pura kaikki voimassa olevat IP-osoitteet tästä tiedostosta: $ 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]?) (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

-O-vaihtoehtoa käytetään vain otteluiden tulostamiseen.

Tulosta ennen laskemista

Jos haluat tulostaa tietyn määrän rivejä ennen vastaavuutta, käytä -B (tai —before-context) -parametria. Esimerkiksi, jos haluat näyttää 5 alkuyhteyden riviä ennen sovittamista, voit käyttää seuraavaa komentoa: $ grep -A 5 root / etc / passwd

Tulosta haun jälkeen

Jos haluat tulostaa tietyn määrän rivejä ottelun jälkeen, käytä -A (tai –a after-context) -parametria. Esimerkiksi 5 rivin lopullisen kontekstin näyttämiseksi vastaavien merkkijonojen jälkeen voit käyttää seuraavaa komentoa: $ grep -B 5 root / etc / passwd

Tämä on välttämätöntä komentojen tietojen täydelliseen käyttöön. Jos käytät jo Linuxia ja voit antaa neuvoja aloittelijoille, jaa kommentteja tämän artikkelin mukaisesti.