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.