Většina začínajících uživatelů unixových systémů, zejména Linux, není obeznámena se základními operátory příkazového řádku používanými v tomto OS. Podívejme se blíže na funkce a použití vyhledávacích a grepových operátorů.
Použití příkazů Find a Grep v Linuxu.
Najít
Příkaz Linux find je nástroj příkazového řádku pro procházení hierarchií souborů. Lze jej použít pro vyhledávání souborů a adresářů a následné operace s nimi. Podporuje vyhledávání podle souboru, složky, názvu, data vytvoření, data změny, vlastníka a oprávnění. Pomocí příkazu -exec lze pro nalezené soubory nebo složky provádět další příkazy systému UNIX. Syntaxe:
$ find [kde začít hledat] [výraz určuje, co najít] [-options] [co najít]
Možnosti:
- -exec - požadovaný soubor, který splňuje výše uvedená kritéria a vrací 0 jako stav ukončení pro úspěšné provedení příkazu;
- -ok - funguje stejně jako -exec, kromě toho, že uživatel je nejprve vyzván;
- -inum N - hledat s číslem "N";
- -links N - vyhledávání s odkazy "N";
- -name demo - hledání souborů uvedených v „demo“;
- -newer file - hledání souborů, které byly upraveny / vytvořeny po „file“;
- -perm osmičkové - hledání, pokud je rozlišení osmičkové;
- -print - zobrazí cestu k dokumentům nalezeným podle jiných kritérií;
- -empty - hledání prázdných dokumentů a adresářů;
- -size + N / -N - vyhledávací bloky „N“; "N" a "c" lze použít k měření velikosti znaků; „+ N“ znamená větší velikost „N“ bloků a „-N“ znamená menší velikost „N“ bloků;
- -user name - vyhledá dokumenty, které patří k uživatelskému jménu nebo identifikátoru "name";
- (expr) - True, pokud "expr" je pravdivé; Slouží ke seskupení kritérií ve spojení s OR nebo AND.
Grep
Příkaz grep se používá k vyhledávání souborů. Funkce znamená „globální tisk regulárních výrazů“ a je jedním z nejsilnějších a často používaných příkazů v Linuxu. Příkaz hledá jeden nebo více vstupních souborů, které odpovídají zadanému vzoru, a zapíše každý odpovídající řádek na standardní výstup. Pokud nejsou zadány žádné soubory, příkaz přečte ze standardního vstupu, který je obvykle výstupem jiného příkazu. V tomto článku vám ukážeme, jak zadat příkaz, s praktickými příklady a podrobným vysvětlením nejběžnějších možností GNU grep.
Syntaxe příkazu
Než začneme používat příkaz, začněme přezkoumáním základní syntaxe. Pomocné výrazy mají následující tvar:
[MOŽNOSTI] VZOR [SOUBOR ...]
Položky v hranatých závorkách jsou nepovinné.
- MOŽNOSTI - nula nebo více možností. Tým poskytuje řadu možností, které řídí jeho chování.
- PATTERN - Vzor vyhledávání.
- FILE - nula nebo více názvů vstupních souborů.
Jak zadat příkaz pro vyhledávání souborů
Hlavním účelem příkazu je vyhledat text v souboru. Chcete-li například zobrazit soubor / etc / passwd obsahující řádek bash, můžete použít následující příkaz:
$ grep bash / etc / passwd
Výstup by měl vypadat takto:
root 0: 0: root: / root: / bin / bash
domain1000: 1000: domain: / home / domain: / bin / bash
Pokud řetězec obsahuje mezery, musíte jej uzavřít do jednoduchých nebo dvojitých uvozovek:
$ "Správce zobrazení Gnome" / etc / passwd
Invertovat shodu (ex)
Chcete-li zobrazit řádky, které neodpovídají vzoru, zadejte parametr –v (nebo –invert-match). Chcete-li například zobrazit soubor, který neobsahuje soubor nologin ze souboru / etc / passwd, můžete zadat následující pří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 uživatel: /: / usr / bin / git-shell
linuxize 1000: 1000: linuxize: / home / linuxize: / bin / bash
Jak použít příkaz pro vyhledávání ve výstupu
Pokud zadáte vstupní soubory, můžete přesměrovat výstup jiného příkazu a zobrazit pouze řádky, které odpovídají zadanému vzoru. Chcete-li například zjistit, které procesy ve vašem systému běží jako uživatel www dat, můžete použít následující příkaz:
$ ps -ef | www-data
Výstup:
www-data 18247 12675 4 16:00? 00:00:00 php-fpm: pool www
kořen 18272 17714 0 16:00 pts / 0 00:00:00 —barva = auto - vyloučit-dir = .bzr —exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —exclude-dir = .svn www-data
www-data 31147 12770 0 Oct22? Nginx: pracovní proces
www-data 31148 12770 0 Oct22? 00:00:00 nginx: proces správce mezipaměti
Můžete také kombinovat více kanálů do týmu. Jak vidíte na výstupu výše, je zde také řádek obsahující proces. Pokud nechcete, aby byl tento řádek zobrazen, odešlete výstup do jiné instance, jak je uvedeno níže.
$ ps -ef | www-data | grep -v grep
Výstup:
www-data 18247 12675 4 16:00? 00:00:00 php-fpm: pool www
kořen 18272 17714 0 16:00 pts / 0 00:00:00 —barva = auto - vyloučit-dir = .bzr —exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —exclude-dir = .svn www-data
www-data 31147 12770 0 Oct22? Nginx: pracovní proces
www-data 31148 12770 0 Oct22? 00:00:00 nginx: proces správce mezipaměti
Rekurzivní vyhledávání
Chcete-li rekurzivně hledat vzorek, zadejte volbu –r (nebo –regresivní). To vám umožní prohledávat všechny soubory v zadaném adresáři a přeskakovat symbolické odkazy, které se vyskytují rekurzivně. Pro zobrazení všech symbolických odkazů použijte volbu –r (nebo –dereference-rekurzivní). V následujícím příkladu hledáme domain.com ve všech souborech v adresáři / etc:
$ -r domain.com / etc
Příkaz vytiskne odpovídající pole s předponou úplné cesty k souboru.
/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: název_serveru domain.com www.domain.com;
Pokud místo –r použijete volbu –R, příkaz bude následovat všechny symbolické odkazy:
$ -R domain.com / etc
Všimněte si poslední výstupní pole. Toto není vytištěno ve výše uvedeném příkladu, protože soubory v adresáři Nginx s povoleným webem jsou symbolickými odkazy na konfigurační soubory uvnitř adresáře, který je k dispozici.
Výstup:
/etc/hosts:127.0.0.1 node2.domain.com
/etc/nginx/sites-available/domain.com: název_serveru domain.com www.domain.com;
/etc/nginx/sites-enabled/domain.com: název_serveru domain.com www.domain.com;
Zobrazit pouze název souboru
Chcete-li potlačit výchozí výstup a tisknout pouze názvy souborů s odpovídajícím vzorem, můžete zadat volbu –l (nebo —files-with-matching “). Chcete-li například vyhledat všechny soubory končící v aktuálním pracovním adresáři .conf a vytisknout pouze názvy souborů obsahující typ domain.com, zadejte:
$ –L domain.com * .conf
Výstup bude vypadat takto:
tmux.conf
haproxy.conf
Volba -l se obvykle používá ve spojení s volbou rekurzivní -R:
$ -R domain.com / tmp
Necitlivost na případy
Ve výchozím nastavení příkaz rozlišuje velká a malá písmena, což znamená, že velká a malá písmena jsou považována za odlišná. Chcete-li ignorovat případ při vyhledávání, zadejte volbu –i (nebo –ignore-case). Pokud například hledáte Zebra bez jakékoli volby, následující příkaz nebude zobrazovat žádný výstup, tj. tam jsou odpovídající.
$ Zebra / usr / share / words
Pokud však provádíte vyhledávání nerozlišující velká a malá písmena, použijte volbu –i, bude se shodovat s velkými i malými písmeny:
$ grep -i Zebra / usr / share / words
Indikace “Zebra” bude odpovídat “Zebra”, “ZEbrA” nebo jiné kombinaci velkých a malých písmen.
Výstup:
zebra
zebra
zebry
Přesná shoda
Při hledání bude gnu také tisknout gnu, do kterého budou vkládána větší slova, například cygnus nebo magnum.
$ gnu / usr / share / words
Výstup:
cygnus
gnu
interregnum
lgnu9d
lignum
magnum
magnuson
sphagnum
wingnut
Pro návrat pouze těch výrazů, ve kterých je zadané pole celé slovo (není uzavřeno slovem), můžete použít volbu –w (nebo —word-regexp).
DŮLEŽITÉ. Mezi znaky slova patří alfanumerické znaky (az, AZ a 0-9) a podtržítka (_). Všechny ostatní znaky jsou považovány za neverbální znaky.Pokud spustíte stejný příkaz jako výše, včetně volby –w, příkaz vrátí pouze ty, které obsahují gnu jako samostatné slovo.
$ grep -w gnu / usr / share / slova
Výstup: gnu
Zobrazit čísla
Chcete-li zobrazit počet řádků obsahujících vzorek, použijte parametr –n (nebo – line-number). Pomocí této možnosti vytisknete shodné položky se standardním výstupem s předponou čísla, ve kterém byla nalezena. Chcete-li například zobrazit soubor / etc / services obsahující předponu bash s odpovídajícím číslem, můžete použít následující příkaz:
$ grep -n 10000 / etc / services
Níže uvedený výstup ukazuje, že shody jsou na 10423 a 10424.
Výstup:
10423: ndmp 10 000 / tcp
10424: ndmp 10000 / udp
Počítání
Chcete-li vytisknout počet odpovídajících řádků na standardní výstup, použijte parametr –c (nebo –count). V níže uvedeném příkladu počítáme počet účtů, které mají shell / usr / bin / zsh.
$ grep -c '/ usr / bin / zsh' / etc / passwd
Výstup: 4
Několik řádků (vzory)
Operátor OR může kombinovat dva nebo více vyhledávacích vzorů. Ve výchozím nastavení příkaz interpretuje jako hlavní regulární výraz, ve kterém metaznaky ztrácejí svůj konkrétní význam a měly by být použity jejich verze s zpětným lomítkem. V níže uvedeném příkladu hledáme všechny výskyty slov fatálních, chyb a kritických v souboru protokolu chyb Nginx:
$ grep 'fatální' chyba kritická '/var/log/nginx/error.log
Pokud použijete volbu rozšířeného regulárního výrazu –E (nebo -extended-regexp), příkaz by neměl být vynechán, jak je uvedeno níže:
$ grep -E 'fatální | chyba | kritický' /var/log/nginx/error.log
Regulární výraz
GNU Grep má dvě sady funkcí regulárního výrazu - Basic a Extended. Ve výchozím nastavení funkce interpretuje vzor jako základní regulární výraz, pro přepnutí na rozšířené regulární výrazy, musíte použít volbu –E. Při použití regulárních výrazů v hlavním režimu jsou všechny ostatní znaky, s výjimkou metaznaků, vlastně regulárními výrazy, které vzájemně odpovídají. Níže je uveden seznam nejčastěji používaných znaků:
- Použijte znak ^ (znak znaku), aby odpovídal výrazu na začátku řádku. V následujícím příkladu bude ^ kangaroo odpovídat pouze v případě, že se objeví na samém začátku: $ grep "^ kangaroo" file.txt
- Použijte symbol $ (dolar), aby odpovídal výrazu na konci. V následujícím příkladu bude kangaroo $ odpovídat pouze v případě, že se objeví na samém konci: grep "kangaroo $" file.txt
- Použijte symbol. (tečka), aby odpovídala libovolnému jednotlivému znaku. Například, aby odpovídal vše, co začíná kan dvěma znaky a končí roo, můžete použít následující vzor: $ grep "kan..roo" file.txt
- Použijte [] (závorky), aby odpovídaly libovolnému jednotlivému znaku uzavřenému v závorkách. Například najít ty, které obsahují akcent nebo "přízvuk, můžete použít následující vzor: $ grep" acce [np] t "file.txt
Chcete-li se vyhnout speciálnímu významu dalšího znaku, použijte znak \ t
Rozšířené regulární výrazy
Chcete-li interpretovat vzor jako rozšířený regulární výraz, použijte parametr –E (nebo –extended-regexp). Rozšířené regulární výrazy zahrnují všechny základní metacharaktery a další metaznaky pro vytváření složitějších a výkonnějších vzorů vyhledávání. Níže uvádíme několik příkladů:
- Shoda a rozbalení všech e-mailových adres z tohoto souboru: $ grep -E -o "[A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + [A-Za-z] {2.6} b "file.txt
- Mapovat a extrahovat všechny platné IP adresy z tohoto souboru: $ 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] | [01] a [0-9] [0-9]?) 'File.txt
Volba -o se používá k tisku pouze shod.
Tisk před počítáním
Chcete-li před přiřazením vytisknout určitý počet řádků, použijte parametr –B (nebo „před kontextem“). Chcete-li například před porovnáním zobrazit 5 řádků počátečního kontextu, můžete použít následující příkaz: $ grep -A 5 root / etc / passwd
Tisknout po hledání
Chcete-li po shodě vytisknout určitý počet řádků, použijte parametr –A (nebo –after-context). Chcete-li například zobrazit 5 řádků konečného kontextu po odpovídajících řetězcích, můžete použít následující příkaz: $ grep -B 5 root / etc / passwd
To je nezbytné pro plné využití informací příkazů. Pokud již používáte Linux a můžete poskytnout jakékoli rady pro začátečníky, podělte se o komentáře podle tohoto článku.