Tinkamas „Find and Grep“ komandų naudojimas „Linux“

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į.