Sunteți pe pagina 1din 34

Utilizarea Sistemelor de Operare

Suport laborator 3

Cuprins
1. Managementul proceselor in S.O. Linux ............................................................................................. 1
2. Comanda top ........................................................................................................................................ 4
3. Comanda ps .......................................................................................................................................... 9
4. Comanda pstree ................................................................................................................................. 12
5. Comanda jobs ..................................................................................................................................... 16
6. Închiderea proceselor......................................................................................................................... 17
7. Descriptorul de fișiere ........................................................................................................................ 20
8. Comanda cat ....................................................................................................................................... 20
9. Comanda file....................................................................................................................................... 24
10. Pipe ................................................................................................................................................. 24
11. Execuția unui proces in cadrul execuției altui proces ................................................................... 27
12. Comanda export ............................................................................................................................. 28
13. Comanda grep ................................................................................................................................ 29

1. Managementul proceselor in S.O. Linux

Mediu al procesului („Process control block”) compus din:


• ID proces (PID)
• Stare
• Numele procesului
• Prioritate
• „Program counter” (retine adresa către următoarea instrucțiune)
• Fișiere deschise (fisiere utilizate)
• Director curent - “Working directory”
• “Environment” - Variabile program,
• Parametri
• ID proces părinte (PPID)
• ID grup si utilizator
La finalul secvenței de boot prima component a SO încărcată in memorie este “Kernel”-ul
• Primul process “kernel” pornit este “init” pornit de kernel cu ID 1 (in unele distribuții de
linux: systemd)
• Procesul „Init” pornește celelalte procese (proces părinte - fiu)
• Procesele se pot închide in momentul primirii unui semnal

Fig. Relatia intre procese parinte -fiu

Un exemplu de lansare in execuție a unui proces de către alt proces este reprezentat de execuția
unei comenzi in „bash”
La apelarea unei comenzi un proces kernel lansează in execuție procesul asociat comenzii. De
exemplu procesul bash lansează in execuție procesul asociat comenzii pwd folosind funcția
„fork()”. Funcția „fork()” este o funcție utilizata pentru crearea unui nou proces.
Planificatorul unității centrale este o unitate a kernel-ului care selectează următorul proces pentru
a fi executat în continuare, din toate procesele aflate in starea „ready”.
Planificatorul unității centrale alocă intervale de timp procesor, pentru execuția instrucțiunilor. Un
proces in starea „ready” este gata pentru a fi executat așteaptă, si asteapta conform ordinii stabilite
de Planificatorul unității centrale .

Planificatorul reprezintă componenta cea mai importanta a SO multi-tasking Linux.


Planificatorul unității centrale utilizează un algoritm de planificare, bazat pe priorități, pentru a
alege între procesele ce urmează a fi executate. Acesta realizează un clasament al proceselor,
clasament bazat un scor general, precum și pe nevoia de timp-procesor.
In SO Linux există un 140 de nivele de prioritate asociate proceselor.
In SO Linux exista doua modalități de a reprezenta prioritatea: „priority” si „nice number”.
„nice number” este o valoare (calculata in raport cu alte procese) care variază de la -20 (cea mai
mare valoare prioritară) la 19 (valoarea prioritară cea mai mică), iar valoarea implicită este 0,
„priority” reprezintă prioritatea văzută de kernel, si variază de la 1 la 99 în mod implicit si de la
100 până la 139 pentru procese din spațiului utilizatorului.

Identificarea proceselor (aflate in executie), in SO Linux, se poate face folosind următoarele


comenzi:
1. Comanda top
2. Comanda ps
3. Comanda pstree
Identificarea proceselor “Background” si “Foreground” ), in SO Linux, se poate face folosind
următoarea comanda:
1. Comanda jobs
Închiderea unui proces, in SO Linux, se poate face folosind următoarele comenzi:
2. Comanda kill si killall
Prioritatea unui proces, in SO Linux, se poate determina folosind următoarele comenzi:
3. Comanda nice si renice
2. Comanda top

Rezultat: afișează procesele aflate in execuție (se actualizează odată la 1s)


Parametri (selectiv):
top [-] [d delay] [p pid] [q] [c] [C] [S] [s] [i] [n iter] [b]

-p (doar procese cu id)


-S (timp cumulativ, proces + copil)
-H (afișează firele de execuție)
-n (actualizează ecranul conform numărului specificat si închide)
Exemplu de utilizare 1:
Se apelează comanda: top Rezultatul este prezentat in fig.

NI = valoarea nice number


PR (PRI) = prioritatea văzută de kernel
Nice value range (NI): -20 to 19
Exemplu de utilizare 2: Afișarea proceselor

Comanda introdusa:

In timpul execuției comenzii top se tastează A (SHIFT + a)

Se poate folosi unul din cele 4 moduri disponibile:


1. Def
2. Job
3. Mem
4. Usr

Exemplu de utilizare 3: Selecția culorii


In timpul executării comenzii top se tastează Z (SHIFT + z)
Se selectează zona ce se colorează: literele T sau S sau M sau H (SHIFT + ….)
Se selectează culoarea pentru acea zona: 1 , 2, … 7
Se tastează q pentru iesire
Se tastează a sau w pentru a salva o selecție intermediara si ENTER pentru ieșire cu salvare
Exemplu de utilizare 4: Selecția informațiilor
Se pot afișa sau șterge informațiile centralizate: Load, Task, Memory, din prima secțiune a
tabelului, prin utilizarea tastelor l, t, m

Exemplu de utilizare 5: Afișarea comenzii sau denumirii fișierului


In timpul execuției comenzii top se tastează c

Exemplu de utilizare 6: Închiderea unui proces


In timpul execuției comenzii top se tastează k
In meniul apărut se tastează PID-ul procesului

Exemplu de utilizare 7: Schimbarea priorității


In timpul execuției comenzii top se tastează r
In meniul apărut se introduce PID-ul procesului ; in meniul următor se introduce valoarea NICE
dorita.

Exemplu de utilizare 8: Monitorizarea procesului dorit


Se folosește comanda: top –p [PID]
Exemplu: top –p 1
Se folosește comanda: top –u [nume user]
Exemplu: Top –u root

Se folosește comanda: top –U [UID]


Exemplu: Top –U root

3. Comanda ps
Comanda ps – prescurtare de la process
• afișează o lista a proceselor pornite de utilizator
• fără parametri afișează procesele asociate utilizatorului curent si terminalului deschis
• doua tipuri de parametri: cu cratima / fără cratima
Parametri (selectiv): parametrii au semnificație diferita daca sunt precedați de cratima
-p (doar procese cu id)
-e (toate procesele)
-a (info despre procesele frecvente)
-l (lista lunga cu informații despre proces)
-j (ID de sesiune)
f afișează procesele părinte si fiu
Exemplu de utilizare 1:
Executați următoarele comenzi:
ps
ps -e

Exemplu de utilizare 2:
Executați următoarele comenzi:
ps -le
Exemplu de utilizare 3:
Executați următoarele comenzi:
ps -le

Exemplu de utilizare 4:
Executați următoarele comenzi:
ps f -e

Exemplu de utilizare 5:
Executați următoarele comanda:
ps u

Afișarea tuturor proceselor in execuție se face cu comenzile:


ps ax
ps –ef
Pentru informații detaliate se poate folosi:
ps aux
ps –e -f

Utilizați comanda conform următoarelor exemple. Notați rezultatul si analizați diferențele.


Ex 3.1

ps ax
Ex 3.2

ps –ef
Ex 3.3

ps aux
Ex 3.4

ps –e -f

4. Comanda pstree
Comanda: pstree afișează un arbore de procese (relația intre procese părinte si fiu)
pstree [-a, --arguments] [-c, --compact]
[-h, --highlight-all, -Hpid, --high‐light-pid pid] [-g] --show-pgids]
[-l, --long] [-n, --numeric-sort] [-p, --show-pids] [-s, --show-parents]
[-u, --uid-changes] [-Z, --security-context]
[-A, --ascii, -G, --vt100, -U, --unicode] [pid, user]
Parametri (selectiv):
-g (afiseaza PGID)
-p (afiseaza PID)
-n (ordoneaza in functie de PID)
-h (afisaza (bold) procesul curent )
In terminale emulate in browser este posibil ca sa nu se afișeze întreg arborele.

Exemplu de utilizare 1: Afisarea proceselor


pstree
Exemplu de utilizare 2: Afisarea compacta
pstree –c

Exemplu de utilizare 3: Afisarea procesului curent (bold)


pstree –h

Exemplu de utilizare 4: Sorteaza procesele dupa PID


pstree –n
Exemplu de utilizare 5: Afisaza PID pentru fiecare proces
pstree –p

Ex 4.1

Sortați procesele afișate de comanda top in funcție de memoria utilizata


Ex 4.2

Afișați procesele asociate utilizatorului curent folosind comanda top


Ex 4.3

Afișați o lista cu toate procesele in rulare folosind comanda ps


Ex 4.4

Listați procesele sub forma de arbore folosind comanda pstree si ps


Ex 4.5

Afișați procesele in funcție de timpul utilizat folosind comanda ps

5. Comanda jobs
Procesele Background:
• rulează fără a interacționa direct cu utilizatorul
• se lansează in execuție cu comanda & la finalul rândului
Comanda jobs afișează procesele Background
Daemons = procese ce rulează neîntrerupt, in background
Procesele sunt identificate prin [job_number]
Ctrl +Z suspenda procesul din forground. Acesta poate fi repornit cu bg in background sau fr in
forground
Comanda Kill %nr_job închide jobul. Comanda Kill -9 %nr_job închide forțat jobul.
Efectuați următoarele operații:
4. Deschideți procesul bash si trimiteți procesul bash in background
5. Verificați ca procesul este in background
6. Închideți procesul bash
7. Închideți procesul bash forțat
Pentru a efectua operațiile de mai sus executați următoarele comenzi (exemplu in fig de mai jos):
1. bash &
2. jobs
3. kill %1
4. jobs
5. bash &
6. kill -9 %1
Exemplu de utilizare 1

6. Închiderea proceselor
Pentru închiderea unui proces cunoscând PID-ul se poate utiliza comanda kill
Sintaxa: kill -signal PID , unde PID este id-ul procesului (obținut de exemplu cu comanda ps) iar
signal este codul pentru semnal.
Se prezinta mai jos câteva coduri de semnal pentru închiderea unor procese:
1 = hangup – se transmite la închiderea de către părinte
2 = Ctrl + C = intrerupt
3 = Ctrl + \ = quit = generează un fișier: core dump
9 = kill = tratat direct de kernel
15 = terminate = semnal default
Pentru închiderea unui proces cunoscând numele se poate utiliza comanda killall
Sintaxa: killall -signal nume_proces
Tabel coduri asociate semnalelor:

Ex 6.1

Deschideți un proces “bash” in terminalul in care lucrați.


Identificați PID-ul
Închideți procesul bash
Verificați ca procesul a fost închis

Prioritatea unui proces


Comanda nice lansează in execuție procesul specificat ca parametru asociind o anumita prioritate
definita de utilizator.
Exemplu: nice -n r test &
Comanda renice = schimba prioritatea unui proces aflat in execuție specificat prin PID
Exemplu renice 5 345
Comenzile pot fi folosite doar de către utilizatorul root
Ex 6.2

Deschideți un proces bash


Schimbați prioritatea (nice number = 10 )
Verificați schimbarea făcută

Ex 6.3

1. In terminal deschideți un proces “bash”


bash
2. Identificați numele procesului
ps
3. Închideți procesul bash
kill -9 bash
4. Ce proces a fost închis ?

Rezolvare ex 1

Rezolvare ex2
7. Descriptorul de fișiere
„Fișiere” alocate de shell la intrarea in execuție a unui program (I/O stream)
Descriptorul de fișiere are asociate 3 tipuri importante:
• STDIN (cod 0)= zona in care un program așteaptă sa găsească datele de intrare (default:
tastatura)
• STDOUT (cod 1)= zona in care un program trimite datele de ieșire (default: terminal
utilizator)
• STDERR (cod 2) = zona in care un program trimite datele referitoare eroare (default:
terminal utilizator

8. Comanda cat
Comanda cat utilizează o denumire prescurtata a cuvântului „concatenate”. Comanda cat este
utilizata si pentru concatenarea șirurilor de caractere.
Comanda cat este des utilizata ca editor de texte fiind considerata cel mai simplu editor de text
din Linux.
Utilizarea comenzii pentru crearea unui fișier:
“cat > test” creează si permite editarea fișierului test
Se poate întrerupe modul de editare folosind CTRL + d
Utilizarea comenzii pentru vizualizarea conținutului unui fișier:
“cat test” afișează conținutul fișierului test
opțiunea –n afișează nr de linii
Exemplu de utilizare 1 – crearea unui fișier (vezi imaginea de mai jos – exemplul 5)
Următoarea comanda creează un fișier test si adaugă caractere introduse de la tastatura. Pentru a
finaliza utilizați comanda de la tastatura: CTRL + d
cat > test
cat test
cat –n test
#afișează conținutul fișierului test
cat drujba1
#afișează o eroare deoarece fișierul nu exista

Exemplu de utilizare 2 – copierea conținutului unui fișier (vezi img de mai jos- exemplul 5)
cat test > test2
#Conținutul lui test este copiat către test2
Exemplu de utilizare 3 – salvarea erorilor folosind STDERR (cod 2>)
cat drujba 2> log
#Deoarece nu exista fișierul drujba eroarea este copiata in fișierul „log”

Exemplu de utilizare 4
Utilizând >> se adaugă caractere la finalul fișierelor in continuarea caracterelor din fișier
cat >>test
Exemplu de utilizare 5
Ex 8.1
Executați următoarele comenzi si analizați rezultatul:
Ex 8.1.1
cat > test11
in urma execuției comenzii se poate edita fișierul nou creat test. Introduceți cuvântul „Salut”.
Pentru a părăsi modul de editare apăsați „CTRL + D” (end data transmission)
Ex 8.1.2
cat test
in urma execuției comenzii se poate vizualiza, pe ecran, conținutul fișierului test11
Ex 8.1.3
cat >> cat test11
in urma execuției comenzii se pot adaugă șiruri de caractere la finalul caracterelor din fișierul
test11. Adăugați textul „USO”. Pentru a părăsi modul de editare apăsați „CTRL + D” (end data
transmission).
Ex 8.1.4
cat test
in urma execuției comenzii se poate vizualiza, pe ecran, conținutul fișierului test11
Ex 8.1.5
cat drujba
in urma execuției comenzii va fi afișat un mesaj de eroare, deoarece in directorul curent nu exista
fișierul „drujba”
Ex 8.1.6
cat drujba 2> eroare
Atenție la spatii!! In urma execuției comenzii mesajul de eroare afișat anterior va fi salvat intr-un
nou fișier eroare.
Ex 8.1.7
cat eroare
Ce conține fișierul eroare ?
Ex 8.1.8
cat < test
Ce se afișează pe ecran in urma execuției comenzii ? Explicați ținând cont de semnificația
descriptorului „<”
Ex 8.1.9
cat test7 > test8 2>&1
In urma execuției comenzii se generează un mesaj de eroare deoarece nu exista test7. Mesajul de
eroare nu este afișat pe ecran ci este salvat in test8. Deschideți fișierul test8. Ce mesaj observați.
Listați conținutul directorului curent (ls). Identificați fișierul test8 ? Dar test7 ?

9. Comanda file
Pentru a vizualiza informații despre conținutul unui fier se folosește comanda „file”
Exemplu de utilizare 1
file /etc/passwd

10. Pipe
Pipe = mecanism de comunicare intre procese: Inter Process Communication
Este reprezentat prin caracterul “|”
Semnificație: legătura intre STDOUT al unui proces si STDIN al altui proces
„STDOUT | STDIN”

Se poate executa impreuna cu comanda: „tee” pentru a realiza o bifurcație a ieșirii.


Comanda: „tee” transmite rezultatul atât către STDOUT cat si către fișierul specificat.
Exemplu de utilizare 1
ls -l | wc -l
Comanda wc, prescurtare de la ” word count” este utilizata pentru a număra șiruri de caractere.
Exemplu de utilizare 2
ls | tee test1 | wc -l
Exemplu de utilizare 3
1. Deschideți directorul “/”
cd /
2. Listați conținutul directorului intr-un fișier “test”
ls -l | cat > test
Exemplu de utilizare 4
3. Afișați numarul de fișiere din directorul “/”. Se va folosi comanda wc „word count”
ls -l | wc -l

Ex 10.1 Executați următoarele comenzi si analizați rezultatul:

1. Afișați numarul de fișiere din directorul “/” si salvați intr-un fișier. Comanda tee transmite rezultatul
atât către STDOUT cat si către fișierul specificat.
ls | tee lista | wc -l
2. Rularea de procese in cadrul altor procese se paote face utilizând ghilimelele: ‘ ‘ sau structura: $()
echo Ruleaza $(ps ax | wc -l) procese.
3. Pentru gruparea mai multor comenzi se folosește structura ()
( echo Afisaza calendar: ; cal ) | wc -l
4. Se pot selecta primele si ultimele linii dintr-un sir folosind comenzile head si tail. Aceste comenzi
permit selecția numărului de linii afișat pornind de la începutul sau de la finalul unui fișier sau unui
sir primit ca STDIN.
ls | head -3
ls | tail -1
5. Pentru sortarea proceselor in funcție de consumul de resurse si afișarea primelor procese se poate
folosi:
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
11. Execuția unui proces in cadrul execuției altui proces
Execuția de procese in cadrul altor procese se poate realiza cu comanda „$()” sau prin utilizarea
de ghilimele simple ``
Exemplu de utilizare 1
echo Ruleaza $(ps ax | wc -l) procese.

Gruparea comenzilor:
Ex 11.1 Executați următoarele comenzi si analizați rezultatul:

Ex 11.1.1

cal ; pwd
; se utilizează pentru separare comenzilor pe aceeași linie
Ex 11.1.2

{ echo Afisaza calendar: ; cal } | wc -l


{} Se utilizează pentru grupare
Ex 11.1.3

( echo Afisaza calendar: ; cal ) | wc -l


Se utilizează () pentru grupare comenzilor si executarea intr-un nou shell deschis in cadrul shell-
ului curent
12. Comanda export
Comanda export este utilizata pentru transferul variabilelor intre shell-uri
Sintaxa: export nume_variabila=valabila
Un nou shell se poate deschide cu comanda bash. Acest shell este un proces fiu al shell-ului
parinte.

Exemplu:
Creati o variablia x cu valoarea 4. Exportati variabila x.
Deschideti un nou process bash. Verificati valoarea variabilei in noul process bash. Iesiti din noul process
bash si verificati valoarea variabilei.
Un nou shell ce va rula in shell-ul curent se deschide cu comanda „ bash ”. Acesta este un proces fiu al
shell-ului părinte.
export x=4;
bash; # creati un nou proces bash
echo $x; # comanda este executata in bash-ul creat
x=5;
echo $x;
exit; # iesiti din procesul bash
echo $x
13. Comanda grep
Denumire: GREP = „global/regular expression/print”
Utilizare: caută în fișiere sau în STDIN, șiruri de caractere care corespund unei expresii regulate
date și le scrie către STDOUT.
Optiuni (selectiv):
-c afiseaza numarul de linii unde s-au gasit potriviri
-l afiseaza numai numele fisierelor unde s-au gasit potrivi pe linii
-n numarul liniei unde s-a gasit potrivirea
-v afiseaza liniile in care nu s-au gasit potriviri
-w face o cautare integrala a cuvantului
Meta caractere folosite:

Exemplu de utilizare 1
Identificați cate șiruri de caractere localhost se găsesc in directoratul /etc/hosts
Exemplu de utilizare 2
Poate fi utilizata in corelare cu filtre reprezentate de comenzi intermediare:
1. Schimbați directorul curent cu directorul “/”
2. Afișați numarul de fișiere ce conțin caracterul “t” in denumire, din directorul curent
ls | grep t | wc -l

Exemplu de utilizare 3
Afișați pe ecran doar directoarele ce conțin litera “i” in structura numelui
ls | grep “i”
Exemplu de utilizare 4
Selectați din lista de procese in rulare procesele care au in denumire cel puțin un caracter “s”
ps | grep “s”

Exemplu de utilizare 5
Selectați din lista de procese in rulare procesele care au in denumire litera “sh”
ps | grep “s”

Exemplu de utilizare 6
Schimbați directorul curent cu directorul “/”
Afișați pe ecran doar procesele ce conțin litera “r” urmata de un sir de caractere ce conține
oricâte caractere “t”. Se folosește: *t unde * are semnificația 0 oricâte caractere t.
ps | grep “r*t”
ps | grep “r..t”
Exemplu de utilizare 7
Elimina procesul grep din lista de procese:
ps | grep bash | grep -v grep
Selectați un procese si afișați informații din prima si respectiv a doua colana a rezultatului
comenzii ps:
ps | grep bash | awk ‘{print $1}’
ps | grep bash | awk ‘{print $2}’

Exemplu de utilizare 8
Exemplu de utilizare 9

Exemplu de utilizare 10
Ex 13.1 Executați următoarele comenzi si analizați rezultatul:

Ex 13.1.1

cd /etc
grep „default” networks
Ex 13.1.2

cd /etc
grep ^def networks
Ex 13.1.3

cd /etc
grep [a-d] networks
Ex 13.1.4

cd ~
ls /etc | cat > listing
cat listing
grep ^m listing
Ce conține fișierul listing ? Comparați conținutul fișierului cu conținutul directorului /etc
Ce afișează comanda grep ?
Ex 13.1.5

grep mo* listing


Ex 13.1.6

grep ^mo listing


grep -n ^mo listing
„-n” afișează numarul iniei la care se găsește șirul

S-ar putea să vă placă și