Pareiza Find un Grep komandu izmantošana Linux

Lielākā daļa Unix sistēmu iesācēju lietotāju, jo īpaši Linux, nav pazīstami ar galvenajiem komandrindas operatoriem, kurus izmanto šajā operētājsistēmā. Aplūkosim tuvāk meklēšanas un grep operatoru funkcijas un izmantošanu.

Meklēt un Grep komandas Linux.

ATLASIET

Linux meklēšanas komanda ir komandrindas utilīta failu hierarhijas šķērsošanai. To var izmantot, lai meklētu failus un direktorijus un veiktu turpmākas darbības ar tām. Tā atbalsta meklēšanu pēc faila, mapes, vārda, izveides datuma, maiņas datuma, īpašnieka un atļaujas. Izmantojot -exec, var atrast citas UNIX komandas atrastiem failiem vai mapēm. Sintakse:

$ atrast [kur sākt meklēšanu] [izteiksme nosaka, ko atrast] [-options] [ko atrast]

Iespējas:

  • -exec - vajadzīgais fails, kas atbilst iepriekš minētajiem kritērijiem, un atgriež 0 kā izejas stāvokli veiksmīgai komandu izpildei;
  • -ok - darbojas tāpat kā -exec, izņemot to, ka lietotājs vispirms tiek aicināts;
  • -inum N - meklēt ar numuru "N";
  • - saites N - meklēšana ar saitēm "N";
  • -name demo - meklēt failus, kas norādīti “demo”;
  • - jaunāks fails - meklēt failus, kas ir pārveidoti / izveidoti pēc “faila”;
  • perm octal - meklējiet, ja izšķirtspēja ir astotā;
  • -druka - parādiet ceļu uz atrastajiem dokumentiem, izmantojot citus kritērijus;
  • -empty - meklēt tukšus dokumentus un direktorijus;
  • -izmērs + N / -N - meklēšanas bloki "N"; "N" un "c" var izmantot, lai izmērītu lielumu rakstzīmēs; “+ N” ir lielāks “N” bloku izmērs, un “-N” nozīmē mazāku “N” bloku lielumu;
  • -uzņēmēja vārds - meklēt lietotājvārda vai identifikatora "nosaukums" dokumentus;
  • (expr) - taisnība, ja "expr" ir taisnība; Izmanto, lai grupētu kritērijus kopā ar OR vai AND.

Grep

Grep komandu izmanto, lai meklētu failus. Funkcija apzīmē „regulāru izteiksmju globālo drukāšanu” un ir viena no spēcīgākajām un biežāk izmantotajām komandām Linux. Komanda meklē vienu vai vairākus ievades failus, kas atbilst norādītajam modelim, un katru atbilstošo līniju ieraksta standarta izvadā. Ja faili nav norādīti, komanda nolasa no standarta ievades, kas parasti ir citas komandas izeja. Šajā rakstā mēs parādīsim, kā ievadīt komandu, izmantojot praktiskus piemērus un detalizētākos GNU grep opciju variantus.

Komandu sintakse

Pirms sākam izmantot komandu, sāksim pārskatīt galveno sintaksi. Lietderības izteiksmēm ir šāda forma:

[OPTIONS] PATĒRIŅA [FILE ...]

Vienumi kvadrātiekavās ir obligāti.

  • OPTIONS - nulles vai vairāk izvēles. Komanda nodrošina vairākas iespējas, kas kontrolē tās uzvedību.
  • PATTERN - Meklēšanas modelis.
  • FILE - nulles vai vairāk ievades failu nosaukumi.

Kā ievadīt komandu, lai meklētu failus

Komandas galvenais mērķis ir meklēt tekstu failā. Piemēram, lai parādītu no / etc / passwd faila, kurā ir bash līnija, varat izmantot šādu komandu:

$ grep bash / etc / passwd

Izejai vajadzētu izskatīties šādi:

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

domain1000: 1000: domēns: / home / domain: / bin / bash

Ja virkne satur atstarpes, jums ir jāpievieno viena vai divkāršās pēdiņas:

$ "Gnome Display Manager" / etc / passwd

Pārvērst atbilstību (ex)

Lai parādītu līnijas, kas neatbilst paraugam, ievadiet parametru –v (vai –invert-match). Piemēram, lai parādītu failu, kas nesatur nologīnu no / etc / passwd faila, varat ievadīt šādu komandu:

$ -v nologin / etc / passwd

Izeja:

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

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

git 994: 994: git dēmona lietotājs: /: / usr / bin / git-shell

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

Kā izmantot komandu, lai meklētu izvadā

Tā vietā, ja norādāt ievades failus, varat novirzīt citas komandas izvadi un pēc tam parādīt tikai tās līnijas, kas atbilst norādītajam modelim. Piemēram, lai uzzinātu, kuri procesi jūsu sistēmā darbojas kā www-datu lietotājs, varat izmantot šādu komandu:

$ ps -ef www dati

Izeja:

www-dati 18247 12675 4 16:00? 00:00:00 php-fpm: baseins www

sakne 18272 17714 0 16:00 punkti / 0 00:00:00 —krāsa = auto - izslēgt-dir = .bzr —exclude-dir = CVS —izņemiet-dir = .git —exclude-dir =. = .svn www dati

www-dati 31147 12770 0 Oct22? 00:05:51 nginx: strādnieku process

www-dati 31148 12770 0 Oct22? 00:00:00 nginx: kešatmiņas pārvaldnieka process

Varat arī apvienot vairākus kanālus komandā. Kā redzams iepriekš minētajā izvadā, ir arī līnija, kas satur procesu. Ja nevēlaties, lai šī rinda tiktu rādīta, nosūtiet izeju uz citu instanci, kā parādīts zemāk.

$ ps -ef www-dati grep -v grep

Izeja:

www-dati 18247 12675 4 16:00? 00:00:00 php-fpm: baseins www

sakne 18272 17714 0 16:00 punkti / 0 00:00:00 —krāsa = auto - izslēgt-dir = .bzr —exclude-dir = CVS —izņemiet-dir = .git —exclude-dir =. = .svn www dati

www-dati 31147 12770 0 Oct22? 00:05:51 nginx: strādnieku process

www-dati 31148 12770 0 Oct22? 00:00:00 nginx: kešatmiņas pārvaldnieka process

Rekursīvā meklēšana

Lai recursīvi meklētu rakstu, ievadiet opciju –r (vai –recursive). Tas ļaus jums meklēt visus failus norādītajā direktorijā, izlaižot simboliskas saites, kas notiek rekursīvi. Lai izietu visas simboliskās saites, izmantojiet opciju –r (vai –dereference-rekursīvs). Nākamajā piemērā mēs meklējam domain.com visos failos / etc direktorijā:

$ -r domain.com / etc

Šī komanda izdrukās atbilstošos laukus ar pilnu faila ceļa prefiksu.

/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: server_name domain.com www.domain.com;

Ja, vietā, kur lietojat –R opciju, komanda sekos visām simboliskajām saitēm:

$ -R domain.com / etc

Ievērojiet pēdējo izejas lauku. Iepriekš minētajā piemērā tas netiek drukāts, jo vietnes iespējotā Nginx direktorijā esošie faili ir simboliskas saites uz konfigurācijas failiem vietņu pieejamā direktorijā.

Izeja:

/etc/hosts:127.0.0.1 node2.domain.com

/etc/nginx/sites-available/domain.com: servera nosaukums domēns.com www.domain.com;

/etc/nginx/sites-enabled/domain.com: servera nosaukums domēns.com www.domain.com;

Rādīt tikai faila nosaukumu

Lai nomainītu noklusējuma izdruku un izdrukātu tikai to failu nosaukumus, kas satur atbilstošo rakstu, varat ievadīt –l (vai -files-with-match) opciju. Piemēram, lai meklētu visus failus, kas beidzas ar .conf pašreizējā darba direktorijā, un drukāt tikai faila nosaukumus, kas satur domēna.com tipu, ierakstiet:

$ –L domēns.com * .conf

Izeja izskatīsies šādi:

tmux.conf

haproxy.conf

-L opcija parasti tiek izmantota kopā ar rekursīvo -R opciju:

$ -Rl domēns.com / tmp

Lietas nejutīgums

Pēc noklusējuma komanda ir reģistrjutīga, kas nozīmē, ka lielie un mazie burti tiek uzskatīti par atšķirīgiem. Lai ignorētu gadījumu, kad meklējat, ievadiet opciju –i (vai –ignore-case). Piemēram, ja meklējat zebru bez jebkādas opcijas, tālāk norādītā komanda neparādīs nevienu izvadi, t.i. ir atbilstība.

$ Zebra / usr / share / words

Bet, ja veicat nejaušu meklēšanu, izmantojiet –i iespēju, tas atbilst gan lielajiem, gan mazajiem burtiem:

$ grep -i Zebra / usr / share / words

Norāde “Zebra” atbilst “Zebra”, “ZEbrA” vai jebkurai citai lielo un mazo burtu kombinācijai.

Izeja:

zebra

zebras

zebras

Precīza atbilstība

Meklējot, gnu izdrukās arī gnu, kurā tiek ievietoti lielāki vārdi, piemēram, cygnus vai magnum.

$ gnu / usr / share / words

Izeja:

cygnus

gnu

interregnum

lgnu9d

lignum

magnum

magnuson

sphagnum

spārns

Lai atgrieztu tikai tos izteicienus, kuros norādītais lauks ir vesels vārds (nav iekļauts vārdos), varat izmantot opciju –w (vai —word-regexp).

SVARĪGI. Vārda burti ietver burtciparu rakstzīmes (az, AZ un 0-9) un pasvītrojumus (_). Visas pārējās rakstzīmes tiek uzskatītas par neverbālām rakstzīmēm.

Ja palaižat tādu pašu komandu kā iepriekš, ieskaitot opciju -w, komanda atdos tikai tos, kas ietver atsevišķu vārdu gnu.

$ grep -w gnu / usr / share / words

Izeja: gnu

Rādīt numurus

Lai parādītu rindu skaitu, kas satur modeli, izmantojiet parametru –n (vai –line-number). Izmantojot šo opciju, tiks izdrukātas atbilstības standarta izvadei ar tā numura prefiksu, kurā tas tika atrasts. Piemēram, lai parādītu no / etc / services faila, kurā ir bash prefikss ar atbilstošo numuru, varat izmantot šādu komandu:

$ grep -n 10000 / etc / services

Zemāk redzamie rezultāti parāda, ka spēles ir 10423 un 10424.

Izeja:

10423: ndmp 10, 000 / tcp

10424: ndmp 10000 / udp

Skaitīšana

Lai izdrukātu atbilstošo līniju skaitu standarta izvadam, izmantojiet parametru –c (vai –count). Tālāk redzamajā piemērā mēs skaitām to kontu skaitu, kuriem ir čaulas / usr / bin / zsh.

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

Rezultāts: 4

Vairākas rindas (raksti)

OR operators var apvienot divus vai vairākus meklēšanas modeļus. Pēc noklusējuma komanda interpretē modeli kā galveno regulāro izteiksmi, kurā metakaraksti zaudē savu īpašo nozīmi, un jāizmanto to versijas ar slīpsvītru. Tālāk redzamajā piemērā mēs meklējam visus vārdus, kas ir nāvējoši, kļūdas un kritiski Nginx kļūdas žurnāla failā:

$ grep 'letāla | kļūda | kritiskā' /var/log/nginx/error.log

Ja izmantojat paplašināto regulāro izteiksmi opciju –E (vai —papildina-regexp), paziņojumu nedrīkst izbēgt, kā parādīts tālāk:

$ grep -E 'letāla | kļūda | kritiska' /var/log/nginx/error.log

Regulāra izteiksme

GNU Grep ir divas regulāru izteiksmes funkciju kopas - Basic un Extended. Pēc noklusējuma funkcija interpretē modeli kā parastu regulāru izteiksmi, lai pārslēgtos uz paplašinātām regulārām izteiksmēm, jums jāizmanto –E opcija. Lietojot regulāras izteiksmes galvenajā režīmā, visas pārējās rakstzīmes, izņemot meta rakstzīmes, faktiski ir regulāras izteiksmes, kas atbilst viena otrai. Zemāk ir saraksts ar visbiežāk lietotajiem metakarķieriem:

  • Izmantojiet rakstzīmi ^ (caret raksturs), lai atbilstu izteiksmei līnijas sākumā. Nākamajā piemērā ^ kangaroo atbilst tikai tad, ja tas notiek pašā sākumā: $ grep "^ kangaroo" file.txt
  • Izmantojiet simbolu $ (dolārs), lai atbilstu izteiksmei beigās. Nākamajā piemērā kangaroo $ atbilst tikai tad, ja tas ir sastopams beigās: grep "kangaroo $" file.txt
  • Izmantojiet simbolu. (dot), lai atbilstu kādam atsevišķam simbolam. Piemēram, lai saskaņotu visu, kas sākas ar divām rakstzīmēm kan, un beidzas ar roo, varat izmantot šādu rakstu: $ grep "kan..roo" file.txt
  • Izmantojiet [] (iekavās), lai atbilstu kādai atsevišķai rakstzīmei, kas iekļauta iekavās. Piemēram, atrodiet tos, kas satur akcentu vai akcentu, varat izmantot šādu rakstu: $ grep "acce [np] t" file.txt

Lai izvairītos no nākamās rakstzīmes īpašās nozīmes, izmantojiet rakstzīmi \ t

Paplašinātas regulāras izteiksmes

Lai interpretētu modeli kā paplašinātu regulāru izteiksmi, izmantojiet –E (vai –extended-regexp) parametru. Paplašinātās regulāras izteiksmes ietver visus pamata rakstzīmes, kā arī papildu meta rakstzīmes, lai radītu sarežģītākus un spēcīgākus meklēšanas modeļus. Zemāk ir daži piemēri:

  • Saskaņojiet un izvelciet visas e-pasta adreses no šī faila: $ grep -E -o "b [A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + [A-Za-z] {2.6} b "file.txt
  • Kartē un noņemiet visas derīgās IP adreses no šī faila: $ 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 opcija tiek izmantota, lai drukātu tikai spēles.

Drukāt pirms skaitīšanas

Lai pirms atbilstības izdrukātu noteiktu skaitu rindu, izmantojiet parametru –B (vai —before-context). Piemēram, lai parādītu 5 sākotnējās konteksta rindas pirms saskaņošanas, varat izmantot šādu komandu: $ grep -A 5 root / etc / passwd

Drukāt pēc meklēšanas

Lai pēc atbilstības izdrukātu noteiktu skaitu rindu, izmantojiet parametru –A (vai pēc konteksta). Piemēram, lai parādītu 5 pēdējās konteksta rindas pēc atbilstības virknes, varat izmantot šādu komandu: $ grep -B 5 root / etc / passwd

Tas viss ir nepieciešams, lai pilnībā izmantotu komandu informāciju. Ja jūs jau lietojat Linux un varat sniegt padomus iesācējiem, dalieties ar komentāriem saskaņā ar šo pantu.