|
|
| |
Kategoritė e Mėsimeve |
 |
|
|
|
|
|
|
Shfrytėzimi i Operatorėve Ridrejtues, "Pipping" dhe "Grepping" nė Linux
Sisteme Operative - 08/08/2004 -
Shkruar nga:
Genc DOKO -
|
Pėr shtypės |
Koment:, Ky shkrim është i paraparë të ofrojë një dituri bazike për shfrytëzimin e operatorëve ridrejtues në Linux sistemet si dhe të spjegoj hapat e nevojshëm që duhen të merren për të shfrytëzuar "pipping" dhe "grepping" në Linux sistemet.
| Shfrytëzimi i Operatorëve Ridrejtues
Pikspari në Linux sistemet operative dalja standarde është e njohur me emrin stdout, përderisa hyrja standarde është e njohur me emrin stdin. Poashtu ne Linux sistemet operative kemi edhe stderr ku kjo eshte shkurtesa për Standard Error, dhe në shumicën e rasteve si "stderr" është i definuar monitori. Pra, kjo nënkuptonë që në rast që sistemi Linux has në ndonjë problem atëherë mesazhin që ka të bëjë me problemin e drejtonë në monitor (pra në "stderr" e definuar).
Ridrejtimi i shënimeve hyrëse/dalëse mundet të bëhet edhe nga vet shfrytëzuesi me anë të operatoreve ridrejtues (ang. redirection operators).
Lista e operatoreve ridrejtues përbëhet nga simbolet e listuara në vijim: >, >>, 2>, <, dhe <<. Këto operatorë kryesisht përdorën nëse deshirojmë të ridrejtojmë shënimet hyrëse/dalëse dikund tjetër në vend të vendëve standarde që janë shënuar në fillim të këtij postimi.
Një shembull i thjeshtë që demonstronë aplikimin e operatorëve ridrejtues është: | cat -n /etc/shells > shell-lista.txt | Në këtë shembull, shënimet dalëse që do të fitohen nga ekzekutimi i komandes së lartëshënuar me argumentet përkatëse në vend që të shfaqet në ekran (për shkak se ekrani është i definuar si "stdout") do të ruhen në skedarin "shell-lista.txt".
Sa i përket kapjes/ruajtjes së mesazheve për problemet që programet i shfaqin gjatë ekzekutimit, mundet të përdoret operatori ridrejtues "2>". Pra, nëse e ekzekutojmë rreshtin e mëposhtëm: | ls -l skedari-joekzistues 2> error-log.txt | dhe pas ekzekutimit e lexojmë skedarin e sapokrijuar "error-log.txt" do të shohim se në të gjendet rreshti: "ls: skedari-joekzistues: No such file or directory".
Nëse në shembullin e shfaqur më lartë do të kishim përdorur operatorin ">" në vend të operatorit "2>" atëherë skedari "error-log.txt" do të kishte qenë i zbrazët, për shkakë se operatori ">" nuk do të bën kapjen e mesazheve që kanë të bëjnë me probleme/gabime (ang. errors). Pra, operatori "2>" përdoret për ridrejtimin e shënimeve që janë të parapara për "stderr".
Një gjë që duhet të merrët parasysh për operatorin ">" është se në rast se bëhet ridrejtimi i shënimeve dalëse në një skedar që ka shënime atëherë të gjitha shënimet që gjenden në atë skedar do të mbishkruhen. Pra, nëse e kemi skedarin "skedari.txt" i cili ka shënime, dhe ne e ekzekutojmë komandën: | ls -l *.php > skedari.txt | atëherë qkado që gjendet në skedarin "skedari.txt" do të mbishkruhet me listën e skedarëve që kanë ekstenzionin "php" të cilët gjenden në direktorijumin ku është ekzekutuar komanda e lartëshënuar. Pra, nëse dëshirojmë që të shtojmë shënimet dalëse në një skedar atëherë do të përdorim operatorin ridrejtues ">>", p.sh. | ls -l *.php >> web-skedaret.txt | dhe| ls -l *.html >> web-skedaret.txt | ku në këtë rast listat e të gjithë skedarëve me ekstenzion "php" dhe "html" do të ruhen në skedarin "web-skedaret.txt".
Siq shihet dallimi kryesor ndërmjet operatorëve ridrejtues ">" dhe ">>" është se operatori ridrejtues ">" bën mbishkruarje përderisa operatori ridrejtues ">>" vazhdon shkruarjen nga fundi i skedarit.
Poashtu duhet të merret parasysh që nëse dëshirojmë të bëjmë shtuarje e jo mbishkruarje në rastet kur perdorët "2>" operatori, atëherë duhemi t'a përdorim operatorin "2>>". P.sh. | ping serveri 2>> serveret-te-paaritshem.log |
Deri më tani u shfaqën demonstrimet për ridrejtimin e shënimeve dalëse, kështu që tash do t'i shfaqi disa shembuj në të cilët bëhet ridrejtimi i shënimeve hyrëse.
Nëse p.sh. dëshirojmë të editojmë disa skedar tekstual me Vi Editor (ekzekutimi i cilit bëhet me anë të komandës: vi) dhe për të gjithë këto skedar do të deshirojmë të bëjmë fshierjën e rreshit të parë dhe t'i ruajmë ndryshimet atëherë së pari e krijojmë një skedar p.sh. "vi-komandat" i cili do të ketë permbajtjen e mëposhtme:pastaj për secilin skedar që deshirojmë t'a modifikojmë do t'a përdorim rreshtin në vijim: | vi emri-i-skedarit < vi-komandat | Pra, në këtë mënyrë nuk do të kemi nevojë që të merremi me Vi Editor aq shume, me c'rast do të kursejmë kohë.
"Pipping" dhe "Grepping" në Linux
"Pipping" është një proces i thjeshtë i cili e bën lidhjen e komandave. Kjo gjë është sidomos e dobishme gjatë punës në "shell". Shembulli më i thjeshtë i "pipping" është:
Në këtë shembull është duke u bërë lidhja e komandës "ls" (me argumentin "-l") me komandën "more". Pra, ekzekutimi i rreshtit të lartëshënuar do të na mundëson t'i shfletojmë skedarët/direktorijumet faqe për faqe (shfaqja e shënimeve dalëse faqe per faqe kryhet nga komanda "more"). Siq shihet nga shembulli, lidhja e komandave bëhet nëpërmjet karakterit: | .
Kjo formë e lidhjes së komandave është poashtu e dobishme kur dëshirojmë të shfletojmë ndonjë skriptë nga "shell". P.sh. nëse e kemi një skriptë e cila quhet "skripta.c", mundemi t'a shfrytëzojmë rreshtin e mëposhtëm:
Pas ekzekutimit të rreshtit të lartëshënuar, do të shfaqet përmbajtja e skedarit "skripta.c", ku në ekran do të jetë i numëruar secili rresht (këtë punë e kryen argumenti "-n" i komandës "cat"). Përveq kësaj, komanda e cila e kemi lidhur në rreshtin e lartëshënuar: komanda "less", do të ofrojë mundësinë që të lëvizim kursorin lartë apo poshtë mbrënda përmbajtjes së skedarit "skripta.c" që është shfaqur në ekran.
Edhe pse në dy shembujt e lartëshënuar është bërë vetëm lidhja e dy komandave, duhet të merret parasyshë që ky nuk është ndonjë kufizim. Për shembull:
ps -aux | grep gdk | wc -l
|
Në këtë rast kemi të bëjmë me lidhjen e tre komandave. Këtu jemi duke i shfletuar proceset në sistem së bashku me emrat e shfrytëzuesve nëpërmjet komandës "ps" me argumentet respektive të saj, dhe pastaj në shënimet dalëse që jemi duke i fituar nga ekzekutimi i komandës së parë jemi duke e kërkuar stringun "gdk" me anë të komandës "grep", dhe më së fundi me anë të komandës të tretë që jemi duke e lidhur: komanda "wc", është duke e bërë numrimin e rreshtave që do të fitohen pasi që komanda "grep" do t'i shfaq vetëm rreshtat që përmbajnë stringun "gdk". Pra, i tërë ky rresht në Linux sistemin tim në të cilin gjendet emri i shfrytëzuesit "gdk" do t'i shfaqë këto shënime dalëse:
[gdk@g-02042003 temp]$ ps -aux | grep gdk | wc -l
28
|
Pra, për momentin kjo tregon që 28 procese janë të startuara nga shfrytëzuesi gdk.
Duke u bazuar në shembullin e sapo shënuar do të elaboroj më shumë për procesin e "grepping".
Komanda "grep" shfrytëzohet kryesisht për të kërkuar stringje mbrënda skedarëve. P.sh. nëse dëshirojmë t'i shfletojmë të gjitha C skriptat/skedarët mbrënda një direktorijumi, të cilat përdorin/përmbajnë funksionin "reverse()", atëherë do të përdorim rrështin e mëposhtëm:
Komanda "grep" poashtu është mjaftë e dobishme kur kemi probleme me kompajlim të skriptave. P.sh. në këtë rast:
[gdk@g-02042003 C]$ gcc -o skripta skripta.c
skripta.c: In function `main':
skripta.c:39: error: syntax error before "temp"
[gdk@g-02042003 C]$ cat -n skripta.c | grep 39
39 if temp != 0)
|
Mundemi që nëpërmjet rreshtit:
cat -n skripta.c | grep 39
|
Të bëjmë lokalizimin e gabimit që gjendet në skriptë, duke i thënë komandës "grep" të shfaqë rreshtin që përmbanë numrin 39.
Pra, këto ishin disa shembuj për të spjeguar se si funksionon "pipping" dhe "grepping" në Linux. Tash juve ju mbetët t'i shfrytëzoni/modifikoni dhe t'i aplikoni këto procese sipas nevojave të juaja.
Tung!
| |
|
Ky material ėshtė i lėshuar nėn licensėn Creative Commons (Attribution-ShareAlike) qė do tė thotė qė materiali mund tė kopjohet, shpėrndahet, ekspozohet, pėrdoret pėr punime rrjedhėse dhe nevoja komerciale pėrderisa: Ceket autori; Nė rast ndryshimi, lėshohet nėn po tė njejtat kushte. Autori/ja i/e kėtij materiali pajtohet automatikisht qė materiali tė lėshohet nėn kėtė licensė. Kushtet mund tė largohen vetėm me lejėn e autorit/es.
|
|
|
|
|
|