Differences

This shows you the differences between two versions of the page.

Link to this comparison view

gsr:laboratoare:laborator-01 [2016/10/06 15:49]
george.milescu
gsr:laboratoare:laborator-01 [2016/10/13 20:27] (current)
alexandru.carp
Line 1: Line 1:
 ~~SHOWSOLUTION~~ ~~SHOWSOLUTION~~
-/* + 
-====== Laborator 01: Introducere ======+====== Laborator 01: Introducere ​și procese ​======
  
 **Comenzi utile**: ls, ls -l, cd, pwd, vi, chown, chmod, recursive, su, tar, zip, sudo, rm, touch, cp, mv, mkdir, stat, ln, ln -s, who, id, apt-get, apt-cache, man, less, cat, find **Comenzi utile**: ls, ls -l, cd, pwd, vi, chown, chmod, recursive, su, tar, zip, sudo, rm, touch, cp, mv, mkdir, stat, ln, ln -s, who, id, apt-get, apt-cache, man, less, cat, find
  
-===== Folosire man/less cu căutare =====+===== 01. Folosire man/less cu căutare =====
  
 Pentru documentarea într-un sistem Linux folosim pagini de manual. De exemplu pentru accesarea paginii de manual a comenzii ''​ls''​ folosim comanda ''​man'':<​code>​ Pentru documentarea într-un sistem Linux folosim pagini de manual. De exemplu pentru accesarea paginii de manual a comenzii ''​ls''​ folosim comanda ''​man'':<​code>​
Line 15: Line 15:
 </​code>​ </​code>​
  
-Paginile de manual au secțiuni. Astfel dacă dorim să accesăm pagina de manual a fișierului ''/​etc/​passwd''​ folosim comanda<​code>​+Paginile de manual au secțiuni. Pentru a vedea care este semnificatia fiecarei sectiuni, consultati comanda <​code>​$ man man</​code>​. Astfel dacă dorim să accesăm pagina de manual a fișierului ''/​etc/​passwd''​ folosim comanda<​code>​
 $ man 5 passwd $ man 5 passwd
 </​code>​ </​code>​
Line 68: Line 68:
  
 **Bonus**: Folosiți o construcție de tipul ''​stat ... | paste ... | bc''​ pentru a calcula spațiul ocupat de fișierele cu extensia din directorul ''/​etc''​ cu extensia ''​*.conf''​. Indicație: Urmăriți și postarea de [[http://​stackoverflow.com/​a/​451204|aici]]. **Bonus**: Folosiți o construcție de tipul ''​stat ... | paste ... | bc''​ pentru a calcula spațiul ocupat de fișierele cu extensia din directorul ''/​etc''​ cu extensia ''​*.conf''​. Indicație: Urmăriți și postarea de [[http://​stackoverflow.com/​a/​451204|aici]].
-===== Investigarea ierarhiei de fișiere ​=====+ 
 +===== 02. Fisiere ===== 
 + 
 +==== a) Investigarea ierarhiei de fișiere ====
  
 Ierarhia de fișiere în Unix/Linux este dată de [[http://​www.pathname.com/​fhs/​|Filesystem Hierarchy Standard]]. Fiecare director din vârful ierarhiei are un rol predeterminat. Un pachet instalat în sistemul curent, duce la actualizarea sistemului de fișiere în diferite locuri ale ierarhiei. Ierarhia de fișiere în Unix/Linux este dată de [[http://​www.pathname.com/​fhs/​|Filesystem Hierarchy Standard]]. Fiecare director din vârful ierarhiei are un rol predeterminat. Un pachet instalat în sistemul curent, duce la actualizarea sistemului de fișiere în diferite locuri ale ierarhiei.
Line 81: Line 84:
 Comanda ''​which''​ urmată de o comandă afișează calea completă a comenzii respective. Comanda ''​which''​ urmată de o comandă afișează calea completă a comenzii respective.
  
-==== Exerciții ​====+=== Exerciții ===
  
 Identificați componentele din sistemul de fișiere care aparțin pachetului ''​grub-common''​. Verificați ce tip de fișiere sunt și ce reprezintă. Identificați componentele din sistemul de fișiere care aparțin pachetului ''​grub-common''​. Verificați ce tip de fișiere sunt și ce reprezintă.
Line 92: Line 95:
 pentru a instala pachetul ''​zoo''​. Investigați în ierarhia ''/​var''​ unde a fost descărcat pachetul ''​.deb''​ pentru a fi apoi instalat în sistem. **Indicație**:​ Porniți de la directorul ''/​var/​lib''​. pentru a instala pachetul ''​zoo''​. Investigați în ierarhia ''/​var''​ unde a fost descărcat pachetul ''​.deb''​ pentru a fi apoi instalat în sistem. **Indicație**:​ Porniți de la directorul ''/​var/​lib''​.
  
-====Căi relative și absolute ​=====+==== b) Căi relative și absolute ====
  
 Căile în sistemul de fișiere pot fi abolute (încep de la directorul rădăcină) sau pot fi relative (sunt relative la directorul curent). Căile în sistemul de fișiere pot fi abolute (încep de la directorul rădăcină) sau pot fi relative (sunt relative la directorul curent).
Line 107: Line 110:
   * ''​./​a.out''​   * ''​./​a.out''​
  
-==== Exerciții ​====+=== Exerciții ===
  
 <​note>​ <​note>​
Line 120: Line 123:
  
 Folosiți o cale relativă și o cale absolută pentru a afișa ultimele 10 linii din fișierul de jurnalizare a sistemului (''​syslog''​). **Indicație**:​ Fișierul se găsește în ''/​var/​log''​ iar comanda pentru afișarea ultimelor 10 linii este ''​tail''​. Folosiți o cale relativă și o cale absolută pentru a afișa ultimele 10 linii din fișierul de jurnalizare a sistemului (''​syslog''​). **Indicație**:​ Fișierul se găsește în ''/​var/​log''​ iar comanda pentru afișarea ultimelor 10 linii este ''​tail''​.
-====Globbing, văzut fișiere care corespund unei expresii ​=====+ 
 +==== c) Globbing, văzut fișiere care corespund unei expresii ====
  
 Cu ajutorul globbing-ului putem să vedem fișiere care corespund unui șir. De principiu cea mai uzuală folosire este pentru sistemul de fișiere și acolo caracterul cel mai folosit este ''​*''​ (steluță, //star//) numit și wildcard. Cu ajutorul globbing-ului putem să vedem fișiere care corespund unui șir. De principiu cea mai uzuală folosire este pentru sistemul de fișiere și acolo caracterul cel mai folosit este ''​*''​ (steluță, //star//) numit și wildcard.
  
-==== Exerciții ​====+=== Exerciții ===
  
 Folosiți un glob pentru a afișa toate fișierele cu extensia ''​.gz''​ din directorul ''/​var/​log/''​. Folosiți un glob pentru a afișa toate fișierele cu extensia ''​.gz''​ din directorul ''/​var/​log/''​.
Line 134: Line 138:
 Afișați toate fișierele cu extensia ''​.conf''​ din toate primele subdirectoare din ''/​etc''​ (adică din primul nivel de subdirectoare:​ ''​init/'',​ ''​systemd/'',​ ''​security/''​. Afișați toate fișierele cu extensia ''​.conf''​ din toate primele subdirectoare din ''/​etc''​ (adică din primul nivel de subdirectoare:​ ''​init/'',​ ''​systemd/'',​ ''​security/''​.
  
-===== Vim Sk1llz ===== +==== d) Crearea unei ierarhii locale ====
- +
-<note important>​ +
-Dacă exercițiile de mai jos vă iau mai mult timp decât este indicat, să faceți o trecere prin tutorialul de Vim: adică să porniți comanda ''​vimtutor''​. +
- +
-Puteți să ignorați scrierea cu diacritice. +
-</​note>​ +
- +
-În **30 de secunde**, porniți Vim pentru a crea/edita fișierul ''​poveste.txt'',​ scrieți textul %%"A fost o dată ca niciodată că dacă nu ar fi nu s-ar povesti."​%% și salvați textul și părăsiți editorul. +
- +
-În **120 de secunde**, porniți Vim scrieți textul de mai sus în fișierul ''​capitolul-01.txt''​ și apoi tot în Vim (fără a părăsi editorul scrieți textul %%"Va urma"​%% în fișierul ''​capitolul-02.txt''​ și textul %%"​Sfârșit"​%% în fișierul ''​capitolul-03.txt''​. +
- +
-Descărcați fișierul de mai jos (''​mesaj.txt''​și, în **180 de secunde** editați-l în Vim pentru a obține forma de dedesubt (''​mesaj-modificat.txt''​). Analizați ce trebuie să faceți înainte de a contoriza editarea. +
- +
-<file txt mesaj.txt>​ +
-====== Împărțire semigrupe ====== +
- +
-Pentru împărțirea orelor de laborator de GSR, vom deschide două thread-uri pe [[http://​cs.curs.pub.ro/​2015/​mod/​forum/​view.php?​id=654|forumul de discuții generale]]. Pe fiecare thread vă veți putea înscrie la unul dintre cele două intervale de laborator:​ +
-  * joi, 16:​00-18:​00,​ sala EG106 +
-  * joi, 20:​00-22:​00,​ sala EG106 +
- +
-Vom deschide thread-urile miercuri, 14 octombrie 2015, la ora 12:30 (la prânz). +
- +
-Limita de locuri pe laborator este de 18 persoane. Va fi "first post, first served"​. +
-</​file>​ +
- +
-<file txt mesaj-modificat.txt>​ +
---- Împărțire semigrupe +
- +
-Pentru împărțirea orelor de laborator de GSR, vom deschide două fire de discuție pe forumul de discuții generale. Pe fiecare thread vă veți putea înscrie la unul dintre cele două intervale de laborator:​ +
-  * vineri, 16-12, sala EG306 +
-  * vineri, 20-22, sala EG306 +
- +
-Vom deschide thread-urile miercuri, 14 noiembrie 2015, la ora 19:30 (pe seară). +
- +
-Limita de locuri pe laborator este de 12 persoane. Va fi "​primul venit, primul servit"​. +
-</​file>​ +
- +
-În **30 de secunde** copiați codul de [[https://​github.com/​razvand/​snippets/​blob/​master/​mmap/​dual-mapping.c|aici]] în Vim într-un fișier numit ''​dual-mapping.c''​ și asigurând indentarea codului. +
-===== Crearea unei ierarhii locale ​=====+
  
 Creați ierarhia de mai jos într-un director cu numele ''​music/''​. Creați ierarhia de mai jos într-un director cu numele ''​music/''​.
Line 204: Line 169:
 `-- slayer `-- slayer
 </​code>​ </​code>​
-====Actualizarea ierarhiei ​=====+ 
 +==== e) Actualizarea ierarhiei ====
  
 Actualizați ierarhia de mai sus astfel: Actualizați ierarhia de mai sus astfel:
Line 214: Line 180:
   * Ștergeți întreg directorul ''​hammerfall''​.   * Ștergeți întreg directorul ''​hammerfall''​.
   * Schimbați numele directorului ''​ac_dc''​ în ''​AC DC''​ (numele conține spațiu).   * Schimbați numele directorului ''​ac_dc''​ în ''​AC DC''​ (numele conține spațiu).
-====Schimbat de permisiuni pe fișiere ​=====+ 
 +==== f) Schimbat de permisiuni pe fișiere ====
  
 Adăugați în sistem utilizatorii ''​ana'',​ ''​bogdan''​ și grupul ''​mayhem''​ și realizați următorele actualizări în ierarhia de mai sus: Adăugați în sistem utilizatorii ''​ana'',​ ''​bogdan''​ și grupul ''​mayhem''​ și realizați următorele actualizări în ierarhia de mai sus:
Line 223: Line 190:
   * Permisiunile pe fișierul ''​dave''​ sa permită lui ''​bogdan''​ citire și scriere (fără a modifica ownership).   * Permisiunile pe fișierul ''​dave''​ sa permită lui ''​bogdan''​ citire și scriere (fără a modifica ownership).
   * Fișierul ''​bon''​ să aiba permisiuni de execuție pentru toți utilizatorii.   * Fișierul ''​bon''​ să aiba permisiuni de execuție pentru toți utilizatorii.
-====Folosirea find =====+ 
 +==== g) Folosirea find ====
  
 Folosiți comanda ''​find''​ pentru a parcurge ierarhia creată mai sus. Folosiți comanda ''​find''​ pentru a parcurge ierarhia creată mai sus.
Line 230: Line 198:
  
 Folosiți comanda ''​find''​ pe ierarhia de mai sus pentru a afișa doar intrările care încep cu litera ''​a''​. Folosiți comanda ''​find''​ pe ierarhia de mai sus pentru a afișa doar intrările care încep cu litera ''​a''​.
 +
 /* /*
- +==== h) Scenariu de schimbare permisiuni ====
-===== Scenariu de schimbare permisiuni ====+
  
 Le dăm o arhivă cu mai multe fișiere, o bușesc cu 777 și apoi să repare; un scenariu complet de schimbare de permisiuni și ownership; o arhivă cu DokuWiki deja configurat Le dăm o arhivă cu mai multe fișiere, o bușesc cu 777 și apoi să repare; un scenariu complet de schimbare de permisiuni și ownership; o arhivă cu DokuWiki deja configurat
 +*/
 +
 +===== 03. Vim Sk1llz =====
 +
 +<note important>​
 +Dacă exercițiile de mai jos vă iau mai mult timp decât este indicat, să faceți o trecere prin tutorialul de Vim: adică să porniți comanda ''​vimtutor''​.
 +
 +Puteți să ignorați scrierea cu diacritice.
 +</​note>​
 +
 +În **30 de secunde**, porniți Vim pentru a crea/edita fișierul ''​poveste.txt'',​ scrieți textul %%"A fost o dată ca niciodată că dacă nu ar fi nu s-ar povesti."​%% și salvați textul și părăsiți editorul.
 +
 +În **120 de secunde**, porniți Vim scrieți textul de mai sus în fișierul ''​capitolul-01.txt''​ și apoi tot în Vim (fără a părăsi editorul scrieți textul %%"Va urma"​%% în fișierul ''​capitolul-02.txt''​ și textul %%"​Sfârșit"​%% în fișierul ''​capitolul-03.txt''​.
 +
 +Descărcați fișierul de mai jos (''​mesaj.txt''​) și, în **180 de secunde** editați-l în Vim pentru a obține forma de dedesubt (''​mesaj-modificat.txt''​). Analizați ce trebuie să faceți înainte de a contoriza editarea.
 +
 +<file txt mesaj.txt>​
 +====== Împărțire semigrupe ======
 +
 +Pentru împărțirea orelor de laborator de GSR, vom deschide două thread-uri pe [[http://​cs.curs.pub.ro/​2015/​mod/​forum/​view.php?​id=654|forumul de discuții generale]]. Pe fiecare thread vă veți putea înscrie la unul dintre cele două intervale de laborator:
 +  * joi, 16:​00-18:​00,​ sala EG106
 +  * joi, 20:​00-22:​00,​ sala EG106
 +
 +Vom deschide thread-urile miercuri, 14 octombrie 2015, la ora 12:30 (la prânz).
 +
 +Limita de locuri pe laborator este de 18 persoane. Va fi "first post, first served"​.
 +</​file>​
 +
 +<file txt mesaj-modificat.txt>​
 +--- Împărțire semigrupe
 +
 +Pentru împărțirea orelor de laborator de GSR, vom deschide două fire de discuție pe forumul de discuții generale. Pe fiecare thread vă veți putea înscrie la unul dintre cele două intervale de laborator:
 +  * vineri, 16-12, sala EG306
 +  * vineri, 20-22, sala EG306
 +
 +Vom deschide thread-urile miercuri, 14 noiembrie 2015, la ora 19:30 (pe seară).
 +
 +Limita de locuri pe laborator este de 12 persoane. Va fi "​primul venit, primul servit"​.
 +</​file>​
 +
 +În **30 de secunde** copiați codul de [[https://​github.com/​razvand/​snippets/​blob/​master/​mmap/​dual-mapping.c|aici]] în Vim într-un fișier numit ''​dual-mapping.c''​ și asigurând indentarea codului.
 +
 +===== 04. Procese =====
 +
 +==== a) Afișare procese ====
 +
 +Dorim să afișăm anumite procese într-o anumită ordine.
 +
 +Folosiți ''​ps''​ cu opțiunea corectă pentru a afișa procesele care aparțin utilizatorului ''​student''​. Căutați în pagina de manual după șirul //user//.
 +
 +Pentru procesele de mai sus afișați PID-ul, comanda completă (cale completă cu parametri), timpul de rulare pe procesor, memoria RAM consumată (RSS -- //resident set size//). Pentru a selecta doar anumite atribute ale unui proces folosiți comanda ''​ps''​ cu parametrul ''​-o''​ urmat de opțiunile specifice; urmăriți și pagina de manual.
 +
 +Sortați procesele de mai sus în ordinea inversă a memoriei RAM consumate (RSS -- //resident set size//). Adică cele mai consumatoare de memorie procese la început.
 +
 +Din procesele sortate rețineți doar primele 10 intrări. Să afișați și antetul oferit de ''​ps''​.
 +
 +==== b) Procesele unui utilizator ====
 +
 +Dorim să lucrăm cu grupuri de procese care țin de un utilizator.
 +
 +Pe un tab nou de terminal adăugăm utilizatorul ''​ana''​ folosind comenzile<​code>​
 +$ sudo su
 +# adduser ana
 +[...]
 +# exit            # sau puteti folosi combinatia de taste Ctrl+d
 +$
 +</​code>​
 +
 +În acel tab nou ne autentificăm ca utilizatorul ''​ana''​ folosind comanda<​code>​
 +$ su - ana
 +</​code>​
 +
 +În cel nou tab, din contul utilizatorului ''​ana'',​ porniți în background mai multe procese: ''​sleep'',​ ''​emacs'',​ ''​gedit''​ etc.
 +
 +Din primul tab, folosiți, ca ''​root'',​ ''​pkill''​ pentru o încheia execuția proceselor utilizatorului ''​ana'';​ adică rulați ''​%%sudo pkill ...%%''​ (cu ce opțiuni sunt utile). Este posibil să fie necesar să folosiți semnalul ''​SIGKILL''​ ca să fie garantată încheierea execuției.
 +
 +<note tip>
 +În locul comenzii ''​pkill''​ puteți folosi comanda ''​killall''​ cu opțiunile potrivite.
 +</​note>​
 +
 +==== c) Procesele unui terminal ====
 +
 +Pe un tab nou de terminal porniți în background procese ca utilizatorul ''​root'',​ ''​student''​ și ''​ana''​.
 +
 +În acel tab aflăm care este identificatorul terminalului curent folosind comanda<​code>​
 +$ tty
 +</​code>​
 +
 +Din primul tab, folosiți, ca ''​root'',​ ''​pkill''​ pentru o încheia execuția proceselor de pe al doilea terminal; adică rulați ''​%%sudo pkill ...%%''​ (cu ce opțiuni sunt utile). Este posibil să fie necesar să folosiți semnalul ''​SIGKILL''​ ca să fie garantată încheierea execuției.
 +
 +===== 05. Investigarea descriptorilor de fișiere =====
 +
 +==== a) lsof ====
 +
 +Ne interesează pentru un proces dat care sunt fișierele deschise de un proces, sau, de fapt, descriptorii de fișier deschiși de un proces. De exemplu, dacă dorim să identificăm descriptorii de fișier deschiși de shell-ul curent folosim comanda<​code>​
 +lsof -p $$
 +</​code>​
 +
 +În fișierele deschise vom putea vedea descriptorii de fișier standard (''​0'',​ ''​1''​ sau ''​2''​). Observăm că acești descriptori referă un dispozitiv de tip terminal, de forma ''/​dev/​pts/​0''​ pentru că astfel interacționează procesul cu utilizatorul.
 +
 +Dacă dorim să vizualizăm descriptorii deschiși de un proces daemon, de exemplu ''​sshd''<​code>​
 +sudo lsof -p $(pidof sshd)
 +</​code>​
 +
 +Observăm și descriptorii de fișier standard și sockeții TCP deschiși (2 sockeți care ascultă pe portul 22 atât pe IPv4 cât și pe IPv6).
 +
 +Folosiți ''​lsof''​ pentru a investiga și descriptorii deschiși de procesul ''​init''​.
 +
 +==== b) Investigarea redirectării ====
 +
 +Putem folosi ''​lsof''​ pentru a verifica modul în care redirectarea afectează descriptorii unui proces.
 +
 +Într-un tab de terminal porniți un proces ''​sleep''​ folosind comanda<​code>​
 +sleep 100
 +</​code>​
 +În alt tab, pentru a investiga descriptorii procesului ''​sleep''​ folosim comanda<​code>​
 +lsof -p $(pidof sleep)
 +</​code>​
 +
 +Observăm că descriptorii standard referă terminalul în care a fost rulată comanda, moșteniți de la terminalul din shell-ul folosit.
 +
 +Acum să invesigăm procesul ''​sleep''​ cu redictări în diverse fișiere. Folosiți comanda<​code>​
 +sleep 100 < /dev/zero > /dev/null 2> error.txt
 +</​code>​
 +
 +Folosim comanda ''​lsof''​ anterioară pentru a investiga descriptorii procesului ''​sleep''​. Putem observa unde pointează descriptorii standard de fișier pentru procesul pornit.
 +
 +==== c) Investigarea operatorului pipe ====
 +
 +Folosiți ''​lsof''​ pentru a investiga descriptorii deschiși de cele trei procese ''​sleep''​ din cadrul comenzii<​code>​
 +sleep 100 | sleep 120 | sleep 140
 +</​code>​
 +
 +Urmăriți ce înseamnă operatorul pipe (''​|''​) si ce impact are asupra descriptorilor de fișier ai unui proces.
 +
 +==== d) netstat și ss ====
 +
 +Pentru a determina sockeții deschiși în cadrul sistemului folosim comanda ''​netstat''​. Modurile uzuale de lucru ale comenzii sunt:<​code>​
 +netstat -tlpn
 +netstat -tpn
 +netstat -ulpn
 +netstat -lpn
 +</​code>​
 +
 +Aceleași opțiuni sunt folosite și pentru comanda ''​ss''​.
 +
 +Urmăriți și din output-ul comenzilor și din pagina de manual ce efect au fiecare dintre comenzile de mai sus.
 +
 +==== e) netcat ====
 +
 +Dacă dorim deschiderea unui server/​serviciu pe sistemul curent putem folosi comanda<​code>​
 +netcat -l -p 12345
 +</​code>​
 +Comanda de mai sus va deschide un server TCP pe portul ''​12345''​.
 +
 +Pentru a deschide o conexiune către acest serviciu folosim comanda<​code>​
 +netcat <​hostname>​ 12345
 +</​code>​
 +unde ''<​hostname>''​ este numele stației sau adresa IP a stației. Pentru o conexiune pe stația locală folosiți comanda<​code>​
 +netcat localhost 12345
 +</​code>​
 +
 +Investigați folosind comanda ''​netstat''​ sau comanda ''​s''​ conexiunea astfel deschisă.
 +
 +==== f) SimpleHTTPServer ====
 +
 +Pachetul ''​python''​ vine cu un server web simplu care poate fi pornit pentru a servi fisiere din directorul curent. Pentru pornirea sa folositi comanda<​code>​
 +python -m SimpleHTTPServer
 +</​code>​
 +
 +Investigati folosind ''​netstat''​ si ''​s''​ portul pe care asculta conexiuni (afisat si la pornirea sa) si pointati browser-ul la URL-ul http://​localhost:​8000/​ pentru a putea urmari fisierele servite. Un coleg poate sa se conecteze la acest server web folosind in loc de ''​localhost''​ adresa IP a statiei voastre.
 +
 +/*
 +
 +==== g) Obținerea unui clip de pe YouTube din Firefox ====
 +
 +<​note>​
 +Exercițiul de mai jos poate să nu meargă pe anumite versiuni de Firefox sau pe anumite clipuri. În general funcționează pe clipuri care folosesc plugin-ul Flash pentru rendering.
 +</​note>​
 +
 +In momentul in care un browser acceseaza un clip video acesta incepe sa faca streaming si sa descarce fisierul aferent in sistemul local de fisiere. Firefox descarca clip-urile video in directorul ''/​tmp'',​ dar le sterge acel ''​hard link''​ si nu pot fi obtinute direct. Putem insa sa le determinam si obtinem prin investigatie si folosind ''​lsof''​ sau ''/​proc''​.
 +
 +Pentru aceasta, accesati folosind Firefox un clip video de pe YouTube. Clipul va fi streamuit si puteti observa cum se descarca.
 +
 +Pentru a vedea care sunt fisierele deschise de Firefox avem doua optiuni date de cele doua comenzi de mai jos:<​code>​
 +lsof -p $(pidof firefox)
 +ls /​proc/​$(pidof firefox)/fd
 +</​code>​
 +
 +Printre fisierele deschise de procesul firefox putem observa si cel putin un fisier care se gaseste in ''/​tmp'',​ fisier care insa nu exista. Avem insa un descriptor catre el; a fost sters hard link-ul din ''/​tmp''​ dar nu si fisierul efectiv. Pentru a recupera fisierul, daca descriptorul sau este ''<​FD>''​ vom folosi comanda<​code>​
 +cp /​proc/​$(pidof firefox)/​fd/<​FD>​ myclip
 +</​code>​
 +
 +Folosim comanda<​code>​
 +vlc myclip
 +</​code>​
 +pentru a porni clipul.
  
 */ */
-===== Instalat, dezinstalat de pachete =====+ 
 +===== 06. Instalat, dezinstalat de pachete =====
  
 Dezinstalați pachetul ''​zoo''​ instalat anterior. Folosiți opțiunea de ''​purge''​ pentru a șterge și fișierele de configurare. Dezinstalați pachetul ''​zoo''​ instalat anterior. Folosiți opțiunea de ''​purge''​ pentru a șterge și fișierele de configurare.
Line 244: Line 410:
  
 Folosiți comanda ''​%%dpkg -L ...%%''​ pentru a afișa conținutul celor 2 pachete proaspăt instalate. Folosiți comanda ''​%%dpkg -L ...%%''​ pentru a afișa conținutul celor 2 pachete proaspăt instalate.
 +
 ===== Bonus: find avansat ===== ===== Bonus: find avansat =====
  
Line 253: Line 420:
   - Folosiți ''​find''​ pentru a afișa fișierele din ierarhia din subdirectoare care **nu** au extensia ''​.sh''​. (Hint: ''​OPERATORS''​ în pagina de manual)   - Folosiți ''​find''​ pentru a afișa fișierele din ierarhia din subdirectoare care **nu** au extensia ''​.sh''​. (Hint: ''​OPERATORS''​ în pagina de manual)
   - Folosiți ''​find''​ pentru a afișa fișierele din ierarhia din subdirectoare cu drept de execuție care **nu** au extensia ''​.sh''​. (Hint: ''​-perm''​)   - Folosiți ''​find''​ pentru a afișa fișierele din ierarhia din subdirectoare cu drept de execuție care **nu** au extensia ''​.sh''​. (Hint: ''​-perm''​)
 +
 ===== Bonus: dpkg ===== ===== Bonus: dpkg =====
  
Line 264: Line 432:
  
 Folosiți ''​apt-file''​ pentru a afla pachetul/​pachetele care conțin header-ul ''​gdk.h''​. Folosiți ''​apt-file''​ pentru a afla pachetul/​pachetele care conțin header-ul ''​gdk.h''​.
-*/ 
gsr/laboratoare/laborator-01.1475758163.txt.gz · Last modified: 2016/10/06 15:49 by george.milescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0