Differences

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

Link to this comparison view

gsr:laboratoare:laborator-01 [2016/10/11 15:36]
alexandru.carp
gsr:laboratoare:laborator-01 [2016/10/13 20:27] (current)
alexandru.carp
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 199: Line 199:
 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 ==== ==== h) 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
 +*/
  
-===== Vim Sk1llz =====+===== 03. Vim Sk1llz =====
  
 <note important>​ <note important>​
Line 243: Line 245:
 Î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. Î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 =====
  
-===== Investigarea proceselor sistemului ===== +==== a) Afișare procese ​====
- +
-=== Afișare procese ===+
  
 Dorim să afișăm anumite procese într-o anumită ordine. Dorim să afișăm anumite procese într-o anumită ordine.
Line 258: Line 259:
 Din procesele sortate rețineți doar primele 10 intrări. Să afișați și antetul oferit de ''​ps''​. Din procesele sortate rețineți doar primele 10 intrări. Să afișați și antetul oferit de ''​ps''​.
  
-=== Procesele unui utilizator ===+==== b) Procesele unui utilizator ​====
  
 Dorim să lucrăm cu grupuri de procese care țin de un utilizator. Dorim să lucrăm cu grupuri de procese care țin de un utilizator.
Line 282: Line 283:
 </​note>​ </​note>​
  
-=== Procesele unui terminal ===+==== c) Procesele unui terminal ​====
  
 Pe un tab nou de terminal porniți în background procese ca utilizatorul ''​root'',​ ''​student''​ și ''​ana''​. Pe un tab nou de terminal porniți în background procese ca utilizatorul ''​root'',​ ''​student''​ și ''​ana''​.
Line 292: Line 293:
 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. 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.
  
-==== Investigarea descriptorilor de fișiere ====+===== 05. Investigarea descriptorilor de fișiere ​=====
  
-=== lsof ===+==== 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>​ 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>​
Line 310: Line 311:
 Folosiți ''​lsof''​ pentru a investiga și descriptorii deschiși de procesul ''​init''​. Folosiți ''​lsof''​ pentru a investiga și descriptorii deschiși de procesul ''​init''​.
  
-=== Investigarea redirectării ===+==== b) Investigarea redirectării ​====
  
 Putem folosi ''​lsof''​ pentru a verifica modul în care redirectarea afectează descriptorii unui proces. Putem folosi ''​lsof''​ pentru a verifica modul în care redirectarea afectează descriptorii unui proces.
Line 329: Line 330:
 Folosim comanda ''​lsof''​ anterioară pentru a investiga descriptorii procesului ''​sleep''​. Putem observa unde pointează descriptorii standard de fișier pentru procesul pornit. Folosim comanda ''​lsof''​ anterioară pentru a investiga descriptorii procesului ''​sleep''​. Putem observa unde pointează descriptorii standard de fișier pentru procesul pornit.
  
-=== Investigarea operatorului pipe ===+==== c) Investigarea operatorului pipe ====
  
 Folosiți ''​lsof''​ pentru a investiga descriptorii deschiși de cele trei procese ''​sleep''​ din cadrul comenzii<​code>​ Folosiți ''​lsof''​ pentru a investiga descriptorii deschiși de cele trei procese ''​sleep''​ din cadrul comenzii<​code>​
Line 337: Line 338:
 Urmăriți ce înseamnă operatorul pipe (''​|''​) si ce impact are asupra descriptorilor de fișier ai unui proces. Urmăriți ce înseamnă operatorul pipe (''​|''​) si ce impact are asupra descriptorilor de fișier ai unui proces.
  
-=== netstat și ss ===+==== 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>​ Pentru a determina sockeții deschiși în cadrul sistemului folosim comanda ''​netstat''​. Modurile uzuale de lucru ale comenzii sunt:<​code>​
Line 350: Line 351:
 Urmăriți și din output-ul comenzilor și din pagina de manual ce efect au fiecare dintre comenzile de mai sus. Urmăriți și din output-ul comenzilor și din pagina de manual ce efect au fiecare dintre comenzile de mai sus.
  
-=== netcat ===+==== e) netcat ​====
  
 Dacă dorim deschiderea unui server/​serviciu pe sistemul curent putem folosi comanda<​code>​ Dacă dorim deschiderea unui server/​serviciu pe sistemul curent putem folosi comanda<​code>​
Line 366: Line 367:
 Investigați folosind comanda ''​netstat''​ sau comanda ''​s''​ conexiunea astfel deschisă. Investigați folosind comanda ''​netstat''​ sau comanda ''​s''​ conexiunea astfel deschisă.
  
-=== SimpleHTTPServer ===+==== 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>​ 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>​
Line 373: Line 374:
  
 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. 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.
-==== Obținerea unui clip de pe YouTube din Firefox ====+ 
 +/* 
 + 
 +==== g) Obținerea unui clip de pe YouTube din Firefox ====
  
 <​note>​ <​note>​
Line 397: Line 401:
 pentru a porni clipul. pentru a porni clipul.
  
-==== Investigarea dinamică a unui proces ====+*/
  
-=== strace ​==+===== 06. Instalat, dezinstalat de pachete =====
- +
-Comanda ''​strace''​ (//system call trace//) ne este utilă pentru a investiga ce apeluri de sistem efectuează o comandă dată și ce parametri folosește. +
- +
-De exemplu, dacă dorim să urmărim apelurile de sistem efectuate de comanda ''​ls''​ folosim comanda<​code>​ +
-strace ls +
-</​code>​ +
- +
-Output-ul fiind destul de vast, ne preocupă să obținem doar informații despre fișierele deschide. Pentru aceasta folosim opțiunea ''​-e''​ a comenzii ''​strace''​ cu ajutorul căreia filtrăm tipuri de operații. În cazul de față folosim comanda<​code>​ +
-strace -e file ls +
-</​code>​ +
- +
-Observăm fișierele deschise. +
- +
-Pentru a vedea diferența între comenzile ''​ls''​ și ''​ls -l''​ folosim comanda<​code>​ +
-strace -e file ls -l +
-</​code>​ +
- +
-Observăm că acum deschise și fișiere precum ''/​etc/​passwd''​ și ''/​etc/​group''​ pentru a determina username-ul și grupul aferent UID-ului și GID-ului din fișier. +
- +
-=== Informații despre rețea === +
- +
-Comanda<​code bash> +
-netstat -s +
-</​code>​ +
-afișează informații statistice despre pachetele sistemului. Ne interesează să știm de unde obține comanda respectivă informațiile. +
- +
-Rulați comanda<​code bash> +
-strace -e open netstat -s +
-</​code>​ +
-pentru a afla ce fișiere deschide comanda la rulare. +
- +
-Care fișier este citit pentru a afla informații despre pachetele primite (//packets received//​)?​ Vizualizați acel fișier (luați-o pe încercate). +
- +
-=== Atașarea la un proces === +
- +
-''​strace''​ permite investigarea unui proces aflat deja în rulare. Numim acest lucru atașarea la un proces. Putem astfel investiga apelurile de sistem efectuate de un proces aflat în rulare și diagnostica anumite probleme ale acestuia. Pentru a ne putea atașa la un proces avem nevoie de PID-ul acestuia. +
- +
-Deschideți două tab-uri de terminal (adică să aveți două deschise; dacă aveți deja unul mai deschideți încă unul). +
- +
-<note tip> +
-Pentru a deschide un tab nou de terminal în GNOME Terminal puteți folosi combinația de taste ''​Ctrl+Shift+t''​. +
-</​note>​ +
- +
-Într-unul dintre tab-uri aflați PID-ul procesului curent (a shell-ului) folosind comanda<​code>​ +
-echo $$ +
-</​code>​ +
- +
-Pentru a investiga shell-ul, din celălalt tab folosim comanda<​code>​ +
-strace -p <​PID>​ +
-</​code>​ +
-unde ''<​PID>''​ este PID-ul shell-ului determinat mai sus. +
- +
-Acum dacă în celălalt shell rulăm comenzi vom vedea ce se întâmplă în cadrul shell-ului. +
- +
-Observăm că se folosește apelul de sistem ''​clone''​ pentru a crea un nou proces, dar nu apare apelul de sistem ''​execve''​ care înlocuiește imaginea de proces. Pentru a vedea aceste apeluri de sistem trebuie să precizăm comenzii ''​strace''​ să investigheze și procesele copil folosind opțiunea ''​-f''​ (de la ''​follow children''​). Astfel, vom putea investiga folosind comanda<​code>​ +
-strace -f -p <​PID>​ +
-</​code>​ +
- +
-Dacă dorim să vedem doar operațiile cu procese și fișiere, de exemplu, vom folosi pentru investigație comanda<​code>​ +
-strace -f -e process,​file -p <​PID>​ +
-</​code>​ +
- +
-===== 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 469: 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 478: 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 =====
  
gsr/laboratoare/laborator-01.1476189399.txt.gz · Last modified: 2016/10/11 15:36 by alexandru.carp
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