Laborator 07 ­ Shell scripting 1 Suport laborator

12. Shell scripting [http://books.google.com/books?id=_JFGzyRxQGcC&pg=PA365] (capitolele 12.1 ­ 12.3, 12.4.1 ­ 12.4.3, 12.5 ­ 12.5.6, 12.5.7 (grep fără expresii regulate), 12.7.1, 12.8) Puteți urmări tutorialul video corespunzător laboratorului făcut de IT Assistant
[http://itassistant.org/diverse/utilizarea­sistemelor­de­operare/utilizarea­sistemelor­de­operare­9.html].

Arhivă laborator
lab07.tar.gz

Introducere
Secvențierea operațiilor
a) Pentru a scrie, pe două linii, titlul jocului StarCraft 2 se pot folosi două comenzi e c h o  :
s t u d e n t @ u s o : ~ $e c h o" S t a r C r a f tI I " s t u d e n t @ u s o : ~ $e c h o" W i n g so fL i b e r t y "

b) Comenzile anterioare se pot rescrie pe un singur rând. Operatorul ;  este folosit pentru a secvenția două comenzi.
s t u d e n t @ u s o : ~ $e c h o" S t a r C r a f tI I " ;e c h o" W i n g so fL i b e r t y "

Puteți observa cum shell­ul afișează un nou prompt doar după ce a executat ambele instrucțiuni. Se pot rula oricâte comenzi într­o secvență, separate prin ; . Orice comenzi pot fi secvențiate în acest fel, nu doar e c h o . Comenzile dintr­o secvență pot fi diferite, nu trebuie să fie toate de același fel.

Multi­line commands
a) Rulați comanda de mai jos pentru a descărca și dezarhiva fișierele de suport ale laboratorului de astăzi. Obsevați că fiecare linie se termină cu un caracter \ . Acesta va face ca linia următoarea să fie considerată ca făcând parte din comanda curentă.
s t u d e n t @ u s o : ~ $w g e th t t p : / / o c w . c s . p u b . r o / c o u r s e s / _ m e d i a / u s o / l a b o r a t o a r e / l a b 0 7 . t a r . g z ; \ e c h o" A ml u a ta r h i v a . " ;\ m k d i rl a b 0 7 ;\ t a rz x v fl a b 0 7 . t a r . g z ;\ e c h o" A md e z a r h i v a ta r h i v a " ;\ e c h o" C o n t i n u t u la r h i v e i : " ;\ l sll a b 0 7

 care este obligatoriu pe Windows). Se pot copia. Source O altă modalitate de a rula un script este folosind s o u r c e . veți vedea că toate comenzile au fost alăturate pentru a fi pe o singură linie. La finalul fișierului. un shell script. Executabil . după ce se creează o comandă compusă pentru un task. Formularea de mai sus pornește un proces nou bash trebuie completată de faptul că. se așteaptă ca el să se termine. se poate folosi comanda de mai jos având ca director curent directorul unde este salvat fișierul s c . Comenzile listate în fișier nu sunt executate de shell­ul inițial. s t u d e n t @ u s o : ~ $s o u r c es c . s h : s t u d e n t @ u s o : ~ $b a s hs c . Dacă apăsați săgeată sus pentru a relua comanda anterioară.Un backslash (\ ) la finalul liniei semnifică faptul că linia se continuă pe rândul următor. Scripturi simple a) De cele mai multe ori se întâmplă ca.s c . s t u d e n t @ u s o : ~ $. ci din fișierul s c . într­un fișier numit s c . s h Alternativ. b) Pentru a lansa script­ul. s h Diferențele între cele două moduri de execuție (s o u r c e  și b a s h ) pot fi văzute într­un exercițiu ulterior. următoarele două linii: e c h o" S t a r C r a f tI I " e c h o" W i n g so fL i b e r t y " Câteva observații: Extensia s h  desemenează. Folosirea extensiei nu este obligatorie (comparativ cu e x e . s h .  ca sinonim pentru s o u r c e  – pentru a scrie mai puțin. să trebuiască să fie rezolvat acel task încă o dată. s h . se poate folosi . Un shell script conține comenzi. Promptul oferit după trecerea liniei pe rândul următor este > . Orice comandă puteți da la prompt­ul interactiv poate apărea și într­un asemenea fișier. după ce procesul nou este pornit. shell­ul își va încheia execuția – putem spune că există un e x i t  implicit. s h Linia de mai sus pornește un nou proces bash care nu va citi comenzile de la tastatură. se poate folosi un fișier în care se salvează toate comenzile componente. Pentru a nu rescrie toată comanda. tradițional.

Pentru b a s h . / s c . s h  și apoi scriptul se poate rula cu: s t u d e n t @ u s o : ~ $. / s c r i p t . Ruby sunt câteva limbaje frecvent folosite. s h  dacă s c r i p t . Operatorii se aseamănă cu funțiile logice AND și OR. s h  și rulați­l cu . putem rula un al doilea proces doar dacă primul proces s­a încheiat cu succes. respectiv cu eroare: s t u d e n t @ u s o : ~ $t r u e s t u d e n t @ u s o : ~ $e c h o$ ? 0 s t u d e n t @ u s o : ~ $f a l s e s t u d e n t @ u s o : ~ $e c h o$ ? 1 Folosind operatorii && și ||.org/LDP/abs/html/sha­bang. / s c . Python. / s c r i p t . csh).html]). s h  începe cu # !/ b i n / b a s h . s t u d e n t @ u s o : ~ $t r u e& &e c h o" S u c c e s s " S u c c e s s s t u d e n t @ u s o : ~ $f a l s e& &e c h o" S u c c e s s " . Dacă vrem să rulăm orice script sub forma . Așa cum nu este nici o diferența între . s h . Shebang a) Se pot scrie fișiere script și în alte limbaje. Pentru a putea diferenția între limbajele din cadrul scripturilor va trebui invocat interpretorul corespunzător. s h  și Finalizarea execuției unui proces Un proces își poate termina execuția cu succes (status 0) sau cu eroare (status diferit de 0). s c r i p t . linia ar arăta: # !/ b i n / b a s h Adăugați linia shebang scriptului s c . Pentru fișierele script bash nu este obligatorie linia shebang. s h Amintiți­vă ce făcea c h m o d . Se recomandă totuși s­o puneți pentru că scriptul ar putea fi folosit și în alte interpretoare de comenzi (dash. Perl. Într­un terminal statusul cu care s­a încheiat ultimul proces lansat se poate vedea cu ajutorul comenzii e c h o$ ? true și false sunt două programe care întotdeauna se termină cu succes.  și s o u r c e . În acest caz. zsh. respectiv eroare. prima linie a fișierului va avea un format special: va conține șirul # !  urmat de executabilul ce trebuie invocat pentru a rula scriptul. De exemplu. pentru un script Python va trebui să rulăm p y t h o ns c r i p t . Se pot adăuga drepturi de execuție scriptului s c . la fel nu este nici o diferență între b a s h . prima linie se numește linia shebang (sau sha­bang [http://tldp. nu doar în bash.a) O altă modalitate de a rula un script este aceea de a îl face executabil și de a îl rula ca un executabil oarecare.

 Ca orice limbaj de programare. $c a th e r o e s . Definiți. s h t e r r a n = " T e r r a n J i mR a y n o r " z e r g = " Z e r g K e r r i g a n " p r o t o s s = " P r o t o s s A r t a n i s " #A c u ma f i s a mc e l et r e iv a r i a b i l e e c h o$ t e r r a n e c h o$ z e r g e c h o$ p r o t o s s $b a s hh e r o e s . s h . Pentru a defini o variabilă folosim sintaxa N U M E _ V A R I A B I L A = V A L O A R E . un limbaj de programare; doar că până acum l­am folosit interactiv. Undefined vars Ce se întâmplă dacă vrem să folosim o variabilă nedefinită? $e c h o$ u n d e f i n e d _ v a r Bash nu consideră o eroare faptul că o variabilă nu este definită. scrieți un shell script numit h e r o e s . dar folosirea necesită prefixarea cu simbolul $ . Quoting Vreți să afișați un tabel cu eroii StarCraft 2. în script. Caracterul #  marchează începutul unui comentariu. Nu lăsați niciun spațiu în jurul semnului = . câte o variabilă pentru fiecare facțiune. de fapt. folosiți ghilimele în jurul întregii valori pentru a proteja acele spații.s t u d e n t @ u s o : ~ $t r u e| |e c h o" F a i l " s t u d e n t @ u s o : ~ $f a l s e| |e c h o" F a i l " F a i l Variabile Bash b a s h  este. Exemplu de utilizare a variabielor: s t u d e n t @ u s o : ~ $s c _ v e r s i o n = 2 s t u d e n t @ u s o : ~ $s c _ t i t l e = " W i n g so fL i b e r t y " s t u d e n t @ u s o : ~ $e c h oS t a r C r a f t$ s c _ v e r s i o n S t a r C r a f t2 s t u d e n t @ u s o : ~ $e c h o$ s c _ t i t l e W i n g so fL i b e r t y Observați faptul că inițializarea variabilei se face folosind numele ei. b a s h  are suport de variabile. Comentariul se întinde până la finalul liniei. Pentru a fi mai simplu de modificat. Este o restricție sintactică b a s h . O va înlocui cu șirul vid. s h T e r r a nJ i mR a y n o r . Dacă valoarea pe care vreți să o atribuiți varabilei conține spații.

 bash ne pune la dispoziție următoarele variabile speciale: Variabila Semnificație Echivalent C $ # $ @ $ 0 $ 1 $ 2 … Numărul de parametri transmiși scriptului a r g c Parametrii efectivi transmiși scriptului Numele scriptului Primul argument Al doilea argument … a r g v a r g v [ 0 ] a r g v [ 1 ] a r g v [ 2 ] … . separat printr­un singur spațiu. s h T e r r a n J i mR a y n o r Z e r g K e r r i g a n P r o t o s s A r t a n i s Inconveniența este cauzată de faptul că e c h o  afișează fiecare parametru al său. folosind construcția b a s h  sau s o u r c e . Asemănător putem rula scriptul nostru adăugând parametrii după numele script­ului: s t u d e n t @ u s o : ~ $. în urma căreia scriptul se execută. s h t e r r a n = " T e r r a n J i mR a y n o r " z e r g = " Z e r g K e r r i g a n " p r o t o s s = " P r o t o s s A r t a n i s " #A c u ma f i s a mc e l et r e iv a r i a b i l e e c h o" $ t e r r a n " e c h o" $ z e r g " e c h o" $ p r o t o s s " $b a s hh e r o e s . aceleași acțiuni s­ar executa identic. Pentru a repara acest lucru trebuie să încadrați numele variabilelor între ghilimele: $c a th e r o e s .Z e r gK e r r i g a n P r o t o s sA r t a n i s Observați că spațiile în plus nu au niciun efect. / s c r i p t _ b a s hp a r a m e t r u _ 1p a r a m e t r u _ 2 Pentru a putea avea acces la parametrii transmiși unui script. De exemplu ps ­e. efectuând anumite acțiuni. Puteți vedea în imaginea de mai jos etapele evaluării comenzii e c h o  în cele două cazuri. Special vars Până acum ați învățat să rulați un script. De multe ori am folosit comenzi căror le­am trimis anumiți parametrii specifici comenzii. sau cat FIŞIER. drept urmare cuvintele nu sunt aliniate. Dacă îl rulați încă o dată.

g z 1.e c h o$ $ Variabilele definite într­un shell bash sunt locale acelui shell. Descărcarea arhivei laboratorului Descărcați arhiva de laborator. definiții de variabile. e bine să salvați în el configurările proprii pentru b a s h : alias­uri. Special vars Vizualizați conținutul scriptului s p e c i a l _ v a r s . Fișierul . Dezarhivați­o folosind tar. source vs bash Rulați următoarele comenzi. 2. etc. valoare u m a s k . t a r .s o u r c es p e c i a l _ v a r s . s o u r c e  nu pornește proces nou. / s p e c i a l _ v a r s . Rulând scriptul r u s h . s h . De aceea. b a s h r c  este sourced la fiecare lansare a unui proces b a s h . .Alte variabile speciale întâlnite de­a lungul laboratoarelor: Variabila Semnificație Echivalent C ­ $ $ $ ! $ ? PID­ul procesului curent PID­ul ultimului proces lansat in background ­ Valoarea de exit a ultimei comenzi valoarea cu care se întoarce m a i n Exerciții 0. execută comenzile din script ca și cum ar fi fost introduse de la tastatură. s h . Rulați comenzile următoare și identificați câte procese se crează în momentul folosirii b a s h  și câte în cazul s o u r c e s t u d e n t @ u s o : ~ $e c h o$ $ . s h R u s h ! ! s t u d e n t @ u s o : ~ $s o u r c er u s h . s h  din arhiva de laborator și apoi rulați­l astfel: s t u d e n t @ u s o : ~ $. Rezolvare t a rx fl a b 0 7 .e c h o$ $ s t u d e n t @ u s o : ~ $e c h o$ $ . s h Z e r gR u s h ! ! Observați că în momentul folosirii s o u r c e  variabilele sunt definite și în interiorul scriptului.b a s hs p e c i a l _ v a r s . s h1234a Identificați valorile parametrilor trimiși script­ului și a celorlalte variabile speciale (cele din Introducere). s h  cu comanda b a s h . s t u d e n t @ u s o : ~ $r a c e = Z e r g s t u d e n t @ u s o : ~ $b a s hr u s h . se crează un alt shell bash ce execută comenzile din script.

 folosim: h e a dnk#p r i m e l ekl i n i i t a i lnk#u l t i m e l ekl i n i i #d ea s e m e n e a h e a dnk#t o a t el i n i i l e . respectiv ultimele 10 linii. Comenzile h e a d  și t a i l  implicit afișează primele.Un fișier similar este . Ce valoare de ieșire are l s în acest caz? Rezolvare s t u d e n t @ u s o : ~ $l sw a r c r a f t l s :c a n n o ta c c e s sw a r c r a f t :N os u c hf i l eo rd i r e c t o r y s t u d e n t @ u s o : ~ $e c h o$ ? 2 Scrieți un one­liner care creează directorul w a r c r a f t  dacă acesta nu există deja. Comanda Efect c a t t a c h e a d t a i l Afișează tot conținutul fișierului în ordine Afișează tot conținutul fișierului inversat Afișează doar primele linii din fișier Afișează doar ultimele linii din fișier Dacă nu primesc nici un argument. Filtre de text simple Până acum știți să afișați conținutul unui fișier utilizând c a t . dorim să vizualizăm doar începutul sau finalul fișierului sau poate dorim să vizualizăm fișierul de la început spre final. Secvențiere comenzi Studiați ce se întâmplă dacă încercați să listați conținutul unui director care nu există. Folosiți­vă de faptul că l s  va întoarce non­zero dacă directorul nu există.m a ip u t i np r i m e l e( k 1 ) Încercați să explicați ce face următoarea comandă. grep . 3. aceste comenzi citesc de la standard input ceea ce face posibilă folosirea lor prin înlănțuire cu pipe­uri. s h|h e a d|t a i ln+ 3|h e a dn1|t a c|t a i ln1 Puteți consulta paginile de manual pentru h e a d  și t a i l  pentru a vedea cum selectați range­ul de afișat. Următorul tabel listează comenzile folosite în aceste cazuri. Ce operator veți folosi: & &  sau | | ? Rezolvare s t u d e n t @ u s o : ~ $l sw a r c r a f t| |m k d i rw a r c r a f t 4. Dați o formulare mai simplă pentru ea. Pentru a afișa un număr arbitrar de linii. t a cs p e c i a l _ v a r s . 5.m a ip u t i nu l t i m e l ek t a i ln+ k#t o a t el i n i i l e . v i m r c  sourced de fiecare dată când se lansează o nouă instanță de v i m . Uneori.

 Pentru a putea filtra output­ul se pot folosi două utilitare: g r e p  (pentru a selecta numai anumite linii) și c u t  (pentru a selecta numai anumite secțiuni de pe fiecare linie). cut a) Utilitarul c u t  primește două argumente: un șablon pe baza căruia selectează secțiunea care va fi afișată din fiecare linie fișierul ce conține liniile pe care le va filtra Șablonul este compus din două elemente: un caracter de delimitare a câmpurilor (specificat prin d ) și id­ul câmpurilor care se afișează (specificat prin f ). care se folosește de pipe­uri (| ). a) Afișați în terminal conținutul fișierului / v a r / l o g / s y s l o g .Multe dintre utilitarele disponibile în linia de comandă oferă ca output o cantitate mare de text. Folosind c a t  și g r e p . afișați doar liniile care conțin string­ul “avahi” din fișierul / v a r / l o g / s y s l o g Rezolvare s t u d e n t @ u s o : ~ $c a t/ v a r / l o g / s y s l o g|g r e pa v a h i 6. executăm următoarea comandă: s t u d e n t @ u s o : ~ $c u td""f3/ v a r / l o g / s y s l o g Identificați parametrii trimiși lui c u t . . Este o metodă de utilizare uzuală. Folosind g r e p . c u tdD E L I M I T A T O RfL I S T Ă _ C Â M P U R IF I Ș I E R Dacă vrem ca pentru fiecare linie din fișierul / v a r / l o g / s y s l o g  să afișăm numai ora la care a fost înregistrată acea linie. afișați doar liniile care conțin string­ul “avahi” din fișierul / v a r / l o g / s y s l o g Rezolvare s t u d e n t @ u s o : ~ $g r e pa v a h i/ v a r / l o g / s y s l o g c) g r e p  poate primi liniile pe care le filtrează și pe STDIN. Rezolvare s t u d e n t @ u s o : ~ $c a t/ v a r / l o g / s y s l o g b) g r e p  poate primi ca argumente un șablon pe baza căruia selectează liniile afișate fișierul ce conține liniile pe care le va filtra g r e pȘ A B L O NF I Ș I E R Șablonul este reprezentat de o expresie regulată (mai multe detalii în laboratoarele viitoare). fișierul conține un număr mare de linii. După cum observați.

 Folosim w c . s h . s h 8. Rezolvare s t u d e n t @ u s o : ~ $c a t/ v a r / l o g / s y s l o g|g r e pk e r n e l Pentru fiecare din liniile anterioare afișați numai ora la care a fost înregistrată: Rezolvare s t u d e n t e @ u s o : ~ $c a t/ v a r / l o g / s y s l o g|g r e pk e r n e l|c u td""f3 7. Pentru asta vom sorta n u m e r i c  fișierul cu s o r t  și vom elimina duplicatele de pe liniile consecutive folosind u n i q .b) La fel ca g r e p . câte unul pe fiecare linie. wc Dorim să aflăm statistici despre un fișier cu privire la numărul de linii. Nu uitați să folosiți c a t . uniq Fișierul m a n y _ n u m b e r s  conține numere naturale. Găsiți o modalitate de a transmite script­ului parametrul “ W i n g s o fL i b e r t y ”  (incluzând ghilimelele). Câte numere conține fișierul m a n y _ n u m b e r s ? Rezolvare s t u d e n t @ u s o : ~ $s o r tnm a n y _ n u m b e r s|u n i q|w cl 9. c u t  poate primi liniile pe care le filtrează și pe STDIN. sort. La final. Afișați toate liniile din fișierul / v a r / l o g / s y s l o g  care conțin șirul de caractere k e r n e l . Escaping. s h . Vrem să aflăm câte numere există în total. va trebui să numărăm liniile obținute. cuvinte și caractere. folosiți escaping: “ \ ” W i n g so fL i b e r t y \ ” ” . Pentru a include ghilimele într­o expresie care este deja între ghilimele. numărând fiecare număr o singură dată (altfel spus. Aflați câte linii are fișierul s p e c i a l _ v a r s . More quoting Reveniți la script­ul s p e c i a l _ v a r s . Rezolvare $w cls p e c i a l _ v a r s . O alternativă este folosirea apostroafelor pentru a delimita șirul: s t u d e n t @ u s o : ~ $e c h o' " W i n g so fL i b e r t y " ' " W i n g so fL i b e r t y " s t u d e n t @ u s o : ~ $e c h o" \ " W i n g so fL i b e r t y \ " " " W i n g so fL i b e r t y " . ignorând repetițiile).

Folosiți e c h o . s h # !/ b i n / b a s h t e m p = $ ( c u tf 7d :/ e t c / p a s s w d ) . Rezolvare $f a c t i o n = T e r r a n $e c h o$ f a c t i o n T e r r a n $e c h o' $ f a c t i o n ' $ f a c t i o n Caracterul $  are semnnificație literală între apostroafe. însă. pentru a afișa variabila. Aveți grijă la outputul comenzii e c h o ; nu uitați de quoting (din Introducere). Asemănător putem să atribuim outpul comenzii p i d o f  unei variabile. Rezolvare s t u d e n t @ u s o : ~ $c a ts c r i p t . Hint: Observați delimitatorul folosit în fișierul / e t c / p a s s w d . Folosiți e c h o  pentru a afișa valoarea variabilei. iar outputul acesteia era trimis ca parametru comenzii k i l l . Folosiți e c h o  pentru a afișa valoarea variabilei. folosind fișierul / e t c / p a s s w d : afișează numărul de shell­uri distincte configurate implicit. Expandarea unei comenzi Simbolul $  este folosit pentru expandarea unei variabile. pe a doua linie Ca să nu executăm de două ori comanda c u t  pentru a obține ultima coloană din fișierul / e t c / p a s s w d . pe prima linie numărul utilizatorilor ce au configurat implicit un shell primit ca parametru. În laboratorul 5 ați întâlnit următoarea comandă: s t u d e n t @ u s o : ~ $k i l l9$ ( p i d o fs i g n a l _ t e s t ) Se executa comanda p i d o f s i g n a l _ t e s t . dar de data aceasta încadrați formularea $ f a c t i o n  cu apostroafe. Identificați­l urmărind pașii următori: Definiți variabila f a c t i o n  având valoarea T e r r a n . putem folosi o variabilă intermediară în care reținem output­ul comenzi. urmat de pipe și filtrele de text. comenzi sau expresii. și un efect neașteptat. iar apoi să transmitem variabila ca parametru comenzii k i l l : s t u d e n t @ u s o : ~ $p i d _ s i g n a l = $ ( p i d o fs i g n a l _ t e s t ) s t u d e n t @ u s o : ~ $k i l l9$ p i d _ s i g n a l Scrieți un script care. 10.Apostroafele au.

Scrieți un script care construiește un fișier conținând un număr n de octeți de 0. Rezolvare s t u d e n t @ u s o : ~ $c a ts c r i p t . d di f = F I Ș I E R _ I N T R A R Eo f = F I Ș I E R _ I E Ș I R Eb s = D I M E N S I U N E _ B L O Cc o u n t = N U M Ă R _ B L O C U R I De obicei parametrul bs (byte size) este o putere a lui 2 (ex: 512. dd Comanda d d  are ca scop principal copierea și conversia fișierelor la nivel de octeți. / s c r i p t . s h # !/ b i n / b a s h d di f = / d e v / z e r oo f = $ 1b s = 1 0 2 4c o u n t = $ 2 Modificați scriptul să afișeze doar numărul total de octeți. 1024. Folosiți filtrele de text învățate din laborator. unde n este un multiplu de 1024. s h # !/ b i n / b a s h d di f = / d e v / z e r oo f = $ 1b s = 1 0 2 4c o u n t = $ 22 >. Redirectați ieșirea de eroare într­un fișier din directorul curent folosind operatorul 2 > d dL I S T Ă _ P A R A M E T R I I2 >F I Ș I E R Vrem să ne asigurăm că operația d d  se execută cu succes pentru a aplica după filtrele de text peste ce afișează comanda.case.edu/php/chet/readline/rltop. s hN U M E _ F I Ș I E RN U M Ă R _ B L O C U R I Atenție la diferența între octetul 0 și caracterul '0'. De ce? 12. Rezolvare s t u d e n t @ u s o : ~ $c a ts c r i p t . ștergând fișierul temporar folosit. Readline Readline [http://tiswww. Numele fișierului și numărul n scriptul le primește ca parametrii. putem copia partiții întregi sau doar o parte din ele cu acest utilitar. .html] este o facilitate care ajută la editarea eficientă a comenzilor pe care le scriem în shell. 2048 etc. Ce operator folosim? Faceți curat la ieșirea din script. Vom explora câteva concepte utile. Comanda d d  afișează la ieșirea de eroare (altfel zis stderr). . Folosiți dispozitivul / d e v / z e r o  pentru a obține un șir cu octeți de 0. Deoarece în Linux dispozitivele pot fi accesate prin fișierele din directorul /dev.). / t m p _ f i l e& &t a i ln1. / t m p _ f i l e|c u td''f1 r m.e c h o" $ t e m p "|s o r t|u n i q|w cl e c h o" $ t e m p "|g r e p$ 1|w cl 11. / t m p _ f i l e O metoda mai bună de a folosi fișiere temporare este să folosim directorul / t m p .

Combinația Shift­Insert este o scurtătură pentru Paste în terminal. Puteți citi mai multe despre acest concept aici [http://www.Creați un director care se numește s u p e r c a l i f r a g i l i s t i c e x p i a l i d o c i o u s .txt ∙ Last modified: 2012/11/24 16:02 by paul.vlase .2].linuxjournal.com/article/7385?page=0. Folosiți combinația de taste A l t #  (Alt și diez). Puteți face copy­paste pe numele de mai sus. secțiunea Searching the command history. Folosiți această combinație pentru a șterge directorul creat.  (Alt și punct)? Folosiți tasta A l t  din stânga tastaturii. > < C t r l r >+m k d i r r mr f< A l t # > uso/laboratoare/laborator­07. Ce rol are combinația de taste A l t . Nu apăsați enter. Scrieți în terminal comanda r m r f/ t m p . Ce s­ar fi întâmplat dacă executam comanda? Rezolvare m k d i rs u p e r c a l i f r a g i l i s t i c e x p i a l i d o c i o u s r m< A l t . Repetați ultima comandă de tip m k d i r  folosind reverse search.

Master your semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master your semester with Scribd & The New York Times

Cancel anytime.