Dauguma naujokų „Unix“ sistemų naudotojų, ypač „Linux“, nėra susipažinę su pagrindiniais komandų eilutės operatoriais, naudojamais šioje operacinėje sistemoje. Pažvelkime į paieškos ir grep operatorių funkcijas ir naudojimą.
„Find and Grep“ komandų naudojimas „Linux“.
Rasti
„Linux find“ komanda yra komandų eilutės įrankis, skirtas failų hierarchijai perkelti. Jis gali būti naudojamas failams ir katalogams ieškoti ir vėlesnėms operacijoms atlikti. Jis palaiko paiešką pagal failą, aplanką, pavadinimą, kūrimo datą, keitimo datą, savininką ir teises. Naudojant -exec, kitos UNIX komandos gali būti vykdomos rastiems failams ar aplankams. Sintaksė:
$ rasti [kur pradėti paiešką] [išraiška nustato, ką rasti] [-options] [ką rasti]
Parinktys:
- -exec - reikalingas failas, atitinkantis pirmiau nurodytus kriterijus, ir grąžina 0 kaip išėjimo būseną sėkmingam komandų vykdymui;
- -ok - veikia taip pat kaip -exec, išskyrus tai, kad vartotojas pirmą kartą raginamas;
- -inum N - paieška su numeriu "N";
- - nuorodos N - paieška su nuorodomis "N";
- -name demo - ieškoti failų, nurodytų „demo“;
- - naujesnis failas - ieškoti failų, kurie buvo pakeisti / sukurti po „failo“;
- perm octal - ieškoti, jei rezoliucija yra aštuntoji;
- - spausdinti - rodyti kelią į dokumentus, nustatytus naudojant kitus kriterijus;
- -empty - ieškoti tuščių dokumentų ir katalogų;
- - dydžio + N / -N - paieškos blokai "N"; „N“ ir „c“ gali būti naudojami matmenims matuoti; „+ N“ reiškia didesnį „N“ blokų dydį, o „-N“ reiškia mažesnį „N“ blokų dydį;
- -user vardas - ieškoti vartotojo vardo ar identifikatoriaus „name“ dokumentų;
- (expr) - tiesa, jei „expr“ yra teisinga; Naudojamas grupuoti kriterijus kartu su OR arba AND.
Grep
Grep komanda naudojama ieškoti failų. Ši funkcija reiškia „visuotinį reguliarių išraiškų spausdinimą“ ir yra viena iš galingiausių ir dažniausiai naudojamų „Linux“ komandų. Komanda ieško vieno ar daugiau įvesties failų, atitinkančių nurodytą modelį, ir kiekvieną atitinkamą eilutę įrašo į standartinę išvestį. Jei failų nėra, komanda nuskaito iš standartinės įvesties, kuri paprastai yra kitos komandos išvestis. Šiame straipsnyje mes parodysime, kaip įvesti komandą su praktiniais pavyzdžiais ir išsamiais paaiškinimais apie dažniausiai naudojamus GNU grep variantus.
Komandų sintaksė
Prieš pradėdami naudoti komandą, pradėkime peržiūrėdami pagrindinę sintaksę. Naudingumo išraiškos yra tokios formos:
[OPTIONS] PATTERNAS [FILE ...]
Kvadratinių skliaustų elementai yra neprivalomi.
- GALIMYBĖS - nulis arba daugiau pasirinkimų. Komanda pateikia daugybę funkcijų, kurios kontroliuoja jo elgesį.
- PATTERN - Paieškos modelis.
- FILE - nulis arba daugiau įvesties failų pavadinimų.
Kaip įvesti komandą ieškoti failų
Pagrindinis komandos tikslas yra ieškoti teksto faile. Pavyzdžiui, norėdami rodyti failą iš / etc / passwd, kuriame yra bazinė linija, galite naudoti šią komandą:
$ grep bash / etc / passwd
Išėjimas turėtų atrodyti taip:
šaknis 0: 0: šaknis: / root: / bin / bash
domain1000: 1000: domenas: / home / domain: / bin / bash
Jei eilutėje yra tarpų, jį reikia pridėti prie vieno ar dvigubų kabučių:
$ "Gnome Display Manager" / etc / passwd
Atverti atitikimą (ex)
Norėdami rodyti linijas, kurios neatitinka modelio, įveskite parametrą –v (arba –invert-match). Pvz., Norėdami rodyti failą, kuriame nėra failo nologino iš / etc / passwd failo, galite įvesti šią komandą:
$ -v nologinas / etc / passwd
Išėjimas:
šaknis 0: 0: šaknis: / root: / bin / bash
colord 124: 124 :: / var / lib / colord: / bin / false
git 994: 994: „git deemon“ vartotojas: /: / usr / bin / git-shell
linuxize 1000: 1000: linuxize: / home / linuxize: / bin / bash
Kaip naudoti komandą ieškoti išėjime
Vietoj to, jei nurodote įvesties failus, galite nukreipti kitos komandos išėjimą ir tada rodyti tik tas eilutes, kurios atitinka nurodytą modelį. Pvz., Norėdami sužinoti, kurie procesai veikia jūsų sistemoje kaip www-duomenų vartotojas, galite naudoti šią komandą:
$ ps -ef | www duomenys
Išėjimas:
www-duomenys 18247 12675 4 16:00? 00:00:00 php-fpm: baseinas www
šaknis 18272 17714 0 16:00 taškai / 0 00:00:00 - spalva = automatinė - išskirti-dir = .bzr —exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —exclude-dir = .svn www duomenys
www-duomenys 31147 12770 0 Oct22? 00:05:51 nginx: darbuotojas
www-duomenys 31148 12770 0 Oct22? 00:00:00 nginx: talpyklų tvarkyklės procesas
Taip pat galite sujungti kelis kanalus į komandą. Kaip matote išvestyje, taip pat yra eilutė, kurioje yra procesas. Jei nenorite, kad ši eilutė būtų rodoma, siųskite išvestį į kitą pavyzdį, kaip parodyta žemiau.
$ ps -ef | www duomenys | grep -v grep
Išėjimas:
www-duomenys 18247 12675 4 16:00? 00:00:00 php-fpm: baseinas www
šaknis 18272 17714 0 16:00 taškai / 0 00:00:00 - spalva = automatinė - išskirti-dir = .bzr —exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —exclude-dir = .svn www duomenys
www-duomenys 31147 12770 0 Oct22? 00:05:51 nginx: darbuotojas
www-duomenys 31148 12770 0 Oct22? 00:00:00 nginx: talpyklų tvarkyklės procesas
Rekursyvi paieška
Norėdami rekursiškai ieškoti modelio, įveskite parinktį –r (arba - recursive). Tai leis jums ieškoti per visus nurodytame kataloge esančius failus, praleidžiant simbolines nuorodas, kurios atsiranda rekursiškai. Norėdami pereiti per visas simbolines nuorodas, naudokite –r (arba –dereference-recursive) parinktį. Toliau pateiktame pavyzdyje ieškome domeno.com visuose failuose, esančiuose / etc kataloge:
$ -r domain.com / etc
Komanda spausdins atitinkamus laukus pilno failo kelio prefiksu.
/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: server_name domain.com www.domain.com;
Jei vietoj –r pasirinksite –R parinktį, komanda vadovausis visomis simbolinėmis nuorodomis:
$ -R domain.com / etc
Atkreipkite dėmesį į paskutinį išvesties lauką. Tai nėra išspausdinta pirmiau pateiktame pavyzdyje, nes Nginx aplankų aplankuose esantys failai yra simbolinės nuorodos į konfigūracijos failus, esančius svetainių turimame kataloge.
Išėjimas:
/etc/hosts:127.0.0.1 node2.domain.com
/etc/nginx/sites-available/domain.com: serverio vardas domain.com www.domain.com;
/etc/nginx/sites-enabled/domain.com: serverio vardas domain.com www.domain.com;
Rodyti tik failo pavadinimą
Jei norite sustabdyti numatytąjį išvestį ir spausdinti tik tų failų pavadinimus, kuriuose yra suderintas modelis, galite įvesti –l (arba -files-with-match) parinktį. Pvz., Jei norite ieškoti visų failų, kurie baigiasi dabartiniame darbo kataloge .conf, ir spausdinti tik failų pavadinimus, kuriuose yra domeno.com tipas, įveskite:
$ –L domenas.com * .conf
Išvestis atrodys taip:
tmux.conf
haproxy.conf
-L parinktis paprastai naudojama kartu su rekursiniu -R variantu:
$ -Rl domain.com / tmp
Bylos nejautrumas
Pagal nutylėjimą komanda yra didžiosios ir mažosios raidės, o tai reiškia, kad didžiosios ir mažosios raidės laikomos skirtingomis. Jei norite ignoruoti atvejį, kai ieškote, įveskite variantą -i (arba –ignore-case). Pvz., Jei ieškote zebros be jokios parinkties, ši komanda neparodys jokios išvesties, t.y. yra atitikimas.
$ Zebra / usr / share / žodžiai
Bet jei atliekate nejautrią paiešką, naudokite „i“ parinktį, ji atitiks ir didžiosios, ir mažosios raidės:
$ grep -i Zebra / usr / share / words
Nurodymas „Zebra“ atitiks „Zebra“, „ZEbrA“ arba bet kokį kitą didžiųjų ir mažųjų raidžių derinį.
Išėjimas:
zebras
zebra
zebrai
Tiksli atitiktis
Ieškant, gnu taip pat bus spausdinamas gnu, kuriame įterpiami didesni žodžiai, tokie kaip cygnus arba magnum.
$ gnu / usr / share / words
Išėjimas:
cygnus
gnu
interregnum
lgnu9d
lignum
magnum
magnuson
sphagnum
sparnuotė
Jei norite grąžinti tik tas išraiškas, kuriose nurodytas laukas yra visas žodis (neįtrauktas į žodžius), galite naudoti variantą -w (arba —word-regexp).
SVARBU. Žodžio simboliai apima raidinius ir skaitmeninius simbolius (az, AZ ir 0-9) ir pabraukimą (_). Visi kiti simboliai laikomi neverbaliniais simboliais.Jei paleisite tą pačią komandą kaip ir anksčiau, įskaitant –w parinktį, komanda grąžins tik tuos, kuriuose yra atskiras žodis „gnu“.
$ grep -w gnu / usr / share / words
Išėjimas: gnu
Rodyti numerius
Jei norite rodyti eilučių, kuriose yra raštas, skaičių, naudokite parametrą –n (arba –line-number). Naudojant šią parinktį, spausdinama atitiktis standartiniam išėjimui su numerio, kuriame jis buvo rastas, prefiksu. Pavyzdžiui, norėdami rodyti iš / etc / services failo, kuriame yra bash prefiksas su atitinkamu numeriu, galite naudoti šią komandą:
$ grep -n 10000 / etc / services
Toliau pateikiamas rezultatas rodo, kad rungtynės yra 10423 ir 10424.
Išėjimas:
10423: ndmp 10, 000 / tcp
10424: ndmp 10000 / udp
Skaičiavimas
Jei norite spausdinti atitinkamų linijų skaičių į standartinę išvestį, naudokite parametrą –c (arba –count). Toliau pateiktame pavyzdyje skaičiuojame paskyrų, kuriose yra korpuso / usr / bin / zsh, skaičių.
$ grep -c '/ usr / bin / zsh' / etc / passwd
Rezultatai: 4
Kelios eilutės (modeliai)
OR operatorius gali sujungti du ar daugiau paieškos modelių. Pagal nutylėjimą, komanda interpretuoja modelį kaip pagrindinę reguliarią išraišką, kurioje metažodžiai praranda savo ypatingą reikšmę, ir jų versijos su nugarinės juostos šablonu. Toliau pateiktame pavyzdyje Nginx klaidų žurnalo faile ieškome visų fatalinių, klaidingų ir kritinių žodžių įvykių:
$ grep „mirtinas“ klaida | kritinė „/var/log/nginx/error.log“
Jei naudojate išplėstinę reguliariosios išraiškos parinktį –E (arba „pratęstas-regexp“), pareiškimas neturėtų būti pabėgęs, kaip parodyta toliau:
$ grep -E „mirtina | klaida | kritinė“ /var/log/nginx/error.log
Reguliari išraiška
„GNU Grep“ turi dvi reguliarios išraiškos funkcijas - „Basic“ ir „Extended“. Pagal numatytuosius nustatymus funkcija interpretuoja modelį kaip pagrindinę reguliarią išraišką, norėdami pereiti prie išplėstinių reguliarių išraiškų, turite naudoti –E parinktį. Naudojant reguliarias išraiškas pagrindiniame režime, visi kiti simboliai, išskyrus metacharfes, iš tikrųjų yra reguliarios išraiškos, atitinkančios viena kitą. Toliau pateikiamas dažniausiai naudojamų metakraščių sąrašas:
- Naudokite „^“ simbolį („caret“ ženklą), kad atitiktų linijos pradžios išraišką. Toliau pateiktame pavyzdyje ^ kangaroo atitiks tik tuo atveju, jei jis įvyksta pradžioje: $ grep "^ kangaroo" file.txt
- Naudokite $ (dolerio) simbolį, kad atitiktų išraišką pabaigoje. Toliau pateiktame pavyzdyje kangaroo $ atitiks tik tuo atveju, jei jis bus patiriamas pačiame gale: grep "kangaroo $" file.txt
- Naudokite simbolį. (taškas), kad atitiktų bet kurį vieną simbolį. Pavyzdžiui, norint suderinti viską, kas prasideda dviem simboliais ir baigiasi roo, galite naudoti šį modelį: $ grep "kan..roo" file.txt
- Naudokite [] (skliaustelius), kad atitiktų bet kokį vieną skliausteliuose esantį simbolį. Pavyzdžiui, suraskite tuos, kuriuose yra sutikimo arba „akcentas, galite naudoti šį modelį: $ grep“ acce [np] t "file.txt
Norėdami išvengti ypatingo kito simbolio reikšmės, naudokite simbolį „backslash“.
Išplėstinės reguliarios išraiškos
Norėdami interpretuoti modelį kaip išplėstą reguliarią išraišką, naudokite parametrą –E (arba –extended-regexp). Išplėstinės reguliarios išraiškos apima visus pagrindinius metažodžius, taip pat papildomus meta-simbolius sudėtingesniems ir galingesniems paieškos modeliams sukurti. Toliau pateikiami keli pavyzdžiai:
- Suraskite ir ištraukite visus el. Pašto adresus iš šio failo: $ grep -E -o "b [A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + [A-Za-z] {2.6} b "file.txt
- Žemėlapis ir ištraukite visus galiojančius IP adresus iš šio failo: $ 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-9] | 5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) (25 [0-5] | 2 [0-4] [0-9] 9] | [01]? [0-9] [0-9]?) „File.txt
-O parinktis naudojama tik atitikmenims spausdinti.
Spausdinimas prieš skaičiavimą
Jei norite prieš spausdinimą spausdinti tam tikrą skaičių eilučių, naudokite parametrą –B (arba –before-context). Pavyzdžiui, norėdami rodyti 5 pradinio konteksto eilutes prieš atitikimą, galite naudoti šią komandą: $ grep -A 5 root / etc / passwd
Spausdinti po paieškos
Jei norite po tam tikro skaičiaus išspausdinti tam tikrą eilių skaičių, naudokite parametrą –A (arba –a-po konteksto). Pavyzdžiui, norėdami rodyti 5 paskutinio konteksto eilutes po atitikimo eilutes, galite naudoti šią komandą: $ grep -B 5 root / etc / passwd
Visa tai reikalinga visiškam komandų informacijos naudojimui. Jei jau naudojate „Linux“ ir galite patarti pradedantiesiems, dalinkitės komentarais pagal šį straipsnį.