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.