Správne používanie príkazov Find a Grep v Linuxe

Väčšina začínajúcich používateľov unixových systémov, najmä Linux, nie sú oboznámení so základnými operátormi príkazového riadka používanými v tomto OS. Pozrime sa bližšie na funkcie a použitie operátorov vyhľadávania a grep.

Použitie príkazov Find a Grep v Linuxe.

NÁJDETE

Príkaz na vyhľadanie Linuxu je nástroj príkazového riadka na prechádzanie hierarchiou súborov. Môžu byť použité na vyhľadávanie súborov a adresárov a následné operácie s nimi. Podporuje vyhľadávanie podľa súboru, priečinka, názvu, dátumu vytvorenia, dátumu zmeny, vlastníka a oprávnení. Pomocou -exec je možné spúšťať iné príkazy UNIX pre nájdené súbory alebo priečinky. syntax:

$ find [kde začať vyhľadávanie] [výraz určuje, čo nájsť] [-options] [čo nájsť]

možnosti:

  • -exec - požadovaný súbor, ktorý spĺňa vyššie uvedené kritériá a vracia 0 ako stav ukončenia pre úspešné vykonanie príkazu;
  • -ok - funguje rovnako ako -exec, okrem toho, že užívateľ je najprv vyzvaný;
  • -inum N - vyhľadávanie s číslom "N";
  • -links N - vyhľadávanie s odkazmi "N";
  • -name demo - vyhľadávanie súborov uvedených v „demo“;
  • - nový súbor - vyhľadávanie súborov, ktoré boli zmenené / vytvorené po „súbore“;
  • -permové osmičkové - vyhľadávanie, ak je rozlíšenie osmičkové;
  • -print - zobrazí cestu k dokumentom nájdeným podľa iných kritérií;
  • -empty - hľadanie prázdnych dokumentov a adresárov;
  • -size + N / -N - vyhľadávacie bloky „N“; "N" a "c" možno použiť na meranie veľkosti v znakoch; „+ N“ znamená väčšiu veľkosť „N“ blokov a „-N“ znamená menšiu veľkosť „N“ blokov;
  • -užívateľ - vyhľadá dokumenty patriace k užívateľskému mena alebo identifikátoru "name";
  • (expr) - True, ak "expr" je pravdivé; Používa sa na zoskupovanie kritérií v spojení s OR alebo AND.

GREP

Príkaz grep sa používa na vyhľadávanie súborov. Funkcia znamená „globálnu tlač regulárnych výrazov“ a je jedným z najvýkonnejších a najčastejšie používaných príkazov v Linuxe. Príkaz vyhľadá jeden alebo viac vstupných súborov, ktoré zodpovedajú zadanému vzoru, a zapíše každý príslušný riadok do štandardného výstupu. Ak nie sú zadané žiadne súbory, príkaz prečíta zo štandardného vstupu, ktorý je zvyčajne výstupom iného príkazu. V tomto článku vám ukážeme, ako zadať príkaz, praktické príklady a podrobné vysvetlenia najbežnejších možností GNU grep.

Syntax príkazu

Skôr ako začneme používať príkaz, začnime preskúmaním základnej syntaxe. Pomocné výrazy majú nasledujúci tvar:

[MOŽNOSTI] VZOR [SÚBOR ...]

Položky v hranatých zátvorkách sú nepovinné.

  • MOŽNOSTI - nula alebo viac možností. Tím poskytuje množstvo možností, ktoré kontrolujú jeho správanie.
  • PATTERN - Vzor vyhľadávania.
  • SÚBOR - nula alebo viac názvov vstupných súborov.

Ako zadať príkaz na vyhľadávanie súborov

Hlavným účelom príkazu je vyhľadať text v súbore. Ak chcete napríklad zobraziť súbor / etc / passwd obsahujúci riadok bash, môžete použiť nasledujúci príkaz:

$ grep bash / etc / passwd

Výstup by mal vyzerať takto:

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

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

Ak reťazec obsahuje medzery, musíte ho uzavrieť do jednoduchých alebo dvojitých úvodzoviek:

$ "Správca zobrazení Gnome" / etc / passwd

Invertovať zhodu (ex)

Ak chcete zobraziť čiary, ktoré nezodpovedajú vzoru, zadajte parameter –v (alebo –invert-match). Ak chcete napríklad zobraziť súbor, ktorý neobsahuje súbor nologin zo súboru / etc / passwd, môžete zadať nasledujúci príkaz:

$ -v nologin / etc / passwd

výstup:

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

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

git 994: 994: git daemon user: /: / usr / bin / git-shell

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

Ako použiť príkaz na vyhľadávanie vo výstupe

Ak zadáte vstupné súbory, môžete presmerovať výstup iného príkazu a potom zobraziť iba riadky, ktoré zodpovedajú zadanému vzoru. Ak chcete napríklad zistiť, ktoré procesy sú vo vašom systéme spustené ako používateľ údajov www, môžete použiť nasledujúci príkaz:

$ ps -ef | www-Data

výstup:

www-data 18247 12675 4 16:00? 00:00:00 php-fpm: pool www

root 18272 17714 0 16:00 pts / 0 00:00:00 —color = auto - vylúčiť-dir = .bzr —exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —exclude-dir = .svn www-dáta

www-data 31147 12770 0 Okt22? 00:05:51 nginx: pracovný proces

www-data 31148 12770 0 Okt22? 00:00:00 nginx: proces manažéra vyrovnávacej pamäte

Môžete tiež kombinovať viacero kanálov do tímu. Ako vidíte na výstupe vyššie, existuje aj riadok obsahujúci proces. Ak nechcete, aby sa tento riadok zobrazoval, pošlite výstup na inú inštanciu, ako je zobrazené nižšie.

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

výstup:

www-data 18247 12675 4 16:00? 00:00:00 php-fpm: pool www

root 18272 17714 0 16:00 pts / 0 00:00:00 —color = auto - vylúčiť-dir = .bzr —exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —exclude-dir = .svn www-dáta

www-data 31147 12770 0 Okt22? 00:05:51 nginx: pracovný proces

www-data 31148 12770 0 Okt22? 00:00:00 nginx: proces manažéra vyrovnávacej pamäte

Rekurzívne vyhľadávanie

Ak chcete rekurzívne vyhľadať vzor, ​​zadajte voľbu –r (alebo –reurzív). To vám umožní prehľadávať všetky súbory v zadanom adresári, preskočiť symbolické odkazy, ktoré sa vyskytujú rekurzívne. Ak chcete prejsť cez všetky symbolické odkazy, použite voľbu –r (alebo –dereference-recursive). V nasledujúcom príklade hľadáme domain.com vo všetkých súboroch v adresári / etc:

$ -r domain.com / atď

Príkaz vytlačí príslušné polia s predponou úplnej cesty k súboru.

/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: názov_servera domain.com www.domain.com;

Ak namiesto –r použijete voľbu –R, príkaz bude nasledovať všetky symbolické odkazy:

$ -R domain.com / atď

Všimnite si posledné výstupné pole. Toto nie je vytlačené vo vyššie uvedenom príklade, pretože súbory v adresári Nginx s povolenými lokalitami sú symbolickými odkazmi na konfiguračné súbory v adresári dostupnom na stránkach.

výstup:

/etc/hosts:127.0.0.1 node2.domain.com

/etc/nginx/sites-available/domain.com: názov_servera domain.com www.domain.com;

/etc/nginx/sites-enabled/domain.com: názov_servera domain.com www.domain.com;

Zobraziť iba názov súboru

Ak chcete potlačiť predvolený výstup a vytlačiť iba názvy súborov, ktoré obsahujú priradený vzor, ​​môžete zadať možnosť –l (alebo —files-with-matches “). Ak chcete napríklad vyhľadať všetky súbory končiace v .conf v aktuálnom pracovnom adresári a vytlačiť len názvy súborov obsahujúce typ domain.com, zadajte:

$ –L domain.com * .conf

Výstup bude vyzerať takto:

tmux.conf

haproxy.conf

Voľba -l sa zvyčajne používa v spojení s rekurzívnou voľbou -R:

$ -R domain.com / tmp

Vec necitlivosti

V predvolenom nastavení sa v príkaze rozlišujú veľké a malé písmená, čo znamená, že veľké a malé písmená sa považujú za odlišné. Ak chcete ignorovať prípad pri vyhľadávaní, zadajte voľbu –i (alebo –ignore-case). Napríklad, ak hľadáte Zebra bez akejkoľvek voľby, nasledujúci príkaz nebude zobrazovať žiadny výstup, t. vyhovujú.

$ Zebra / usr / share / words

Ak však hľadáte veľké a malé písmená, použite voľbu –i, ktorá sa bude zhodovať s veľkými aj malými písmenami:

$ grep -i Zebra / usr / share / slová

Označenie „Zebra“ bude zodpovedať „Zebra“, „ZEbrA“ alebo akejkoľvek inej kombinácii veľkých a malých písmen.

výstup:

zebra

Zebra

zebry

Presná zhoda

Pri vyhľadávaní bude gnu tiež tlačiť gnu, do ktorého sa vkladajú väčšie slová, napríklad cygnus alebo magnum.

$ gnu / usr / share / words

výstup:

cygnus

pakôň

Interregnum

lgnu9d

Lignum

magnum

Magnuson

rašelinníkov

Wingnut

Ak chcete vrátiť iba tie výrazy, v ktorých je zadané pole celé slovo (nie je uzavreté slovami), môžete použiť voľbu –w (alebo —word-regexp).

DÔLEŽITÉ. Znaky slova zahŕňajú alfanumerické znaky (az, AZ a 0-9) a podčiarkovníky (_). Všetky ostatné znaky sú považované za neverbálne znaky.

Ak spustíte rovnaký príkaz ako vyššie, vrátane voľby –w, príkaz vráti iba tie, ktoré obsahujú gnu ako samostatné slovo.

$ grep -w gnu / usr / share / slová

Výstup: gnu

Zobraziť čísla

Ak chcete zobraziť počet riadkov obsahujúcich vzor, ​​použite parameter –n (alebo – line-number). Pomocou tejto možnosti sa vytlačia zhody na štandardný výstup s predponou čísla, v ktorom bol nájdený. Ak chcete napríklad zobraziť súbor / etc / services obsahujúci predponu bash s príslušným číslom, môžete použiť nasledujúci príkaz:

$ grep -n 10000 / etc / services

Výstup nižšie ukazuje, že zhody sú na 10423 a 10424.

výstup:

10423: ndmp 10 000 / tcp

10424: ndmp 10000 / udp

počítacie

Ak chcete vytlačiť počet zodpovedajúcich riadkov na štandardný výstup, použite parameter –c (alebo –count). V nasledujúcom príklade spočítame počet účtov, ktoré majú shell / usr / bin / zsh.

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

Výstup: 4

Niekoľko riadkov (vzorov)

Operátor OR môže kombinovať dva alebo viac vzorov vyhľadávania. V predvolenom nastavení príkaz interpretuje ako hlavný regulárny výraz, v ktorom metaznaky stratia svoj špeciálny význam a mali by sa použiť ich verzie s spätným lomítkom. V nasledujúcom príklade hľadáme všetky výskyty slov fatálnych, chybových a kritických v protokolovom súbore chýb Nginx:

$ grep 'fatálna chyba' kritická '/var/log/nginx/error.log

Ak použijete voľbu rozšíreného regulárneho výrazu –E (alebo -extended-regexp), príkaz by nemal byť uniknutý, ako je uvedené nižšie:

$ grep -E 'fatálna | chyba | kritická' /var/log/nginx/error.log

Regulárny výraz

GNU Grep má dve sady funkcií regulárneho výrazu - Basic a Extended. Štandardne funkcia interpretuje vzor ako základný regulárny výraz, na prepnutie na rozšírené regulárne výrazy, musíte použiť voľbu –E. Pri použití regulárnych výrazov v hlavnom režime sú všetky ostatné znaky okrem metaznakov vlastne regulárnymi výrazmi, ktoré sa navzájom zhodujú. Nižšie je uvedený zoznam najčastejšie používaných znakov:

  • Použite znak ^ (znak znaku), aby zodpovedal výrazu na začiatku riadka. V nasledujúcom príklade sa ^ kangaroo bude zhodovať iba vtedy, ak sa vyskytne na začiatku: $ grep "^ kangaroo" file.txt
  • Použite symbol $ (dolár), aby zodpovedal výrazu na konci. V nasledujúcom príklade sa kangaroo $ bude zhodovať iba vtedy, ak sa stretne na samom konci: grep "kangaroo $" file.txt
  • Použite symbol. (bodka), aby zodpovedali ľubovoľnému jednotlivému znaku. Napríklad, aby zodpovedal všetkému, čo začína kan dvomi znakmi a končí roo, môžete použiť nasledujúci vzor: $ grep "kan..roo" file.txt
  • Použite [] (zátvorky), aby zodpovedali ľubovoľnému jednotlivému znaku v zátvorkách. Nájdite napríklad tie, ktoré obsahujú znak akceptovania alebo "akcent", môžete použiť nasledujúci vzor: $ grep "acce [np] t" file.txt

Ak chcete predísť špeciálnemu významu nasledujúceho znaku, použite znak \ t

Rozšírené regulárne výrazy

Ak chcete interpretovať vzor ako rozšírený regulárny výraz, použite parameter –E (alebo –extended-regexp). Rozšírené regulárne výrazy zahŕňajú všetky základné metacharaktery, ako aj ďalšie metaznaky pre vytváranie zložitejších a výkonnejších vzorov vyhľadávania. Nižšie sú uvedené niektoré príklady:

  • Porovnajte a extrahujte všetky e-mailové adresy z tohto súboru: $ grep -E -o "[A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + [A-Za-z] {2.6} b "file.txt
  • Mapujte a extrahujte všetky platné IP adresy z tohto súboru: $ grep -E -o '(25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0 (25 [0-5] | 2 [0-4] [0-9] | [01] a [0-9] [0-9] a) (25 [0- 5] | 2 [0-4] [0-9] | [01] a [0-9] [0-9] a) (25 [0-5] | 2 [0-4] [0- 9] | [0-9] [0-9]?) 'File.txt

Voľba -o sa používa na tlač iba zhody.

Pred počítaním vytlačte

Ak chcete pred priradením vytlačiť určitý počet riadkov, použite parameter –B (alebo „pred kontextom“). Ak chcete napríklad zobraziť 5 riadkov počiatočného kontextu pred priradením, môžete použiť nasledujúci príkaz: $ grep -A 5 root / etc / passwd

Vytlačiť po vyhľadávaní

Ak chcete po zápase vytlačiť určitý počet riadkov, použite parameter –A (alebo –after-context). Ak chcete napríklad zobraziť 5 riadkov konečného kontextu po priradení reťazcov, môžete použiť nasledujúci príkaz: $ grep -B 5 root / etc / passwd

To je všetko potrebné pre plné využitie informácií príkazov. Ak už používate Linux a môžete poskytnúť akúkoľvek radu pre začiatočníkov, zdieľajte komentáre podľa tohto článku.