This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
advanced-unix:capitole:capitol-03 [2016/05/10 07:42] razvan [Subiecte abordate] |
advanced-unix:capitole:capitol-03 [2016/05/10 13:07] (current) razvan [Folosirea supervisord] |
||
---|---|---|---|
Line 15: | Line 15: | ||
* Folosirea eficientă a shell-lui: scurtături readline, shell history (reverse search, ''Alt+.'', ''%%!!%%'') | * Folosirea eficientă a shell-lui: scurtături readline, shell history (reverse search, ''Alt+.'', ''%%!!%%'') | ||
+ | * În general, nu se prelucrează output-ul comenzii ''ps'' | ||
+ | * Selecția de informații pe orizonatală (ce procese?) față de selecția pe verticală (ce atribute?) | ||
* ''\time'' vs ''time'' | * ''\time'' vs ''time'' | ||
* ''killall'' vs ''pkill'' | * ''killall'' vs ''pkill'' | ||
Line 25: | Line 27: | ||
* ''nohup'', ''screen'', ''tmux'' | * ''nohup'', ''screen'', ''tmux'' | ||
* ''supervisord'' | * ''supervisord'' | ||
+ | |||
===== Resurse utile ===== | ===== Resurse utile ===== | ||
+ | Descărcați arhiva de la adresa http://swarm.cs.pub.ro/~razvan/tmp/packages.zip. Copiați-o în mașina virtuală, decomprimați-o și instalați pachetele din cadrul acesteia. | ||
+ | |||
+ | După ce ați decomprimați arhiva instalați pachetele folosind comezi precum | ||
+ | <code> | ||
+ | sudo dpkg -i sysstat_11.0.1-1_i386.deb | ||
+ | </code> | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
+ | ==== Demo: Folosirea eficientă a shell-ului ==== | ||
+ | |||
+ | Folosirea scurtăturilor din biblioteca readline | ||
+ | |||
+ | Folosirea ''Alt+.'' (sau ''$_'') | ||
+ | |||
+ | Folosirea istoriei (''Ctrl+r'', ''%%!!%%'') | ||
+ | |||
+ | ==== Demo: Lucru cu procese ==== | ||
+ | |||
+ | Afișați apoi lista proceselor tuturor utilizatorilor. | ||
+ | |||
+ | Obțineți o listare arborescentă a proceselor folosind comanda {{{pstree}}} și apoi obțineți o listare similară (arborescentă) folosind comanda ''ps''. (**Indiciu**: Căutați după șirul //forest// în pagina de manual a comenzii ''ps''). | ||
+ | |||
+ | Afisați toate procesele care **nu** apartin utilizatorului {{{root}}}. (**Indiciu**: Căutați în pagina de manual după șirul ''negate'') | ||
+ | |||
+ | 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 5 intrări. (**Indiciu**: Folosiți opțiunea ''%%--sort%%'' a comenzii ''ps''. | ||
+ | |||
+ | ==== 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 ''training''. 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. | ||
+ | |||
+ | Afișați cele mai consumatoare de memorie 5 procese din sistem care **nu** aparțin utilizatorului ''root''. | ||
+ | |||
+ | Pentru afișarea de mai sus, folosiți opțiunea de ascundere a header-ului în afișarea comenzii ''ps''. | ||
+ | |||
+ | Afisați pentru toate procesele utilizatorului ''training'' următoarele atribute: pid, ppid, niceness-ul, comanda cu ajutorul căreia a fost lansat procesul, numărul de fire de execuție (//thread//-uri) din procesul respectiv. Pentru a găsi numărul de fire de execuție (//thread//-uri) din procesul respectiv, căutați după șirul //number// în pagina de manual a comenzii ''ps''. | ||
+ | |||
+ | ==== 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''. | ||
+ | |||
+ | 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. | ||
+ | |||
+ | ==== 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. | ||
+ | |||
+ | ==== Demo: Investigarea unui proces ==== | ||
+ | |||
+ | Folosirea ''lsof'' pentru a investiga redirectare și pipe din cadrul unui proces. | ||
+ | |||
+ | Folosirea ''time'' pentru a afla informații legate de încheierea rulării unui proces. | ||
+ | |||
+ | ==== Folosirea nohup ==== | ||
+ | |||
+ | Ne propunem să pornim un tracker de BitTorrent în background, folosind ''nohup''. Pentru început porniți tracker-ul în foreground ca să acomodați cu modul său de pornire. | ||
+ | |||
+ | <note tip> | ||
+ | Pentru pornirea tracker-ului folosiți comanda<code> | ||
+ | bttrack --dfile bttrack.dfile --port 12345 | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | Închideți tracker-ul (folosind ''Ctrl+c'') și porniți-l în background folosind comanda ''nohup''. Redirectați output-ul tracker-ului în fișierul cu numele ''bttrack.log''. | ||
+ | |||
+ | Închideți shell-ul din care ați lansat tracker-ul. Afișați fișierele deschise de procesul tracker folosind comanda ''lsof''. | ||
+ | |||
+ | Listați serviciile sistemului și verificați că procesul tracker este pornit folosind comanda<code> | ||
+ | netstat -tlpn | ||
+ | </code> | ||
+ | |||
+ | ==== Folosirea tmux ==== | ||
+ | |||
+ | Porniți într-un ecran ''tmux'' un tracker BitTorrent, un server HTTP Python, un editor Vim sau Emacs și încă un ecran pentru comenzi. | ||
+ | |||
+ | <note tip> | ||
+ | Pentru pornirea ''tmux'' folosiți comanda | ||
+ | <code> | ||
+ | tmux | ||
+ | </code> | ||
+ | |||
+ | Pentru a deschide ecrane noi în ''tmux'' folosiți combinația de taste ''Ctrl+b'' și apoi separat ''c''. Pentru a tranzita între ferestre folosiți combinațiile de taste ''Ctrl+b'' urmat de ''n'' și ''Ctrl+b'' urmat de ''p''. Pentru a închide un ecran închideți shell-ul folosind ''Ctrl+d'' sau ''exit'' sau ''logout''. | ||
+ | |||
+ | Pentru a vă detașa de ''tmux'' folosiți combinația de taste ''Ctrl+b'' urmat de ''d''. Pentru a vă reatașa la ''tmux'' folosiți comanda<code> | ||
+ | tmux attach | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | <note tip> | ||
+ | Pentru a porni un server HTTP Python folosiți comanda | ||
+ | <code> | ||
+ | python -m SimpleHTTPServer | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | ==== Folosirea supervisord ==== | ||
+ | |||
+ | Folosiți ''supervisord'' pentru a porni un tracker de BitTorrent cu ajutorul comenzii ''bttrack''. | ||
+ | |||
+ | <note tip> | ||
+ | Urmăriți exemplele de configurare din link-urile de mai jos: | ||
+ | * https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps | ||
+ | * https://serversforhackers.com/monitoring-processes-with-supervisord | ||
+ | </note> |