Differences

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

Link to this comparison view

uso:cursuri:curs-03 [2020/10/26 17:46]
ebru.resul
uso:cursuri:curs-03 [2022/10/17 14:23] (current)
sergiu.weisz
Line 1: Line 1:
-====== Curs 03 - Utilizatori ​======+====== Curs 03 - Procese =======
  
-  ​* [[https://drive.google.com/​file/d/1_qHyNS3pkWuTHeizJtbIL26b_1lp_TlK/view?​usp=sharing| Slide-uri curs]] + 
-  * [[https://​drive.google.com/​open?​id=10gm7b808_DQM_crPOzDQ6HYHv97790WI| Handout 3on1 and notes space]] + 
-  * [[https://​drive.google.com/​open?​id=1oUae3md2_7DTQa6zlhloZK2eneQVKsQc| Handout 6on1]] +  ​* [[https://docs.google.com/​presentation/d/1iaMbENys5IV8r74TCFsKeFpvQGtfYxjW/edit?​usp=sharing&​ouid=108131427433094834232&​rtpof=true&​sd=true| Slide-uri curs]]
-  * **Cuvinte cheie**: permisiuni, acces informații,​ root, parole, privilegii, activități,​ operații, autentificare +
-  * Suport de curs +
-    * [[http://​elf.cs.pub.ro/​uso/​res/​carte/​uso_cap-05-user.pdf|Capitolul 5 din carte: Utilizatori]]+
  
 /* /*
  
-====== Curs 03 Dezvoltarea programelor =======+  * [[https://​drive.google.com/​file/​d/​1WnFIP81uNTMC6uxqp0NXOTe8zoirPKFn/​view?​usp=sharing| Handout 3on1 and notes space]] 
 +  * [[https://​drive.google.com/​file/​d/​1blGtQjHNIMWK-6fpIOGRV72A2rGyZXS1/​view?​usp=sharing | Handout 6on1]]
  
-  ​[[http://​elf.cs.pub.ro/​uso/​res/​cursuri/​curs-03/​curs-03-handout.pdf | Slide-uri curs]] +*/ 
-  * [[http://​elf.cs.pub.ro/​uso/​res/​cursuri/​curs-03/​curs-03-handout-4on1-notes.pdf | Handout 4on1 and notes space]] + 
-  * [[http://​elf.cs.pub.ro/​uso/​res/​cursuri/​curs-03/​curs-03-handout-8on1.pdf | Handout 8on1]] +  * **Cuvinte cheie**: ​resurseinstrucțiuniatributepstopshelinitfg, bg, descriptor de fișierekillkillallsemnaleinteracțiunidaemoni 
-  * **Cuvinte cheie**: ​cod sursă (//source code//)cod mașină (//machine code//)//coding style//editorIDEpachet softwarefișier executabil, fișier obiectcompilarelinkinglimbajul C''​gcc''​modularizare,​ sistem de build, ''​make'',​ ''​Makefile''​ + 
-  ​* **Suport de curs** + 
-    * [[http://books.google.com/books?​id=_JFGzyRxQGcC ​Introducere în sisteme ​de operare]] +  * Suport de curs 
-      [[http://​books.google.com/​books?​id=_JFGzyRxQGcC&​pg=PA319 | Capitolul 11]] +    * [[https://github.com/systems-cs-pub-ro/​carte-uso/​releases ​Utilizarea sistemelor ​de operare]] 
-      * [[http://​books.google.com/​books?​id=_JFGzyRxQGcC&​pg=PA469 | Capitolul 14]]+        Secțiunea 4 - Procese
  
 <​HTML>​ <​HTML>​
   <​center>​   <​center>​
-    <iframe src="​https://​docs.google.com/​viewer?​url=http:​//elf.cs.pub.ro/uso/​res/​cursuri/​curs-03/curs-03-handout.pdf&embedded=true" width="​600" height="​480" ​style="border: none;"> +    <iframe src="​https://​docs.google.com/​presentation/d/e/2PACX-1vT7_fAoDWKrQFc6867VLUxCOiwv4L0aFTjCxoenEEyK3rqNeoqQkXLIB04oJeokzw/embed?​start=false&loop=false&​delayms=3000"​ frameborder="​0" width="​480" height="​389" ​allowfullscreen="true" mozallowfullscreen="​true"​ webkitallowfullscreen="​true"></​iframe>​
-    ​</​iframe>​+
   </​center>​   </​center>​
 </​HTML>​ </​HTML>​
- 
-*/ 
  
 ====== Demo ======= ====== Demo =======
  
-Cuvantul utilizator defineste in primul rand persoana fizica care dorește să acceseze resursele și funcționalitățile unui sistem de calcul. Din punct de vedere al sistemului de operare însă, utilizatorul presupune existența unui cont de utilizator prin intermediul căruia sunt accesate resursele puse acestuia la dispozitie în sistem (de exemplu fișierele) si care poate crea procese. ​+==== Uptime ====
  
-Clasificare:​ +Comanda uptime se folosește dacă dorim să aflăm ​de cât timp este aprins (rulează) sistemul. Se afișează timpul curent, starea sistemului (up), timpul ​de cat timp rulează, numărul ​de utilizatori logați pe sistem și media încărcăturii în ultimele 1, 5 si 15 minute.
-  *Utilizatori ​de sistem – permit crearea ​de procese si detin resurse precum fisiere +
-  *Utilizatori ​de aplicatii – permit accesul la resursele gestionate de aplicatii ​si nu de sistemul de operare+
  
-Un prompt BASH default arată utilizatorul care s-a logat pe sesiunea shell curentă. În acest caz, utilizatorul este student. 
 <​code>​ <​code>​
-student@uso:​~$+student@uso:​~/uso-labuptime 
 + ​13:​37:​20 up  1:34,  1 user,  load average: 0,05, 0,16, 0,10
 </​code>​ </​code>​
  
-Informațiile despre utilizatori sunt stocate in fișierul ''/​etc/​passwd''​ +Se poate folosi tagul -p pentru un format mai frumos, mai lizibil (pretty), tagul -s pentru a vedea ora de cand este pornit sistemul într-o mod mai exact (specific)
-<​code>​ +
-student@uso:​~$ cat /​etc/​passwd +
-root:​x:​0:​0:​root:/​root:/​bin/​bash +
-mihai:​x:​1001:​1001:/​home/​mihai:/​bin/​bash +
-maria:​x:​1002:​1002:/​home/​maria:/​bin/​bash +
-</​code>​+
  
-Fiecare utilizator este identificat în mod unic în funcție de UID (User Identifier). De asemenea, un utilizator ​ are atribuit si un director ''​home''​. Pentru a accesa directorul home, folosim caracterul ''​~'',​ acesta substituind calea către directorul home al utilizatorului curent: 
 <​code>​ <​code>​
-student@uso:​~$ ​cd ~ +student@uso:​~/uso-labuptime -p 
-student@uso:​~$ ​pwd +up 1 hour, 44 minutes 
-/​home/​student+student@uso:​~/uso-labuptime -s 
 +2020-10-14 12:02:26
 </​code>​ </​code>​
-  
-Observăm că directorul home al utilizatorului student este ''/​home/​student''​. Utilizatorul ''​root''​ (utilizatorul privilegiat in Unix) are UID-ul 0 si home-ul in ''/​root''​. 
-  
-Pentru ușurința în realizarea unor configurații in sistem, utilizatorii pot fi organizați în grupuri. Un grup poate contine mai multi utilizatori,​ iar un utilizator poate face parte din mai multe grupuri. Fiecare grup folosește un identificator unic numit GID (Group Identifier). GID-ul 0 este rezervat grupului utilizatorului root. 
-  
-Fisierul ''/​etc/​group''​ conține informatii despre toate grupurile din sistem. 
  
-Mai jos este un demo unde vor fi prezentate comenzile menționate în curs, alături de exemple de folosire a acestora.+==== fg & bg ====
  
-==== Comanda su ====+Un proces poate fi oprit, sau poate rula fie în foreground fie în background. Dacă procesul rulează în foreground, acesta va acapara terminalul actual până când se va termina, spre deosebire de un proces care rulează în background. Se trece un proces din foreground în background oprind prima dată procesul folosind combinatia de taste Ctrl + Z, iar apoi tastând comanda bg. Un proces poate fi adus din background în foreground folosind comanda fg. 
  
-Comanda su (substitute user) este folosita pentru a schimba utilizatorul current. +<​code>​ 
-<​code>​student@uso:​~$ ​su mihai +student@uso:​~$ ​sleep 100 
-Password+^Z 
-mihai@uso:/home/student$+[1]+  Stopped ​            ​ sleep 100 
 +student@uso:~$ jobs 
 +[1]+  Stopped ​            ​ sleep 100 
 +student@uso:~$ bg 
 +[1]+ sleep 100 & 
 +student@uso:~jobs 
 +[1]+  Running ​            ​ sleep 100 & 
 +student@uso:​~$ fg 
 +sleep 100
 </​code>​ </​code>​
  
-De cele mai multe ori, comanda su este folosita alaturi de sudo (substitute usor do) pentru a accesa un shell cu drepturi privilegiateDaca dupa utilitarul su nu se da un nume de utilizator atunci se va considera ca se doreste accesarea utilizatorului root. +<​note>​ Folosim utilitarul jobs pentru a vedea procesele pornite din terminalul actual și statusul lor.</note>
-<​code>​student@uso:​~$ sudo su +
-[sudo] password for student: +
-root@uso:/​home/​student#​ +
-</code>+
  
-Se mai poate folosi si comanda ''​sudo bash''​ pentru ​obtine un astfel ​de shell+Pentru ​verifica faptul că procesul din primul terminal (sleep 100) rulează în foreground, putem da diferite comenzi, precum ls, și observam ca acestea nu au niciun efect, terminalul fiind acaparat ​de procesul sleep 100
-Aceasta comanda va schimba directorul current în home-ul root-ului. ​         + 
-<​code>​student@uso:​~$ ​sudo bash +<​code>​ 
-[sudo] password for student: +student@uso:​~$ ​fg 
-root@uso:~# +sleep 100 
-</​code>​ +ls 
-  +ps 
-<​note>​Utilizatorul care executa comanda cu sudo trebuie sa aiba drept de sudo. Altfel se va obtine urmatorul rezultat.</​note>​ +tree
-<​code>​mihai@uso:​~$ sudo su +
-[sudo] password for mihai: +
-mihai is not in the sudoers file.  This incident will be reported. +
-mihai@uso:​~$+
 </​code>​ </​code>​
  
-==== Comenzile id și finger ​====+==== Semnale (Kill) ​====
  
-Comenzile id si finger ​se folosesc ​pentru a afla informatii despre un anumit utilizator+Comanda kill se folosește ​pentru a da semnale proceselor, nu neapărat sa le omoare, cum sugerează numele comenzii. Pentru a vedea ce comenzi putem trimite proceselor se folosește comanda kill -l. 
-<​code>​student@uso:​~$ ​id mihai + 
-uid=1001(mihaigid=1001(mihaigroups=1001(mihai+<​code>​ 
-student@uso:​~$ finger mihai +student@uso:​~$ ​kill -l 
-Login: mihai      Name: Mihai Popescu + 1SIGHUP ​    2SIGINT ​    3SIGQUIT ​    4) SIGILL ​    5) SIGTRAP 
-Directory: /​home/​mihai Shell:​ /bin/bash + 6) SIGABRT ​    7) SIGBUS ​    8) SIGFPE ​    9) SIGKILL ​   10) SIGUSR1 
-Office: 101 +11) SIGSEGV ​   12) SIGUSR2 ​   13) SIGPIPE ​   14) SIGALRM ​   15) SIGTERM 
-Never logged in. +16) SIGSTKFLT ​   17) SIGCHLD ​   18) SIGCONT ​   19) SIGSTOP ​   20) SIGTSTP 
-No mail. +21) SIGTTIN ​   22) SIGTTOU ​   23) SIGURG ​   24) SIGXCPU ​   25) SIGXFSZ 
-No Plan.+26) SIGVTALRM ​   27) SIGPROF ​   28) SIGWINCH ​   29) SIGIO    30) SIGPWR 
 +31) SIGSYS ​   34) SIGRTMIN ​   35) SIGRTMIN+1 ​   36) SIGRTMIN+2 ​   37) SIGRTMIN+3 
 +38) SIGRTMIN+4 ​   39) SIGRTMIN+5 ​   40) SIGRTMIN+6 ​   41) SIGRTMIN+7 ​   42) SIGRTMIN+8 
 +43) SIGRTMIN+9 ​   44) SIGRTMIN+10 ​   45) SIGRTMIN+11 ​   46) SIGRTMIN+12 ​   47) SIGRTMIN+13 
 +48) SIGRTMIN+14 ​   49) SIGRTMIN+15 ​   50) SIGRTMAX-14 ​   51) SIGRTMAX-13 ​   52) SIGRTMAX-12 
 +53) SIGRTMAX-11 ​   54) SIGRTMAX-10 ​   55) SIGRTMAX-9 ​   56) SIGRTMAX-8 ​   57) SIGRTMAX-7 
 +58) SIGRTMAX-6 ​   59) SIGRTMAX-5 ​   60) SIGRTMAX-4 ​   61) SIGRTMAX-3 ​   62) SIGRTMAX-2 
 +63) SIGRTMAX-1 ​   64) SIGRTMAX
 </​code>​ </​code>​
  
-==== Comenzile wwho și pinky ====+<​note>​ Cel mai puternic semnal pentru a termina un proces este SIGKILLtransmis prin comanda kill -9, urmat de PID-ul procesului pe care îl vom termina. </​note>​ 
 + 
 +Dacă vrem sa terminăm un proces dintr-un terminal care este acaparat de acesta, aflăm PID-ul procesului din alt terminal folosind comanda ps aux urmată de comanda kill -9 și PID-ul aflat la pasul anterior. De exemplu, dacă dorim să terminăm procesul sleep 100 din primul terminal, în al doilea vom avea următoarele comenzi:
  
-Aceste comenzi ofera informatii despre userii logati in sistem. 
-<​code>​student@uso:​~/​Documents$ w 
- ​12:​18:​08 up 2 days, 18:​27, ​ 3 users, ​ load average: 0,26, 0,19, 0,08 
-USER TTY      FROM         ​ LOGIN@ ​  ​IDLE ​  ​JCPU ​  PCPU WHAT 
-student ​ :0       :​0 ​          ​ 11:​57 ​  ?​xdm? ​  ​7:​05 ​  0.01s /​usr/​lib/​gdm3/​gdm-x-session --run-script 
-maria tty2 ​    ​- ​           12:​18 8.00s ​ 0.05s  0.05s -bash 
-mihai :​1 ​      :​1 ​          ​ 12:​15 ​  ?​xdm? ​  ​7:​05 ​  0.01s /​usr/​lib/​gdm3/​gdm-x-session --run-script 
-student@uso:​~/​Documents$ who 
-student ​ :0           ​2020-10-13 11:57 (:0) 
-maria tty2 ​        ​2020-10-13 12:18 
-mihai :​1 ​          ​2020-10-13 12:15 (:1) 
-</​code>​ 
-Comanda pinky poate produce si un output asemanator cu finger. 
 <​code>​ <​code>​
-student@uso:​~$ ​pinky -l student +student@uso:​~$ ​ps aux 
-Login namestudent ​                 In real life:  ​Student User +USER       ​PID ​ %CPU  %MEM VSZ ​     RSS   ​TTY ​ STAT START   TIME COMMAND 
-Directory: /home/​student ​         Shell:  /bin/bash+root             ​1 ​      ​0.0 ​        ​0.3 ​        ​168976 ​  ​12980 ​   ?       ​  ​ Ss     12:01     0:03  /sbin/init sp 
 +root             ​2 ​      ​0.0 ​        ​0.0 ​              0     0         ? ​      S 12:01    0:00  [kthreadd] 
 +root             ​3 ​      ​0.0 ​        ​0.0 ​    0     0         ? ​      ​I< ​    ​12:​01 ​   0:00  [rcu_gp] 
 +root             ​4 ​      ​0.0 ​        ​0.0 ​    0     0         ? ​      ​I< ​     12:01    0:00 [rcu_par_gp] 
 +[...] 
 +root   ​  ​   24687  0.0        0.0     ​0 ​          ​0 ​        ? ​      ​I 13:​32 ​  0:00 [kworker/1:0- 
 +root          24717  0.0        0.0     0     0         ? ​      ​I 13:​37 ​ 0:00  [kworker/0:1- 
 +student ​   ​24735 ​ 0.0        0.0  19572 ​   592     ​pts/​0  ​ S+     ​13:​43 ​  0:00  sleep 100 
 +student ​   24736  0.0        0.0  22972 ​  ​3608 ​   pts/1   R+     ​13:​43 ​  ​0:​00 ​ ps aux 
 +student@uso:​~$ kill -9 24735
 </​code>​ </​code>​
  
-==== Comanda whoami ==== +Și observam ca în terminalul inițial apare “Killed”:​
- +
-Comanda whoami afiseaza username-ul utilizatorului current.+
 <​code>​ <​code>​
-student@uso:​~$ ​whoami +student@uso:​~$ ​sleep 100 
-student+Killed
 student@uso:​~$ student@uso:​~$
 </​code>​ </​code>​
  
-==== Comenzile users și groups ​====+<​note>​Putem afla PID-ul procesului folosind, de asemenea, comanda pgrep sleep, obtinând PID-ul comenzii sleep, 24735.</​note>​ 
 + 
 +==== Redirectarea din fișier (< și >) ==== 
 + 
 +Pentru a redirecta dintr-un fișier pentru un anumit proces se folosește <, iar pentru redirectarea într-un fișier se va folosi ​ >. De exemplu, dacă avem următorul program scris în C, care doar afișează inputul, se poate redirecta continutul fisierului README.md pentru a-l avea ca input.
  
-Comanda users afiseaza userii logati in system. 
 <​code>​ <​code>​
-mihai@uso:/​home/​student$ users +#include <​stdio.h>​ 
-student +int main() { 
-mihai@uso:/​home/​student$+»    char line[1000];​ 
 +»   ​ while (fgets(line,​1000,​stdin)) { 
 +»   ​ » ​  ​ printf("​%s",​line);​ 
 +»    } 
 +»   ​ return 0; 
 +}
 </​code>​ </​code>​
-Comanda groups afiseaza grupurile din care face parte un utilizator dat ca parametru comenzii. Daca nu se da niciun utilizator, atunci se va lua utilizatorul current.+
 <​code>​ <​code>​
-student@uso:​~$ groups +student@uso:​~/uso-lab./readfile < README.md 
-student adm cdrom sudo dip plugdev lpadmin sambashare +uso-lab 
-student@uso:~groups root +Public repository for USO labs
-root : root +
-student@uso:~$ groups student +
-student : student adm cdrom sudo dip plugdev lpadmin sambashare +
-student@uso:​~$ groups mihai +
-mihai : mihai+
 </​code>​ </​code>​
  
-==== Comanda passwd ====+Pentru a verifica faptul că acesta este chiar conținutul fișierului README.md, folosim comanda cat.
  
-Comanda passwd este folosita pentru a schimba parola unui utilizator. 
-Un utilizator neprivilegiat trebuie sa foloseasca sudo pentru a  schimba parola altui utilizator. 
 <​code>​ <​code>​
-student@uso:​~$ ​sudo passwd mihai +student@uso:​~/uso-labcat README.md 
-Enter new UNIX password: +uso-lab 
-Retype new UNIX password: +Public repository ​for USO labs 
-passwd: password updated successfully +</​code> ​
-mihai@uso:/​home/​student$ passwd mihai +
-Changing password ​for mihai. +
-(current) UNIX password: +
-Enter new UNIX password: +
-Retype new UNIX password: +
-passwd: password updated successfully +
-</​code>​+
  
 +Pentru a redirecta outputul unui proces (comenzi) putem folosi numele comenzii, urmat de >, apoi de numele fișierului.
  
-==== Comenzile useradd ​și adduser ====+<​code>​ 
 +student@uso:​~/​uso-lab$ ps > ps.txt 
 +student@uso:​~/​uso-lab$ cat ps.txt 
 +PID     ​TTY ​     TIME      CMD 
 +24501 pts/​0 00:​00:​00 bash 
 +25026 pts/​0 00:​00:​00 ​  ps 
 +</​code>​  
 + 
 +Se poate, de asemenea, sa folosim atat redirectarea intrării, cât și cea a ieșirii în aceeași comanda. De exemplu, dacă vrem sa redirecționăm continutul fișierului README.md la executabilul readfile prezentat mai sus și să redirecționăm output-ul în fișierul file.txt. Apoi putem verifica conținutul fișierului file.txt folosind comanda cat.
  
-Ambele comenzi sunt folosite pentru a adauga un user in sistem. Comanda adduser se foloseste de useradd, dar este mai user friendly. 
 <​code>​ <​code>​
-student@uso:​~$ ​sudo useradd marcela +student@uso:​~/uso-lab./readfile < README.md >​file.txt 
-student@uso:​~$ id marcela +student@uso:​~/uso-labcat file.txt 
-uid=1003(marcela) gid=1003(marcela) groups=1003(marcela) +# uso-lab 
-student@uso:~sudo adduser marcela +Public repository ​for USO labs 
-Adding user `marcela'​ ..+student@uso:​~/uso-lab$
-Adding new group `marcela'​ (1003) ... +
-Adding new user `marcela'​ (1003) with group `marcela'​ ... +
-Creating home directory `/​home/​marcela'​ ... +
-Copying files from `/​etc/​skel'​ ... +
-Enter new UNIX password: +
-Retype new UNIX password: +
-passwd: password updated successfully +
-Changing the user information ​for marcela +
-Enter the new value, or press ENTER for the default +
-    Full Name []: +
-    Room Number []: +
-    Work Phone []: +
-    Home Phone []: +
-    Other []: +
-Is the information correct? [Y/n] +
-student@uso:​~$+
 </​code>​ </​code>​
  
-==== Comenzile userdel si deluser ====+Se folosește >> pentru a redirecta output-ul într-un fișier și a î-l adăuga la finalul fișierului
  
-Ambele comenzi sunt folosite pentru a sterge un utilizator. Comanda deluser este considerate mai interactive. 
 <​code>​ <​code>​
-student@uso:​~$ ​sudo deluser marcela +student@uso:​~/uso-labcat file.txt 
-Removing user `marcela'​ ..+# uso-lab 
-Warning: group `marcela'​ has no more members. +Public repository for USO labs 
-Done. +student@uso:​~/uso-labecho "new content"​ >> file.txt 
-student@uso:​~$ ​finger marcela +student@uso:​~/uso-labcat file.txt 
-finger: marcela: no such user+uso-lab 
-student@uso:​~$ ​sudo userdel marcela +Public repository for USO labs 
-student@uso:~$ finger marcela +new content
-finger: marcela: no such user.+
 </​code>​ </​code>​
  
-==== Comenzile groupadd, addgroup, groupdel si delgroup ==== 
  
-Groupadd si addgroup ​se folosesc pentru ​adauga noi grupuri in systemNu este o mare diferenta intre aceste ​comenzi, addgroup fiind doar mai user friendly.+==== Înlănțuirea de comenzi ==== 
 + 
 + 
 +Putem inlantui comenzi folosind ;, || sau &&.  
 +  *Pentru înlănțuire necondiționată ​se folosește “;”, dacă avem comanda x;y, mai intai se rulează x, apoi y.  
 +  *Dacă avem comanda x || y, se rulează x, iar în cazul în care aceasta comanda nu fost finalizată cu succes se va rula y, însă dacă comanda x a fost rulata fără erori, y nu se va mai rula 
 +  *Dacă avem x && y se vor rula ambele ​comenzi doar dacă comanda x nu a întâmpinat probleme la rulare. 
 <​code>​ <​code>​
-student@uso:​~$ ​sudo groupadd colegi1 +student@uso:​~/uso-labecho "​a";​echo "​b"​ 
-student@uso:​~$ ​sudo addgroup colegi2 +
-Adding group `colegi2'​ (GID 1004) ... +b 
-Done. +student@uso:​~/uso-labecho "​a"​ || echo "​b"​ 
-student@uso:​~$ cat /etc/group | grep colegi +a 
-colegi1:​x:​1003:​ +student@uso:​~/​uso-lab$ echo "​a"​ && echo "​b"​ 
-colegi2:​x:​1004:​ +a 
-student@uso:​~$ ​sudo delgroup colegi1 +b 
-Removing group `colegi1'​ ..+student@uso:​~/uso-labcd file.txt || echo "nu e director"​ 
-Done+bash: cd: file.txt: Not a directory 
-student@uso:​~$ ​sudo groupdel colegi2 +nu e director 
-student@uso:​~$+student@uso:​~/uso-labcat file.txt && echo "​comanda cat a avut succes"​ 
 +# uso-lab 
 +Public repository for USO labs 
 +new content 
 +comanda cat a avut succes 
 +student@uso:​~/uso-lab$
 </​code>​ </​code>​
-Groupdel si delgroup se folosesc pentru a sterge grupuri din sistem. La fel ca la comenzile anterioare, rezultatul lor nu difera foarte mult, delgroup fiind mai interactive si acceptand mai multe optiuni. 
  
  
-==== Comenzile usermod si groupmod ​====+==== Pipe ==== 
 + 
 +Se poate redirecta output-ul unei comenzi în input-ul unei alte comenzi dând comanda a | b, unde output-ul comenzii a va fi folosit ca input pentru comanda b. De exemplu, putem afisa continutul fisierului README.md ca sa fie utilizat de programul precedent (readfile), sau sa redirectionam conținutul fișierului /etc/passwd utilitarului grep pentru a găsi secvența “student”:​
  
-Comanda usermod este folosita pentru a modifica un cont de utilizator. In functie de optiunile date acestei comenzi, putem schimba mai multe lucruri la un cont de utilizator. 
-Spre exemplu, putem schimba home directory-ul unui user. 
 <​code>​ <​code>​
-student@uso:​~$ ​finger marcela +student@uso:​~/uso-labcat README.md | ./readfile 
-Login: marcela ​                               Name: +# uso-lab 
-Directory: ​/home/​marcela ​         Shell: /bin/bash +Public repository for USO labs 
-Never logged in. +student@uso:​~/uso-labcat /etc/passwd | grep "​student"​ 
-No mail. +student:x:1000:1000:​student,,,​:/home/student:/bin/bash
-No Plan. +
-student@uso:​~$ ​sudo usermod -d /home/marcela_dir marcela +
-student@uso:~$ finger marcela +
-Loginmarcela ​                               Name: +
-Directory: /home/marcela_dir ​      ​ Shell: /bin/bash +
-Never logged in. +
-No mail. +
-No Plan. +
-student@uso:​~$+
 </​code>​ </​code>​
-Pentru ​adauga un user la un grup se procedeaza in felul urmator:+ 
 + 
 +==== ps ==== 
 + 
 +Folosim comanda ps pentru ​afișa informații despre procesele active.
 <​code>​ <​code>​
-student@uso:​~$ ​groups marcela +student@uso:​~$ ​ps 
-marcela : marcela +    PID TTY          TIME CMD 
-student@uso:~$ sudo addgroup studenti +   2975 pts/0    00:00:00 bash 
-Adding group `studenti'​ (GID 1004) ... +   3005 pts/0    00:00:00 ps
-Done. +
-student@uso:~$ sudo usermod -a -G studenti marcela +
-student@uso:~$ groups marcela +
-marcela : marcela studenti +
-student@uso:~$+
 </​code>​ </​code>​
-Comanda groupmod ​este folosita pentru ​modifica un grup din system+  *În prima coloană se află PID-ul procesului( process ID). FIecare PID este unic. 
-De exempluputem modifica numele unui grup:+  *În doua coloană se afla tipul terminalului în care utilizatorul este logat
 +  *În a treia coloană se află timpul în care procesul rulează. 
 +  *În a patra coloană se află comanda care pornește procesul. 
 +Pentru o afișare mai detaliată a proceselortrebuie să utilizați opțiunea –aux în linia de comandă. 
 <​code>​ <​code>​
-student@uso:​~$ ​sudo groupmod ​-n absolventi studenti +student@uso:​~$ ​ps -aux 
-student@uso:~$ cat /etc/group | grep absolventi +USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
-absolventi:x:1004:marcela +root           ​1 ​ 0.2  0.3 103420 12860 ?        Ss   14:03   ​0:​03 ​/sbin/init sp 
-student@uso:~$+root           ​2 ​ 0.0  0.0      0     0 ?        S    14:03   0:00 [kthreadd] 
 +root           ​3 ​ 0.0  0.0      0     0 ?        I<   14:03   0:00 [rcu_gp] 
 +root           ​4 ​ 0.0  0.0      0     0 ?        I<   ​14:​03 ​  0:00 [rcu_par_gp] 
 +root           ​6 ​ 0.0  0.0      0     0 ?        I<   ​14:​03 ​  0:00 [kworker/​0:​0H 
 +root           ​7 ​ 0.0  0.0      0     0 ?        I    14:03   0:00 [kworker/​u4:​0 
 +root           ​8 ​ 0.0  0.0      0     0 ?        I<   ​14:​03 ​  0:00 [mm_percpu_wq 
 +root           ​9 ​ 0.0  0.0      0     0 ?        S    14:03   0:00 [ksoftirqd/​0] 
 +root          10  0.0  0.0      0     0 ?        I    14:03   0:00 [rcu_sched] 
 +root          11  0.0  0.0      0     0 ?        S    14:03   0:00 [migration/​0] 
 +root          12  0.0  0.0      0     0 ?        S    14:03   0:00 [idle_inject/​ 
 +root          14  0.0  0.0      0     0 ?        S    14:03   0:00 [cpuhp/0] 
 +root          15  0.0  0.0      0     0 ?        S    14:03   0:00 [cpuhp/1] 
 +root          16  0.0  0.0      0     0 ?        S    14:03   0:00 [idle_inject/​ 
 +root          17  0.0  0.0      0     0 ?        S    14:03   0:00 [migration/​1] 
 +root          18  0.0  0.0      0     0 ?        S    14:03   0:00 [ksoftirqd/​1] 
 +root          19  0.0  0.0      0     0 ?        I    14:03   0:00 [kworker/​1:​0- 
 +root          20  0.0  0.0      0     0 ?        I<   ​14:​03 ​  0:00 [kworker/​1:​0H 
 +root          21  0.0  0.0      0     0 ?        S    14:03   0:00 [kdevtmpfs] 
 +root          22  0.0  0.0      0     0 ?        I<   ​14:​03 ​  0:00 [netns] 
 +root          23  0.0  0.0      0     0 ?        S    14:03   0:00 [rcu_tasks_kt 
 +root          24  0.0  0.0      0     0 ?        S    14:03   0:00 [kauditd] 
 +root          25  0.0  0.0      0     0 ?        S    14:03   0:00 [khungtaskd] 
 +root          26  0.0  0.0      0     0 ?        S    14:03   0:00 [oom_reaper] 
 +root          27  0.0  0.0      0     0 ?        I<   ​14:​03 ​  0:00 [writeback] 
 +root          28  0.0  0.0      0     0 ?        S    14:03   0:00 [kcompactd0] 
 +root          29  0.0  0.0      0     0 ?        SN   ​14:​03 ​  0:00 [ksmd] 
 +root          30  0.0  0.0      0     0 ?        SN   ​14:​03 ​  0:00 [khugepaged] 
 +root         ​123 ​ 0.0  0.0      0     0 ?        I<   ​14:​03 ​  0:00 [kintegrityd] 
 +root         ​124 ​ 0.0  0.0      0     0 ?        I<   ​14:​03 ​  0:00 [kblockd]
 </​code>​ </​code>​
  
-==== Comanda chsh ====+  *-a arată procesele tuturor utilizatorilor. 
 +  *-u afișează utilizatorul care deține procesul. 
 +  *-x afișează și procesele ce nu aparțin terminalului.
  
-Comanda chsh este folosita pentru a schimba shell-ul de login al utilizatorului. 
-<​code>​ 
-student@uso:​~$ finger marcela | grep Shell 
-Directory: /​home/​marcela ​         Shell: /bin/bash 
-student@uso:​~$ sudo chsh marcela 
-Changing the login shell for marcela 
-Enter the new value, or press ENTER for the default 
-    Login Shell [/​bin/​bash]:​ /bin/sh 
-student@uso:​~$ finger marcela | grep Shell 
-Directory: /​home/​marcela ​         Shell: /bin/sh 
-</​code>​ 
  
-==== Comanda chfn ==== 
  
-Comanda chfn ofera posibilitatea de a schimba informatii legate de contul de utilizator.+==== pidof ==== 
 + 
 +Ca să găsiți PID-ul unui proces (cu numele specificat) activ folosiți comanda pidof.
 <​code>​ <​code>​
-student@uso:​~$ ​sudo chfn marcela +student@uso:​~$ ​ps 
-Changing the user information for marcela +    PID TTY          TIME CMD 
-Enter the new value, or press ENTER for the default +   2975 pts/0    00:00:00 bash 
-    Full Name []Marcela Popescu +  23891 pts/0    00:00:00 ps 
-    Room Number []120 +student@uso:​~$ ​pidof bash 
-     Work Phone []074234324 +2975 
-    Home Phone []025543455 +</code> 
-    Other []: info +<​note>​ Procesul init are întotdeauna PID-ul 1</​note>​ 
-student@uso:​~$ ​finger marcela +<​code>​ 
-Login: marcela ​                     Name: Marcela Popescu +student@uso:​~$ ​pidof init 
-Directory: ​/home/​marcela ​         Shell: /bin/bash +
-Office: 120, 074234324 ​                   Home Phone: 025543455 +
-Never logged in+
-No mail. +
-No Plan. +
-student@uso:​~$+
 </​code>​ </​code>​
  
-==== Comanda chpasswd ==== 
  
-Comanda chpasswd este folosita pentru a schimba parolele mai multor useri in cadrul unei singure comenziOdata ce este rulata ​comanda, pe urmatoarele linii trebuie sa completam informatiile sub forma user:parolaPentru ​salva parolele se tasteaza combinatia CTRL+D. +==== pstree ==== 
-<​code>​  + 
-student@uso:​~$ sudo chpasswd +Pentru că în Linux procesele au un proces părinte, uneori vrem să vizualizăm toate procesele într-o structură ierarhicăPentru asta folosim ​comanda ​pstree. 
-marcela:​1234 +Dacă folosim opțiunea –c pentru a afișși PID-ul procesului.
-mihai:​4321 +
-maria:​mihai +
-student@uso:​~$ +
-</​code>​+
  
-==== Comanda chown ====+==== lsof ====
  
-Comanda chown este folosita pentru a schimba utilizatorul care este owner pentru un fisier.+Această comandă ne ajută să aflăm informații despre fișierele deschise de fiecare proces din sistem.
 <​code>​ <​code>​
-student@uso:/​home/dode$ ls -l | grep terminus +student@uso:​~$ lsof 
--rw-rw-r-- 1 dode dode oct 14 13:17 terminus +gsd-usb-p ​ 2083                         ​student ​ mem       ​REG ​             252,5   ​157944 ​    ​533402 ​/usr/lib/x86_64-linux-gnu/​libgdk_pixbuf-2.0.so.0.4000.0 
-student@uso:/home/dode$ sudo chown student ​terminus +gsd-usb-p  2083                         ​student ​ mem       ​REG ​             252,5    64808     ​534307 /​usr/​lib/​x86_64-linux-gnu/​libwayland-client.so.0.3.
-student@uso:/home/dode$ ls -l | grep terminus +gsd-usb-p ​ 2083                         student ​ ​mem ​      ​REG ​             252,5  2029224 ​    ​533090 ​/usr/lib/​x86_64-linux-gnu/​libc-2.31.so 
--rw-rw-r-- student ​dode oct 14 13:17 terminus+gsd-usb-p ​ 2083                         student ​ ​mem ​      ​REG ​             252,5  1207920 ​    ​533430 /​usr/​lib/​x86_64-linux-gnu/​libglib-2.0.so.0.6400.3 
 +gsd-usb-p ​ 2083                         student ​ ​mem ​      ​REG ​             252,5   ​387448 ​    ​533460 ​/usr/lib/x86_64-linux-gnu/​libgobject-2.0.so.0.6400.3 
 +gsd-usb-p  2083                         ​student ​ mem       ​REG ​             252,5  1957200 ​    ​533420 /​usr/​lib/​x86_64-linux-gnu/libgio-2.0.so.0.6400.3 
 +gsd-usb-p ​ 2083                         student ​ ​mem ​      ​REG ​             252,5    38984     ​533841 /​usr/​lib/​x86_64-linux-gnu/​libnotify.so.4.0.0
 </​code>​ </​code>​
-Se poate observa mai sus ca am schimbat utilizatorul care este owner din dode in student. 
  
-==== Comanda chgrp ====+==== pgrep ====
  
-Comanda chgrp se foloseste pentru a schimba grupul unui fisier.+pgrep este o comandă ce afișează anumite PID-uri bazate pe anumite criterii.
 <​code>​ <​code>​
-student@uso:​/home/dodels -l | grep terminus +student@uso:​~pgrep ssh 
--rw-rw-r-- 1 dode dode 0 oct 14 13:17 terminus +765 
-student@uso:/​home/​dode$ sudo chgrp student terminus +1705 
-student@uso:​/home/dodels -l | grep terminus +</​code>​ 
--rw-rw-r-- 1 dode student 0 oct 14 13:17 terminus+În exemplul de mai sus sunt afișate PID-urile proceselor care contin in nume ”ssh”. 
 +Dacă vrem să afișăm doar PID-urile proceselor unui anumit utilizator folosim optiunea –u urmat de numele utilizatorului. 
 +<​code>​ 
 +student@uso:​~pgrep -student 
 +1505 
 +1507 
 +1518 
 +1520 
 +1524 
 +1528 
 +1530 
 +1533 
 +1539 
 +1546 
 +1560 
 +1570 
 +1574 
 +1579 
 +1583 
 +1587 
 +1602 
 +1612 
 +1705 
 +1722 
 +1729 
 +1730 
 +1733 
 +1735 
 +1738 
 +1758 
 +1763 
 +1771
 </​code>​ </​code>​
-Mai sus am schimbat grupul care este owner din dode in student. 
  
-==== Comanda chmod ==== 
  
-Comanda chmod este folosita pentru ​schimba permisiunile pe care le detine un user sau un grup pentru un fisier+==== top & htop ==== 
-In urmatorul exemplu se executa ​serie de operatii folosind ​comanda ​chmodrezultatul lor putand fi observat ​cu comanda ls -l folosita impreuna cu grep.+ 
 +Pentru ​avea o vizualizare în timp real a sistemului nostru putem folosi comanda top. Aceasta oferă informații despre procesele ​care rulează în sistem(PID, utilizator, procentul de memorie folosită etc.) 
 + 
 +Htop este comandă ce oferă o vizualizare interactivă a resurselor vitale ale sistemului. Față ​de comanda ​top este mai nouă și oferă îmbunătățiri. Un exemplu este că poți scroll atât pe verticală cât și pe orizontalăpentru a putea vedea toate procesele ce rulează în sistem împreună ​cu toate specificatiile lor. 
 + 
 + 
 +Ptrace este un apel către sistemul de operare folosit pentru investigarea amănunțită a proceselor și este folosit în cadrul utilitarelor pentru debug (cum este utilitarul gdb) sau în cadrul tool-urilor strace și ltrace. 
 + 
 +Comanda strace monitorizează apelurile pe care le face o altă comandă către sistemul de operare (strace – system call tracing). Pentru început, pornim de la un program simplu scris în C care afișează șirul de caractere "Hello World" la ieșirea standard.
 <​code>​ <​code>​
-student@uso:/​home/​dode$ ls -l | grep terminus +hello_world.c 
--rw-rw-r-x 1 dode student 0 oct 14 13:17 terminus +#include <​stdio.h>​ 
-student@uso:/​home/​dode$ sudo chmod o-x terminus + 
-student@uso:/​home/​dode$ ls -l | grep terminus +int main() { 
--rw-rw-r-- 1 dode student 0 oct 14 13:17 terminus +        ​printf("​Hello World\n"​);​ 
-student@uso:/​home/​dode$ sudo chmod u+x terminus +        ​return ​0; 
-student@uso:/​home/​dode$ ls -l | grep terminus +}
--rwxrw-r-- 1 dode student oct 14 13:17 terminus +
-student@uso:/​home/​dode$ sudo chmod g+x terminus +
-student@uso:/​home/​dode$ ls -l | grep terminus +
--rwxrwxr-- 1 dode student 0 oct 14 13:17 terminus +
-student@uso:/​home/​dode$ sudo chmod o+x terminus +
-student@uso:/​home/​dode$ ls -l | grep terminus +
--rwxrwxr-x 1 dode student 0 oct 14 13:17 terminus +
-student@uso:/​home/​dode$ sudo chmod o+w terminus +
-student@uso:/​home/​dode$ ls -l | grep terminus +
--rwxrwxrwx 1 dode student 0 oct 14 13:17 terminus +
-student@uso:/​home/​dode$ sudo chmod g-w terminus +
-student@uso:/​home/​dode$ ls -l | grep terminus +
--rwxr-xrwx 1 dode student 0 oct 14 13:17 terminus +
-student@uso:/​home/​dode$ sudo chmod a-w terminus +
-student@uso:/​home/​dode$ ls -l | grep terminus +
--r-xr-xr-x 1 dode student 0 oct 14 13:17 terminus+
 </​code>​ </​code>​
  
 +Pentru compilarea programului vom lansa comanda:
 +<​code>​
 +student@uso:​~/​uso-lab$ gcc hello_world.c -o hello_world
 +</​code>​
  
 +În urma rulării executabilului,​ obținem următorul rezultat:
 +<​code>​
 +student@uso:​~/​uso-lab$ ./​hello_world
 +Hello World
 +</​code>​
  
 +Dacă dorim să vedem apelurile către sistemul de operare efectuate de programul hello_world,​ putem folosi următoarea comandă:
 +<​code>​
 +student@uso:​~/​uso-lab$ strace ./​hello_world
 +execve("​./​hello_world",​ ["​./​hello_world"​],​ 0x7fffe3d9b840 /* 21 vars */) = 0
 +brk(NULL) ​                              = 0x7fffc4eec000
 +access("/​etc/​ld.so.nohwcap",​ F_OK)      = -1 ENOENT (No such file or directory)
 +access("/​etc/​ld.so.preload",​ R_OK)      = -1 ENOENT (No such file or directory)
 +openat(AT_FDCWD,​ "/​etc/​ld.so.cache",​ O_RDONLY|O_CLOEXEC) = 3
 +[...]
 +write(1, "Hello World\n",​ 12Hello World
 +)           
 +[...]
 +</​code>​
  
 +Un alt utilitar înrudit cu strace este ltrace. Acesta urmăreşte apelurile de bibliotecă. În cazul programului hello_world,​ rezultatul este următorul:​ 
 +<​code>​ 
 +$ ltrace ./​hello_world 
 +puts("​Hello World"​Hello World 
 +)                                               
 +</​code>​
uso/cursuri/curs-03.txt · Last modified: 2022/10/17 14:23 by sergiu.weisz
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