Sunteți pe pagina 1din 549

Cuvnt nainte

Not, iunea de sistem de operare reprezint, probabil, unul dintre termenii cei mai des
ntlnit, i n domeniul calculatoarelor, s, i nu numai. De la formele greoaie dezvoltate n
anii

'60,

cunoscute

transformare

doar

continu,

profesionis, tilor,

strns

corelat

cu

sistemele
dezvoltarea

de

operare

au

cunoscut

sistemelor

de

calcul

s, i

tehnologiilor asociate. n ziua de astzi, sistemele de operare ofer o interfat, facil


s, i prietenoas att utilizatorilor obis, nuit, i ai serviciilor Internet, ct s, i utilizatorilor
comerciali ai aplicat, iilor dedicate, celor ce folosesc facilitt, ile multimedia s, i jocuri,
sau celor profesionis, ti care dezvolt aplicat, ii sau ntret, in sisteme de calcul s, i ret, ele de
calculatoare. Evolut, ia tehnologic a dus la dezvoltarea sistemelor de operare pentru un
numr tot mai mare de dispozitive, de la sisteme server, desktop s, i laptop la PDA-uri
s, i smartphone-uri.
Cartea de fat, s, i propune familiarizarea cititorului cu lumea sistemelor de operare
s, i, n particular, cu latura preponderent tehnic a acestora. Am creat aceast lucrare
avnd n permanent, n vedere cunos, tint, ele de baz s, i cadrul conceptual necesare unui
student la o facultate de calculatoare. n aceast structur, cartea este ns construit
pentru a  util oricrui cititor care caut un prim contact cu domeniul sistemelor
de operare. Sperm ca parcurgerea sa s ofere s, i un set de deprinderi s, i abordri n
solut, ionarea problemelor care deps, esc sfera sistemelor de operare.
Diversitatea subiectelor abordate a reprezentat o dicultate n crearea unei succesiuni
clare de capitole. Strategia aleas este una straticat, ecare capitol bazndu-se pe cele
studiate anterior.

Totus, i, au existat momente n care a trebuit s utilizm anumite

not, iuni nainte de a  denit cadrul conceptual, sau la cteva capitole distant, de
prezentarea lor. n astfel de situat, ii cititorului i sunt oferite referint, e ctre capitolele
n care sunt claricate not, iunile invocate.
Cartea urmres, te prezentarea s, i discutarea not, iunilor de baz necesare unui student n
primii ani de facultate, n domeniul calculatoarelor. Diversitatea subiectelor s, i nivelul
de detaliu recomand o asimilare n profunzime a informat, iilor, dincolo de durata unui
semestru sau a unui an.

Sperm ca studentul dornic de aprofundare s rsfoiasc

aceast carte n momentele n care caut sprijin suplimentar pentru rezolvarea unei
probleme din domeniu.
Din punct de vedere tehnic,
preponderent

universului

materialul de fat, ofer o perspectiv ce apart, ine

Linux.

Am

considerat

contactul

cu

Linux

ca

pe

oportunitate aparte pentru o majoritate a utilizatorilor ce provin din mediul Windows,


n care deseori alternativele n domeniul sistemelor de operare nu reprezint o opt, iune
luat n considerare. Dorint, a noastr este ca utilizarea unui nou sistem de operare, cu
o rspndire s, i o evolut, ie tot mai intense, s ofere o nou perspectiv asupra lumii
calculatoarelor n general s, i a sistemelor de operare n particular.

Des, i cartea este

focalizat pe Linux, ecare capitol include sect, iuni de studii de caz n care sunt
prezentate mecanismele similare dintr-un sistem Windows.
Structura crt, ii este conceput pentru a oferi att o prezentare a cadrului conceptual,
ct s, i o parte aplicativ construit prin exemple. Fiecare capitol este prefat, at de o mic
sect, iune Ce se nvat, n acest capitol?, util pentru reperarea principalelor not, iuni.
Capitolele se ncheie cu o sect, iune de Cuvinte cheie s, i apoi de ntrebri, pentru
a permite cititorului o autoevaluare a cunos, tint, elor dobndite.

Unele sect, iuni sunt

marcate cu simboluri grace cu o semnicat, ie special: important, not, OZN (pentru


tehnologiile recente de tipul bleeding edge) s, i atom (pentru aspecte tehnice avansate).
Recomandm parcurgerea secvent, ial a crt, ii, dar cititorul avansat poate sri direct la
un capitol de interes particular.

Dat ind cont, inutul practic detaliat, este util

folosirea calculatorului pentru rularea comenzilor prezentate s, i pentru explorarea


opt, iunilor existente, n paralel cu parcurgerea not, iunilor teoretice.
Mult, umim tuturor celor care au contribuit la realizarea crt, ii. Modul de organizare s, i
prezentare, ca s, i diversitatea informat, iilor prezentate se bazeaz pe efortul continuu s, i
pasiunea unei echipe entuziaste.

n primul rnd, i mult, umim domnului profesor

Nicolae pus, , precum s, i colegilor nos, tri Vlad Dogaru, Mihai Maruseac, Daniel
Rosner s, i Andrei Buhaiu,
elaborarea acestei crt, i.

a cror implicare a constituit un beneciu direct n

Mult, umim, de asemenea, colegilor Alex Eftimie s, i Andrei

Faur pentru contribut, ia adus,


Iorgulescu,

Voichit, a

Iancu,

s, i colegilor Alex Juncu,

Andrei

Dumitru,

Laura

Lucian Grijincu,

Gheorghe

pentru

Clin

revizuirea

materialului pe parcursul nalizrii acestuia.


Adresm mult, umiri speciale echipei cursului de Utilizarea Sistemelor de Operare care
ne-a oferit o atmosfer de suport, implicare s, i energie pentru realizarea crt, ii. Forma
actual a crt, ii se bazeaz pe efortul sust, inut depus de-a lungul numeroaselor activitt, i
din jurul cursului de Utilizarea Sistemelor de Operare.
Nu n ultimul rnd, mult, umim cititorilor, la primul pas n domeniul plin de provocri
s, i de satisfact, ii al calculatoarelor. Ei sunt cei crora le dedicm aceast carte. Ne-a
fcut plcere s o scriem, s, i sperm c mcar o parte din entuziasmul nostru s se
converteasc n pasiune pentru cititorii acestor pagini.

Autorii

ii

Cuprins
1

Introducere
1.1 Ce este un sistem de operare? . . . . . . . . . . . . . . . . .
1.1.1 Funct, iile unui sistem de operare . . . . . . . . . . .
1.1.2 Tipuri de sisteme de operare . . . . . . . . . . . . .
1.1.3 Funct, ionarea sistemelor de operare . . . . . . . . .
1.2 Scurt istoric al sistemelor de operare . . . . . . . . . . . . .
1.2.1 Prima generat, ie . . . . . . . . . . . . . . . . . . . .
1.2.2 A doua generat, ie . . . . . . . . . . . . . . . . . . .
1.2.3 A treia generat, ie . . . . . . . . . . . . . . . . . . . .
1.2.4 A patra generat, ie . . . . . . . . . . . . . . . . . . .
1.3 Sisteme de operare moderne . . . . . . . . . . . . . . . . . .
1.3.1 Sisteme de operare desktop s, i server . . . . . . . .
1.3.2 Familia Windows . . . . . . . . . . . . . . . . . . . .
1.3.3 Mac OS X . . . . . . . . . . . . . . . . . . . . . . .
1.3.4 Linux . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.5 Alte Unix-uri . . . . . . . . . . . . . . . . . . . . . .
, i open source . . . . . . . . . . . . . . . .
1.3.6 Comunitat
1.3.7 Sisteme de operare pentru dispozitive mobile . . . .
1.4 Studiu de caz . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.1 Virtualizare. Rularea unui SO dintr-o mas, ina virtuala

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

1
1
3
4
5
7
7
8
8
9
9
10
11
11
12
13
14
15
16
16

de baza
Instalarea Linux. Configurari
2.1 Linux. Distribut, ii Linux . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Principalele distribut, ii Linux . . . . . . . . . . . . . .
2.1.2 Debian. Ubuntu . . . . . . . . . . . . . . . . . . . .
2.1.3 Tipuri de distribut, ii Linux . . . . . . . . . . . . . . . .
2.2 Instalarea Linux . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Alegerea distribut, iei Linux . . . . . . . . . . . . . . .

2.2.2 Pregatirea
sistemului . . . . . . . . . . . . . . . . .
2.2.3 Live CD . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.4 Instalare Kubuntu . . . . . . . . . . . . . . . . . . .
2.3 Interact, iunea cu sistemul de operare . . . . . . . . . . . . . .
2.3.1 Interfet, ele cu utilizatorul . . . . . . . . . . . . . . . .
2.3.2 Interfat, a n linie de comanda (CLI) . . . . . . . . . .
2.3.3 Oprirea sistemului de calcul . . . . . . . . . . . . . .
de baza ale SO . . . . . . . . . . . . . . . . . . .
2.4 Configurari
2.4.1 Administrarea sistemului Linux . . . . . . . . . . . .
, ii la Internet . . . . . . . . . .
2.4.2 Asigurarea conectivitat
2.4.3 Actualizarea sistemului s, i a pachetelor . . . . . . . .
2.4.4 Administrarea utilizatorilor s, i a grupurilor de utilizatori

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

23
23
24
25
27
28
28
29
31
32
38
38
40
44
45
45
47
47
48

iii

iv

INTRODUCERE N SISTEME DE OPERARE


2.5

Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.5.1 Interoperabilitatea sistemului de fis, iere ntre Linux s, i Windows . 48
2.5.2 GParted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

Gestiunea pachetelor s, i utilizatorilor


3.1 Gestiunea utilizatorilor . . . . . . . . . . . . . . . . . . . . . . .
3.1.1 UID, GID . . . . . . . . . . . . . . . . . . . . . . . . . .

3.1.2 Adaugarea
s, i s, tergerea utilizatorilor . . . . . . . . . . .

3.1.3 Adaugarea
s, i s, tergerea unui grup de utilizatori . . . . .
3.1.4 Modificarea datelor unui utilizator . . . . . . . . . . . . .

3.1.5 Adaugarea
s, i s, tergerea utilizatorilor . . . . . . . . . . .
3.2 Gestiunea pachetelor . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.1 Fis, ierele n care sunt stocate informat, ii despre utilizatori
3.3.2 Actualizarea unui sistem Debian sau Ubuntu . . . . . . .
Sisteme de fis, iere
4.1 Not, iuni introductive . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Ce este un sistem de fis, iere . . . . . . . . . . . . .
4.1.2 Ierarhia sistemului de fis, iere . . . . . . . . . . . .
relative s, i cai
absolute . . . . . . . . . . . . . .
4.1.3 Cai
4.1.4 Variabila de mediu PATH . . . . . . . . . . . . . .
4.2 Tipuri de fis, iere . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1 Terminologie . . . . . . . . . . . . . . . . . . . . .
4.2.2 Detect, ia tipului fis, ierelor . . . . . . . . . . . . . . .
4.3 Operat, ii uzuale asupra fis, ierelor s, i directoarelor . . . . . . .
4.3.1 Afis, area s, i schimbarea directorului curent . . . . .
4.3.2 Afis, area cont, inutului fis, ierelor . . . . . . . . . . . .
4.3.3 Listarea cont, inutului unui director . . . . . . . . . .
4.3.4 Crearea fis, ierelor/directoarelor . . . . . . . . . . .
4.3.5 Copiere/mutare/redenumire/s, tergere . . . . . . . .
4.3.6 Arhivarea fis, ierelor s, i dezarhivarea . . . . . . . . .
4.3.7 Backup . . . . . . . . . . . . . . . . . . . . . . . .
de comenzi . . . . . . . . . . . . . . . . . . . .
4.4 Redirectari
4.4.1 Descriptorii de fis, ier . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
4.4.2 Redirectari
4.5 Drepturi de acces . . . . . . . . . . . . . . . . . . . . . . .
4.5.1 Utilizatori s, i grupuri de utilizatori vs. liste de acces
4.5.2 Clasificarea drepturilor de acces . . . . . . . . . .
4.5.3 Vizualizarea drepturilor de acces . . . . . . . . . .

4.6 Cautarea
fis, ierelor . . . . . . . . . . . . . . . . . . . . . .
4.6.1 Comanda find . . . . . . . . . . . . . . . . . . . .
4.6.2 Comanda locate . . . . . . . . . . . . . . . . . . .
4.6.3 Comanda whereis . . . . . . . . . . . . . . . . . .
4.6.4 Comanda which . . . . . . . . . . . . . . . . . . .
4.6.5 Comanda type . . . . . . . . . . . . . . . . . . . .
4.7 Tipuri de sisteme de fis, iere . . . . . . . . . . . . . . . . . .
4.7.1 Integritatea datelor . . . . . . . . . . . . . . . . . .
4.7.2 Alegerea unui sistem de fis, iere . . . . . . . . . . .
4.7.3 Adresarea ntr-un sistem de fis, iere . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

53
53
55
55
56
56
57
58
64
64
66

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

69
69
69
70
72
74
74
74
75
76
76
77
77
79
80
82
85
85
85
86
87
88
89
89
90
90
91
91
92
92
92
93
93
95

CUPRINS

4.8

Lucrul cu sistemele de fis, iere . . . . . . . . . . . . . . . . . . . . . . .


4.8.1 Crearea unui sistem de fis, iere . . . . . . . . . . . . . . . . .
4.8.2 Montarea unui sistem de fis, iere . . . . . . . . . . . . . . . . .
4.8.3 Repararea unui sistem de fis, iere . . . . . . . . . . . . . . . .
4.8.4 Crearea unei imagini pentru un sistem de fis, iere . . . . . . . .
4.8.5 Stergerea

unui sistem de fis, iere . . . . . . . . . . . . . . . .


discului . . . . . . . . . . . . . . . . .
4.8.6 Monitorizarea utilizarii
4.9 Tendint, e n sistemele de fis, iere . . . . . . . . . . . . . . . . . . . . . .
4.9.1 Sisteme de fis, iere n userspace . . . . . . . . . . . . . . . . .
4.9.2 ZFS, ext4, btrfs . . . . . . . . . . . . . . . . . . . . . . . . .
4.10 Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.10.1 Comenzi pentru lucrul cu fis, iere n Windows . . . . . . . . . .
4.10.2 Utilizarea n sigurant, a a comenzilor pe fis, iere . . . . . . . . .
4.10.3 Montarea unui sistem de fis, iere FAT32 astfel nct tot, i utilizatorii
sa aiba drept de scriere pe el . . . . . . . . . . . . . . . . . .
4.10.4 Montarea unui sistem de fis, iere FAT32 astfel nct utilizatorii
dintr-un anumit grup sa aiba drept de scriere pe acesta . . . .
4.10.5 Sistem de fis, iere ntr-un fis, ier . . . . . . . . . . . . . . . . . .
4.10.6 ntfs-3g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Procese
5.1 Not, iuni introductive . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Ce este un proces? . . . . . . . . . . . . . . . . . . .
5.1.2 Deosebirea dintre un proces s, i un program . . . . . .
5.1.3 Structura unui proces . . . . . . . . . . . . . . . . . .

5.1.4 Starile
unui proces. Multiprogramare s, i multiprocesare
5.2 Ierarhia de procese n Unix. Vizualizarea proceselor sistemului
5.2.1 Utilitarul ps . . . . . . . . . . . . . . . . . . . . . . . .
5.2.2 Utilitarul pstree . . . . . . . . . . . . . . . . . . . . . .
5.2.3 Utilitarul pgrep . . . . . . . . . . . . . . . . . . . . . .
5.2.4 Utilitarul top . . . . . . . . . . . . . . . . . . . . . . .
5.2.5 Timpul de execut, ie al unui proces. Comanda time . . .
5.2.6 Sistemul de fis, iere procfs . . . . . . . . . . . . . . . .
5.3 Rularea proceselor n background. Job-uri. Daemoni . . . . . .
5.3.1 Rularea unui proces n background . . . . . . . . . . .
5.3.2 Suspendarea unui proces . . . . . . . . . . . . . . . .
5.3.3 Controlul job-urilor . . . . . . . . . . . . . . . . . . . .
5.3.4 Daemoni . . . . . . . . . . . . . . . . . . . . . . . . .
5.4 Semnale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.1 Semnale importante UNIX . . . . . . . . . . . . . . .
5.4.2 Comenzile kill, killall s, i pkill . . . . . . . . . . . . . . .
5.4.3 Transmiterea de semnale prin combinat, ii de taste . . .
5.5 Comunicat, ia ntre procese . . . . . . . . . . . . . . . . . . . .
5.5.1 Operatorul | (pipe) . . . . . . . . . . . . . . . . . . . .
5.6 Swapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.7 Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.7.1 Managementul proceselor/serviciilor pe Windows . . .
5.7.2 Procese importante . . . . . . . . . . . . . . . . . . .
5.7.3 Prioritatea unui proces . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

95
96
97
100
100
101
101
102
102
104
104
104
104

. 105
. 106
. 106
. 107

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

111
111
112
112
113
115
116
117
122
123
124
126
127
130
130
131
131
133
135
136
137
139
139
140
141
142
142
143
145

vi
6

INTRODUCERE N SISTEME DE OPERARE


Pornirea s, i init, ializarea sistemului
6.1 Pornirea sistemului . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1 Problematica pornirii sistemului bootstrapping . . . . . .
6.1.2 Etapele pornirii sistemului . . . . . . . . . . . . . . . . . .
6.1.3 BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.4 POST . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.1 Dispozitive boot-abile . . . . . . . . . . . . . . . . . . . .
6.2.2 Structura sectorului de boot pentru un dispozitiv boot-abil .
6.2.3 Mecanismul de funct, ionare a unui bootloader . . . . . . .
6.2.4 GRUB . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Configurarea GRUB . . . . . . . . . . . . . . . . . . . . . . . . . .

6.4 ncarcarea
nucleului . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.1 Imaginea de nucleu . . . . . . . . . . . . . . . . . . . . .
6.4.2 Opt, iuni de boot-are pentru nucleu . . . . . . . . . . . . .
6.5 Init, ializarea sistemului . . . . . . . . . . . . . . . . . . . . . . . . .
6.5.1 init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5.2 upstart . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5.3 getty s, i login . . . . . . . . . . . . . . . . . . . . . . . . .
6.5.4 Sesiune de shell . . . . . . . . . . . . . . . . . . . . . . .
6.6 Studiu de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.6.1 Grub 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.6.2 Pornirea sistemului de operare Windows XP . . . . . . . .
6.6.3 Interoperabilitate Linux-Windows . . . . . . . . . . . . . .
6.6.4 Personalizarea ecranului GRUB . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Analiza hardware a sistemului


7.1 Structura unui sistem de operare . . . . . . . . . . . . . . . . . . . . .
7.2 Considerente hardware . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.1 Structura unui sistem de calcul . . . . . . . . . . . . . . . . .
7.2.2 Procesorul . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.3 Ierarhia de memorie . . . . . . . . . . . . . . . . . . . . . . .
interconectarea componentelor . . . . . . . .
7.2.4 Placa de baza;
7.2.5 Dispozitive periferice; magistrale . . . . . . . . . . . . . . . .
7.3 Suportul pentru dispozitive la nivelul kernel-ului . . . . . . . . . . . . .

7.3.1 Listarea modulelor ncarcate


la un moment dat n sistem . . .

7.3.2 ncarcarea unui modul . . . . . . . . . . . . . . . . . . . . . .

7.3.3 Descarcarea
unui modul din kernel . . . . . . . . . . . . . . .
7.4 Analiza hardware a unui sistem (magistrale, chipset, CPU, memorie,
dispozitive) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.1 Lista hardware /sys . . . . . . . . . . . . . . . . . . . . . .
7.4.2 Comenzi pentru afis, area dispozitivelor . . . . . . . . . . . . .
dispozitivelor hardware . . . . . . . . . .
7.4.3 Monitorizarea starii
7.5 Interfat, a cu dispozitivele din userspace udev s, i /dev . . . . . . . .
7.6 Lucrul cu dispozitive (/dev) . . . . . . . . . . . . . . . . . . . . . . .
7.6.1 Tipuri de dispozitive . . . . . . . . . . . . . . . . . . . . . . .
7.6.2 ntreruperi hardware . . . . . . . . . . . . . . . . . . . . . . .
7.6.3 Adrese I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.6.4 Adrese DMA . . . . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

151
151
152
152
153
154
154
155
156
158
159
162
165
165
166
167
167
171
173
174
175
175
177
179
180

.
.
.
.
.
.
.
.
.
.
.

185
185
186
187
188
188
191
192
193
194
195
195

.
.
.
.
.
.
.
.
.
.

196
196
196
199
201
202
203
204
205
206

CUPRINS

7.7

7.8

vii

7.6.5 Manipularea datelor la nivel scazut


(comanda dd) . . . . . . .
Analiza sistemului . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.7.1 Informat, ii despre sistem . . . . . . . . . . . . . . . . . . . . .
7.7.2 Kernel tunables . . . . . . . . . . . . . . . . . . . . . . . . .
Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.8.1 Salvarea s, i restaurarea MBR s, i a tabelei extinse de partit, ii . .
7.8.2 Salvarea cont, inutului unui disc cu sectoare inaccesibile . . . .
7.8.3 Crearea unei imagini de CD; montarea unei imagini . . . . . .
7.8.4 Utilizarea unui fis, ier de pe o partit, ie FAT32 ca fis, ier de swap
pentru un LiveCD Linux . . . . . . . . . . . . . . . . . . . . .

de ret, ea
Configurari
8.1 Concepte de ret, ea . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.1.1 Not, iuni de baza . . . . . . . . . . . . . . . . . . . . . . . . .
8.1.2 IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.1.3 Moduri de adresare: adresare unicast, multicast, broadcast .
8.2 Parametri de ret, ea . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2.1 Adresa IP s, i masca de ret, ea . . . . . . . . . . . . . . . . . .
8.2.2 Ruter implicit (default gateway) . . . . . . . . . . . . . . . . .
8.2.3 DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
temporare . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3 Configurari
permanente s, i configurari

8.3.1 Interfet, e de ret, ea. Configurari


temporare . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3.2 Configurarea temporara statica a unei adrese IP pe o interfat, a
, ii la Internet. Configurarea temporara
8.3.3 Asigurarea conectivitat
statica a unei rute implicite . . . . . . . . . . . . . . . . . . .
permanente . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4 Configurari
8.4.1 Configurarea permanenta a unei interfet, e de ret, ea . . . . . .
8.4.2 Configurarea permanenta statica a unei rute implicite . . . . .
8.4.3 DHCP. Configurarea unei interfet, e n mod automat . . . . . .
8.4.4 DNS. Configurarea serverelor de DNS . . . . . . . . . . . . .
8.4.5 Aliasuri. /etc/hosts . . . . . . . . . . . . . . . . . . . . . . . .
8.4.6 Configurarea numelui stat, iei curente . . . . . . . . . . . . . .
8.5 Testarea configurat, iilor de ret, ea . . . . . . . . . . . . . . . . . . . . .
8.5.1 Ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.5.2 Traceroute . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8.5.3 Cum se depisteaza problemele uzuale n cazul configurarilor


de ret, ea . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.6 Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.6.1 Verificarea n linie de comanda a parametrilor de ret, ea n
Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
de ret, ea n Windows Vista . . . . . . . . . . . . .
8.6.2 Configurari
8.6.3 Configurarea PPPoE n Linux . . . . . . . . . . . . . . . . . .
Servicii de ret, ea
9.1 Concepte specifice aplicat, iilor de ret, ea . . . .
9.1.1 Stiva TCP/IP . . . . . . . . . . . . . .
9.1.2 Implementarea part, iala a stivei TCP/IP
9.1.3 Modelul client-server . . . . . . . . .
9.1.4 Porturi . . . . . . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.

206
208
208
210
211
211
212
212

. 213

.
.
.
.
.
.
.
.
.

217
217
218
219
219
220
220
222
223
225

. 225
. 226
.
.
.
.
.
.
.
.
.
.
.

229
230
230
232
232
233
235
235
236
236
237

. 238
. 240
. 240
. 241
. 243

.
.
.
.
.

249
249
249
252
254
255

viii

INTRODUCERE N SISTEME DE OPERARE


9.2

Execut, ia comenzilor la distant, a . . . . .


9.2.1 Telnet . . . . . . . . . . . . . .
9.2.2 SSH . . . . . . . . . . . . . .
9.2.3 Utilitarul wget . . . . . . . . .
Email Pos, ta electronica . . . . . . . .
9.3.1 Arhitectura s, i funct, ionare . . .
9.3.2 Client, i de email . . . . . . . .
9.3.3 Securitatea serviciului de email
WWW . . . . . . . . . . . . . . . . . .
9.4.1 Tehnologiile de baza ale WWW
9.4.2 Funct, ionarea serviciului . . . .
9.4.3 Servere Web . . . . . . . . . .
9.4.4 Client, ii Web . . . . . . . . . .
Studii de caz . . . . . . . . . . . . . . .
9.5.1 Utilitarul cURL . . . . . . . . .
9.5.2 FTP . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

257
257
258
262
263
264
266
267
268
269
272
272
273
273
273
274

10 Elemente de securitate
, ii . . . . . . . . . . .
10.1 Problematica securitat
10.1.1 Principii de baza . . . . . . . . . .
10.1.2 Termeni . . . . . . . . . . . . . .
10.2 Securizarea sistemului . . . . . . . . . . .
10.2.1 Securitatea sistemului de operare
10.2.2 Controlul accesului . . . . . . . .
10.2.3 Parole . . . . . . . . . . . . . . .
10.2.4 Securitatea sistemului de fis, iere .
10.3 ntret, inerea sistemului . . . . . . . . . . . .
10.3.1 Monitorizarea sistemului . . . . . .
10.3.2 Jurnalizarea s, i gestiunea jurnalelor
10.3.3 Limitarea drepturilor . . . . . . . .
10.4 Atacuri de ret, ea . . . . . . . . . . . . . . .
10.4.1 Tipuri de atacuri n ret, ea . . . . .
10.4.2 Virus, i, viermi, troieni . . . . . . . .
10.4.3 Scanarea porturilor . . . . . . . .
10.5 Securizarea ret, elei . . . . . . . . . . . . .
10.5.1 Firewall-uri . . . . . . . . . . . . .
10.5.2 Criptarea informat, iei . . . . . . . .
10.5.3 Monitorizarea ret, elei . . . . . . . .
10.6 Studiu de caz . . . . . . . . . . . . . . . .
10.6.1 Drepturile pe fis, iere n NTFS . . .
10.6.2 Recuperarea parolei . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

279
279
280
283
284
284
286
287
289
293
293
296
298
303
303
305
307
309
310
310
312
314
314
315

.
.
.
.
.
.
.

319
319
320
321
322
323
324
325

9.3

9.4

9.5

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

11 Compilare s, i linking
11.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . .
11.1.1 Editoare . . . . . . . . . . . . . . . . . . . . . . .
11.1.2 Compilare s, i interpretare . . . . . . . . . . . . . .
11.1.3 De la sursa la executabil, de la executabil la proces
11.1.4 Pachete necesare . . . . . . . . . . . . . . . . . .
11.2 Compilare. GCC . . . . . . . . . . . . . . . . . . . . . . .
11.2.1 Utilizare GCC . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

CUPRINS

11.3

11.4

11.5

11.6

11.7

ix
11.2.2 Compilarea din surse multiple . . . . . . . . . . . . . .
(inclusiv link-editarea) . . . . . . . . . . . .
Etapele compilarii
11.3.1 Preprocesarea . . . . . . . . . . . . . . . . . . . . . .
11.3.2 Compilarea . . . . . . . . . . . . . . . . . . . . . . . .
11.3.3 Asamblarea . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
11.3.4 Optimizarea compilarii
11.3.5 Link-editarea . . . . . . . . . . . . . . . . . . . . . . .
11.3.6 Fis, iere executabile . . . . . . . . . . . . . . . . . . . .
Biblioteci de funct, ii . . . . . . . . . . . . . . . . . . . . . . . .
11.4.1 Tipuri de biblioteci . . . . . . . . . . . . . . . . . . . .
11.4.2 Informat, ii despre bibliotecile de funct, ii . . . . . . . . .
11.4.3 Utilizarea bibliotecilor . . . . . . . . . . . . . . . . . .
Automatizarea sarcinilor make . . . . . . . . . . . . . . . . .
11.5.1 Cel mai simplu Makefile . . . . . . . . . . . . . . . . .
11.5.2 Folosirea dependent, elor . . . . . . . . . . . . . . . . .
11.5.3 Dependent, e ierarhice . . . . . . . . . . . . . . . . . .
11.5.4 Target-ul clean . . . . . . . . . . . . . . . . . . . . . .
11.5.5 Target-urile .PHONY s, i all . . . . . . . . . . . . . . . .
11.5.6 Variabile n Makefile . . . . . . . . . . . . . . . . . . .
11.5.7 Sintaxa Makefile . . . . . . . . . . . . . . . . . . . . .
11.5.8 Moduri de utilizare a Make . . . . . . . . . . . . . . .
Portabilitate . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.6.1 Portabilitatea la nivelul arhitecturii sistemului de calcul
11.6.2 Portabilitatea unui limbaj de programare . . . . . . . .
11.6.3 Portabilitatea la nivelul sistemului de operare . . . . .
Studiu de caz . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.7.1 GCC n Windows . . . . . . . . . . . . . . . . . . . .
11.7.2 Link-editarea modulelor C s, i a modulelor C++ . . . . .

12 Shell scripting
12.1 Not, iuni introductive . . . . . . . . . . . . . . . . . . .
12.1.1 De ce shell scripting? . . . . . . . . . . . . .
, i oferite de scripturile shell . . . . . .
12.1.2 Facilitat
12.2 Interact, iunea cu shell-ul . . . . . . . . . . . . . . . . .
12.2.1 Editarea comenzilor . . . . . . . . . . . . . .
12.2.2 Folosirea istoricului. Completare automata . .
12.2.3 Comenzi interne (built-in) s, i comenzi externe
12.2.4 Execut, ia unei comenzi shell . . . . . . . . . .
12.3 Scripturi shell . . . . . . . . . . . . . . . . . . . . . .
12.3.1 Cel mai simplu script shell . . . . . . . . . . .
12.3.2 Comentarii ntr-un script shell . . . . . . . . .
12.3.3 Comenzi simple shell . . . . . . . . . . . . .
12.3.4 One liners . . . . . . . . . . . . . . . . . . .
12.4 Programarea shell . . . . . . . . . . . . . . . . . . . .
12.4.1 Variabile . . . . . . . . . . . . . . . . . . . .
12.4.2 Caractere speciale shell . . . . . . . . . . . .
12.4.3 Instruct, iuni de decizie . . . . . . . . . . . . .
12.4.4 Cicluri n shell . . . . . . . . . . . . . . . . .
12.5 Filtre de text . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

327
328
330
331
333
335
337
339
341
342
343
344
345
346
347
347
350
350
352
352
353
354
354
354
356
356
356
357

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

365
365
366
367
368
368
369
371
373
374
374
376
376
378
384
384
387
391
395
399

INTRODUCERE N SISTEME DE OPERARE


12.5.1 cat, tac, nl . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5.2 sort, uniq . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5.3 head, tail . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5.4 cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5.5 tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5.6 wc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5.7 grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5.8 sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5.9 awk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.6 Comenzi de lucru cu fis, iere . . . . . . . . . . . . . . . . . . . . . .
12.6.1 xargs . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.6.2 locate . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.6.3 find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.7 Expandarea n shell . . . . . . . . . . . . . . . . . . . . . . . . . .
12.7.1 Simbolul $ . . . . . . . . . . . . . . . . . . . . . . . . . .
12.7.2 Expresii regulate n shell . . . . . . . . . . . . . . . . . .
12.8 Parametrii unui script shell . . . . . . . . . . . . . . . . . . . . . .
12.8.1 Comanda shift . . . . . . . . . . . . . . . . . . . . . . . .
12.8.2 Parametri speciali . . . . . . . . . . . . . . . . . . . . . .
12.8.3 Exemplu de utilizare a parametrilor . . . . . . . . . . . . .
12.9 Funct, ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.9.1 Sintaxa unei funct, ii . . . . . . . . . . . . . . . . . . . . .
12.9.2 Parametrii unei funct, ii . . . . . . . . . . . . . . . . . . . .
12.10 Scripturile de pornire Bash . . . . . . . . . . . . . . . . . . . . . .
12.10.1 Variabile de mediu . . . . . . . . . . . . . . . . . . . . . .
12.11 Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12.11.1 Contorizarea numarului


de utilizatori autentificat, i n sistem
12.11.2 Schimbarea promptului shell . . . . . . . . . . . . . . . .
12.11.3 Batch scripting n Windows . . . . . . . . . . . . . . . . .
12.11.4 PowerShell pe Windows . . . . . . . . . . . . . . . . . . .

13 Mediul grafic
13.1 Concepte n mediul grafic . . . . . . . . . . . . . . . .
13.1.1 Tipuri de imagini . . . . . . . . . . . . . . . .
13.1.2 Fonturi. Unicode . . . . . . . . . . . . . . . .
13.2 Interfat, a grafica n Linux. Componente . . . . . . . . .
13.2.1 X Window System . . . . . . . . . . . . . . .
13.2.2 Arhitectura X Window System . . . . . . . . .
13.3 Pornirea s, i oprirea interfet, ei grafice . . . . . . . . . .
13.4 Configurarea serverului X . . . . . . . . . . . . . . . .
13.4.1 Configurarea rezolut, iei . . . . . . . . . . . .
13.4.2 Configurarea tastaturii . . . . . . . . . . . . .
13.5 Configurarea sistemului din KDE . . . . . . . . . . . .
13.5.1 System Settings . . . . . . . . . . . . . . . .
13.5.2 Schimbarea aspectului interfet, ei grafice . . .
de baza ale sistemului de operare
13.5.3 Configurari
administrative . . . . . . . . . . .
13.5.4 Configurari
13.5.5 Configurarea ret, elei . . . . . . . . . . . . . .
13.5.6 Managementul utilizatorilor . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

400
400
402
403
404
405
405
408
410
414
414
415
416
419
419
421
421
422
423
423
424
424
425
426
427
428
428
429
431
433

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

441
442
442
443
444
444
445
448
450
450
451
452
452
452
453
454
454
454

CUPRINS
13.5.7 Monitorizarea sistemului s, i managementul proceselor
13.5.8 Gestiunea pachetelor . . . . . . . . . . . . . . . . .
13.6 Servicii desktop . . . . . . . . . . . . . . . . . . . . . . . . .
13.6.1 Pornirea facila a aplicat, iilor . . . . . . . . . . . . . .

13.6.2 Cautarea
fis, ierelor n sistem . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
13.6.3 Notificari
13.7 Aplicat, ii KDE vs. GNOME . . . . . . . . . . . . . . . . . . .
13.8 Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.8.1 Configurarea X peste SSH . . . . . . . . . . . . . .
13.8.2 Instalarea s, i configurarea VNC . . . . . . . . . . . .
13.8.3 Remote Desktop Connection . . . . . . . . . . . . .

xi
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

455
457
458
458
459
460
460
460
460
462
464

14 Utilitare pentru dezvoltare


14.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.2 Coding style (indent, astyle) . . . . . . . . . . . . . . . . . . . .
14.3 Editorul Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.4 Sisteme de control al versiunii . . . . . . . . . . . . . . . . . . .
14.4.1 Principii . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.4.2 Subversion . . . . . . . . . . . . . . . . . . . . . . . . .
14.4.3 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.5 Analiza s, i parcurgerea codului . . . . . . . . . . . . . . . . . . .
14.5.1 ctags . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.5.2 Analiza statica a codului splint . . . . . . . . . . . . .

14.6 Automatizarea compilarii


. . . . . . . . . . . . . . . . . . . . . .
14.6.1 Compilarea unei aplicat, ii din surse . . . . . . . . . . . .
14.7 Execut, ia unui program . . . . . . . . . . . . . . . . . . . . . . .
14.7.1 Zonele de memorie ale unui executabil s, i proces . . . .
14.7.2 Utilizarea bibliotecilor partajate . . . . . . . . . . . . . .
14.7.3 Analiza apelurilor de sistem s, i a semnalelor . . . . . . .
14.8 Depanarea unui program . . . . . . . . . . . . . . . . . . . . . .
14.8.1 gdb, ddd . . . . . . . . . . . . . . . . . . . . . . . . . .
14.8.2 valgrind . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.9 Medii integrate de dezvoltare . . . . . . . . . . . . . . . . . . . .
14.9.1 Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.9.2 Anjuta . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.10 Managementul proiectelor software . . . . . . . . . . . . . . . .
14.10.1 Procese de dezvoltare software . . . . . . . . . . . . . .
14.10.2 Aplicat, ii web pentru managementul proiectelor software
14.10.3 Resurse online pentru dezvoltarea proiectelor . . . . . .
14.11 Resurse de documentare pentru dezvoltator . . . . . . . . . . .
14.11.1 Documentat, ie oficiala . . . . . . . . . . . . . . . . . . .
14.11.2 Documentarea programelor proprii . . . . . . . . . . . .
, i s, i tutoriale . . . . . . . . . . . . . . . . . . . . . .
14.11.3 Cart
14.11.4 Documentat, ie din Internet . . . . . . . . . . . . . . . . .
14.12 Studiu de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.12.1 Microsoft Visual Studio . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

469
469
470
473
479
479
480
481
481
482
482
484
484
485
485
486
487
489
489
492
494
494
494
496
496
497
498
498
498
499
500
501
502
502

15 Viat, a n Linux
507
15.1 Muzica n Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
15.2 Filme n Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509

xii

INTRODUCERE N SISTEME DE OPERARE


15.3
15.4
15.5
15.6
15.7
15.8
15.9

Scrierea unui CD/DVD n Linux


Messenger n Linux . . . . . .
BitTorrent n Linux . . . . . . .
Imprimanta n Linux . . . . . .
Jocuri n Linux . . . . . . . . .
Dual-monitor n Linux . . . . .
Documente office n Linux . .

Raspunsuri
la ntrebari

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

510
511
512
514
515
516
518
521

Bibliografie

529

Glosar

531

Abrevieri
ACL Access Control List
ACPI Advanced Configuration and Power Interface
AGP Advanced Graphics Port
API Application Programming Interface
BIOS Basic Input Output System
CLI Command Line Interface
CMOS Complementary Metal Oxide Semiconductor
CPU Central Processing Unit
DDD Data Display Debugger
DE Desktop Environment
DHCP Dynamic Host Configuration Protocol
DLL Dynamic-link library
DM Display Manager
DMA Direct Memory Access
DNS Domain Name System
DoS Denial of Service
DRAM Dynamic RAM
ELF Executable and Linking Format
FSB Front Side Bus
FTP File Transfer Protocol
FUSE Filesystem in Userspace
GCC GNU Compiler Collection
GDB GNU Debugger
GID Group Identifier
GNU GNUs Not Unix
GNU CPP GNU C preprocessor
GUI Graphical User Interface
HDD hard disk drive
HTML Hypertext Markup Language
HTTP Hypertext Transfer Protocol
ICH I/O Controller Hub
ICMP Internet Control Message Protocol
IDE Integrated Development Environment
IDS Intrusion Detection System
IMAP Internet Mail Access Protocol
IP Internet Protocol
IRC Internet Relay Chat
IRQ interrupt request
ISP Internet Service Provider
xiii

xiv

INTRODUCERE N SISTEME DE OPERARE

LAN Local Area Network


LTS Long Time Support
LVM Logical Volume Manager
MAN Metropolitan Area Network
MBR Master Boot Record
MCH Memory Controller Hub
MIME Multipuprose Internet Mail Extensions
MinGW Minimalist GNU for Windows
MSVC Microsoft Visual C++
NAT Network Address Translation
PCI Peripheral Component Interconnection
PID process id
PKI Public Key Infrastructure
POP3 Post Office Protocol
POSIX Portable Operating System Interface
POST Power-on Self Test
PPP Point to Point Protocol
PPPoE PPP over Ethernet
RAID Redundant Array of Inexpensive Disks
RAM Random Access Memory
RDC Remote Desktop Connection
RPM Rotations Per Minute
RTOS sisteme de operare n timp real
S.M.A.R.T. Self-Monitoring, Analysis and Reporting Technology
SMTP Simple Mail Transfer Protocol
SNMP Simple Network Management Protocol
SO sistem de operare
SRAM Static RAM
SSH Secure Shell
SVN Subversion
TCP Transmission Control Protocol
TFTP Trivial File Transfer Protocol
TLD Top Level Domain
TTL Time To Live
TUI Text User Interface
UDP User Datagram Protocol
UID User Identifier
URL Uniform Resource Locator
USB Universal Serial Bus
VBR Volume Boot Record
VCS Version Control System
VNC Virtual Network Computing
WAN Wide Area Network
WIMP window, icon, menu, pointing device
WLAN Wireless LAN
WM Window Manager
WWW World Wide Web
XHTML Extensible Hypertext Markup Language

Capitolul 1
Introducere
They have computers, and they may have other
weapons of mass destruction.
Janet Reno

Ce se nvat, a din acest capitol?

Ce este un sistem de operare


Funct, iile unui sistem de operare
Tipuri de sisteme de operare
Istoricul sistemelor de operare
Sisteme de operare moderne
Windows, Mac OS X, Linux
Virtualizare

1.1

Ce este un sistem de operare?

Sistemele de operare reprezinta un concept familiar tuturor utilizatorilor de calculatoare


, i din alte aparate,
personale. Ele apar tot mai des s, i n implementarea de funct, ionalitat
de la telefoanele mobile la cardurile bancare inteligente. Exista nsa s, i dispozitive care
un sistem de operare, n principal deoarece executa un numar
mic de
nu au (nca)
operat, iuni care nu necesita nicio modificare. De exemplu, calculatorul dintr-un cuptor cu
microunde executa un program simplu fixat prin circuite fizice. Sistemele de operare
sunt utile n cazul calculatoarelor care trebuie sa se adapteze unui mediu n schimbare,
a schimbarea succesiunii
ele permit, nd modificarea comportamentului calculatorului far
operat, iilor hardware.
Un sistem de operare (abreviat n continuare SO) este un set de programe care
controleaza distribut, ia resurselor unui calculator s, i mediaza comunicarea dintre
hardware, pe de o parte, s, i aplicat, iile utilizatorilor, pe de alta parte.

INTRODUCERE N SISTEME DE OPERARE

Scopul unui SO este sa asigure stabilitate s, i flexibilitate n funct, ionarea calculatorului.


Sistemele de operare permit, n general, interact, iunea cu mai mult, i utilizatori, rularea

mai multor aplicat, ii, s, i modificarea strategiilor de raspuns


ale calculatorului la o anumita

problema.

Figura 1.1: Rolul unui sistem de operare


n figura 1.1 este prezentat rolul de mediere al sistemului de operare ntre utilizatori s, i
hardware. Sistemul de operare va avea acces direct la resursele hardware, n vreme ce
utilizatorii folosesc cel mai adesea aplicat, ii ce apeleaza prin intermediul bibliotecilor sau
direct funct, ii ale sistemului de operare.
Componenta esent, iala a sistemului de operare o reprezinta nucleul sau kernelul.
Acesta are rolul de gestiune a resurselor fizice s, i de oferire a unei interfet, e comune

aplicat, iilor. Nucleul nu este o aplicat, ie n sine, ci este un mediu n cadrul caruia
pot
rula alte aplicat, ii.
Programele de baza sunt aplicat, iile fundamentale ale unui sistem de operare care
permit interact, iunea cu nucleul s, i cu sistemul fizic.
Astfel de aplicat, ii sunt interpretoarele de comenzi, utilitare de gestiune a utilizatorilor s, i a
sistemului de fis, iere, biblioteci etc. n general nu este bine conturata definit, ia de aplicat, ie
se considera ca o aplicat, ie este o aplicat, ie de baza atunci cnd ofera servicii
de baza;
pentru o buna parte din celelalte componente ale sistemului.
Din punct de vedere strict tehnic sistemul de operare este nsus, i nucleul. Din perspectiva

utilizatorului sitemul de operare este compus din nucleu s, i suita programelor de baza.
Programele de baza sunt acele aplicat, ii ce permit utilizatorului interact, iunea cu resursele
hardware ale sistemului, aceasta relat, ie fiind ilustrata n figura 1.1.
Comparativ, un calculator poate fi privit ca un aeroport, iar sistemul de operare ca turnul
de control care coordoneaza traficul. Resursele aeroportului sunt reprezentate de
a un turn de control care sa
pistele s, i avioanele pe care le pune la dispozit, ie. Far
asigure gestiunea s, i organizarea acestor resurse, pe un aeroport nu s-ar putea evita

CAPITOLUL 1. INTRODUCERE

ntrzierile s, i coliziunile. n cazul calculatoarelor, rolul unui sistem de operare este de a


coordona traficul s, i accesul la resurse, ntocmai precum turnul de control al unui
aeroport.

1.1.1

Funct, iile unui sistem de operare

O prima funct, ie a unui sistem de operare consta n administrarea resurselor


hardware ale sistemului. n cazul unui calculator, este vorba mai ales despre accesul
la procesor, memorie, hard-disk, comunicarea n ret, ea, precum s, i cu alte dispozitivele
de intrare/ies, ire. Aceste resurse pot fi solicitate de aplicat, ii multiple s, i de utilizatori
multipli.
o aplicat, ie, care necesita resurse (s, i, implicit,
Sistemul de operare este la rndul sau
accesul la acestea) pentru a funct, iona. Prin urmare, acesta trebuie sa s, i asigure accesul
privilegiat la resurse. Un SO trebuie sa ment, ina controlul asupra calculatorului s, i sa

faca posibila utilizarea sa predictibila s, i ct mai eficienta.


Sistemul de operare ofera o abstractizare a resurselor hardware. Practic SO este o
extensie a sistemului fizic, oferind o inferfat, a simplificata folosita pentru medierea
accesului utilizatorilor s, i aplicat, iilor la resursele hardware.
Sistemul de operare este responsabil cu oferirea unui set limitat de informat, ii s, i funct, ii
de lucru cu hardware-ul, n loc de descrierea exacta a ceea ce se ntmpla n hardware.
utilizatorilor) o
Practic, SO ofera dispozitivelor s, i aplicat, iilor (s, i, n ultima instant, a,
transparent, a fat, a de modul de funct, ionare a hardware-ului.
n ceea ce prives, te comunicarea dintre hardware s, i aplicat, ii, sistemul de operare trebuie

sa creeze o identitate calculatorului, care sa ramn


a relativ stabila n dialogul acestuia cu
aplicat, ii diverse, chiar daca au loc upgrade-uri de hardware. Sistemul de operare are deci
, ii s, i integritat
, ii sistemului de calcul. Sistemul de operare
rolul de asigurare a securitat
va controla accesul utilizatorilor s, i proceselor la resursele hardware ale sistemului s, i va
preveni execut, ia de instruct, iuni invalide, malit, ioase sau privilegiate.
Sistemul de operare este s, i cel care permite unei aplicat, ii sa ruleze pe sisteme fizice

diferite, deoarece uniformizeaza raspunsurile


date de calculator s, i intermediaza accesul
la resurse. Sistemele de operare trebuie prin urmare sa poata interact, iona cu arhitecturi
hardware s, i cu periferice foarte diverse, el fiind cel care faciliteaza accesul aplicat, iilor
la resursele hardware. Aceasta funct, ie se numes, te portabilitate s, i se refera la oferirea
unei interfet, e unice pentru utilizator, indiferent de diferent, ele hardware dintre arhitecturi.
Un SO foloses, te drivere pentru comunicarea cu dispozitivele periferice.
Driverele sunt programe care traduc comenzile sistemului de operare n comenzi
inteligibile echipamentelor, precum s, i ies, irea acestora n mesaje accesibile
sistemului.
Rolul SO a fost extins prin punerea la dispozit, ia aplicat, iilor a unei colect, ii de biblioteci
(funct, ii) pe care programele le pot folosi pentru a rezolva probleme specifice legate de
interact, iunea cu componentele calculatorului.

Sistemul de operare va include utilitare de diagnosticare s, i monitorizare a funct, ionarii


diferitelor componente att hardware ct s, i software. Un sistem de operare poate,

INTRODUCERE N SISTEME DE OPERARE

desigur, sa es, ueze n realizarea funct, iilor sale. De exemplu, un tip foarte frecvent de
calculatorului. Un astfel de crash poate fi cauzat
eroare consta n blocarea funct, ionarii
de unele imperfect, iuni ale sistemului, dar poate fi favorizat s, i de funct, ionarea

necorespunzatoare
a anumitor aplicat, ii. Un al doilea tip frecvent de eroare se refera la
problemele de securitate, care pot permite intruziunea unui utilizator sau a unei aplicat, ii
malit, ioase. De asemenea, este posibil ca un sistem de operare sa nu reus, easca sa
interact, ioneze corect cu anumite periferice sau echipamente. n principal, funct, ionarea

corecta a unui sistem de operare poate fi pastrat


a prin realizarea metodica a unui
limitat de operat, ii:
numar

repararea problemelor (bug-urilor) din sistemul de operare nsus, i;


repararea bug-urilor din aplicat, ii;
eliminarea virus, ilor, viermilor, a spyware etc;
instalarea de versiuni actualizate ale sistemului de operare s, i aplicat, iilor acestuia.

1.1.2

Tipuri de sisteme de operare

Exista diverse criterii de clasificare a sistemelor de operare. Clasificarea de mai jos este
realizata t, innd cont de sistemele fizice pe care ruleaza s, i domeniul de utilizare.
Sistemele de operare de pe smart carduri sunt cele mai simple, servind deseori funct, ii
, ilor de debit) s, i administrnd resurse foarte limitate. Totus, i,
reduse (precum n cazul cart
ele ofera un management de baza al acestor resurse, inclusiv a spat, iului de stocare,
putnd oferi s, i servicii de securitate/criptare a datelor ce le det, in.
Sistemele de operare embedded sunt incluse n dispozitive precum televizoarele sau
, ii lor. Sistemele de
telefoanele mobile, avnd constrngeri specifice funct, ionalitat
operare pentru dispozitivele embedded variaza de la sisteme dedicate unui singur scop,
care nu ofera o interfat, a de interact, iune utilizatorului, pna la sisteme multitasking
(precum n cazul sistemelor de operare pentru PDA) care ofera multe dintre
, ile sistemelor de operare pentru calculatoarele personale. Sistemele de
fuct, ionalitat
operare n timp real (RTOS Real Time Operating Systems) sunt folosite mai ales n
echipamente s, tiint, ifice, industriale s, i de precizie. Scopul principal al acestora este sa
optimizeze utilizarea resurselor echipamentelor s, i sa asigure predictibilitatea
lor, dat fiind ca es, ecurile n coordonarea subcomponentelor pot avea
funct, ionarii
consecint, e dezastruoase.
deoarece anumite sarcini trebuie realizate ntr-un
Timpul este o variabila esent, iala,
interval precis pentru a se putea coordona cu alte sarcini. Astfel de sisteme de operare
nu sunt n general menite sa permita comunicarea cu utilizatorul, dat fiind ca nu este
necesar sa fie modificate, ele fiind concepute strict pentru executarea anumitor procese
tehnologice.
, ite n sisteme n timp real hard, prevalente n procesele industriale, n
RTOS pot fi mpart
care constrngerile temporale sunt ntotdeauna prioritare, s, i sisteme n timp real soft,
precum sistemele dedicate multimedia, n care discordant, e temporale minore sunt
acceptabile sau insesizabile.
Multe din sistemele de operare moderne ofera
, i specifice sistemelor de operare n timp real soft.
funct, ionalitat

CAPITOLUL 1. INTRODUCERE

Exista numeroase sisteme de operare de timp real. Exemple sunt RTLinux1 , VxWorks2 ,
TRON3 s, i QNX4 . Majoritatea sistemelor de operare de timp real sunt folosite n cadrul
dispozitivelor embedded. Nu exista o linie de demarcat, ie clara ntre sisteme de operare
embedded s, i sisteme de operare n timp real. Sistemele de operare moderne sunt
sisteme multi-tasking (permit execut, ia simultana a mai multor sarcini) s, i multi-user
(mai mult, i utilizatori pot folosi n acelas, i timp resursele sistemului). Sistemele multi-user

urmaresc
n principal sa optimizeze funct, ionarea calculatorului prin echilibrarea
cerint, elor utilizatorilor s, i izolarea problemelor acestora. Exista sisteme de operare
specializate pentru situat, iile de conectare a calculatoarelor n ret, ea, precum s, i sisteme
de operare specializate pentru aplicat, iile care ruleaza pe un server, des, i aceste granit, e
tind sa se estompeze.
n aceasta categorie sunt incluse sistemele de operare precum cele din familiile Microsoft
Windows, Unix s, i Apple Mac OS X, ce au ca scop optimizarea folosirii resurselor atunci
cnd un utilizator ruleaza concomitent mai multe aplicat, ii sau cnd mai mult, i utilizatori
interact, ioneaza cu un calculator n acelas, i timp. Aceste sisteme de operare sunt cele
mai cunoscute de utilizatorii de PC-uri.
O practica uzuala pentru obt, inerea unei puteri sporite de procesare o reprezinta
instalarea de procesoare multiple ntr-un singur sistem. Pentru managementul eficient
exista
al acestora s, i pentru a se putea folosi ntreaga putere de procesare disponibila,
sisteme de operare pentru arhitecturi multiprocesor special concepute pentru
Acestea pot fi variante modificate ale sistemelor de
procesarea paralela (simultana).
operare pentru servere, optimizate pentru gestiunea paralela a operat, iilor pe care le

executa.
O data cu proliferarea sistemelor de operare multi-core, majoritatea sistemelor de
operare contemporane pot fi folosite att pe arhitecturi monoprocesor, ct s, i pe cele
multiprocesor. Sisteme de operare precum Windows Vista, Windows 7, distribut, iile
Linux bazate pe kernel 2.6 s, i Mac OS X ofera suport pentru sisteme multiprocesor.

1.1.3

Funct, ionarea sistemelor de operare

Un sistem de operare este responsabil de realizarea mai multor sarcini.


, ile principale sunt:
Responsabilitat

administrarea procesorului;
administrarea memoriei;
administrarea echipamentelor s, i a perifericelor;
administrarea sistemelor de stocare a datelor;
interfat, a cu aplicat, iile s, i interfat, a cu utilizatorii.
Rolul principal al sistemului de operare consta n impunerea de reguli pentru folosirea
coerenta a resurselor (denumita s, i multiplexare). Aceasta se realizeaza fie prin
1

http://www.rtlinuxfree.com/
http://www.windriver.com/
3
http://www.tron.org/index-e.html
4
http://www.qnx.com/
2

INTRODUCERE N SISTEME DE OPERARE

alternarea n timp a accesului la resurse (multiplexare n timp), de exemplu n cazul


procesorului, fie prin delimitarea s, i alocarea unor segmente din resurse
administrarii
aplicat, iilor ce le vor utiliza simultan (multiplexare n spat, iu), de exmplu n cazul
memoriei.
, ile de mai sus sunt ndeplinite de nucleul sistemului de operare. Pe lnga
Responsabilitat
acestea, sistemele de operare cont, in componente s, i utilitare care permit realizarea unor
sarcini precum:

init, ializarea s, i oprirea proceselor, inclusiv comunicarea ntre procese;


organizarea aplicat, iilor disponibile pe calculator;
organizarea fis, ierelor n directoare;
vizualizarea s, i editarea fis, ierelor, precum s, i redenumirea, copierea sau s, tergerea
fis, ierelor.

Administrarea procesorului
, i software la
Administrarea procesorului vizeaza optimizarea accesului diferitelor unitat
resursele procesorului; practic, acest lucru se traduce n alocarea de cuante de timp
pentru rularea unei aplicat, ii pe un procesor.
des, i sistemele de operare multi-tasking permit
Este important de observat ca,
funct, ionarea simultana a mai multor aplicat, ii, aceasta este de fapt simulata prin
,i
comutarea foarte rapida de la o aplicat, ie la alta a unui procesor care ofera doar facilitat

single-tasking. Execut, ia simultana n adevaratul sens al cuvntului are loc numai pe


arhitecturi multiprocesor, unde fiecare procesor la un moment dat executa un proces.

Prin urmare, este esent, ial ca sistemul de operare sa fie capabil de a raspunde
la

solicitarile
diferitelor aplicat, ii. De asemenea, sistemul de operare trebuie sa minimizeze
proport, ia de timp n care procesorul este utilizat pentru execut, ia sarcinilor de ntret, inere,
de comunicare interna etc, n favoarea timpului alocat cerint, elor directe ale utilizatorului.
Elementele de baza cu care lucreaza un sistem de operare (mai exact, elementele care
folosesc procesorul) nu sunt aplicat, iile, ci procesele s, i firele de execut, ie (threads).
Un proces (vezi capitolul 5) este un program care executa o act, iune s, i este controlat de
, i un
utilizator, de o aplicat, ie sau de sistemul de operare. O aplicat, ie poate fi ea nsas
proces dar poate fi s, i init, iatoarea altor procese pentru a comunica cu alte calculatoare
sau cu alte aplicat, ii. Sistemele de operare init, iaza numeroase procese pentru a
administra resursele calculatorului, n majoritatea cazurilor, utilizatorii nu sunt cons, tient, i
de acest lucru.

Administrarea memoriei
, te sa asigure faptul ca fiecare proces are suficienta
Administrarea memoriei urmares
a sa acceseze spat, iul de memorie al altor procese. De asemenea,
memorie, far
procesele trebuie sa foloseasca adecvat diferitele tipuri de memorie existenta t, innd
cont de accesibilitatea diferent, iata a acestora.

CAPITOLUL 1. INTRODUCERE

Administrarea perifericelor
Administrarea perifericelor s, i a echipamentelor este realizata prin intermediul driverelor.
Acestea sunt programe relativ autonome de sistemul de operare, fiind deseori furnizate

de producatorul
echipamentelor s, i instalate separat. Ele permit sistemului de operare
a sa fie modificat. Comunicarea cu mediul este
sa comunice cu echipamente noi far
intermediata de spat, ii tampon (buffere), n care datele de intrare sunt acumulate urmnd
sa fie transmise procesorului n ritmul accesibil acestuia, evitnd congestia atunci cnd
apare o aglomerare datorita multitudinii de aplicat, ii.

Interfat, a cu utilizatorul s, i aplicat, iile


Graphical User Interface
Funct, ia de mediere a sistemului de operare are doua subcomponente:

interfat, a cu aplicat, iile (API Application Programming Interface) permite aplicat, iilor
a a controla toate detaliile
sa acceseze facil resursele hardware ale sistemului far
tehnice ale aplicat, iilor;

interfat, a cu utilizatorul permite acestuia din urma sa comunice cu calculatorul, fie


prin comenzi text (TUI Text User Interface) sau printr-o interfat, a grafica (GUI
Graphical User Interface).

1.2

Scurt istoric al sistemelor de operare

Sistemele de operare pentru PC-urile actuale sunt nu numai rezultatul unei evolut, ii
conceptuale. Daca n urma cu 30 de ani sistemele de
graduale, ci s, i al unei schimbari
, i limitate, n zilele noastre sistemul de operare este
operare dispuneau de funct, ionalitat
acompaniat de interfat, a grafica s, i de aplicat, ii diverse cu scopul de a fi ct mai accesibil
utilizatorului individual neprofesionist.
Sistemele de timp real s, i cele dedicate
(embedded) sunt mai apropiate de formele init, iale, dezvoltate n anii 60-70.
Din punct de vedere a evolut, iei sistemelor de operare pot fi distinse patru mari
a strnsa cu
perioade, denumite s, i generat, ii. Aceste generat, ii se afla n legatur
dezvoltarea sistemelor fizice s, i a limbajelor de programare.

1.2.1

Prima generat, ie

care s-a desfas


, urat n mare ntre anii 1945 s, i 1955, se dezvolta prima
n prima perioada,
generat, ie de calculatoare, avnd la baza tehnologia tuburilor vidate. O inovat, ie majora
este introducerea cartelelor perforate, ca modalitate de stocare a informat, iei. n aceasta

etapa nu exista niciun sistem de operare s, i nici macar


limbaje de programare; utilizatorul
final este responsabil pentru interact, iunea directa cu hardware-ul.

1.2.2

INTRODUCERE N SISTEME DE OPERARE

A doua generat, ie

ntre anii 1955 s, i 1965 introducerea tranzistorului marcheaza trecerea la a doua


generat, ie de calculatoare, dominate de sistemele mainframe. Principalele limbaje
utilizate sunt FORTRAN s, i limbajul de ansamblare.
Unitatea operat, ionala principala de structurare a informat, iei n interact, iunea cu
calculatorul era job-ul, care consta ntr-unul sau mai multe programe scrise nti pe
hrtie s, i apoi introduse pe cartele.
O proport, ie substant, iala din timpul de utilizare al mainframe-ului se pierde cu
introducerea fizica a joburilor n calculator (prin realizarea s, i mutarea cartelelor). Pentru
agregate a job-urilor (n
a reduce acest incovenient se dezvolta tehnica procesarii
batch-uri): mai multe job-uri sunt grupate ntr-un singur s, ir de cartele separate de
delimitatori. Job-urile sunt ulterior imprimate pe banda magnetica folosind un calculator
relativ ieftin, apoi benzile sunt transmise mainframe-ului, urmnd ca outputul sa fie
din nou prin intermediul calculatorului mai ieftin. Primul sistem de operare major
tiparit
bazat pe principiul single stream batch processing a fost dezvoltat de General Motors
Research Laboratories pentru mainframe-ul IBM 701 n 1956.

1.2.3

A treia generat, ie

A treia generat, ie de calculatoare, bazata pe circuitele integrate, apare n perioada 1965


1980. Unul dintre cele mai importante inovat, ii al acestei perioada este principiul utilizarii
n comun a timpului de procesor (timesharing). Conform acestui principiu, mai mult, i
utilizatori pot folosi simultan terminale conectate la acelas, i calculator.
n timesharing fiecare utilizator primes, te alternativ o fract, iune de timp, perioada n care
procesorul executa instruct, iunile acestuia. Astfel se valorifica eficient timpii mort, i datorat, i

vitezei scazute
de act, iune a oamenilor fat, a de cea a procesorului, reducnd substant, ial
durata de elaborare s, i corectare a unui program.
Primul sistem bazat pe timesharing a fost CTSS Compatible Time-Sharing System,
realizat de MIT n 1961. Din sistemul de operare Multics, dezvoltat ulterior tot de MIT,
au derivat primele variante de Unix, init, ial sub conducerea lui Ken Thompson. Dennis
Ritchie a elaborat limbajul C special pentru redactarea Unix, evitnd astfel dependent, a
de caracteristicile hardware, inerenta n folosirea limajului de ansamblare.
Unix a fost primul sistem de operare scris ntr-un limbaj de nivel superior, devenind astfel
portabil de la un tip de calculator la altul. Datorita nevoii de standardizare a multiplelor

IEEE
variante de sisteme Unix care au aparut
apoi independent pe baza codului sursa,
a elaborat standardul POSIX. Ulterior, Linus Torvalds a scris Linux.
n 1968 a fost creata firma Intel, specializata n microprocesoare. CP/M (Control
Program for Microcomputers), elaborat n 1976 de Gary Kildall, este primul sistem de
operare pentru calculatoare bazate pe procesoare Intel.

CAPITOLUL 1. INTRODUCERE

1.2.4

A patra generat, ie

Dupa 1980, pna n prezent, se poate vorbi despre a patra generat, ie de calculatoare,
reprezentate de aparit, ia s, i expansiunea extraordinara a calculatoarelor personale.
Product, ia acestora are la baza tehnologia microprocesoarelor.

Bill Gates a cumparat


sistemul de operare DOS (Disk Operating System) s, i l-a adaptat
cerint, elor IBM crend MS-DOS. Sistemul a cs, tigat o pozit, ie dominanta pe piat, a datorita

deciziei lui Gates de a-l direct, iona catre


companiile producatoare
de hardware, n special
IBM.

n 1981 au aparut
primele calculatoare personale IBM, costnd 2880 USD, incluznd 64

KB de memorie s, i un floppy disk. Piat, a a crescut rapid, n scurt timp aparnd


s, i alte
dat fiind ca IBM a decis sa o faca publica.

modele care foloseau aceeas, i arhitectura,


Vasta majoritate a acestor calculatoare rulau sub MS-DOS.
Doug Engelbart a realizat interfat, a grafica pentru utilizatori GUI, care a fost apoi
ncoporata n echipamentele construite de Xerox PARC. Steve Jobs, co-inventatorul
calculatorului Apple, a transformat GUI ntr-un succes comercial remarcabil prin

lansarea Apple Macintosh n 1984 (dotat cu mouse) s, i direct, ionarea acestuia catre
utilizatorii cu cunos, tint, e sau aptitudini tehnice minimale.
Succesul lui Macintosh a inspirat Microsoft n elaborarea Windows, conceput init, ial ca o

interfat, a grafica peste MS-DOS. n 1995 a aparut


prima versiune autonoma de Windows,
urmnd apoi Windows 98. Windows NT, o versiune complet noua de Windows, s-a impus
,i
treptat pe piat, a utilizatorilor corporativi, fiind orientat spre servere s, i oferind posibilitat
avansate de administrare. A fost urmat de Windows 2000 s, i Windows 2003 Server. n

2001 arhitectura NT a migrat catre


utilizatorii individuali prin lansarea lui Windows XP.

Prin Windows Vista, s, i actualmente Windows 7, se dores, te pastrarea


acestor orientari
simultane att spre partea de server ct s, i spre partea de utilizator.
Dupa anii 90, sistemele Unix (n special Linux) ncep sa cs, tige teren, preponderent pe
piat, a sistemelor server, iar apoi piat, a sistemelor desktop. La sfrs, itul anilor 80, la MIT a

aparut
o prima interfat, a grafica pentru sistemele Unix X Windows, urmata de versiuni
mai complexe.

1.3

Sisteme de operare moderne

Des, i exista mai multe criterii de clasificare, doar anumite tipuri de sisteme de operare vor
avea relevant, a pentru utilizator obis, nuit al unui calculator, fie el s, i unul cu profil tehnic. Un

criteriu pragmatic, care t, ine cont de raspndirea


sistemelor de operare actuale, conduce
la clasificarea sistemelor de operare n:

sisteme de operare desktop, destinate sistemelor de calcul obis, nuite (desktop)


s, i laptop-urilor;

sisteme de operare server, destinate sistemelor de calcul folosite n general n


Internet pentru a oferi servicii;

sisteme de operare pentru dispozitive mobile, destinate telefoanelor mobile,


smartphone-urilor sau dispozitivelor de tip PDA sau Palm.

10

INTRODUCERE N SISTEME DE OPERARE

1.3.1

Sisteme de operare desktop s, i server

Piat, a sistemelor de operare desktop este dominata n ultimele decenii de sistemele de


operare din familia Windows1 . n prezent, familia Windows det, ine o cota de circa 93%
din piat, a sistemelor desktop. Mac OS X det, ine circa 4.5%-5%, iar Linux n jur de 1%.
Toate aceste sisteme de operare ruleaza n principal pe arhitecturi PC (x86 sau x86_64).
Des, i cu o cota pe piat, a foarte mica raportat cu familia Windows, Mac OS X s, i Linux au

cs, tigat procente importante pe piat, a.

T, innd cont ca un utilizator poate opta ntre mai multe sisteme de operare, apar ntrebari
arile

fires, ti legate de aseman


s, i deosebirile dintre ele, care sunt punctele tari s, i punctele

care dintre ele este cel mai bun. n realitate


slabe ale fiecaruia
s, i, n ultima instant, a,
a compara aceste cele trei clase de sisteme este un lucru foarte dificil, date fiind
nsa,
diferent, ele fundamentale de concept s, i realizare, iar mai mult, a trage concluzia ca unul

dintre sisteme este implicit mai bun sau mai slab decat celalalt
este imposibil.
Toate cele trei familii de sisteme de operare ofera performant, e avansate, un mediu stabil
de operare s, i au un domeniu foarte bogat de aplicat, ii disponibile s, i concepute special
pentru acestea. Dar pentru ca filozofiile din spatele manierei n care sistemele au fost
a de scopul
proiectate s, i au evoluat sunt diferite, concluzia finala depinde n mare masur

n care sistemul va fi folosit, gradul de pregatire


al utilizatorilor, configurat, ia hardware s, i
mult, i alt, i factori subiectivi.
Sistemele de operare din familia Windows s, i Unix/Linux ofera variante att pentru
sisteme desktop ct s, i pentru sisteme server. Astfel, Windows XP, Windows Vista,
Windows 7 sunt versiuni desktop ale sistemului de operare de la Microsoft, n vreme ce
Windows Server 2003, Windows Server 2008 sunt versiuni dedicate pentru sisteme
un sistem putnd fi configurat
server. n lunea Unix/Linux diferent, a este mai put, in clara,
pentru a funct, iona att ca server ct s, i ca desktop. Anumite distribut, ii Linux sunt, nsa
dedicate pentru sisteme desktop (Ubuntu, Fedora, openSUSE, Mint, PCLinuxOS) sau
pentru sisteme server (Ubuntu Server, RedHat Enterprise Linux, SUSE Linux
Enterprise). Alte sisteme de operare din familia Unix (OpenSolaris, FreeBSD, NetBSD,
OpenBSD) pot fi folosite s, i ca sistem desktop s, i ca sistem server. Apple ofera Mac OS
X ca sistem desktop s, i Mac OS X Server ca sistem server.

Windows vs. Linux


Un subiect care strnes, te mult interes s, i dezbateri este diferent, a dintre Windows s, i
Linux. De multe ori aceasta diferent, a este una de ordin semantic.
Microsoft Windows desemneaza un produs bine delimitat, avnd asociate nis, te

specificat, ii, pe baza carora


exista un pret, pe piat, a.
De cealalta parte, Linux nu reprezinta un produs bine definit, termenul avnd mai multe
nt, elesuri. Tehnic vorbind, Linux este numele nucleului (kernel-ului) sistemului de
operare. Ca fapt divers, Linux este o marca nregistrata a lui Linus Torvalds, init, iatorului
proiectului nucleul Linux. n prezent, proiectul este nca sub coordonarea lui Linus
Torvalds. Nucleul nu depinde de restul sistemului, as, a cum nici restul pachetelor care
compun sistemul nu depind n mod necesar de kernel, cu unele except, ii notabile.
1

http://en.wikipedia.org/wiki/Usage_share_of_desktop_operating_systems

CAPITOLUL 1. INTRODUCERE

11

Cu toate acestea, majoritatea sistemelor au ajuns sa fie construite pe serie comuna


de pachete, bazata pe proiectul GNU1 , ntreg sistemul fiind pus laolalta n ceea ce se
cheama o distribut, ie: o colect, ie de pachete, mpreuna cu nucleul Linux, de ntret, inerea
s, i actualizarea careia se ocupa o anumita organizat, ie sau comunitate.
Astfel, printr-un abuz de limbaj unanim acceptat, aceste clase de sisteme de operare

sunt denumite distribut, ii Linux (sau GNU/Linux), data fiind legatura


puternica cu nucleul

s, i pachetele de baza construite peste acesta. ntruct Linux este numele nucleului
folosirea sintagmei nucleul Linux sau kernel-ul
sistemului de operare, recomandam
Linux n loc de nucleul de Linux sau kernel-ul de Linux.

1.3.2

Familia Windows

Microsoft a lansat la nceput Windows ca pe o colect, ie de aplicat, ii MS-DOS, rulate ntrun mediu grafic interactiv, care sa us, ureze munca utilizatorului de a lucra cu sistemul.
Primele versiuni folosite pe scara larga au fost Windows 3.0 s, i Windows 3.1.
Un punct important l-a constituit lansarea Windows 95 n 1995. Cu o interfat, a intuitiva
suita bogata de aplicat, ii preinstalate, suportul tehnic dedicat, Microsoft
s, i prietenoasa,
a promovat Windows 95 s, i edit, iile ulterioare ca fiind alegerea ideala pentru sistemul
desktop de uz personal sau pentru birou.

Acest atu a fost pastrat


s, i la edit, iile ulterioare de Windows, unde s-au facut
progrese

semnificative n direct, ia performant, elor: sistemul s-a desprins de MS-DOS, capatnd


un
kernel modern, cu suport de multitasking s, i mai mult, i utilizatori, interfat, a grafica a devenit
atoare

mai bogata s, i mai atrag


s, i, nu n ultimul rnd, necesitatea de cunos, tinte tehnice
din partea utilizatorilor s-a diminuat de la edit, ie la edit, ie.
Edit, iile actuale de Windows sunt construite pe tehnologia NT. Din familia NT fac parte
Windows NT, Windows 2000, Windows XP, Windows Vista, Windows 7 s, i versiunile
server lansate de Microsoft. Tehnologia NT a nsemnat rescrierea nucleului sistemului
, i de integritate
de operare s, i obt, inerea unui sistem de operare modern cu funct, ionalitat
s, i securitate bine definite.
, i, ultima versiune desktop este Windows Vista, iar
n momentul scrierii acestei cart
ultima versiune server este Windows Server 2008. Pe data de 22 octombrie 2009 este
planificata lansarea Windows 7.
Cu o cota impresionanta pe piat, a sistemelor de operare, Windows are rolul unui sistem
de operare universal. Cea mai mare parte a aplicat, iilor existente ruleaza pe sistemele

Windows. Cota mare de piat, a a facut


Windows t, inta a numeroase atacuri de securitate,
, ii sistemului la
rezultnd n cres, terea eforturilor Microsoft pentru asigurarea integritat
ultimele versiuni de Windows.

1.3.3

Mac OS X

Mac OS X reprezinta o familie de sisteme de operare concepute special pentru


calculatoarele Macintosh (Mac-uri) produse de firma Apple. Introduse init, ial n 1984,
1

http://www.gnu.org/

12

INTRODUCERE N SISTEME DE OPERARE

sistemele de operare pentru Macintosh au cunoscut o evolut, ie spectaculoasa pna n


prezent, ment, inndu-se drept concurent pentru Microsoft Windows att prin
performant, ele sistemului propriu-zis ct s, i prin versatilitatea s, i utilitatea aplicat, iilor pe
care le det, in.
Calculatoarele Macintosh au implementat, de la lansare, o arhitectura hardware de tip

Power PC, migrnd mai apoi catre


o arhitectura Intel, moment n care sistemele de
operare pentru Mac-uri au nceput sa reprezinte o concurent, a pentru Windows.
Sistemul de operare a fost radical schimbat la lansarea versiunii 10.0, prin rescrierea
nucleului. Aceasta schimbare este reflectata s, i n modificarea denumirii sistemului de

operare din Mac OS n Mac OS X. Adaugarea


literei X subliniaza trecerea de la
tehnologia Mac OS nanokernel, la tehnologie derivata din Unix.
n prezent, varianta curenta de Mac OS X este 10.6, lansata la data de 28 august 2009.
Prin sistemul de operare s, i prin aplicat, iile care pot rula pe acesta, Mac OS X exceleaza
media, aducnd n acelas, i timp
la capitolul interfat, a grafica s, i n domeniul prelucrarii
inovat, ii orientate spre nevoile utilizatorului individual.

1.3.4

Linux

intrat n lumea sistemelor


Una dintre principalele confuzii pentru un utilizator proaspat
de operare este cea provocata de denumirile Linux s, i Unix. n general, Unix reprezinta
o familie de sisteme de operare. Un sistem de operare este Unix (adica face parte din
familia Unix) daca respecta standardul Single Unix Specification1 . n afara de Linux
(sau mai bine spus GNU/Linux), alte Unix-uri (adica sisteme compatibile cu Single Unix
Specification) sunt Solaris, sistemele de familia BSD (FreeBSD, OpenBSD, NetBSD) s, i
Mac OS X.

Sistemul de operare Unix a aparut


la nceputul anilor 70, n laboratoarele Bell ale AT&T.
Folosirea limbajului C pentru scrierea sistemului de operare a condus la portarea rapida

a acestuia s, i raspndirea
sa n mediul acadamic. Versiunile System V (de la AT&T) s, i
BSD 4.3 au marcat o serie de avansuri importante n anii 80.
Linux este de fapt o clona de Unix. O clona Unix este un sistem de operare care
respecta Single Unix Specification, dar care nu cont, ine componente din sursele init, ialte
Unix. BSD-urile sau Solaris sunt direct derivate din codul Unix s, i pot fi denumite
Unix-uri veritabile.
s-a consolidat
Linux a fost scris de la zero de Linus Torvalds n 1991. Treptat, n jurul sau
o comunitate entuziasta de dezvoltatori, Linux ajungnd n acest moment unul dintre cele
, ile oferite, popularitatea Linux n
mai mari proiecte open-source. Dincolo de funct, ionalitat
ultimii 15 ani s-a datorat aparit, iei acestuia ntr-un context favorabil:

dezvoltatorii proiectului GNU nu reus, isera crearea unui kernel;

cei care urmareau


dezvoltarea viitoarelor sisteme BSD sub o licent, a libera au
pierdut ct, iva ani n procese cu cei de la AT&T legate de licent, ierea codului.
Linus Torvalds a spus ca daca 386BSD ar fi fost disponibil la acea vreme, probabil ca nu
ar fi creat Linux.
1

http://en.wikipedia.org/wiki/Single_UNIX_Specification

CAPITOLUL 1. INTRODUCERE

13

Dupa aparit, ia nucleului Linux, o multitudine de proiecte software avnd la baza acest
s, i important, a acestora crescnd de la an la an. Spre
kernel au fost nfiint, ate, cu numarul

deosebire de cazul Windows-ului, software-ul pe Linux nu a fost scris neaparat


avnd n
minte us, urint, a de utilizare s, i accesibilitatea, des, i aceasta este tendint, a din prezent.
Un nucleu este doar un mediator ntre aplicat, ii s, i resursele hardware este inutil de
, i sau
unul singur. Pentru a obt, ine un sistem de operare complet, diverse comunitat

companii au combinat utilitarele GNU s, i nucleul Linux. Au aparut


astfel distribut, iile
GNU/Linux (Ubuntu, Fedora, Gentoo, Debian, Slackware, OpenSuSE, RedHat etc.),
, i complete pentru operarea sistemului. Din punct
care ofera utilizatorului funct, ionalitat
de vedere strict tehnic, expresia corecta este instalarea unei distribut, ii Linux
(GNU/Linux), nu instalarea Linux. T, innd cont de prevalent, a formei distribut, ie Linux, nu
(vezi
vom insista asupra acestui lucru pe parcursul acesi cart, i pe justet, ea exprimarii
sect, iunea 2.1).
Fiind vorba ndeosebi de mediul academic, majoritatea utilizatorilor aveau cunos, tint, e
avansate de IT s, i apreciau la un sistem stabilitatea, flexibilitatea s, i performant, a, mai
Datorita acestor puternice avantaje, Linux
degraba dect o interfat, a simpla s, i intuitiva.
(ca majoritatea sistemelor Unix, de altfel) a avut un succes exploziv pe servere, s, i a
a mult mai mica pe desktop, unde supremat, ia este nca
cs, tigat teren ntr-o masur

o buna
det, inuta de catre
sistemele de operare de la Microsoft. n momentul de fat, a,
parte din infrastructura Internet-ului se bazeaza pe sisteme rulnd Linux.

1.3.5

Alte Unix-uri

, i BSD, Mac OS X poate fi considerat un sistem


Avnd la baza un kernel Mach1 s, i facilitat
Unix-like. De la Mac OS X 10.5 Leopard, sistemul de operare de la Apple respecta
Single Unix Specification s, i este un Unix veritabil2 .
Solaris3 este sistemul de operare dezvoltat de Sun Microsystems. Init, ial dezvoltat n
format proprietar (closed-source), majoritatea componentelor sunt acum open-source.
OpenSolaris4 este o distribut, ie open-source a sistemului de operare de la Sun, utilizabil
s, i n forma unui LiveCD.
Distribut, iile BSD (Berkeley Software Distribution) sunt distribut, iile derivate din codul
4.4BSD-Lite, ultima versiune de Unix de la Berkeley. Aceste distribut, ii folosesc o licent, a
o parte din componentele software sunt
libera (licent, a BSD). Licent, a fiind permisiva,
integrate n Windows, Mac OS X s, i Solaris. Distribut, iile BSD sunt asociate unei
distribut, ii GNU/Linux: nu cont, in doar nucleul, ci s, i toate aplicat, iile necesare folosirii
sistemului. Dezvoltarea ntregii distribut, ii se realizeaza centralizat. Distribut, iile BSD
sunt:
cele mai folosite astazi

FreeBSD cel mai folosit sistem de operare derivat din BSD axat pe oferirea
unui sistem de operare stabil s, i utilizabil;

OpenBSD sistem de operare derivat din NetBSD, puternic axat pe securitate;


1

http://en.wikipedia.org/wiki/Mach_kernel
http://arstechnica.com/apple/news/2007/08/mac-os-x-leopard-receives-unix-03-certification.ars
3
http://www.sun.com/software/solaris/
4
http://opensolaris.org/os/
2

14

INTRODUCERE N SISTEME DE OPERARE

NetBSD recunoscut pentru portabilitatea sa; este folosit ca punct de plecare


pentru portarea altor sisteme de operare pe noi arhitecturi.

1.3.6

, i open source
Comunitat

Principala diferent, a dintre Linux s, i multe alte sisteme de operare actuale, mai mult sau

mai put, in raspndite,


este faptul ca att nucleul Linux ct s, i componentele unui sistem
GNU/Linux sunt gratuite. Mai mult dect att, sunt free/open-source. Acest lucru
nseamna ca o comunitate vasta de utilizatori s, i ingineri software au acces la ele,
at
, iri. Acesta practica nu este noua,
ci
pentru a le utiliza sau a le aduce noi mbunat
dateaza de la nceputurile Unix la MIT labs, cnd echipele init, iale de hackeri lucrau n
comun pentru dezvoltarea de aplicat, ii Unix.

Conceptul de licent, a sub care funct, ioneaza Linux, alaturi


de aplicat, iile sale, a primit
denumirea de copyleft care, contrar copyright-ului, ofera oricui dreptul de acces,

distribut, ie s, i modificare a unei creat, ii, atta timp ct pastreaz


a aceleas, i caracteristici ale
copyleft-ului. La polul opus, majoritatea sistemelor de operare ce nu apart, in familiei
Linux s, i, cu preponderent, a cele comerciale, se supun n continuare legii copyright-ului
s, i mpiedica intervent, ia utilizatorilor asupra codului sursa (closed source).
, ile open source sunt foarte dinamice, iar, n acest moment, distribut, iile de
Comunitat
Linux beneficiaza din plin de acest lucru. Pna acum ct, iva ani, sistemele Linux
necesitau cunos, tint, e avansate de operare, din motive legate de instrumente grafice de

administrare limitate sau lipsa driverelor din partea producatorilor


de hardware. Mai
mult, accesul limitat la Internet priva utilizatorul obis, nuit de accesul la documentat, ie
n mare parte online), esent, iala pentru ncurajarea utilizatorilor de a
(des, i vasta,
experimenta cu un nou sistem de operare, n contextul n care nu existau campanii de
marketing ca n cazul produselor comerciale.
Lucrurile au nceput totus, i sa se schimbe ntr-un mod radical n momentul n care
Internet-ul a devenit o resursa din ce n ce mai accesibila s, i o serie de companii au

remarcat potent, ialul pe care Linux l avea s, i s, i-au orientat domeniul de activitate catre

acesta. Interesul crescut a ncurajat comunitat, ile sa depuna un efort mai mare pentru a
face aplicat, iile mai accesibile.
Robustet, ea s, i performant, ele superioare au fost mbinate cu o interfat, a bogata s, i o
experient, a vizuala comparabila (daca nu superioara vezi proiectele Compiz s, i Beryl)

cu cea de pe Windows. Suportul din partea producatorilor


de hardware a crescut la
cu implicari
foarte puternice din partea unor nume ca Novell, Canonical, sau
rndul sau,
atoare,

Dell. Astfel, desktop-ul Linux devine o opt, iune atrag


anii urmatori
anunt, ndu-se

Open Source n mediul desktop.


extrem de promit, atori
pentru ascensiunea mis, carii
totus, i, reticent, e cu privire la ncurajarea raspndirii

Exista,
programelor open-source din
moment ce o astfel de libertate a tuturor utilizatorilor este dificil de controlat s, i poate
unificarea pe care o ofera sistemele
crea probleme de interoperabilitate. ntr-adevar,
compact, impune s, i uniformizarea
de operare comerciale, concepute global s, i, totodata,
aplicat, iilor scrise pentru a rula pe ele, n timp ce varietatea deja mare s, i n continua
cres, tere a sistemelor open-source conduce la stabilirea unei multitudini de direct, ii de
dezvoltare ntre care se mparte software-ul conceput pentru toate acestea.
Pe de alta parte, comunitatea de utilizatori ai programelor open-source este n continua

CAPITOLUL 1. INTRODUCERE

15

cres, tere iar dezvoltarea intensa a distribut, iilor Linux conduce la crearea de pachete
versiunea
specifice care faciliteaza accesul la aplicat, iile necesare. n momentul de fat, a,
1
stabila a distribut, iei Debian GNU/Linux ofera peste 25 de mii de pachete .
Cea mai mare comunitate de programatori ce dezvolta aplicat, ii open-source pentru un
foarte mare de platforme s, i sistemele de operare este SourceForge2 . Microsoft a
numar
, i, numita CodePlex3 , axata pe dezvoltarea
ncurajat dezvoltarea unei comunitat
aplicat, iilor open-source folosind tehnologiile Microsoft, precum .NET Framework,
Windows Presentation Foundation, XNA etc. pentru sisteme de operare de la Microsoft,
cu preponderent, a Window XP s, i Windows Vista.

1.3.7

Sisteme de operare pentru dispozitive mobile

din ce n ce mai mare


O data cu dezvoltarea hardware-ului s, i a Internet-ului, un numar

de dispozitive mobile inteligente s, i-au facut


aparit, ia n posesia utilizatorilor. As, a
4
, i avansate de
numitele smartphone-uri poseda sisteme de operare cu facilitat
conectare la Internet, navigare pe Web, citire/scriere de e-mail-uri, folosirea unei
tastaturi virtuale etc. Exemple de astfel de dispozitive sunt iPhone5 de la Apple,
BlackBerry6 , Nokia E717 , HTC8 etc.

Cel mai raspndit


sistem de operare folosit pe dispozitive mobile n general, s, i pe
smartphone-uri n particular este Symbian OS de la Symbian Ltd. Acesta det, ine
aproape 50% din piat, a sistemelor de operare pentru smartphone-uri. Sistemul cont, ine
kernel-ul s, i o serie de aplicat, ii utile n lucrul cu telefonul mobil. Symbian OS ofera o
interfat, a de dezvoltare (SDK) n C++ pentru scrierea de noi aplicat, ii. nfiint, ata n 2008,
Fundat, ia Symbian are ca scop folosirea unei licent, e libere pentru ntreg codul
platformei Symbian.
Windows Mobile este sistemul de opearare s, i suita de aplicat, ii pentru dispozitive
mobile de la Microsoft. Este proiectat sa arate simiar interfet, ei Windows s, i este folosit
cu preponderent, a n cadrul dispozitivelor Pocket PC. Cota de piat, a a Windows Mobile a

scazut
constant n ultimii ani pna la o valoare circa 9%.
iPhone OS este sistemul de operare dezvoltate de Apple pentru iPhone s, i iPod.
Interfat, a acestuia foloses, te gesturi de tip multi-touch se atinge ecranul pentru
impresionant de aplicat, ii.
act, ionarea unui eveniment. iPhone OS ofera un numar
Det, ine, n acest moment, aproape 15% din piat, a dispozitivelor mobile inteligente.
Android este un sistem de operare care foloses, te nucleul Linux. Android este dezvoltat
de Open Handset Alliance, un consort, iu nfiint, at de Google mpreuna cu mari companii

producatoare
de hardware s, i software precum HTC, Intel, Motorala, LG etc. Dezvoltarea
acestuia se realizeaza n cadrul unei licent, e libere (cu unele except, ii), lucru care permite
dezvoltarea relativ facila de noi aplicat, ii. n aceste momente, Android are o cota de
1

http://packages.debian.org/lenny/
http://sourceforge.net
3
http://www.codeplex.com/
4
http://en.wikipedia.org/wiki/Smartphone
5
http://www.apple.com/iphone/
6
http://www.blackberry.com/
7
http://europe.nokia.com/find-products/devices/nokia-e71
8
http://www.htc.com/www/product/dream/overview.html
2

16

INTRODUCERE N SISTEME DE OPERARE

Dezvoltarea Android se realizeaza


piat, a de doar 3%, cauzata s, i de aparit, ia sa recenta.
independent de platforma hardware pe care va rula.
Linux este folosit ca baza pentru mai multe sisteme de operare pentru dispozitive
mobile. Pe lnga Android, LiMo, Maemo s, i Openmoko sunt exemple de sisteme de
operare bazate pe Linux.

1.4
1.4.1

Studiu de caz
Virtualizare. Rularea unui SO dintr-o mas, ina virtuala

O mas, ina virtuala este o aplicat, ie ce creeaza un mediu de execut, ie pentru rularea
unui nou sistem de operare, folosind resursele gestionate de sistemul de operare
prin intermediul mecanismelor oferite de mas, ina virtuala.

gazda,
O caracteristica particulara a mas, inii virtuale este capacitatea acesteia de a izola
de cele ale sistemului de
procesele ce ruleaza sistemul de operare din interiorul sau

operare gazda.
n cadrul caruia

Sistemul de baza,
(sau peste care) ruleaza mas, ina virtuala se cheama
sistem gazda (host). Mas, ina virtuala se mai numes, te s, i sistem oaspete (guest).
Aplicat, ia care permite rularea unui sistem de operare virtualizat se numes, te
hipervizor (hypervisor ) sau virtual machine monitor (VMM) sau sistem/solut, ie de
virtualizare.
Exemple de solut, ii de virtualizare sunt VMware, VirtualBox, VirtualPC, Xen, KVM.

Figura 1.2: Mas, ina virtuala

CAPITOLUL 1. INTRODUCERE

17

, i din resursele sistemului fizic pentru mas, ina


n general, sistemul gazda aloca part

virtuala: un procentaj dedicat din memoria RAM, un spat, iu fizic de stocare de pe


hard-disk-ul calculatorului gazda (alocat n prealabil sau n timp real) pe care mas, ina
virtuala l va folosi ca pe un hard-disk propriu, accesul la diferite dispozitive periferice.
Accesul celui de-al doilea sistem de operare la procesor se face prin intermediul

,i
proceselor mas, inii virtuale, care vor rula alaturi
de celelalte aplicat, ii s, i vor mpart
aceleas, i resurse. Not, iunea de virtualizare nu trebuie confundata cu cea de emulare1 .
Un emulator traduce fiecare instruct, iune din sistemul oaspete n instruct, iuni specifice
Prin folosirea unui emulator este astfel posibila rularea unui program
sistemului gazda.
Un sistem virtualizat va folosi n
pentru o arhitectura diferita de cea a sistemului gazda.
din motive de eficient, a.
Rolul hipervizorului
proport, ie ct mai mare sistemul fizic gazda,
este de a intermedia unele operat, ii privilegiate care nu se pot executa direct peste

sistemul fizic gazda.


Not, iunea de virtualizare este extinsa s, i la nivelul aplicat, iilor. Programele Java ruleaza
n cadrul mas, inii virtuale Java2 . Mas, ina virtuala Java este un mediu independent de
platforma care permite execut, ia n acelas, i context a aplicat, iilor. Un alt exemplu este
Common Language Runtime3 , mas, ina virtuala folosita de .NET Framework 4 . Valgrind
(vezi sect, iunea 14.8.2), folosit pentru depanarea programelor, este, de asemenea, o
mas, ina virtuala la nivelul aplicat, iilor.

De ce virtualizare?
Dezvoltate nca din anii 70, mas, inile virtuale au nceput sa fie folosite intens odata cu
, ii de calcul (procesoare
dezvoltarea sistemelor hardware.
Cres, terea capacitat
, ii de stocare (hard-disk-uri) a condus la aparit, ia
multi-core, memorie) s, i a capacitat

solut, iilor de virtualizare care sa foloseasca eficient resursele hardware puse la

dispozit, ie. Adaugarea


de suport hardware pentru arhitecturile x86 s, i x86_64 (AMD-V5
s, i Intel VT6 ) a condus la accelerarea folosirii solut, iilor de virtualizare att pentru
utilizatorul obis, nuit ct, mai ales, n mediul business.

Unul din principalele motive pentru folosirea virtualizarii,


mai ales n mediul comercial,
arii
sistemelor fizice. n locul folosirii a patru sisteme fizice,
este consolidarea ncarc

se poate folosi un singur sistem fizic n cadrul caruia


sa ruleze patru mas, ini virtuale, cu
efect n diminuarea costurilor de achizit, ie s, i administrare.
Un al avantaj importat n reprezinta securizarea aplicat, iilor. Fiecare mas, ina virtuala
este un mediu izolat s, i sigur (sandbox). O problema care apare pe o mas, ina virtuala

nu va afecta niciun alt sistem s, i va putea fi diagnosticata rapid folosind sistemul gazda.
Virtualizarea este un concept important pentru construirea de platforme de calcul sigure.
Solut, iile de virtualizare permit crearea de instant, e de sisteme de operare sau medii de
impuse. Se pot configura procentaje de resurse care sa fie folosite
execut, ie cu limitari
Se asigura astfel un control fin pentru gestiunea resurselor.
de mas, ina virtualizata.
1

http://en.wikipedia.org/wiki/Emulator
http://www.java.com/en/download/index.jsp
3
http://msdn.microsoft.com/en-us/library/ddk909ch(VS.71).aspx
4
http://msdn.microsoft.com/en-us/netframework/default.aspx
5
http://www.amd.com/us/products/technologies/virtualization/Pages/virtualization.aspx
6
http://www.intel.com/technology/virtualization/
2

18

INTRODUCERE N SISTEME DE OPERARE

este posibilitatea
Pentru utilizatorul obis, nuit, cel mai important avantaj al virtualizarii

rularii mai multor sisteme de operare. Sisteme de operare diferite, versiune de


sisteme operare diferite, pot rula simultan pe acelas, i sistem. Pornirea s, i repornirea unui
a a
sistem de operare oaspete se rezuma la interact, iunea cu solut, ia de virtualizare far
implica act, iuni asupra sistemului fizic.
Pentru un dezvoltator, o mas, ina virtuala reprezinta un mediu ideal pentru dezvoltare s, i

testare. Orice problema a aplicat, iei pe care o dezvolta/testeaz


a va afecta doar sistemul

de operare oaspete. Dezvoltarea la nivelul nucleului (kernel programming) se realizeaza,


n general, folosind mas, ini virtuale. Scenarii complexe de monitorizare a performant, ei
a pierderea productivitat
, ii.
sau depanare pot fi implementate pe o mas, ina virtuala far
Un avantaj al folosirii mas, inilor virtuale este mobilitatea acestora. O mas, ina virtuala
a ca un set de fis, iere. Mutarea acestora pe un alt sistem de calcul
este, de obicei, vazut
este echivalent cu migrarea mas, inii virtuale pe acel sistem. Sistemul de operare din
cadrul mas, inii virtuale va rula n acelas, i mod pe un nou sistem. Este posibila migrarea
tehnica denumita Live Migration1 .
unei mas, ini virtuale n timp ce aceasta ruleaza,

Exemple de mas, ini virtuale


O data cu proliferarea tehnologiilor de virtualizare, ultimul deceniu a nsemnat aparit, ia
mai multor companii s, i solut, ii. Printre cele mai cunoscute solut, ii de virtualizare actuale
sunt VMware, VirtualBox, VirtualPC, Xen, KVM, OpenVZ. Aceste solut, ii de virtualizare
n general, pe arhitecturi x86 sau x86_64.
ruleaza,
VMware, Inc.2 este o companie americana care produce mai multe aplicat, ii de
virtualizare. Cele mai cunoscute sunt VMware Workstation, VMware Player, VMware
Server s, i VMware ESX. VMware Workstation, Player s, i Server sunt aplicat, ii care
ruleaza ntr-un sistem de operare gazda (Windows sau Linux). VMware Fusion este
versiunea pentru Mac OS X. VMware ESX, versiunea enterprise, este un sistem de
operare complet peste care se instaleaza instant, e de mas, ini virtuale.
VirtualBox3 este o solut, ie de virtualizare dezvoltata de Sun Microsystems. Similar cu
VMware Workstation, este o aplicat, ie care ruleaza peste un sistem de operare gazda

(Windows, Linux, Mac OS X, Solaris) s, i n cadrul carei


pot fi instalate alte sisteme de
operare. VirtualBox Open Source Edition este disponibila sub licent, a GNU.
Microsoft Virtual PC4 este un sistem de virtualizare pentru sisteme de operare din
familia Windows. Similar VirtualBox s, i VMware Workstation, Virtual PC ofera suport
pentru sisteme oaspete doar din familia Windows. Se pot rula s, i sisteme de operare
Linux, dar cu pas, i suplimentari de configurare.
Xen5 este un hipervizor (virtual machine monitor) creat la Universitatea din Cambridge
s, i dezvoltat actualmente de comunitatea Xen ca software liber, sub licent, a GNU. Xen
este similar VMware ESX. Are suport n nucleul sistemului de operare Linux, NetBSD s, i
Solaris. Peste sistemul de baza pot fi instalate alte sisteme de operare oaspete. Xen
1

http://en.wikipedia.org/wiki/Live_Migration
http://www.vmware.com/
3
http://www.virtualbox.org/
4
http://www.microsoft.com/windows/virtual-pc/
5
http://www.xen.org/
2

CAPITOLUL 1. INTRODUCERE

19

foloses, te o forma de virtualizare denumita paravirtualizare care permite performant, a


Paravirtualizarea necesita nsa modificarea sistemului de operare oaspete pentru
ridica.
a putea rula peste Xen. Daca sistemul de baza ofera suport de virtualizare hardware,
atunci nu mai este necesara modificarea sistemului de operare; efectul este posibilitatea
unui sistem Windows nemodificat peste Xen.
rularii
KVM1 (Kernel-based Virtual Machine) este o infrastructura de virtualizare a nucleului
Linux. KVM ofera suport pentru virtualizarea hardware (Intel VT s, i AMD-V). KVM este
inclus n nucleul Linux ncepnd cu versiunea 2.6.20. O parte din utilitarele necesare
sunt furnizate de QEMU2 .
OpenVZ3 este o tehnologie la nivelul sistemului de operare bazata pe Linux. Licent, iat
GPL, OpenVZ constituie baza pentru Parallels Virtuozzo Containers, o aplicat, ie
proprietara furnizata de Parallels, Inc.4 OpenVZ este mai degraba un container dect o

mas, ina virtuala.


OpenVZ nu virtualizeaza ntreg sistemul de operare. Nucleul
sistemului de operare gazda este folosit de toate mas, inile virtuale (denumite s, i

containere sau medii virtuale). Procesele din cadrul fiecarui


container sunt izolate, dar
totus, i, overhead
se foloses, te acelas, i nucleu. Prezent, a aceluias, i nucleu nseamna,
redus pentru lucrul cu diversele containere rezultnd n viteza s, i performant, a ridicate.

Cuvinte cheie

programe de baza

open-source

sistem de operare

smartphone

nucleu (kernel)

virtualizare

portabilitate

hipervizor

API

VMware

biblioteci

VirtualBox

Windows

VirtualPC

Mac OS X

Xen

Linux

KVM

Unix

OpenVZ

ntrebari

1. Care dintre urmatoarele


aplicat, ii poate fi privita ca o componenta a sistemului de
operare?

q procesor de text
q player pentru fis, iere video
1

http://www.linux-kvm.org/page/Main_Page
http://www.nongnu.org/qemu/
3
http://wiki.openvz.org/Main_Page
4
http://www.parallels.com/eu/
2

20

INTRODUCERE N SISTEME DE OPERARE

q interpretor de comenzi
q client de email

2. Care dintre urmatoarele


NU reprezinta o resursa partajata n cazul virtualizarii?

q RAM
q hard-disk
q procesor
q BIOS

3. Care dintre urmatorii


este autorul unui limbaj de programare?

q Larry Wall
q Linus Torvalds
q William Henry Gates III
q Andrew S. Tanenbaum

4. Care dintre urmatoarele


NU este o funct, ie a sistemului de operare?

q controlul accesului la memorie

q cautarea
s, i eliminarea programelor virus
ntre procese
q asigurarea comunicarii

q organizarea fis, ierelor n directoare

5. Care din urmatoarele


sisteme de operare NU este folosit pentru dispozitive mobile?

q OpenSolaris
q iPhone OS
q Symbian OS
q Android

6. Care din urmatoarele


tehnologii de virtualizare ruleaza NUMAI pe un sistem Linux?

q VirtualBox
q VMware
q VirtualPC
q OpenVZ
7. Ce reprezinta termenul GNU din distribut, ie GNU/Linux?

q o antilopa din Africa

q o anagrama a cuvntului gun (arma)

q un proiect care produce o componenta importanta a aplicat, iilor ce ruleaza


peste nucleul Linux

q compania care se ocupa de dezvoltarea nucleului Linux

CAPITOLUL 1. INTRODUCERE

21

8. Care din urmatoarele


sisteme de operare are cea mai mare cota pe piat, a
sistemelor desktop?

q Windows
q Mac OS X
q Linux
q OpenSolaris

9. Care din urmatoarele


sisteme de operare are cea mai mare cota pe piat, a
dispozitivelor mobile inteligente?

q Windows Mobile
q iPhone OS
q Android
q Symbian OS

10. Care din urmatoarele


sisteme de operare este cel mai vechi?

q DOS
q Unix
q Linux
q OpenBSD

Capitolul 2
de baza
Instalarea Linux. Configurari
Unix is the answer, but only if you phrase the question
very carefully.

Ce se nvat, a din acest capitol?

Ce este Linux
Distribut, ii GNU/Linux

Partit, ionarea discului; pregatirea


pentru instalare

Instalarea Kubuntu
Interfat, a cu utilizatorul; interfat, a n linia de comanda
Autentificarea n sistem
de baza ntr-un sistem Linux
Configurari

Interoperabilitate Linux/Windows

2.1

Linux. Distribut, ii Linux

Termenul Linux este deseori folosit pentru a reprezenta o ntreaga clasa de sisteme
de operare s, i nu un sistem de operare concret. Init, ial, termenul Linux a fost folosit
pentru a referi nucleul Linux1 (Linux kernel), sistemele de operare bazate pe Linux s, i
pe utilitarele din proiectul GNU2 fiind numite sisteme de operare GNU/Linux. Ulterior,
termenul a ajuns sa fie folosit pentru a referi att nucleul Linux ct s, i programele care
funct, ioneaza cu acesta.
O mare parte din utilitarele folosite n Linux sunt dezvoltate ca proiecte open source
sunt produse
(vezi capitolul 14) s, i, des, i sunt dezvoltate ntr-o maniera colaborativa,
independent unele de altele. Licent, ele sub care se afla aceste proiecte permit
1
2

http://www.kernel.org/
http://www.gnu.org/

23

24

INTRODUCERE N SISTEME DE OPERARE

facnd

redistribuirea codului sursa,


astfel posibila aparit, ia unor noi proiecte mai mari,

care sa adune la un loc programe dezvoltate independent s, i sa le faca disponibile la un


loc sub forma unei distribut, ii.
O distribut, ie Linux reprezinta astfel o colect, ie de programe, unele din ele modificate
special pentru acea distribut, ie, care sunt combinate cu o versiune de kernel, de multe
ori s, i aceasta modificata pentru acea distribut, ie, pentru a crea un sistem de operare.
atat

Distribut, iile Linux au cap


de-a lungul timpului cele mai variate forme s, i destinat, ii.
pe
Unele au ca scop principal utilizarea lor pe servere, altele sunt destinate utilizarii
Ssisteme desktop, iar altele sunt optimizate pentru a ocupa ct mai put, ine resurse
putnd astfel fi folosite n sistemele embedded.

2.1.1

Principalele distribut, ii Linux

n momentul de fat, a exista peste 300 de distribut, ii active (care sunt dezvoltate n
fiind utilizate
continuare). Dintre ele doar put, in peste 10 sunt cunoscute la scara larga,
pentru scopuri generale.
De cele mai multe ori o distribut, ie nu este dezvoltata de la zero, punctul de plecare
constituindu-l un anumit stadiu al unei alte distribut, ii. Noua distribut, ie poate mos, teni de
la cea din care este dezvoltata diverse elemente, cum ar fi modul n care se instaleaza

aplicat, ii noi, locul n care se gasesc


diverse fis, iere de configurare, felul n care arata
aceste fis, iere etc.
a pe pagina web http://distrowatch.com. Aici
Popularitatea distribut, iilor poate fi urmarit

zilnice ale
este realizat un clasament al distribut, iilor pe baza numarului
de accesari
Acest clasament nu ia n considerare
informat, iilor despre distribut, ie pe pagina amintita.
a interesul
efortul depus pentru ment, inerea distribut, iei, dar arata n mare masur
manifestat de utilizatori.
Cele mai accesate 16 distribut, ii n ultimul an (la data de 19.09.2009) sunt prezentate

n tabelul 2.1 (coloana Accese prezinta numarul


mediu de accese zilnice pe perioada
ultimul an; Distribut, ia SLS este descrisa online1 ).
Pe lnga distribut, iile de uz general (pentru servere sau pentru calculatoare personale)
exista s, i distribut, ii dedicate unui scop precis (one purpuse) spre exemplu Musix2 ,
distribut, ie dedicata producerii de material multimedia, SystemRescueCD3 , distribut, ie
Live CD (vezi sect, iunea 2.2.3) specializata n repararea unui calculator pe care sistemul
de operare nu se mai init, ializeaza din motive ce t, in de software, sau BackTrack4 ,
unei ret, ele de calculatoare.
distribut, ie Live CD care ofera utilitarele necesare atacarii
O clasa aparte de distribut, ii o reprezinta cele care au ca t, inta ocuparea a ct mai put, in
, te acest lucru este
spat, iu.
Cea mai cunoscuta distribut, ie ce urmares
5
DamnSmallLinux , distribut, ie care reus, es, te sa includa n doar 50MB o distribut, ie
completa cu interfat, a grafica s, i cu toate aplicat, iile uzuale.
1

http://en.wikipedia.org/wiki/Softlanding_Linux_System
http://www.musix.org.ar/en/
3
http://www.sysresccd.org/
4
http://www.remote-exploit.org/backtrack.html
5
http://www.damnsmalllinux.org/
2

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

25

Tabelul 2.1: Cele mai accesate distribut, ii pe distrowatch.com (ultimul an)


Poz.
Nume
Anul aparit, iei
Derivata din
Accese
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Ubuntu
openSUSE
Fedora
Mint
Debian
Mandriva
PCLinuxOS
Puppy
Sabayon
CentOS
Arch
MEPIS
Slackware
FreeBSD
Kubuntu
Damn Small

2004
1994
2003
2006
1993
1998
2003
2005
2006
2003
2002
2003
1993
1993
2005
2003

Debian
Slackware
Red Hat
Ubuntu

Red Hat
Mandriva (Mandrake)

Gentoo
Red Hat

Debian
SLS
386BSD
Ubuntu
Knoppix

2221<
1454=
1441>
1401<
1074<
970=
853<
718>
667>
626<
617>
586=
561>
491>
427<
423<

, ile au dezvoltat distribut, ii caracteristice unor anumite zone


Pe lnga acestea, comunitat
1
geografice Kiwi Linux este o distribut, ie adaptata utilizatorilor din Romnia.
Pe Internet sunt disponibile mai multe diagrame care prezinta evolut, ia distribut, iilor s, i

felul n care au derivat una din alta. O simpla cautare


a s, irului de caractere linux distro
2
timeline pe Google Images va oferi cteva zeci de variante ale acestei diagrame. O
versiune care cont, ine doar principalele distribut, ii este prezentata n figura 2.1.

2.1.2

Debian. Ubuntu

Una dintre primele distribut, ii aparute


este Debian. Din 1993 s, i pna n prezent aceasta
distribut, ie a reprezentat punctul de plecare a peste 40 de distribut, ii.
Unul dintre cele mai mari avantaje ale distribut, iei l reprezinta suportul bun disponibil pe
Internet, att pe pagina web oficiala 3 ct s, i pe alte site-uri. Distribut, ia ofera posibilitatea
de a instala s, i configura sistemul de operare folosind pachete, fiind disponibile peste
25000 de pachete4 exista disponibil suport pentru actualizarea facila s, i organizata a
sistemului de operare. De asemenea sunt disponibile trei variante ale distribut, iei: stable,
testing s, i unstable, exitnd astfel posibilitatea alegerii gradului de stabilitate s, i noutate
dorit.
Cea mai cunoscuta distribut, ie derivata din Debian este Ubuntu5 . n momentul de fat, a
Ubuntu este s, i distribut, ia cu cea mai mare popularitate dintre toate distribut, iile existente,
fiind pe primul loc n clasamentul distrowatch.com de aproape patru ani. Atuul principal
1

http://kiwilinux.org/
http://images.google.com/
3
http://www.debian.org/support/
4
n versiunea Debian 5.0 (lenny )
5
http://www.ubuntu.com
2

26

INTRODUCERE N SISTEME DE OPERARE

Figura 2.1: Evolut, ia principalelor distribut, ii Linux

al acestei distribut, ii este us, urint, a n utilizare. Distribut, ia cont, ine toate aplicat, iile de care
n mod automat. Un avantaj
un utilizator are nevoie s, i realizeaza multe dintre configurari
mare pe care l ofera este suportul disponibil pe forumul oficial.

Nivelul de adopt, ie al acestui sistem de operare a crescut us, or odata cu distribuirea


acestuia preinstalat pe calculatoare. Prima init, iativa n acest sens a avut-o unul dintre

cel mai mari producatori


de echipamente IT care, n mai 2007, a anunt, at ca va scoate
pe piat, a calculatoare desktop s, i laptop-uri care au preinstalat Ubuntu. n prezent, un
de computere desktop, laptop dar s, i de tip netbook sunt vndute cu Linux
mare numar
preinstalat.

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

2.1.3

27

Tipuri de distribut, ii Linux

n IT exista doua concepte importante legate de stabilitatea, sigurant, a s, i gradul de


noutate al aplicat, iilor (s, i nu numai): versiunile stabile (stable) s, i cele cu un grad de
noutate ridicat (bleeding edge). Aceste doua concepte reprezinta doua extreme ale
modului n care este dezvoltata o aplicat, ie.
Versiunile stabile (stable) reprezinta versiuni ale programelor care au fost testate un

timp ndelungat, ale caror


bug-uri au fost rezolvate, care nu prezinta probleme de
incompatibilitate s, i care au un grad de sigurant, a ridicat. ntr-o versiune stabila este
destul de improbabil sa apara bres, e de securitate. Aceste versiuni apar rar deoarece

este nevoie de timp pentru a crea stabilitatea necesara.


Dezavantajul versiunilor stabile este acela ca aplicat, iile nu prezinta niciun grad de
noutate. De multe ori pot sa dureze ani pna cnd o noua versiune a unei aplicat, ii sa fie
introdusa ntr-o versiune stabila a unei distribut, ii Linux.
Versiunile stabile sunt folosite n special pentru severe datorita gradului de stabilitate s, i
sigurant, a oferit.
Versiunile cu un grad de noutate ridicat (bleeding edge) reprezinta versiuni recente
at
, iri s, i inovat, ii. Aceste versiuni
ale programelor, versiuni care includ ultimele mbunat
a influent, at, a de marimea

apar destul de des, frecvent, a lor de aparit, ie fiind n mare masur


, ii ce dezvolta aplicat, ia s, i de mbunat
at
, irile aduse.
comunitat
Dezavantajul versiunilor cu grad de noutate ridicat este acela ca prezinta un grad de

slabe a aplicat, iilor


stabilitate s, i de sigurant, a incert, de multe ori scazut.
Datorita testarii

(din lipsa de timp), acestea prezinta deseori gauri


de securitate sau probleme de
stabilitate.
Versiunile cu grad de noutate ridicat sunt recomandate celor care doresc sa aiba cele
mai noi tehnologii implementate cu orice cost. Ele nu sunt recomandate pentru servere,
ci pentru calculatoare unde stabilitatea s, i sigurant, a nu sunt elemente cheie.
ntre cele doua tipuri de aplicat, i prezentate exista numeroase niveluri de compromis.
Alegerea unui astfel de nivel pentru un sistem de operare (mai aproape de stabilitate
a t, innd cont de scopul
sau mai aproape de cele mai noi tehnologii) trebuie facut
calculatorului pe care va fi instalat s, i de gradul de securitate s, i de stabilitate pe care
trebuie sa l prezinte acesta.
Distribut, iile au moduri diferite de tratare a conceptelor stable s, i bleeding-edge.
Spre exemplu, distribut, ia Debian poate fi instalata n 3 versiuni:
cu aplicat, ii testate mult timp
stable versiune stabila,

testing versiune de testare, dupa o perioada de timp devine versiunea stable


unstable versiune care incorporeaza programele n versiunile lor bleeding-edge,
devine versiunea testing dupa o perioada
Ubuntu are un ciclu de dezvoltare de 6 luni (n engleza release cycle ciclu de lansare).
Acest lucru presupune dezvoltarea distribut, iei timp de 6 luni s, i lansarea unei noi versiuni
n prezent, Ubuntu lanseaza distribut, ii n aprilie (numarul

dupa aceasta perioada.


X.04)

s, i n octombrie (numarul
X.10) X reprezinta ultimele doua cifre din an (pentru 2009
9, 2010 10 etc.).

28

INTRODUCERE N SISTEME DE OPERARE

Pe lnga aceste versiuni, Ubuntu are s, i o versiune LTS (Long Term Support) cu un ciclu
de dezvoltare de 2 ani, versiune pentru care este oferit suport timp de 3 ani pentru
sisteme desktop (5 ani pentru sisteme server).
Pentru fiecare versiune de Ubuntu/Kubuntu, cele mai utilizate trei variante de instalare
sunt:

Instalarea server este mai apropiata de Debian s, i de stabilitatea acestuia. Este

recomandata pentru calculatoare care trebuie sa ofere stabilitate s, i sigurant, a.


permite utilizatorului sa instaleze varianta
Instalarea desktop (cea mai uzuala)
desktop a sistemului de operare folosind un asistent n mod grafic. Pentru o buna
funct, ionare, se recomanda utilizarea unui sistem cu cel putin 384MB de RAM.

Instalarea alternate permite utilizatorului sa instaleze varianta desktop, nsa


asistentul de instalare nu va mai fi unul n mod grafic ci unul n mod text, bazat pe
asistentul de instalare al distribut, iei Debian. Din acest motiv varianta alternate
poate fi instalata s, i pe sisteme cu mai put, in de 384 MB de RAM. Un alt avantaj al
avansate a
variantei alternate este acela ca permitea realizarea unei partit, ionari
hard-disk-ului, oferind suport pentru utilizarea RAID1 sau LVM2 (ambele tehnologii
permit realizarea de partit, ii care includ spat, iul de pe mai multe hard-disk-uri).
Pe lnga aceste versiune mai exista s, i versiunea Netbook Remix (pentru calculatoare
de tip netbook ).

2.2

Instalarea Linux

2.2.1

Alegerea distribut, iei Linux

Dupa cum a fost ment, ionat s, i n sect, iunea 2.1, exista mai multe tipuri de distribut, ii.
Cteva criterii de alegere a unei distribut, ii au fost ment, ionate anterior.
Principalele criterii folosite n alegerea distribut, iilor sunt:

nivelul de stabilitate s, i gradul de noutate al aplicat, iilor (n relat, ie cu nivelul de


stabilitate, dupa cum a fost ment, ionat anterior)

suportul oferit de comunitate (sau de compania care dezvolta distribut, ia)


familiaritatea cu anumite componente ale sistemului, n principal sistemul de
pachete (acesta nu reprezinta un criteriu foarte important pentru noii utilizatori)

suportul pentru hardware-ul disponibil n calculator distribut, iile pot fi disponibile


pentru platforme diferite (procesoare diferite) s, i pot oferi acces facil la driver-e
pentru hardware variat

resursele disponibile pe calculator n cazul n care resursele calculatorului pe

care va instala Linux sunt scazute,


se recomanda cautarea
unei distribut, ii cu

cerint, e scazute
1
2

Redundant Array of Inexpensive Disks


Logical Volume Manager

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

29

, te utilizarea Linux
destinat, ia sistemului de operare n cazul n care se urmares
pentru o anumita activitate/sarcina se recomanda instalarea unei distribut, ii special
(vezi sect, iunea 2.1.1).
concepute (n cazul n care exista)
Distribut, ia aleasa ca suport pentru aceasta carte este Kubuntu 9.10 Desktop1 , distribut, ie
derivata din Ubuntu, care:

ofera un nivel acceptabil de stabilitate raportat la nivelul de noutate al pachetelor


formata din tot, i utilizatorii de Ubuntu s, i derivate ale
are o comunitate foarte larga,
acestuia

ofera suport facil pentru hardware proprietar, hardware care nu are driver-e opensource disponibile implicit n distribut, iile Linux; majoritatea dispozitivelor comune
sunt suportate

poate funct, iona bine pe un sistem desktop actual, dat fiind cerint, ele acesteia2
sistemul pe care va fi instalat va fi utilizat ca desktop

2.2.2

Pregatirea
sistemului

Verificarea cerint, elor sistemului. Spat, iul de swap


Fiecare sistem de operare (s, i implicit distribut, ie Linux) este nsot, it de o serie de cerint, e
care, n cazul n care sunt ndeplinite,
minime hardware. Acestea sunt recomandari
asigura buna funct, ionare a sistemului de operare. n anumite situat, ii, programele care se
ocupa de instalarea sistemului de operare vor detecta nendeplinirea cerint, elor minime
hardware s, i vor refuza contiuarea procesului de instalare.

Distribut, ia aleasa n aceasta carte (Kubuntu 9.10) are urmatoarele


cerint, e hardware
n paranteza se regasesc

(recomandari,
cerint, ele minime):

procesor x86 700 MHz (min: 300 MHz)


a mediu grafic)
384 MB RAM (min: 64 MB RAM la instalarea far

8 GB spat, iu pe HDD (min: 4 GB)


placa video capabila sa afis, eze rezolut, ia 1024x768 (min: 640x480)
pentru instalare s, i actualizare a sistemului conexiune la Internet (min: CD-ROM
sau placa de ret, ea)
Printre principalele probleme ce t, in de utilizarea facila a unui sistem de operare o
reprezinta lipsa memoriei RAM. Sistemul de operare foloses, te pentru stocarea datelor

temporare memoria RAM. Aceasta are avantajul unui timp de raspuns


s, i al unei viteze
, ii (sistemele
de citire foarte mari, nsa este limitata din punctul de vedere al capacitat
actuale nu au, n mod normal, mai mult de 2GB de memorie RAM).
Atunci cnd ntreaga memorie RAM este umpluta cu date, exista doua solut, ii
alternative. Prima din ele consta n nealocarea de memorie RAM pentru programele
1
2

http://www.kubuntu.org/
https://help.ubuntu.com/community/Installation/SystemRequirements

30

INTRODUCERE N SISTEME DE OPERARE

care cer acest lucru. Ca urmare programul respectiv nu va putea funct, iona s, i va genera
erori. Atunci cnd programul n cauza este unul vital pentru funct, ionarea sistemului de

operare, funct, ionarea ntregului sistem de operare poate deveni instabila.


A doua varianta este aceea n care datele care ar trebui stocate n memoria RAM sunt
stocate ntr-o alta memorie (pe hard-disk sau pe o memorie pe USB). Deoarece
memoria RAM este cea mai rapida memorie din sistem, utilizarea unui alt tip de
de performant, a.
Aceasta solut, ie se numes, te
memorie va atrage dupa sine penalizari
daca memoria RAM este plina s, i apar
swapping datorita modului n care funct, ioneaza:
cereri pentru alocarea de noi zone de memorie, o parte din datele aflate deja n
memoria RAM sunt mutate pe un alt tip de memorie, n acest fel eliberndu-se memorie
RAM. n momentul n care datele mutate anterior pe un alt tip de memorie sunt cerute
de programe, ele sunt mutate napoi n RAM (daca nu este suficient loc n acel moment
se va elibera o parte din RAM copiind alte date din RAM pe suportul de memorie).
Cea mai uzuala s, i ieftina solut, ie de memorie folosita pentru swap este hard-disk-ul (vezi
sect, iunea 5.6). Sistemele de operare de tip Linux folosesc n general o zona dedicata pe
hard-disk numita partit, ie de swap. Aceasta partit, ie are n general dimensiuni apropiate
de cele ale memoriei RAM (de ordinul 1-2 GB). Windows-ul s, i sistemul de operare Mac

OS X folosesc pentru swap fis, iere a caror


dimensiune se poate extinde sau mics, ora n
, i.
funct, ie de necesitat

Partit, ionare
O partit, ie reprezinta o diviziune logica a unui hard-disk. Prin partit, ionare un hard , it n mai multe partit, ii. Pe un hard-disk poate exista s, i o singura
disk este mpart
partit, ie.
Un hard-disk este nepartit, ionat atunci cnd pe el nu exista nicio partit, ie.
Partit, ionarea unui hard-disk l face pe acesta sa aiba aceeas, i comportare ca mai multe
hard-disk-uri independente. Diferent, a ntre partit, ii s, i hard-disk-uri reale consta n faptul
ca partit, iile de pe un hard-disk folosesc aceleas, i resurse hardware (s, i, implicit, n cazul
unei defect, iuni hardware a hard-disk-ului, datele de pe toate partit, iile pot deveni
inaccesibile). n plus partit, iile pot fi redimensionate dupa ce au fost create, n schimb

discurile au o dimensiune fixa.


ntr-o partit, ie se poate crea un sistem de fis, iere pentru stocarea fis, ierelor sau partit, ia
poate fi utilizata n scopuri speciale, cum sunt de exemplu partit, iile de swap. Partit, iile de
swap nu folosesc un sistem de fis, iere ca NTFS, FAT32 sau ext3. Sistemul de operare
are metode proprii de a organiza datele n ele s, i de a le face us, or de accesat (vezi
capitolul 4).
de partit, ii sunt urmatoarele:

Avantajele utilizarii
mai multor sisteme de operare pe acelas, i hard-disk se
posibilitatea instalarii
poate alege ulterior, la pornirea sistemului de calcul, care din ele va fi folosit (vezi
sect, iunea 6.2);

posibilitatea de a separa datele personale de datele folosite de sistemul de

operare s, i de programe daca datele personale ale utilizatorilor se gasesc


pe o

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

31

alta partit, ie, sistemul de operare nu mai poate fi pornit s, i este necesara
reinstalarea lui, datele nu vor fi afectate n niciun fel;

se poate utiliza acelas, i spat, iu de swap ntre mai multe sisteme de operare de tip
Linux instalate pe acelas, i sistem de calcul (folosind aceeas, i partit, ie de swap pentru
toate).

Tipuri de partit, ii
Primul sector fizic de pe un hard-disk poarta numele Master Boot Record (MBR)
(vezi sect, iunea 6.2.1). Acest sector are 512 octet, i s, i cont, ine informat, ii importante
despre modul n care este partit, ionat hard-disk-ul.
Daca acest sector este s, ters sau suprascris toate informat, iile de pe hard-disk se pierd.1

n cadrul MBR se gasesc


informat, ii despre fiecare partit, ie de pe hard-disk. Aceste

informat, ii sunt stocate ntr-o tabela de partit, ii primare care are doar patru intrari.
Prin
urmare MBR-ul poate ret, ine informat, ii pentru doar patru partit, ii primare. Una dintre
aceste patru partit, ii va fi marcata ca activa s, i de pe ea se va ncerca pornirea sistemului
de operare.
O partit, ie primara poate cont, ine doar un singur sistem de fis, iere. Pentru a elimina
limitarea pe care o prezinta MBR-ul (de a putea ret, ine doar patru partit, ii primare) a fost
Acest tip de partit, ie ocupa tot o intrare n tabela de partit, ii din
creata partit, ia extinsa.
mai multe partit, ii logice, fiecare partit, ie avnd
MBR nsa poate cont, ine la rndul sau

asociat un sistem de fis, iere. Numarul


de partit, ii logice incluse ntr-o partit, ie extinsa este
limitat doar de dimensiunile partit, iei extinse s, i de structura de date folosita pentru a ret, ine
informat, iile despre partit, iile logice.
Unele sisteme de operare trebuie sa fie instalate pe partit, ii primare pentru a putea porni.
n aceasta categorie intra MS-DOS s, i toate versiunile de Windows care depind de el
(Windows 3.x, Windows 95, Windows 98, Windows Millenium), precum s, i BSD.

2.2.3

Live CD

Pentru Ubuntu 9.10 (s, i derivatele precum Kubuntu) varianta grafica de instalare este
disponibila sub forma unui Live CD.
Un Live CD (sau Live DVD) este un CD (DVD) care cont, ine un sistem de operare
a a avea nevoie de instalarea pe un hard-disk
care poate fi pornit direct (boot-abil), far
sau de prezent, a acestuia.
Exista s, i Live USB-uri, dispozitive USB boot-abile cu sisteme de operare care au, de

multe ori, adaugat


a s, i posibilitatea scrierii informat, iilor pe USB (comparativ cu Live
CD/DVD-urile unde informat, iile se ret, in implicit doar n memorie).
1
chiar daca informat, iile din MBR se pierd, folosind utilitare specializate se pot recupera datele de pe
hard-disk prin recunoas, terea tiparelor caracteristice sistemelor de fis, iere

32

INTRODUCERE N SISTEME DE OPERARE

Termenul Live vine de la faptul ca pe un singur disc se gasesc


toate fis, ierele necesare

funct, ionarii unui sistem de operare, fara a fi necesara copierea unui fis, ier pe hard-disk
naintea pornirii sistemului de operare.
Astfel un Live CD nu modifica n niciun fel sistemul de operare instalat pe hard-disk,

except, ie facnd
situat, iile cnd utilizatorul dores, te n mod expres acest lucru. Un sistem
de operare prezent pe un Live CD este totus, i unul normal, astfel nct are nevoie de
existent, a unui suport pentru a putea salva informat, ii de stare n fis, iere etc.
Pentru a rezolva problema lucrului cu fis, iere, n condit, iile n care n mod implicit nu se
lucreaza cu un hard-disk, un Live CD foloses, te un ramdisk (o port, iune din memoria
RAM) precum un hard-disk.
Toate datele care se scriu n ramdisk sunt accesibile pe toata perioada n care sistemul
Atunci cnd acesta este oprit, datele din RAM se pierd s, i, implicit,
de operare ruleaza.
tot cont, inutul ramdisk -ului este s, ters. De aceea, la oprirea unui sistem pornit de pe Live
CD, sistemul de calcul revine la starea anterioara pornirii.
Utilizarea unei port, iuni din memoria RAM pe post de hard-disk ofera avantajul unui timp
de acces s, i a unei rate de transfer mai bune dect n cazul unui disk. Dezavantajul este
acela ca aplicat, iile vor avea disponibila o cantitate mai mica de RAM. Pentru a putea rula
n condit, ii normale un Live CD are nevoie de 512MB de memorie RAM, minimul necesar
fiind 256MB.
s, i utilizarii
unui sistem de operare n
As, adar un Live CD ofera posibilitatea testarii
condit, ii de deplina sigurant, a pentru software-ul instalat pe sistemul de calcul. De multe
ori, Live CD-urile sunt folosite pentru recuperarea datelor aflate pe o partit, ie ce nu mai
poate fi accesata din sistemul de operare instalat pe hard-disk (spre exemplu atunci
cnd sistemul de operare nu mai porneste).

2.2.4

Instalare Kubuntu

Kubuntu este o distribut, ie derivata din Ubuntu, distribut, ie care foloses, te ca desktop
environment KDE n loc de GNOME (vezi sect, iunea 13.7). Kubuntu este parte a
aceleas, i repository-uri s, i aceleas, i
proiectului Ubuntu s, i foloses, te aceeas, i arhitectura,
pachete ca s, i Ubuntu (vezi sect, iunea 3.2).
Pentru a instala Kubuntu (s, i n general orice distribut, ie Linux) pe hard-disk este
necesara crearea a cel put, in doua partit, ii: una pe care va fi instalat sistemul de operare
propriu-zise (folosind
s, i una pentru swap. Acest lucru poate fi realizat naintea instalarii
programe specializate n administrarea partit, iilor cum ar fi fdisk, GParted, PQMagic
folosind utilitarul de partit, ionare pus la
etc.) sau poate fi realizat n timpul instalarii
dispozit, ie n acest sens de programul asistent de instalare.
Instalarea Kubuntu 9.10 (varianta Desktop) ncepe prin introducerea Live CD-ului n
unitatea optica s, i repornirea calculatorului (alternativ, se poate realiza instalarea de pe
USB stick). n cazul n care BIOS-ul nu este configurat sa init, ializeze sistemul de
operare de pe unitatea optica (USB stick), trebuie realizata aceasta configurare.
Dupa ce calculatorul a init, ializat sistemul de operare de pe CD, va fi afis, at un ecran ce
permite alegerea modului n care va fi folosit Live CD-ul (figura 2.2)

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

33

Figura 2.2: Alegerea modului n care va fi folosit Live CD-ul

Prima opt, iune din lista va porni Kubuntu folosind configurarile


implicite. Din mediul grafic

pornit se poate alege ulterior pornirea instalarii.


A doua opt, iune (Install Kubuntu) va porni
direct instalarea. Check disc for defects este util pentru verificarea CD-ului. Memory test
va porni un test al memoriei RAM, util pentru depanarea problemelor hardware atunci

cnd memoria RAM este suspectata ca ar fi defecta.


Dupa ce este aleasa prima opt, iune sistemul de operare va fi init, ializat. Desktp-ul implicit
din Kubuntu este prezentat n figura 2.3.

Figura 2.3: Desktop-ul implicit al Live CD-ului Kubuntu


n acest moment Kubuntu poate fi folosit ca Live CD. Pentru a l instala pe hard-disk,
se va accesa pictograma Install Kubuntu 9.10 de pe desktop. Rezultatul va fi pornirea
unui asistent de instalare (figura 2.4).

34

INTRODUCERE N SISTEME DE OPERARE

Figura 2.4: Alegerea limbii folosita de asistentul de instalare

Prima etapa consta n alegere limbii folosita de asistentul de instalare. Etapa urmatoare
, te utilizatorul (vezi figura 2.5). Aceasta
permite alegerea locului n care se gases
configurare are efect asupra fusului orar ce va fi stabilit pentru calculator.

Figura 2.5: Alegerea locului n care se afla utilizatorul

Pasul urmator
este reprezentat de alegerea felului n care sunt amplasate tastele pe

tastatura (keyboard layout) (figura 2.6). Dupa ce se realizeaza aceasta configurare

urmeaza pasul cel mai important din cadrul instalarii:


partit, ionarea hard-disk-ului (vezi
figura 2.7)
Discul poate fi s, ters integral, caz n care datele deja existente vor fi s, terse, sau poate fi
partit, ionat manual, alegnd dimensiunea partit, iilor s, i tipul lor. n continuare va fi

prezentata partit, ionarea manuala.

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

35

Figura 2.6: Alegerea felului n care sunt amplasate tastele pe tastatura

Figura 2.7: Partit, ionarea manuala a hard disk-ului


n cazul n care discul este nepartit, ionat este necesara crearea unei noi tabele de

partit, ii apasnd
butonul New Partition table. Rezultatul va fi afis, area tabelei de partit, ii,
prezentata s, i n figura 2.8.
n cazul n care exista deja partit, ii pe disc, acestea vor fi afis, ate n tabela de partit, ii. n
continuare, se presupune ca hard-disk-ul nu este partit, ionat s, i se vor crea doua partit, ii:
una ext4 s, i una pentru swap. Pentru a realiza acest lucru se apasa butonul Add... din
fereastra care prezinta tabela de partit, ii (figura 2.9).
are 4096 MB, este creata
Dupa cum se observa n figura 2.9, partit, ia ext4 este primara,
la nceputul spat, iului liber s, i va fi accesata de sistemul de operare prin directorul /
(mount point).

36

INTRODUCERE N SISTEME DE OPERARE

Figura 2.8: Tabela de partit, ii init, ial discul nu are nicio partit, ie

Figura 2.9: Crearea unei partit, ii

Figura 2.10: Crearea unei partit, ii swap


are 197 MB s, i este creata la nceputul
Partit, ia de swap (figura 2.10) este tot primara,

spat, iului liber ramas.


Ea nu va putea fi accesata printr-un director, ci va fi folosita de
sistemul de operare n mod transparent.
Dupa crearea celor doua
Aceasta schema de partit, ionare este pur demonstrativa.
partit, ii, tabela de partit, ii arata ca n figura 2.11.
Dupa crearea partit, iilor, trebuie datele personale ale utilizatorului: numele lui, numele de
utilizator dorit, parola s, i numele stat, iei (hostname). Asistentul de instalare mai permite
s, i alegerea modului de autentificare n sistem s, i daca directorul cu datele utilizatorului

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

37

Figura 2.11: Tabela de partit, ii dupa ce au fost create cele doua partit, ii
va fi criptat (vezi figura 2.12) (vezi sect, iunea 10.5.2).

Figura 2.12: Configurarea datelor personale ale utilizatorului

n pasul urmator
(ultimul pas al instalarii)
pot fi revizuite configurarile
realizate. Apasnd
pe butonul Advanced... se poate configura unde va fi instalat bootloader -ul (vezi
sect, iunea 6.2) bootloader/GRUB (vezi figura 2.13).
Pentru a ncepe copierea fis, ierelor pe hard-disk se apara butonul Install. La terminarea
va fi afis, at mesajul din figura 2.14.
instalarii
Dupa nchiderea asistentului de instalare sistemul de operare va rula n continuare ca
instalat, calculatorul trebuie
Live CD. Pentru a porni sistemul de operare proaspat
repornit.

38

INTRODUCERE N SISTEME DE OPERARE

Figura 2.13: Verificarea datelor s, i alegerea hard-disk-ului pe care va fi instalat GRUB

Figura 2.14: Mesajul care marcheaza instalarea cu succes a sistemului de operare

2.3
2.3.1

Interact, iunea cu sistemul de operare


Interfet, ele cu utilizatorul

Primele interfet, e cu utilizatorul au fost, din motive tehnice, create pe monitoare care
, ile acestor interfet, e de a crea
afis, au doar caractere text. De aceea, posibilitat
componente grafice au fost limitate. n aceasta categorie (interfet, e care utilizeaza doar
caractere n mod text) intra CLI (Command Line Interface) s, i TUI (Text User Interface).

n timp, att monitoarele ct s, i placile


video au avansat tehnologic s, i au aparut
astfel

afis, ajele grafice (cu rezolut, ii mai mari dect cele text). n acest fel a aparut
s, i o noua
clasa de interfet, e cu utilizatorul numita GUI (Graphical User Interface).
n CLI, interact, iunea cu sistemul de operare se bazeaza pe comenzi scrise de la
Exemple de CLI pot fi vazute

tastatura.
n figura 2.17 s, i n figura 2.18.
Avantajul acestei metode este acela ca pot fi invocate comenzi complexe utiliznd
secvent, e scurte de caractere. Pentru a realiza sarcini echivalente ntr-un GUI poate fi
uneori nevoie s, i de cteva zeci de click-uri de mouse. Un alt avantaj al CLI este
rapiditatea dobndita n utilizare, dupa ce comenzile au fost ret, inute (n special daca

este folosit istoricul de comenzi: prin apasarea


tastei S
ageat
aSus pot fi reexecutate
comenzile date anterior). Lund ca exemplu configurarea unei adrese IP (vezi
sect, iunea 8.2.1) pe o interfat, a de ret, ea, diferent, a de viteza ntre prima s, i a zecea oara

cnd se realizeaza aceasta configurare ntr-un GUI este mica, datorita numarului
mare

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

39

de click-uri necesar. n cazul unui CLI, folosind s, i istoricul de comenzi, diferent, a de


viteza este extrem de mare.
, are, utilizatorul obis, nuindu-se
Dezavantajul principal al CLI este curba abrupta de nvat
mai greu cu o comanda dect cu ret, inerea locului n care se afla un buton.

Des, i de la aparit, ia sa a fost concurat de TUI s, i GUI, CLI ramne


metoda de control al
sistemului de operare preferata de utilizatorii avansat, i datorita eficient, ei n utilizare.
n TUI, interact, iunea cu sistemul de operare se realizeaza prin intermediul ferestrelor,
meniurilor, butoanelor s, i mouse-ului. Pentru desenarea interfet, ei sunt utilizate caractere
disponibile pe orice terminal text (figura 2.15).

Figura 2.15: Text User Interface


datorita
Acest tip de interfat, a se apropie de modul n care arata o interfat, a grafica nsa,

faptului ca foloses, te caractere text, rezolut, ia ecranului este mai mica.


GUI este un sistem de interact, iune cu utilizatorul de tipul WIMP (window, icon, menu,
pointing device) (figura 2.16).

Figura 2.16: Graphical User Interface

40

INTRODUCERE N SISTEME DE OPERARE

cum ar fi
Pentru desenarea interfet, ei GUI sunt folosite moduri grafice de rezolut, ie nalta,
VGA=640x480, SVGA=800x600, 1024x768, 1280x1024, 1600x1200 etc.

2.3.2

Interfat, a n linie de comanda (CLI)

Consola
O consola este un tip de echipament care permite introducerea s, i afis, area de text
folosit n administrarea s, i utilizarea sistemului de operare.

Init, ial consolele erau formate dintr-un terminal (un monitor ce avea atas, ata o tastatura)
Acest tip de console
care se conecta la sistemul de calcul printr-o conexiune seriala.

este foarte rar ntlnit n ziua de astazi.


Pe un calculator obis, nuit, monitorul mpreuna cu tastatura au acelas, i rol ca un terminal.
Ele permit, n Linux, accesarea a doua tipuri de console: terminalele virtuale (console n
mod text) s, i emulatoarele de terminale (console n mod grafic).
Terminalele virtuale au o rezolut, ie mica (n general 25 de linii cu 80 de caractere pe
linie). Ele pot fi accesate din interfat, a grafica cu ajutorul tastelor CTRL+ALT+Fx, unde
Fx reprezinta tastele F1 pna la F6 (n mod implicit). Din aceste terminale virtuale se
poate reveni n interfat, a grafica cu ajutorul combinat, iei de taste (CTRL+)ALT+F7.
Trecerea dintr-un terminal virtual n altul poate realiza prin trei combinat, ii de taste.

Primele doua sunt: CTRL+ALT+Fx s, i ALT+Fx (unde x este numarul


terminalului n
care se va trece). A treia combinat, ie de taste este ALT+Sageat
a Stnga sau
ALT+Sageat
a Dreapta s, i permite trecerea dintr-un terminal n cel precedent,

respectiv n cel urmator.


De exemplu trecerea din terminalul 4 n terminalul 3 se poate
realiza cu CTRL+ALT+F3 sau ALT+F3 sau ALT+Sageat
a Stnga.
Valorile tastelor F prezentate sunt cele implicite pe majoritatea distribut, iilor. Aceste valori
pot fi schimbate. De exemplu, interfat, a grafica poate fi plasata pe terminalul trei sau pe

sau
terminalul cinci; numarul
de terminale accesibile poate fi s, ase (valoarea implicita)
zece (figura 2.17).

Figura 2.17: Terminal virtual (CLI)

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

41

Consolele n mod grafic reprezinta emulatoare de terminal (figura 2.18). Dimensiunea


lor pot fi extinsa peste cea de 25x80 a terminalelor virtuale. De asemenea, un utilizator
nelimitat de astfel de emulatoare. Cele mai cunoscute emulatoare
poate porni un numar
sunt konsole (pentru KDE), gnome-terminal (pentru GNOME) s, i xterm.

Figura 2.18: Emulator consola (CLI)


Atunci cnd un utilizator acceseaza un terminal virtual el trebuie sa se autentifice folosind
La pornirea unui emulator de terminal utilizatorul nu
un nume de utilizator s, i o parola.
mai trebuie sa se autentifice, deoarece autentificarea s-a produs nainte de pornirea
interfet, ei grafice. De asemenea, la pornirea unui emulator de terminal utilizatorul curent

va fi cel care este autentificat n interfat, a grafica.

n ultimii ani, ndepartarea


de linia de comanda a sistemului de operare Linux este din
interfet, ei grafice, mai intuitive s, i cu
ce n ce mai accentuata n detrimentul utilizarii
, i mult mai avansate. Cu toate acestea, interfat, a n linia de comanda ramne

facilitat
o
de la
componenta esent, iala n configurarea rapida a unui sistem s, i a administrarii
Interfat, a n linia de comanda permite toate operat, iile care pot fi realizate s, i din
distant, a.

interfat, a grafica.

Shell
n IT, denumirea de shell are mai multe sensuri. Unul dintre acestea este sensul de
componenta software care realizeaza interfat, a cu utilizatorul. Aceasta interfat, a poate fi
una CLI, caz n care shell-ul este un interpretor de comenzi, sau una GUI, caz n care
shell-ul este o interfat, a grafica dintre utilizator s, i resursele sistemului de operare (cum ar
fi Explorer n Windows).
Consola (indiferent de tipul ei emulator
Comenzile Linux sunt transmise la o consola.
de terminal sau terminal virtual) ruleaza un shell, shell care permite introducerea

42

INTRODUCERE N SISTEME DE OPERARE

comenzilor. Exista mai multe aplicat, ii shell de interpretare a comenzilor n Linux, cea
mai uzuala fiind denumita bash (Bourne Again SHell).

Prompt-ul
Shell-ul (interpretorul) de comenzi ofera utilizatorului un prompt. Acesta are un format
de genul:
1

username@localhost:~$

La acest prompt, utilizatorul poate introduce comenzi. username reprezinta numele


utilizatorului, iar localhost este numele stat, iei (hostname). Simbolul ~ indica
directorul curent, home-ul utilizatorului george1 . Simbolul "$" marcheaza terminarea
prompt-ului s, i nceperea zonei de introducere a comenzilor. De exemplu, n cazul

urmator:
1

george@asgard:~$

george este numele utilizatorului s, i asgard este numele stat, iei.


Pentru mai multe informat, ii despre interact, iunea cu shell-ul consultat, i sect, iunea 12.2.

Comenzi
Comenzile sunt cuvinte cheie care se introduc la consola (s, i interpretate de
interpretorul de comenzi), folosite pentru a configura sistemul de operare sau pentru
a obt, ine informat, ii de la acesta.
Comenzile pot fi simple sau pot avea parametri. O comanda simpla este o comanda
care cont, ine un singur cuvnt cheie suficient pentru a executa o act, iune. Majoritatea
comenzilor sunt nsa comenzi compuse s, i pot primi unul sau mai mult, i parametri care
pot afecta rezultatul comenzii. Separarea ntre numele comenzii s, i parametru sau ntre
doi parametri se realizeaza prin intermediul caracterului spat, iu. De multe ori, primul
parametru (sau s, i alt, i parametri, n funct, ie de caz) este marcat prin caracterul -.
Mai jos este prezentat un exemplu de comanda simpla s, i apoi aceeas, i comanda cu

parametri. Comenzile au de obicei rezultate, rezultate care sunt afis, ate de catre
interpretorul de comenzi (shell) pe consola utilizatorului. n exemplul nostru, fiecare
comanda are un rezultat care este afis, at.
1
2
3
4

george@asgard:~$ ps
PID TTY
TIME CMD
13391 pts/0
00:00:00 bash
13666 pts/0
00:00:00 ps

5
6
7
8
9

george@asgard:~$ ps -o uid,pid,cmd
UID
PID CMD
1000 13391 -bash
1000 13669 ps -o uid,pid,cmd

10
11

george@asgard:~$
1

detalii despre ierarhia sistemului de fis, iere se gasesc


n sect, iunea 4.1.2

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

43

Setul cel mai important de comenzi este cel care interact, ioneaza cu sistemul de fis, iere.
Aceste comenzi sunt fundamentale pentru interact, iunea cu sistemul s, i rularea altor
comenzi importante.

Cautarea
de ajutor

a cu o comanda (parametri, date de


Daca se dores, te cautarea
de informat, ii n legatur
ies, ire, funct, ionalitate etc.) distribut, iile de Linux pun la dispozit, ie mai multe opt, iuni:

Transmiterea parametrului --help unei comenzi pentru a afis, a un sumar al


parametrilor posibili ai acelei comenzi. De exemplu:
1
2
3
4

george@asgard:~$ cp --help
Usage: cp [OPTION]... [-T] SOURCE DEST
or: cp [OPTION]... SOURCE... DIRECTORY
or: cp [OPTION]... -t DIRECTORY SOURCE...

5
6

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

7
8
9

Mandatory arguments to long options are mandatory for short options


too.

10
11
12
13
14
15
16

-a, --archive
--backup[=CONTROL]
destination file
-b
argument
--copy-contents
recursive
-d
[...]

same as -dpR
make a backup of each existing
like --backup but does not accept an
copy contents of special files when
same as --no-dereference --preserve=link

Comanda whatis este folosita pentru a afis, a o scurta descriere a unei comenzi:
1
2
3
4
5
6
7
8

george@asgard:~$
ls (1)
george@asgard:~$
pwd (1)
george@asgard:~$
cp (1)
george@asgard:~$
poweroff (8)

whatis ls
- list directory contents
whatis pwd
- print name of current/working directory
whatis cp
- copy files and directories
whatis poweroff
- stop the system.

a cu cuvntul transmis ca
Comanda apropos afis, eaza comenzile care au legatur
parametru:
1
2
3
4
5
6
7

george@asgard:~$ apropos zip


bunzip2 (1) - a block-sorting file compressor, v1.0.3
bzcmp (1)
- compare bzip2 compressed files
bzdiff (1)
- compare bzip2 compressed files
bzegrep (1) - search possibly bzip2 compressed files for a regular
expression
bzfgrep (1) - search possibly bzip2 compressed files for a regular
expression
[...]

44

INTRODUCERE N SISTEME DE OPERARE

Comenzile man s, i info sunt utilizate pentru a afis, a paginile de documentat, ie


complete asociate unei comenzi dorite. Aceste pagini cont, in informat, ii detaliate

despre opt, iunile posibile ale comenzilor s, i utilizarile


acestora. Comenzile man s, i

info primesc ca argument numele comenzii a carei


documentat, ie se dores, te a fi

afis, ata:
1
2

george@asgard:~$ man ls
Reformatting ls(1), please wait...

3
4
5

george@asgard:~$ man pwd


Reformatting pwd(1), please wait...

6
7
8

george@asgard:~$ info coreutils ls


george@asgard:~$ info coreutils cp

asirea

Autentificarea s, i par
sistemului
Autentificarea locala n sistemul de operare se poate realiza folosind un terminal virtual

sau se poate realiza n interfat, a grafica,


printr-un display manager (vezi
sect, iunea 13.2.2).
el poate par
asi
sistemul de
n cazul n care utilizatorul s-a autentificat n interfat, a grafica,
operare (logout) tot din mediul grafic, folosind opt, iunea Logout.
asi
sistemul
n cazul n care utilizatorul s-a autentificat ntr-un terminal virtual, el poate par
de operare folosind comanda logout sau comanda exit.
asi
un login shell. Acesta este un shell creat
Comanda logout este folosita pentru a par
atunci cnd utilizatorul s-a autentificat n sistem.
asi
att un login shell ct s, i un shell creat din
Comanda exit este folosita pentru a par
acest login shell (cu ajutorul comenzii su de exemplu).

2.3.3

Oprirea sistemului de calcul

Pentru a opri sau reporni un sistem de calcul se foloses, te comanda shutdown. Aceasta

comanda poate fi utilizata doar de catre


un utilizator cu drepturi administrative (vezi
sect, iunea 2.4.1). Sintaxa comenzii este:
1

shutdown [OPTION]... TIME [MESSAGE]

a:
-r pentru a reporni stat, ia s, i -h pentru
Printre opt, iunile folosite n mod uzual se numar
a o opri. time reprezinta momentul la care va fi oprita sau repornita stat, ia, iar message
este un mesaj ce va fi trimis pe toate terminalele legate la sistem.
De exemplu, pentru a opri stat, ia imediat, se ruleaza comanda:
1

root@asgard:/home/george# shutdown -h now

2
3
4

Broadcast message from george@asgard


(/dev/pts/0) at 18:28 ...

5
6
7

The system is going down for halt NOW!

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

45

Pentru a reporni stat, ia imediat, se ruleaza comanda:


1
2
3

root@asgard:/home/george# shutdown -r now


Broadcast message from george@asgard
(/dev/pts/4) at 11:04 ...

4
5
6

The system is going down for reboot NOW!

Pentru a opri stat, ia la ora 20:00:


1

root@asgard:/home/george# shutdown -r 20:00

2
3
4

Broadcast message from george@asgard


(/dev/pts/4) at 11:03 ...

5
6
7

The system is going down for reboot in 537 minutes!

Pentru a opri stat, ia n 10 minute de la executarea comenzii se foloses, te comanda:


1

root@asgard:/home/george# shutdown -r +10

2
3
4

Broadcast message from george@asgard


(/dev/pts/0) at 18:33 ...

5
6

The system is going down for reboot in 10 minutes!

O alta posibilitate de a reporni stat, ia este utilizarea comenzii restart. Pentru oprirea
stat, iei se pot folosi s, i comenzile halt sau poweroff. Toate aceste comenzi pot fi
executate doar daca utilizatorul are cu drepturi administrative.

2.4

de baza ale SO
Configurari

2.4.1

Administrarea sistemului Linux

n sistemele de operare Windows pna la Windows XP (inclusiv), n timpul procesului de


instalare se crea un utilizator cu drept de administrare. De cele mai multe ori, sistemul
era folosit cu acest utilizator, situat, ie care putea crea probleme de securitate datorita
drepturilor extinse de care beneficia utilizatorul (vezi sect, iunea 10.2). n sistemele de
operare Linux se face o distinct, ie implicita ntre drepturile de administrare s, i drepturile
de utilizare a sistemului.
n Linux, un singur utilizator are drepturi de administrare depline. Acesta este un
utilizator special numit root.

Utilizatorul root poate realiza configurari,


poate modifica modul n care pornes, te
sistemul de operare, poate acorda drepturi part, iale altor utilizatori etc.
sau act, iuni pe care doar utilizatorul root le poate
Pentru a putea realiza configurari
, i.
realiza, un utilizator are trei posibilitat
Prima posibilitate o reprezinta autentificare n sistemul de operare folosind numele de
utilizator root s, i parola asociata acestuia. n cele mai multe sisteme de operare folosite

46

INTRODUCERE N SISTEME DE OPERARE

De aceea
n product, ie autentificarea ca root este dezactivata din motive de sigurant, a.

aceasta metoda poate sa nu funct, ioneze.

Schimbarea ntre utilizatori (su)

n cazul n care utilizatorul este deja autentificat n sistem, exista posibilitatea schimbarii
utilizatorulu (a doua posibilitate de obt, inere a drepturilor administrative). Din shell , te deja, utilizatorul poate sa porneasca un nou shell n care sa se
ul n care se gases
ases
, te shell-ul nou creat (de exemplu prin
autentifice ca un alt utilizator. Atunci cnd par
comanda exit) el va reveni n shell-ul init, ial.
Pornirea unui nou shell n care se realizeaze autentificarea ca alt utilizator se face cu
ajutorul comenzii su (switch user ). Aceasta comanda poate primi ca parametru numele

utilizatorului n contul caruia


se va face autentificarea:
1
2

george@asgard:~$ su uso
Password:

3
4
5

uso@asgard:/home/george$ exit
exit

6
7

george@asgard:~$

Din motive de securitate, caracterele tastate n dreptul parolei nu vor fi afis, ate.
n exemplul anterior, utilizatorul autentificat n sistem este george. Utilizatorul george
schimba utilizatorul n uso folosind comanda su uso s, i se autentifica utiliznd parola
ases
, te shell-ul nou folosind comanda exit, moment
utilizatorului uso. Utilizatorul par
n care se observa revenirea acestuia n shell-ul init, ial.
n cazul n care comanda su nu primes, te niciun parametru, implicit se va considera ca
se dores, te autentificarea ca utilizator root.
a
Ca root, execut, ia comenzii su uso va permite autentificarea ca utilizator uso far
introducerea parolei pentru acesta.
asi
un shell creat cu su nu se poate folosi comanda logout, deoarece
Pentru a par
sesiunea autentificata n sistem (login shell) apart, ine tot utilizatorului init, ial (utilizatorul
init, ial fiind george n exemplul de mai jos) s, i nu noului utilizator (noul utilizator fiind uso
n exemplul de mai jos):
1
2

george@asgard:~$ su uso
Password:

3
4
5

uso@asgard:/home/george$ logout
bash: logout: not login shell: use exit

6
7
8

uso@asgard:/home/george$ exit
exit

9
10

george@asgard:~$

Ubuntu (s, i Kubuntu) au dezactivat n mod implicit contul de root, nefiind configurata
nicio parola pentru acesta. De aceea, autentificarea ca root att la prompt-ul de login
n sistem ct s, i cu su va es, ua.

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

47

Execut, ia comenzilor cu drepturi administrative (sudo)


n cazul n care este dezactivata autentificarea ca root, a treia posibilitate de obt, inere
a drepturilor administrative o reprezinta utilizarea comenzii sudo. Aceasta comanda
permite executarea unui program ca alt utilizator. Spre deosebire de su, care cerea

parola utilizatorului al carui


cont va fi utilizat, sudo cere parola utilizatorului curent1 . Din
acest motiv comanda sudo su va avea succes (este ceruta parola utilizatorului curent,
nu cea a utilizatorului root, dupa care comanda su este executata ca root):
1
2

george@asgard:~$ sudo su
Password:

3
4

root@asgard:/home/george#

Atunci cnd utilizatorul root foloses, te comanda sudo pentru a porni un shell n care

sa se autentifice ca alt utilizator, nu i se va cere nicio parola.

2.4.2

, ii la Internet
Asigurarea conectivitat

ce trebuie realizata pe sistemul de operare instalat este


Una dintre primele configurari
, ii la Internet. Kubuntu este o distribut, ie de Linux care se bazeaza
asigurarea conectivitat
pe pachete s, i necesita o conexiune la Internet pentru a putea copia s, i instala versiuni
mai recente ale acestora, realiznd n acest fel actualizarea ntregului sistem de operare.
, ii la Internet exista mai multe alternative. Cea mai simpla
Pentru asigurarea conectivitat
varianta este aceea n care tot, i parametrii de ret, ea (vezi sect, iunea 8.2) (adresa IP,
masca de ret, ea, gateway, server DNS) sunt configurat, i n mod automat folosind DHCP2 .

Aceasta metoda este cea ncercata implicit de catre


sistemul de operare. Daca aceasta
reus, es, te, utilizatorul are acces la Internet, nemaifiind necesara o alta configurare.
utilizatorul va trebui sa
Daca ncercarea de configurare folosind DHCP es, ueaza,
configureze manual parametrii de ret, ea. Acest lucru se poate realiza temporar (efectele

configurarilor
vor dura pna la urmatoarea
pornire a sistemului de operare sau pna la

o noua configurare) sau permanent (efectele configurarilor


se vor pastra
s, i dupa
repornirea sistemului de operare).

Configurarile
temporare pentru adresa IP, masca de ret, ea s, i gateway se realizeaza
folosind comenzile ifconfig s, i route. Pentru a putea folosi aceste comenzi
utilizatorul trebuie sa obt, ina drept de administrare. Pentru mai multe informat, ii legate de
configurarea ret, elei consultat, i capitolul 8.

2.4.3

Actualizarea sistemului s, i a pachetelor

Printre primele act, iuni care se realizeaza imediat dupa instalarea unui sistem de operare
, te actualizarea acestuia. ntr-un sistem bazat pe Debian (precum Ubuntu s, i
se regases

Kubuntu), acest lucru se face prin execut, ia urmatoarelor


comenzi ca root:
1

acest comportament este dependent de distribut, ie n Ubuntu s, i n distribut, iile derivate, comanda
sudo cere parola utilizatorului curent
2
Dynamic Host Configuration Protocol

48

INTRODUCERE N SISTEME DE OPERARE

root@asgard:~# apt-get update

2
3

root@asgard:~# apt-get dist-upgrade

Prima comanda actualizeaza lista de pachete cunoscuta de catre


managerul de
pachete, iar a doua comanda actualizeaza pachetele instalate pe baza informat, iilor
Pentru mai multe informat, ii despre gestiunea pachetelor
adunate de prima comanda.
consultat, i sect, iunea 3.2.

2.4.4

Administrarea utilizatorilor s, i a grupurilor de utilizatori

Majoritatea programelor de instalare a distribut, iilor Linux permit celui care realizeaza
a a fi nevoie de
procesul de instalare sa adauge direct utilizatori non-root n sistem, far
ulterioare.
configurari

n cazul n care mai trebuie adaugat


, i utilizatori sau grupuri, administratorul are la
dispozit, ie comenzile adduser s, i addgroup pe sisteme Debian (s, i implicit

Ubuntu/Kubuntu). adduser permite adaugarea


n mod interactiv de utilizatori.
Daca se dores, te lucrul mai avansat cu utilizatori s, i grupuri (precum s, tergerea,
modificarea utilizatorilor/grupurilor) consultat, i sect, iunea 3.1.

2.5
2.5.1

Studii de caz
Interoperabilitatea sistemului de fis, iere ntre Linux s, i
Windows

Atunci cnd pe un calculator este instalat s, i un sistem de operare Windows s, i unul Linux
de fis, iere ntre cele doua.
Ca exemplu
se pune de cele mai multe ori problema partajarii
concret:

cum se pot accesa din Linux (pentru scriere s, i citire) datele aflate n Windows
cum se pot accesa din Windows datele aflate n Linux (pentru citire s, i scriere).
Solut, ia la aceasta problema se bazeaza pe ideea ca pentru datele aflate pe cel put, in o
partit, ie se va asigura suportul de citire s, i de scriere att din Linux ct s, i din Windows. n
acest sens exista trei variante.
Prima dintre ele consta n utilizarea unei partit, ii FAT32 pentru a stoca datele ce se doresc
att n Windows ct s, i n Linux,
a fi partajate. Avantajul acestei solut, ii este faptul ca,
exista suport nativ pentru sistemul de fis, iere FAT. Dezavantajele majore sunt limitarea
dimensiunii unei partit, ii FAT32 la maxim 32GB s, i limitarea dimensiunii maxime a unui
fis, ier la 4GB (ca atare pe o astfel de partit, ie nu se poate salva imaginea unui disc DVD
de exemplu).
A doua solut, ie o reprezinta utilizarea unei partit, ii ext2 sau ext3 pentru stocarea datelor

partajate. Aceasta solut, ie nu prezinta limitarile


partit, iei FAT, nsa Windows nu ofera
suport nativ pentru acest tip de partit, ii. Pentru a putea accesa din Windows o partit, ie

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

49

ext2 sau ext3 trebuie instalat un driver special. Acest driver se numes, te Ext2 IFSs, i este
disponibil online1 .
Acest driver ofera suport de scriere s, i citire pentru sistemul de fis, iere ext2. Sistemul de
ator

fis, iere ext3 este aseman


cu ext2, diferent, a dintre ele fiind reprezentata de suportul
de jurnalizare pe care l ofera ext3. Ext2 IFS poate citi s, i scrie date de pe o partit, ie ext3,
nsa nu va folosi suportul de jurnalizare pe care l ofera aceasta.
Ext2 IFS nu funct, ioneaza cu sistemul de fis, iere ext4, structurile de date aflate pe disc
fiind diferite. Acest lucru trebuie luat n considerare n condit, iile n care se dores, te
utilizarea acestei variante pentru partajare, mai ales cnd distribut, iile actuale au ca
sistem de fis, iere implicit ext4 (vezi s, i sect, iunea 4.7).
A treia varianta o reprezinta accesarea unei partit, ii NTFS din Linux. n Linux exista
suport pentru citirea datelor de pe un sistem de fis, iere NTFS. Datorita faptului ca
standardul NTFS este unul nchis, dezvoltarea unui driver care sa ofere suport de
scriere a fost greu de realizat. n momentul de fat, a exista nsa un driver care ofera
acest suport. El se numes, te ntfs-3g 2 s, i suport pentru acesta este oferit implicit n
Ubunut/Kubuntu.

2.5.2

GParted

GParted este o aplicat, ie de partit, ionare specifica Gnome3 (figura 2.19). Aceasta poate
crea, s, terge, redimensiona, muta, verifica s, i copia partit, ii.
GParted ofera s, i o versiune disponibila sub forma unui Live CD4 . Aceasta este bazata pe
distribut, ia Gentoo s, i permite administrarea partit, iilor n cazul n care sistemul de operare
nu mai pornes, te. De asemenea permite realizarea unei copii de sigurant, a a datelor n
aceleas, i condit, ii.

Cuvinte cheie

CLI

mediu grafic

consola

partit, ie

distribut, ie Linux

swap

gestionare utilizatori

shell

GUI
Kubuntu
Live CD

shutdown
su

MBR

sudo

instalare

TUI

http://www.fs-driver.org/
http://www.ntfs-3g.org/
3

Gnome este un Desktop Environment pentru mediul grafic din Linux mai multe informat, ii se pot gasi
n sect, iunea 13.7
4
http://gparted.sourceforge.net/livecd.php
2

50

INTRODUCERE N SISTEME DE OPERARE

Figura 2.19: GParted

ntrebari
1. Ct, i utilizatori cu identificatorul 0 pot exista pe un sistem cu o partit, ie primara s, i
doua extinse:

q niciunul
q 1
q 2
q orict, i

2. Care dintre urmatoarele


NU este necesara pentru a rula un sistem de operare de
pe Live CD:

q configurarea unei partit, ii primare


q BIOS
q RAM
q procesor
din TUI?
3. Din ce sisteme de operare NU se pot realiza configurarii

q Windows Vista
q Debian
q ubuntu Live CD
q PalmOS

DE BAZA

CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

51

4. Operat, ia de repornire a sistemului poate fi init, iata doar de utilizatorul privilegiat. n


urma repornirii sistemului tot cont, inutul memoriei RAM este golit.

q adevarat,
adevarat

q adevarat,
fals

q fals, adevarat

q fals, fals
a,
daca la execut, ia comenzii
5. Care dintre variante este adevarat
1

su rrazvan

a a se solicita autentificare:
se obt, ine un prompt de shell far

q comanda a fost lansata de utilizatorul root


q comanda a fost lansata de utilizatorul rrazvan
q comanda a fost lansata din directorul /etc
q comanda a fost lansata din directorul /root

6. Care din urmatoarele


NU reprezinta un sistem de fis, iere?

q FAT32
q swap
q ext3
q NTFS

7. Care din urmatoarele


NU este un tip de partit, ie?

q extinsa
q logica
q primara
q virtuala

8. Care din urmatoarele


distribut, ii este derivata din Debian?

q Ubuntu
q Fedora
q Gentoo
q OpenSuSE

9. Care din urmatoarele


NU se refera la CLI?

q comanda
q prompt
q terminal
q window manager

52

INTRODUCERE N SISTEME DE OPERARE

10. Care din urmatoarele


comenzi NU este o comanda de ajutor pe un sistem Linux?

q man
q info
q apropos
q adduser

Capitolul 3
Gestiunea pachetelor s, i utilizatorilor
Users /nm./: collective term for those who use
computers. Users are divided into three types: novice,
intermediate and expert.
Novice Users: people who are afraid that simply
pressing a key might break their computer.
Intermediate Users: people who dont know how to fix
their computer after theyve just pressed a key that
broke it.
Expert Users: people who break other peoples
computers.
The Jargon File

Ce se nvat, a din acest capitol?

Gestiunea utilizatorilor s, i grupurilor n Linux


Fis, iere folosite pentru gestiunea utilizatorilor
Ce este un pachet
Care sunt operat, iile de baza asupra unui pachet n Linux
Gestiunea pachetelor n Debian/Ubuntu: utilitarele apt s, i dpkg
Personal Package Archive (PPA)

3.1

Gestiunea utilizatorilor

Gestiunea utilizatorilor se refera la adaugarea


de noi utilizatori, s, tergerea unui utilizator
existent, modificarea informat, iilor despre un utilizator s, i afis, area diverselor informat, ii.
n sistemele Unix, informat, iile despre utilizatori sunt ret, inute n fis, ierul /etc/passwd.
home-ul,
Fiecare linie din acest fis, ier cont, ine numele utilizatorului, identificatorului sau,
s, i alte informat, ii de descriere:
shell-ul rulat n momentul autentificarii
53

54

1
2
3
4

INTRODUCERE N SISTEME DE OPERARE

root@anaconda:~# cat /etc/passwd


andreir:x:1114:1026:Andrei Rizoiu:/home/students/andreir:/bin/bash
alexn:x:1115:1026:Alex Negrea:/home/students/alexn:/bin/bash
[...]

, te n fis, ierul
Din motive de securitate, hash-ul asociat parolei nu se gases
/etc/passwd, ci n fis, ierul /etc/shadow care nu poate fi accesat de majoritatea
utilizatorilor (vezi sect, iunea 10.2.3):
1
2

root@anaconda:~# ls -l /etc/shadow
-rw-r----- 1 root shadow 7068 2008-09-12 11:59 /etc/shadow

Pentru a afla informat, ii despre un utilizator al sistemului se pot folosi comenzile id sau
finger:
1
2

root@anaconda:~# id andreir
uid=1114(andreir) gid=1026(students) groups=1026(students),1037(rl)

3
4
5
6
7
8
9

root@anaconda:~# finger alexn


Login: alexn
Directory: /home/students/alexn
Never logged in.
No mail.
No Plan.

Name: Alex Negrea


Shell: /bin/bash

Utilizatorul privilegiat ntr-un sistem Unix este utilizatorul root cu uid-ul 0 s, i home-ul n
/root:
1
2

root@anaconda:~# head -1 /etc/passwd


root:x:0:0:root:/root:/bin/bash

Utilizatorul root (de fapt utilizatorul cu uid-ul 0) are drepturi absolute n cadrul sistemului
Se recomanda folosirea unui cont neprivilegiat. Doar
s, i poate rula orice comanda.
atunci cnd este nevoie se va folosi contul privilegiat. Schimbarea unui utilizator se
realizeaza cu ajutorul comenzii su urmata de introducerea parolei pentru acel utilizator.
Daca utilizatorul init, ial este root, nu se solicita introducerea parolei:
1
2

root@anaconda:~# head -1 /etc/passwd


root:x:0:0:root:/root:/bin/bash

3
4
5
6

root@anaconda:~# su - andreir
andreir@anaconda:~$ su - razvan
Password:

de obicei, utilizatorul root s, i recomanda folosirea


Sistemele Ubuntu dezactiveaza,
comenzii sudo. De obicei, un utilizator neprivilegiat care are drept de sudo va rula
comanda sudo bash pentru a obt, ine un shell cu drepturi privilegiate (vezi
sect, iunea 10.3.3).
Schimbarea parolei unui utilizator se realizeaza cu ajutorul comenzii passwd.

Utilizatorul privilegiat poate schimba parola oricarui


utilizator. Un utilizator neprivilegiat
s, i poate schimba parola doar sies, i:
1
2
3
4

anaconda:~# passwd guest


Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

CAPITOLUL 3. GESTIUNEA PACHETELOR S, I UTILIZATORILOR

3.1.1

55

UID, GID

Fiecarui
utilizator din sistem i este asociat un identificator numit UID (User Identifier).
ntreg ce poate lua valori ntre 0 s, i 32767 sau 65535, funct, ie de
UID este un numar
distribut, ie. Valoarea 0 este rezervata pentru utilizatorul root.
identitatea unui utilizator sistemul de operare foloses, te UID, s, i nu numele
Pentru a gasi
utilizatorului. De aceea, daca n fis, ierul /etc/passwd se nlocuies, te UID-ul unui
ata
drepturi administrative egale cu ale
utilizator normal cu 0, acel utilizator va cap
utilizatorului root.
Pe sistemele de operare Linux utilizatorii pot fi organizat, i n grupuri. n acest fel se pot
administrative mai us, or, aplicndu-se politici la nivelul
realiza diverse configurari
ntregului grup s, i nu per utilizator. Un grup poate cont, ine mai mult, i utilizatori. Un
utilizator poate face parte din mai multe grupuri.
Pentru fiecare grup sistemul de operare asociaza un identificator, numit GID (Group
ntreg ce poate lua valori ntre 0 s, i 32767
Identifier). Acest identificator este un numar
(limita superioara poate sa difere n funct, ie de distribut, ie). GID 0 este rezervat pentru
grupul utilizatorului root. La fel ca la UID, sistemul de operare foloses, te GID pentru a
identifica un anumit grup s, i nu numele grupului.

3.1.2

Adaugarea
s, i s, tergerea utilizatorilor

Adaugarea
unui utilizator poate fi realizata doar de root, n doua moduri. Primul dintre
ele este utilizarea comenzii useradd. Utilizarea acestei comenzi este greoaie, motiv

pentru care adaugarea


unui utilizator se realizeaza n mod uzual cu ajutorul comenzii
adduser. adduser este un script care apeleaza la rndul lui useradd.

Apelarea adduser se poate realiza cu urmatorii


parametri:
1

adduser [options] [--home DIR] [--shell|-s SHELL] [--no-create-home


] [--uid ID] [--firstuid ID] [--lastuid ID] [--ingroup GROUP | --gid ID]
[--disabled-password] [--disabled-login] [--gecos GECOS] [-add_extra_groups] user

Daca adduser este apelat doar cu numele utilizatorului ce va fi creat, el va porni un


contului:
asistent care va cere toate datele necesare crearii
1
2

root@asgard:/home/george# adduser uso


Adding user uso ...

3
4

Adding new group uso (1001) ...

5
6

Adding new user uso (1001) with group uso ...

7
8

Creating home directory /home/uso ...

9
10

Copying files from /etc/skel ...

11
12
13
14
15
16

Enter new UNIX password:


Retype new UNIX password:
passwd: password updated successfully
Changing the user information for uso
Enter the new value, or press ENTER for the default

56
17
18
19
20
21
22

INTRODUCERE N SISTEME DE OPERARE

Full Name []: uso


Room Number []: EG306
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [y/N] y

23
24

root@asgard:/home/george#

Din motive de securitate caracterele tastate n dreptul parolei nu vor fi afis, ate.

La crearea unui utilizator este creat s, i un grup cu acelas, i nume la care este adaugat
utilizatorul creat.
Stergerea

unui utilizator se poate realiza cu userdel sau cu deluser (deluser este


un script care apeleaza la rndul lui userdel):
1
2

root@asgard:/home/george# deluser uso


Removing user uso ...

3
4

Done.

3.1.3

Adaugarea
s, i s, tergerea unui grup de utilizatori

Adaugarea
unui grup de utilizatori se poate realiza cu ajutorul comenzii groupadd, sau
cu ajutorul comenzii addgroup. addgroup este un script care apeleaza la rndul lui
groupadd.
1
2

root@asgard:/home/george# addgroup usogroup


Adding group usogroup (GID 1002) ...

3
4

Done.

Stergerea

unui grup de utilizatori se realizeaza tot prin doua comenzi, groupdel s, i


delgroup (delgroup este un script care apeleaza groupdel).
1
2

root@asgard:/home/george# delgroup usogroup


Removing group usogroup ...

3
4

Done.

3.1.4

Modificarea datelor unui utilizator

Modificarea datelor unui utilizator se realizeaza cu ajutorul comenzii usermod. Aceasta


permite modificarea grupului din care face parte un utilizator, a directorului de baza
(home), a numelui de utilizator, a parolei etc.
De exemplu, pentru modifica directorul de baza al utilizatorului george se foloses, te
opt, iunea -d:
1

uso@asgard:~$ cd ~

2
3
4
5

uso@asgard:~$ pwd
/home/ uso

CAPITOLUL 3. GESTIUNEA PACHETELOR S, I UTILIZATORILOR


6

57

uso@asgard:~$ sudo su

7
8

root@asgard:/home/uso# usermod -d /home/usodir/ uso

9
10

root@asgard:/home/uso# exit

11
12

exit

13
14

uso@asgard:~$ exit

15
16
17

uso@asgard:~$ pwd
/home/uso

18
19

uso@asgard:~$

n exemplul anterior a fost schimbat directorul curent n directorul de baza al utilizatorului


uso, apoi a fost afis, at directorul curent (pentru a vedea care este directorul de baza
actual), a fost pornit un nou shell n care utilizatorul autentificat a fost root, a fost
modificat directorul de baza al utilizatorului uso n /home/usodir, a fost nchis shell-ul
asit
sistemul de operare. Schimbarea directorului
de root, apoi s, i utilizatorul uso a par
ases
, te sistemul s, i se
de baza al unui utilizator se realizeaza doar dupa ce utilizatorul par
autentifica din nou:
1
2

uso@asgard:~$ pwd
/home/usodir/

Modificarea parolei unui utilizator se poate face s, i cu ajutorul comenzii passwd:


1
2
3
4

root@asgard:/home/uso# passwd uso


Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Din motive de securitate caracterele tastate n dreptul parolei nu vor fi afis, ate.
Daca nu este specificat niciun nume de utilizator va fi schimbata parola utilizatorului
curent. Doar utilizatorul root poate schimba parola altui utilizator.

3.1.5

Adaugarea
s, i s, tergerea utilizatorilor

n sistemele Debian-based, adaugarea,


respectiv s, tergerea unui utilizator se realizeaza
prin intermediul scripturilor adduser s, i deluser:
1
2
3
4
5
6
7
8
9
10
11
12
13

root@anaconda:~# adduser test


Adding user test ...
Adding new group test (1038) ...
Adding new user test (1003) with group test ...
Creating home directory /home/test ...
Copying files from /etc/skel ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for test
Enter the new value, or press ENTER for the default
Full Name []: Test User
Room Number []:

58
14
15
16
17

INTRODUCERE N SISTEME DE OPERARE

Work Phone []:


Home Phone []:
Other []:
Is the information correct? [y/N] y

18
19
20

root@anaconda:~# id test
uid=1003(test) gid=1038(test) groups=1038(test)

21
22
23
24
25
26

root@anaconda:~# deluser --remove-home test


Looking for files to backup/remove ...
Removing files ...
Removing user test ...
Done.

Avantajul s, i, n acelas, i timp, dezavantajul folosirii comenzii adduser este


interactivitatea. Automatizarea sarcinilor presupune comenzi non-interactive. Pentru
aceasta, se pot folosi comenzile useradd, userdel s, i usermod. useradd,
respectiv userdel sunt folosite de scripturile adduser s, i deluser.
1

root@anaconda:~# useradd -m -d /home/test test

2
3
4

root@anaconda:~# id test
uid=1116(test) gid=1116(test) groups=1116(test)

5
6

root@anaconda:~# usermod -s /bin/sh test

7
8

root@anaconda:~# userdel -r test

9
10
11

root@anaconda:~# id test
id: test: No such user

3.2

Gestiunea pachetelor

Un pachet, sau un pachet software, este o aplicat, ie sau o componenta accesibila n


forma unei arhive care poate fi instalata de un sistem de gestiune a pachetelor (PMS
Package Management System).
De obicei, pachetele reprezinta programe precompilate care pot fi instalate us, or, spre
deosebire de instalarea din surse care este mai anevoioasa (vezi sect, iunea 14.6.1).
Lucrul cu pachete (instalare, dezinstalare, configurare) se realizeaza prin intermediul
unui sistem de gestiune a pachetelor (precum dpkg, rpm, pacman). Un astfel de
sistem cont, ine, n afara de fis, ierele asociate programului s, i un set de metainformat, ii
precum versiunea pachetului, descrierea s, i dependent, ele acestuia. PMS-ul foloses, te
aceste informat, ii pentru a decide daca se va realiza instalarea pachetului, upgrade-ul
acestuia, instalarea dependent, elor etc. O dependent, a ntre pachetele A s, i B nseamna
ca instalarea pachetului A necesita instalarea pachetului B. La fel, dezinstalarea
pachetului B va fort, a dezinstalarea pachetului A.
Majoritatea distribut, iilor GNU/Linux folosesc not, iunea de repository (depozit de
pachete).
Acesta este un URL care precizeaza locat, ia diverselor pachete ale
distribut, iei. Aceste depozite sunt precizate n fis, iere de configurare specifice distribut, iei.

CAPITOLUL 3. GESTIUNEA PACHETELOR S, I UTILIZATORILOR

59

Aplicat, ii front-end peste PMS pot interoga depozitele s, i pot descarca


s, i instala noi
pachete.
n lumea Linux exista diverse formate de pachete, cele mai cunoscute fiind formatul DEB,
specific distribut, iilor Debian-based s, i formatul RPM folosit de Fedora/RedHat, Mandriva,
SuSE, etc. Fiecare format are propriul PMS. Utilitarul alien1 permite conversia ntre
diverse formate de pachete.

Gestiunea pachetelor DEB


Utilitarul de baza (PMS) pentru gestiunea pachetelor DEB este dpkg. Folosit efectiv
pentru instalarea sau dezinstalarea unui pachet, acest utilitar ofera opt, iuni pentru
actuale a pachetelor sau a cont, inutul acestora. Printre opt, iunile utile
interogarea starii
a:

se numar

listarea cont, inutului unui pachet


1
2
3
4
5
6
7
8
9
10
11
12
13
14

root@anaconda:/tmp# dpkg -L coreutils


/.
/bin
/bin/mkdir
/bin/mv
/bin/true
/bin/mknod
/bin/sleep
/bin/touch
/bin/chgrp
/bin/uname
/bin/echo
/bin/sync
[...]

afis, area pachetelor al caror


nume se potrives, te cu o expresie regulata
1
2
3
4
5
6
7
8
9
10
11
12
13

root@anaconda:/tmp# dpkg -l linux*


Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Halfinstalled
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err:
uppercase=bad)
||/ Name
Version
Description
+++-==============-==============-===================================
un linux
un linux-doc-2.6.
un linux-gnu
un linux-image
un linux-image-2.
ii linux-image-2.
Cele
[...]

<none>
<none>
<none>
<none>
<none>
2.6.18+6etch3

(no description available)


(no description available)
(no description available)
(no description available)
(no description available)
Linux kernel 2.6 image on Ppro/

cautarea
pachetului ce cont, ine un anumit fis, ier
1
2
1

root@anaconda:/tmp# dpkg -S /bin/ps


procps: /bin/ps

http://kitenet.net/~joey/code/alien/

60

INTRODUCERE N SISTEME DE OPERARE

cea mai mare parte a acestor act, iuni vor fi realizate prin intermediul
n mod obis, nuit, nsa,
utilitarului APT (Advanced Packaging Tool). APT este un front-end peste dpkg s, i permite

interogarea depozitelor de pachete configurate, verificarea dependent, elor, descarcarea


automata a pachetelor din repository, actualizarea acestora, upgrade-ul unei distribut, ii
etc.
Fis, ierul de configurare a unui depozit DEB pentru folosirea cu APT este
/etc/apt/sources.list:
1
2
3
4

root@anaconda:/tmp# cat /etc/apt/sources.list


[...]
deb http://ftp.lug.ro/debian etch main contrib non-free
deb-src http://ftp.lug.ro/debian etch main contrib non-free

Adaugarea
unui nou depozit nseamna adaugarea
unei noi linii n fis, ierul de configurare.
Act, iunile care pot fi realizate cu ajutorul utilitarului apt sunt:

actualizarea listei de pachete


1
2
3
4
5
6
7
8
9
10
11

root@anaconda:/tmp# apt-get update


Get: 1 http://ftp.lug.ro etch Release.gpg [386B]
Get: 2 http://ftp.lug.ro etch/updates Release.gpg [189B]
Hit http://ftp.lug.ro etch Release
Get: 3 http://www.backports.org etch-backports Release.gpg [189B]
Get: 4 http://ftp.lug.ro etch/updates Release [37.6kB]
Ign http://debian.pkgs.cpan.org unstable Release.gpg
Get: 5 http://www.backports.org etch-backports Release [43.7kB]
Ign http://ftp.lug.ro etch/main Packages/DiffIndex
Ign http://ftp.lug.ro etch/contrib Packages/DiffIndex
[...]

cautarea
de pachete
1
2
3
4

root@anaconda:/tmp# apt-cache search hevea


hevea - translates from LaTeX to HTML, info, or text
lyx - High Level Word Processor
hevea-doc - HeVeA documentation

afis, area de informat, ii despre un fis, ier


1
2
3
4
5
6
7
8

root@anaconda:/tmp# apt-cache show hevea


Package: hevea
Priority: optional
Section: tex
Installed-Size: 2125
Maintainer: Debian OCaml Maintainers <debian-ocaml-maint@lists.
debian.org>
Architecture: all
Version: 1.09-3

instalarea unui pachet (s, i a dependent, elor sale)


1
2
3
4
5
6
7
8

root@anaconda:/tmp# apt-get install apt-file


Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
libapt-pkg-perl libconfig-file-perl
The following NEW packages will be installed
apt-file libapt-pkg-perl libconfig-file-perl
0 upgraded, 3 newly installed, 0 to remove and 66 not upgraded.

CAPITOLUL 3. GESTIUNEA PACHETELOR S, I UTILIZATORILOR


9
10
11

61

Need to get 106kB of archives.


After unpacking 406kB of additional disk space will be used.
Do you want to continue [Y/n]? Y

dezinstalarea unui pachet


1
2
3
4
5

anaconda:/tmp# apt-get remove --purge apt-file


Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED
apt-file*

, area cache-ului local de pachete


curat
1
2

root@anaconda:/tmp# apt-get clean


instalarea surselor unui pachet

3
4
5
6
7
8
9

root@anaconda:/tmp# apt-get source apt-file


Reading package lists... Done
Building dependency tree... Done
Need to get 17.7kB of source archives.
Get: 1 http://ftp.lug.ro etch/main apt-file 2.0.8.2 (dsc) [505B]
Get: 2 http://ftp.lug.ro etch/main apt-file 2.0.8.2 (tar) [17.2kB]

listarea tuturor pachetelor din cache-ul local de pachete, mpreuna cu dependet, ele
acestora
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

root@anaconda:/tmp# apt-cache dump


Using Versioning System: Standard .deb
Package: pipenightdreams
Version: 0.10.0-13
File: /var/lib/apt/lists/ro.archive.ubuntu.
com_ubuntu_dists_jaunty_universe_binary-i386_Packages
Depends: libc6 2.6.1-1
Depends: libgcc1 1:4.2.1
Depends: libsdl-image1.2 1.2.5
Depends: libsdl1.2debian 1.2.10-1
Depends: libstdc++6 4.2.1
Depends: pipenightdreams-data 0.10.0-13
Description Language:
File: /var/lib/apt/lists/ro.archive.ubuntu.
com_ubuntu_dists_jaunty_universe_binary-i386_Packages
MD5: 7d042c60ae2f422df1ada8160fb80333
...

listarea repository-urilor din care face parte un pachet, versiunea disponibila,


versiunile candidate etc.
1
2
3
4
5
6
7
8
9
10
11

root@anaconda:/tmp# apt-cache policy firefox


firefox:
Installed: 3.0.14+build2+nobinonly-0ubuntu0.9.04.1
Candidate: 3.0.14+build2+nobinonly-0ubuntu0.9.04.1
Version table:
*** 3.0.14+build2+nobinonly-0ubuntu0.9.04.1 0
500 http://ro.archive.ubuntu.com jaunty-updates/main
Packages
500 http://security.ubuntu.com jaunty-security/main Packages
100 /var/lib/dpkg/status
3.0.8+nobinonly-0ubuntu3 0
500 http://ro.archive.ubuntu.com jaunty/main Packages

62

INTRODUCERE N SISTEME DE OPERARE

PPA
Exista s, i conceptul de Personal Package Archives, un sistem ce-i permite
, i ncarce pachetele proprii pentru a fi incluse n update-urile
programatorului sa-s

ulterioare de pachete, fiind astfel mai us, or distribuite catre


utilizatorii finali. Astfel,
acesta va putea instala programul scris de altcineva ca pe un pachet normal.

Totus, i, pentru a preveni problemele de securitate, acest lucru nu poate fi facut


oarecum.
n continuare vom enumera pas, ii necesari pentru a putea instala programe dintr-un PPA,
numit someone561 necesar pentru a instala o versiune mai recenta a unor compilatoare.
1. Vom crea un fis, ier nou cu un cont, inut s, i o locat, ie ca mai jos pentru a oferi detalii

cu privire la adresa de unde se vor descarca


pachetele
1
2
3

mihai@keldon:/tmp# cat /etc/apt/sources.list.d/haskell.list


deb http://ppa.launchpad.net/someone561/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/someone561/ppa/ubuntu jaunty main

(se va schimba jaunty cu numele versiunii distribut, iei folosite)

a s, i prin
2. Pasul urmator
consta n autentificarea acestui PPA. Des, i poate fi facut
acest lucru nu este recomandat. Se prefera
editarea unui fis, ier sau este opt, ionala,

folosirea urmatoarei
comenzi:
1

mihai@keldon:/tmp# apt-key adv --recv-keys --keyserver keyserver.


ubuntu.com E51D9310

unde ultimul argument reprezinta un cod unic de autentificare al posesorului


autentificarea vom avea mereu mesaje de
PPA-ului. Daca nu dorim sa realizam
unor pachete din aceste repository-uri.
avertisment n cazul instalarii
3. Ultimul pas va consta n reactualizarea cache-ului local de pachete s, i instalarea
pachetelor din acest PPA
1
2
3
4

mihai@keldon:/tmp# apt-get update


...
mihai@keldon:/tmp# apt-get install ghc6 ...
...

update-alternatives
Linux, este un caz obis, nuit sa existe mai multe programe avnd
n timpul rularii
aproximativ acelas, i scop. n special, compilatoarele s, i editoarele de text sunt exemple
des ntlnite ale acestui caz. Prin urmare, deseori apare problema alegerii programului
potrivit.
Aceasta problema este accentuata de faptul ca exista multe programe ce vor apela alte
programe dupa un nume de exemplu, multe programe permit utilizatorilor sa editeze
a a fi ele nsele un editor. Ar trebui deci rulat un alt editor din sistem, dar care
un fis, ier, far
din ele? Un exemplu ar fi managementul taskurilor utiliznd cron.
Prin urmare, pentru o clasa de aplicat, ii care pot folosi o suita de alte programe, este
nevoie de o modalitate de a configura variante alternative. O varianta simpla ar fi
folosirea unor variabile de mediu (EDITOR de exemplu).

CAPITOLUL 3. GESTIUNEA PACHETELOR S, I UTILIZATORILOR

63

Varianta propusa de Debian este de a avea un set de comenzi standard, precum


editor, www-browser, view etc. De fapt, toate acestea sunt link-uri simbolice spre

comanda reala.
Pentru a seta aceste link-uri, se va folosi comanda update-alternatives. Acest
sistem poate funct, iona n doua moduri:

automatic mode sistemul decide singur catre


ce program vor indica link-urile

manual mode administratorul sistemului va decide acest lucru


Implicit, modul este automatic. Link-urile simbolice sunt structurate n grupuri cont, innd
, ile diverselor programe (editorul cu prioritate maxima este cel ales n cazul rularii

prioritat
editor).

Putem realiza urmatoarele:

listarea informat, iilor despre un grup


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

mihai@keldon:~# update-alternatives --display editor


editor - status is auto.
link currently points to /usr/bin/vim.gnome
/usr/bin/vim.tiny - priority 10
slave editor.ru.1.gz: /usr/share/man/ru/man1/vim.1.gz
slave editor.pl.ISO8859-2.1.gz: /usr/share/man/pl.ISO8859-2/man1/
vim.1.gz
slave editor.it.ISO8859-1.1.gz: /usr/share/man/it.ISO8859-1/man1/
vim.1.gz
slave editor.1.gz: /usr/share/man/man1/vim.1.gz
slave editor.pl.UTF-8.1.gz: /usr/share/man/pl.UTF-8/man1/vim.1.gz
slave editor.it.1.gz: /usr/share/man/it/man1/vim.1.gz
slave editor.fr.UTF-8.1.gz: /usr/share/man/fr.UTF-8/man1/vim.1.gz
slave editor.fr.1.gz: /usr/share/man/fr/man1/vim.1.gz
slave editor.it.UTF-8.1.gz: /usr/share/man/it.UTF-8/man1/vim.1.gz
slave editor.pl.1.gz: /usr/share/man/pl/man1/vim.1.gz
slave editor.fr.ISO8859-1.1.gz: /usr/share/man/fr.ISO8859-1/man1/
vim.1.gz
/bin/ed - priority -100
slave editor.1.gz: /usr/share/man/man1/ed.1.gz
/bin/nano - priority 40
slave editor.1.gz: /usr/share/man/man1/nano.1.gz
/usr/bin/vim.gnome - priority 60
slave editor.ru.1.gz: /usr/share/man/ru/man1/vim.1.gz
slave editor.pl.ISO8859-2.1.gz: /usr/share/man/pl.ISO8859-2/man1/
vim.1.gz
slave editor.it.ISO8859-1.1.gz: /usr/share/man/it.ISO8859-1/man1/
vim.1.gz
slave editor.1.gz: /usr/share/man/man1/vim.1.gz
slave editor.pl.UTF-8.1.gz: /usr/share/man/pl.UTF-8/man1/vim.1.gz
slave editor.it.1.gz: /usr/share/man/it/man1/vim.1.gz
slave editor.fr.UTF-8.1.gz: /usr/share/man/fr.UTF-8/man1/vim.1.gz
slave editor.fr.1.gz: /usr/share/man/fr/man1/vim.1.gz
slave editor.it.UTF-8.1.gz: /usr/share/man/it.UTF-8/man1/vim.1.gz
slave editor.pl.1.gz: /usr/share/man/pl/man1/vim.1.gz
slave editor.fr.ISO8859-1.1.gz: /usr/share/man/fr.ISO8859-1/man1/
vim.1.gz
Current best version is /usr/bin/vim.gnome.

listarea tuturor t, intelor din grup

64

INTRODUCERE N SISTEME DE OPERARE

1
2
3
4
5

mihai@keldon:~# update-alternatives --list editor


/usr/bin/vim.tiny
/bin/ed
/bin/nano
/usr/bin/vim.gnome

schimbarea interactiva a unei opt, iuni


1

root@keldon:/home/mihai# update-alternatives --config www-browser

2
3

There are 2 alternatives which provide www-browser.

4
5
6
7
8

Selection
Alternative
----------------------------------------------1
/usr/bin/w3m
+
2
/usr/bin/elinks
*

9
10

Press enter to keep the default[*], or type selection number:

schimbarea unui link simbolic (neinteractiv)


1
2

root@keldon:/home/mihai# update-alternatives --set www-browser /usr/


bin/elinks
Using /usr/bin/elinks to provide www-browser.

Pentru configurarea tuturor alternativelor se foloses, te update-alternatives

--all

3.3

Studii de caz

3.3.1

Fis, ierele n care sunt stocate informat, ii despre utilizatori

Informat, iile despre grupuri s, i utilizatori sunt stocate n trei fis, iere text:

/etc/passwd informat, ii despre conturile utilizatorilor


/etc/shadow informat, ii despre parolele utilizatorilor
/etc/group informat, ii despre grupurile de utilizatori
Fis, ierul /etc/passwd cont, ine cte o linie pentru fiecare utilizator. Aceasta linie are
, ite prin caracterul :. Cmpurile sunt (n ordinea n care apar n
s, apte cmpuri despart
fis, ier):

Nume de utilizator
Parola. Un caracter x n aceasta pozit, ie arata faptul ca parola este stocata n
fis, ierul /etc/shadow.

UID
GID
Informat, ii legate de utilizator (Nume, Adresa, Telefon)
Directorul de baza (directorul home)

CAPITOLUL 3. GESTIUNEA PACHETELOR S, I UTILIZATORILOR

65

Shell-ul folosit
Un exemplu de fis, ier /etc/passwd este:
1
2
3
4
5
6

root@asgard:/home/george# cat /etc/passwd


[...]
sync:x:4:65534:sync:/bin:/bin/sync
george:x:1000:1000:George,,,:/home/george:/bin/bash
uso:x:1001:1001:uso,EG306,,:/home/uso:/bin/bash
[...]

a ce atacurile
Init, ial, tot n fis, ierul /etc/passwd se ret, ineau s, i parolele, dar, pe masur
bazate pe dict, ionare au devenit fezabile, parolele au fost mutate ntr-un fis, ier cu
permisiuni 600 numit /etc/shadow.
Fis, ierul /etc/shadow cont, ine s, i el cte o linie pentru fiecare utilizator. Pe fiecare linie

, ite prin caracterul :. Cmpurile sunt (n ordinea n care


se gasesc
opt cmpuri despart
apar n fis, ier):

Numele de utilizator
Parola n format criptat. Daca n loc de parola se afla un caracter !, utilizatorul
respectiv nu se poate autentifica n sistem

Data la care a fost realizata ultima schimbare de parola (data este notata n

numarul
de zile trecute de la 1 ianuarie 1970)

de parola
Numarul
minim de zile care pot trece ntre doua schimbari

Numarul
maxim de zile pentru care parola este activa

Cu cte zile nainte de expirarea parolei este anunt, at utilizatorul sa s, i shimbe


parola

Numarul
de zile care trec dupa expirarea parolei pna cnd contul va fi dezactivat

Data la care contul va expira (data este notata n numarul


de zile trecute de la 1
ianuarie 1970)
Criptarea parolei se face folosind o funct, ie de hash, n general MD51 , dar, de preferat,

SHA-22 . Aceste funct, ii sunt one-way, deci nu se poate afla parola simplu nici macar
folosind /etc/shadow. La fiecare autentificare, parola introdusa de utilizator este
trecuta prin algoritmul de hash s, i comparata cu valoarea din /etc/shadow.
Mai multe detalii despre criptarea parolei se poat afla din pagina de manual a comenzii
crypt.
Un exemplu de fis, ier /etc/shadow este:
1
2
3
4
5
6
7
8

root@asgard:/home/georgedir/# cat /etc/shadow


root:!:13774:0:99999:7:::
daemon:*:13620:0:99999:7:::
bin:*:13620:0:99999:7:::
sys:*:13620:0:99999:7:::
sync:*:13620:0:99999:7:::
george:$1$LBNk03w4$4O2R/uMfCs/R9LOmH6zDG0:13774:0:99999:7:::
uso:$1$IPSj/ETo$1Uqe1Nrqm0r4LYdMihh6x1:13775:0:99999:7:::
1
2

http://en.wikipedia.org/wiki/MD5
http://en.wikipedia.org/wiki/SHA-2

66
9

INTRODUCERE N SISTEME DE OPERARE

[...]

Fis, ierul /etc/group cont, ine cte o linie pentru fiecare grup. Aceasta linie are patru
, ite prin caracterul :. Cmpurile sunt (n ordinea n care apar n fis, ier):
cmpuri despart

Numele grupului
Parola (cmp ce nu mai este folosit)
GID
Numele utilizatorilor ce fac parte din grup, n afara de utilizatorul care are acelas, i
nume cu numele grupului
Un exemplu de fis, ier /etc/group este:
1
2
3
4
5
6
7

root@asgard:/home/georgedir/# cat /etc/group


root:x:0:
lp:x:7:cupsys
scanner:x:104:cupsys,hplip,george
george:x:1000:
uso:x:1001:
[...]

3.3.2

Actualizarea unui sistem Debian sau Ubuntu

Utilitarul apt ofera posibilitatea de a actualiza toate pachetele instalate pe un sistem


care foloses, te pachete de tip .deb.

Primul pas n acest sens este asigurarea ca lista locala de pachete este actualizata.
Acest lucru se face folosind apt-get update. Dupa aceasta operat, ie, utilizatorul are
doua alternative pentru instalarea celor mai noi pachete disponibile:
a a
apt-get upgrade actualizeaza toate pachetele care pot fi actualizate far
instala sau dezinstala alte pachete. Este, din acest motiv, alternativa mai
pentru ca nu introduce dependent, e adit, ionale, s, i nici nu
conservativa,
dezinstaleaza programe potent, ial utilizate;

apt-get dist-upgrade este mai agresiv s, i instaleaza sau dezinstaleaza


pachete dupa cum dependent, ele versiunilor noi cer. De asemenea, aceasta
n
comanda solut, ioneaza eventualele conflicte1 ntr-un mod inteligent, adica,
cazul unui conflict, va actualiza pachetul pe care l considera mai important.
o comanda utila dupa un upgrade este apt-get autoremove.
n cele din urma,
Aceasta va dezinstala pachetele care nu au fost instalate explicit de utilizator, dar nici
nu mai sunt necesare niciunui pachet actual.

Cuvinte cheie

utilizator

uid

grup

gid

1
Un conflict apare cnd doua pachete cer explicit versiuni diferite dintr-un al treilea, ori cnd unul cere

instalarea, iar celalalt


dezinstalarea.

CAPITOLUL 3. GESTIUNEA PACHETELOR S, I UTILIZATORILOR

root

Package Mangement System

id

DEB, RPM

finger

/etc/apt/sources.list

/etc/passwd
/etc/shadow

67

depozit (repository )
apt

/etc/group
passwd

dpkg
dependent, a

su
adduser, deluser

instalare, dezinstalare

useradd, userdel

actualizare (update)

pachet

upgrade

ntrebari

1. Care este comanda folosita pentru adaugarea


non-interactiva a unui utilizator n
sistem?

q adduser
q useradd
q newuser
q finger
2. De ce nu sunt t, inute hash-urile parolelor n fis, ierul /etc/passwd?

q /etc/passwd se poate afla pe o partit, ie nesigura.

q permisiunile asupra /etc/passwd nu asigura securitate maxima.

q ntrebarea este o capcana,


/etc/passwd.

hash-urile parolelor chiar se afla n

q /etc/passwd nu poate fi modificat cu ajutorul comenzii passwd, de aceea


este nevoie de un fis, ier cu permisiuni speciale.

a despre sistemele de pachete?


3. Care dintre urmatoarele
afirmat, ii este adevarat

q rpm este bazat pe apt


q dpkg este un wrapper peste apt
q apt este un wrapper peste dpkg
q sistemele Red Hat folosesc dpkg
4. Care este mecanismul prin care update-alternatives schimba programele
folosite pentru anumite task-uri?

q legaturi
simbolice

68

INTRODUCERE N SISTEME DE OPERARE

q legaturi
hard

q instalare s, i dezinstalare on-demand a pachetelor


q script-uri wrapper care citesc configurat, ia de fiecare data cnd programul este

rulat s, i lanseaza alternativa corespunzatoare

5. Care dintre urmatoarele


informat, ii NU este ret, inuta n /etc/passwd?

q directorul home al utilizatorului


q interpretorul de comenzi (shell-ul)
q grupurile din care face parte
q numele utilizatorului
6. Un Personal Package Archive (PPA):
, te n repositoryq cont, ine versiuni ale unor pachete diferite de ceea se gases
urile centrale

q poate nlocui n ntregime repository-urile centrale


q este inerent nesigur s, i nu poate fi protejat
q poate fi folosit de orice distribut, ie

Capitolul 4
Sisteme de fis, iere
The Unix file system. Sure it corrupts your data, but
look how fast it is!

Ce se nvat, a din acest capitol?

Ce sunt s, i cum se utilizeaza sistemele de fis, iere


Tipuri de sisteme de fis, iere

Utilizarea cailor
relative s, i absolute

Lucrul cu fis, iere (creare, copiere, mutare etc.)


Descriptori de fis, iere
Redirectarea comenzilor n fis, iere
Arhivarea s, i dezarhivarea
Drepturi de acces la fis, iere
Cititorii familiarizat, i cu not, iunile de fis, ier, sisteme de fis, iere s, i cu terminologia asociata
pot porni direct de la sect, iunea 4.3, continund apoi cu analiza detaliata a sistemelor de
fis, iere.

4.1
4.1.1

Not, iuni introductive


Ce este un sistem de fis, iere

Fis, ierul (file) este reprezentarea logica a unei informat, ii sub forma unei ns, iruiri de
octet, i. Fis, ierul poate fi considerat ca fiind versiunea electronica a documentului scris.

69

70

INTRODUCERE N SISTEME DE OPERARE

fis, iere s, i/sau alte


Directorul (directory ) este o entitate n care se pot regasi
directoare. Acesta poate fi considerat versiunea electronica a dosarului.
n interfet, ele grafice, directorul este de obicei denumit folder.
Fis, ierele organizeaza informat, iile pe mediile de stocare. Mediile de stocare pot fi
mai multe fis, iere, de
considerate spat, ii continue de octet, i. n aceste spat, ii, se pot regasi
dimensiuni variabile.
Sistemul de fis, iere reprezinta modul de organizare a fis, ierelor pe un mediu de
stocare pentru a le face mai us, or accesibile. Organizarea include att partea logica
(modul n care sunt adresate fis, ierele) ct s, i partea fizica (modul n care sunt stocate
fis, ierele ca ns, iruire de octet, i).
Fiind o componenta a sistemului de operare, sistemul de fis, iere ment, ine numele s, i
atributele fis, ierelor s, i permite stocarea lor ntr-o ierarhie de directoare numita s, i arbore
de directoare.
Pentru ca utilizatorii sa poata avea acces la fis, iere, sistemul de operare ofera o interfat, a
pentru lucrul cu sistemul de fis, iere. Aceasta interfat, a poate fi una textuala n mod text

cum este interpretorul de comenzi, sau o interfat, a grafica.


Orice mediu de stocare poate fi utilizat pentru scrierea s, i citirea de fis, iere daca se
cunoas, te sistemul de fis, iere utilizat pentru organizare.
Sistemele de operare folosesc fis, ierele pentru a organiza date, indiferent daca aceste
date sunt ale utilizatorului sau sunt generate pe moment de sistem.
, te ntr-un fis, ier: datele
Spre exemplu, n Linux s, i n Mac OS X, orice informat, ie se gases

se regasesc
n fis, iere; directoarele sunt s, i ele fis, iere, dar cu atributul de director; fiecare
dispozitiv poate fi accesat printr-un fis, ier, inclusiv mouse-ul, memoria s, i placa video.
atoare

Intern, Windows foloses, te o schema aseman


structurii de fis, iere s, i directoare
pentru a denumi dispozitivele, dar aceasta structura nu se suprapune peste structura
de fis, iere precum n Linux s, i n Mac OS.

4.1.2

Ierarhia sistemului de fis, iere

Sistemele de fis, iere permit utilizatorului sa organizeze datele ntr-un mod accesibil.
Structura cel mai des ntlnita pentru organizarea fis, ierelor este arborele. Tabelele de
mai jos prezinta structura ierarhica din sistemele de operare cele mai cunoscute.
, te o reprezentare grafica part, iala pentru o ierarhie dintr-un sistem
n Tabela 4.1 se gases
acin
a (/) se regasesc

de fis, iere n Linux. n rad


directoarele home, bin, usr . . ., n

home se regasesc
directoarele ubuntu s, i myuser s, .a.m.d.
Comparativ cu Linux, structura n Windows este mult mai simpla pentru directoarele
acin
a.
n schimb, o mare parte din directoarele importante se ascund
aflate imediat n rad
n directorul Windows.

CAPITOLUL 4. SISTEME DE FIS, IERE


Tabelul 4.1: Ierarhia ntr-un sistem de fis, iere din mediul Unix
Director
Cont, inut

/
/bin
/boot
/dev
/etc
/home
/media
/mnt
/opt
/proc
/root
/sbin
/tmp
/usr

/var

acin
a
directorul rad

comenzi esent, iale necesare boot-arii,


ntret, inerii s, i
sistemului
depanarii
precum imaginea kernel-ului
fis, iere necesare boot-arii,
fis, iere speciale utilizate pentru accesul direct la
dispozitivele hardware sau logice ale sistemului
fis, iere pentru configurarea sistemului, precum inittab,
fstab s, i hosts

fis, ierele fiecarui


utilizator din sistem datele unui

utilizator se gasesc
n /home/username
, ile optice, floppy
subdirectoare n care se monteaza unitat
etc.
subdirectoare n care se monteaza alte sisteme de fis, iere
pachete de aplicat, ii de dimensiuni mari, accesibile tuturor
utilizatorilor
sistem virtual de fis, iere din care se obt, in informat, ii despre
sistem s, i aplicat, iile care ruleaza la un moment dat
directorul home al utilizatorului root
comenzi de baza accesibile numai utilizatorului root
fis, iere temporare
aplicat, ii pentru uzul normal al sistemului de operare
/usr/local cont, ine aplicat, iile instalate/compilate de
utilizator

fis, iere al caror


cont, inut se schimba foarte des, precum
log-uri, fis, iere temporare, cache (date reutilizabile), spool
(date neprocesate)

Figura 4.1: Ierarhia sistemului de fis, iere n Linux

71

72

INTRODUCERE N SISTEME DE OPERARE


Tabelul 4.2: Ierarhia ntr-un sistem de fis, iere din mediul Windows XP
Director
Cont, inut

C:\
C:\Windows
C:\Documents and Settings
C:\Program Files
C:\Windows\System32
C:\Documents and
Settings\username\My
Documents

acin
a
directorul rad
Windows-ul s, i fis, ierele aferente

configurarile
utilizatorilor s, i date
specifice acestora
Aplicat, ii
drivere s, i fis, iere de configurare
Windows
datele unui utilizator (aceasta este
ea poate fi modificata)

calea implicita,

Sistemul de fis, iere folosit de Windows are o particularitate: exista mai multe directoare
acin
a,
cte unul pentru fiecare partit, ie sau disc. Spre exemplu, pot exista simultan
rad

acin
a:

urmatoarele
directoare rad

A: floppy disk (de obicei literele A: s, i B: sunt rezervate de Windows pentru


floppy disk-uri);

C: partit, ie de pe hard disk; daca exista mai multe partit, ii se asociaza litere n
ordine pentru fiecare dintre ele;

D: CD-ROM/DVD-ROM (urmatoarea
litera disponibila dupa ce s-au asociat litere
partit, iilor de pe hard disk(uri)).
Dupa cum s-a precizat anterior, pe o partit, ie poate exista un singur sistem de fis, iere la

un moment dat. De obicei, sistemele de fis, iere cu suport fizic se gasesc


pe o singura
partit, ie. Trebuie ment, ionat faptul ca Windows aloca literele dupa partit, ii, nu dupa sistemul
acesta va avea
de fis, iere. Astfel, daca sistemul de fis, iere de pe o partit, ie se schimba,
asociata tot litera C:.
importante din sistemele de operare majore
Tabelul 4.3 prezinta o analogie ntre caile
existente n prezent.

4.1.3

relative s, i cai
absolute
Cai

Exista doua moduri prin care se poate accesa un fis, ier sau un director: folosind o cale

absoluta sau o cale relativa.


acin
a al sistemului de fis, iere n
Calea absoluta este calea care ncepe cu directorul rad
cazul Linux/Mac OS X este /; n cazul Windows este C:, D: etc.
Calea relativa este acea cale care indica spre un fis, ier pornind de la directorul curent.
Fiecare director cont, ine doua directoare speciale:

. (punct) indica spre acelas, i director (directorul curent);

.. (punct, punct) indica spre directorul parinte.

CAPITOLUL 4. SISTEME DE FIS, IERE

Descriere

73

sistemelor de operare
Tabelul 4.3: Comparat, ie ntre caile
Windows
Linux
Mac OS X

radacina
director home

C:
C:\Documents
and Settings\
username

/
/
/home/username /Users/
username

(WinXP),

C:\Users\
username (Vista)
C:\Program
Files

aplicat, ii

configurari
sistemului

ale

Windows Registry

/Applications;
/bin; /sbin;
/bin; /sbin
/usr/bin;
/usr/sbin;
/usr/local/bin
/opt/*/bin
directoare

specifice fiecarei
aplicat, ii, aflate n
home-ul
utilizatorului; /etc

/Users/
username/
Library; /etc

Astfel, daca se dores, te urcarea n ierarhia de fis, iere, se foloses, te .. care indica

, uind cteva
directorul parinte.
Se poate urca mai mult n ierarhia de directoare nlant
de .. delimitate prin separatorul de directoare.
grupari
n exemplul de mai jos:

comanda pwd (print working directory ) afis, eaza directorul curent;


comanda

schimba
directorul
curent
n

parintele-p
arintelui-p
arintelui
directorului curent (s-ar putea spune strabunicul
directorului curent).

1
2

cd ../../..

ubuntu@ubuntu:~/cs/uso$ pwd
/home/ubuntu/cs/uso

3
4

ubuntu@ubuntu:~/cs/uso$ cd ../../..

5
6
7

ubuntu@ubuntu:/home$ pwd
/home

. se foloses, te pentru a indica n mod explicit o cale care are ca punct de pornire
directorul curent. . este utilizat frecvent pentru a scrie comenzi care executa
script-uri/programe aflate n directorul curent.
Spre exemplu, comanda de mai jos executa fis, ierul
program_din_directorul_curent acest fis, ier trebuie sa poata fi executat de
utilizatorul curent.
1

ubuntu@ubuntu:~$ ./program_din_directorul_curent

74

INTRODUCERE N SISTEME DE OPERARE

Pentru mai multe exemple de utilizare a cailor


relative s, i absolute se poate consulta
sect, iunea 4.4.

4.1.4

Variabila de mediu PATH

n mod normal, pentru execut, ia programelor uzuale, nu este necesara specificarea caii
complete sau schimbarea directorului. Sistemele de operare utilizeaza variabile de
mediu (environment variables) pentru a stoca diferite informat, ii. PATH este o variabila

de mediu care cont, ine lista cailor


uzuale unde se gasesc
programe. Programele care

din PATH pot fi executate far


a a preciza calea catre

se gasesc
n oricare din caile
ele.

Mai multe informat, ii despre variabile de mediu s, i modificarea acestora se regasesc


n
sect, iunea 12.10.1.
Pentru a afis, a variabila de mediu PATH ntr-un mediu Linux/Mac OS X se utilizeaza
comanda:
1
2

ubuntu@ubuntu:~$ echo $PATH


/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

din lista sunt despart


, ite prin separatorul : (doua puncte).
Caile
ntr-un mediu Windows, comanda este:
1
2

C:> echo %PATH%


C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem

Separatorul folosit n Windows este ; (punct s, i virgula).

4.2
4.2.1

Tipuri de fis, iere


Terminologie

Sistemele de fis, iere pun la dispozit, ie utilizatorilor diferite forme logice de organizare s, i
acces la date, binent, eles sub forma de fis, iere.
n afara de directoare s, i fis, iere, sistemul de fis, iere pune la dispozit, ia utilizatorului s, i

legaturi
(link-uri).
mai multor tipuri de
Astfel, sistemele de fis, iere moderne ofera posibilitatea utilizarii
fis, iere, prezentate n tabelul 4.4.

Tipuri fis, ier


fis, iere normale
directoare

legaturi
simbolice

Tabelul 4.4: Tipuri de fis, iere


Denumire tip n engleza
regular files
directories/folders
symbolic links

Descriere

unitate logica de acces la date


organizeaza fis, iere s, i alte directoare

legatura
catre
un alt fis, ier

Exista posibilitatea de a crea legaturi


att pentru fis, iere ct s, i pentru directoare n
, i sunt fis, iere (dar cu atribute diferite). Legaturile

fond, ambele entitat


se utilizeaza la

CAPITOLUL 4. SISTEME DE FIS, IERE

75

scriere/citire la fel fis, ierele normale. Sistemul de operare mpreuna cu sistemul de fis, iere
se ocupa transparent de traducerea acestora n fis, iere normale pentru aplicat, ii.
Link-urile sunt create cu ajutorul comenzii ln. Mai jos sunt prezentate doua exemple de
folosire. n primul exemplu se creeaza un link al fis, ierului /etc/apt/sources.list,
iar apoi la un fis, ier local precizndu-se un nou nume pentru link.
1
2
3

ubuntu@ubuntu:~/tmp$ ls -l
total 1
-rw-r--r-- 1 ubuntu ubuntu

37 2007-09-04 10:59 hello.txt

4
5

ubuntu@ubuntu:~/tmp$ ln -s /etc/apt/sources.list

6
7
8
9
10

ubuntu@ubuntu:~/tmp$ ls -l
total 2
-rw-r--r-- 1 ubuntu ubuntu
lrwxrwxrwx 1 ubuntu ubuntu
sources.list

37 2007-09-04 10:59 hello.txt


17 2007-09-04 10:59 sources.list -> /etc/apt/

11
12

ubuntu@ubuntu:~/tmp$ ln -s hello.txt hello_link.txt

13
14
15
16
17
18

ubuntu@ubuntu:~/tmp$ ls -l
total 3
lrwxrwxrwx 1 ubuntu ubuntu
txt
-rw-r--r-- 1 ubuntu ubuntu
lrwxrwxrwx 1 ubuntu ubuntu
sources.list

4.2.2

9 2007-09-04 11:00 hello_link.txt -> hello.


37 2007-09-04 10:59 hello.txt
17 2007-09-04 10:59 sources.list -> /etc/apt/

Detect, ia tipului fis, ierelor

Pe sistemele Windows, detect, ia tipului fis, ierelor se bazeaza pe verificarea extensiei. n


funct, ie de aceasta, sistemul de operare determina care aplicat, ie este potrivita pentru a
deschide un fis, ier.
Pe sistemele Linux, detect, ia tipului fis, ierelor este realizata prin intermediul comenzii
file. Aceasta utilizeaza un fis, ier special de configurare n care sunt nscrise secvent, e

de octet, i care se regasesc


n diferite tipuri de fis, iere. file lucreaza independent de

extensia fis, ierului, precum este dovedit n exemplele urmatoare:


1
2

ubuntu@ubuntu:~$ file photo.jpg


photo.jpg: JPEG image data, JFIF standard 1.01

3
4

ubuntu@ubuntu:~$ mv photo.jpg fisier.txt

5
6
7

ubuntu@ubuntu:~$ file fisier.txt


photo.txt: JPEG image data, JFIF standard 1.01

76

INTRODUCERE N SISTEME DE OPERARE

4.3
4.3.1

Operat, ii uzuale asupra fis, ierelor s, i directoarelor


Afis, area s, i schimbarea directorului curent

Comanda pwd afis, eaza calea absoluta catre


directorul curent. De asemenea, prompt-ul
bash cont, ine implicit directorul curent. Pentru a schimba directorul curent se foloses, te

comanda cd <cale>. Calea poate sa fie o cale absoluta sau relativa.


, te un exemplu de folosire a comenzilor pwd s, i cd a se observa ca la
Mai jos se gases
fiecare schimbare de director se modifica s, i prompt-ul bash. Ierarhia de directoare prin
care se navigheaza este cea prezentata anterior.
1
2

ubuntu@ubuntu:~$ pwd
/home/ubuntu

3
4

ubuntu@ubuntu:~$ cd ..

5
6
7

ubuntu@ubuntu:/home$ pwd
/home

8
9

ubuntu@ubuntu:/home$ cd ../usr/bin

10
11
12

ubuntu@ubuntu:/usr/bin$ pwd
/usr/bin

13
14

ubuntu@ubuntu:/usr/bin$ cd .

15
16

ubuntu@ubuntu:/usr/bin$ cd /

17
18

ubuntu@ubuntu:/$ cd

19
20
21

ubuntu@ubuntu:~$ pwd
/home/ubuntu

22
23

ubuntu@ubuntu:~$ cd /usr/bin

24
25

ubuntu@ubuntu:/usr/bin$ cd /home

26
27
28

ubuntu@ubuntu:/home$ cd /usr/bin

29
30

ubuntu@ubuntu:/usr/bin$ cd ~

31
32
33

ubuntu@ubuntu:~$ pwd
/home/ubuntu

34
35

ubuntu@ubuntu:~$ cd ././././

36
37

ubuntu@ubuntu:~$ cd ../..

38
39
40

ubuntu@ubuntu:/$ pwd
/

41
42

ubuntu@ubuntu:/$

Observat, ii:

cd .. schimba directorul n directorul parinte;

CAPITOLUL 4. SISTEME DE FIS, IERE

77

. (punct) este o referint, a la directorul curent, deci cd . nu modifica directorul;


~ este echivalentul directorului home pentru utilizatorul curent (cd ~);
a parametri schimba directorul n directorul home;
cd apelat far

cd - schimba directorul n directorul anterior.

4.3.2

Afis, area cont, inutului fis, ierelor

Cont, inutul unui fis, ier poate fi afis, at pe ecran prin intermediul comenzii cat. Sintaxa
acestei comenzi este cat <nume fis, ier>. Un exemplu de utilizare este:
1
2
3
4

ubuntu@ubuntu:~$ cat /etc/resolv.conf


# Generated by dhcpcd for interface eth0
search localdomain
nameserver 192.168.0.1

Aceasta comanda afis, eaza tot fis, ierul, inclusiv daca acesta este mai mare de un ecran.
Pentru a putea naviga prin output-ul unei comenzi (n cazul acesta, al comenzii cat), se
pot folosi comenzile more sau less.

more permite navigarea doar intr-o singura direct, ie (de la nceput catre
sfrs, itul
pe cnd less permite navigarea n ambele direct, ii,
fis, ierului) s, i cte un ecran odata,
cte o linie, la fel ca un editor. more s, i less poarta numele de paginatoare (pagere).
atoare

Interfat, a less este foarte aseman


cu cea a editorului Vim (vezi sect, iunea 14.3).
1

ubuntu@ubuntu:~$ cat /etc/X11/xorg.conf | more

2
3

ubuntu@ubuntu:~$ cat /etc/X11/xorg.conf | less

4.3.3

Listarea cont, inutului unui director

Cea mai frecventa operat, ie care se executa asupra directoarelor este listarea. Comanda
utilizata este ls. n aceasta sect, iune, prin fis, ier nt, elegem orice tip de fis, ier (inclusiv tipul
director), mai put, in n cazurile cnd este ment, ionat explicit.
Sintaxa comenzii pentru listare este ls [opt, iuni] [<cale>]. n momentul n care
lipses, te calea, se realizeaza listarea cont, inutului directorului curent.
Opt, iunile cele mai des folosite cu aceasta comanda sunt:

-l afis, eaza informat, ii detaliate despre fiecare fis, ier/director (data modificare,
dimensiune, utilizator, grup, drepturi de acces);

-a afis, eaza s, i fis, ierele care ncep cu . (caracterul punct); n Unix, aceste fis, iere
sunt considerate de majoritatea interfet, elor cu utilizatorul ca fiind fis, iere ascunse;

-h afis, eaza dimensiunea fis, ierelor n format human-readable,

respectiv
dimensiunea
n
octet, i
este
nlocuita
cu
dimensiunea
n
, es, te un anumit ordin de marime.

Kilooctet, i/Megaoctet, i/Gigaoctet, i daca depas

Formatul utilizat la afis, area detaliata cont, ine mai multe informat, ii despre acel fis, ier:

78

1
2

INTRODUCERE N SISTEME DE OPERARE

ubuntu@ubuntu:~$ ls -l /home/myuser/myapp
-rwxr----- 1 myuser users 1176348 2007-03-03 20:28 /home/myuser/myapp

Semnificat, ia coloanelor afis, ate este:

primul caracter reprezinta tipul fis, ierului:


- = fis, ier normal
d = director
p = pipe
b = dispozitiv bloc
c = dispozitiv caracter
a simbolica
l = legatur

urmeaza 3 grupuri de cte 3 caractere (rwx) care reprezinta drepturile de acces

pentru utilizatorul myuser (care este det, inatorul


fis, ierului), drepturile de acces
pentru utilizatorii care fac parte din grupul users (care det, ine fis, ierul), drepturile
de acces pentru ceilat, i utilizatori; mai multe detalii despre drepturile de acces se

gasesc
n sect, iunea 4.5;

numarul
de link-uri catre
fis, ier 1;

utilizatorul ce det, ine fis, ierul - myuser;


grupul de care apart, ine fis, ierul users;
dimensiunea fis, ierului 1176348;
data fis, ierului 2007-03-03;
ora fis, ierului 20:28;
numele fis, ierului /home/myuser/myapp.

mai ntlnite pentru comanda ls care


Exemplele urmatoare
prezinta cteva utilizari
combina parametrii prezentat, i anterior:
1
2

ubuntu@ubuntu:~$ ls
Desktop

3
4
5

ubuntu@ubuntu:~$ ls ~
Desktop

6
7
8
9

ubuntu@ubuntu:~$ ls -l ~
total 0
drwxr-xr-x 2 ubuntu ubuntu 100 2007-09-03 13:15 Desktop

10
11
12
13
14
15
16
17
18
19

ubuntu@ubuntu:~$ ls
total 56
drwxr-xr-x 7 ubuntu
drwxr-xr-x 3 root
-rw------- 1 ubuntu
-rw-r--r-- 1 ubuntu
drwxr-xr-x 2 ubuntu
-rw-r--r-- 1 ubuntu
-rw------- 1 ubuntu

-al
ubuntu 580 2007-09-03 19:58 .
root
60 2007-09-03 06:14 ..
ubuntu
34 2007-09-03 19:58 .bash_history
ubuntu 2346 2007-09-03 06:14 .bashrc
ubuntu 100 2007-09-03 13:15 Desktop
ubuntu 566 2007-09-03 06:14 .profile
ubuntu 9524 2007-09-03 17:40 .xsession-errors

CAPITOLUL 4. SISTEME DE FIS, IERE

79

20
21
22
23
24
25
26
27
28
29

ubuntu@ubuntu:~$ ls
total 56K
drwxr-xr-x 7 ubuntu
drwxr-xr-x 3 root
-rw------- 1 ubuntu
-rw-r--r-- 1 ubuntu
drwxr-xr-x 2 ubuntu
-rw-r--r-- 1 ubuntu
-rw------- 1 ubuntu

-alh
ubuntu 580 2007-09-03 19:58 .
root
60 2007-09-03 06:14 ..
ubuntu
34 2007-09-03 19:58 .bash_history
ubuntu 2.3K 2007-09-03 06:14 .bashrc
ubuntu 100 2007-09-03 13:15 Desktop
ubuntu 566 2007-09-03 06:14 .profile
ubuntu 9.5K 2007-09-03 17:40 .xsession-errors

30
31
32
33
34

ubuntu@ubuntu:~$ ls ../../
bin
dev
initrd
media
boot
etc
initrd.img mnt
cdrom home lib
opt

proc
rofs
root

sbin
srv
sys

tmp
usr
var

vmlinuz

ubuntu@ubuntu:~$ ls
.
boot
etc
..
cdrom home
bin dev
initrd

mnt
opt
proc

rofs
root
sbin

srv
sys
tmp

usr
var
vmlinuz

35
36
37
38
39

-a /
initrd.img
lib
media

Observat, ii:

daca se dores, te afis, area cont, inutului directorului curent, nu este necesara scrierea
ca parametru pentru comanda ls;
caii
ls -al afis, eaza lista detaliata a fis, ierelor din directorul home al utilizatorului
curent, inclusiv fis, ierele ascunse (a se observa ca s, i . s, i .. sunt afis, ate;
ls -alh afis, eaza lista detaliata a fis, ierelor din directorul home al utilizatorului
curent, utiliznd formatul human-readable pentru afis, area dimensiunii fis, ierelor (a
se observa dimensiunea fis, ierului .xsession-errors);

ls ../.. prezinta utilizarea lui ls cu parametru dat sub forma de cale relativa
(directorul afis, at este /);
ls -a / prezinta fis, ierele ascunse ale directorului / se observa ca s, i acest
director cont, ine directoarele standard . s, i ...
acin
a
Folosind opt, iunea -R se poate afis, a arborele de directoare s, i fis, iere care are ca rad
directorul specificat ca argument:
1
2
3
4
5

ubuntu@ubuntu:~$ ls -R dir1
dir1:
dir2 fisier1 fisier2
dir1/dir2:
fisier3 fisier4

Pentru mai multe opt, iuni se poate consulta ls --help sau man ls.

4.3.4

Crearea fis, ierelor/directoarelor

Pentru a crea orice entitate pe un sistem de fis, iere, se utilizeaza o serie de comenzi,
prezentate n tabelul 4.5.
Primul mod de creare a unui fis, ier este utiliznd comand comanda touch. A doua
metoda se bazeaza pe o funct, ionalitate bash numita redirectare n fis, iere (vezi

80

INTRODUCERE N SISTEME DE OPERARE

Entitate

Tabelul 4.5: Comenzi pentru crearea fis, ierelor


Comanda

Fis, ier normal


Director

Legaturi
(link-uri)
Pipe-uri cu nume

touch <nume_fis, ier>, > <nume_fis, ier>


mkdir <nume_director>
ln -s <destinatie> [<nume_leg
atur
a>]
mkfifo <nume_pipe>

sect, iunea 4.4). Pe scurt, ceea ce realizeaza comanda a 2-a este redirectarea ies, irii

unei comenzi (nule) catre


un fis, ier, crendu-se astfel un fis, ier gol.
1

ubuntu@ubuntu:~$ touch fisier1

2
3

ubuntu@ubuntu:~$ > fisier2

4
5

ubuntu@ubuntu:~$ mkdir dir1

6
7

ubuntu@ubuntu:~$ mkfifo fifo1

8
9
10
11
12
13
14

ubuntu@ubuntu:~$ ls
total 0
drwxr-xr-x 2 mircea
prw-r--r-- 1 mircea
-rw-r--r-- 1 mircea
-rw-r--r-- 1 mircea

-l
users 40 2007-09-20 10:26 dir1
users 0 2007-09-20 10:30 fifo1
users 0 2007-09-20 10:26 fisier1
users 0 2007-09-20 10:26 fisier2

datei ultimei modificari


s, i
O alta ntrebuint, are a comenzii touch este aceea a actualizarii
Folosind opt, iunea -m se va actualiza doar data ultimei modificari

a datei ultimei accesari.


Folosind comanda
iar folosind opt, iunea -a se va actualiza doar data ultimei accesari.
a aceste opt, iuni va duce la modificarea ambelor date. Optiunea -r poate fi
touch far
folosita pentru a prelua informat, iile legate de timp de la alt fis, ier.
n exemplul de mai jos, se observa modificarea timpului de acces al fis, ierului de la
valoarea 17:03 la 17:11.
1
2

ubuntu@ubuntu:~$ ls -al
-rw-r--r-- 1 root
root

15 2009-08-21 17:03 fisier1

3
4

ubuntu@ubuntu:~$ touch fisier1

5
6
7

ubuntu@ubuntu:~$ ls -al
-rw-r--r-- 1 root
root

15 2009-08-21 17:11 fisier1

Exemple privind crearea de link-uri sunt prezentate n sect, iunea 4.2.1.

4.3.5

Copiere/mutare/redenumire/s, tergere

Copierea s, i mutarea sunt operat, ii care necesita 2 parametri:

sursa de unde se copiaza/mut


a;

destinat, ia unde se copiaza/mut


a.

CAPITOLUL 4. SISTEME DE FIS, IERE

81

Copierea
Copierea unui fis, ier sau director se realizeaza cu ajutorul comenzii cp. Sintaxa comenzii
este cp [opt, iuni] <sursa> <destinatie>. Opt, iunile cele mai folosite pentru
copiere sunt:

-R copiere recursiva (copiaza s, i copiii directoarelor, presupunnd ca exista as, a

ceva n sursa);

-p copiere cu pastrare
a tuturor atributelor (permisiuni, data);

-u copiaza doar daca fis, ierul sursa este mai nou dect fis, ierul destinat, ie sau
daca fis, ierul destinat, ie lipses, te.
1

ubuntu@ubuntu:~$ touch f1.txt

2
3
4

ubuntu@ubuntu:~$ ls
f1.txt

5
6

ubuntu@ubuntu:~$ cp f1.txt f2.txt

7
8
9

ubuntu@ubuntu:~$ ls
f1.txt f2.txt

Mutarea
Mutarea unui fis, ier sau director se realizeaza cu ajutorul comenzii mv. Sintaxa comenzii
este mv [opt, iuni] <sursa> <destinatie>. Implicit, mutarea este recursiva s, i

pastreaz
a atributele fis, ierelor. n cazul n care sursa s, i destinat, ia se gasesc
pe aceeas, i

partit, ie, la o mutare, se schimba doar parintele


fis, ierului sau directorului care se muta.
O operat, ie de mutare este, astfel, mai put, in costisitoare dect o operat, ie de copiere.
1
2

ubuntu@ubuntu:~$ pwd
/tmp/q

3
4
5

ubuntu@ubuntu:~$ ls
f1.txt f2.txt

6
7

ubuntu@ubuntu:~$ mv f1.txt /tmp/r

8
9
10

ubuntu@ubuntu:~$ ls
f2.txt

11
12
13

ubuntu@ubuntu:~$ ls /tmp/r/
f1.txt

Redenumirea
Redenumirea este, de fapt, o mutare s, i se realizeaza cu ajutorul comenzii mv, n

urmatoarele
conditii:

n cazul n care sursa este un fis, ier s, i destinat, ia este un fis, ier, se realizeaza
copierea/mutarea fis, ierului cu schimbarea numelui sursei;

82

INTRODUCERE N SISTEME DE OPERARE

n cazul n care sursa este un director s, i destinat, ia nu exista ca director, se


realizeaza copierea/mutarea directorului cu schimbarea numelui.
1
2

ubuntu@ubuntu:~$ ls
f2.txt

3
4

ubuntu@ubuntu:~$ mv f2.txt f3.txt

5
6
7

ubuntu@ubuntu:~$ ls
f3.txt

Stergerea fis, ierelor/directoarelor


n Linux, comanda cea mai utilizata pentru s, tergerea fis, ierelor s, i directoarelor este rm.
Sintaxa comenzii este rm [opt, iuni] <cale>.
Una dintre cele mai folosite opt, iuni este -r/-R, utilizata pentru a s, terge recursiv un
director. Aceasta opt, iune trebuie folosita cu atent, ie pentru ca poate avea rezultate
negative daca directorul care este s, ters cont, ine informat, ii utile. O eroare celebra este
utilizarea comenzii rm -rf /, care s, terge recursiv totul ncepnd cu directorul
acin
a,
fort, nd s, tergerile (datorita opt, iunii -f).
rad
Pentru s, tergerea directoarelor goale se poate folosi s, i rmdir.

4.3.6

Arhivarea fis, ierelor s, i dezarhivarea

Arhivarea este procedeul prin care mai multe fis, iere s, i directoare sunt adunate
la un loc (ntr-un singur fis, ier), realiznd eventual s, i o reducere a dimensiunii prin

eliminarea datelor care se repeta s, i nlocuirea lor cu o serie de codificari.


n general, n cadrul procesului de arhivare se creeaza un dict, ionar cu secvent, e de
octet, i frecvente s, i o codificare a lor mai scurta (pe mai put, ini octet, i). Arhiva cont, ine att
dict, ionarul ct s, i cont, inutul fis, ierelor dar, n loc de secvent, ele frecvente lungi, se

regasesc
referint, e catre
dict, ionar. Daca fis, ierele cont, in multe date care se repeta,
dimensiunea unei arhive scade considerabil.
exista doua etape mai
Dupa cum se poate identifica s, i din descrierea anterioara,
importante n ceea ce prives, te manevrarea fis, ierelor:

concatenarea (lipirea) fis, ierelor ntr-un fis, ier mai mare, din care sa se poata extrage
toate fis, ierele s, i informat, iile despre ele;
a a se
compresia fis, ierului mare, astfel nct sa se reduca dimensiunea lui dar far
pierde din informat, ii.
n Linux exista utilitare de arhivare care se ocupa ori de una dintre etape ori de ambele
etape.
Numele utilitarului este o abreviere a tape
Comanda tar se ocupa de prima etapa.
sale, rezultatul comenzii era transferat pe benzi
archive, ntruct, la nceputul utilizarii
magnetice.

CAPITOLUL 4. SISTEME DE FIS, IERE

83

Un fis, ier .tar cont, ine fis, iere necomprimate mpreuna cu informat, ii despre modul de
, te un fis, ier n cadrul
extragere al acestora (spre exemplu: de unde pna unde se gases
arhivei). Din acest motiv, un fis, ier .tar este de obicei mai mare dect suma tuturor
dimensiunilor fis, ierelor ce sunt incluse n el.
Pentru a crea o arhiva .tar, se utilizeaza comanda:
1

ubuntu@ubuntu:~$ tar cvf nume_arhiva.tar <cale>

cu parametrii:

c creeaza arhiva;

v afis, eaza ce anume se arhiveaza;

f nume_arhiva.tar specifica numele arhivei;


<cale> precizeaza directorul/directoarele/fis, iere care vor fi arhivate.

Pentru a dezarhiva o arhiva .tar, se utilizeaza:


1

ubuntu@ubuntu:~$ tar xvf nume_arhiva.tar [-C <cale_destinatie>]

unde:

x dezarhiveaza (eXtract);

v afis, eaza ce anume se dezarhiveaza;

f nume_arhiva.tar precizeaza numele arhivei care se dezarhiveaza;


opt, ional, locul unde se realizeaza
-C <cale_destinatie> specifica,
dezarhivarea.

f s, i nume_arhiva.tar se considera un singur parametru; din acest motiv, de fiecare


aceasta trebuie sa
data cnd se foloses, te opt, iunea f pentru a indica un fis, ier arhiva,

apara ultima n lista de opt, iuni, fiind urmat imediat de numele fis, ierului arhiva.
Pentru a realiza compresia unui fis, ier, doua utilitare sunt folosite preponderent n lumea
Unix:

gzip, mai rapid dar cu o rata de compresie mai mica;

bzip2, mai lent dar cu o rata de compresie mai mare.


Comanda tar poate utiliza direct unul dintre programele de comprimare ment, ionate
anterior folosind parametrul z pentru gzip sau parametrul j pentru bzip2, ca n
tabelul 4.7
Tabelul 4.6: Comprimarea s, i decomprimarea folosind gzip s, i bzip2
Comprimare
Decomprimare
gzip
bzip2

tar czvf
fisier.tar.gz dir/
tar cjvf
fisier.tar.bz2 dir/

tar xzvf
fisier.tar.gz
tar xjvf
fisier.tar.bz2

Pe lnga opt, iunile de compresie/arhivare se mai pot folosi s, i alte opt, iuni. Printre cele mai
a opt, iunea --preserve, care impune pastrarea

utile se numar
drepturilor de acces n

momentul arhivarii/dezarhiv
arii.

84

INTRODUCERE N SISTEME DE OPERARE

Cteva exemple de utilizare a comenzii tar pentru comprimare s, i decomprimare, n


conjunct, ie cu bzip2 s, i gzip sunt prezentate mai jos:
1
2

ubuntu@ubuntu:/tmp/q$ ls
f1.txt f2.txt f3.txt

3
4
5
6
7

ubuntu@ubuntu:/tmp/q$ tar cvf arhiva.tar f*.txt


f1.txt
f2.txt
f3.txt

8
9
10

ubuntu@ubuntu:/tmp/q$ file arhiva.tar


arhiva.tar: POSIX tar archive (GNU)

11
12

ubuntu@ubuntu:/tmp/q$ gzip arhiva.tar

13
14
15

ubuntu@ubuntu:/tmp/q$ ls
arhiva.tar.gz f1.txt f2.txt

f3.txt

16
17
18

ubuntu@ubuntu:/tmp/q$ file arhiva.tar.gz


arhiva.tar.gz: gzip compressed data, was "arhiva.tar", from Unix, last
modified: Thu Sep 20 11:37:30 2007

19
20
21

ubuntu@ubuntu:/tmp/q$ ls
arhiva.tar.gz f1.txt f2.txt

f3.txt

22
23

ubuntu@ubuntu:/tmp/q$ mv arhiva.tar.gz fisier.txt

24
25
26

ubuntu@ubuntu:/tmp/q$ file fisier.txt


fisier.txt: gzip compressed data, was "arhiva.tar", from Unix, last
modified: Thu Sep 20 11:37:30 2007

27
28
29

ubuntu@ubuntu:/tmp/q$ ls
f1.txt f2.txt f3.txt

30
31
32
33
34

ubuntu@ubuntu:/tmp/q$ tar czvf new.tar.gz f*


f1.txt
f2.txt
f3.txt

35
36
37

ubuntu@ubuntu:/tmp/q$ ls
f1.txt f2.txt f3.txt new.tar.gz

38
39
40

ubuntu@ubuntu:/tmp/q$ file new.tar.gz


new.tar.gz: gzip compressed data, from Unix, last modified: Thu Sep 20
11:40:02 2007

41
42

ubuntu@ubuntu:/tmp/q$ mkdir tmp

43
44

ubuntu@ubuntu:/tmp/q$ mv new.tar.gz tmp/

45
46

ubuntu@ubuntu:/tmp/q$ cd tmp/

47
48
49
50
51
52
53

ubuntu@ubuntu:/tmp/q/tmp$ tar xvf new.tar.gz


f1.txt
f2.txt
f3.txt
ubuntu@ubuntu:/tmp/q/tmp$ ls
f1.txt f2.txt f3.txt new.tar.gz

CAPITOLUL 4. SISTEME DE FIS, IERE

4.3.7

85

Backup

Backup-ul este utilizat pentru a pastra


ntr-un loc separat o copie a datelor. Aceasta
copie se utilizeaza pentru a reface datele n cazul n care suportul original nu mai poate
fi folosit din orice motiv. Este una dintre cele mai utile act, iuni asupra datelor pe care toata
lumea s, tie ca ar fi bine sa o faca dar nu o face. Cteva metode de backup au fost deja

prezentate. Tabelul urmator


prezinta cteva metode de backup s, i situat, iile cnd sunt ele
potrivite.
Tabelul 4.7: Comprimarea s, i decomprimarea folosind gzip s, i bzip2
Metoda
Descriere

tar+gzip/bzip2

dd

rsync1

rdiff-backup2

Metoda foarte simplu de aplicat. Devine greu de folosit


pentru dimensiuni mari de date. Permite comprimarea
datelor.
Metoda simplu de folosit s, i independenta de sistemul de

fis, iere. Permite pastrarea


intacta a structurii sistemului de
fis, iere. Inflexibila cnd vine vorba de recuperarea datelor.
, i mari de date.
Utila pentru cantitat
atoare

E aseman
comenzii cp dar la care s-a adaugat
suport de sincronizare intre mai multe sisteme de
calcul. Permite replicarea structurii de fis, iere (inclusiv
permisiuni) ntre 2 sisteme de calcul.
Este un wrapper peste rsync. Adauga suport pentru
backup-uri incrementale. La un moment dat se realizeaza
ator

un backup complet pentru un director (aseman


rsync-ului). Backup-urile incrementale salveaza doar

modificarile
ce s-au facut
de la ultimul backup pna n
prezent, indiferent de tipul backup-ului. n acest fel se

poate reveni la orice stare anterioara, n masura


n care
s-a realizat cel put, in un backup incremental la acea stare.

de comenzi
Redirectari

4.4
4.4.1

Descriptorii de fis, ier

Fiecare program n execut, ie utilizeaza 3 fis, iere speciale pentru a interact, iona cu
utilizatorul:

stdin (standard input) fis, ier care reprezinta locul de unde programul s, i cites, te
datele de intrare (de obicei tastatura);

stdout (standard output) fis, ier care reprezinta locul unde programul scrie datele

de ies, ire (de obicei acesta este consola curenta);

stderr (standard error ) fis, ier care reprezinta locul unde programul scrie mesajele

de eroare (de obicei acesta este consola curenta).

86

INTRODUCERE N SISTEME DE OPERARE

n C/C++, exista 3 variabile de tipul FILE * cu numele stdin, stdout s, i stderr


care sunt init, ializate s, i disponibile n orice moment. Ele ndeplinesc rolurile descrise
anterior s, i pot fi folosite ca pe orice alta variabila de tipul FILE *.
Fiecare fis, ier deschis de o aplicat, ie Linux are asociat un indice. Acest indice se numes, te

descriptor de fis, ier. Fis, ierele descrise anterior au descriptorii de fis, ier urmatori:

stdin 0
stdout 1
stderr 2
Orice fis, ier deschis de aplicat, ie va avea un descriptor mai mare sau egal cu 3.

4.4.2

Redirectari

Exista situat, ii cnd, pentru o aplicat, ie, utilizatorul dores, te sa modifice intrarea sau ies, irea
spre exemplu, utilizatorul dores, te ca ies, irea unui program sa se faca ntr-un fis, ier s, i nu
sau intrarea unui program sa fie un fis, ier s, i nu tastatura. Acest lucru
n consola curenta,
se poate face doar lucrnd la nivelul descriptorilor.
Cazurile ntlnite sunt prezentate n Tabela 4.8.

sursa

Tabelul 4.8: Comenzi de redirectare


destinat, ie
exemplu comanda

intrare (stdin)
ies, ire (stdout)
eroare (stderr)
eroare (stderr)
eroare s, i ies, ire

fis, ier
fis, ier
fis, ier
ies, ire (stdout)
fis, ier

./program
./program
./program
./program
./program
./program

< f_in
> f_out
2> f_err
2>&1
2>&1 > f_out_err
&> f_out_err

sau

Se observa ca pentru a redirecta ies, irea/intrarea se folosesc semnele > (mai mare)

pentru ies, ire (catre


exteriorul programului) s, i < (mai mic) pentru intrare (catre
program).
Pentru redirectarea ies, irii de erori se indica descriptorul de fis, ier 2. Pentru a redirecta

catre
ies, irea standard (stdout), se foloses, te sintaxa &1.

Pentru redirectarea ies, irii de erori s, i iesirii standard catre


un fis, ier, se redirecteaza nti

ies, irea de erori catre


ies, irea standard folosind 2>&1 dupa care se redirecteaza ies, irea

standard catre
un fis, ier >fis, ier_iesire_s, i_erori. Bash ofera o sintaxa
simplificata n cadrul operatorului &>.
n comanda anterioara se trimite cont, inutul fis, ierului
Ca exemplu de redirectare a intrarii,
continut_mail ca intrare pentru comanda mail. Se va trimite un mesaj utilizatorului
user1 cu informat, iile din fis, ier.
1

ubuntu@ubuntu:~$ mail user1 < continut_mail

n exemplul de mai jos se scrie lista de fis, iere s, i directoare din directorul curent n fis, ierul

listare.

CAPITOLUL 4. SISTEME DE FIS, IERE

87

ubuntu@ubuntu:~$ ls > listare

2
3
4

ubuntu@ubuntu:~$ cat listare


fisier1

Pentru a adauga
rezultatul comenzii date la sfrs, itul fis, ierului se foloses, te operatorul >>:
1

ubuntu@ubuntu:~$ date >> listare

2
3
4
5

ubuntu@ubuntu:~$ cat listare


fisier1
Sat Aug 22 16:07:50 EEST 2009

a specificarea destinat, iei.


n listingul de mai jos se ncearca copierea unui fis, ier far
Aceasta comanda genereaza o eroare care este scrisa n fis, ierul erori:
1

ubuntu@ubuntu:~$ cp fisier1 2> erori

2
3
4
5

ubuntu@ubuntu:~$ cat erori


cp: missing destination file operand after fisier1
Try cp --help for more information.

Pentru a adauga
noi mesaje de eroare la sfrs, itul fis, ierului se foloses, te operatorul 2>>:
1

ubuntu@ubuntu:~$ cp fisier4 2>> erori

2
3
4
5

ubuntu@ubuntu:~$ cat erori


cp: missing destination file operand after fisier1
Try cp --help for more information.

6
7
8

cp: missing destination file operand after fisier4


Try cp --help for more information.

Comanda de mai jos scrie s, i rezultatele s, i erorile generate de comanda ls n fis, ierul
specificat:
1

ubuntu@ubuntu:~$ ls fisier1 fisier4 2>&1 > rezultate

sau mai simplu:


1

ubuntu@ubuntu:~$ ls fisier1 fisier4 >& rezultate

2
3
4
5

ubuntu@ubuntu:~$ cat rezultate


ls: cannot access fisier4: No such file or directory
fisier1

folosind fis, iere speciale:


Tabelul 4.9 prezinta cteva exemple de redirectari

4.5

Drepturi de acces

a de protect, ie a datelor o reprezinta drepturile de acces la fis, iere. Att


O prima masur
timp ct un utilizator nu are drepturi de administrator pe un anumit computer, acel
utilizator se supune drepturilor de acces la fis, iere.
a a particulariza la
Tabelul 4.10 prezinta drepturi ce pot fi configurate pentru un fis, ier, far
un anumit tip de sistem de fis, iere.

88

INTRODUCERE N SISTEME DE OPERARE


Tabelul 4.9: Comenzi de redirectare care folosesc fis, iere speciale
Comanda
Efect

./program 2>/dev/null
./program 2>&1 >/dev/null
> fout

mesajele de la ies, irea de erori nu


sunt afis, ate
niciun mesaj nu este afis, at
creeaza un fis, ier gol cu numele

f_out
cat /dev/null > f_out

Tabelul 4.10: Drepturi de acces


Descriere

Drept
citire
scriere
execut, ie
modificare
s, tergere

4.5.1

creeaza un fis, ier cu acelas, i


cont, inut ca /dev/null, adica un
fis, ier gol

dreptul de a deschide s, i citi cont, inutul unui fis, ier


dreptul de a scrie ntr-un fis, ier
dreptul de a executa un fis, ier (aplicat, ie) sau, pentru
directoare, dreptul de a intra ntr-un director
dreptul de a modifica datele dintr-un fis, ier existent
dreptul de a sterge un fis, ier

Utilizatori s, i grupuri de utilizatori vs. liste de acces

Exista doua metode mai ntlnite pentru definirea drepturilor de acces la fis, iere:

drepturi de acces la nivel de utilizator/grup.


liste de acces Access Control Lists (ACL).
Prima metoda (drepturi de acces la nivel de utilizator/grup) consta n definirea unor

, i:
drepturi pentru urmatoarele
entitat

posesorul unui fis, ier (user );


grupul care det, ine fis, ierul (group);
tot, i ceilalt, i utilizatori (others).
Un utilizator se poate afla n mai multe grupuri (vezi sect, iunea 3.1). Aceasta metoda
este cea mai folosita cale pentru definirea drepturilor de acces. Metoda ofera un nivel

de protect, ie suficient pentru majoritatea situat, iilor, ocupand


un spat, iu limitat.
n cadrul sistemului bazat pe liste de acces, unui fis, ier i se pot asocia mai mult, i utilizatori
, i pot fi configurate mai
s, i/sau grupuri de utilizatori. Pentru fiecare dintre aceste entitat
multe tipuri de drepturi. Aceasta varianta poate fi privita ca o extindere a sistemului cu
drepturi de acces prezentat anterior. Complexitatea poate face ca sistemul sa fie destul
de greu de ntret, inut.
Fiecare sistem de fis, iere ofera un set de drepturi ce pot fi modificate pentru fiecare fis, ier

n parte. Ca diferent, e notabile ntre sistemele de fis, iere se pot aminti urmatoarele:

FAT32 nu ofera suport pentru drepturi de acces la fis, iere; exista doar posibilitatea
de a marca un fis, ier ca read-only; orice utilizator poate sa schimbe acest drept;

CAPITOLUL 4. SISTEME DE FIS, IERE

89

majoritatea sistemelor de fis, iere n mediile Unix (inclusiv Mac OS X) au suport


pentru drepturi de acces bazat pe utilizator/grup s, i, folosind o extensie, pot fi
extinse cu liste de acces;

NTFS are un sistem foarte avansat de drepturi de acces, bazat pe liste de acces

(vezi sect, iunea 10.6.1); pentru fiecare entitate adaugat


a n lista unui anumit fis, ier
pot fi configurate mai multe drepturi.

4.5.2

Clasificarea drepturilor de acces

Sistemele de fis, iere din mediile Unix care au ca implementare standard drepturile de

acces la nivel user/grup au la baza urmatorul


set de drepturi de acces:

citire (read) deschidere s, i citire de fis, iere;


scriere (write) creare s, i scriere de fis, iere;
execut, ie (execute) execut, ie fis, iere/intrare n directoare.
, i pentru care poate fi stabilita orice combinat, ie
n aceste sisteme de fis, iere exista 3 entitat
a drepturilor definite mai sus:

utilizator (user ) posesorul fis, ierului;


grup (group) grupul de care apart, ine fis, ierul;
alt, ii (others) utilizatorii care nu fac parte din grupul fis, ierului s, i nici nu sunt
posesori.

4.5.3

Vizualizarea drepturilor de acces

Pentru a vedea drepturile de acces pentru un anumit fis, ier este suficienta utilizarea
comenzii ls cu parametrul -l. Spre exemplu, pentru a vedea drepturile de acces
asupra unui fis, ier, transmitem ca parametru comenzii ls direct numele fis, ierului:
1
2

ubuntu@ubuntu:~$ ls -l fisier.txt
-rwxr----- 1 ubuntu users 0 2007-09-20 12:47 fisier.txt

Drepturile de acces sunt date de primele 10 caractere din ies, irea comenzii ls:

primul caracter reprezinta tipul fis, ierului:


- = fis, ier obis, nuit
d = director
p = pipe
b = dispozitiv bloc
c = dispozitiv caracter
a
l = legatur

90

INTRODUCERE N SISTEME DE OPERARE

urmatoarele
3 caractere (rwx) reprezinta drepturile de acces pentru utilizatorul

ubuntu, care este det, inatorul


fis, ierului; se observa ca utilizatorul are toate
drepturile (scriere/citire/execut, ie);

urmatoarele
3 caractere (r--) reprezinta drepturile de acces pentru utilizatorii care
fac parte din grupul users; se observa ca este prezent dreptul de citire dar lipsesc
drepturile de scriere s, i execut, ie;

urmatoarele
3 caractere (---) reprezinta drepturile de acces pentru utilizatorii care
nu sunt ubuntu s, i nici nu fac parte din grupul users; acest utilizatori nu au niciun
drept.

Exista doua moduri de reprezentare a drepturilor:


pentru fiecare entitate exista o cifra n baza 8 care descrie
n forma numerica:
drepturile, cte un bit pentru fiecare drept;
drepturile sunt referite direct prin init, iala lor, pentru fiecare tip de
n forma literala:
entitate.
Astfel, pentru exemplul de mai sus, avem drepturile:

rwxr----- n forma listing;

111100000 n forma binara;

740 n forma octala;

u=rwx,g=r n forma literala.


Mai multe informat, ii despre securitatea fis, ierelor s, i modul de schimbare a drepturilor de

acces se gasesc
n sect, iunea 10.2.4.

4.6
4.6.1

Cautarea
fis, ierelor
Comanda find

Comanda find foloses, te abordarea brute-force pentru gasirea


fis, ierelor cautand
n

arborele de directoare. Comanda pune la dispozit, ie un set extins de criterii de cautare,


s, i altele.
cum ar fi numele fis, ierului, utilizator, grup, tip, permisiuni, dimensiune, data,

Exemple de criterii de cautare


sunt prezentate n continuare specificnd opt, iunea

corespunzatoare
a comenzii find:

-name cautare
dupa numele fis, ierelor

-perm cautare
dupa permisiunile fis, ierelor

-size cautare
dupa dimensiunea fis, ierelor

Comanda urmatoare
cauta toate fis, ierele care au numele stat, n mod recursiv n
directorul /usr:
1
2
3

ubuntu@ubuntu:~$ find /usr -name stat


/usr/src/linux-headers-2.6.24-19-generic/include/config/cpu/freq/stat
/usr/bin/stat

CAPITOLUL 4. SISTEME DE FIS, IERE

91

Urmatoarea
comanda cauta toate fis, ierele care au permisiunile 644:
1
2
3
4
5

ubuntu@ubuntu:~$ find /usr -perm 644


/usr/local/include/glib-2.0/glib.h
/usr/local/include/glib-2.0/gobject/gsourceclosure.h
/usr/local/include/glib-2.0/gobject/gtypeplugin.h
[...]

Pentru a cauta
fis, ierele cu dimensiunea mai mare de 500 KB se poate folosi una dintre

urmatoarele
comenzi:
1

ubuntu@ubuntu:~$ find /usr -size +500000

2
3
4
5
6
7

ubuntu@ubuntu:~$ find /usr -size +500k


/usr/local/lib/libgio-2.0.so.0.1800.4
/usr/local/lib/libgobject-2.0.so.0.1800.4
/usr/local/lib/libglib-2.0.so.0.1800.4
[...]

4.6.2

Comanda locate

Comanda locate foloseste o baza de date locala n care sunt indexate toate fis, ierele.
Comanda locate este mai rapida dect comanda find, dar pune la dispozit, ie un

singur criteriu de cautare:


numele fis, ierului. Un alt dezavantaj este faptul ca baza de
date trebuie reactualizata periodic pentru a cont, ine informat, ii despre fis, ierele noi create
n sistem. Actualizarea se realizeaza cu ajutorul comenzii updatedb.

Comanda ntoarce o lista cu toate fis, ierele ale carui


nume cont, ine s, irul de caractere

precizat ca argument. n exemplul urmator


se cauta toate fis, ierele care cont, in pwd:
1
2
3
4
5
6
7

ubuntu@ubuntu:~$ locate pwd


/bin/pwd
/etc/.pwd.lock
/sbin/unix_chkpwd
/usr/bin/pwdx
/usr/include/pwd.h
[...]

Unele distribut, ii Linux folosesc comanda slocate n locul comenzii locate. Avantajul
comenzii slocate este acela ca nu permite afis, area fis, ierelor din directoarele n care
utilizatorul nu are drepturi de acces.

4.6.3

Comanda whereis

Aceasta comanda poate fi folosita pentru a cauta


ntr-un set restrns de locat, ii din
sistem, de exemplu directoarele cu fis, iere binare, directoarele cu biblioteci sau
directoarele cu pagini de manual. Comanda whereis nu poate fi folosita pentru a

cauta
n directoarele utilizatorului. Comanda va cauta
toate fis, ierele care ncep cu s, irul
de caractere precizat ca argument. De exemplu, pentru a localiza comanda ls folosim

urmatoarea
comanda:
1
2

ubuntu@ubuntu:~$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz

92

INTRODUCERE N SISTEME DE OPERARE

Comanda va afis, a calea catre


executabil dar s, i calea catre
pagina de manual a comenzii
ls.

4.6.4

Comanda which

Folosind comanda which se poate obt, ine calea catre


executabilele care pot fi rulate din
De exemplu, pentru a afla calea catre

linia de comanda.
comanda chmod se va folosi

comanda urmatoare:
1
2

ubuntu@ubuntu:~$ which chmod


/bin/chmod

n mod implicit, comanda which returneaza doar prima potrivire gasita,


iar pentru a
afis, a lista completa a potrivirilor se va folosi opt, iunea -a.

4.6.5

Comanda type

Aceasta comanda poate fi folosita pentru a determina modul de interpretare a unei


comenzi, de exemplu comanda integrata n shell, comanda externa sau alias.
Un exemplu de comanda integrata in shell este:
1
2

ubuntu@ubuntu:~$ type cd
cd is a shell builtin

Pentru o comanda externa rezultatul comenzii type este calea catre


executabil:
1
2

ubuntu@ubuntu:~$ type cat


cat is /bin/cat

n cazul unui alias este afis, ata comanda echivalenta:


1
2

ubuntu@ubuntu:~$ type ls
ls is aliased to ls --color

4.7

Tipuri de sisteme de fis, iere

n timp au aparut
mai multe tipuri de sisteme de fis, iere. n mediul open-source s-au
dezvoltat s, i nca se dezvolta cele mai multe dintre ele. Cteva dintre cele mai
importante sisteme de fis, iere utilizate n prezent sunt ment, ionate n tabelul 4.11,
mpreuna cu sistemele de operare n care se ntlnesc.
Prin nativ se nt, elege ca suportul este oferit prin drivere ce nsot, esc sistemul de operare
(n cazul Linux nsot, esc kernel-ul).

Sistemele de fis, iere se pot clasifica s, i dupa locul unde se gasesc


datele. Tabelul 4.12
prezinta succint aceasta clasificare.

CAPITOLUL 4. SISTEME DE FIS, IERE

93

Tabelul 4.11: Sisteme de operare s, i sisteme de fis, iere suportate


Sistem de fis, iere
Windows
Linux
Mac OS X
FAT32
NTFS
ext2/ext3
ReiserFS
HFS+
ISO9660
UDF

nativ
nativ (dupa WinNT)
driver third-party
aplicat, ie third-party

nativ
nativ

nativ
prin ntfs-3g
nativ
nativ
nativ
nativ
nativ

nativ
prin ntfs-3g

nativ
nativ
nativ

Tabelul 4.12: Clasificarea sistemeleor de fis, iere dupa suportul datelor


Exemplu
Descriere

Tip

sisteme de fis, iere cu


suport fizic
sisteme de fis, iere
virtuale

FAT32, NTFS, Ext3,


ReiserFS, HFS+
procfs, devfs, SSHFS

sisteme de
pentru ret, ea

NFS, SMB

4.7.1

fis, iere

se regasesc
de obicei pe un mediu
de stocare
cont, in fis, iere/date generate de SO
(informat, ii despre sistem) sau de
o alta componenta software (alte
surse)
utilizate pentru accesul la fis, iere
aflate n ret, ea

Integritatea datelor

Un sistem de fis, iere trebuie sa asigure integritatea datelor inclusiv s, i n cazul unei

caderi
(failure). De cele mai multe ori, aceasta funct, ionalitate este implementata prin
jurnalizare.

Jurnalizarea este activitatea prin care se realizeaza un jurnal cu toate modificarile


efectuate asupra unui sistem de fis, iere. Fiecare operat, ie care se executa asupra

sistemului de fis, iere este nti scrisa n jurnal. Operat, ia poate presupune modificari
n mai multe locuri din sistemul de fis, iere.
Driver-ul sistemului de fis, iere executa la un anumit interval de timp operat, iile din jurnal
pentru a actualiza starea discului. O operat, ie se s, terge din jurnal doar dupa ce toate

modificarile
asociate ei au fost executate. n acest fel, n cazul aparit, iei unei caderi

(ntrerupere de curent etc.), se pot executa operat, iile din jurnal care au ramas
neexecutate (operat, iile ncepute s, i care au fost ntrerupte sunt nca prezente n jurnal s, i
vor fi reexecutate n ntregime).

4.7.2

Alegerea unui sistem de fis, iere

n momentul n care trebuie ales un sistem de fis, iere, cele mai utilizate criterii de select, ie
sunt:

disponibilitatea daca se poate folosi sistemul respectiv de fis, iere n sistemul de


operare ales (sau n mai multe sisteme de operare);

94

INTRODUCERE N SISTEME DE OPERARE

gradul de sigurant, a majoritatea sistemelor de fis, iere existente n prezent au


jurnalizare;

restrict, ii speciale date de modul de organizare a datelor n sistemul de fis, iere; de


exemplu, la FAT32 se folosesc doar 32 bit, i pentru a stoca dimensiunea unui fis, ier,
deci dimensiunea maxima a unui fis, ier este 4GB (mai put, in dect o imagine de
DVD, fapt ce l face nepractic pentru o parte din aplicat, iile multimedia);
de performant, a,
realizate spre exemplu n funct, ie de tipul suportului
optimizari
de stocare, n funct, ie de dimensiunea fis, ierelor etc.
Tabelul 4.13 realizeaza o analiza sumara a caracteristicilor sistemelor de fis, iere.

Tip
sistem
de
fis, iere

Tabelul 4.13: Caracteristici ale sistemelor de fis, iere mai cunoscute


Sisteme de Dimensiune
JurnalizareObservat, ii
operare
maxima
fis, ier

FAT32

Windows /
Linux / Mac
OS X

4 GB

nu

NTFS

Windows /
Linux / Mac
OS X

16TiB

da

16GiB
64TiB

ext2-nu;
ext3-da

ReiserFS Linux

8 TiB

da

HFS+

16 EiB

da2

ext2/ext3 Linux
Windows1

ISO9660

UDF

Mac OS X /
Linux
Windows /
Linux / Mac
OS X
Windows /
Linux / Mac
OS X

n
nu
funct, ie
de
implementare
16 EiB
da

cel mai folosit sistem de fis, iere


ntlnit n mod special pe USB
a drepturi de acces;
stick-uri, far
Windows-ul limiteaza la creare
dimensiunea unei partit, ii la 32GB,
dar poate citi partit, ii mai mari
realizate s, i formatate cu aplicat, ii
third-party folosit pentru a asigura
compatibilitatea cu dispozitive sau
sisteme mai vechi
singurul sistem de fis, iere pentru
Windows recomandat de Microsoft;
singurul sistem de fis, iere pentru
Windows cu securitate
sistemul de fis, iere considerat cel
mai stabil datorita unei istorii de
dezvoltare foarte lungi; ext3 e
compatibil cu versiunea anterioara
ext2, aduce jurnalizare fat, a de ext2
cunoscut pentru o viteza mai mare
dect ext3-ul la lucrul cu multe
fis, iere de dimensiune mica

sistem de fis, iere utilizat n principal


pe CD-uri, organizare interna
conceputa pentru ca datele sa fie
citibile us, or
sistem de fis, iere utilizat n principal
pe mediile optice, cu suport att
pentru scriere ct s, i pentru citire

CAPITOLUL 4. SISTEME DE FIS, IERE

4.7.3

95

Adresarea ntr-un sistem de fis, iere

Din punct de vedere fizic, fis, ierele ocupa pe dispozitivul de stocare un spat, iu bine definit.
Utilizatorul nu lucreaza direct cu dispozitivul de stocare s, i nu poate adresa un fis, ier dupa
pozit, ia fizica a acestuia pe dispozitivul de stocare. S-a introdus astfel adresarea fis, ierelor
folosind nume. n funct, ie de tipul sistemului de fis, iere, exista o serie de restrict, ii asupra
acestor nume.
Majoritatea fis, ierelor au s, i ceea ce se numes, te extensie. Aceasta extensie se
, te dupa numele fis, ierelor s, i este utilizata pentru identificarea tipului acestora
regases
(exemplu format nume.ext. n majoritatea cazurilor aceasta extensie are 3 caractere.
Sistemele de operare de tip Windows utilizeaza extensia pentru a asocia un tip de fis, ier
cu o anumita aplicat, ie care poate deschide acel tip de fis, ier. n mediile Unix, extensia
de obicei lipses, te. Identificarea tipului fis, ierelor se realizeaza n general pe baza
cont, inutului fis, ierelor.
n Unix, comanda utilizata pentru a descoperi tipul fis, ierelor este file:
1
2

ubuntu@ubuntu:~$ file /boot/kernel26.img


/boot/kernel26.img: gzip compressed data, from Unix, last modified: Sat
Mar 3 20:28:37 2007, max compression

Numele fis, ierelor poate fi scris cu un anumit set de caractere. n prezent, majoritatea
sistemelor de fis, iere folosesc standardul Unicode (de obicei UTF-8 sau UTF-16) pentru
codificarea caracterelor. n tabelul 4.14 sunt prezentate cteva sisteme de fis, iere s, i
restrict, iile de nume asociate lor.
Dupa cum s-a ment, ionat s, i la nceputul acestui capitol, directoarele se utilizeaza pentru o
mai buna organizare a fis, ierelor. ntr-un sistem de fis, iere modern, fis, ierele s, i directoarele

se regasesc
ntr-o structura ierarhica sub forma unui arbore. Acest arbore are un

director parinte
din care se poate ajunge n orice loc n sistemul de fis, iere.

Calea catre
un fis, ier este formata dintr-o ns, iruire de directoare, separate de caractere
speciale. n mediile Unix separatorul este caracterul / (slash). n mediile Windows,
separatorul este caracterul \ (backslash).

4.8

Lucrul cu sistemele de fis, iere

Aceasta sect, iune trateaza act, iunile cele mai cunoscute la nivelul unui sistem de fis, iere.
Act, iunile cele mai frecvente sunt:

crearea unui sistem de fis, iere;


montarea unui sistem de fis, iere;
repararea unui sistem de fis, iere.
Printre act, iunile rare dar care pot prezenta interes trebuie ment, ionate:

crearea unei imagini pentru un sistem de fis, iere;


s, tergerea unui sistem de fis, iere (din diferite motive).

96

INTRODUCERE N SISTEME DE OPERARE


Tabelul 4.14: Restrict, ii asupra numelor fis, ierelor
Case
Lungime
Lungime
Observat, ii
sensitive nume
cale

Sistem
de
fis, iere
FAT32

nu

8.3 sau 255

nedefinit

caractere cu
LFN1

NTFS

da2

254
caractere
+.

32767 octet, i

ext3

da

255 octet, i

nedefinit

4,032
octet, i / 255
caractere
255
caractere
UTF-16
8.3
sau
Joliet:
128
octet, i

nedefinit

ReiserFS da

HFS+

nu3

ISO9660

nu

UDF

da

255 octet, i

nedefinit

adncime
maxima

a caii:
8
niveluri
1023 octet, i

initial limitat la 8 caractere


numele fis, ierului s, i 3 caractere
extensia; FAT32 a capatat
suport pentru nume lungi
(LFN) pentru un fis, ier; FAT32
ret, ine att numele lung ct s, i
versiunea scurta n format 8.3
orice caracter Unicode poate
fi folosit, mai put, in caracterele:
NULL, ", /, \, *, ?, <, >, |,
: (utilizate n general pentru
adresarea fis, ierelor)
orice byte mai put, in NULL
poate fi folosit n numele
fis, ierului
orice octet mai put, in NULL
poate fi folosit n numele
fis, ierului
orice caracter Unicode este
permis
exista mai multe niveluri pentru
standard, fiecare cu restrict, iile
lui
orice octet mai putin NULL
poate fi folosit n numele
fis, ierului

Pe lnga aceste act, iuni, folosind programe speciale, se pot efectua s, i alte operat, ii asupra
unui sistem de fis, iere, precum:

redimensionarea unei partit, ii duce implicit la o redimensionare a sistemului de


fis, iere (n cazul n care acest lucru nu se ntmpla, trebuie reformatata partit, ia);

convertirea unui sistem de fis, iere dintr-un tip n altul;


mutarea unei partit, ii de obicei nu are efecte asupra sistemului de fis, iere aflat pe
aceasta.

4.8.1

Crearea unui sistem de fis, iere

Dupa cum s-a ment, ionat anterior, majoritatea sistemelor de fis, iere au un suport fizic

asociat unde se regasesc


efectiv datele. Suportul unui sistem de fis, iere se numes, te

CAPITOLUL 4. SISTEME DE FIS, IERE

97

partit, ie. O partit, ie poate avea un singur sistem de fis, iere. Partit, ionarea a fost descrisa n
sect, iunea 2.2.2.
Sistemul de fis, iere este plasat pe o partit, ie prin formatare. Formatarea este procesul
prin care pe partit, ie sunt scrise structuri de date specifice sistemului de fis, iere. Aceste
structuri sunt utilizate de driver-ul asociat sistemului de fis, iere pentru a identifica s, i utiliza
datelor scrise pe partit, ie.
ntr-un sistem Linux, formatarea se realizeaza prin intermediul utilitarului mkfs cu
sintaxa:
1

root@ubuntu:~# mkfs -t \textless{}tip_sistem_de_fisiere> \textless{}


dispozitiv>

Exemplu de utilizare:
1

root@ubuntu:~# mkfs -t ext3 /dev/sda2

Comanda prezentata anterior formateaza partit, ia a 2-a de pe primul disc utiliznd


sistemul de fis, iere ext3. Pentru fiecare tip de sistem de fis, iere exista un program pentru
formatare. Aceste programe au numele de forma mkfs.<fstype> s, i pot fi apelate
direct pentru a formata o partit, ie. Comanda echivalenta exemplului anterior este

urmatoarea:
1

root@ubuntu:~# mkfs.ext3 /dev/sda2

este verificarea sectoarelor din cadrul partit, iei. Daca


O operat, ie suplimentara formatarii

un sector este defect, se va marca s, i nu va fi folosit pentru stocarea datelor. Urmatoarea


comanda va determina verificarea sectoarelor s, i formatarea partit, iei /dev/sda2:
1

root@ubuntu:~# mkfs.ext3 -c /dev/sda2

Pentru a crea un sistem de fis, iere MS-DOS pe o anumita partit, ie se poate folosi comanda
mkdosfs care este un front-end pentru comenzile mkfs.vfat s, i mkfs.msdos. Cu
optiunea -F se poate specifica tipul tabelei FAT care poate sa fie pe 12, 16 sau 32 bit, i.

Urmatoarea
comanda va crea un sistem de fis, iere FAT 32 pe partit, ia specificata:
1

root@ubuntu:~# mkdosfs -F 32 /dev/sda2

4.8.2

Montarea unui sistem de fis, iere

Sistemele de operare ofera acces uniform la datele din toate tipurile de sisteme de fis, iere
prin intermediul ierarhiei de fis, iere.
Pentru ca un sistem de fis, iere sa fie vizibil sistemului de operare el trebuie nti sa fie
montat (mount) ntr-un director, numit director de montare (mount point). Operat, ia
se numes, te montarea unui sistem de fis, iere.
Aceasta operat, ie este executata de cele mai multe ori n mod automat de sistemul de
operare:

n Windows, sistemele de fis, iere primesc automat litere diferite; pot fi ulterior
modificate,
cu
anumite
restrict, ii,
folosind
Control Panel >
Administrative Tools > Computer Management > Storage >
Disk Management;

98

INTRODUCERE N SISTEME DE OPERARE

n Linux, sistemele de fis, iere sunt montate att n locuri bine definite (definite de
utilizator

la

instalare)

ct

s, i

locuri

special

create

(de

exemplu

/media/<nume>/) pentru a gazdui


sistemele de fis, iere de pe medii externe,
precum USB stick-uri, CD/DVD-ROM-uri etc.
n Mac OS X, sistemele de fis, iere sunt montate automat n /Volumes/<nume>.

Montarea manuala
Pentru a monta un sistem de fis, iere, ntr-un mediu Linux se utilizeaza comanda mount,
cu sintaxa:
1

root@ubuntu:~# mount -t <tip_sistem_fisiere> [-o <optiuni>] <dispozitiv>


<director_montare>

n exemplul de mai jos se foloses, te mount pentru a monta partit, ia a 2-a de pe primul
disc, cu sistemul de fis, iere ext3, n directorul /mnt/data (directorul /mnt/data
trebuie sa existe anterior execut, iei comenzii).
1

root@ubuntu:~# mount -t ext3 /dev/sda2 /mnt/data

Montarea unui sistem de fis, iere doar cu drepturi de citire (read-only ) se poate realiza
prin opt, iunea -r:
1

root@ubuntu:~# mount -r -t ext3 /dev/sda2 /mnt/data

Alte exemple de utilizare a opt, iunilor de montare se gasesc


n sect, iunea 4.10.

Montarea automata
ntr-un sistem Linux, fis, ierul /etc/fstab descrie sistemele de fis, iere care vor fi
montate automat la pornirea sistemului de operare. Fis, ierul cont, ine cte o linie pentru
fiecare sistem de fis, iere. Comentariile ncep cu #.
Sintaxa unei linii este:
1

<dispozitiv> <director montare> <tip sistem fisiere> <optiuni> <dump> <


pas>

Cmpurile au urmatoarele
semnificat, ii:
, te
<dispozitiv> fis, ier care indica locul (de obicei un dispozitiv) unde se gases
sistemul de fis, iere;

<director montare> director existent n structura de directoare unde se va


putea accesa cont, inutul sistemului de fis, iere montat;

<tip sistem fis, iere> tipul sistemului de fis, iere;


<opt, iuni> opt, iuni pentru montarea sistemului de fis, iere - difera de la un sistem
de fis, iere la altul;

<dump> indica daca sa se realizeze automat backup al partit, iei utiliznd


preferndu-se alte metode
programul dump; opt, iunea este n prezent rar folosita,
de backup; acest parametru are n mod obis, nuit are valoarea 0;

CAPITOLUL 4. SISTEME DE FIS, IERE

99

<pas> indica ordinea n care fsck va verifica sistemele de fis, iere (0 = fsck nu
va verifica sistemul de fis, iere).
Un exemplu de linie din /etc/fstab este:
1

/dev/sda1

reiserfs defaults 0 0

Linia descrie montarea primei partit, ii de pe primul disc n /, utiliznd sistemul de fis, iere
a backup s, i far
a verificari.

ReiserFS cu opt, iuni implicite, far


n /etc/fstab, comanda
Dupa efectuarea unei modificari
1

root@ubuntu:~# mount -a

va monta toate partit, iile ment, ionate.


a niciun argument, mount afis, eaza lista sistemelor de fis, iere montate la un moment
Far
dat.
1
2
3
4
5
6
7
8

ubuntu@ubuntu:~$ mount
/dev/sda1 on / type reiserfs (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
usbfs on /proc/bus/usb type usbfs (rw)
none on /dev/pts type devpts (rw)
none on /dev/shm type tmpfs (rw)
tmpfs on /tmp type tmpfs (rw)

Se observa ca n lista nu apar doar sistemele de fis, iere montate manual sau cele
montate automat (descrise n /etc/fstab). Exista s, i sisteme de fis, iere care sunt
create s, i montate automat de sistem n ierarhia de fis, iere pentru a oferi informat, ii
despre starea sistemului (precum /proc vezi sect, iunea 5.1.3).
de asemenea s, i n
Lista sistemelor de fis, iere montate la un moment dat se poate regasi
fis, ierul /etc/mtab.
unui sistem de fis, iere se numes, te demontare. Pentru a realiza
Operat, ia inversa montarii
demontarea se utilizeaza comanda umount, cu doua sintaxe posibile:
1

root@ubuntu:~# umount <dispozitiv>

2
3

root@ubuntu:~# umount <director_de_montare>

Folosind mount s, i grep se afla tipul partit, iei /dev/sda2:


1
2

root@ubuntu:~# mount | grep /dev/sda2


/dev/sda2 on /home type reiserfs (rw)

Pentru a demonta acest sistem de fis, iere se poate utiliza oricare din urmatoarele
doua
comenzi:
1

root@ubuntu:~# umount /dev/sda2

2
3

root@ubuntu:~# umount /home

100

4.8.3

INTRODUCERE N SISTEME DE OPERARE

Repararea unui sistem de fis, iere

Dupa cum s-a ment, ionat s, i la nceputul acestui capitol, sistemele de fis, iere moderne au
suport pentru jurnalizare. Acest suport este util n mod deosebit atunci cnd se produce

o cadere
a sistemului, precum atunci cnd se ntrerupe alimentarea cu energie electrica.
, ii sistemelor de
La repornire, sistemul de operare efectueaza o verificare a integritat
fis, iere. La aceasta verificare, se executa comanda fsck pentru fiecare sistem de
fis, iere. Aceasta comanda este particularizata pentru fiecare sistem de fis, iere cu numele
fsck.<tip_sistem_de_fisiere>, precum comanda mkfs.

Pentru a verifica un sistem de fis, iere comanda fsck se apeleaza cu urmatoarea


sintaxa:
1

root@ubuntu:~# fsck -t <tip_sistem_fisiere> <dispozitiv>

Daca se dores, te verificarea celei de-a doua partit, ii de pe primul disc, cunoscndu-se ca

ar trebui sa se gaseasc
a un sistem de fis, iere ext3 pe aceasta, se utilizeaza comanda:
1

root@ubuntu:~# fsck -t ext3 /dev/sda2

n funct, ie de opt, iunile care se folosesc la execut, ia comenzii, fsck poate repara erorile
pe care le ntlnes, te.

4.8.4

Crearea unei imagini pentru un sistem de fis, iere

Imaginea unui sistem de fis, iere reprezinta copia fidela ntr-un fis, ier a fiecarui
octet care
descrie sistemul de fis, iere (inclusiv datele din acesta). Aceasta imagine poate fi ulterior
copiata pe o alta partit, ie sau arhivata pentru o eventuala recuperare a datelor daca
partit, ia sursa este distrusa accidental. O utilizare foarte frecventa a imaginilor se
ntlnes, te n copierea cont, inutul CD/DVD-urilor pe alte medii de stocare.
Pentru a realiza o imagine a unui sistem de fis, iere se utilizeaza comanda dd (vezi
sect, iunea 7.6.5. n exemplul de mai jos se copiaza cont, inutul primei partit, ii (sistemul de
fis, iere) de pe discul al 2-lea n fis, ierul /mnt/data/partitie1.img.
1

root@ubuntu:~# dd if=/dev/sdb1 of=/mnt/data/partitie1.img

Aceasta comanda este independenta de sistemul de fis, iere caruia


i se face imaginea.

Lucreaza direct la nivelul octet, ilor care alcatuiesc


sistemul de fis, iere s, i pastreaz
a
ntreaga structura interna a acestuia.
comenzii pe sisteme de fis, iere foarte mari, se va observa ca timpul de
n cazul utilizarii
execut, ie este destul de mare. Motivul pentru care se ntmpla acest lucru este faptul
n mod implicit, comanda dd lucreaza cu blocuri de date de 512 octet, i, ceea ce
ca,
nseamna ca pentru fiecare 512 octet, i comanda executa o citire s, i o scriere. n prezent,
buffer-ele discurilor au valori dimensiuni mult mai mari s, i pot lucra cu blocuri mai mari de
512 octet, i.
Pentru a modifica dimensiunea blocului citit/scris de dd se utilizeaza parametrul
bs=<dimensiune>, unde <dimensiune> poate sa fie xKB, xMB etc.
Spre exemplu:
1

root@ubuntu:~# dd bs=2MB if=/dev/sdb1 of=/mnt/data/partitie1.img

CAPITOLUL 4. SISTEME DE FIS, IERE

101

va executa aceeas, i operat, ie dar citind blocuri de 2MB.


unor blocuri de date mai mari. n anumite condit, ii, nu
Exista s, i un dezavantaj al utilizarii
se va putea face copierea unui bloc ntreg, din diferite motive precum un defect
hardware al suprafet, ei magnetice, sau ultimul bloc nu are dimensiunea de 2MB
(deoarece dimensiunea totala nu este multiplu de 2MB). De cele mai multe ori se
dores, te recuperarea ct mai multor date de pe disc, de preferat toate. n aceste condit, ii
trebuie determinat daca o viteza mai mare (dimensiune mai mare a blocului) este o
decizie acceptabila s, tiind ca se pot pierde date mai multe la citire.
Pentru recuperarea datelor de pe discuri cu defecte hardware, se poate folosi programul
atoare

ddrescue1 . ddrescue este o aplicat, ie aseman


dd dar care este specializata
n recuperarea ct mai multor date de pe discuri.

4.8.5

Stergerea

unui sistem de fis, iere

Exista doua tipuri de s, tergere a unui sistem de fis, iere:

s, tergerea logica
s, tergerea fizica

Stergerea

logica se obt, ine prin s, tergerea partit, iei corespunzatoare


sistemului de fis, iere
din tabela de partit, ii (descris n sect, iunea 2.2.2). Din moment ce nu mai exista partit, ie
care sa ncapsuleze sistemul de fis, iere, acesta se poate considera s, ters. Practic, datele
lui nca mai rezida pe disc, pna la o suprascriere cu alte date.
Faptul ca datele nu sunt s, terse fizic de pe disc a pus s, i nca pune probleme oamenilor

care doresc ca datele odata ce sunt s, terse sa ramn


a s, terse pentru eternitate. Din acest
motiv, pentru a elimina orice posibilitate de a recupera un sistem de fis, iere sau datele
Stergerea
dintr-un sistem de fis, iere, se utilizeaza s, tergerea fizica.

fizica este realizata


de fapt prin suprascrierea blocurilor de pe suportul fizic (unde era nainte sistemul de
fis, iere) cu date aleatoare sau cu zerouri.
Pentru suprascriere se utilizeaza cel mai rapid tot programul dd prezentat anterior dar,
ea este folosita ca destinat, ie pentru un set de
n loc ca partit, ia sa fie folosita ca sursa,
date aleatoare (sau zerouri).
Pentru a suprascrie cu zerouri o partit, ie, se poate folosi comanda:
1

root@ubuntu:~# dd if=/dev/zero of=/dev/sda1

Pentru a suprascrie o partit, ie cu date aleatoare, se foloses, te comanda:


1

root@ubuntu:~# dd if=/dev/urandom of=/dev/sda1

4.8.6

discului
Monitorizarea utilizarii

O problema care nu poate fi neglijata este umplerea hardisk-ului. Pentru a evita acest
lucru, se folosesc comenzi care sa afis, eze ct spat, iu este consumat, de exemplu
comenzile df s, i du.
1

http://www.gnu.org/software/ddrescue/ddrescue.html

102

INTRODUCERE N SISTEME DE OPERARE

spat, iul utilizat, spat, iul liber s, i


Comanda df ofera informat, ii despre dimensiunea totala,

procentul de folosire al fiecarei partit, ii.


1
2
3
4

ubuntu@ubuntu:~$ df
Filesystem
1K-blocks
Used Available Use\% Mounted on
/dev/sda1
5859784 4449900
1409884 76\% /
/dev/sda2
15361340 10174596
5186744 67\% /home

, area partit, iei.


Atunci cnd procentul de folosire depas, es, te 80% se recomanda curat
Se poate folosi opt, iunea -a pentru a include s, i pseudo sistemele de fis, iere care sunt
afis, ate cu dimensiunea 0, de exemplu /proc, /sys:
1
2
3
4
5
6

ubuntu@ubuntu:~$ df -a
Filesystem
1K-blocks
/dev/sda1
5859784
/dev/sda2
15361340
/proc
0
/sys
0

Used Available Use\% Mounted on


4449900
1409884 76\% /
10174596
5186744 67\% /home
0
0
- /proc
0
0
- /sys

Comanda du cauta n mod recursiv n directoarele specificate pentru a afis, a ct spat, iu


consuma fiecare director. n exemplul de mai jos se afis, eaza spat, iul ocupat de directorul
/etc/network:
1
2
3
4
5
6

ubuntu@ubuntu:~$ du /etc/network
8
/etc/network/if-down.d
12
/etc/network/if-post-down.d
12
/etc/network/if-pre-up.d
24
/etc/network/if-up.d
64
/etc/network

Pentru afis, area dimensiunii n format mai us, or de citit se poate folosi opt, iunea -h:
1
2
3
4
5
6

ubuntu@ubuntu:~$ du -h /etc/network
8.0K
/etc/network/if-down.d
12K
/etc/network/if-post-down.d
12K
/etc/network/if-pre-up.d
24K
/etc/network/if-up.d
64K
/etc/network

Pentru a opri cautarea


recursiva s, i a afis, a doar spat, iul ocupat de directorul transmis ca
argument se foloses, te opt, iunea -s:
1
2

ubuntu@ubuntu:~$ du -h -s /etc/network
64K
/etc/network

4.9
4.9.1

Tendint, e n sistemele de fis, iere


Sisteme de fis, iere n userspace

Sistemele de fis, iere pot fi citite/scrise de sistemele de operare doar daca exista driver-e
care sa le implementeze. Implementarea unui driver pentru un sistem de fis, iere nu
Acesta este s, i principalul motiv pentru care exista destul de put, ine
este tocmai us, oara.
, i acceptabil. Majoritatea
sisteme de fis, iere care sa implementeze un set de funct, ionalitat
sistemelor de fis, iere prezente n sistemele de operare au mult, i ani de dezvoltare.

CAPITOLUL 4. SISTEME DE FIS, IERE

103

Dupa cum s-a prezentat anterior, exista situat, ii n care s-a putut foarte us, or abstractiza
accesul la o serie de date prin intermediul fis, ierelor (precum informat, ii despre sistem,
n /proc). Practic, aproape orice informat, ie poate fi prezentata sub forma de fis, ier.

Singura problemaa care a mpiedicat mult timp aceasta trecere catre


reprezentarea de
date folosind fis, iere a fost dificultatea scrierii unui driver adecvat.
n ultima perioada a luat amploare utilizarea de drivere pentru diferite sisteme de fis, iere
n user-space, spre deosebire de driverele clasice care funct, ioneaza n kernel-space.
Driverele din userspace se bazeaza pe faptul ca exista un driver n kernel care se ocupa
de translatarea apelurilor la date ntre kernel s, i sistemul de fis, iere din userspace. Acest
suport pentru sisteme de fis, iere n userspace este prezent n kernel-ul Linux cu numele
FUSE1 (Filesystem n USErspace) iar n Mac OS X cu numele MacFUSE2 .
Tabelul 4.15 prezinta avantajele s, i dezavantajele sistemelor de fis, iere n user-space:

Tabelul 4.15: Avantaje/dezavantaje sisteme de fis, iere n user-space


Avantaje
Dezavantaje
suport pentru scrierea de driver-e n
numeroase limbaje de programare;
dezvoltare mult mai rapida datorita att
limbajelor de nivel nalt ct s, i datorita
, ii de testare mult mai rapida
posibilitat
(+ debugging); nu blocheaza sistemul

n cazul unei proaste funct, ionari;

compatibilitate a implementarilor
ntre
Linux s, i Mac OS X

mai lente dect sistemele de fis, iere


normale; au o flexibilitate mai mica n
ceea ce prives, te nivelul de acces la
hardware, comparativ cu un driver de
kernel (de obicei nu este o limitare
dat fiind scopul
foarte importanta,
sistemelor de fis, iere de acest tip)

a:

Printre cele mai folosite sisteme de fis, iere n userspace se numar

NTFS-3G sistem de fis, iere care ofera suport read/write pentru NTFS;
sshfs sistem de fis, iere care ofera acces la fis, ierele de pe alta mas, ina prin
intermediul SSH ca s, i cum ar fi parte din sistemul de fis, iere local;

EncFS Encrypted Filesystem sistem de fis, iere care cripteaza automat fis, ierele
din directorul pe care l foloses, te ca suport;

AVFS Anti-Virus Filesystem sistem de fis, iere care realizeaza scanarea pentru
virus, i n momentul n care se realizeaza un acces la fis, iere; este implementat ca
sistem de fis, iere intermediar pentru accesul protejat la alt sistem de fis, iere.
Fiecare dintre aceste sisteme de fis, iere se monteaza ntr-un mod diferit, datorita modului
n care au fost gndite sa lucreze cu datele: unele au nevoie de un nume de utilizator s, i
altele au nevoie de calea catre

o parola,
un alt sistem de fis, iere etc. Mai multe informat, ii
pe paginile web ale fiecarui

se pot gasi
proiect.
1
2

http://fuse.sourceforge.net/
http://code.google.com/p/macfuse/

104

4.9.2

INTRODUCERE N SISTEME DE OPERARE

ZFS, ext4, btrfs

ZFS (Zettabyte File System) este un sistem de fis, iere pe 128 de bit, i s, i logical volume
manager care prezinta multe facilitat, i avansate cum ar fi clone copy-on-write,
, ii datelor, backup s, i
snapshot-uri, dynamic stripping, verificare continua a integritat

restaurare rapida, compresie incorporata, scalabilitate. ZFS a fost dezvoltat de Sun


Microsystems ca software open-source s, i este sub licent, a CCDL.
at
, ire a lui ext3. ext4 aduce
ext4 este un sistem de fis, iere jurnalizat dezvoltat ca mbunat
nou suport pentru sisteme de fis, iere foarte mari (pna la 1 exabyte = 1024 petabytes),
extents (posibilitatea de a mapa blocuri mari contigue pentru un singur fis, ier),
compatibilitate napoi/nainte. Compatibilitatea napoi este data de faptul ca un sistem
ext3 poate fi montat ca un sistem ext4. Compatibilitatea nainte este posibila deoarece
un sistem ext4 poate fi montat ca un sistem ext3. ext4 a fost inclus n kernel-ul Linux
, i el este marcat ca
ncepnd cu versiunea 2.6.19 dar la momentul scrierii acestei cart
fiind n dezvoltare.
btrfs (Better File System) este un sistem de fis, iere de tipul copy-on-write dezvoltat
pentru Linux. La fel ca s, i ext4, btrfs contine suport pentru extents. O caracteristica
unor operat, ii critice n
principala a acestui sistem de fis, iere este posibilitatea efectuarii

timpul funct, ionarii,


de exemplu defragmentarea, modificarea dimensiunii partit, iei s, i
verificarea consistent, ei. btrfs prezinta multe alte caracteristici printre care efectuarea de

snapshot-uri s, i de backup-uri incrementale. Init, ial dezvoltat de catre


Oracle, btrfs este
licent, iat GPL.

4.10

Studii de caz

4.10.1

Comenzi pentru lucrul cu fis, iere n Windows

Tabelul 4.16 prezinta echivalent, a comenzilor de baza Windows s, i Linux pentru


prelucrarea fis, ierelor.

4.10.2

Utilizarea n sigurant, a a comenzilor pe fis, iere

Exista o serie de opt, iuni pentru comenzile cp, mv s, i rm care fac utilizarea acestora sa
fie mult mai sigura din punct de vedere al pierderii datelor n mod accidental.
Fiecare comanda are printre opt, iuni -i, o opt, iune care determina comanda sa ceara o
confirmare pentru fiecare fis, ier s, ters/suprascris. Pentru a anula efectul acestui
parametru poate fi folosit parametrul -f.
Fiecare comanda recunoas, te opt, iunea -v, opt, iune care determina afis, area fis, ierelor
procesate la momentul respectiv. Aceasta opt, iune poate reprezenta o metoda buna
pentru a vizualiza ce anume se ntmpla n spatele comenzii, mai ales daca se executa
comanda pentru un set mare de fis, iere.
Aceste doua opt, iuni (-iv) pot fi fort, ate odata cu toate execut, iile realizate de utilizator
pentru aceste comenzi daca se realizeaza alias-uri. Alias-urile sunt descrise de obicei

CAPITOLUL 4. SISTEME DE FIS, IERE

105

Tabelul 4.16: Comenzi pentru lucrul cu fis, iere n Windows


Comanda Linux Comanda
Descriere
Windows

comanda
--help
cd
pwd
clear
cp
rm
ls
vim
exit
diff

comanda /?

afis, eaza informat, ii despre comanda

cd
chdir
cls
copy
del
dir
edit
exit
fc

find
mkfs
(mke2fs)
free

find
format

schimba directorul curent


afis, eaza directorul curent
s, terge ecranul consolei curente
copiaza un fis, ier
s, terge un fis, ier
afis, eaza cont, inutul directorului curent
editeaza un fis, ier text
nchide shell-ul curent
compara doua fis, iere s, i afis, eaza diferent, ele
ntre ele
cauta fis, iere
formateaza un disc

mkdir
mv
mv
date

mkdir
move
ren
time

mem

afis, eaza informat, ii despre memoria libera s, i


cea ocupata
creeaza un nou director
muta un fis, ier
redenumes, te un fis, ier
afis, eaza ora sistemului

ntr-un fis, ier care este ncarcat


la pornirea shell-ului (precum ~/.bashrc) (vezi
sect, iunea 12.10):
1
2
3

alias cp="cp -iv"


alias mv="mv -iv"
alias rm="rm -iv"

Astfel, la execut, ia oricarei


dintre aceste comenzi, automat se vor lua n considerare s, i
aceste opt, iuni.

4.10.3

Montarea unui sistem de fis, iere FAT32 astfel nct tot, i


utilizatorii sa aiba drept de scriere pe el

Pentru a realiza acest lucru se utilizeaza opt, iunile de montare a sistemelor de fis, ierelor.
, ti (mask ). Masca este o
Pentru a fort, a la montare drepturile fis, ierelor se utilizeaza mas
ns, iruire de bit, i care daca sunt 1 semnifica un drept care lipses, te.
, ti:
Exista mai multe tipuri de mas

umask masca aplicata tuturor fis, ierelor noi (vezi sect, iunea 10.2.4);
fmask masca aplicata tuturor fis, ierelor;
dmask masca aplicata tuturor directoarelor;

106

INTRODUCERE N SISTEME DE OPERARE

, ti se definesc opt, iuni pentru montarea unei partit, ii FAT32 n felul


Folosind aceste mas

urmator:
1

root@ubuntu:~# mount -t vfat -o dmask=000,fmask=111 /dev/sda2 /mnt/media

Parametrul -o dmask=000,fmask=111 specifica faptul ca pentru tot, i utilizatorii


fis, ierele normale trebuie sa apara cu drepturi read/write iar directoarele cu toate

drepturile. Trebuie ment, ionat ca pe o partit, ie FAT32 nu ar trebui sa se gaseasc


a
aplicat, ii/script-uri ce pot fi executate din Linux. Pentru a preveni aceasta situat, ie, tuturor

fis, ierelor le este ndepartat


dreptul de execut, ie, prin masca 111.
Comanda de mai sus se poate transforma foarte us, or ntr-o linie n /etc/fstab:
1

/dev/sda2

/mnt/media

vfat

defaults,dmask=000,fmask=111

S-a pastrat
opt, iunea defaults pentru ca aceasta activeaza alte opt, iuni utile la

montarea automata.

4.10.4

Montarea unui sistem de fis, iere FAT32 astfel nct utilizatorii


dintr-un anumit grup sa aiba drept de scriere pe acesta

Exista situat, ii cnd se dores, te ca doar un grup de utilizatori sa aiba acces la o partit, ie.
n aceste condit, ii, posesorul fis, ierelor trebuie modificat n root iar grupul n grupul
dorit. Grupul trebuie sa aiba toate drepturile. n primul rnd trebuie determinat
identificatorul grupului (gid, group id). care se dores, te a avea drepturi asupra

fis, ierelor. Cunoscndu-se numele grupului, comanda urmatoare


va afis, a identificatorul
grupului.
1

ubuntu@ubuntu:~$ cat /etc/group | grep numegrupnumegrup:x:100:

Comanda filtreaza liniile din /etc/group s, i afis, eaza pe ecran doar liniile care ncep

, te ntre caracterele : este identificatorul


cu numele grupului dorit. Numarul
ce se gases
grupului.
Comanda care monteaza un sistem de fis, iere FAT32 cu restrict, iile ment, ionate mai sus

este urmatoarea:
1

root@ubuntu:~# mount -t vfat -o dmask=007,fmask=117,gid=100,uid=0 /dev/


sda2 /mnt/media

spre deosebire de cazul anterior, au mai fost introduse doua opt, iuni:
Se observa ca,

gid=100 identificatorul grupului care va avea drepturi asupra fis, ierelor;


uid=0 identificatorul utilizatorului; utilizatorul root are uid=0.
, tile au fost schimbate pentru a nu permite niciun fel de drept altor utilizatori n afara
Mas
grupului s, i utilizatorului root (au 7 pe ultima pozit, ie).

4.10.5

Sistem de fis, iere ntr-un fis, ier

Dupa cum s-a prezentat s, i n subcapitolele anterioare, n Linux se poate accesa


(aproape) tot printr-un fis, ier. n particular, fiecare dispozitiv are asociat un fis, ier. Spre

CAPITOLUL 4. SISTEME DE FIS, IERE

107

exemplu, prima partit, ie de pe primul HDD are asociat (de obicei) fis, ierul /dev/sda1.
n mod similar cu utilizarea fis, ierului /dev/sda1, orice alt fis, ier poate fi folosit ca
suport pentru un sistem de fis, iere. Doua dintre motivele cele mai folosite pentru a
realiza acest lucru sunt:
a a repartit, iona discul;
experimentarea unor noi sisteme de fis, iere, far

ncapsularea datelor ntr-un sistem de fis, iere (eventual criptat).


n tabelul 4.17 este prezentat modul n care se poate realiza un sistem de fis, iere stocat
ntr-un fis, ier. Sunt prezentate comenzile att pentru sistemul de fis, iere aflat ntr-o partit, ie
ct s, i pentru sistemul de fis, iere aflat ntr-un fis, ier.
Tabelul 4.17: Sisteme de fis, iere peste partit, ii sau peste fis, iere
Sistem de fis, iere
ntr-o partitie
ntr-un fis, ier

Act, iune

se partit, ioneaza discul; se


obt, ine partit, ia /dev/sda1

alocare
spat, iu

dd if=/dev/zero of=~/date
bs=1MB count=20 se creaza astfel
un fis, ier cu 20 blocuri, fiecare 1MB,
se obt, ine echivalentul unei partit, ii de
20MB

formatare

/sbin/mkfs -t vfat
/dev/sda1

/sbin/mkfs -t vfat ~/date

verificare
montare

file ~/date
mount -t vfat -o loop
/date dir/
umount dir/

mount -t vfat
/dev/sda1 dir/
demontare umount dir/

, te pe un
Opt, iunea -o loop specifica sistemului de operare ca partit, ia nu se gases
dispozitiv fizic ci ntr-un fis, ier.

4.10.6

ntfs-3g

nfts-3g1 este proiectul care ofera suport read-write pentru partit, ii NTFS sub Linux. Pentru
instalarea ntfs-3g se foloses, te comanda:
1

root@ubuntu:~# apt-get install ntfs-3g

Pentru a identifica partit, ia NTFS se poate utiliza comanda:


1

root@ubuntu:~# fdisk -l | grep NTFS

care afis, eaza doar liniile care cont, in NTFS din ies, irea comenzii fdisk -l,
Pentru a monta sistemul de fis, iere n mod automat, n /etc/fstab se adauga o linie
de forma:
1

<dispozitiv> <director montare> ntfs-3g defaults,locale=en_US.utf8 0 0

http://www.ntfs-3g.org/

108

INTRODUCERE N SISTEME DE OPERARE

Cuvinte cheie

sistem de fis, iere

arhivare

montare

dezarhivare

demontare

backup

fsck
fis, ier
director
jurnalizare

descriptor de fis, ier


redirectare
drept de acces

cale relativa
cale absoluta,

ls, pwd, cd

ierarhie

cp, mv, rm

copiere, mutare, s, tergere, redenumire mkdir, rmdir, touch

ntrebari
1. Sistemele de fis, iere din prezent ofera un grad mai mare de sigurant, a mpotriva

caderilor
de tensiune prin implementarea:

q drepturilor de acces la nivel de utilizator s, i grup


q drepturilor de acces prin liste de acces

q suportului pentru legaturi


hard

q suportului pentru jurnalizare


2. Care este fis, ierul folosit pentru montarea automata a unui sistem de fis, iere n
Linux?

q /etc/resolv.conf
q /etc/fsck
q /mnt/hda5
q /etc/fstab
3. Un fis, ier are drepturile 653. Utilizatorul ce det, ine fis, ierul ruleaza comanda:
1

chmod a-x,u+w,g-r,o+r

Care sunt noile drepturi ale fis, ierului?

q 606
q 762
q 534
q 451

CAPITOLUL 4. SISTEME DE FIS, IERE

109

4. Care din urmatoarele


comenzi NU poate fi aplicata asupra unui director?

q file
q touch
q rm -r
q cat

5. Care din urmatoarele


NU este o intrare valida n sistemul de fis, iere?

q fis, ier executabil

q director al carui
nume ncepe cu .
a simbolica catre

q legatur
/bin

q interfat, a de ret, ea de looback

6. Care din urmatoarele


sisteme de fis, iere este un sistem nativ Linux?

q HPFS
q FAT32
q EXT3
q UFS
7. Un utilizator configureaza un fis, ier cu drepturile 755. Ce utilizator are dreptul de
execut, ie pe fis, ier?

q root
q utilizatorul care det, ine fis, ierul
q niciun utilizator
q tot, i utilizatorii
8. Ce reprezinta litera v din comanda de mai jos?
1

ubuntu@ubuntu:~$ tar czvf a.tgz dir1

q crearea unei arhive


q dezarhivarea unei arhive
q crearea unei arhive GZIP
q afis, area de mesaje despre arhivare
9. Care comanda este folosita pentru montarea unui sistem de fis, iere n Linux?

q mount
q umount
q mountfs
q fsck

110

INTRODUCERE N SISTEME DE OPERARE

prima act, iune absolut


10. Pentru a putea utiliza un sistem de fis, iere pe o partit, ie data,

necesara care trebuie executata este:

q s, tergerea sistemului de fis, iere existent anterior


q montarea sistemului de fis, iere de pe partit, ia respectiva
q formatarea partit, iei cu sistemul de fis, iere dorit
q schimbarea drepturilor de acces pentru directorul n care este montata partit, ia

Capitolul 5
Procese
Its a well-known fact that computing devices such as the
abacus were invented thousands of years ago. But its
not well known that the first use of a common computer
protocol occurred in the Old Testament. This, of course,
was when Moses aborted the Egyptians process with a
control-sea
Tom Galloway

Ce se nvat, a din acest capitol?

Definit, ia unui proces; diferent, a ntre un program s, i un proces


Not, iunea de multitasking
Ierarhia de procese ntr-un sistem de operare
Comenzi de vizualizare a proceselor (ps, pstree, top)
Daemoni; rularea proceselor n background/foreground
Not, iunea de semnal; administrarea proceselor prin intermediul semnalelor
Comunicarea ntre procese; operatorul | (pipe) de comunicare ntre procese
Administrarea proceselor/serviciilor n Windows

5.1

Not, iuni introductive

n lumea sistemelor de operare Unix (s, i nu numai) exista doua concepte fundamentale:
fis, ierul s, i procesul. Fis, ierul este folosit pentru a abstractiza informat, ia s, i modul de
stocare s, i utilizare a acesteia n sistemul de operare. Pe de alta parte, procesul este
folosit pentru a abstractiza executarea sarcinilor sistemului de operare.
111

112

5.1.1

INTRODUCERE N SISTEME DE OPERARE

Ce este un proces?

un proces este un program aflat n execut, ie. Daca


n definit, ia sa cea mai simpla,
un proces este considerat o entitate
un program este considerat o entitate pasiva,

activa.
Definit, ia anterioara simplifica semnificat, ia pe care o are un proces, ncadrndu-se n
gradul de detaliu pe care l atinge capitolul curent.
Procesul este unitatea de baza a sistemului de operare folosita pentru a ndeplini
sarcinile indicate de utilizator. Orice solicitare a utilizatorului se traduce n crearea unui
Un proces este, as, adar, o entitate de execut, ie.
proces s, i rezolvarea acelei solicitari.

5.1.2

Deosebirea dintre un proces s, i un program

Un program este doar un fis, ier executabil care se afla pe disc. Se spune ca un astfel de
fis, ier este imaginea din care se va realiza un proces. Un program este, as, adar, o entitate
care nu are asociate not, iuni de utilizare a memoriei s, i procesorului (elemente de
pasiva,
baza ntr-un sistem de calcul). Fis, ierele /bin/ls, /usr/bin/vi sunt exemple de
programe:
1
2

razvan@anaconda:~$ ls -l /bin/ls
-rwxr-xr-x 1 root root 96216 2008-06-27 03:31 /bin/ls

3
4
5

razvan@anaconda:~$ ls -l /usr/bin/vi
lrwxrwxrwx 1 root root 20 2009-02-27 15:43 /usr/bin/vi -> /etc/
alternatives/vi

6
7
8

razvan@anaconda:~$ ls -l /etc/alternatives/vi
lrwxrwxrwx 1 root root 18 2009-04-24 09:59 /etc/alternatives/vi -> /usr/
bin/vim.basic

9
10
11

razvan@anaconda:~$ ls -l /usr/bin/vim.basic
-rwxr-xr-x 1 root root 1644100 2009-03-19 17:32 /usr/bin/vim.basic

Un program cont, ine, n cadrul fis, ierului executabil, doua componente (sect, iuni)
principale:

sect, iunea de cod, ce cont, ine instruct, iunile de rulare a programului pe procesor;
sect, iunea de date, ce cont, ine informat, iile utilizate la execut, ia programului;
Pe de alta parte, un proces pornes, te n momentul execut, iei unui program. n acel
moment, sistemul de operare creeaza o structura (o entitate, o abstract, ie) denumita
proces. Dincolo de informat, iile cont, inute n imagine (fis, ierul executabil de pe disc),
sistemul de operare asociaza procesului o zona de memorie unde s, i va ment, ine datele
s, i unde se va afla codul de executat. De asemenea, procesului i se asociaza timp de
rulare a codului pe procesor s, i alte informat, ii utile pentru interact, iunea cu alte procese
sau componente ale sistemului de operare. Toate aceste elemente formeaza mpreuna

contextul procesului. Mai multe informat, ii se gasesc


n sect, iunea sect, iunea 14.7.1.
Exemple de procese sunt rularea comenzii ls sau rularea editorului vi. n momentul
comenzii ls, sistemul de operare foloses, te imaginea /bin/ls s, i creeaza un
rularii

CAPITOLUL 5. PROCESE

113

proces. Acest proces este raspunz


ator
pentru utilizarea resurselor sistemului (memorie,

procesor) pentru a oferi rezultatul rularii comenzii (n cazul de fat, a afis, area cont, inutului
directorului curent):
1
2
3
4

razvan@anaconda:~$ ls
Desktop
bin
code
Download bkup
extra-school
Maildir
books junk

media
mystuff
official

packages
people
projects

public_html
school
svn-repos

websites

5
6
7

razvan@anaconda:~$ ls -l /bin/ls
-rwxr-xr-x 1 root root 96216 2008-06-27 03:31 /bin/ls

8
9
10
11

razvan@anaconda:~$ file /usr/bin/file


/usr/bin/file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

n exemplul de mai sus, a doua comanda are ca argument executabilul folosit pentru
Pot fi considerate exemple triviale de
crearea procesului. La fel s, i a treia comanda.
1
self-reference .
Se poate observa ca un proces este o instant, a de execut, ie a unui program. Un program
poate avea nsa mai multe instant, e de execut, ie asociate (instant, e care pot rula simultan
as, adar, o asociere many to one (mai multe la unul) ntre procese
sau succesiv). Exista,
s, i programe.

5.1.3

Structura unui proces

Un proces este definit, la nivelul sistemului de operare, ca o structura de date. Un


, i s, i dispune de resurse, cele mai importante fiind:
proces are proprietat
ntreg care
identificatorul unui proces, numit s, i PID (process id). Este un numar
identifica unic n cadrul sistemului de operare procesul respectv;

imaginea procesului, reprezentata de programul din care ia nas, tere procesul.


Imaginea procesului cont, ine codul s, i datele necesare pentru execut, ie;

starea procesului. Un proces se poate afla n starea de rulare (n momentul n


care codul asociat se executa pe procesor) sau n as, teptare (un alt proces se afla
n rulare);

zonele de memorie utilizate, ce reprezinta regiunile de memorie folosite de


proces pentru a ment, ine codul s, i datele;

fis, ierele deschise. Un proces ment, ine o tabela cu fis, ierele deschise. De obicei

dimensiunea tabelei este limitata astfel nct s, i numarul


de fis, ierele pe care le
poate deschide un proces este limitat. (n Linux aceasta limita este stabilita implicit
la 1024).
1

http://http://en.wikipedia.org/wiki/Indirect_self-reference

114

INTRODUCERE N SISTEME DE OPERARE

Vizualizarea structurii unui proces utiliznd procfs


n Linux exista mai multe metode de a obt, ine informat, ii despre structura unui proces.
Una din aceste metode este analiza procfs. Acesta este un sistem de fis, iere virtual care
ofera acces la informat, ii din sistemul de operare. Pentru a analiza un anumit proces va
ce identifica procesul (process
trebui accesat directorul /proc/pid. pid este numarul
id). n exemplul de mai jos a fost accesat directorul procesului cu pid-ul 6740:
1

razvan@asgard:~$ cd /proc/6740/

2
3
4
5

razvan@asgard:/proc/6740$ ls
auxv
cwd
exe maps mounts
wchan
cmdline environ fd
mem
mountstats

oom_adj

root

stat

status

oom_score

smaps

statm

task

din acest director ofera informat, ii legate de proces:


Diversele intrari

pid-ul este dat de numele directorului: 6740;

imaginea procesului este data de legatura


simbolica exe:
1
2

razvan@asgard:/proc/6740$ ls -l exe
lrwxrwxrwx 1 razvan razvan 0 2009-07-19 19:38 exe -> /usr/bin/vim.
gnome

Dupa cum se vede, procesul de fat, a este o instant, a a vim n mediu grafic
(GNOME).

linia de comanda utilizata pentru crearea procesului:


1
2

razvan@asgard:/proc/6740$ cat cmdline


vi 1.txt

Se observa ca s-a rulat comanda vi 1.txt.

directorul curent cel n care s-a rulat comanda este dat de legatura
simbolica
cwd:
1
2

razvan@asgard:/proc/6740$ ls -l cwd
lrwxrwxrwx 1 razvan razvan 0 2009-07-19 19:38 cwd -> /home/razvan/
tmp/fd_test

Rezulta ca directorul curent al comenzii este /home/razvan/tmp/fd_test.

zonele de memorie ale procesului sunt date de fis, ierul maps:


1
2
3
4
5
6
7

razvan@asgard:/proc/6740$ cat maps


08048000-081ce000 r-xp 00000000 03:03
081ce000-081db000 rw-p 00186000 03:03
081db000-08287000 rw-p 081db000 00:00
[...]
b7fdc000-b7fde000 rw-p 00014000 03:03
bfc7a000-bfc8f000 rw-p bfc7a000 00:00

180465
180465
0

/usr/bin/vim.gnome
/usr/bin/vim.gnome
[heap]

178741
0

/lib/ld-2.3.6.so
[stack]

, esc aria de cuprindere a capitolului


Nu vom insista pe aceste regiuni ntruct depas

de fat, a.

fis, ierele deschise de proces pot fi vizualizate prin accesarea subdirectorului fd:

CAPITOLUL 5. PROCESE

115

razvan@asgard:/proc/6740$ cd fd

2
3
4

razvan@asgard:/proc/6740/fd$ ls
0 1 2 3 5 7

5
6
7
8
9
10
11

razvan@asgard:/proc/6740/fd$ ls -l
total 6
lrwx------ 1 razvan razvan 64 2009-07-19 19:48 0 -> /dev/pts/3
lrwx------ 1 razvan razvan 64 2009-07-19 19:48 1 -> /dev/pts/3
[...]
lrwx------ 1 razvan razvan 64 2009-07-19 19:48 7 -> /home/razvan/tmp
/fd_test/.1.txt.swp

Nu vom insista pe descrierea tuturor intrarilor,


dar se poate observa ca fis, ierul cu

numarul
7
este
o
legatur
simbolica
catre
/home/razvan/tmp/fd_test/.1.txt.swp. Acest fis, ier este copia de lucru a
editorului vim pentru fis, ierul 1.txt.
Informat, ii detaliate despre procfs sunt descrise n sect, iunea 5.1.3. Sistemul de fis, iere
procfs este folosit drept suport de comenzile care ofera informat, ii despre procese. Astfel
de comenzi sunt ps, pstree, pgrep sau top, despre care vom discuta n sect, iunile

urmatoare.

5.1.4

Starile
unui proces. Multiprogramare s, i multiprocesare

simultan, mai multe procese. Totus, i un singur proces


ntr-un sistem de operare ruleaza,
se poate executa la un moment dat pe un procesor single-core (sau, cu alte cuvinte,
un procesor single-core poate executa codul asociat unui singur proces). Pe un sistem

multi-core1 vor putea rula mai multe procese n acelas, i timp, numarul
acestora fiind egal
2

cu numarul
de nuclee de procesare ale sistemului hardware .
n
Orice proces are asociata o stare de activitate. n mod obis, nuit exista mai multe stari
un proces, dar noi ne vom referi doar la doua:

care se poate gasi

rulare (running): procesul ruleaza n acel moment pe unul din procesoarele


sistemului;

as, teptare (waiting): procesul as, teapta eliberarea procesorului pentru a putea rula
pe acesta.
as, adar, ca este nevoie de un algoritm care sa ofere fiecarui

Se observa,
proces ocazia
de a fi executat pe unul din procesoarele sistemului.
Mecanismul de alocare a proceselor pe procesoarele sistemului poarta numele
de planificare (scheduling). Subsistemul nucleului care se ocupa de alocare se
numes, te planificator de procese (scheduler ).
Rolul planificatorului este de a alege un proces care sa ruleze pe un procesor s, i, la
ndeplinirea unei condit, ii date, sa suspende execut, ia procesului pentru a l nlocui cu un
1

http://en.wikipedia.org/wiki/Multi-core_(computing)
Sistemul hardware poate avea un procesor cu mai multe nuclee sau mai multe procesoare, fiecare cu
mai multe nuclee
2

116

INTRODUCERE N SISTEME DE OPERARE

altul. nlocuirea unui proces cu un alt proces se numes, te schimbare de context (context
switch).
La nceputul istoriei sistemelor de operare, daca un utilizator dorea rularea unui

program, el ncarca
pe un suport cont, inutul programului s, i as, tepta rularea acestuia (n
contextul unui proces). Cnd procesul era planificat pe procesor, acesta rula complet
pna la ncheierea absoluta a execut, iei. Abordarea prezentata are dezavantajul lipsei
de interactivitate: daca un proces ruleaza foarte mult sau daca trebuie sa comunice des
cu dispozitive periferice lente, atunci alte procese care doresc sa ruleze vor trebui sa
as, tepte un timp ndelungat.

Urmatorul
pas n evolut, ia sistemelor de operare a fost introducerea not, iunii de
multiprogramare. nainte de a intra n detalii, trebuie amintita diferent, a de viteza dintre
procesor/memorie s, i dispozitivele periferice. Astfel, daca un proces acceseaza hard
disk-ul, va trebui sa as, tepte foarte mult timp pentru ca informat, ia sa fie disponibila
(numeric, diferent, a dintre viteza unui procesor s, i viteza de acces la datele de pe un
hard disk este de ordinul milioanelor).
mai multe procese coexista n cadrul unui sistem de
n abordarea multiprogramata,
operare. n momentul n care un proces acceseaza un dispozitiv periferic lent, va trebui
sa as, tepte furnizarea informat, iei dorite; drept urmare, procesul respectiv este
pe procesor (context
suspendat temporar, s, i un alt proces este planificat n locul sau
, te interactivitatea sistemului. Daca un proces se
switch). n acest fel se mares
blocheaza n comunicat, ia cu un dispozitiv periferic lent, acesta nu mai iroses, te timpul
procesorului n as, teptare, ci este nlocuit cu un alt proces.

Urmatorul
pas a fost aparit, ia conceptului de multiprocesare sau multitasking. Acesta

a venit ca raspuns
la cerint, ele din ce n ce mai mari de interactivitate a sistemului de
este ca un proces care
operare n raport cu utilizatorul. Dezavantajul multiprogramarii
a a executa o act, iune blocanta nu va lasa
alte procese
ruleaza mult timp pe procesor far
1
, ii . Solut, ia este asocierea, cu
sa ruleze. Acest lucru nseamna pierderea interactivitat
fiecare proces, a unui timp limita de rulare pe procesor (o cuanta de timp). La
ncheierea cuantei de timp, procesul va fi automat suspendat temporar s, i nlocuit cu un
altul. n abordarea multitasking, schimbarea de context se va produce cnd procesul
care ruleaza pe procesor executa o act, iune blocanta sau cnd s, i ncheie cuanta de
timp.
Toate sistemele de operare moderne sunt sisteme multiprocesare (multitasking).

5.2

Ierarhia de procese n Unix. Vizualizarea proceselor


sistemului

n sistemele Unix (ca atare s, i n Linux), procesele sunt organizate ierarhic. Astfel, se

poate spune despre un proces ca este procesul parinte


al unui alt proces; viceversa, se
spune ca un proces este procesul fiu pentru un altul. Un lucru de ret, inut este faptul ca

un proces are un singur proces parinte,


dar poate avea mai multe procese fiu.

Modelul ierarhiei de procese n Unix este prezentat n figura urmatoare:


1

Denumirea tehnica este starvation

CAPITOLUL 5. PROCESE

117

Figura 5.1: Ierarhia de procese n Unix


Ierarhia apare ca urmare a faptului ca un proces este creat prin intermediul unui alt

proces. La crearea (nas, terea) unui proces se realizeaza o copie a procesului parinte

Astfel, la rularea
s, i se nlocuies, te imaginea de program a parintelui
cu cea dorita.
comenzii ls din shell (n imagine /bin/bash), se creeaza o copie a procesului shell, s, i
se nlocuies, te imaginea de executabil /bin/bash cu imaginea /bin/ls.

n Unix, parintele
tuturor proceselor este denumit init. Imaginea de executabil asociata
este /sbin/init. Acesta este primul proces creat de sistemul de operare. Este un

proces special pentru ca nu are parinte.


Din init se creeaza alte procese, care la rndul
lor vor crea alte procese, completndu-se astfel ierarhia de procese ale sistemului.

5.2.1

Utilitarul ps

Comanda ps este principala comanda de vizualizare a proceselor sistemului.


Informat, iile prezentate de ps sunt obt, inute analiznd informat, iile din procfs. La o rulare
a argumente), ps afis, eaza informat, ii despre procesele pornite de utilizatorul
simpla (far
curent pe terminalul activ:
1
2
3
4

razvan@asgard:~$ ps
PID TTY
TIME CMD
3036 pts/0
00:00:00 bash
3079 pts/0
00:00:00 ps

pentru fiecare
Rularea comenzii presupune afis, area unui cap de tabel s, i a unei intrari
a argumente) se vor afis, a identificatorul de proces (PID),
proces. La o rulare simpla (far

118

INTRODUCERE N SISTEME DE OPERARE

terminalul utilizat (TTY), timpul de rulare a procesului (TIME) s, i numele programului ce


sta la baza acestuia (CMD). n exemplul de mai sus, utilizatorul a deschis un terminal cu
un interpretor de comenzi (bash) s, i apoi a rulat comanda ps. Se observa ca un proces
ps se afis, eaza s, i pe sine.
Comanda ps accepta diferite tipuri de opt, iuni care pot fi uneori conflictuale. n continuare
vom insista pe opt, iuni UNIX, caracterizate prin faptul ca sunt precedate de semnul minus
(-). Pentru detalii complete legate modul de utilizarea al comenzii s, i de efectul opt, iunilor
trebuie consultata pagina de manual asociata (man ps).
De exemplu, pentru afis, area proceselor pornite de utilizatorul curent, indiferent de
terminalul utilizat, se foloses, te opt, iunea -a.
1
2
3
4

razvan@asgard:~$ ps -a
PID TTY
TIME CMD
3074 pts/1
00:00:00 vi
3094 pts/0
00:00:00 ps

n aceasta situat, ie, se afis, eaza procesele ce ruleaza pe terminalul


Se observa ca,
a a se mai preciza procesele tip shell de pe
pts/1 s, i cele ce ruleaza pe pts/0 far
aceste terminale.
impresionant de argumente care pot controla cont, inutul s, i
Comanda ps are un numar
informat, iilor despre procese. Vom prezenta cele doua clase importante
formatul afis, arii
de opt, iuni: opt, iuni de select, ie s, i opt, iuni de formatare.

Opt, iuni de select, ie


Opt, iunile de select, ie presupun selectarea anumitor procese din sistem n funct, ie de
diverse criterii. Sunt prezentate, n continuare, cteva opt, iuni utile:
Selectarea tuturor proceselor din sistem: se realizeaza folosind argumentul -e sau
-A:
1
2
3
4
5
6
7
8
9
10

razvan@asgard:~$ ps -e
PID TTY
TIME
1 ?
00:00:00
2 ?
00:00:00
3 ?
00:00:00
[...]
3057 pts/1
00:00:00
3074 pts/1
00:00:00
3109 pts/2
00:00:00
3131 pts/0
00:00:00

CMD
init
ksoftirqd/0
events/0
bash
vi
bash
ps

terminal, utilizator;
pid, comanda,
Select, ia proceselor dupa o anumita componenta:
aceasta select, ie se realizeaza prin utilizarea unui argument specific (de exemplu -C, -p
far
a spat, ii
sau -u) urmat de lista de select, ie (elementele listei sunt separate prin virgula,
ntre ele):
1
2
3
4
5
6

razvan@asgard:~$ ps -C bash,vi,gnome-terminal
PID TTY
TIME CMD
3034 ?
00:00:02 gnome-terminal
3036 pts/0
00:00:00 bash
3057 pts/1
00:00:00 bash
3074 pts/1
00:00:00 vi

CAPITOLUL 5. PROCESE
7
8

3109 pts/2
3180 pts/3

119

00:00:00 bash
00:00:00 bash

n exemplul de mai sus au fost selectate procesele al caror


executabil (-C) a fost bash,
vi sau gnome-terminal.
1
2
3
4
5

razvan@asgard:~$ ps -p 1,3026,3074
PID TTY
TIME CMD
1 ?
00:00:00 init
3026 ?
00:00:42 gedit
3074 pts/1
00:00:00 vi

Cu comanda de mai sus s-au selectat procesele cu pid-ul (-p) 1, 3026 sau 3074.
1
2
3
4
5

razvan@asgard:~$ ps -u www-data
PID TTY
TIME CMD
2787 ?
00:00:00 apache2
2788 ?
00:00:00 apache2
2790 ?
00:00:00 apache2

n exemplul anterior s-au selectat procesele ce apart, in utilizatorului (-u) www-data.

Observat, i ca des, i s-a facut


select, ia dupa utilizator, numele acestuia nu apare n rezultatul
comenzii. Pentru aceasta vor trebui folosite opt, iunile de formatare ps pentru afis, area
altor cmpuri n afara celor implicite.
Opt, iunile de select, ie pot fi combinate. n exemplul de mai jos se selecteaza procesele
bash sau vi, cele care au pid-ul 2968 sau 2972 s, i cele care apart, in utilizatorului
haldaemon:
1
2
3
4
5
6
7
8
9
10
11

razvan@asgard:~$ ps -C bash,vi -p 2968,2972 -u haldaemon


PID TTY
TIME CMD
2583 ?
00:00:02 hald
2590 ?
00:00:00 hald-addon-acpi
2968 ?
00:00:04 metacity
2972 ?
00:00:00 nautilus
3036 pts/0
00:00:00 bash
3057 pts/1
00:00:00 bash
3074 pts/1
00:00:00 vi
3109 pts/2
00:00:00 bash
3180 pts/3
00:00:00 bash

far
a spat, ii.
Argumentele listei de select, ie pentru opt, iunile ps sunt separate prin virgula,
Se pot nega opt, iunile de select, ie cu ajutorul argumentului -N. Astfel, daca se dores, te
select, ia proceselor care nu apart, in utilizatorului privilegiat (root) s, i nici utilizatorului

razvan, s, i care nu au ca executabil apache2, se va folosi comanda urmatoare:


1
2
3
4
5
6
7
8
9
10
11

razvan@asgard:~$ ps -N -u root,razvan -C apache2


PID TTY
TIME CMD
2283 ?
00:00:00 portmap
2575 ?
00:00:00 dbus-daemon
2583 ?
00:00:03 hald
2590 ?
00:00:00 hald-addon-acpi
2655 ?
00:00:00 exim4
2663 ?
00:00:00 fbguard
2664 ?
00:00:00 fbserver
2741 ?
00:00:00 rpc.statd
2756 ?
00:00:00 atd

120

INTRODUCERE N SISTEME DE OPERARE

Opt, iuni de formatare


Opt, iunile de formatare pentru comanda ps controleaza coloanele care sunt afis, ate ca

rezultat al rularii.
Implicit, rularea comenzii ofera un cap de tabel cu elementele PID,
TTY, TIME s, i CMD, urmat de o lista a proceselor. Aceste elemente pot fi schimbate prin
intermediul opt, iunilor de formatare.
Afis, area tuturor opt, iunilor frecvente pentru ps:
1
2
3
4

razvan@asgard:~$ ps -F
UID
PID PPID C
razvan
3036 3034 0
razvan
3248 3036 0

SZ
1574
964

RSS PSR STIME TTY


3352
0 12:09 pts/0
940
0 13:02 pts/0

TIME CMD
00:00:00 bash
00:00:00 ps -F

Se observa ca s-a modificat capul de tabel. Sunt prezentate mai mult opt, iuni utile,

printre care UID (utilizatorul ce a creat procesul), PPID (pid-ul procesului parinte),
procesului), CMD (comanda completa de rulare cu argumente)
STIME (timpul rularii
etc.
n mod evident, opt, iunile de formatare pot fi combinate cu opt, iuni de select, ie:
1
2
3
4
5
6
7
8
9
10
11
12

razvan@asgard:~$ ps -F -C bash,apache2,gnome-terminal,ps
UID
PID PPID C
SZ
RSS [...] TTY
TIME
root
2786
1 0 2412 2632 [...] ?
00:00:00
apache2 -k start
www-data 2787 2786 0 2355 1948 [...] ?
00:00:00
apache2 -k start
www-data 2788 2786 0 57746 2452 [...] ?
00:00:00
apache2 -k start
www-data 2790 2786 0 57746 2456 [...] ?
00:00:00
apache2 -k start
razvan
3034
1 0 8424 15020 [...] ?
00:00:03
terminal
razvan
3036 3034 0 1574 3372 [...] pts/0
00:00:00
razvan
3057 3034 0 1575 3348 [...] pts/1
00:00:00
razvan
3109 3034 0 1575 3352 [...] pts/2
00:00:00
razvan
3180 3034 0 1575 3340 [...] pts/3
00:00:00
razvan
3257 3036 0
964
940 [...] pts/0
00:00:00
,apache2,gnome-terminal,ps

CMD
/usr/sbin/
/usr/sbin/
/usr/sbin/
/usr/sbin/
gnomebash
bash
bash
bash
ps -F -C bash

n exemplul de mai sus, procesul cu pid-ul 2786 este procesul fiu al init (are PPID =

1). Urmatoarele
trei procese sunt procesele fiu ale acestuia. De asemenea, procesul
cu pid-ul 3034 (gnome-terminal) este tot un proces fiu al init, iar cele patru procese
bash sunt procesele fiu ale acestuia. La fel, procesul ps (pid 3257) este procesul fiu al
primului proces bash (pid 3036). O reprezentare ierarhica a celor zece procese de mai

sus este urmatoarea:


1
2
3
4
5
6
7

init (1) ---> apache2 (2786)

--->
\-->
\-->
\--> bash-terminal (3034) --->
\-->
\-->
\-->

Afis, area de opt, iuni specifice pentru procese

apache2 (2787)
apache2 (2788)
apache2 (2790)
bash (3036)
bash (3057)
bash (3109)
bash (3180)

---> ps (3257)

CAPITOLUL 5. PROCESE

121

Specificarea opt, iunilor de afis, are pentru ps se realizeaza cu ajutorul argumentului -o,
far
a spat, ii).
urmat de argumentele de formatare dorite (separate prin virgula,
Cele mai frecvent utilizate argumente de select, ie sunt: pid, ppid, args (lista de
argumente), user (utilizator), comm (comanda doar numele executabilului), cmd
(comanda cu argumente), cputime (timpul de procesor consumat), group, pmem
(procent memorie ocupata), state (starea procesului un singur caracter), stat
(starea procesului mai multe caractere), tty (terminalul de control asociat).
n continuare sunt prezentate cteva exemple.
procesului (stat), comanda cu
Afis, area pid-ului (pid), utilizatorului (user), a starii
argumente (cmd), timpul de procesor (cputime) s, i memoria folosita (pmem):
1
2
3
4
5
6
7
8
9
10
11
12

razvan@asgard:~$ ps
PID USER
STAT
1 root
Ss
2 root
SN
3 root
S<
[...]
3009 razvan
S
3011 razvan
S
3016 razvan
Ss
[...]
3180 razvan
Ss+
3260 razvan
R+

-e -o pid,user,stat,cmd,cputime,pmem
CMD
TIME %MEM
init [2]
00:00:00 0.1
[ksoftirqd/0]
00:00:00 0.0
[events/0]
00:00:00 0.0
/usr/lib/gnome-panel/notifi 00:00:00
/usr/lib/gnome-applets/mixe 00:00:00
gnome-screensaver
00:00:02

1.4
2.3
0.4

bash
00:00:00
ps -e -o pid,user,stat,cmd, 00:00:00

0.6
0.1

a a insista pe semnificat, iile starii


proceselor, se observa ca procesul ps (pid 3260)
Far
este n starea de rulare (R running), iar celelalte sunt n starea de as, teptare (S
sleeping). Sistemul de test dispune de un singur procesor s, i ca atare un singur proces
poate rula la un moment dat.
Afis, area pid-ului, argumentelor, timpului de procesor, memoriei utilizate s, i timpului de
pornire a comenzilor pentru procesele ce apart, in utilizatorului www-data s, i pentru
procesele care au numele comenzii bash:
1
2
3
4
5
6
7
8
9

razvan@asgard:~$ ps -C bash -u www-data -o pid,args,cputime,rss,start


PID COMMAND
TIME
RSS STARTED
2787 /usr/sbin/apache2 -k start 00:00:00 1948 11:29:03
2788 /usr/sbin/apache2 -k start 00:00:00 2452 11:29:03
2790 /usr/sbin/apache2 -k start 00:00:00 2456 11:29:03
3036 bash
00:00:00 3372 12:09:16
3057 bash
00:00:00 3348 12:10:20
3109 bash
00:00:00 3356 12:23:31
3180 bash
00:00:00 3340 12:44:33

Spat, iul de memorie utilizat (rss resident set size), este masurat
n kilooctet, i (KB).
comenzii ps se realizeaza cu ajutorul opt, iunii --sort
Sortarea rezultatului rularii
urmata de lista de criterii de sortare. Semnul + (implicit) sau - n fat, a unui criteriu de

sortare nseamna sortare n ordine crescatoare


sau descrescatoare:
1
2
3
4
5
6
7

razvan@asgard:~$ ps -e -o pid,cmd,cputime,pmem,rss --sort -rss


PID CMD
TIME %MEM
RSS
3247 evince /home/razvan/school/ 00:00:37 10.7 206556
402 evolution
00:01:28 7.5 146268
5121 /usr/bin/x-www-browser
00:01:03 5.5 107444
7709 pidgin
00:00:05 2.9 56104
3334 /usr/bin/X :0 -audit 0 -aut 00:02:39 2.8 54960

122
8
9
10
11
12

INTRODUCERE N SISTEME DE OPERARE

4391 nautilus --no-default-windo


4595 mono /usr/lib/tomboy/Tomboy
410 /usr/lib/evolution/evolutio
4389 gnome-panel --sm-client-id
[...]

00:00:26
00:00:02
00:00:01
00:00:15

1.8
1.6
1.4
1.4

36324
31252
28844
27616

Exemplul de mai sus realizeaza o sortare a proceselor din sistem dupa memoria
Se observa ca procesele cele mai mari consumatoare de memorie sunt
ocupata.
evince (un viewer de documente), evolution (un client de mail) s, i
x-www-browser (un browser web).

Alte opt, iuni


Acest lucru se
Utilitarul ps permite afis, area ierarhiei de procese n forma arborescenta.
realizeaza cu ajutorul opt, iunii -H:
1
2
3
4
5
6
7
8
9
10
11
12

razvan@asgard:~$ ps -C init,apache2,gnome-terminal,bash -o pid,user,comm,


cputime,pmem --sort pid -H
PID USER
COMMAND
TIME %MEM
1 root
init
00:00:00 0.1
2786 root
apache2
00:00:00 0.5
2787 www-data
apache2
00:00:00 0.3
2788 www-data
apache2
00:00:00 0.4
2790 www-data
apache2
00:00:00 0.4
3034 razvan
gnome-termina 00:00:05 2.9
3036 razvan
bash
00:00:00 0.6
3057 razvan
bash
00:00:00 0.6
3109 razvan
bash
00:00:00 0.6
3180 razvan
bash
00:00:00 0.6

n acest caz procesele fiu sunt indentate cu doua caractere spat, iu fat, a de procesul

parinte.

5.2.2

Utilitarul pstree

simple
Utilitarul pstree afis, eaza ierarhia de procese a sistemului. n cazul unei utilizari
a niciun argument), comanda afis, eaza ierarhia de procese ncepnd de la init:
(far
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

razvan@asgard:~$ pstree
init-+-acpid
|-apache2-+-apache2
|
-2*[apache2---26*[{apache2}]]
|-atd
|-bonobo-activati
|-clock-applet
[...]
|-gnome-terminal-+-bash
|
|-bash---vi
|
|-bash---man---pager
|
|-bash---pstree
|
|-gnome-pty-helpe
|
-{gnome-terminal}
[...]

CAPITOLUL 5. PROCESE

123

Daca este dorita afis, area ierarhiei de procese ncepnd de la un anumit proces, va trebui
transmis ca parametru pid-ul acelui proces:
1
2
3
4
5
6
7

razvan@asgard:~$ pstree 3034


gnome-terminal-+-bash
|-bash---vi
|-bash---man---pager
|-bash---pstree
|-gnome-pty-helpe
-{gnome-terminal}

Se poate afis, a inclusiv pid-ul proceselor din ierarhie prin intermediul opt, iunii -p:
1
2
3
4
5
6
7

razvan@asgard:~$ pstree -p 3034


gnome-terminal(3034)-+-bash(3036)
|-bash(3057)---vi(3074)
|-bash(3109)---man(3295)---pager(3302)
|-bash(3180)---pstree(3343)
|-gnome-pty-helpe(3035)
-{gnome-terminal}(3037)

Ca s, i n cazul comenzii ps, pstree utilizeaza procfs pentru obt, inerea de informat, ii
despre ierarhia de procese.

5.2.3

Utilitarul pgrep

Comanda pgrep este echivalentul grep pentru lucrul cu procese s, i poate fi folosita
pentru a afis, a doar procesele din sistem care ndeplinesc o condit, ie. O funct, ionalitate
echivalenta pgrep poate fi obt, inuta cu ajutorul comenzii ps s, i al argumentelor specifice
-u pentru
acesteia: -p pentru select, ia dupa pid, -C pentru select, ia dupa comanda,
select, ia dupa utilizator etc.
pgrep pentru select, ia proceselor care
n continuare sunt prezentate exemple ale rularii

au ca parinte
procesul init (pid 1). Implicit se selecteaza doar pid-urile proceselor. Daca
se dores, te s, i afis, area numelor proceselor, se foloses, te opt, iunea -l:
1
2
3
4
5
6
7
8
9
10
11

razvan@asgard:~$ pgrep -P 1
2
3
4
5
1021
2284
[...]
3025
3027
3052

12
13
14
15
16
17
18
19
20
21

razvan@asgard:~$ pgrep -P 1 -l
2 ksoftirqd/0
3 events/0
4 khelper
5 kthread
1021 udevd
2284 portmap
[...]
3025 gnome-screensav

124
22
23

INTRODUCERE N SISTEME DE OPERARE

3027 gnome-terminal
3052 soffice

5.2.4

Utilitarul top

Utilitarul top este utilizat pentru a afis, a informat, ii n mod dinamic (n timp real) despre
procesele existente n sistem. O utilizare frecventa a acesteia este monitorizarea
sistemului (vezi sect, iunea 10.3.1).
a argumente, top va afis, a un ecran cu informat, ii despre sistem s, i
La o rulare far

procesele care ruleaza.


n mod implicit, acest ecran este actualizat la fiecare 3
secunde. Un exemplu de ecran afis, at prin rularea comenzii top este prezentat mai jos:

Figura 5.2: Ecran de rulare top

Ecranul afis, at de top cuprinde urmatoarele


zone:

zona de sumarizare (summary area): aceasta cont, ine informat, ii generale despre

sistem: ncarcarea
sistemului (prima linie), numarul
de procese s, i starea lor (a
doua linie), timpul de procesor utilizat (a treia linie), memoria s, i spat, iul de swap

ocupat (ultimele doua linii). Gradul de ncarcare


a sistemului este o masura
a
arii
procesorului s, i poate fi determinat s, i cu ajutorul comenzii uptime.
ncarc

zona de comanda (prompt line): aici utilizatorul poate introduce comenzi specifice
de interact, iune cu utilitarul top;
antetul de tabel (columns header ): afis, eaza antetul de tabel pentru informat, iile
afis, ate despre procese;

zona de procese (task area): afis, eaza informat, ii despre procese.

CAPITOLUL 5. PROCESE

125

Interfat, a interactiva top

top are o interfat, a interactiva cu utilizatorul care i permite acestuia alterarea formatului
de afis, are. Comanda cea mai utila pentru lucrul interactiv cu top este cea de afis, are a
ecranului de ajutor (tasta h).
unei
Majoritatea comenzilor top sunt de tipul toggle, adica afis, area sau oprirea afis, arii
anumite componente din ecranul de afis, are. n continuare vor fi prezentate cteva din
comenzile top cele mai utile n funct, ie de zona ecranului de afis, are n care au efect.

Detalii suplimentare se pot afla prin consultarea paginii de ajutor (prin apasarea
tastei
h) sau a paginii de manual (man top).

Comenzi pentru zona de sumarizare. Comenzile folosite pentru lucrul cu zona de


sumarizare sunt comenzi de tipul toggle:

tasta l este folosita pentru a activa/dezactiva afis, area de informat, ii despre

ncarcarea
sistemului (prima linie din zona de sumarizare);

tasta t este folosita pentru a activa/dezactiva afis, area de informat, ii despre numarul
de procese s, i utilizarea procesorului (liniile 2 s, i 3 din zona de sumarizare);

tasta m este folosita pentru a activa/dezactiva afis, area de informat, ii despre


utilizarea memoriei sistemului (ultimele doua linii din zona de sumarizare).

Comenzi pentru zona de procese. Dintre comenzile care afecteaza zona de afis, are
pentru procese amintim:
nu doar numele procesului;
tasta c este folosita pentru a afis, a comanda completa,

tasta f este folosita pentru a adauga/elimina


coloane utilizate pentru afis, area de
informat, ii despre procese;

tasta o este folosita pentru a schimba ordinea coloanelor din tabel; dupa apasarea
tastei f sau o, utilizatorului i este prezentat un ecran de configurare, n care poate
specifica noi coloane sau o noua ordine (tot prin intermediul unor taste);

tasta R (de tip toggle) este folosita pentru sortare ascendenta sau descendenta;

tasta F sau tasta O sunt folosite pentru a configura coloana dupa care se face
sortarea proceselor din zona de procese. n mod implicit sortarea se realizeaza
dupa timpul de procesor, astfel nct procesele care ntr-un interval dat de timp

tastele < s, i > pot


au utilizat cel mai mult procesorul vor aparea
primele n lista;
fi folosite pentru schimbarea coloanei dupa care se relizeaza sortarea, selectnd
coloana din stnga sau din dreapta.

Comenzi n zona de comanda Aceste comenzi folosesc zona de comanda s, i


de obicei, procesele sau zona de procese:
afecteaza,

tasta k permite terminarea unui proces. Apasarea


acestei taste ofera promptul

PID to kill: unde utilizatorul va introduce pid-ul procesului a carui


execut, ie

se dores, te a fi ncheiata;

126

INTRODUCERE N SISTEME DE OPERARE

tasta n permite precizarea numarului


de procese care vor fi afis, ate n zona de

procese; apasarea
acestei taste conduce la aparit, ia unui prompt unde utilizatorul

precizeaza numarul
de procese pe care dores, te sa le vizualizeze/monitorizeze;

tasta u permite precizarea unui utilizator, fiind apoi afis, ate numai procesele care
apart, in acestuia. Zona de comanda afis, eaza promptul Which user (blank
for all): unde se cere introducerea unui nume de utilizator.

Interfat, a neinteractiva top

top poate fi utilizat s, i n mod neinteractiv prin folosirea argumentului -b n linie de


Pornirea neinteractiva este folosita de obicei mpreuna cu argumentul -n,
comanda.

care precizeaza numarul


de iterat, ii de afis, are. Se obt, ine astfel un rezultat ce poate fi

redirectat ntr-un fis, ier pentru analiza ulterioara:


1
2
3
4
5
6

george@asgard:~$ top -b -n 1
top - 23:03:58 up 11:54, 2 users, load average: 0.11, 0.52, 0.52
Tasks: 148 total,
3 running, 145 sleeping,
0 stopped,
0 zombie
Cpu(s): 13.4%us, 6.3%sy, 2.0%ni, 77.1%id, 0.7%wa, 0.2%hi, 0.3%si,
0.0%st
Mem:
1016968k total,
976164k used,
40804k free,
12684k buffers
Swap: 1044216k total,
395716k used,
648500k free,
371860k cached

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

PID
5124
8232
11446
1
2
3
4
5
6
7
8
11
[...]

5.2.5

USER
george
george
george
root
root
root
root
root
root
root
root
root

PR
20
20
20
20
15
RT
15
RT
15
15
15
15

NI
0
0
0
0
-5
-5
-5
-5
-5
-5
-5
-5

VIRT RES SHR S %CPU %MEM


155m 2656 2324 S 2.0 0.3
553m 134m 20m S 2.0 13.5
2444 1096 824 R 2.0 0.1
3084 540 488 S 0.0 0.1
0
0
0 S 0.0 0.0
0
0
0 S 0.0 0.0
0
0
0 S 0.0 0.0
0
0
0 S 0.0 0.0
0
0
0 S 0.0 0.0
0
0
0 S 0.0 0.0
0
0
0 S 0.0 0.0
0
0
0 S 0.0 0.0

TIME+
6:23.52
38:13.04
0:00.01
0:00.79
0:00.00
0:00.00
0:00.07
0:00.00
0:00.41
0:00.00
0:00.00
0:00.00

COMMAND
pulseaudio
firefox
top
init
kthreadd
migration/0
ksoftirqd/0
watchdog/0
events/0
cpuset
khelper
netns

Timpul de execut, ie al unui proces. Comanda time

Timpul de execut, ie al unui proces se refera la durata sa de execut, ie n sistem, din


s, i pna n momentul terminarii
acestuia.
momentul crearii

Comanda time este utilizata pentru masurarea


timpului de rulare a unui proces s, i a
implicite a comenzii time ofera 3 timpi:
resurselor utilizate de acesta. Rezultatul rularii

real timpul efectiv de execut, ie, masurat


de la crearea procesului s, i pna la
terminarea acestuia;

user timpul petrecut n spat, iul utilizator;


sys timpul petrecut rulnd apeluri de sistem (n spat, iul kernel).

CAPITOLUL 5. PROCESE

127

time primes, te ca argument numele unui program a carui


durata de execut, ie va fi

Un exemplu de rulare este prezentat mai jos:


masurat
a.
1

root@asgard:/home/razvan# time updatedb

2
3
4
5

real
user
sys

4m19.309s
0m2.680s
0m5.550s

Se observa ca rularea comenzii updatedb a durat 4 minute s, i 19 secunde. Totus, i timpul

real de rulare a procesului se masoar


a adunnd timpul petrecut n spat, iul utilizator (2.68
secunde) s, i timpul petrecut n spat, iul kernel (5.55 secunde). Cu alte cuvinte, din timpul
ct a durat rularea comenzii, procesul a consumat doar 8.23 secunde pentru a fi executat

de catre
procesor. Restul timpului a fost ocupat cu rularea altor procese sau schimbarea
contextului ntre procese. Schimbarea contextului are loc n momentul n care procesului
i expira cuanta de timp sau acceseaza dispozitive periferice lente.

5.2.6

Sistemul de fis, iere procfs

Dupa cum s-a prezentat, sistemul de fis, iere procfs este utilizat de comenzile ce obt, in
informat, ii despre procesele din sistem: ps, pstree, pgrep sau top. Pachetul
Debian/Ubuntu utilizat pentru instalarea acestor utilitare se numes, te procps pentru a
indica faptul ca procfs este utilizat pentru obt, inerea de informat, ii despre procese.

procfs este un sistem de fis, iere virtual (adica datele nu se gasesc


pe un suport fizic
permanent precum un hard disk sau CD-ROM). n cazul procfs, fiecare fis, ier este de
fapt o regiune de memorie (stocata fizic n RAM) care ofera informat, ii despre sistem.
procfs ofera informat, ii att despre procesele din sistem ct s, i alte informat, ii specifice:
dispozitivele conectate, ocuparea ntreruperilor etc, permit, nd totodata s, i configurarea
anumitor componente ale sistemului.
procfs este montat n /proc:
1
2
3
4
5

razvan@asgard:~$ cat /etc/mtab


/dev/hda3 / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
[...]

Din punctul de vedere al utilizatorului, procfs este vizibil ca o suita de fis, iere s, i directoare
cu informat, ii despre sistem:
1

razvan@asgard:~$ cd /proc/

2
3
4
5
6
7
8
9

razvan@asgard:/proc$
1/
2584/ 2792/
1021/ 2585/ 2793/
192/
2591/ 2794/
193/
2603/ 2796/
194/
2656/ 2873/
[...]

ls
2961/
2963/
2969/
2971/
2976/

3027/
3028/
3029/
3052/
3066/

97/
99/
acpi/
asound/
buddyinfo

filesystems
fs/
ide/
interrupts
iomem

mtrr
net/
partitions
self
slabinfo

128

INTRODUCERE N SISTEME DE OPERARE

Informat, ii despre procese


Informat, ii despre procesele din sistem sunt oferite de procfs prin intermediul

Acest numar
reprezinta pid-ul procesului
directoarelor al caror
nume este un numar.
despre care se dores, te aflarea de informat, ii.
n continuare vom prezenta diverse informat, ii cont, inute n directorul din /proc asociat
unui proces. Vom prezenta ca studiu de caz procesul folosit pentru editarea unui
document Word. Fiind vorba de OpenOffice, numele executabilului din care a fost
generat procesul este soffice.bin:
1
2
3

razvan@asgard:/proc$ ps -C soffice.bin
PID TTY
TIME CMD
3066 ?
00:01:02 soffice.bin

4
5

razvan@asgard:/proc$ cd 3066/

6
7
8
9
10

razvan@asgard:/proc/3066$
auxv
environ maps
cmdline exe
mem
cwd
fd/
mounts

ls -F
mountstats
oom_adj
oom_score

root
smaps
stat

statm
status
task/

wchan

Se poate observa ca procesul asociat OpenOffice are pid-ul 3066 s, i ca atare va fi

accesat directorul 3066. Acest director cont, ine o serie de fis, iere, directoare s, i legaturi

simbolice care ofera informat, ii despre proces. Astfel, legatura


simbolica exe ofera
informat, ii despre executabilul utilizat pentru crearea procesului; fis, ierul cmdline s, i
fis, ierul environ precizeaza linia de comanda folosita s, i mediul de creare
(environment):
1
2

razvan@asgard:/proc/3066$ ls -l exe
lrwxrwxrwx 1 razvan razvan 0 2007-08-04 12:01 exe -> /usr/lib/openoffice/
program/soffice.bin

3
4
5

razvan@asgard:/proc/3066$ cat cmdline


/usr/lib/openoffice/program/soffice.bin-writer-splash-pipe=5

6
7
8

razvan@asgard:/proc/3066$ cat environ


SSH_AGENT_PID=2950SHELL=/bin/bashGTK_RC_FILES=/etc/gtk/gtkrc:/home/razvan
/.gtkrc-1.2-gnome2OLDPWD=/usr/lib/openofficeUSER=
razvanOPENOFFICE_MOZILLA_FIVE_HOME=/usr/lib/openoffice/
programLD_LIBRARY_PATH=/usr/lib/openoffice/program
[...]

printre altele, informat, ii referitoare la utilizatorul ce det, ine fis, ierul


Fis, ierul status ofera,
executabil (uid 1000), starea procesului (S sleep), cantitatea de memorie ocupate,

numarul
de thread-uri etc:
1
2
3
4
5
6
7
8
9
10
11

razvan@asgard:/proc/3066$ cat status


Name:
soffice.bin
State: S (sleeping)
SleepAVG:
98%
[...]
Uid:
1000
1000
1000
1000
Gid:
1000
1000
1000
1000
[...]
VmPeak:
205720 kB
VmSize:
202392 kB
VmLck:
0 kB

CAPITOLUL 5. PROCESE
12
13
14
15
16

VmHWM:
VmRSS:
[...]
Threads:
[...]

129

84040 kB
80968 kB
6

pe
Directorul task/ ofera informat, ii despre thread-urile acestui proces. Nu insistam
, es, te aria de cuprindere a acestui capitol.
not, iunea de thread, deoarece depas
1

razvan@asgard:/proc/3066$ cd task/

2
3
4

razvan@asgard:/proc/3066/task$ ls
3066 3067 3068 3069 3070 3071

Directorul fd/ det, ine legaturi


simbolice catre
fis, iere deschise de procesul curent. Se
printre fis, iere deschise, s, i fis, ierul cu extensia .doc care este editat (Raport.doc):
observa,
1

razvan@asgard:/proc/3066$ cd fd/

2
3
4
5

razvan@asgard:/proc/3066/fd$ ls
0 10 12 14 16 18 2
22 24
1 11 13 15 17 19 20 23 25

26
27

28
29

3
30

31
32

33
34

35
36

37
39

4
5

6
7

8
9

6
7
8
9
10
11
12
13
14
15
16

razvan@asgard:/proc/3066/fd$ ls -l
total 38
lr-x------ 1 razvan razvan 64 2009-08-04
l-wx------ 1 razvan razvan 64 2009-08-04
l-wx------ 1 razvan razvan 64 2009-08-04
[...]
lr-x------ 1 razvan razvan 64 2009-08-04
[...]
lrwx------ 1 razvan razvan 64 2009-08-04
doc
[...]

13:31 0 -> /dev/null


13:31 1 -> pipe:[8770]
13:31 10 -> pipe:[9795]
13:31 22 -> /dev/urandom
13:31 34 -> /home/razvan/Raport.

Alte informat, ii utile


n afara informat, iilor despre procese, procfs ofera s, i alte informat, ii utile despre sistem.
Acestea pot fi aflate tot prin accesarea unor fis, iere s, i directoare din /proc. Printre

informat, iile utile (folosite, de asemenea, de diverse utilitare din sistem), se gasesc
informat, ii despre:

procesor: prin accesarea /proc/cpuinfo;


memoria sistemului: prin accesarea /proc/meminfo;
partit, ii: prin accesarea /proc/partitions;
timpul de rulare a sistemului: prin accesarea /proc/uptime;
n plus, accesarea directoarelor de forma /proc/fs/, /proc/net/, ofera informat, ii
suplimentare, permit, nd totodata configurarea unor parametri ai sistemului. Astfel
procfs nu este numai o interfat, a de citire a informat, iilor despre sistem, ci este s, i una de
configurare a unor parametri ai sistemului.

130

5.3

INTRODUCERE N SISTEME DE OPERARE

Rularea proceselor n background.


Daemoni

Job-uri.

Rularea unui proces din interpretorul de comenzi (shell) rezulta de obicei n afis, area unui
rezultat s, i terminarea procesului. Spre exemplu, daca se dores, te afis, area cont, inutului
directorului curent se ruleaza comanda ls. Acest lucru duce la crearea unui proces

fiu din shell, ncarcarea


executabilului /bin/ls s, i execut, ia noului proces ncheiata cu
terminarea acestuia. Dupa terminarea procesului, utilizatorul poate rula un nou proces

prin introducerea comenzii corespunzatoare


la promptul interpretorului.
Un proces care ruleaza conform scenariului de mai sus se spune ca ruleaza n
foreground (n prim plan). Un proces care ruleaza n foreground are acces la
terminalul curent. Altfel spus, procesele care ruleaza n foreground pot citi de la intrarea
standard (standard input) s, i pot afis, a informat, ii la ies, irea standard (standard output).
un proces poate rula n background (n fundal). Un proces care
De partea cealalta,
ruleaza n fundal pierde posibilitatea de a citi de la intrarea standard, dar s, i continua
rularea.

5.3.1

Rularea unui proces n background

Rularea unui proces n fundal se realizeaza cu ajutorul operatorului & dupa comanda.
Acest operator va crea procesul asociat comenzii introduse s, i va fort, a rularea acestuia n
este faptul ca se ofera napoi promptul interpretorului
fundal. Avantajul acestei abordari

De obicei
catre
utilizator, n felul acesta utilizatorul putnd introduce o noua comanda.
acest lucru se realizeaza cnd comanda de executat dureaza mult timp, ca de exemplu

cautarea
unui fis, ier, actualizarea bazei de date de cautare
(updatedb), rularea unui
proces cu interfat, a grafica etc. Procesele care ruleaza n fundal sunt denumite job-uri.
n exemplul de mai jos, se ruleaza comenzile de deschidere a editorului XEmacs s, i a
calculatorului din mediul grafic GNOME. Ambele programe sunt pornite n fundal:
1
2

razvan@asgard:~$ xemacs &


[1] 3418

3
4
5

razvan@asgard:~$ gnome-calculator &


[2] 3420

6
7

razvan@asgard:~$

Dupa rularea unei comenzi n fundal se observa ca apare un mesaj specific de forma
[N] M. n acest format N este indicele job-ului (indicele procesului care ruleaza n
fundal), iar M este identificatorul de proces (pid-ul) pentru job-ul din fundal. Avantajul
acestor procese n fundal, as, a cum a fost precizat s, i mai sus, este faptul ca
rularii
interpretorul de comenzi ofera napoi promptul utilizatorului permit, ndu-i astfel rularea
de noi comenzi.

CAPITOLUL 5. PROCESE

5.3.2

131

Suspendarea unui proces

Un proces care ruleaza n foreground poate fi fort, at sa intre n background (s, i implicit
prin intermediul combinat, iei de taste CTRL-Z
sa intre n starea suspendat nu ruleaza)

(control t, inut apasat,


dupa care se apasa z). Apasarea
acestei combinat, ii de taste este
interceptata de sistemul de operare s, i procesul activ (aflat n foreground) este fort, at sa
fie suspendat.
n exemplul de mai jos, utilizatorul a dorit editarea fis, ierului out.txt folosind vi.
Procesul creat prin execut, ia comenzii vi out.txt ruleaza init, ial n foreground.

Utilizatorul a apasat
apoi CTRL-Z s, i a fort, at suspendarea procesului curent n

background s, i oferirea promptului catre


utilizator:
1
2

razvan@asgard:~$ vi out.txt
[3]+ Stopped

vi out.txt

3
4

razvan@asgard:~$

Se observa ca procesul a fost suspendat (stopped) s, i s-a creat jobul cu numarul


3.
ator

Un scenariu aseman
este prezentat s, i n exemplul de mai jos. De data aceasta
utilizatorul foloses, te utilitarul du pentru a vedea spat, iul ocupat de fis, ierele s, i directoarele
din directorul curent:
1
2
3
4
5
6
7
8
9
10
11
12
13

razvan@asgard:~$ du -hs *
1022M
Desktop
12K
Download
528K
bin
24M
books
756K
code
532K
junk
3.2M
official
4.0K
out.txt
29M
packages
165M
people
617M
pictures
116M
projects

14
15

[4]+

Stopped

du -hs *

16
17

razvan@asgard:~$

5.3.3

Controlul job-urilor

Termenul de job a fost introdus referitor la procesele care ruleaza sau sunt suspendate
n fundal. Interpretorul de comenzi (shell-ul) bash pune la dispozit, ia utilizatorului mai

multe comenzi prin intermediul carora


se poate interact, iona cu procesele din fundal. Mai

multe informat, ii despre aceste comenzi pot fi gasite


prin consultarea paginii de manual
(man bash, sect, iunea JOB CONTROL) sau pagina info (info bash, sect, iunea JOB
CONTROL. Trebuie instalat pachetul bash-doc).

132

INTRODUCERE N SISTEME DE OPERARE

Comanda jobs
Comanda jobs afis, eaza job-urile pentru terminalul curent:
1
2
3
4
5

razvan@asgard:~$ jobs
[1]
Running
[2]
Running
[3]- Stopped
[4]+ Stopped

xemacs &
gnome-calculator &
vi out.txt
du -hs *

6
7

razvan@asgard:~$

Se poate observa ca sunt patru job-uri dintre care doua sunt n rulare (Running) iar
celelalte doua sunt suspendate (Stopped). Semnul + este folosit pentru job-ul curent
(cel mai recent job). Semnul - este folosit pentru job-ul anterior job-ului curent.

Comenzile bg s, i fg
Utilizatorul poate determina rularea comenzilor care sunt suspendate (fie au fost pornite
n fundal, fie au fost suspendate prin combinat, ia de taste CTRL-Z). Aceste procese s, i
pot continua execut, ia n foreground sau n background. Daca se dores, te continuarea n
background a execut, iei unui job suspendat, se foloses, te comanda bg; daca se dores, te
continuarea execut, iei n foreground a unui job suspendat, se foloses, te comanda fg.
n exemplul de mai jos, utilizatorul a decis continuarea execut, iei job-ului [4] n
a niciun parametru are ca efect continuarea
background. Rularea comenzii bg far
job-ului curent. Daca se dores, te rularea job-ului n, se foloses, te argumentul %n (spre
exemplu bg %5 pentru rularea n background a job-ului cu indicele 5).
1
2
3
4
5

razvan@asgard:~$ bg %4
[4]+ du -hs * &
1.2G
school
2.5M
shared-projects
1.7G
vmware

6
7
8
9
10
11

razvan@asgard:~$ jobs
[1]
Running
[2]
Running
[3]+ Stopped
[4]- Done

xemacs &
gnome-calculator &
vi out.txt
du -hs *

12
13
14
15
16

razvan@asgard:~$ jobs
[1]
Running
[2]- Running
[3]+ Stopped

xemacs &
gnome-calculator &

Se poate observa ca s-a continuat rularea job-ului [4] n background dupa care procesul
asociat s-a terminat.
unor job-uri. Spre exemplu, daca vom
Mesajul Done este afis, at la ncheierea rularii
nchide din mediul grafic gnome-calculator s, i xemacs, mesajele afis, ate vor fi
atoare

aseman
cu cele de mai jos:
1
2
3

razvan@asgard:~$
[1]
Done
[2]- Done

xemacs
gnome-calculator

CAPITOLUL 5. PROCESE

133

4
5
6

razvan@asgard:~$ jobs
[3]+ Stopped

vi out.txt

Dupa terminarea celor doua job-uri, mai ramne


n background doar job-ul 3 (cel asociat

editorului vi). Avnd n vedere ca este singurul proces ramas,


vi poate fi adus n
foreground utiliznd comanda fg sau fg %3:
1
2

razvan@asgard:~$ fg
vi out.txt

Dupa rularea acestei comenzi, utilizatorul poate continua editarea fis, ierului out.txt.

5.3.4

Daemoni

Un daemon este un tip particular de proces care ruleaza n fundal. Fat, a de


procesele care ruleaza n fundal (pornite prin intermediul operatorului &) sau care
sunt suspendate n fundal (prin intermediul combinat, iei CTRL-Z), un daemon se
detas, eaza de terminalul de control.
Astfel, un daemon nu va putea comunica direct cu utilizatorul prin intermediul
terminalului: nu va accepta comenzi de control de la tastatura s, i nu va afis, a rezultate la
terminal. Comunicarea cu un daemon se face prin mecanisme mai complicate (ca de
exemplu semnale vezi sect, iunea 5.4).
a o
Init, ial denumirea de daemon nu a avut nicio semnificat, ie. Ulterior a fost gasit
abreviere pentru aceasta (backronym) de la Disk And Execution MONitor.
De obicei, procesele care sunt daemoni au numele terminat n d: hald, udevd, sshd,
a a fi nsa o regula).

inetd etc. (far


Pentru selectarea proceselor care nu au atas, ate niciun terminal (s, i ca atare pot fi
daemoni), se foloses, te ps cu argumentul -t (pentru select, ia dupa terminal) urmat de
opt, iunea - (semnul minus nseamna procesele care nu au atas, ate niciun terminal).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

razvan@asgard:~$ ps -t PID TTY


TIME CMD
1 ?
00:00:00 init
2 ?
00:00:00 ksoftirqd/0
3 ?
00:00:00 events/0
[..]
2657 ?
00:00:00 exim4
2665 ?
00:00:00 fbguard
2666 ?
00:00:00 fbserver
2676 ?
00:00:00 inetd
2689 ?
00:00:00 sshd
2695 ?
00:00:00 vsftpd
[...]
3006 ?
00:00:02 gedit
3009 ?
00:00:00 gnome-screensav
3016 ?
00:00:00 gnome-terminal
3017 ?
00:00:00 gnome-pty-helper

Se observa ca nu toate procesele care nu au atas, ate un terminal sunt procese

daemon. Spre exemplu, procesul gedit (pid 3006) nu este un daemon n adevaratul

134

INTRODUCERE N SISTEME DE OPERARE

sens al cuvntului. Des, i nu are atas, at niciun terminal de control, se poate comunica
prin intermediul mediului grafic. n plus fat, a de a nu avea asociat niciun terminal, un
directe
proces daemon va rula n background, eliminnd posibilitatea comunicarii

(tastatura/mouse)
cu utilizatorul.

Interact, iunea cu procesele daemon


Se pune nsa ntrebarea cum poate utilizatorul sa interact, ioneze cu procesele daemon,

s, i ies, irii standard. Cele doua


n masura
n care nu o poate face prin intermediul intrarii
mecanisme care permit acest lucru sunt fis, ierul/fis, ierele de configurare s, i semnalele.
n general, procesele daemon au unul sau mai multe fis, iere de configurare. De exemplu:

server-ul web apache2 foloses, te /etc/apache2/apache2.conf;


server-ul SSH openssh foloses, te /etc/ssh/sshd_config;
server-ul X (mediul grafic) foloses, te /etc/X11/xorg.conf;
procesului daemon s, i permit
Aceste fis, iere de configurare sunt citite n momentul crearii
acestuia. De exemplu, n cazul server-ului openssh, fis, ierul de
controlul funct, ionarii
configurare permite controlul tipului de autentificare (cu parola sau prin chei publice),
daca serverul permite X forwarding etc.
portul pe care serverul asculta,
Daca se dores, te alterarea comportamentului server-ului, se editeaza fis, ierul de
configurare. Dupa salvarea fis, ierului, trebuie repornit procesul daemon, acesta va citi
fis, ierul de configurare s, i va stabili noul comportament conform configurat, iei din fis, ier.
Oprirea, suspendarea s, i repornirea unui proces, n general, s, i a unui daemon, n
particular, se realizeaza cu ajutorul semnalelor. Daca n cazul unui proces care nu este
daemon, acesta poate fi oprit sau suspendat s, i prin intermediul terminalului (prin
combinat, ii de taste), un proces daemon poate fi oprit/suspendat/repornit doar cu
ajutorul semnalelor. Despre semnale se va discuta n sect, iunea 5.4.

Comanda nohup
Comanda nohup poate fi utilizata pentru a rula un proces cu caracteristici de daemon.

Utilizarea acestei comenzi determina ignorarea de catre


proces a semnalului SIGHUP

(acest semnal este trimis de un terminal catre


procesele sale copil atunci cnd este
aseasc

nchis). nohup este folosit, de obicei, atunci cnd utilizatorul va dori sa par
a
terminalul dar comanda sa fie rulata n continuare. Comanda nohup este urmata de
comanda ce va fi rulata pentru pornirea procesului s, i de caracterul &. Un exemplu este
prezentat n continuare:
1
2

asgard:/home/razvan# nohup updatedb &


[1] 3116

3
4

asgard:/home/razvan# nohup: appending output to nohup.out

5
6
7
8
9

asgard:/home/razvan# ps -e
[...]
3116 pts/1
00:00:00 updatedb
3124 pts/1
00:00:00 updatedb

CAPITOLUL 5. PROCESE
10
11
12
13

3125
3126
3127
3129

pts/1
pts/1
pts/1
pts/1

00:00:00
00:00:00
00:00:00
00:00:00

135
find
sort
frcode
ps

Se observa ca procesul creat (updatedb) nu pierde controlul terminalului curent, nsa


nu se poate comunica cu acesta prin intermediul semnalelor de suspendare/repornire

cum reiese s, i din rezultatul rularii


comenzii, ies, irea
sau intrarii/ies
, irii standard. Dupa
acesteia este redirect, ionata n fis, ierul nohup.out.

5.4

Semnale

Semnalele sunt mecanisme de notificare asincrona care sunt utilizate pentru a


transmite o condit, ie speciala unui proces.
Semnalele sunt asincrone n raport cu fluxul de rulare al procesului. Astfel, un semnal
nu este corelat direct cu instruct, iunile executate de proces, putnd fi transmis/primit la
un moment de timp nes, tiut de proces.
Semnalele sunt transmise n doua moduri:

de nucleu (kernel) pentru a indica o condit, ie neobis, nuita care solicita


oprirea/suspendarea sau doar notificarea procesului;

de utilizator.

Semnale care sunt transmise uzual de nucleu sunt urmatoarele


(aceste semnale se pot

trimite s, i de catre
utilizator, dar cel mai adesea tunt trimise de catre
nucleu):
invalide a unei zone
SIGSEGV (signal segment violation): n momentul accesarii
de memorie;

SIGBUS n momentul unei erori pe magistrala sistemului;


SIGFPE (signal floating point error ): n momentul aparit, iei unei erori de virgula

mobila;

SIGTERM (signal termination): pentru oprirea unui proces;


SIGKILL (signal kill): pentru oprirea necondit, ionata a unui proces.
Semnale care sunt transmise uzual de utilizator sunt:

SIGINT (signal interrupt): ntrerupe procesul curent;


SIGQUIT (signal quit): semnaleaza oprirea procesului curent;
SIGSTOP (signal stop): suspenda procesul curent;
SIGCONT (signal continue): repornes, te procesul suspendat.
Nu vom insista pe modul s, i condit, iile n care nucleul transmite semnale unui proces, ci pe
modul n care utilizatorul le transmite. Utilizatorul poate transmite unui proces semnale
n doua moduri:

prin intermediul unor comenzi specifice: kill, killall; (vezi sect, iunea 5.4.2)

136

INTRODUCERE N SISTEME DE OPERARE

prin intermediul unor combinat, ii de taste specifice. (vezi sect, iunea 5.4.3)
Informat, ii detaliate despre semnale se pot afla prin consultarea paginii de manual (man
7 signal).

5.4.1

Semnale importante UNIX

nainte de a discuta despre modul de interact, iune a utilizatorului cu procesele prin


intermediul semnalelor, trebuiesc amintite cteva semnale importante (unele
ment, ionate s, i anterior). Lista completa cu semnalele pe care le ofera sistemul de
operare poate fi vizualizata folosind comanda kill cu opt, iunea -l (list):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

razvan@asgard:~$ kill -l
1) SIGHUP
2) SIGINT
5) SIGTRAP
6) SIGABRT
9) SIGKILL
10) SIGUSR1
13) SIGPIPE
14) SIGALRM
17) SIGCHLD
18) SIGCONT
21) SIGTTIN
22) SIGTTOU
25) SIGXFSZ
26) SIGVTALRM
29) SIGIO
30) SIGPWR
35) SIGRTMIN+1 36) SIGRTMIN+2
39) SIGRTMIN+5 40) SIGRTMIN+6
43) SIGRTMIN+9 44) SIGRTMIN+10
47) SIGRTMIN+13 48) SIGRTMIN+14
51) SIGRTMAX-13 52) SIGRTMAX-12
55) SIGRTMAX-9 56) SIGRTMAX-8
59) SIGRTMAX-5 60) SIGRTMAX-4
63) SIGRTMAX-1 64) SIGRTMAX

3)
7)
11)
15)
19)
23)
27)
31)
37)
41)
45)
49)
53)
57)
61)

SIGQUIT
SIGBUS
SIGSEGV
SIGTERM
SIGSTOP
SIGURG
SIGPROF
SIGSYS
SIGRTMIN+3
SIGRTMIN+7
SIGRTMIN+11
SIGRTMIN+15
SIGRTMAX-11
SIGRTMAX-7
SIGRTMAX-3

4)
8)
12)
16)
20)
24)
28)
34)
38)
42)
46)
50)
54)
58)
62)

SIGILL
SIGFPE
SIGUSR2
SIGSTKFLT
SIGTSTP
SIGXCPU
SIGWINCH
SIGRTMIN
SIGRTMIN+4
SIGRTMIN+8
SIGRTMIN+12
SIGRTMAX-14
SIGRTMAX-10
SIGRTMAX-6
SIGRTMAX-2

de identificare s, i un nume care ofera indicat, ii


Se observa ca un semnal are un numar
asupra proceselor. Semnalele relevante sunt cele pna la 31
despre efectul sau
(SIGSYS). Celelalte (SIGRTMIN, SIGRTMAX) sunt semnale de timp real (SIGnal Real
Vom prezenta cteva dintre
Time) s, i nu sunt relevante pentru prezentarea curenta.
semnalele cele mai importante:

SIGHUP (1) (signal hang up): este folosit pentru repornirea unui proces; acest
semnal este de obicei transmis proceselor daemon pentru repornirea acestora s, i
recitirea fis, ierului/fis, ierelor de configurare;

SIGINT (2) (signal interrupt): este folosit pentru a ntrerupe un proces; de obicei,
efectul imediat este terminarea procesului;

SIGQUIT (3) (signal quit): este folosit pentru nchiderea unui proces; este mai
puternic dect SIGINT: unele procese pot fi terminate cu SIGQUIT dar nu cu
SIGINT;

SIGILL (4) (signal illegal): procesul executa o instruct, iune invalida;

SIGKILL (9) (signal kill): cel mai puternic semnal; termina n mod necondit, ionat
un proces

SIGSEGV (11) (signal segment violation): semnal transmis n momentul accesului


de obicei, n terminarea procesului s, i la
invalid la o zona de memorie; rezulta,
aparit, ia mesajului Segmentation fault;

CAPITOLUL 5. PROCESE

137

SIGTERM (15) (signal termination): termina un proces; n mod tipic nucleul


transmite nti SIGTERM unui proces pentru a-l anunt, a ca va fi terminat; procesul
, are (cleanup), dupa care kernel-ul transmite SIGKILL
realizeaza operat, ii de curat
s, i procesul este terminat;

SIGSTOP (19) (signal stop): suspenda procesul curent;


SIGCONT (18) (signal continue): reia execut, ia unui proces suspendat.

5.4.2

Comenzile kill, killall s, i pkill

Comenzile kill, killall s, i pkill sunt utilizate pentru a transmite un semnal unui
proces sau unui set de procese.

Comanda kill
Comanda kill transmite un semnal unui proces. Comanda primes, te ca argument

pid-ul procesului (sau pid-urile proceselor) catre


care se dores, te sa se transmita
semnalul. n mod implicit comanda transmite semnalul SIGTERM:
1
2

razvan@asgard:~$ xcalc &


[1] 3590

3
4
5
6
7
8

razvan@asgard:~$ ps
PID TTY
TIME
3092 pts/1
00:00:00
3590 pts/1
00:00:00
3591 pts/1
00:00:00

CMD
bash
xcalc
ps

9
10

razvan@asgard:~$ kill 3590

11
12
13

razvan@asgard:~$
[1]+ Terminated

xcalc

14
15
16
17
18

razvan@asgard:~$ ps
PID TTY
TIME CMD
3092 pts/1
00:00:00 bash
3592 pts/1
00:00:00 ps

Comanda poate fi configurata pentru a transmite s, i alt semnal n afara de SIGTERM.

Astfel, daca se dores, te transmiterea semnalului SIGSTOP catre


procesele cu pid-urile
1234 s, i 5678, se poate utiliza una din alternativele:
1

razvan@asgard:~$ kill -SIGSTOP 1234 5678

2
3

razvan@asgard:~$ kill -STOP 1234 5678

4
5

razvan@asgard:~$ kill -19 1234 5678

Se observa ca semnalul poate fi transmis ca parametru fie n forma literala (SIGSTOP,

STOP), fie n forma numerica (19).

138

INTRODUCERE N SISTEME DE OPERARE

Comanda killall

Comanda killall este folosita pentru transmiterea unui semnal catre


un proces sau

catre
un set de procese atunci cnd se cunoas, te numele procesului. Un exemplu de
utilizare este prezentat mai jos:
1
2
3
4
5
6

root@asgard:/home/razvan# ps -C apache2 -H
PID TTY
TIME CMD
2792 ?
00:00:00 apache2
2793 ?
00:00:00
apache2
2794 ?
00:00:00
apache2
2796 ?
00:00:00
apache2

7
8

root@asgard:/home/razvan# killall -KILL apache2

9
10
11

root@asgard:/home/razvan# ps -C apache2
PID TTY
TIME CMD

n acest exemplu, s-a trimis semnalul de terminare a unui proces (SIGKILL) catre
toate procesele apache2 din sistem. Modul de transmitere a semnalului ca argument al
comenzii este acelas, i ca n cazul comenzii kill.
O opt, iune care poate fi utila este opt, iunea --user care permite transmiterea unui

semnal catre
toate procesele unui anumit utilizator. Pentru a putea utiliza aceasta
opt, iune, utilizatorul care apeleaza killall trebuie sa fie root:
1
2
3
4
5
6
7
8

root@asgard:/home/razvan# ps -o pid,comm,user -u guest


PID COMMAND
USER
3761 su
guest
3762 bash
guest
3802 su
guest
3803 bash
guest
3822 top
guest
3825 bc
guest

9
10

asgard:/home/razvan# killall --user guest

11
12
13

asgard:/home/razvan# ps -o pid,comm,user -u guest


PID COMMAND
USER

n situat, ia de mai sus s-a transmis semnalul implicit (SIGTERM) catre


toate procesele
utilizatorului guest, rezultnd n terminarea acelor procese.

Comanda pkill
Comanda pkill poate fi comparata cu comanda pgrep. n timp ce comanda pgrep
oferea informat, ii despre procesele care ndeplineau anumite criterii, comanda pkill
transmite un semnal proceselor pe baza unor criterii de select, ie a acestora.

La fel ca n cazul pgrep, select, ia se poate realiza dupa pid-ul procesului parinte,
dupa
terminalul utilizat, dupa id-ul utilizatorului sau al grupului. Argumentul semnal se
transmite la fel ca n cazul comenzilor kill s, i killall.

CAPITOLUL 5. PROCESE

5.4.3

139

Transmiterea de semnale prin combinat, ii de taste

n afara comenzilor de mai sus, un utilizator poate transmite anumite semnale procesului
curent (cel care ruleaza n acel moment n terminal) prin intermediul unor combinat, ii de
taste specifice.
Astfel de combinat, ii sunt:

CTRL-Z: transmite semnalul SIGSTOP catre


procesul curent, care are drept
consecint, a suspendarea acestuia. O situat, ie utila este atunci cnd se ruleaza
editorul vi s, i se dores, te rularea altei comenzi. Se foloses, te CTRL-Z pentru
suspendarea procesului vi s, i revenirea la promptul terminalului, unde poate fi
Dupa introducerea comenzii se foloses, te comanda fg
introdusa noua comanda.
pentru a reactiva procesul vi.

CTRL-C: transmite semnalul SIGINT catre


procesul curent, care, n general, va
omor procesul. De obicei, combinat, ia de taste se foloses, te n cazul n care un
proces este blocat.

CTRL-\: transmite semnalul SIGQUIT. Acesta are acelas, i rol ca s, i CTRL-C, doar
ca este mai puternic.
Trebuie precizat ca nu toate aceste combinat, ii de taste au efect pentru toate procesele,
ntruct unele procese pot ignora semnalele transmise (pot avea un comportament
non-standard la primirea unui semnal).

5.5

Comunicat, ia ntre procese

La fel cum n cadrul unui departament mai mult, i oameni conlucreaza pentru a ndeplini
s, i n cadrul unui sistem de operare procesele acestuia interact, ioneaza.

o sarcina,
Interact, iunea proceselor ntr-un sistem de operare poarta numele de comunicat, ie ntre
procese.
De ce este nevoie de comunicat, ie ntre procese? n primul rnd pentru ca un proces
poate avea nevoie de resursele pe care i le pune la dispozit, ie un alt proces. Spre
exemplu, n cazul utilitarului top, acesta culege informat, ii pe care i le furnizeaza alte
procese prin intermediul nucleului sistemului de operare s, i al sistemului de fis, iere
procfs.
n alta situat, ie, un proces A trebuie sa as, tepte ca un alt proces B sa termine o sarcina
pentru ca A sa poata continua. Aceasta forma de comunicat, ie ntre A s, i B se numes, te
sincronizare: un proces trebuie sa as, tepte un alt proces.
Comunicat, ia ntre procese este intermediata n diverse moduri: cu ajutorul unui fis, ier, a
unui socket, a unei zone de memorie sau a unui canal de comunicat, ie (pipe).
un proces scrie o informat, ie ntr-un
Intermedierea printr-un fis, ier este destul de simpla:
fis, ier, iar un alt proces o cites, te. Nu vom prezenta comunicat, ia prin intermediul unui
, esc aria de cuprindere a acestui
socket sau a unei regiuni de memorie, ntruct depas
despre comunicat, ia prin intermediul unui canal de
capitol. Vom discuta, nsa,
comunicat, ie (pipe).

140

5.5.1

INTRODUCERE N SISTEME DE OPERARE

Operatorul | (pipe)

Operatorul | (pipe) este folosit pentru a asigura comunicat, ia ntre doua procese rulate
folosind un canal de comunicat, ie numit pipe.
din linia de comanda,
at
, ire a comunicat, iei prin
Comunicat, ia prin intermediul unui pipe este o mbunat
intermediul unui fis, ier. Astfel, n cazul comunicat, iei prin intermediul unui fis, ier, un
proces scrie datele de ies, ire ntr-un fis, ier iar un alt proces foloses, te acel fis, ier ca
intrare. n cazul comunicat, iei prin pipe, ies, irea primului proces este folosita direct ca
a a mai fi nevoie de un fis, ier pe disc.
intrare pentru al doilea, far
Vom folosi pentru exemplificare comanda grep, care cauta un cuvnt n cadrul unui
spre exemplu, dorim aflarea de informat, ii despre procesele bash din sistem
fis, ier. Daca,
sa redirectam
ies, irea comenzii ps ntr-un fis, ier,
folosind grep, ar trebui, n prima faza,
iar apoi sa folosim grep pe acel fis, ier, ca n exemplul de mai jos:
1

razvan@asgard:~$ ps -e > ps.out

2
3
4
5
6
7
8
9
10
11

razvan@asgard:~$ grep bash ps.out


3029 pts/0
00:00:00 bash
3092 pts/1
00:00:00 bash
3299 pts/2
00:00:00 bash
3317 pts/2
00:00:00 bash
3740 pts/3
00:00:00 bash
3758 pts/3
00:00:00 bash
3781 pts/4
00:00:00 bash
3799 pts/4
00:00:00 bash

a a
Acelas, i rezultat ca mai sus poate fi nsa realizat prin intermediul operatorului |, far
mai fi nevoie de intermedierea printr-un fis, ier:
1
2
3
4
5
6
7
8
9

razvan@asgard:~$ ps -e | grep bash


3029 pts/0
00:00:00 bash
3092 pts/1
00:00:00 bash
3299 pts/2
00:00:00 bash
3317 pts/2
00:00:00 bash
3740 pts/3
00:00:00 bash
3758 pts/3
00:00:00 bash
3781 pts/4
00:00:00 bash
3799 pts/4
00:00:00 bash

Pentru a exemplifica puterea acestui operator vom considera urmatoarea


problema:
primii 3 utilizatori din sistem care au directorul de baza n /home,
dorim sa aflam
ordonat, i n ordinea alfabetica a numelui de utilizator.

Informat, ii despre utilizatorii din sistem se gasesc


n /etc/passwd. Vom folosi grep
pentru a extrage utilizatorii care au directorul de baza n /home:
1
2
3
4
5

razvan@asgard:~$ cat /etc/passwd | grep /home


razvan:x:1000:1000:razvan,,,:/home/razvan:/bin/bash
haldaemon:x:105:106:Hardware abstraction layer,,,:/home/haldaemon:/bin/
false
guest:x:1001:1001:Guest Account,,,:/home/guest:/bin/bash
ftp:x:107:65534::/home/ftp:/bin/false

n continuare vom sorta rezultatul obt, inut, dupa care vom ret, ine numai primele 3 intrari:
1

razvan@asgard:~$ cat /etc/passwd | grep /home | sort

CAPITOLUL 5. PROCESE
2
3
4
5

141

ftp:x:107:65534::/home/ftp:/bin/false
guest:x:1001:1001:Guest Account,,,:/home/guest:/bin/bash
haldaemon:x:105:106:Hardware abstraction layer,,,:/home/haldaemon:/bin/
false
razvan:x:1000:1000:razvan,,,:/home/razvan:/bin/bash

6
7
8
9
10

razvan@asgard:~$ cat /etc/passwd | grep /home | sort | head -3


ftp:x:107:65534::/home/ftp:/bin/false
guest:x:1001:1001:Guest Account,,,:/home/guest:/bin/bash
haldaemon:x:105:106:Hardware abstraction layer,,,:/home/haldaemon:/bin/
false

5.6

Swapping

Un concept important n studiul sistemelor de operare s, i al proceselor acestora este


a compensare a cantitat
, ii insuficiente
conceptul de swapping. Swapping este o masur
de memorie RAM de care dispune un sistem la un moment dat. Pentru compensare,
sistemul de operare va folosi o port, iune din disc pentru stocarea datelor din RAM.

n cazul unui sistem ncarcat


(cu multe procese), memoria RAM se poate dovedi
insuficienta pentru a satisface toate procesele. n aceasta situat, ie o parte din paginile
de memorie din RAM sunt evacuate (swapped) pe disc pentru a face loc pentru paginile
n momentul n care paginile evacuate sunt din
de memorie utile n momentul de fat, a.
nou necesare, se vor evacua alte pagini pentru a se aduce la loc cele curente.
Principiul swapping-ului este prezentat n figura de mai jos:

Figura 5.3: Swaping


Pe sistemele Linux swapping-ul este realizat n general pe partit, ii dedicate (partit, ia de
swap vezi sect, iunea 2.2.2), care sunt folosite n cazul n care memoria din sistem este
n cazul Windows, spat, iul de swap alocat din partit, iile sistemului, fiind
insuficienta.
utilizate n acest scop fis, iere. Pentru a afla informat, ii despre spat, iul de swap utilizat n

Linux se poate folosi comanda free (aceste informat, ii se gasesc


s, i n zona de
sumarizare din ecranul top):
1
2
3
4
5

razvan@asgard:~$ free
total
Mem:
514748
-/+ buffers/cache:
Swap:
497972

used
336876
131784
0

free
177872
382964
497972

shared
0

buffers
19892

cached
185200

142

INTRODUCERE N SISTEME DE OPERARE

Se observa ca sistemul beneficiaza de 512 MB de memorie RAM s, i nu este folosit spat, iul
de swap.

5.7
5.7.1

Studii de caz
Managementul proceselor/serviciilor pe Windows

atoare

n Windows, un proces are caracteristici aseman


cu procesele din Linux. Totus, i,
des, i un proces este creat prin intermediul altui proces, nu exista o ierarhie de procese s, i

nici not, iunea directa de proces parinte


s, i proces fiu. La fel ca n Linux, un proces este
identificat printr-un PID, are asociate zone de memorie s, i fis, iere deschise etc.

Task manager
Interfat, a de vizualizare s, i gestiune a proceselor n Windows este asigurata de Task
Manager. Pentru pornirea acestuia se foloses, te combinat, ia de taste CTRL-ALT-DEL
sau CTRL-SHIFT-ESC sau click dreapta pe bara de task-uri s, i selectarea opt, iunii
Task Manager din meniu.

Figura 5.4: Windows Task Manager


Task Manager poate fi comparat cu utilitarul top. Afis, eaza informat, ii despre procese s, i

despre sistem s, i poate fi configurat pentru personalizarea afis, arii


sau pentru
interact, iunea cu procesele din sistem.
n mod implicit, Task Manager afis, eaza numele programului care a generat procesul,

utilizatorul care a creat procesul, procentajul de procesor folosit s, i memoria utilizata.


Daca se dores, te afis, area altor cmpuri se poate accesa meniul View->Select

CAPITOLUL 5. PROCESE

143

maximul de
Se pot afis, a PID-ul procesului, memoria virtuala utilizata,

memorie utilizat, numarul de fis, iere deschise, numarul de thread-uri etc.

Columns.

proceselor din sistem, Task Manager mai ofera urmatoarele

n afara vizualizarii
servicii:

permite crearea unui nou proces prin introducerea imaginii de executabil asociate
(File->New Task (Run...));
permite monitorizarea s, i analiza performant, ei sistemului, prin accesarea tab-ului
atoare

Performance; informat, iile de aici sunt aseman


cu cele oferite de top n
zona de sumarizare;

permite deconectarea unui utilizator, sau oprirea, repornirea sau suspendarea


sistemului (meniul Shut Down);
permite terminarea unui proces; se selecteaza procesul dorit s, i se apasa butonul
End Process.
, ile
Se poate observa ca Windows Task Manager ofera cea mai mare parte din facilitat
furnizate de comenzile Unix de interact, iune cu procese sistemului. Un utilitar puternic
de vizualizare s, i control a proceselor pe Windows este ProcessExplorer1 .

Services
n Windows, procesele daemon poarta numele de servicii. Ca s, i n Linux, serviciile sunt
procese care ruleaza n background s, i sunt folosite pentru monitorizarea s, i ntret, inerea
sistemului.
n Windows XP, prin
Fereastra de interact, iune cu serviciile Windows este afis, ata,
accesarea Start->Control Panel->Administrative Tools->Services
sau click dreapta pe My Computer->Manage->Services.
Ecranul afis, at prezinta toate serviciile sistemului. Coloanale afis, ate indica numele
serviciului, o scurta descriere, starea lui (oprit sau pornit), modul de pornire a serviciului
(dezactivat, manual sau automat s, i, la Windows Vista, ntarziat). Pentru pornirea,
oprirea sau repornirea serviciului, ca s, i pentru schimbarea modului de pornire, se
acceseaza meniul contextual al serviciului (click dreapta) s, i se selecteaza opt, iunea
Properties:

5.7.2

Procese importante

Orice sistem de operare det, ine un set de procese cu rol important n rularea s, i
ntret, inerea sistemului de operare.

Procese importante Linux


Procese importante n Linux sunt:
1

http://www.microsoft.com/technet/sysinternals/utilities/ProcessExplorer.mspx

144

INTRODUCERE N SISTEME DE OPERARE

Figura 5.5: Windows Services

Figura 5.6: Interfat, a de control a serviciului Windows de DNS

init: este procesul cu pid-ul 1 n sistemele Unix s, i este parintele


tuturor
nu se limiteaza doar la a porni celelalte procese importante
proceselor; rolul sau

CAPITOLUL 5. PROCESE

145

n sistem ci s, i de a deveni procesul parinte


pentru procesele ramase
orfane;

kswapd (kernel swap daemon): este responsabil cu alegerea paginilor de


memorie care vor fi evacuate pe disc n momentul n care memoria este

insuficienta;

pdflush (page daemon): este responsabil cu asigurarea consistent, ei buffer-elor


folosite de sitemul de fis, iere;

getty: este procesul resposabil cu autentificarea n sistem n terminalele virtuale;


getty ofera promptul login : utilizatorului;

Xorg: este procesul resposabil cu pornirea interfet, ei grafice s, i are asociat


terminalul virtual tty7 (ce poate fi accesat prin combinat, ia ALT+CTRL-F7).

Procese importante Windows


n Windows procese importante sunt:

lsass (Local Security and Authentication Server ): verifica validitatea autentificarii


corecte genereaza un jeton folosit pentru
utilizatorilor; n cazul unei autentificari
deschiderea unei prime sesiuni shell pe sistem; lsass este s, i numele unui virus;

svchost (Generic Host Process for Win32 Services): este procesul folosit pentru
gestiunea serviciilor din Windows;

csrss (Client/Server Run-time Subsystem): este responsabil pentru crearea


ferestrelor de consola s, i gestiunea thread-urilor;

winlogon: este o componenta esent, iala a subsistemului de autentificare n


Windows;

explorer: este este shell-ul unui sistem Windows, nsa cu interfat, a grafica.
, i la1 .
Mai multe informat, ii despre procesele importante Windows gasit

5.7.3

Prioritatea unui proces

n sistemele de operare moderne, procesele au asociata o prioritate. Aceasta


influent, eaza probababilitatea ca un proces sa fie planificat pe procesor: cu ct un

proces are o prioritate mai mare, cu att probabilitatea ca el sa fie urmatorul


proces
planificat pentru execut, ie cres, te. De obicei procesele care se blocheaza des (denumite
I/O intensive) au asociate o prioritate mai mare, n timp ce procesele care utilizeaza

intens procesorul (CPU intensive), au o prioritate mai mica.


Sistemul de operare poate modifica prioritatea
Prioritatea proceselor nu este fixa.

s, i utilizatorul poate modifica


proceselor pentru a asigura echitatea planificarii.
Totodata,
prioritatea unui proces daca dores, te acest lucru.
1

http://www.neuber.com/taskmanager/process/

146

INTRODUCERE N SISTEME DE OPERARE

, ii unui proces n Linux


Schimbarea prioritat
n Linux, prioritatea unui proces poarta numele de niceness (ct de echitabil se
comporta un proces raportat la celelalte). Un proces are o prioritate mai mare cu ct
Valorea nice pentru un proces se ncadreaza n limitele
valoarea sa nice este mai mica.
[-20, 19]. -20 nseamna un proces maxim prioritar, n timp ce 19 nseamna un proces
minim prioritar.
Prioritatea unui proces ntr-un sistem Linux se afla folosind ps s, i opt, iunea nice:
1
2
3
4
5
6
7
8
9
10
11
12
13

razvan@asgard:~$ ps -e -o pid,tty,comm,nice --sort nice


PID TT
COMMAND
NI
3 ?
events/0
-5
4 ?
khelper
-5
5 ?
kthread
-5
8 ?
kblockd/0
-5
9 ?
kacpid
-5
[...]
1 ?
init
0
[...]
3799 pts/4
bash
0
4009 pts/1
ps
0
2 ?
ksoftirqd/0
19

Majoritatea proceselor pornesc cu prioritatea 0. Pentru a modifica prioritatea de start a


unui proces se foloses, te comanda nice, folosind argumentul -n:
1
2

razvan@asgard:~$ nice -n -10 ps -e -o pid,tty,comm,ni


nice: cannot set niceness: Permission denied

3
4
5
6

razvan@asgard:~$ nice -n 15 ps -C ps -o pid,tty,comm,ni


PID TT
COMMAND
NI
4051 pts/1
ps
15

7
8
9
10

asgard:/home/razvan# nice -n -10 ps -C ps -o pid,tty,comm,ni


PID TT
COMMAND
NI
4048 pts/2
ps
-10

Se poate observa ca un utilizator neprivilegiat nu poate stabili o prioritate negativa


dar poate stabili una pozitiva (mai slaba).
Utilizatorul root poate modifica
(puternica),
prioritarea unui proces n orice direct, ie.
, ii unui proces se poate realizeaza prin intermediul
Schimbarea n timp real a prioritat
top. n ecranul top se foloses, te tasta r (renice). Zona de comanda ofera promptul PID

to renice: n care se introduce pid-ul procesului a carui


prioritate va fi schimbata.
Dupa aceasta se va cere introducerea unei valori nice asociata procesului. Un utilizator
neprivilegiat poate doar incrementa valoarea nice a unui proces (l va face mai put, in
prioritar).

, ii unui proces n Windows


Schimbarea prioritat
n Windows, utilizatorul poate stabili prioritatea unui proces la nis, te valori cu granularitate
mai mare: High, Very High, Normal etc. Pentru aceasta se foloses, te tot interfat, a pusa
la dispozit, ie de Task Manager. Pentru alterarea prioritat, ii unui proces, se realizeaza

CAPITOLUL 5. PROCESE

147

click dreapta pe intrarea asociata procesului, se alege opt, iunea Set priority s, i apoi
Un exemplu se poate gasi
n figura de mai jos:
se stabiles, te prioritatea dorita.

, ii unui proces n Windows


Figura 5.7: Stabilirea prioritat

Cuvinte cheie

proces

top

program

background

pid

foreground

procfs

operatorul &

interactivitatea unui proces

bg, fg

context switch

suspendarea unui proces

cuanta de timp

terminal

multitasking

proces daemon

ierarhie de procese

nohup

init

semnal

ps

kill

pstree

killall, pkill

pgrep

CTRL-Z, CTRL-C, CTRL- CTRL-X

148

INTRODUCERE N SISTEME DE OPERARE

operatorul |
Task manager
Services
init, kswapd, pdflush, getty

lsass, svchost, csrss


prioritatea unui proces
nice

ntrebari

1. Care din urmatoarele


este un proces important Unix?

q ps
q SIGQUIT
q init
q lsass

2. Care utilitar NU poate fi folosit pentru a transmite semnale catre


un proces?

q kill
q top
q nohup
q killall
3. Cte procese init pot exista la un moment dat ntr-un sistem Linux?

q 1
q cte unul per procesor
q niciunul
q oricte
4. Cte procese bash pot exista la un moment dat ntr-un sistem Linux?

q 1
q cte unul per procesor
q niciunul
q oricte

5. Care din urmatoarele


comenzi NU afis, eaza PID-ul unui proces?

q ps
q pgrep
q kill
q top
6. n Linux orice program poate fi imaginea unui singur proces. Comanda top NU
afis, eaza PID-urilor proceselor din sistem.

CAPITOLUL 5. PROCESE

149

q adevarat,
adevarat

q adevarat,
fals

q fals, adevarat

q fals, fals

7. Care comanda poate produce aceleas, i efecte ca apasarea


combinat, iei de taste
CTRL-Z?

q pkill
q ps
q operatorul &
q fg
8. Ce director din sistemul de fis, iere ofera informat, ii despre procese?

q /sys
q /proc
q /home
q /
,i
9. n Linux procesele NU au pid-uri negative. n Linux procesele NU au prioritat
negative.

q adevarat,
adevarat

q adevarat,
fals

q fals, adevarat

q fals, fals

10. Care asociere NU este valida?

q Task Manager top


q serviciu daemon
q explorer nice
q lsass getty

Capitolul 6
Pornirea s, i init, ializarea sistemului
Press Ctrl-Alt-Del now for IQ test.

Ce se nvat, a din acest capitol?

Pornirea sistemului; conceptul de bootstrapping


Not, iunea de multitasking
Fazele pornirii sistemului
BIOS (POST, CMOS)
Dispozitive boot-abile, sector bootabil (MBR/VBR)
Rolul unui bootloader
GRUB: rulare s, i configurare

ncarcarea
nucleului Linux

Init, ializarea unui sistem Linux: init/upstart s, i pornirea serviciilor


Pornirea s, i init, ializarea Windows
Not, iuni de interoperabilitate Linux-Windows

6.1

Pornirea sistemului

Pornirea s, i init, ializarea sistemului se refera la mecanismele prin care sistemul de operare

s, i aplicat, iile de baza ajung sa fie ncarcate


s, i folosite de utilizator.
de obicei, prin apasarea

Pornirea sistemului se realizeaza,


unui buton specific de pe
n sens mai larg, ne vom referi la pornirea sistemului ca fiind o act, iune
unitatea centrala.
compusa ce cuprinde att init, ializarea hardware ct s, i cea software.
151

152

INTRODUCERE N SISTEME DE OPERARE

Init, ializarea hardware presupune verificarea s, i configurarea componentelor hardware.


Aceasta se executa n doua situat, ii: atunci cnd sistemul trece din starea oprit n starea
pornit (power on) s, i atunci cnd sistemul este reinit, ializat (reset, reboot).
Act, iunea de power on se refera la activarea sistemului din momentul n care acesta era
oprit, de cele mai multe ori prin intermediul butonului de pornire1 . Repornirea sistemului
se refera la reactivarea sistemului: din starea pornit, eventual rulnd o instant, a a unui
sistem de operare, sistemul este repornit (fie prin intermediul butonului Reset, fie printr-o
comanda data sistemului de operare).

Init, ializarea software presupune ncarcarea


sistemului de operare. Nu vom considera

rularea anumitor aplicat, ii peste sistemul de operare ca facnd


parte din init, ializarea
software.
Pornirea sistemului prezinta un set de etape care vor fi precizate n continuare.

6.1.1

Problematica pornirii sistemului bootstrapping

Pornirea sistemului fizic s, i ncarcarea


sistemului de operare poarta numele de
booting sau de bootstrapping.
Denumirea de bootstrapping s, i are originea n Baronul de Mnchhausen. ntr-o poveste

a acestuia, el reus, es, te sa se salveze de la nec tragndu-se


de baierele cizmelor (boot
strap = baiera).
Analogia cu aceasta poveste se reflecta n faptul ca sistemul
= cizma,

a existent, a unui alt sistem de operare.


de operare trebuie ncarcat
far
Un procesor poate executa numai cod aflat n memoria ROM2 sau n memoria RAM.
sistemul de operare muta codul acesteia n
Atunci cnd o aplicat, ie trebuie executata,
memoria RAM s, i procesorul ncepe execut, ia aplicat, iei.
Apare astfel ntrebarea: cum se ncarca n memorie sistemul de operare, daca nu exista
un alt sistem de operare care sa l ncarce ? Aparent, trebuie sa ne tragem de baierele
Vom vedea, nsa,
ca exista un set de etape care
cizmelor pentru a ne scoate din apa.

se vor parcurge succesiv pentru ncarcarea diverselor componente pna la ncarcarea


completa a sistemului de operare.

6.1.2

Etapele pornirii sistemului

Pornirea sistemului presupune ncarcarea


n memorie a diverselor componente pna la

ncarcarea
completa a sistemului de operare. As, a cum se poate vedea s, i n figura 6.1,
etapele importante ale pornirii sistemului sunt:

ncarcarea
BIOS-ului: presupune ncarcarea
unui program de mici dimensiuni,
s, i care este utilizat pentru
aflat ntr-o memorie dedicata de pe placa de baza,
init, ializarea componentelor hardware;
1

Alternativ fat, a de apasarea


butonului de pornire, un sistem poate fi pornit s, i de la distant, a folosind
WOL http://en.wikipedia.org/wiki/Wake-on-LAN
2
http://en.wikipedia.org/wiki/Read-only_memory

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

153

Figura 6.1: Etapele pornirii sistemului

rularea POST: presupune realizarea unui set de teste hardware ce verifica


funct, ionalitatea de baza a componentelor principale;

ncarcarea
bootloader-ului:

presupune ncarcarea
unui program de mici
dimensiuni destinat copierii codului kernelului ntr-o zona din RAM de unde sa
poata fi executat de procesor;

de baza pe care le realizeaza

ncarcarea
nuclelui: presupune un set de init, ializari
nucleul (kernel-ul) sistemului de operare;

init, ializarea sistemului de operare: presupune pornirea principalelor procese


care asigura utilizarea sistemului de operare.
Etapele prezentate sunt ordonate cronologic: o etapa este rulata s, i, la finalul ei, este
responsabila pentru rularea etapei ulterioare. Vor fi descrise n cadrul acestui capitol
fiecare din fazele prezentate s, i interact, iunea ntre acestea.

6.1.3

BIOS

BIOS-ul (Basic Input Output System) este primul program ncarcat


n momentul pornirii
sistemului. BIOS-ul este responsabil cu verificarea s, i init, ializarea componentelor
hardware.
BIOS-ul este un exemplu de firmware. Firmware-ul este o componenta software
n cazul de fat, a,

distribuita sub forma binara pe un suport de memorie nevolatila.


1
BIOS-ul este stocat pe un chip de memorie ROM de pe placa de baza . La power on
BIOS-ul
sau la reboot BIOS-ul este rulat automat din chip-ul de pe placa de baza.
cunoas, te specificul hardware al sistemului s, i devine responsabil cu init, ializarea
componentelor fizice ale acestuia.

CMOS
Des, i este un program mic s, i limitat la specificul hardware al sistemului, BIOS-ul ofera

optiuni de configurare. Configurarile


BIOS-ului sunt pastrate
ntr-un chip separat de
memorie RAM nevolatila alimentata prin intermediul unei baterii. Aceast chip de
memorie se numes, te CMOS2 Complementary Metal-Oxide Semiconductor. Att

n momentul n care bateria este


chip-ul ct s, i bateria se gasesc
pe placa de baza.
configurarile

scoasa,
BIOS-ului se pierd revenindu-se la configurarile
implicite.
1
2

Memoria este de tip EPROM http://en.wikipedia.org/wiki/EPROM


http://en.wikipedia.org/wiki/Cmos

154

INTRODUCERE N SISTEME DE OPERARE

Figura 6.2: Ecran de configurare CMOS


Configurarea BIOS-ului se realizeaza prin intermediul unui ecran de configurare.
Opt, iunile disponibile includ stabilirea unei parole pe BIOS, selectarea dispozitivului de
care
boot (vezi sect, iunea 6.2.1), alterarea frecvent, ei procesorului s, i alte configurari
depind de placa de baza s, i de componentele hardware existente n sistem.

6.1.4

POST

Etapa de verificare s, i de init, ializarea componentelor hardware ale sistemului (procesor,


memorie, placa video) poarta numele de POST (Power-on Self Test). Daca una dintre

componente prezinta erori s, i nu poate fi init, ializata corespunzator,


atunci BIOS-ul va
emite un set de sunete specifice s, i nu se va continua init, ializarea sistemului.

Dupa verificarea s, i init, ializarea componentelor, BIOS-ul este responsabil cu ncarcarea


bootloader-ului.

6.2

Bootloader

Bootloader -ul este componenta utilizata n principal pentru ncarcarea


imaginii de kernel

ntr-o zona din memori RAM, de unde sa poata fi executata de catre


procesor. Cele
mai multe bootloader -e permit utilizatorului sa aleaga ntre mai multe versiuni de kernel

ce vor fi ncarcate,
selectnd astfel ntre mai multe sisteme de operare. De asemenea,

bootloader -ul permite s, i transmiterea unor opt, iuni de ncarcare


a nucleului sistemului de

operare. Bootloader -ul este ncarcat


n memorie de BIOS.
, te pe primul sector al unui dispozitiv bootabil, denumit s, i
Bootloader -ul se regases
sectorul de boot. Aceasta limitare de dimensiune apare deoarece BIOS-ul poate

ncarca
n memorie un singur sector (512 octet, i). Se poate ntmpla ca bootloader -ul
sa fie prea mare s, i sa nu ncapa n primul sector al dispozitivului boot-abil. n acest caz

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

155

Figura 6.3: BIOS POST (Power-On Self Test)


bootloader -ul se mparte n doua componente. Prima componenta ncape n sectorul
de boot. A doua, second stage, rezidenta pe un spat, iu mai mare de pe hard-disk s, i este

ncarcat
a de catre
prima.
Un astfel de multiple-stage bootloader este GRUB,
bootloader-ul implicit pe majoritatea distribut, iilor Linux.

6.2.1

Dispozitive boot-abile

Un dispozitiv boot-abil este un dispozitiv al carui


prim sector este un sector boot-abil.
Sectorul boot-abil se caracterizeaza prin faptul ca ultimii doi octet, i sunt 0xAA55 (din cei
512).
Exemple de dispozitive ce pot fi boot-abile sunt CD-ROM-uri, hard-disk-uri, floppy
disk-uri, USB flash etc. n cazul acestor dispozitive, daca primul sector are structura

specifica unui sector boot-abil atunci poate fi folosit pentru ncarcarea


altor informat, ii
existente.
Dupa rularea POST, BIOS-ul consulta CMOS s, i urmeaza ordinea de boot-are de acolo.
Astfel, daca CMOS-ul a fost configurat ca n imaginea de mai sus, BIOS-ul va efectua

urmatoarele
operat, ii:

daca HDD-ul are un prim sector bootabil, se va ncarca


s, i se va executa cont, inutul

sectorului; aici se va afla, de obicei, bootloader-ul; n urma execut, iei se va ncarca


sistemul de operare;

daca HDD-ul nu are un prin sector boot-abil, se trece la investigat, ia CD-ROM-ului


din sistem;
se va
se va verifica existent, a unui CD n unitatea de CD-ROM; daca acesta exista,
verifica existent, a sectorului de boot;

156

INTRODUCERE N SISTEME DE OPERARE

Figura 6.4: Alegerea dispozitivului de boot

daca CD-ul are un prim sector bootabil, atunci se va ncarca


s, i se va executa
cont, inutul sectorului de boot; exemple de CD boot-abil sunt CD-ul de instalare a
unui sistem de operare sau un LiveCD;

daca nici CD-ROM-ul nu are un prim sector bootabil atunci se trece la urmatorul
dispozitiv boot-abil (al doilea HDD), care va fi analizat asemenea celor aterioare;

daca nu exista niciun dispozitiv boot-abil, nu se poate ncarca


niciun sistem de
a a executa nimic.
operare; BIOS-ul va afis, a un mesaj specific far

6.2.2

Structura sectorului de boot pentru un dispozitiv boot-abil

Primul sector (primii 512 octet, i) al unui dispozitiv boot-abil poarta denumirea de MBR
(Master Boot Record). Primul sector al unei partit, ii al unui dispozitiv boot-abil partit, ionat
poarta numele de VBR (Volume Boot Record). Dupa cum a fost specificat anterior, un
dispozitiv este boot-abil daca MBR-ul acestuia este un sector boot-abil (are ultimii doi
octet, i 0xAA55, pentru a semnifica faptul ca sectorul cont, ine secvent, e de cod
executabile).

Sectorul de boot poate cont, ine instruct, iuni pentru ncarcarea


unei secvent, e mai mari
de cod (cum este sectorul de boot al unui CD), sau poate cont, ine un bootloader pentru

ncarcarea
sistemului de operare (cum este sectorul de boot al unui hard-disk).

Cont, inutul sectorului de boot este ncarcat


n memorie de BIOS. Dupa aceasta, BIOS-ul
transmite controlul programului rezident n sectorul de boot (bootloader ).
n figura 6.5 este prezentata structura MBR.
exista urmatoarele

Dupa cum se observa,


zone importante:

zona de cod executabil; aceasta cont, ine programul caruia


i este transmis

controlul de catre
BIOS (bootloader );

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

157

Figura 6.5: Structura MBR (Master Boot Record)

tabela de partit, ii cont, ine informat, ii despre partit, iile din sistem; fiecarei
partit, ii i
corespunde o intrare de 16 octet, i;

semnatura
de sector boot-abil (0xAA55).

Zona de cod executabil cont, ine programul care va fi rulat dupa ncarcarea
MBR-ului n
memorie de BIOS. De obicei, acest program este bootloader -ul, responsabil cu

descoperirea partit, iei active s, i ncarcarea


primului sector (VBR) de pe aceasta. n cazul
existent, ei mai multor sisteme de operare, bootloader -ul poate permite utilizatorului sa

opteze pentru ncarcarea


unui sistem de operare aflat pe alta partit, ie dect cea de boot.

Tabela de partit, ii
Tabela de partit, ii rezida n MBR s, i ocupa 64 de octet, i. Un hard-disk poate cont, ine doar
patru partit, ii (as, a numitele partit, ii primare), rezultnd 16 octet, i pentru descrierea

fiecarei
partit, ii.

pe lnga adresa de start (exprimata n


Cei 16 octet, i ai fiecarei
partit, ii ofera,
1
cylinder-head-sector ) s, i dimensiunea s, i tipul partit, iei. O partit, ie poate fi activa sau
O partit, ie activa este aleasa de bootloader -ul aflat n zona MBR (sau de
non-activa.

catre
o parte a bootloader -ului, daca acesta este n doua stagii) pentru a continua

ncarcarea
sistemului. De pe o partit, ie activa se va ncarca
primul sector (VBR) al
acesteia.

O alta clasificare a partit, iilor este clasificarea n partit, ii primare s, i partit, ii extinse. Numarul
de 4 partit, ii primare care pot fi descrise n tabela de partit, ii din MBR este, de multe ori,

Pe
insuficient. Pentru a rezolva acest neajuns, a aparut
not, iunea de partit, ie extinsa.
un sistem poate exista o singura partit, ie extinsa astfel ca putem avea fie maxim 4 partit, ii
primare, fie o partit, ie extinsa s, i maxim 3 primare.
1

http://en.wikipedia.org/wiki/Cylinder-head-sector

158

INTRODUCERE N SISTEME DE OPERARE

Partit, iile extinse pot cont, ine mai multe partit, ii logice, marind
astfel numarul
de partit, ii

posibile din sistem. Descrierea partit, iei extinse se regases, te n primul sector din acea
partit, ie, denumit EPBR (Extended Partition Boot Record).
Partit, iile sunt folosite pentru separat, ia informat, iilor ntr-un sistem de operare. Pentru a
asigura existent, a unui sistem de fis, iere pe o partit, ie, acea partit, ie va trebui formatata
(vezi sect, iunea 4.8.1).

Salvarea sectorului de boot (backup)


Uneori se dores, te salvarea sectorului de boot al unui disc sau al unei partit, ii pentru
situat, ia n care acesta devine corupt s, i trebuie reparat. n Linux, acest lucru se poate
realiza foarte us, or prin intermediul comenzii dd (vezi sect, iunea 7.6.5) s, i a dispozitivelor
de tip bloc (vezi sect, iunea 7.6.1)
Astfel, daca se dores, te realizarea unei copii locale a MBR, se poate folosi utilitarul dd
s, i dispozitivul asociat hard-disk-ului (n cazul nostru /dev/hda). Vor trebui copiat, i 512
octet, i (un sector), deci contorul de sectoare va fi 1:
1
2
3
4

root@asgard:~# dd if=/dev/hda of=mbr.out count=1


1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.035273 seconds, 14.5 kB/s

5
6
7

root@asgard:~# ls -l mbr.out
-rw-r--r-- 1 root root 512 2009-08-07 23:28 mbr.out

6.2.3

Mecanismul de funct, ionare a unui bootloader

Dupa cum s-a specificat, un bootloader este un program folosit pentru a ncarca
n RAM

imaginea sistemului de operare, sau alte componente care vor ncarca


(la rndul lor)
acea imagine.
Codul bootloader -ului este supus unor constrngeri destul de rigide, ntruct trebuie sa
ncapa n MBR. Mai exact, este limitat la 446 de octet, i (restul fiind ocupat, i de tabela de

partit, ii s, i de semnatura
de boot 0xAA55).
Ca atare bootloader -ele lucreaza n mod normal n doua etape (stages). Prima etapa

este cea care rezida n MBR. Aceasta are rolul de a ncarca


de pe hard-disk a doua

etapa care este suficient de complexa pentru a putea ncepe ncarcarea


efectiva a
kernelului sistemului de operare. n cea de-a doua etapa poate fi oferit un ecran de
select, ie pentru situat, ia n care coexista doua sisteme de operare pe acelas, i sistem fizic.
Unele bootloader -e (spre exemplu GRUB versiunea 1) au o faza intermediara 1.5

pentru a permitea citirea de informat, ii de pe hard-disk dincolo de o anumita limita.

Dupa acest pas bootloader-ul va ncarca


nucleului sistemului de operare (sau o parte a

acestuia) s, i va transmite controlul catre


acesta.
Exemple de bootloader-e sunt:

GRUB (GRand Unified Bootloader ):


distribut, iilor Linux;

bootloader -ul implicit pe majoritatea

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

159

LILO (Linux Loader ): bootloader -ul implicit pe distribut, iile Linux nainte de
supremat, ia GRUB;

NTLDR (NT Loader ): bootloader -ul folosit de Windows NT, 2000, XP, 2003;
winload.exe: bootloader -ul folosit de Windows Vista;
SYSLINUX: o suita de bootloader -e destinate diverselor medii de boot.

Chainloading
Modul cel mai des ntlnit prin care un sistem de operare este init, ializat este prin

specificarea directa a imaginii nucleului catre


bootloader.
Alternativa o reprezinta boot-area indirecta a sistemului de operare. Acest lucru
presupune ca bootloader -ul aflat n MBR, n loc de imaginea unui kernel, sa ncarce un

imaginea de kernel a sistemului de


alt bootloader care va ncarca
la rndul sau
operare. Acest mod de ncarcare a unui sistem de operare se numes, te chainloading.
Bootloader -ele specifice Linux (precum GRUB sau LILO) ncarca sistemele Windows

folosind chainloading. Spre exemplu, daca dupa ncarcarea


bootloader -ului GRUB se

opteaza pentru boot-area Windows, atunci se va incarca


bootloader -ul Windows
sistemul de operare.
(NTLDR) care va init, ializa la rndul sau

6.2.4

GRUB

GRUB (GRand Unified Booloader 1 ) este bootloader-ul implicit pe distribut, iile Linux s, i alte
sisteme de operare din familia Unix s, i este, de obicei, folosit n situat, iile de multiboot
(cnd pe sistemul de calcul coexista mai multe sisteme de operare). Aceasta sect, iune
va prezenta detalii despre versiunea 1 a GRUB, denumita simplu GRUB. Versiunea 2,
denumita GRUB 2, care a nceput sa fie utilizata recent, este prezentata n cadrul unui
studiu de caz (vezi sect, iunea 6.6.1).
Specific GRUB este faptul ca exista o faza intermediara 1.5 pentru situat, ia n care exista
o limita de vizibilitate a hard-disk-ului.
Ca s, i n cazul altor bootloader -e, prima faza (cea care rezida n MBR) are rolul de a

ncarca
faza a doua sau, daca este nevoie, faza 1.5. Datorita dimensiunii reduse, prima
faza nu det, ine informat, ii despre sistemul de fis, iere. n schimb, faza 1.5 det, ine informat, ii

despre acesta s, i poate localiza s, i ncarca


n mod corespunzator
faza a doua.
Faza a doua este responsabila cu citirea fis, ierului principal de configurare

(/boot/grub/menu.lst), afis, area ecranului de opt, iuni s, i ncarcarea


nucleului
sistemului de operare.
n figura 6.6 este prezentata localizarea diferitelor faze ale GRUB pe hard-disk.
, te n zona de cod executabil din
Se observa ca prima etapa (grub stage 1) se gases
, te n zona de compatibilitate a hard-disk-ului
MBR. Faza 1.5 (grub stage 1.5) se gases
(primii 32 KB). Aceasta etapa recunoas, te tipul sistemului de fis, iere pe care se afla etapa
1

http://www.gnu.org/software/grub/

160

INTRODUCERE N SISTEME DE OPERARE

Figura 6.6: Structura GRUB

a doua s, i este utilizata pentru ncarcarea


acesteia. Etapa a doua rezida n partit, ia de
boot.

Fis, ierele asociate GRUB se gasesc


pe un sistem Debian/Ubuntu, n /boot/grub, as, a
cum este prezentat mai jos:
1
2
3
4

razvan@asgard:/boot/grub$ ls
default
fat_stage1_5 minix_stage1_5
device.map
jfs_stage1_5 reiserfs_stage1_5
e2fs_stage1_5 menu.lst
stage1

stage2
xfs_stage1_5

5
6
7
8
9
10
11
12
13
14
15
16
17
18

razvan@asgard:/boot/grub$ ls -l
total 188
-rw-r--r-- 1 root root
197 2009-01-17
-rw-r--r-- 1 root root
15 2009-01-17
-rw-r--r-- 1 root root
7584 2009-01-17
-rw-r--r-- 1 root root
7424 2009-01-17
-rw-r--r-- 1 root root
8192 2009-01-17
-rw-r--r-- 1 root root
4724 2009-06-23
-rw-r--r-- 1 root root
6848 2009-01-17
-rw-r--r-- 1 root root
9280 2009-01-17
-rw-r--r-- 1 root root
512 2009-01-17
-rw-r--r-- 1 root root 108392 2009-01-17
-rw-r--r-- 1 root root
8904 2009-01-17

11:55
11:55
11:55
11:55
11:55
12:45
11:55
11:55
11:55
11:55
11:55

default
device.map
e2fs_stage1_5
fat_stage1_5
jfs_stage1_5
menu.lst
minix_stage1_5
reiserfs_stage1_5
stage1
stage2
xfs_stage1_5

, te n fis, ierul stage1 care are exact dimensiunea


Se observa ca prima faza se gases
unui sector (512 octet, i). Faza 1.5 are o forma specializata pentru fiecare sistem de
fis, iere (e2fs_stage1_5, reiserfs_stage1_5 etc.). Spat, iul ocupat este n jur de
a probleme n zona de compatibilitate de 32 KB a hard-disk-ului.
7-8 KB, deci ncape far
Faza a doua este descrisa de fis, ierul stage2 cu dimensiune mai mare dect a
celorlalte (circa 100 KB). Faza a doua este resposabila pentru citirea fis, ierului de

configurare menu.lst s, i ncarcarea


ulterioara a nucleului.

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

161

Vizualizare stage1 s, i stage1.5 pe hard-disk


Pentru a verifica prezent, a primei faze s, i a fazei 1.5 pe hard-disk vom folosi utilitarele dd
s, i hexdump.
ntr-o prima faza va fi realizata o copie a primului sector de pe hard-disk n fis, ierul

first_sector s, i apoi a urmatoarelor


10 sectoare n fis, ierul next_sectors.
1
2
3
4

root@asgard:/boot/grub# dd if=/dev/hda of=first_sector count=1


1+0 records in
1+0 records out
512 bytes (512 B) copied, 8.91e-05 seconds, 5.7 MB/s

5
6
7
8
9

root@asgard:/boot/grub# dd if=/dev/hda of=next_sectors count=10 skip=1


10+0 records in
10+0 records out
5120 bytes (5.1 kB) copied, 0.000137291 seconds, 37.3 MB/s

n first_sector s, i next_sector se gasesc


informat, iile binare cont, inute n primele
sectoare ale hard-disk-ului. Ele vor fi comparate cu fis, ierele imagine din /boot/grub
folosind utilitarul hexdump. De exemplu, pentru stage1:
1
2
3
4
5
6
7
8
9
10
11
12

razvan@asgard:/boot/grub$ hexdump first_sector


[...]
0000070 34e8 f601 80c2 5474 41b4 aabb cd55 5a13
0000080 7252 8149 55fb 75aa a043 7c41 c084 0575
0000090 e183 7401 6637 4c8b be10 7c05 44c6 01ff
00000a0 8b66 441e c77c 1004 c700 0244 0001 8966
[...]
0000170 be06 7d94 30e8 be00 7d99 2ae8 eb00 47fe
0000180 5552 2042 4700 6f65 006d 6148 6472 4420
0000190 7369 006b 6552 6461 2000 7245 6f72 0072
00001a0 01bb b400 cd0e ac10 003c f475 00c3 0000
[...]

13
14
15
16
17
18
19
20
21
22
23
24
25

razvan@asgard:/boot/grub$ hexdump stage1


[...]
0000070 34e8 f601 80c2 5474 41b4 aabb cd55
0000080 7252 8149 55fb 75aa a043 7c41 c084
0000090 e183 7401 6637 4c8b be10 7c05 44c6
00000a0 8b66 441e c77c 1004 c700 0244 0001
[...]
0000170 be06 7d94 30e8 be00 7d99 2ae8 eb00
0000180 5552 2042 4700 6f65 006d 6148 6472
0000190 7369 006b 6552 6461 2000 7245 6f72
00001a0 01bb b400 cd0e ac10 003c f475 00c3
[...]

5a13
0575
01ff
8966
47fe
4420
0072
0000

n primul sector al hard-disk-ului se gases


, te imaginea primei
Dupa cum se observa,

etape a GRUB, iar n urmatoarele


sectoare imaginea etapei 1.5. Daca apar deosebiri
ntre imaginea aflata n sectoarele discului s, i cea din /boot/grub, acestea sunt din
considerente de adaptare la geometria discului. Imaginea celei de-a doua faze este

ncarcat
a de faza 1.5 din /boot/grub/stage2, aceasta putnd accesa structura
sistemului de fis, iere.

162

INTRODUCERE N SISTEME DE OPERARE

Creare unei dischete de boot GRUB


Des, i dischetele sunt dispozitive pe cale de disparit, ie (s, i costa n ziua de azi mai mult
dect un CD), vom descrie n scop didactic modul n care se poate crea o discheta de
boot GRUB.
Discheta va trebui sa cont, ina imaginea pentru prima s, i cea de-a doua faza (nu este
nevoie de faza 1.5 ntruct nu avem limitare n cest caz). Pentru aceasta se poate folosi
folosi utilitarul cat:
1

root@anaconda:/boot/grub# cat stage1 stage2 > /dev/fd0

sau utilitarul dd:


1
2
3
4

root@anaconda:/boot/grub# dd if=stage1 of=/dev/fd0


1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.0426716 seconds, 12.0 kB/s

5
6
7
8
9

root@anaconda:/boot/grub# dd if=stage2 of=/dev/fd0 skip=1


210+1 records in
210+1 records out
107656 bytes (108 kB) copied, 0.020834 seconds, 5.2 MB/s

utilizatorului i va fi oferita
Daca se configureaza BIOS-ul pentru a boot-a de pe discheta,
consola GRUB de configurare (vezi sect, iunea 6.3).

6.3

Configurarea GRUB

Configurarea GRUB se realizeaza prin intermediul fis, ierului /boot/grub/menu.lst.


n acest fis, ier sunt precizate opt, iunile de boot prezente n meniul GRUB, cu alte cuvinte

sistemele de operare care pot fi ncarcate


cu ajutorul GRUB. Etapa a doua cites, te acest
fis, ier de configurare s, i ofera utilizatorului ecranul de opt, iuni:
n continuare este prezentata o parte dintr-un fis, ier de configurare
/boot/grub/menu.lst s, i sunt descrise elementele de configurare prezente n
acesta:
1
2
3
4
5

## default num
# Set the default entry to the entry number NUM. Numbering starts from 0,
and
# the entry number 0 is the default if the command is not used.
[...]
default
0

6
7
8
9

## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default
entry
# (normally the first entry defined).

10
11

timeout

12
13
14
15

# Pretty colours
color cyan/blue white/blue
[...]

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

163

Figura 6.7: Ecran opt, iuni GRUB


16
17

## Razvans kernels

18
19
20
21
22

title
root
kernel
savedefault

Debian GNU/Linux, kernel 2.6.18-12fast


(hd0,2)
/boot/vmlinuz-2.6.18-12fast root=/dev/hda3 ro

title
root
kernel
savedefault
[...]

Debian GNU/Linux, kernel 2.6.18-12fast (single-user mode)


(hd0,2)
/boot/vmlinuz-2.6.16-12fast root=/dev/hda3 ro single

23
24
25
26
27
28
29
30
31
32
33
34
35
36

# This entry automatically added by the Debian installer for a non-linux


OS
# on /dev/hda1
title
Microsoft Windows XP Professional
root
(hd0,0)
savedefault
makeactive
chainloader
+1

Opt, iunea default precizeaza opt, iunea implicita din meniu folosita pentru boot-are.
pentru diferite sisteme de operare.
Fis, ierul de configurare cont, ine mai multe intrari

Numarul
care urmeaza dupa opt, iunea default indica sistemul de operare care va fi
boot-at implicit n cazul n care utilizatorul nu intervine n momentul afis, arii meniului de
n figura 6.7, nu ar exista alte
opt, iuni. Numerotarea pornes, te de la 0. Presupunnd ca,
opt, iuni de sisteme de operare, boot-area implicita pe Windows XP Professional este
condit, ionata de prezent, a opt, iunii default 4.
Opt, iunea timeout indica timpul de as, teptare pentru ca utilizatorul sa aleaga una din

164

INTRODUCERE N SISTEME DE OPERARE

se va ncarca

opt, iunile afis, ate n meniul de boot. Daca acest timp expira,
sistemul de
operare indicat de opt, iunea default.
Opt, iunea colors afis, eaza colorat meniul GRUB.

Opt, iunea de sistem de operare


Ceea ce apare, n continuare, n exemplul de fis, ier de configurare de mai sus sunt

intrarile
asociate pentru sistemele de operare care pot fi boot-ate. Se observa ca
fiecare intrare cont, ine un set de directive de configurare. Acestea sunt:
as, a cum va aparea

title: este un s, ir de caractere reprezentnd numele intrarii


ea n ecranul de opt, iuni GRUB. Des, i nu exista nicio limitare de nume, se
recomanda ca titlul sa fie un nume reprezentativ;

root: reprezinta partit, ia pe care se afla imaginea de nucleu a sistemului de


operare; aceasta poate sau nu coincida cu partit, ia unde este montat sistemul de
acin
a (/);
fis, iere rad

kernel: reprezinta calea catre


imaginia de nucleu n cadrul partit, iei de mai sus;
acin
a (/);
subdirectiva root precizeaza partit, ia asociata sistemului de fis, iere rad
opt, iunea ro precizeaza faptul ca sistemul de fis, iere va fi montat read-only; se
observa ca n cazul Windows nu exista opt, iunea kernel, deorece GRUB nu
poate boot-a direct nucleul Windows ci va apela NTLDR (bootloader -ul de
Windows), lucru indicat prin opt, iunea chainloader+1; opt, iunea +1 semnifica
citirea primului sector din partit, ia (hd0,0);

opt, iunea makeactive stabiles, te partit, ia ca fiind partit, ia activa;

opt, iunea savedefault: daca directiva default este folosita n forma


default saved s, i opt, iunea folosita la boot-are are opt, iunea savedefault,

atunci la urmatoarea
boot-are se va selecta, implicit, aceeas, i opt, iune.

Convent, ia de denumire GRUB


Daca n Linux, primul hard-disk este accesibil sub numele /dev/hda, iar prima partit, ie
a acestuia sub numele /dev/hda1, GRUB foloses, te o alta convent, ie pentru
denumirea discurilor din sistem s, i a partit, iilor acestora. Astfel, pentru a referi primul disc
din sistem, GRUB foloses, te denumirea (hd0). Numerotarea discurilor ncepe de la 0.
Spre deosebire de Linux, GRUB nu face distinct, ie ntre tipul de controller folosit de
discurile din sistem: IDE sau SCSI. Astfel, primul disc este denumit ntotdeauna
(hd0). Pentru referirea primei partit, ii din primul disc, GRUB foloses, te denumirea
(hd0,0).
n ton cu cele de mai sus, a 3-a partit, ie de pe al doilea disc al sistemului este referita de
GRUB sub forma (hd1,2). Tabelul 6.1 de mai sus ofera o analogie ntre denumirea
GRUB s, i Linux pentru discuri s, i partit, ii.

Consola GRUB
n afara fis, ierului de configurare, GRUB poate fi configurat s, i prin intermediul unei
consolei asociate. Aceasta poate fi accesata n doua moduri: dintr-un sistem Linux

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

Dispozitiv

165

Tabelul 6.1: Denumirea discurilor n Linux/GRUB


Denumire Linux Denumire
GRUB

Primul disc IDE


Al doilea disc IDE
Al treilea disc SCSI
Prima unitate floppy
Prima partitie de pe al doilea disc IDE
A doua partitie de pe al treilea disc
SCSI

/dev/hda
/dev/hdb
/dev/sdc
/dev/fd0
/dev/hdb1
/dev/sdc2

(hd0)
(hd1)
(hd2)
(fd0)
(hd1,0)
(hd2,1)

folosind comanda grub, sau din intermediul meniului de boot al GRUB. n ambele
cazuri utilizatorului i este oferit un prompt grub> unde poate introduce comenzi
specifice.
Utilizarea consolei GRUB este limitata la situat, iile de testare a unor opt, iuni, de
recuperare sau de troubleshooting.
Un exemplu util de utilizare a consolei GRUB este (re)instalarea GRUB, as, a cum este
descrisa n sect, iunea 6.6.3.
Accesarea consolei GRUB poate fi necesara s, i n momentul n care se dores, te
alterarea unei opt, iuni de boot-are. Spre exemplu, n ecranul de meniul de boot GRUB,

apasarea
tastei e peste o anumita opt, iune conduce la aparit, ia consolei GRUB cu
acelei opt, iuni de bootare. Acest lucru este util n cazul unei erori
posibilitatea editarii
(s-a precizat de exemplu un nume gres, it pentru imaginea de kernel) sau n cazul n
care s-a pierdut parola de root s, i se dores, te recuperarea acesteia, fort, nd sistemul sa
porneasca o consola de root (prin folosirea opt, iunii init=/bin/bash (vezi
sect, iunea 10.6.2).

6.4

ncarcarea
nucleului

Dupa ce este ncarcat


n RAM s, i rulat, bootloader -ul este responsabil cu ncarcarea

nucleului sistemului de operare s, i transmiterea controlului catre


acesta. Ca s, i faza a
doua a GRUB, nucleul rezida ntr-un fis, ier din sistemul de fis, iere, denumit imaginea
de nucleu. n cazul GRUB, locat, ia acestui fis, ier este transmisa ca parametru n cadrul
directivei kernel din /boot/grub/menu.lst.

6.4.1

Imaginea de nucleu

Imaginea de nucleu este un fis, ier executabil cont, innd codul s, i datele necesare pentru
rularea nucleului sistemului de operare. n Windows, imaginea nucleului se numes, te
ntoskrnl.exe s, i este localizata n C:\Windows\system32\ntoskrnl.exe. n
de obicei, n /boot, s, i are denumirea n forma
sistemele Linux, aceasta imagine rezida,
vmlinuz-versiune_kernel (spre exemplu, vmlinuz-2.6.29.1 sau vmlinuz2.6.31-020631-generic).

166

INTRODUCERE N SISTEME DE OPERARE

Comanda file indica un astfel de fis, ier ca fiind o imagine de nucleu Linux:
1
2

root@asgard:/boot# file vmlinuz-2.6.31-020631-generic


vmlinuz-2.6.31-020631-generic: Linux kernel x86 boot executable RO-rootFS
, root_dev 0x6801, swap_dev 0x3, Normal VGA

n mod obis, nuit imaginea de kernel ocupa n jur de 3-4 MB. Poate fi nsa constrnsa la
dimensiuni mai mici prin eliminarea anumitor componente, atunci cnd este cazul (spre
exemplu n cazul sistemelor embedded 1 ). Faptul ca denumirea imaginii se termina n z

(vmlinuz) indica o imagine de kernel comprimata.


s, i
O imagine de kernel comprimata cont, ine la nceputul ei o sect, iune direct executabila,
, te zona efectiv comprimata.

dupa aceasta sect, iune, se gases

Dupa ncarcarea
imaginii de nucleu, bootloader -ul transmite controlul execut, iei catre

fie catre

ntr-o prima
kernel (fie catre
imaginea necomprimata,
zona necomprimata).
faza nucleul init, ializeaza s, i configureaza dispozitivele hardware s, i memoria. Toate
dispozitivele init, ializate de BIOS vor fi reinit, ializate pentru a asigura robustet, ea s, i
independent, a de modul n care BIOS-ul realizeaza initializarea.

Urmatorul
pas l reprezinta decomprimarea imaginii de nucleu. Dupa aceasta se
acin
a precizat prin parametrul root=/dev/... al
monteaza sistemul de fis, iere rad
a ce nucleul init, ializeaza
directivei kernel din fis, ierul de configurare GRUB. Pe masur
alte subsisteme, pe ecran sunt afis, ate mesaje de status.

ncarcarea
completa a nucleului se ncheie cu crearea procesului init (ce are pid-ul

1) din imaginea /sbin/init. Se poate alege o alta imagine pe baza careia


sa se
creeze procesul init, prin specificarea opt, iunii init=/path/to/new/exec la
boot-area nucleului. Un caz tipic pentru aceasta este recuperarea parolei de root (vezi
sect, iunea 10.6.2).

6.4.2

Opt, iuni de boot-are pentru nucleu

modifice
Nucleul Linux poate fi configurat pentru boot-are cu diverse argumente care sa-i
funct, ionalitatea. Acestea sunt transmise ca parametri de boot-are n directiva kernel a
GRUB. Configurarea acestor argumente poate fi realizata fie prin fis, ierul de configurare

(/boot/grub/menu.lst), fie prin accesarea consolei GRUB (apasarea


tastei e n
ecranul de opt, iuni GRUB).
a online2 . Cele mai importante
O lista completa cu opt, iunile de boot-are poate fi gasit
dintre aceste opt, iuni sunt:

debug: afis, eaza mesaje suplimentare la ncarcarea


nucleului;

quiet: dezactiveaza afis, area de mesaje la ncarcarea


nucleului;

resume=suspend_device (util pentru laptop-uri n cazul finct, iei de hibernare):


specifica discul unde se afla imaginea suspendata a nucleului;
acin
a;

root=device: precizeaza partit, ia unde se afla sistemul de fis, iere rad


1
2

http://en.wikipedia.org/wiki/Embedded_system
http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch09.pdf

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

167

acin
a este montat read-only sau read ro/rw: specifica daca sistemul de fis, iere rad
write la boot-are;

init=filename: specifica executabilul care va fi ncarcat


la crearea procesului init
(implicit acest executabil este /sbin/init);

S sau single: specifica pornirea lui init n mod single-user.

6.5

Init, ializarea sistemului

ncarcarea
nucleului se ncheie cu pornirea init, procesul cu pid-ul 1, parintele
celorlalte procese din sistem. n cele ce urmeaza vom presupune ca procesul init a fost
creat n mod obis, nuit din imaginea /sbin/init.

init este responsabil cu pornirea celorlalte procese importante ale sistemului, a


daemonilor s, i a proceselor care asigura accesul utilizatorului la sistem (getty s, i
mediul grafic).

6.5.1

init

init este resposabil cu crearea celorlalte procese importante din sistem s, i, astfel, de
realizarea unui sistem funct, ional s, i interactiv. Pentru precizarea proceselor care

trebuiesc pornite s, i a opt, iunilor primite de catre


acestea, init foloses, te un set de
fis, iere de configurare decrise n continuare.

Niveluri de rulare (runlevels)


nainte de a prezenta modul n care se configureaza init, trebuie descrisa not, iunea de
nivel de rulare (runlevel). Un nivel de rulare se refera la un context de utilizare a unui
sistem de operare. Altfel spus, se refera la ce servicii ofera sistemul utilizatorului. Un
runlevel difera de un altul prin dispozitivele montate s, i prin serviciilor pornite.
Sunt definite 7 niveluri de rulare, numerotate de la 0 la 6. Acestea pot fi folosite diferit de
diversele distribut, ii Linux, nsa 3 dintre ele au tot timpul aceeas, i semnificat, ie:

Runlevel 0 Halt: este folosit pentru oprirea sistemului;


Runlevel 1 Single: este folosit pentru un sistem single-user;
Runlevel 6 Reboot: este folosit pentru repornirea sistemului.
Pentru afis, area runlevel-ului curent se foloses, te comanda runlevel (ca root) sau who
-r (ca utilizator obisnuit):
1
2

root@asgard:~# runlevel
N 2

3
4
5

razvan@asgard:~$ who -r
run-level 2 2009-09-23 17:57

last=

168

INTRODUCERE N SISTEME DE OPERARE

Schimbarea runlevel-ului se realizeaza prin rularea comenzii init urmata de numarul


runlevel-ului. Astfel rularea comenzii
1

root@asgard:~# init 0

este echivalenta cu rularea comenzii:


1

root@asgard:~# shutdown -h

sau
1

root@asgard:~# halt

Configurarea init
n
Fis, ierul principal de configurare pentru init este /etc/inittab. Este prezentata,
continuare, o parte a unui fis, ier de configurare /etc/inittab pentru a descrie modul
n care acesta afecteaza comportamentul init:
1
2
3
4

[...]
# The default runlevel.
id:2:initdefault:
[...]

5
6
7
8
9
10
11
12

#
#
#
#
#
#
#

/etc/init.d executes the S and K scripts upon change


of runlevel.
Runlevel 0 is
Runlevel 1 is
Runlevels 2-5
Runlevel 6 is

halt.
single-user.
are multi-user.
reboot.

13
14
15
16
17
18
19
20
21
22

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

# What to do when CTRL-ALT-DEL is pressed.


ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
[...]
# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
# <id>:<runlevels>:<action>:<process>
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more gettys go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI


40
41
42
43

3:23:respawn:/sbin/getty
4:23:respawn:/sbin/getty
5:23:respawn:/sbin/getty
6:23:respawn:/sbin/getty

38400
38400
38400
38400

169

tty3
tty4
tty5
tty6

Dupa cum se poate observa intrarile


din /etc/inittab au urmatorul
format:
1

<id>:<runlevels>:<action>:<process>

unde:

id este un identificator unic al regulii din inittab;

runlevels reprezinta nivelurile de rulare asupra carora


se aplica regula;

action este act, iunea pe care o va executa init;

process este comanda care va fi executata.


, te n pagina de
O descriere completa a regulilor posibile pentru inittab se gases
manual (man inittab). Vor fi prezentate, n continuare, regulile din exemplul de mai
sus.
Linia 3 din captura de mai sus stabiles, te runlevel-ul implicit, care este 2.
Identificatorii l0 pna la l6 de pe liniile 14-20 prezinta reguli pentru scripturile de

init, ializare a serviciilor sistemului conform cu runlevel-ul. Dupa cum se observa,


comanda executata pentru fiecare runlevel n parte este /etc/init.d/rc urmata de

numarul
nivelului de rulare. Prin intermediul acestei comenzi se vor porni serviciile
specifice sistemului, dupa cum se va vedea n continuare.
Linia cu identificatorul ca (linia 25) precizeaza ca se executa o repornire a sistemului n
cazul n care se apasa CTRL-ALT-DEL. Pentru aceasta repornire se ruleaza comanda
shutdown.
Regulile cu identificatorii 1 pna la 6 (liniile 38-43) sunt folosite pentru a porni procesul
getty pe terminalele virtuale ale sistemului. Dupa cum se observa s, i din comentariu,
terminalul virtual 7 este asociat mediului grafic s, i nu poate fi folosit pentru a porni getty.
n cazul terminarii
procesului, init l va recrea.
Act, iunea respawn semnifica faptul ca,

Pornirea daemonilor de sistem


Dupa cum s-a observat din fis, ierul de configurare /etc/inittab, pornirea serviciilor
sistemului n funct, ie de runlevel se realizeaza cu ajutorul scriptului /etc/init.d/rc.

Acest script primes, te ca argument numarul


runlevel-ului s, i executa scripturile aflate

ntr-un director specializat: /etc/rcX.d/, unde X este numarul


runlevel-ului. Astfel,
daca runlevel-ul este 3, se vor executa script-urile din /etc/rc3.d/.
Cont, inutul directorului /etc/rc3.d/ este:
1
2
3
4
5

razvan@asgard:~$ ls -l /etc/rc3.d/
total 4
lrwxrwxrwx 1 root
root
18 2009-06-10 22:56 K08vmware -> /etc/init.d/
vmware
lrwxrwxrwx 1 root
root
20 2009-07-22 14:17 K77ntp-server -> ../init.
d/ntp-server
[...]

170
6
7
8
9
10
11
12
13

lrwxrwxrwx 1 razvan razvan


exim4
lrwxrwxrwx 1 razvan razvan
/firebird2
[...]
lrwxrwxrwx 1 root
root
vmware
lrwxrwxrwx 1 razvan razvan
apache2
lrwxrwxrwx 1 razvan razvan
rc.local
lrwxrwxrwx 1 razvan razvan
/rmnologin
lrwxrwxrwx 1 razvan razvan
init.d/stop-bootlogd

INTRODUCERE N SISTEME DE OPERARE


15 2009-01-17 11:54 S20exim4 -> ../init.d/
19 2009-06-01 12:51 S20firebird2 -> ../init.d

18 2009-06-10 22:56 S90vmware -> /etc/init.d/


17 2009-02-24 00:05 S91apache2 -> ../init.d/
18 2009-01-17 11:47 S99rc.local -> ../init.d/
19 2009-01-17 11:47 S99rmnologin -> ../init.d
23 2009-01-17 11:47 S99stop-bootlogd -> ../

Se observa ca fis, ierele sunt un set de legaturi simbolice catre


intrari
din
Directorul
/etc/init.d/ cont, ine scripturile de
pornire/oprire/repornire a serviciilor din sistem. Astfel, pentru oprirea, pornirea sau
repornirea serviciului apache, se folosesc comenzile:

/etc/init.d/.

root@asgard:~# /etc/init.d/apache start|stop|restart

, ii scripturilor ce se gasesc

Argumentele start / stop / restart sunt comune majoritat


n /etc/init.d.
De asemenea, se poate observa s, i un format al numelor fis, ierelor din /etc/rcX.d:
1
2

K numar nume
S numar nume

K nseamna kill, iar S nseamna start. Astfel, existent, a legaturii


K08vmware nseamna
ca serviciul vmware va fi oprit (prin intermediul comenzii /etc/init.d/vmware

stop) odata cu intrarea n nivelul de rulare 3. La fel, existent, a legaturii


S20exim4
nseamna ca serviciul exim va fi pornit (prin intermediul comenzii
/etc/init.d/exim start) odata cu intrarea n nivelul de rulare 3.

Numarul
asociat unui din formatul numelor de fis, iere reprezinta ordinea de
pornire/oprire a serviciilor.
Astfel, serviciul S91apache va fi pornit naintea
S99rmnologin, iar serviciul K77ntp-server va fi oprit naintea K08vmware (la

oprire ordinea este descrescatoare).

sysv-rc-conf
Avantajul schemei init de pornire a serviciilor este flexibilitatea, iar dezavantajul
mare de fis, iere de configurare. Daca se dores, te
complexitatea crescuta s, i un numar

a
eliminarea sau adaugarea
unui serviciu la un runlevel, va trebui creata o legatur

simbolica catre
scriptul de pornire/oprire s, i denumita folosind schema specifica.

Procesul poate fi anevoios n cazul n care se dores, te o configurare mai avansata.


Pentru a elimina acest deficient, se poate folosi utilitarul sysv-rc-conf. Acesta

permite adaugarea/eliminarea
facila a unui serviciu dintr-un runlevel.

sysv-rc-conf ofera doua interfet, e de configurare a serviciilor: una n linia de


comanda s, i una text. Interfat, a text permite parcurgerea serviciilor existente n sistem s, i

adaugarea/elimitarea
acestora dintr-un runlevel printr-o simpla act, iune de

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

171

check /uncheck (folosind tasta SPACE). Interfat, a n linia de comanda permite

adaugarea/eliminarea
unui serviciu prin precizarea nivelului/nivelurilor de rulare dorite,
a numelui serviciului s, i a act, iunii (on sau off ). n exemplul de mai jos, serviciul

postfix a fost adaugat


la nivelurile de rulare 4 s, i 5 s, i serviciul apache a fost eliminat
din nivelurile de rulare 2 s, i 5.
1
2

root@anaconda:/boot/grub# sysv-rc-conf --list postfix


postfix
0:off
1:off
2:on
3:off
4:off

5:off

6:off

3
4

root@anaconda:/boot/grub# sysv-rc-conf --level 45 postfix on

5
6
7

root@anaconda:/boot/grub# sysv-rc-conf --list postfix


postfix
0:off
1:off
2:on
3:off
4:on

5:on

6:off

root@anaconda:/boot/grub# sysv-rc-conf --list apache


apache
0:off
1:off
2:on
3:on
4:on

5:on

6:off

8
9
10
11
12

root@anaconda:/boot/grub# sysv-rc-conf --level 25 apache off

13
14
15

root@anaconda:/boot/grub# sysv-rc-conf --list apache


apache
0:off
1:off
2:off
3:on
4:on

6.5.2

5:off

6:off

upstart

ncepnd cu versiunea 6.10 (Edgy Eft), distribut, ia Ubuntu a nlocuit init cu upstart.
bazata pe evenimente care au loc n sistem.
upstart permite o configurare asincrona,
Spre deosebire de alte alternative pentru init, upstart este compatibil cu acesta s, i
poate folosi scripturile init nemodificate (spre exemplu cele din /etc/init.d).
upstart este, de fapt, un daemon init modificat. Ca orice sistem Linux, upstart este
pornit prin rularea /sbin/init.
n septembrie 2009 echipa de dezvoltare a distribut, iei Debian a anunt, at faptul ca va
renunt, a la init n favoarea upstart1 .

hardware-ului. Daca pna de curnd se putea


Upstart a aparut
ca urmare a dezvoltarii
s, ti din momentul pornirii sistemului ce dispozitive exista n sistem sau unde se poate
monta sistemul de fis, iere, dezvoltarea de noi dispozitive hot-plug (care pot fi conectate
sau deconectate n timp real n calculator) a impus folosirea unui nou sistem de detect, ie
s, i configurare a acestora.
upstart este as, adar un daemon init bazat pe evenimente (event-based init daemon).
Funct, ionarea sa nseamna crearea de noi sarcini pentru sistemul de operare n doua
moduri:

rularea de scripturi sau executabile n momentul producerii unui eveniment;


oprirea sau pornirea unui serviciu n momentul producerii unui eveniment.
Un exemplu este montarea unui sistem de fis, iere (spre exemplu de pe un USB flash
drive). Pas, ii urmat, i, dupa conectarea dispozitivului USB, sunt:

un eveniment de tip startup pornes, te daemon-ul udevd;


1

http://lwn.net/Articles/351013/

172

INTRODUCERE N SISTEME DE OPERARE

daemon-ul udevd este configurat sa trimita un eveniment de tipul block-deviceadded pentru fiecare dispozitiv nou conectat;

evenimentul block-device-added determina verificarea dispozitivului s, i montarea


acestuia daca este listat n /etc/fstab;
dupa montarea sistemelor de fis, iere din /etc/fstab se transmite evenimentul
fhs-filesystem.

Configurare upstart
upstart este configurat prin intermediul directorului /etc/event.d/ care se dores, te a
fi un nlocuitor pentru scripturile /etc/inittab, /etc/init.d/* s, i /etc/rcX.d.
Fiecare fis, ier din /etc/event.d descrie modul n care un job trebuie coordonat:
1
2
3
4

root@ubuntui:/etc/event.d# ls
control-alt-delete rc0 rc3 rc6
logd
rc1 rc4 rcS
rc-default
rc2 rc5 rcS-sulogin

sulogin
tty1
tty2

tty3
tty4
tty5

tty6

Spre exemplu, fis, ierul control-alt-delete prezinta act, iunea ntreprinsa la

apasarea
CTRL-ALT-DEL, s, i anume repornirea sistemului:
1
2
3
4
5

root@ubuntui:/etc/event.d# cat control-alt-delete


# control-alt-delete - emergency keypress handling
#
# This task is run whenever the Control-Alt-Delete key combination is
# pressed. Usually used to shut down the machine.

6
7

start on control-alt-delete

8
9

exec /sbin/shutdown -r now "Control-Alt-Delete pressed"

la fel ca n
Scripturile rc* sunt aociate cu nivelurile de rulare. Dupa cum se observa,

/etc/inittab, se apeleaza /etc/init.d/rc cu argument numarul


nivelului de
rulare:
1
2
3
4
5
6
7
8

root@ubuntui:/etc/event.d# cat rc2


[..]
start on runlevel 2
stop on runlevel [!2]
script
[...]
exec /etc/init.d/rc 2
end script

Scripturile tty* prezinta modul de pornire a getty pentru diversele terminale virtuale (la
fel ca n /etc/inittab).
ncepnd cu Ubuntu 7.04 (Feisty Fawn), upstart a nlocuit cteva procese daemon
importante cum sunt cron, atd, anacron s, i inetd.

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

6.5.3

173

getty s, i login

Dupa pornirea daemonilor sistemului, init este responsabil cu pornirea proceselor

care asigura autentificarea utilizatorului n sistemul de calcul. Dupa cum s-a vazut
n
cadrul fis, ierului de configurare /etc/inittab, init pornes, te cte un proces getty
pentru fiecare terminal virtual pe baza imaginii /sbin/getty. n mod implicit sunt
pornite 6 procese getty pentru terminalele denumite tty1, tty2, ..., tty6. Terminalul
tty7 este rezervat mediului grafic (n cazul n care acesta este instalat). Autentificarea
nu se realizeaza de catre

n mediul grafic (prin introducerea unui utilizator/parola)


getty,
ci de display manager (vezi sect, iunea 13.2.2), o componenta a sistemului de ferestre.
Terminalele

virtuale sunt accesate prin intermediul combinat, iei de taste

CTRL-ALT-Fn, unde n este numarul


terminalului. Combinat, ia CTRL-ALT-F7 este
folosita pentru accesarea mediului grafic.
getty este responsabil cu crearea unei interfet, e de autentificare a utilizatorului s, i este
responsabil att pentru autentificarea prin terminale virtuale ct s, i pentru conexiunea pe
alte terminale precum interfet, ele seriale.

Dupa init, ializarea terminalului, getty ofera prompt-ul Login: catre


utilizator pe
terminalul virtual. Utilizatorul va trebui sa introduca numele de utilizator s, i sa apese
ENTER. Dupa introducerea numelui de utilizator, getty invoca /bin/login. Astfel,
imaginea sa este nlocuita cu imaginea /bin/login s, i se creeaza procesul login.

n continuare este ceruta parola utilizatorului (ale carei


caractere nu vor fi afis, ate pe
lor din motive de sigurant, a).
n acest moment, login poate
ecran n momentul tastarii
verifica validitatea utilizatorului care a dorit sa se autentifice. Daca utilizatorul a introdus
o pereche nume de utilizator/parola corecta atunci, n mod tipic, i se va deschide o
sesiune de shell pe terminalul curent. Altfel, procesul login moare, s, i, dupa un interval
de as, teptare, getty este repornit s, i ofera din nou promptul de autentificare utilizatorului.
reus, ite),
Schema de autentificare s, i pornire a sesiunii de shell (n cazul unei autentificari
este prezentata n figura 6.8:

Figura 6.8: Autentificarea ntr-un sistem Linux


Se observa ca se ruleaza getty pe toate terminalele. n momentul n care utilizatorul

174

INTRODUCERE N SISTEME DE OPERARE

introduce numele de utilizator, getty creaza procesul login care cere parola utilizatorului.
O data cu introducerea s, i validarea parolei, utilizatorului i este permis accesul n sistem
s, i se deschide, n mod tipic, o sesiune shell. Dupa cum se observa n figura 6.8,
utilizatorul dan ruleaza shell-ul Bash (/bin/bash).
La ncheierea sesiunii de shell curente, procesul getty este reponit as, a cum este
configurat n /etc/inittab (respawn).

Fis, ierele /etc/passwd s, i /etc/shadow


Fis, ierele /etc/passwd s, i /etc/shadow sunt utilizate pentru autentificarea
utilizatorilor n sistem s, i stocarea de informat, ii despre aces, tia. Dupa cum se poate
observa dintr-o analiza simpla a fis, ierului /etc/passwd:
1
2

razvan@asgard:~$ cat /etc/passwd | grep guest


guest:x:1001:1001:Guest Account,,,:/home/guest:/bin/bash

O intrare din acest fis, ier este de forma:


1

username:simbol_parola:uid:gid:extra_info:home_dir:interpretor

Doua dintre elementele prezentate sunt folosite de login pentru autentificarea


utilizatorilor: simbol_parola s, i interpretor.
Cmpul interpretor specifica ce comanda va fi executata n momentul n care un
utilizator a fost autentificat cu succes n sistem. De obicei aceasta comanda este un
interpretor de comenzi (n exemplul de mai sus /bin/bash), dar poate fi configurata
n figura 6.8 utilizatorul dan foloses, te /bin/bash. Daca se va
orice alta comanda.
completa intrarea asociata cu /usr/bin/vim, atunci orice autentificare pe un terminal
virtual va rezulta n deschiderea editorului vim pe acel terminal.
Al doilea cmp dintr-o intrare n /etc/passwd (denumit aici simbol_parola) era
folosit init, ial pentru a stoca parola ntr-un format criptat. n felul acesta, oricine avea
acces la fis, ier avea acces la parola criptata s, i putea folosi divers, i algoritmi pentru a
o sparge. O solut, ie ar fi fost restrict, ionarea accesului la fis, ier. Totus, i, acesta cont, ine
s, i alte informat, ii necesare altor comenzi. Solut, ia aleasa a fost crearea unui nou fis, ier,
/etc/shadow, care poate fi accesat doar de utilizatorul privilegiat.
1
2

root@anaconda:~# ls -l /etc/shadow
-rw-r----- 1 root shadow 1084 2009-07-21 22:19 /etc/shadow

Pentru mai multe detalii


Fis, ierul shadow cont, ine numele de utilizator s, i parola criptata.
consultat, i paginile de manual (man 5 passwd,
man 5 shadow) sau
sect, iunea 10.2.3.

6.5.4

Sesiune de shell

n
Dupa rularea init s, i autentificarea utilizatorului n sistem, acestuia i este oferita,
mod tipic, o sesiune de shell (conform configurat, iei din fis, ierul /etc/passwd).

naintea oferirii promptului catre


utilizator, procesul shell nou creat cites, te un set de
fis, iere de configurare. Acestea sunt folosite pentru a stabili formatul promptului,
umask-ul curent, aliasurile de comenzi, variabilele de mediu.

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

175

n cazul unui interpretor bash (Bourne Again Shell), fis, ierele de configurare citite sunt n
ordine:

/etc/profile: acesta este fis, ierul global de configurare pentru sesiunile de


shell;

~/.bash_profile sau ~/.bash_login sau ~/.profile: se executa

primul gasit;

~/.bashrc este fis, ierul obis, nuit de configurare locala;


~/.bash_profile cont, ine linia
1

drept urmare,

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

pentru a interpreta acest fis, ier.


Dupa interpretarea fis, ierelor de configurare, se stabiles, te mediul curent de lucru s, i
utilizatorului i este oferit promptul unde poate introduce comenzi.

6.6
6.6.1

Studiu de caz
Grub 2

, ire majora n ultimii ani, GRUB a ramas

n ciuda faptului ca nu a oferit nici o mbunatat


cel mai utilizat bootloader n cadrul distribut, iilor GNU/Linux. Aceasta datorita faptului ca
bootloader -ul este una din cele mai delicate componente ale sistemului, o actualizare
gres, ita a sa ducnd la nefunct, ionarea sistemului de operare.
, iri aduse GRUB este s, i
Unul din elementele care au contribuit la lipsa de mbunatat
arhitectura veche s, i greu de extins. n 2002 a nceput lucrul la o noua versiune de
destul de mari.
GRUB (GRUB2), versiune care a adus aduca schimbari
GRUB212 a fost rescris de la zero pentru a asigura o portabilitate s, i o modularitate
a:

superioara versiunii anterioare. Printre avantajele pe care le ofera se numar

suport pentru scripturi;


portabilitate pe mai multe arhitecturi;
suport pentru i18n3 ;
un nou sistem de denumire a partit, iilor.

Fis, iere de configurare


GRUB2 se configureaza ntr-un mod diferit fat, a de GRUB. n primul rnd numele
fis, ierului de configurare s-a schimbat din /boot/grub/menu.lst n
/boot/grub/grub.cfg. Spre deosebire de GRUB, noul fis, ier de configurare nu mai

este editat direct de catre


utilizator, ci este generat automat:
1

http://www.gnu.org/software/grub/grub-2.en.html
https://wiki.ubuntu.com/Grub2
3
http://en.wikipedia.org/wiki/Internationalization_and_localization
2

176

1
2
3
4
5
6
7
8

INTRODUCERE N SISTEME DE OPERARE

root@ant:~# cat /boot/grub/grub.cfg


#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using
templates
# from /etc/grub.d and settings from /etc/default/grub
#
[...]

Configurarea GRUB2 se realizeza din trei locuri:


legate n
fis, ierul /etc/default/grub: cont, ine un set general de configurari,
principal de diverse opt, iuni ale meniului de boot;

directorul /etc/grub.d: cont, ine un set de scripturi care descopera imaginile de


kernel instalate n sistem s, i genereaza grub.cfg;
directorul /boot/grub: cont, ine bootloader -ul s, i diversele module pe care acesta
le foloses, te.
Dupa editarea unuia din fis, ierele din /etc/grub.d sau a /etc/default/grub va
trebui rulata comanda update-grub2 pentru ca fis, ierul /boot/grub/grub.cfg sa
fie regenerat.

Editarea opt, iunilor meniului


ale meniului de boot. Spre exemplu
Fis, ierul /etc/default/grub cont, ine configurari
GRUB_DEFAULT specifica opt, iunea din meniu selectata n mod implicit, iar
GRUB_TIMEOUT specifica timeout-ul dupa care opt, iunea implicita va fi utilizata pentru
bootare.
1
2
3

root@ant:~# cat /etc/default/grub


# If you change this file, run update-grub afterwards to update
# /boot/grub/grub.cfg.

4
5
6
7
8
9
10

GRUB_DEFAULT=0
GRUB_TIMEOUT="10"
GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
[...]

Adaugarea
unei noi opt, iuni n meniu de boot
Opt, iunile

din

meniul

GRUB2

sunt

create

folosind

scripturile

din

/etc/grub.d:
00_header: ncarca informat, iile din /etc/default/grub;
05_debian_theme: configureaza fundaluri, culori s, i teme;
10_linux: cauta imagini de kernel pe disc s, i le introduce n meniu;

directorul

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

177

20_memtest86+: introduce n meniu imaginea /boot/memtest86+.bin,

daca aceasta exista;

30_os-prober: cauta alte imagini de sisteme de operare s, i le include n meniu;


statice n meniu.
40_custom: permite utilizatorului sa introduca intrari
Ordinea n care apar opt, iunile n meniu este data de ordinea numelor fis, ierelor. Astfel,

ntotdeauna memtest86+ (20_memtest86+) va aparea


dupa imaginile de kernel de
pe disc (10_linux).

, i: se editeaza fis, ierul 40_custom


Pentru a adauga
o noua opt, iune exista doua posibilitat
sau se poate crea un fis, ier nou, caz n care numele fis, ierului nou creat va defini pozit, ia
n meniu.
intrarii

Un exemplu de sintaxa care se foloses, te pentru adaugarea


de noi opt, iuni este:
1
2
3
4
5
6
7

echo "Adding Custom Kernel \& SystemRescue" >\&2


cat << EOF
menuentry "Ubuntu, linux 2.6.31-11-custom" {
set root=(hd0,9)
linux /boot/vmlinuz-2.6.31-11-custom root=UUID=c6829e27-2350-4e84
-bdbb-91b83f018f98 ro
initrd /boot/initrd.img-2.6.28-11-generic
}

8
9
10
11
12
13
14

menuentry "Boot SystemRescue CD from hard drive" {


set root=(hd1,10)
linux
/sysrcd/rescuecd subdir=sysrcd setkmap=us
initrd /sysrcd/initram.igz
}
EOF

Linia
echo "Adding Custom Kernel & SystemRescue" >&2 nu este

Daca este inclusa,


atunci textul Adding... va fi afis, at n timpul
neaparat
necesara.
execut, iei comenzii update-grub2. Celelalte opt, iuni sunt similare cu cele din GRUB.
Unul din elementele de noutate pe care le-a introdus GRUB2 este o noua schema de
denumire a partit, iilor. Astfel, discurile sunt denumite n forma hdX, unde X este un numar
ce ncepe de la 0 (spre exemplu, primul disc SATA, este denumit hd0, al doilea disc SDB
este hd1 etc.), similar cu GRUB. n schimb, partit, iile se denumesc de forma sdaY, cu Y
ncepnd de la 1 (de exemplu a treia partit, ie de pe sda este sda3).

6.6.2

Pornirea sistemului de operare Windows XP

, te aceeas, i pas, i ca n cazul pornirii


Pornirea sistemului de operare Windows XP urmares

Linux: pornirea sistemului, ncarcarea


BIOS, ncarcarea
bootloader -ului, ncarcarea
nucleului, pornirea serviciilor.

Pas, ii pna la ncarcarea


bootloader-ului sunt independent, i de sistemul de operare s, i,
deci, identici cu cei pentru Linux.
Bootloader-ul pentru Windows NT (NT, 2000, XP, 2003) este NT Loader (NTLDR).

178

INTRODUCERE N SISTEME DE OPERARE

NTLoader
La fel ca s, i n cazul Linux, sectorul de boot al hard-disk-ului (MBR) sau al unei partit, ii

(VBR) este limitat s, i este folosit pentru ncarcarea


NTLDR. Imaginea acestuia rezida n
C:\Windows\ntldr.

Dupa ncarcarea
bootloader-ului, acesta consulta fis, ierul boot.ini pentru a localiza
informat, iile de pe partit, ia de sistem.

Configurare NTLoader (boot.ini)


Fis, ierul boot.ini se afla pe partit, ia de sistem (C:). Pentru vizualizarea s, i accesarea
acestuia trebuie permisa vizualizarea fis, ierelor de sistem (Tools->Folder Options
->View->Hide protected operating system files).
Un exemplu de cont, inut al boot.ini este prezentat n continuare:
1
2
3
4
5

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP
Professional" /noexecute=optin /fastdetect

n cazul existent, ei mai multor sisteme Windows, utilizatorului i va fi afis, at un ecran de


ator

select, ie (aseman
cu cel al GRUB).

Variabila timeout specifica timpul de as, teptare nainte de a ncarca


sistemul de

operare dat de opt, iunea implicita.


Lista cu opt, iunile posibile de boot-are a nucleului Windows XP se poate consulta aici1 .

ncarcarea
nucleului
Dupa rularea bootloader -ului, acesta ncarca n memorie imaginea de nucleu a
Windows, ntoskrnl.exe, s, i hall.dll (Hardware Abstraction Layer ), controlul fiind
apoi oferit nuclelului.

Nucleul este ncarcat


n memorie n doua faze: n prima faza se init, ializeaza dispozitivele
sistemului (procesor, memorie), iar n a doua faza se ncarca device driver-ele de sistem
necesare.

Pornirea proceselor importante

Dupa ncarcarea
nucleului n memorie, sunt pornite, n ordine, doua procese importante:

smss (Session Manager Subsystem): acesta monteaza dispozitivele din sistem,


creeaza variabilele de mediu s, i pornes, te winlogon (Windows Logon Manager );
1

http://support.microsoft.com/default.aspx?scid=kb;en-us;833721

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

179

winlogon (Windows Logon Manager ):

este procesul care se ocupa de


reus, ite sunt pornite
autentificarea utilizatorilor n sistem; n urma unei autentificari
shell-ul Windows (explorer) s, i alte procese ale utilizatorului.

aici1 .
Mai multe detalii despre procesul de pornire a unui sistem Windows XP se pot gasi

6.6.3

Interoperabilitate Linux-Windows

n cazul sistemelor dual-boot Linux-Windows se poate ntampla sa se suprascrie MBR-ul


s, i sa se piarda astfel opt, iunea directa de boot-are a unuia dintre sistemele de operare.
Pentru a recupera bootloader -ul pierdut, trebuie rescris MBR-ul.

Reinstalarea GRUB
Situat, ia cea mai frecventa ce necesita o reinstalare GRUB este aceea n care se
reinstaleaza Windows pe un sistem pe care exista instalata s, i o distribut, ie Linux. La
instalarea Windows suprascrie MBR astfel nct se pierde stage1 din GRUB.
Pentru a reinstala GRUB, este necesar un mediu boot-abil Linux. Acesta poate fi un
n cazul unei dischete boot-abile utilizatorului i este
LiveCD sau o discheta boot-abila.
oferit direct prompt-ul de grub. n cazul unui LiveCD, utilizatorul va trebui sa deschida o
consola s, i sa acceseze de acolo consola de GRUB:
1
2

root@asgard:~# grub
Probing devices to guess BIOS drives. This may take a long time.

GNU GRUB

version 0.97

(640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported.


For
the
first
word, TAB lists possible command
completions. Anywhere else TAB lists the possible
completions of a device/filename. ]

6
7
8
9
10
11

grub>

Presupunnd ca se dores, te instalarea GRUB pe primul hard-disk din sistem, vor trebui
urmat, i pas, ii de mai jos:

specificarea partit, iei care cont, ine imaginea stage2 de GRUB:


1

grub> root (hd0,2)

daca nu se s, tie pe ce partit, ie se afla imaginile se poate folosi comanda find,

cautnd
unul din fis, ierele din /boot. Cel mai adesea este cautat
stage1:
1
2

grub> find /boot/grub/stage1


(hd0,2)

dupa descoperirea partit, iei se realizeaza pasul 1, apoi se instaleaza imaginea de


GRUB n MBR:
1
1

grub> setup (hd0)

http://technet.microsoft.com/en-us/library/bb457123.aspx

180

INTRODUCERE N SISTEME DE OPERARE

imaginea de GRUB poate fi instalata s, i n sectorul de boot al unei partit, ii (VBR):


1

grub> setup (hd0,0)

n acest caz, GRUB va trebui sa fie pornit (chainloaded) cu un alt bootloader.


nsa,
Comanda quit se foloses, te pentru ies, irea din consola GRUB. Dupa repornirea
sistemului, acesta va afis, a ecranul de opt, iuni GRUB pentru select, ia sistemului de
operare dorit.

Reinstalarea NTLoader
a
Reinstalarea NTLDR este necesara n cazul n care se instaleaza o distribut, ie Linux far
a se instala s, i un bootloader (spre exemplu GRUB), sau n cazul unui MBR corupt.
Pentru repararea MBR, trebuie folosita consola de recuperare Windows XP (Recovery
Console). Pentru accesarea acesteia se foloses, te CD-ul de instalare Windows s, i dupa
bootare se alege opt, iunea Repair. n continuare se apasa R pentru rularea Emergency
Repair Process s, i se alege Fast sau Manual Repair. Fast Repair este recomandata
, ii utilizatorilor, iar Manual Repair administratorilor s, i utilizatorilor avansat, i.
majoritat
, i online1 .
Mai multe detalii gasit

6.6.4

Personalizarea ecranului GRUB

Ecranul de opt, iuni prezentat de GRUB poate fi anost. Pentru a rezolva acest neajuns se
poate folosi o alta imagine de fundal, denumita GRUB splashimage. Exista numeroase
site-uri care ofera astfel de imagini234 ). Imaginile sunt imagini .xpm arhivate (de exemplu
hubble.xpm.gz).
Pentru folosirea unei imagini splash de GRUB trebuie editat fis, ierul principal de
configurare a GRUB (/boot/grub/menu.lst). Pas, ii ce trebuiesc urmat, i sunt
prezentat, i mai jos:

crearea unei copii de sigurant, a a fis, ierului de configurare GRUB:


1

root@asgard:/boot/grub# cp menu.lst menu.lst.old

obt, inerea unui fis, ier .xpm.gz care cont, ine imaginea de splash folosita pentru
GRUB:
1
2
3
4
5
6
7
1

root@asgard:/boot/grub# wget http://schragehome.de/splash/hubble.xpm


.gz
--2009-09-26 06:23:27-- http://schragehome.de/splash/hubble.xpm.gz
Resolving schragehome.de... 82.165.105.215
Connecting to schragehome.de|82.165.105.215|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 99593 (97K) [image/x-xpixmap]
Saving to: hubble.xpm.gz

http://www.ntfs.com/missing-corrupted-system-files.htm
http://schragehome.de/splash/
3
http://www.queervisions.com/arch/2007/04/9_grub_splash_i.html
4
http://kde-look.org/index.php?xcontentmode=35x45
2

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

181

8
9

100%[===================================>] 99,593
0.5s

209K/s

in

10
11

2009-09-26 06:23:27 (209 KB/s) - hubble.xpm.gz saved [99593/99593]

editarea fis, ierului de configurare:


1
2
3
4
5

[...]
# Pretty colours
#color cyan/blue white/blue
splashimage=(hd0,2)/boot/grub/hubble.xpm.gz
[...]

n exemplul de mai sus partit, ia unde se afla imaginea de GRUB este a treia partit, ie
de pe primul disc (hd0,2).
Dupa editarea s, i salvarea fis, ierului se repornes, te sistemul. Noul ecran de opt, iuni GRUB
va folosi ca imagine de fundal hubble.xpm.gz.

Cuvinte cheie

pornirea/repornirea unui sistem

consola GRUB

booting/bootstrapping

imagine de nucleu

fazele pornirii unui sistem de operare

opt, iuni de ncarcare


a nucleului

BIOS

init

POST

runlevel

CMOS

/etc/inittab

dispozitiv boot-abil

/etc/init.d, /etc/rcX.d

sector de boot/sector bootabil

getty

MBR, VBR

login

tabela de partit, ii

/etc/passwd, /etc/shadow

bootloader

/etc/profile, ~/.bash_profile, ~/.bashrc

fazele unui bootloader (stages)

NTLDR

GRUB

boot.ini

stage1, *_stage1_5, stage2

smss, winlogon

/boot/grub/menu.lst

Recovery Console

ntrebari
1. Care este ordinea corecta a pornirii unui sistem?

q vmlinuz, init, GRUB, BIOS


q GRUB, BIOS, init, vmlinuz

182

INTRODUCERE N SISTEME DE OPERARE

q BIOS, GRUB, vmlinuz, init


q init, vmlinuz, BIOS, GRUB
2. Ce este un sector de boot?

q primul sector al primei partit, ii


q primul sector al unei partit, ii sau al unui hard-disk

q un sector ce cont, ine semnatura


0xAA55 (ultimii doi octet, i)
, te faza a doua a GRUB (stage2)
q un sector pe care se gases

3. Care din urmatoarele


este un nlocuitor al init?

q upstart
q downstart
q slowstart
q faststart
4. Cte partit, ii primare, active, extinse, logice se pot afla pe un hard-disk?

q oricte, 1, 2, 4
q 1, oricte, oricte, 4
q 4, 1, 1, oricte
q 1, oricte, 2, oricte

5. Care din urmatoarele


asocieri NU este valida?

q GRUB/NTLDR
q vmlinuz/ntoskrnl
q POST/CMOS
q getty/winlogon

6. Care faza a GRUB este resposabila cu ncarcarea


imaginii de nucleu Linux?

q stage1
q stage1.5
q stage2
q stage3
7. Care este fis, ierul principal de configurare GRUB pe un sistem Debian/Ubuntu?

q /etc/main.cf
q /etc/grub.conf
q /boot/grub.conf
q /boot/grub/menu.lst
8. Care este ordinea corecta de pornire a unei sesiuni shell?

CAPITOLUL 6. PORNIREA S, I INIT, IALIZAREA SISTEMULUI

183

q login, init, getty, bash


q getty,bash, login, init
q init, getty, login, bash
q init, login, bash, getty
n notat, ia GRUB, a 3-a partit, ie de pe al doilea disc?
9. Cum se reprezinta,

q /dev/hdb3
q /dev/hda2
q (hd1,2)
q (hd2,3)
10. Fis, ierul /etc/shadow cont, ine parolele criptate ale utilizatorilor sistemului. Poate
fi accesat numai de utilizatori privilegiat, i ai sistemului.

q adevarat,
adevarat

q adevarat,
fals

q fals, adevarat

q fals, fals

Capitolul 7
Analiza hardware a sistemului
Its hardware that makes a machine fast. Its software
that makes a fast machine slow.
Craig Bruce

Ce se nvat, a din acest capitol?

Principalele componente hardware ale unui sistem de calcul


Mecanismele de accesare s, i interogare a dispozitivelor hardware

ncarcarea
s, i folosirea modulelor de kernel

Utilitare de interact, iune cu dispozitivele: lspci, lsusb, smartmontools


Lucrul cu dispozitivele sistemului; comanda dd
Interact, iunea cu sistemul: /proc, sysctl
Cum se poate realiza o copie de sigurant, a pentru MBR

7.1

Structura unui sistem de operare

Sistemul de operare este cel care se ocupa de managementul resurselor hardware s, i


software prezente n computer. SO are mai multe componente, fiecare cu un rol bine
definit. Diagrama 7.1 prezinta modul n care este structurat accesul la hardware.
Sistemul de operare este compus din:

kernel: nucleul sistemului de operare se ocupa de comunicat, ia directa cu


hardware-ul s, i ofera un sistem de management al resurselor pentru aplicat, iile din
sistem;

biblioteci de funct, ii pun la dispozit, ie aplicat, iilor un API (Application


Programming Interface) comun pentru accesul la resursele oferite de kernel;

aplicat, ii cele care vin cu un sistem de operare sunt de obicei utilizate pentru
configurarea sistemului, modificarea datelor din sistem etc. Aceste aplicat, ii pot sa
utilizeze biblioteci de funct, ii sau pot comunica direct cu kernel-ul.
185

186

INTRODUCERE N SISTEME DE OPERARE

Figura 7.1: Accesul la hardware


programe n
Sistemul de operare face distinct, ia ntre doua spat, ii n care se pot gasi
execut, ie: spat, iul utilizator (user-space) s, i spat, iul kernel (kernel-space). Prin spat, iu se
nt, elege att spat, iu de memorie ct s, i mediu de execut, ie. Fiecare spat, iu are alte condit, ii
de lucru.
Spat, iul kernel este spat, iul n care ruleaza kernel-ul. Cont, ine doar kernel-ul s, i

componentele sale (precum driver-ele ncarcate


la un moment dat). Tot ceea ce
, te n spat, iul kernel are acces direct la hardware.
se gases

Spat, iul utilizator este spat, iul n care se gasesc


aplicat, iile s, i bibliotecile de funct, ii
, te n spat, iul utilizator nu
utilizate de acestea la un moment dat. Tot ceea ce se gases
are acces direct la hardware.
Toate act, iunile aplicat, iilor din spat, iul utilizator trebuie sa treaca prin kernel. Comunicat, ia
dintre spat, iul utilizator s, i spat, iul kernel se realizeaza prin apeluri de sistem.
Apelul de sistem este un mecanism prin care programele sau bibliotecile din spat, iul
utilizator acceseaza resursele puse la dispozit, ie de kernel.
Practic, apelurile de sistem sunt funct, ii implementate n kernel pe care aplicat, iile din
spat, iul utilizator le acceseaza direct sau prin intermediul bibliotecilor de funct, ii.
Acest capitol va analiza modul de lucru intern pentru un sistem Linux.

7.2

Considerente hardware

Componentele fizice ale sistemului poarta denumirea generica de hardware. Pentru


folosirea acestora, utilizatorul dispune de un sistem de operare s, i aplicat, ii. Acestea
reprezinta nivelul de software de peste hardware. Fiecare componenta este esent, iala s, i
nu poate funct, iona n lipsa celeilalte.
Sistemul de operare s, i aplicat, iile de baza sunt cele care asigura interfat, a cu hardware-ul
directe a hardware-ului. Din punctul de
pentru a preveni, astfel, dificultatea programarii

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

187

vedere al utilizatorului, interfat, a cu hardware-ul este limitata la un set de apeluri catre

sistemul de operare s, i aplicat, iile de baza.

7.2.1

Structura unui sistem de calcul

Din punct de vedere structural, un sistem de calcul este un set de componente cu roluri
bine definite care comunica pentru ndeplinirea unei sarcini. Sistemele de calcul din ziua
de azi urmeaza structura von Neumann prezentata mai jos. Aceasta este folosita pentru
a defini setul de componente care exista ntr-un sistem de calcul s, i interact, iunea dintre
acestea.

Figura 7.2: Interact, iunea componentelor hardware ale unui sistem de calcul
arhitectura von Neumann precizeaza 5 componente ale unui
Dupa cum se observa,
sistem de calcul:

unitatea de comanda sau unitatea de control este responsabila cu comandarea


unitatea de comanda va interpreta
modului n care celelalte componente lucreaza;
, ii aritmetice s, i
codul unui program (va decodifica instruct, iunile) s, i va cere unitat
logice execut, ia sarcinilor necesare;

unitatea aritmetica s, i logica se mai numes, te unitatea de execut, ie; rolul acesteia
unitatea aritmetica
este de a executa codul transmis de la unitatea de comanda;
are un set de registre pentru stocarea locala a informat, iei s, i un acumulator pentru
, ii aritmetice s, i logice este ndeplinit de procesor;
efectuarea de operat, ii; rolul unitat

memoria este componenta n care se stocheaza codul programului de executat

s, i datele acestuia; memoria este folosita de unitatea de execut, ie s, i de comanda;


pe cnd
unitatea de comanda cites, te din memorie instruct, iunile s, i le decodifica,
unitatea de execut, ie cites, te s, i scrie n memorie datele cu care efectueaza diverse
calcule;

dispozitivele de intrare/ies, ire (periferice) sunt cele care intermediaza


comunicat, ia sistemului cu exteriorul; informat, iile de la aceste dispozitive sunt
copiate n memorie s, i folosite ulterior de unitatea de comanda s, i unitatea de
execut, ie; exemple de dispozitive periferice sunt monitorul, tastatura, mouse-ul,
hard disk-ul etc.

188

7.2.2

INTRODUCERE N SISTEME DE OPERARE

Procesorul

Procesorul sau unitatea centrala de prelucrare (CPU Central Processing Unit) este
, ii de comanda s, i a celei de execut, ie din
creierul sistemului. Este echivalentul unitat
arhitectura von Neumann. Procesorul este cel care va interpreta codul unui program
s, i va efectua operat, ii cu datele acestuia s, i este componenta de baza a execut, iei unui
proces.
Procesorul este cel care determina arhitectura unui sistem de calcul.
Astfel,
procesoarele Intel sau AMD fac parte din arhitectura x86. Majoritatea procesoarelor
mai noi fac parte din arhitectura x86_64. Arhitectura unui sistem de calcul se refera la
setul de instruct, iuni pe care procesorul le ofera utilizatorului.
Procesorul dispune de un set de locat, ii de stocare de foarte mare viteza denumite
registre. Viteza procesorului este foarte mare comparativ cu viteza memoriei s, i de
aceea este nevoie de registre pentru a efectua calcule rapide. n ziua de azi
dimensiunea registrelor este de 32 sau de 64 de bit, i. Dimensiunea registrelor este
sursa denumirii sistemului. Un sistem este denumit sistem pe 32 de bit, i sau sistem pe
64 de bit, i n funct, ie de dimensiunea registrelor sale.
, i de procesare (core). O unitate de
Un procesor poate avea una sau mai multe unitat
procesare este un circuit electronic care executa instruct, iuni. Un procesor cu o singura
unitate de procesare se numes, te single-core, iar un procesor cu doua sau mai multe
, i de procesare aflate pe acelas, i circuit integrat se numes, te multi-core. Performant, a
unitat
obt, inuta prin folosirea mai multor unitat, i de procesare depinde de existent, a firelor de
execut, ie multiple n cadrul aplicat, iilor s, i de suportul sistemului de operare.

Caracteristica vitezei unui procesor este, de obicei, frecvent, a acestuia, masurat


a n Hz.
n zilele noastre, frecvent, a de lucru a unui procesor este de ordinul GHz. Calculatoarele
persoanele folosesc procesoare cu arhitectura i386, precum: Intel Pentium, Intel Xeon,
AMD Athlon, AMD Opteron etc.
nsemnat de arhitecturi menite sa adreseze de la constrngeri specifice:
Exista un numar
spre exemplu cele pentru platforme integrate (embedded systems): ARM, MIPS, sau alte
platforme de calcul intensiv: Alpha, PowerPC etc.

Pentru arhitecturi diferite poate varia numarul


de bit, i pe care sunt efectuate operat, iile
de registre aflate la dispozit, ia procesorului. Astfel nu putem compara viteza
sau numarul
unui procesor i386 cu un procesor PowerPC folosind frecvent, a.

7.2.3

Ierarhia de memorie

n arhitectura unui calculator modern, memoria este organizata n mod ierarhic. Fiecare
, ime de banda mai mare, dimensiune mai mica s, i latent, a mai
nivel din ierarhie are o lat
a dect nivelul inferior. Dupa cum se observa n figura 7.3 cele 4 niveluri principale
scazut
sunt: registrele procesorului, memoria cache, memoria RAM s, i hard disk-ul.

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

189

Figura 7.3: Ierarhia de memorie


Registrele procesorului
n vrful ierarhiei de memorii se afla registrele procesorului care au cea mai mare viteza
de acces, de obicei un ciclu de CPU, dar dimensiunea de cteva sute de bytes. Ele sunt

folosite pentru a stoca datele care sunt prelucrate de catre


procesor la momentul curent.

Memoria cache
Din cauza diferent, ei mari de viteza ntre memoria RAM s, i procesor, se foloses, te un
nivel intermediar de memorie: mai rapida dar mai scumpa s, i de dimensiunea mai
Aceasta memorie poarta numele de memorie cache s, i este folosita pentru
mica.
ret, inerea anumitor informat, ii din memoria RAM.

Memoria cache foloses, te conceptul de localizare temporala s, i spat, iala.


Aceasta
nseamna ca n momentul n care procesorul dores, te sa acceseze o zona de memorie,
mai nti va compara adresa acesteia cu adresele zonelor de memorie care au fost
copiate deja n cache pna n acel moment. Daca descopera ca aceasta zona exista n
cache, ea va fi accesata direct de acolo. n caz contrar, zona de memorie dorita va fi
copiata n cache pentru a putea fi refolosita n momentele apropiate. Cnd cache-ul se

umple, intrarile
din el sunt s, terse n ordinea vechimii lor. n mod tipic, memoria cache
are o dimensiune de ordinul sutelor de KB sau ctorva MB.
Exista trei tipuri de memorie cache: L1, L2 s, i L3.
Memoria cache L1, sau de nivel 1, este o memorie ncorporata n procesor, de
fiind folosita pentru a accesa date importante
dimensiune foarte mica dar foarte rapida,

s, i frecvent folosite de catre


procesor. Poate fi accesata n ctiva cicli de CPU s, i are
dimensiunea de zeci de KB. Memoria cache L1 este de obicei de tipul SRAM (Static
RAM), ceea ce nseamna ca nu necesita refresh pentru a ment, ine datele.
Memoria cache L2 mai este numita s, i cache secundar, fiind folosita pentru a stoca date
folosite recent. De obicei este externa procesorului dar se tinde spre ncorporarea ei n

190

INTRODUCERE N SISTEME DE OPERARE

procesor. Poate fi folosita ca buffer pentru datele s, i instruct, iunile ce urmeaza a fi preluate
din memoria RAM. Are o latent, a de 2 pna la 10 ori mai mare dect memoria cache L1,
dar dimensiunea mult mai mare. Init, ial dimensiunea memoriei cache L1 era de 256 sau
de 512 KB, iar n prezent are dimensiunea de ordinul MB.
Memoria cache L3 este o memorie specializata care coopereaza cu memoria cache L1
at
, i performant, ele sistemului. Are dimensiunea mai mare dect
s, i L2 pentru a mbunat
memoriile L1 s, i L2, fiind de ordinul MB. Des, i latent, a introdusa este mai mare dect
pentru L1 s, i L2, accesarea ei este mai rapida dect n cazul memoriei RAM.

Memoria RAM
Cnd ne referim la memoria unui sistem de calcul ne vom referi, de obicei, la memoria
RAM (Random Access Memory ). Aceasta este folosita pentru a stoca datele s, i codul
unui proces. n momentul n care se dores, te efectuarea unui calcul sau decodificarea
unei instruct, iuni, se face un apel la memorie pentru citirea acelei informat, ii.
n zilele noastre, memoria RAM folosita este de tipul DRAM (Dynamic RAM). Tipul cel
mai recent este DDR3. Caracteristicile importante ale unui modul de memorie RAM
sunt:

frecvent, a de lucru: de ordinul MHz


timpul de acces: de ordinul nanosecundelor

rata de transfer: masurat


a n GB/s

capacitatea: actualmente de ordinul GB

Hard disk-ul
Probabil cel mai important dispozitiv periferic al sistemului este hard-disk-ul (HDD
hard disk drive). Acesta este folosit, de obicei, ca suport fizic pentru sistemele de fis, iere.
a datelor.
Hard-disk-urile reprezinta dispozitive de stocare permanenta (nepersistenta)
Parametrii important, i care caracterizeaza un hard-disk sunt:

capacitatea acestuia: n ziua de azi de ordinul sutelor de GB sau ordinul TB;

viteza (masurat
a n RPM Rotations Per Minute): cu valori tipice de 5400 RPM,
7200 RPM, 10000 RPM;

dimensiunea buffer-ului (un cache folosit pentru marirea


vitezei): cu valori de
ordinul MB.
Exista un set de interfet, e s, i magistrale prin care un hard-disk poate fi accesat. Dintre
acestea amintim ATA, Serial ATA, SCSI, SAS etc. Fiecare dintre aceste magistrale ofera
o interfat, a distincta de conectare a hard-disk-ului la placa de baza s, i un alt protocol de
comunicare cu hard-disk-ul pentru accesarea informat, iilor de pe acesta.
Un hard disk cont, ine unul sau mai multe discuri neflexibile de metal numite platane. n
, ita n piste care sunt cercuri concentrice pe
cazul unui disc formatat, suprafat, a este mpart
fiecare parte a platanelor. Pistele egal distantat, e de ax de pe fiecare parte a platanului

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

191

, ita n sectoare
s, i de pe toate platanele, sunt grupate n cilindri. Fiecare pista este mpart
de cte 512 bit, i fiecare.

Figura 7.4: Structura unui hard-disk

7.2.4

interconectarea componentelor
Placa de baza;

Placa de baza (mainboard, motherboard) este componenta fizica al carei


rol este
, ii celorlalte componente fizice. n mod tipic, o placa de baza
asigurarea conectivitat
are locuri (sloturi, socket-uri) pentru celelalte componente: procesor, memorie, placa
video etc.
Dupa cum se observa s, i n figura 7.5, placa de baza cont, ine doua nuclee de
interconectare denumite chipset-uri. Acestea sunt northbridge s, i southbridge. As, a
de baza
cum rezulta s, i din denumirea lor, northbridge-ul se afla n partea de sus a placii
iar southbridge-ul n partea de jos. Exista o conexiune a northbridge cu southbridge-ul.
Northbridge-ul mai este numit s, i Memory Controller Hub (MCH) s, i este folosit pentru a
conecta componentele rapide ale unui sistem de calcul:

Procesorul
Memoria RAM
Placa video (prin PCI Express sau AGP)
Northbridge-ul dicteaza tipul de procesor, cantitatea, viteza s, i tipul de memorie RAM

care poate fi folosita.

192

INTRODUCERE N SISTEME DE OPERARE

Southbridge-ul mai este numit s, i I/O Controller Hub (ICH) s, i este folosit pentru

interconectarea componentelor mai lente ale sistemului.


Cont, ine urmatoarele
componente s, i magistrale:

Magistrala PCI pentru legatura


cu placile
PCI

mouse, port paralel, port


Magistrala LPC pentru legatura
cu Super I/O (tastatura,
serial, controler de floppy)

Magistrala SPI pentru legatura


cu dispozitive de stocare de tip flash

Magistrala SM pentru legatura


cu alte dispozitive de pe placa de baza (senzori de
temperatura s, i ventilator)

Controler DMA
Controler de ntreruperi
Dispozitivele de stocare (IDE, SATA)
Real Time Clock (RTC)
USB
Ethernet (Interfat, a de ret, ea)
Interfat, a audio
Memorie BIOS

7.2.5

Dispozitive periferice; magistrale

Dispozitivele periferice ale sistemului asigura comunicat, ia acestuia cu exteriorul.


Conectarea acestor dispozitive periferice se realizeaza prin intermediul unor conectori
Aces, ti conectori sunt oferit, i fie direct de placa de baza (n cazul unor
n placa de baza.
incorporate), fie de o placa specializata conectata pe placa de baza (placa video,
placi
placa de ret, ea etc.)
n placa de baza se realizeaza prin intermediul unor sloturi
Conexiunea diverselor placi
s, i a unor magistrale dedicate: PCI, AGP, USB etc.
Magistrale importante ale sistemului sunt:

FSB Front Side Bus: conecteaza procesorul de northbridge


Back Side Bus conecteaza memoria cache de procesor
PCI Peripheral Component Interconnection
AGP Advanced Graphics Port
PCI Express
USB Universal Serial Bus

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

193

de baza
Figura 7.5: Diagrama bloc a placii

7.3

Suportul pentru dispozitive la nivelul kernel-ului

Nucleul sistemului de operare este cel care intermediaza accesul aplicat, iilor la hardware.
Pentru ca hardware-ul sa poata fi utilizat, nucleul trebuie sa s, tie cum sa comunice cu
acesta. Nucleul ofera suport de comunicat, ie cu dispozitivele sistemului prin intermediul
driver-elor.

194

INTRODUCERE N SISTEME DE OPERARE

Driver-ul reprezinta un set de rutine care se executa la nivelul nucleului s, i care permit
accesul la un anumit dispozitiv.
Dispozitivele pe care le poate utiliza o aplicat, ie pot fi dispozitive fizice reale sau pot fi
dispozitive virtuale (care simuleaza comportamentul unui dispozitiv hardware). n Linux,

suportul pentru dispozitive poate fi inclus n kernel (n momentul compilarii)


sau poate

fi disponibil prin intermediul modulelor, module care pot fi ncarcate


la cerere de catre
sistem.
n prezent, majoritatea distribut, iilor cont, in kernel-uri compilate cu suport generic pentru
unele dispozitive mai des ntlnite, iar suportul pentru anumite dispozitive este disponibil

prin module. Modulele sunt ncarcate


doar daca dispozitivele aferente sunt prezente.

7.3.1

Listarea modulelor ncarcate


la un moment dat n sistem

Pentru a lista modulele ncarcate


la un moment dat se utilizeaza comanda lsmod:
1
2
3
4
5
6
7
8
9
10
11

ubuntu@ubuntu:~$ lsmod
Module
rfcomm
l2cap
bluetooth
lp
cpufreq_userspace
cpufreq_powersave
cpufreq_ondemand
freq_table
[...]

Size
40856
25728
55908
12452
5408
2688
9228
5792

Used by
0
5 rfcomm
4 rfcomm,l2cap
0
0
0
0
2 cpufreq_stats,cpufreq_ondemand

Comanda afis, eaza pentru fiecare modul n parte, pe coloane:

numele;
spat, iul de memorie ocupat de acel modul;

numarul
s, i numele modulele care depind de el.
Acelas, i lucru se poate afla prin intermediul sistemului de fis, iere virtual /proc. Fis, ierul

/proc/modules cont, ine lista modulelor ncarcate


la un moment dat.
1
2
3
4
5
6
7
8
9
10
11

ubuntu@ubuntu:~$ cat /proc/modules


rfcomm 40856 0 - Live 0xe0bbb000
l2cap 25728 5 rfcomm, Live 0xe0b47000
bluetooth 55908 4 rfcomm,l2cap, Live 0xe0b51000
lp 12452 0 - Live 0xe0b39000
cpufreq_userspace 5408 0 - Live 0xe0b31000
cpufreq_stats 7360 0 - Live 0xe0b2e000
cpufreq_powersave 2688 0 - Live 0xe0859000
cpufreq_ondemand 9228 0 - Live 0xe0aee000
freq_table 5792 2 cpufreq_stats,cpufreq_ondemand, Live 0xe0b27000
[...]

Modulele disponibile n sistem se gasesc


n /lib/modules/<versiune_kernel>.

Modulele
incluse
n
nucleul
distribut, iei
se
gasesc
n
/lib/modules/<versiune_kernel>/kernel.
n acest director ele sunt

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

195

organizate n funct, ie de categoria din care fac parte exista astfel directoarele arch

(module pentru arhitectura curenta),


crypto (criptografie), drivers (driver-e
dispozitive), fs (sisteme de fis, iere), lib (module care implementeaza diferite funct, ii n
kernel), net (ret, ea), security (securitate), sound (sunet):
1
2

root@ubuntu:~# ls /lib/modules/2.6.18-4-686/kernel/
arch crypto drivers fs lib net sound

Versiunea de kernel poate fi aflata utiliznd comanda:


1
2

ubuntu@ubuntu:~$ uname -r
2.6.20-15-generic

Dupa cum s-a observat s, i din ies, irea comenzii lsmod, ntre module exista dependent, e.
Aceste dependent, e sunt descrise n
/lib/modules/<versiune_kernel>/modules.dep acest fis, ier este generat
automat la rularea comenzii depmod.

7.3.2

ncarcarea
unui modul

nainte de a prezenta modul n care un modul este ncarcat


n nucleu, trebuie ment, ionat
ca n distribut, iile moderne Linux modulele se ncarca automat n funct, ie de dispozitivele
hardware prezente n sistem.

ncarcarea
manuala a unui modul se poate realiza folosind comanda insmod sau

comanda modprobe. Comanda insmod primes, te ca argument calea catre


fis, ierul
, te modulul. Acest lucru o face destul de dificila de folosit. Un exemplu de
unde se gases

utilizare este dat mai jos (se presupune ca modulul ce se dores, te a fi ncarcat
nu este

deja ncarcat).
1

root@ubuntu:~# insmod ./drivers/input/misc/pcspkr.ko

2
3
4

root@ubuntu:~# lsmod | grep pcsp


pcspkr
4224 0

O comanda echivalenta comenzii insmod utilizate mai sus dar care ncarca s, i
este modprobe <nume_modul>:
dependent, ele unui modul (daca exista)
1

root@ubuntu:~# modprobe pcspkr

Pentru a configura modprobe se poate utiliza fis, ierul /etc/modprobe.conf sau


directorul /etc/modprobe.d.

7.3.3

Descarcarea
unui modul din kernel

Pentru descarcarea
unui modul din kernel se poate utiliza comanda rmmod sau

comanda modprobe -r. Comenzile urmatoare


descarca modulul pcspkr, cu
la utilizarea lui modprobe, se ncearca s, i descarcarea

observat, ia ca,
modulelor de
care pcspkr depinde (daca exista s, i nu depind s, i alte module de ele).
1

root@ubuntu:~# rmmod pcspkr

2
3

root@ubuntu:~# modprobe -r pcspkr

196

INTRODUCERE N SISTEME DE OPERARE


Tabelul 7.1: Ierarhia din /sys

Director

/sys/devices
/sys/bus
/sys/class
/sys/block
/sys/firmware
/sys/fs
/sys/kernel
/sys/module
/sys/power

7.4

7.4.1

Cont, inut
Subdirectoarele care reflecta modul fizic de conectare
al dispozitivelor n sistem

Legaturi
simbolice catre
dispozitive grupate n funct, ie de bus-ul
(magistrala) de care apart, in acestea
Dispozitivele grupate n funct, ie de clasa din care fac parte
Dispozitivele bloc
Dispozitivele cu suport firmware
Informat, ii despre sistemele de fis, iere
Informat, ii despre kernel
Subdirectoare pentru fiecare modul n parte
Informat, ii despre consumul de curent

Analiza hardware a unui sistem (magistrale, chipset,


CPU, memorie, dispozitive)
Lista hardware /sys

Folosind sistemul de fis, iere virtual (sysfs) montat de kernel n /sys, se pot obt, ine
informat, ii despre dispozitivele hardware aflate n system. /sys este populat de kernel cu

informat, ii provenite de la driver-ele ncarcate


la un moment dat. Dispozitivele hardware
afis, ate n acest director sunt cele care au fost detectate de kernel s, i care sunt utilizabile
de acesta. Tabelul 7.1 prezinta cont, inutul directoarelor din /sys.

7.4.2

Comenzi pentru afis, area dispozitivelor

Informat, ii despre dispozitivele din sistem s, i starea acestora pot fi aflate s, i prin intermediul
se vor prezenta comenzile utilizate pentru a prezenta
unor comenzi. n cele ce urmeaza,
diverse informat, ii despre dispozitivele din sistem.

Dispozitive USB
Pentru a afis, a magistralele s, i dispozitivele USB prezente n sistem se utilizeaza comanda
lsusb:
1
2
3

ubuntu@ubuntu:~$ lsusb
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000

Informat, ii despre magistrala USB se regasesc


s, i n /sys/bus/usb/. Subdirectorul

devices prezinta dispozitivele sub forma de legaturi


simbolice catre
directoare din
/sys/devices. Subdirectorul drivers din /sys/bus/usb/ cont, ine informat, ii
despre driver-ele utilizate.

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

1
2
3
4
5
6
7
8
9
10

197

ubuntu@ubuntu:~$ ls -l /sys/bus/usb/devices/
total 0
lrwxrwxrwx 1 root root 0 2007-09-04 18:16 1-0:1.0 ->
../../../devices/pci0000:00/0000:00:07.2/usb1/1-0:1.0
lrwxrwxrwx 1 root root 0 2007-09-04 18:16 2-0:1.0 ->
../../../devices/pci0000:00/0000:00:11.0/0000:02:02.0/usb2/2-0:1.0
lrwxrwxrwx 1 root root 0 2007-09-04 18:16 usb1 ->
../../../devices/pci0000:00/0000:00:07.2/usb1
lrwxrwxrwx 1 root root 0 2007-09-04 18:16 usb2 ->
../../../devices/pci0000:00/0000:00:11.0/0000:02:02.0/usb2

11
12
13
14
15
16

ubuntu@ubuntu:~$ ls -l
total 0
drwxr-xr-x 2 root root
drwxr-xr-x 2 root root
drwxr-xr-x 2 root root

/sys/bus/usb/drivers/
0 2007-09-04 18:16 hub
0 2007-09-04 18:16 usb
0 2007-09-04 18:16 usbfs

17
18
19
20
21

ubuntu@ubuntu:~$ ls -lR /sys/bus/usb/drivers/ | grep module


lrwxrwxrwx 1 root root
0 module -> ../../../../module/usbcore
lrwxrwxrwx 1 root root
0 module -> ../../../../module/usbcore
lrwxrwxrwx 1 root root
0 module -> ../../../../module/usbcore

Ultima comanda listeaza recursiv directoarele din /sys/bus/usb/drivers, cautnd


liniile care cont, in referint, e la fis, iere cu numele module. Se observa astfel ca modulul
utilizat este usbcore (datele s, i orele fis, ierelor au fost eliminate din ies, irea comenzii).

Dispozitive PCI
Dispozitivele de pe magistrala PCI se pot afla utiliznd comanda lspci:
1
2
3
4
5
6
7
8
9
10
11

ubuntu@ubuntu:~$ lspci
00:00.0 Host bridge: Intel Corporation 82865G/PE/P DRAM Controller/HostHub
Interface (rev 02)
00:01.0 PCI bridge: Intel Corporation 82865G/PE/P PCI to AGP Controller
(rev 02)
00:1d.0 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB
UHCI
Controller #1 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev c2)
00:1f.0 ISA bridge: Intel Corporation 82801EB/ER (ICH5/ICH5R) LPC
Interface
Bridge (rev 02)
[...]

Similar magistralei USB, se pot determina s, i directoarele din /sys asociate

dispozitivelor PCI. Comanda urmatoare


prezinta modul n care se pot afla modulele
utilizate de dispozitivele PCI, folosind aceeas, i procedura ca n cazul dispozitivelor USB
(datele s, i orele fis, ierelor au fost eliminate din ies, irea comenzii).
1
2
3
4
5
6

ubuntu@ubuntu:~$ ls -lR /sys/bus/pci/drivers/ | grep module


lrwxrwxrwx 1 root root
0 module -> ../../../../module/snd_intel8x0
lrwxrwxrwx 1 root root
0 module -> ../../../../module/intel_agp
lrwxrwxrwx 1 root root
0 module -> ../../../../module/ata_generic
lrwxrwxrwx 1 root root
0 module -> ../../../../module/ata_piix
[...]

198

INTRODUCERE N SISTEME DE OPERARE

Sistemul ACPI
Sistemele moderne au implementat sistemul ACPI1 (Advanced Configuration and Power
Interface) pentru configurarea unor dispozitive s, i managementul consumului de curent.
Fis, ierele virtuale ale acestui sistem se afla n /proc/acpi.
printre altele, informat, ii despre:
Spre exemplu, sistemul ACPI ofera,

procesoarele din sistem /proc/acpi/processor


ventilatoarele din sistem /proc/acpi/fan
bateriile din sistem /proc/acpi/battery
senzorii de temperatura /proc/acpi/thermal_zone

hwinfo

hwinfo este o aplicat, ie pentru detect, ia hardware-ului. Comanda hwinfo afis, eaza n
mod implicit toate informat, iile despre dispozitivele detectate la un nivel foarte detaliat.

Pentru o listare mai succinta se foloses, te urmatoarea


comanda:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

ubuntu@ubuntu:~$ hwinfo --short


cpu:
Intel(R) Pentium(R) Dual CPU T2390 @ 1.86GHz,
800
MHz
Intel(R) Pentium(R) Dual CPU T2390 @ 1.86GHz,
1600 MHz
keyboard:
/dev/input/event4
AT Translated Set 2 keyboard
mouse:
/dev/input/mice
Macintosh mouse button emulation
/dev/input/mice
SynPS/2 Synaptics TouchPad
printer:
/dev/usb/lp0
Samsung ML-1640 Series
graphics card:
Intel Mobile GM965/GL960 Integrated Graphics
Controller
Intel 965 GM
sound:
Intel 82801H (ICH8 Family) HD Audio Controller
storage:
Intel 82801HBM/HEM (ICH8M/ICH8M-E) SATA IDE
Controller
Intel 82801HBM/HEM (ICH8M/ICH8M-E) IDE Controller
network:
wlan0
Intel PRO/Wireless 3945ABG Network Connection
eth0
Realtek RTL8101E PCI Express Fast Ethernet
controller
network interface:
pan0
Ethernet network interface
wlan0
WLAN network interface
wmaster0
Network Interface
eth0
Ethernet network interface
1

ACPI http://www.acpi.info/

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI


33
34
35
36

lo
disk:
/dev/sda
[...]

199

Loopback network interface


WDC WD2500BEVS-2

se foloses, te numele
Pentru a obt, ine detalii despre o anumita componenta,
componentei ca argument al comenzii. De exemplu, pentru procesor se foloses, te

urmatoarea
comanda:
1
2
3
4
5
6
7
8
9
10

11
12
13
14
15

ubuntu@ubuntu:~$ hwinfo --cpu


01: None 00.0: 10103 CPU
[Created at cpu.304]
Unique ID: rdCR.j8NaKXDZtZ6
Hardware Class: cpu
Arch: Intel
Vendor: "GenuineIntel"
Model: 6.15.13 "Intel(R) Pentium(R) Dual CPU T2390 @ 1.86GHz"
Features:
fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,
clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,lm,constant_tsc,
arch_perfmon,pebs,bts,pni,dtes64,monitor,ds_cpl,est,tm2,ssse3,cx16,xtpr,
pdcm,lahf_lm
Clock: 1866 MHz
BogoMips: 3724.63
Cache: 1024 kb
Units/Processor: 2
Config Status: cfg=new, avail=yes, need=no, active=unknown

7.4.3

dispozitivelor hardware
Monitorizarea starii

Senzori
O alta sursa de informat, ii despre hardware-ul prezent ntr-un sistem o reprezinta
senzorii. Aces, ti senzori pot oferi informat, ii despre viteza ventilatoarelor, voltaje s, i
fiind folosite pentru a monitoriza starea sistemului.
temperatura,
Pachetul lm-sensors include programul sensors care afis, eaza informat, ii citite de la
aces, tia.
Dupa instalarea pachetului trebuie rulata comanda sensors-detect care va detecta

senzorii prezent, i n sistem s, i va indica ce module trebuie ncarcate.


Dupa ce configurarea
se realizeaza cu succes, poate fi utilizata comanda sensors.
1
2
3
4
5
6
7
8
9
10
11
12

ubuntu@ubuntu:~$ sensors
smsc47m192-i2c-0-2d
Adapter: SMBus I801 adapter
+2.5V:
+2.60 V (min =
VCore:
+1.42 V (min =
+3.3V:
+3.13 V (min =
+5V:
+5.16 V (min =
[...]
smsc47m1-isa-0800
Adapter: ISA adapter
fan1:
2792 RPM (min =
fan2:
2118 RPM (min =

at 1400
+0.00 V,
+0.00 V,
+0.00 V,
+0.00 V,

max
max
max
max

=
=
=
=

+3.32
+2.99
+4.38
+6.64

640 RPM, div = 8)


640 RPM, div = 8)

V)
V)
V)
V)

200

INTRODUCERE N SISTEME DE OPERARE

Pachetul de utilitare smartmontools


Pachetul smartmontools pune la dispozit, ie programe pentru monitorizarea
hard-disk-urilor utiliznd tehnologia S.M.A.R.T. (Self-Monitoring, Analysis
and Reporting Technology).
n unele sisteme, trebuie activat suportul
S.M.A.R.T. n BIOS (unele BIOS-uri au aceasta configurare n setul de opt, iuni
avansate). Tehnologia permite monitorizarea indicatorilor de stare a hard-disk-urilor n
posibilelor caderi.

scopul anticiparii

n pachet se gasesc
doua programe:
S.M.A.R.T. la un moment dat;
smartctl pentru analiza starii

smartd un daemon pentru monitorizarea permanenta.


Pentru a verifica starea la un moment dat pentru primul hard-disk, se poate utiliza
comanda:
1
2
3

root@ubuntu:~# smartctl --all /dev/sda


smartctl version 5.37 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce
Allen
Home page is http://smartmontools.sourceforge.net/

4
5
6
7
8
9
10
11

=== START OF INFORMATION SECTION ===


Model Family:
Seagate Barracuda 7200.7 and 7200.7 Plus family
Device Model:
ST3120827AS
Serial Number:
4MS03F43
Firmware Version: 3.42
User Capacity:
120,033,041,920 bytes
[...]

12
13
14
15
16
17
18
19
20
21
22
23

SMART Attributes Data Structure revision number: 10


Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME
FLAG
VALUE WORST THRESH
WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate
0x000f
062
049
006
16
3 Spin_Up_Time
0x0003
098
096
000
0
4 Start_Stop_Count
0x0032
100
100
020
659
[...]

TYPE

UPDATED

Pre-fail

Always

Pre-fail

Always

Old_age

Always

SMART are s, i suport pentru execut, ia de teste asupra discului. Exista teste lungi s, i
a n timp real dar poate fi s, i programata.

teste scurte. Execut, ia unui test poate fi urmarit


Rezultatele testului se pot afla n ies, irea comenzii smartctl -all /dev/sda.
Un test scurt poate fi programat utiliznd comanda:
1
2
3

root@ubuntu:~# smartctl --test=short /dev/sda


smartctl version 5.37 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce
Allen
Home page is http://smartmontools.sourceforge.net/

4
5
6
7
8
9

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===


Sending command: "Execute SMART Short self-test routine immediately in
off-line mode".
Drive command "Execute SMART Short self-test routine immediately in
off-line mode" successful.

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI


10
11
12

201

Testing has begun.


Please wait 1 minutes for test to complete.
Test will complete after Thu Sep 13 10:34:15 2007

13
14

Use smartctl -X to abort test.

Se poate observa la o noua rulare a comenzii smartctl -all /dev/sda ca apar la


ies, ire s, i rezultatele testului (daca s-a terminat), precum n exemplul de mai jos.
1
2
3

root@ubuntu:~# smartctl --all /dev/sda


smartctl version 5.37 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce
Allen
Home page is http://smartmontools.sourceforge.net/

4
5
6

=== START OF INFORMATION SECTION ===


[...]

7
8
9
10

=== START OF READ SMART DATA SECTION ===


SMART overall-health self-assessment test result: PASSED
[...]

Pe lnga testul scurt mai exista s, i alte teste (spre exemplu un test lung s, i un test
offline). Mai multe exemple de folosire a lui smartctl se pot afla din man smartctl s, i
din smartctl -h.
acestora
Daemon-ul smartd monitorizeaza hard-disk-urile s, i permite nregistrarea starii

s, i a defectelor aparute
prin intermediul syslog. n mod implicit verifica discurile la
fiecare 30 minute. Daemon-ul se poate configura prin intermediul fis, ierului
/etc/smartd.conf. Pentru lucrul cu daemoni se poate consulta capitolul 5.

7.5

Interfat, a cu dispozitivele din userspace udev s, i

/dev
n Linux exista cte un fis, ier pentru fiecare dispozitiv n directorul /dev. Fis, ierele din
/dev sunt create de managerul de dispozitive numit udev. Acesta este executat n
ntregime ca daemon n spat, iul utilizator (user-space) s, i astfel poate executa programe
arbitrare la aparit, ia sau la disparit, ia dispozitivelor din sistem. udev ofera suport pentru
nume persistente pentru dispozitive, ceea ce nseamna ca poate fi configurat sa
foloseasca ntotdeauna acelas, i nume pentru fis, ierul asociat unui anumit dispozitiv (n

implementarile
mai vechi pentru /dev, la reintroducerea n sistem a unor dispozitive,

acestea puteau primi nume diferite comparativ cu introducerea anterioara).


de la kernel atunci cnd apar sau dispar dispozitive. Astfel, spre
udev primes, te notificari

exemplu, la conectarea unui USB stick n calculator, kernel-ul notifica udev ca a aparut
udev poate, spre
un nou dispozitiv de stocare. n funct, ie de schema de nume utilizata,

exemplu, sa aleaga drept nume de dispozitiv urmatorul


nume disponibil dupa numele
hard-disk-ul prezent n sistem (presupunnd ca dispozitivul asociat hard-disk-ului este
/dev/sda, udev alege ca nume /dev/sdb). Dupa ce este ales un nume de dispozitiv,
se poate executa un program care, n cazul prezentat aici, sa monteze sistemul de fis, iere
anumite
de pe USB stick ntr-un subdirector din /media. Tot n funct, ie de configurari,
dispozitive pot sa aiba fis, ierele asociate puse ntr-un subdirector separat din /dev.

202

INTRODUCERE N SISTEME DE OPERARE

Nume

fd
hd
lp
sd
tty
ram
loop

Tabelul 7.2: Convent, ia de nume pentru dispozitive n Linux


Dispozitiv
Floppy-disk
Hard-disk IDE
Imprimanta
Hard-disk SATA (SCSI)
Terminal fizic
Dispozitiv care reprezinta memoria RAM
Dispozitiv utilizat pentru montarea fis, ierelor precum dispozitivele reale

Pe lnga execut, ia de programe, udev mai permite modificarea permisiunilor pentru


fis, ierele din /dev create. Astfel se poate configura, spre exemplu, ca pentru orice
scanner introdus n sistem, fis, ierul creat sa apart, ina grupului cu numele scanner. n
acest fel, numai utilizatorii care fac parte din acest grup vor putea lucra cu acest fis, ier s, i
implicit cu scanner-ul. Trebuie amintit faptul ca un utilizator poate sa fie membru al mai
multor grupuri.

Configurarile
pentru udev se gasesc
n /etc/udev/rules.d. Acest director cont, ine
fis, iere care descriu modul n care, n funct, ie de dispozitiv, se formeaza numele
dispozitivelor, se dau permisiuni fis, ierelor sau se executa programe. De obicei acest
aplicabile n orice situat, ie s, i nu se recomanda editarea
director cont, ine configurari
fis, ierelor din el.

7.6

Lucrul cu dispozitive (/dev)

S-a ment, ionat anterior ca udev se ocupa s, i de stabilirea permisiunilor pentru anumite

dispozitive. Un utilizator trebuie sa se gaseasc


a n grupul din care face fis, ierul
dispozitivului pentru a putea utiliza dispozitivul (prin intermediul fis, ierului, binent, eles).
Tabelul 7.2 prezinta cteva nume asociate n mod normal cu dispozitivele ntr-un mediu
sau o litera,

Linux. Trebuie ment, ionat ca de obicei numele sunt urmate de un numar


,i
care indica al ctelea dispozitiv de acel tip este n sistem. Spre exemplu, doua unitat
de discheta vor fi numite /dev/fd0 s, i /dev/fd1, iar doua hard-disk-uri vor fi numite
/dev/sda s, i /dev/sdb.

Comanda urmatoare
prezinta cont, inutul tipic pentru /dev:
1
2
3
4
5
6
7
8
9
10
11
12
13

ubuntu@ubuntu:~$ ls -l
total 0
lrwxrwxrwx 1 root root
lrwxrwxrwx 1 root root
lrwxrwxrwx 1 root root
drwxr-xr-x 3 root root
drwxr-xr-x 2 root root
lrwxrwxrwx 1 root root
lrwxrwxrwx 1 root root
[...]
drwxr-xr-x 2 root root
lrwxrwxrwx 1 root root
lrwxrwxrwx 1 root root

/dev/
10
12
11
0
0
17
17

2007-08-31
2007-08-31
2007-08-31
2007-08-31
2007-08-31
2007-08-31
2007-08-31

14:48
14:48
14:48
14:48
14:48
14:48
14:48

adsp -> sound/adsp


agpgart -> misc/agpgart
audio -> sound/audio
bus
cd
cdrom -> /dev/cd/cdrom-sr0
cdrom0-> /dev/cd/cdrom-sr0

0 2007-08-31 14:48 loop


6 2007-08-31 14:48 loop0 -> loop/0
6 2007-08-31 14:48 loop1 -> loop/1

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI


14
15
16
17
18
19
20
21
22
23

crw-r----lrwxrwxrwx
crw-rw-rw[...]
crw-rw-rwbrw-rw---brw-rw---brw-rw---brw-rw---[...]

7.6.1

203

1 root kmem 1,
1 2007-08-31 14:48 mem
1 root root 11 2007-08-31 14:48 mixer -> sound/mixer
1 root root 1,
3 2007-08-31 14:48 null
1
1
1
1
1

root
root
root
root
root

root
disk
disk
disk
disk

1,
8,
8,
8,
8,

8
0
1
2
16

2007-08-31
2007-08-31
2007-08-31
2007-08-31
2007-08-31

14:48
14:48
14:48
14:48
14:48

random
sda
sda1
sda2
sdb

Tipuri de dispozitive

, ile ei:
n Linux, dispozitivele se mpart n 2 categorii, fiecare categorie avnd particularitat

dispozitive caracter
dispozitive bloc
Dispozitivele pot fi diferent, iate dupa litera care apare pe prima coloana n ies, irea
comenzii ls -l, coloana care indica tipul fis, ierului. n lista de mai sus fis, ierele care au
tipul c indica dispozitive de tip caracter iar fis, ierele cu tipul b indica dispozitive de tip
bloc.
Cteva dispozitive sunt generate de kernel s, i au un comportament aparte. Aceste
dispozitive sunt numite pseudo-dispozitive.

Dispozitivele caracter
Dispozitivele caracter corespund dispozitivelor care transmit date cte un caracter

odata.
Aceste dispozitive sunt de obicei folosite pentru a transmite fluxuri de date, precum:

terminalul /dev/tty0, /dev/tty1


porturile seriale /dev/ttyS0, /dev/ttyS1
dispozitivele audio /dev/sequencer, /dev/mixer, /dev/midi

Dispozitivele bloc
Dispozitivele bloc corespund dispozitivelor care lucreaza cu datele la nivel de bloc
(scriu, citesc, s, terg blocuri de date).
Dispozitivele care funct, ioneaza n acest fel sunt dispozitivele de stocare:
, i CD-ROM/DVD-ROM etc.) /dev/sda, /dev/sda1,
fizice (hard disk-uri, unitat
/dev/hda

virtuale (dispozitivele loop) /dev/loop0

204

INTRODUCERE N SISTEME DE OPERARE

asociate zonelor de memorie /dev/ram0

Pseudo-dispozitive
Exista o serie de dispozitive prezente n /dev care nu corespund unor componente
hardware. Acestea sunt echivalente unor dispozitive virtuale care implementeaza
comportamentul dispozitivelor normale de tip caracter.
Cele mai cunoscute sunt:

/dev/null fis, ier n care se poate scrie orice s, i totul este pierdut de obicei

ies, irile standard sau de eroare ale programelor sunt redirectate catre
/dev/null

pentru a suprima afis, area oricarui


mesaj;

/dev/zero fis, ier din care se poate citi la infinit octetul cu valoarea 0 de
obicei este folosit pentru a suprascrie zone de memorie/disc cu zerouri sau pentru
a umple fis, iere;

/dev/urandom fis, ier din care se pot citi la infinit octet, i cu valori aleatoare
utilizat de obicei pentru a scrie fis, iere sau zone de pe disc cu date aleatoare.
Cteva exemple de utilizare sunt prezentate mai jos.
Suprimarea ies, irii standard pentru un program:
1

ubuntu@ubuntu:~$ ./program > /dev/null

Suprimarea ies, irii de eroare pentru un program (mesajele de eroare se pierd):


1

ubuntu@ubuntu:~$ ./program 2>/dev/null

Suprimarea ambelor ies, iri (standard s, i eroare) pentru un program:


1

ubuntu@ubuntu:~$ ./program 2>&1 >/dev/null

Suprascrierea primei partit, ii de pe primul hard-disk cu zerouri:


1

root@ubuntu:~# dd if=/dev/zero of=/dev/sda1

Suprascrierea primului hard-disk cu date aleatoare:


1

root@ubuntu:~# dd if=/dev/urandom of=/dev/sda

7.6.2

ntreruperi hardware

O ntrerupere (IRQ interrupt request) este un semnal trimis de un dispozitiv catre


, i opreasca activitatea pentru a procesa un
procesor pentru a-l anunt, a ca trebuie sa-s

eveniment extern, cum ar fi apasarea


unei taste.
Pe platforma x86 sunt 16 IRQ-uri numerotate de la 0 la 15. Pe calculatoarele moderne
pot exista mai mult de 16 ntreruperi. Unele ntreruperi sunt rezervate pentru dispozitive
specifice, cum ar fi tastatura, iar altele pot fi reasignate. n tabelul 7.3 se afla ntreruperile
s, i semnificat, ia lor pentru platforma x86:

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

205

Tabelul 7.3: Semnificat, ia ntreruperilor


Semnificat, ie

IRQ
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

System timer
Tastatura
Cascada pentru IRQ 8-15
Al doilea port serial (COM 2)
Primul port serial (COM 1)
Placa de sunet sau al doilea port paralel (LPT2)
Controler pentru Floppy
Primul port paralel (LPT1)
Real-time clock
Nerezervat
Nerezervat
Nerezervat
Mouse PS/2
Coprocesor aritmetic
Controler ATA primar
Controler ATA secundar

n cadrul sistemului de operare Linux, semnificat, ia ntreruperilor poate fi vizualizata

folosind urmatoarea comanda:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

ubuntu@ubuntu:~$
CPU0
0:
130
1:
277
6:
5
7:
0
8:
3
9:
0
12:
1485
14:
0
15:
13885
16:
4426
17:
43084
NMI:
0
LOC:
254957
ERR:
0
MIS:
0

cat /proc/interrupts
IO-APIC-edge
IO-APIC-edge
IO-APIC-edge
IO-APIC-edge
IO-APIC-edge
IO-APIC-fasteoi
IO-APIC-edge
IO-APIC-edge
IO-APIC-edge
IO-APIC-fasteoi
IO-APIC-fasteoi

timer
i8042
floppy
parport0
rtc
acpi
i8042
libata
libata
eth1
ioc0

pentru fiecare ntrerupere este afis, at driver-ul care o foloses, te.


n comanda anterioara,

7.6.3

Adrese I/O

Adresele I/O, numite s, i porturi I/O, sunt locat, ii unice n memorie rezervate pentru
comunicarea ntre procesor s, i diversele dispozitive fizice. n tabelul 7.4 se poate
observa corespondent, a ntre denumirea dispozitivului pe Linux s, i pe Windows s, i adresa

I/O asociata:

n Linux se pot verifica adresele I/O folosind urmatoarea


comanda:

206

INTRODUCERE N SISTEME DE OPERARE


Tabelul 7.4: Adresele I/O ale dispozitivelor
Denumire Linux Denumire Windows IRQ asociat
Adresa I/O

/dev/ttyS0
/dev/ttyS1
/dev/ttyS2
/dev/ttyS3
/dev/lp0
/dev/lp1

1
2
3
4
5
6
7
8
9
10
11

COM1
COM2
COM3
COM4
LPT1
LPT2

4
3
4
3
7
5

0x03f8
0x02f8
0x03e8
0x02e8
0x0378-0x037f
0x0278-0x027f

ubuntu@ubuntu:~$ cat /proc/ioports


0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu

7.6.4

Adrese DMA

DMA (Direct Memory Access) se refera la adresarea directa a memoriei s, i este o


alternativa la adresele I/O. DMA face posibil transferul datelor ntre dispozitive s, i
a ajutorul procesorului. Acest lucru duce la mbunat
at
, irea performant, elor
memorie far
sistemului deoarece procesorul nu mai este ocupat cu operat, ii I/O.
Arhitectura x86 implementeaza acest concept folosind canale DMA, cte unul pentru

fiecare dispozitiv. Urmatoarea


comanda va afis, a ce canale DMA sunt folosite de sistem:
1
2
3

ubuntu@ubuntu:~$ cat /proc/dma


2: floppy
4: cascade

7.6.5

Manipularea datelor la nivel scazut


(comanda dd)

Pentru a lucra cu datele la nivel de octet sistemele de operare de tip Unix pun la
dispozit, ie comanda dd. Aceasta comanda poate fi utilizata pentru a manevra date de
orice dimensiune. Se bazeaza pe faptul ca datele sunt transferate de la o sursa la o

destinat, ie, eventual cu simple transformari.


Comanda primes, te sursa s, i destinat, ia sub forma a doi parametri:

sursa: if=<fis, ier_intrare> (daca lipses, te acest parametru se presupune


ca sursa este intrarea standard)

destinat, ia:

of=<fis, ier_ies, ire> (daca lipses, te acest parametru se


presupune ca destinat, ia este ies, irea standard)

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

207

Fis, ierele pot fi att fis, iere normale ct s, i fis, iere care reprezinta dispozitive bloc sau

dispozitive caracter. Astfel, o utilizare foarte simpla a comenzii dd este urmatoarea:


1

ubuntu@ubuntu:~$ dd if=/dev/zero of="myfile"

Comanda de mai sus copiaza de la intrare la ies, ire octet, i pna cnd apare o eroare, din
n aceste condit, ii, comanda se termina doar
moment ce nu a fost specificata nicio limita.
daca fis, ierul sursa e limitat sau fis, ierul destinat, ie e limitat. n cazul de mai sus, sursa are
dimensiune infinita iar destinat, ia e limitata doar de dimensiunea spat, iului liber disponibil
pe partit, ia unde se scrie fis, ierul.
Pentru a specifica dimensiunea care se dores, te a fi copiata se utilizeaza o combinat, ie a

urmatorilor
parametri:

numarul
de blocuri: count=<num
ar_blocuri> daca acest parametru
lipses, te copierea se opres, te doar n condit, iile prezentate mai sus

dimensiunea unui bloc: bs=<dimensiune_n_octet, i> (block size) pot fi


folosit, i s, i multiplii, spre exemplu: bs=1048576, bs=1024K, bs=1M sunt toate
echivalente; daca lipses, te acest parametru se utilizeaza dimensiunea implicita a
unui bloc de 512 octet, i (dimensiunile blocurilor citite s, i dimensiunile blocurilor
scrise pot fi ajustate individual prin utilizarea parametrilor ibs s, i obs; ele sunt
modificate simultan prin utilizarea parametrului bs)

Exemplele urmatoare
ilustreaza utilizarea comenzii dd mpreuna cu parametrii precizat, i
anterior:

copierea de 10 MB de date din 10 blocuri de 1 MB (1024K); copierea se face din

/dev/zero catre
/dev/null deci nu are niciun efect:
1
2
3
4

ubuntu@ubuntu:~$ dd if=/dev/zero of=/dev/null bs=1024K count=10


10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00490124 seconds, 2.1 GB/s

acelas, i efect ca mai sus doar ca se precizeaza M n loc de K:


1
2
3
4

ubuntu@ubuntu:~$ dd if=/dev/zero of=/dev/null bs=1M count=10


10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00509437 seconds, 2.1 GB/s

copierea de 10MB de date n blocuri de 1M la intrare s, i 128K la ies, ire:


1
2
3
4

ubuntu@ubuntu:~$ dd if=/dev/zero of=/dev/null count=10 ibs=1M obs


=128K
10+0 records in
80+0 records out
10485760 bytes (10 MB) copied, 0.00622419 seconds, 1.7 GB/s

Comanda dd permite s, i pozit, ionarea n fis, ierele utilizate pentru intrare s, i ies, ire:

intrare: skip=<num
ar_blocuri> sare <num
ar_blocuri> din fis, ierul de
intrare, echivalentul a <num
ar_blocuri> * ibs octet, i;
ies, ire: seek=<num
ar_blocuri> sare <num
ar_blocuri> din fis, ierul de
ies, ire, echivalentul a <num
ar_blocuri> * obs octet, i.

208

INTRODUCERE N SISTEME DE OPERARE

Fis, ier

Tabelul 7.5: Informat, ii expuse prin intermediul lui /proc


Cont, inut

/proc/cmdline
/proc/cpuinfo
/proc/devices
/proc/interrupts
/proc/meminfo
/proc/modules

/proc/partitions
/proc/swaps
/proc/uptime

/proc/version

Linia care este folosita la init, ializarea kernel-ului,


inclusiv parametrii trimis, i acestuia
Informat, ii despre procesorul/procesoarele din sistem
Lista dispozitivelor caracter s, i a celor bloc

Statistici despre numarul


de ntreruperi s, i
dispozitivele asociate ntreruperilor
Informat, ii despre utilizarea memoriei

Lista modulelor ncarcate


la un moment dat n sistem
comanda lsmod prezinta cont, inutul fis, ierului
ntr-un mod user-friendly
Lista partit, iilor
Lista dispozitivelor pe care se face swap
Timpul trecut de la ultima pornire a sistemului, n
secunde comanda uptime prezinta cont, inutul
fis, ierului ntr-un mod user-friendly
Versiunea kernel-ului care ruleaza la un moment dat

Pozit, ionarea este utila n cazul n care se dores, te ca de pe dispozitivul de intrare sa se


precum un anumit sector de pe hard disk. Exemplul urmator

citeasca o anumita zona,


ilustreaza acest lucru se sare peste primul sector s, i se citesc doua sectoare de pe hard
disk (trebuie ment, ionat ca dimensiunea unui sector pe HDD este 512 octet, i, valoarea
implicita pentru parametrul bs):
1
2
3
4

root@ubuntu:~# dd if=/dev/sda of=/dev/null skip=1 count=2


2+0 records in
2+0 records out
1024 bytes (1.0 kB) copied, 0.043731 seconds, 23.4 kB/s

7.7
7.7.1

Analiza sistemului
Informat, ii despre sistem

Prin intermediul directorului /proc, kernel-ul expune s, i o serie de informat, ii legate de

sistem. Tabelul 7.5 urmator


prezinta fis, ierele mai importante din /proc s, i cont, inutul
acestora.
Cont, inutul pentru oricare din fis, ierele prezentate mai sus se poate afla folosind comanda
cat. De exemplu, folosind comanda cat cu argumentul /proc/cpuinfo se vor afis, a

urmatoarele
informat, ii:
1
2
3
4
5
6
7

ubuntu@ubuntu:~$ cat /proc/cpuinfo


processor
: 0
vendor_id
: GenuineIntel
cpu family
: 6
model
: 15
model name
: Intel(R) Core(TM)2 Duo CPU
stepping
: 8

T7500

@ 2.20GHz

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI


8
9
10
11

cpu MHz
cache size
fdiv_bug
[...]

209

: 2194.893
: 4096 KB
: no

Folosind comanda anterioara s-au obt, inut urmatoarele


informat, ii: processor
reprezinta identificatorul procesorului prezentat (pe sistemele cu un singur procesor, va

care se
aparea
doar procesorul cu identificatorul 0), cpu family reprezinta un numar

va apenda la numarul
86 pentru a obt, ine numele familiei de procesoare (n exemplul de
fat, a 686), model name reprezinta denumirea procesorului, cpu MHz reprezinta
frecvent, a procesorului iar cache size este dimensiunea memoriei cache L2.
Pentru a obt, ine informat, ii despre memoria utilizata de sistem, se va afis, a cont, inutul
fis, ierului /proc/meminfo:
1
2
3
4
5
6
7
8
9
10
11

ubuntu@ubuntu:~$ cat /proc/meminfo


MemTotal:
255676 kB
MemFree:
9684 kB
Buffers:
10668 kB
Cached:
84448 kB
SwapCached:
3004 kB
Active:
179812 kB
Inactive:
43268 kB
SwapTotal:
401400 kB
SwapFree:
360748 kB
[...]

Folosind comanda anterioara s-au afis, at urmatoarele


informat, ii: MemTotal este
cantitatea totala de RAM, MemFree este cantitatea de RAM care nu este utilizata de
sistem, Buffers este cantitatea de RAM folosita de buffere, Cached este cantitatea
de RAM folosita ca memorie cache, SwapCached este cantitatea de memorie swap
folosita ca memorie cache, Active este cantitatea de buffere sau memorie cache care
este n curs de utilizare, Inactive este cantitatea de buffere sau memorie cache care
SwapTotal este cantitatea totala de swap disponibila s, i SwapFree este
este libera,

cantitatea de swap libera.

Folosind urmatoarea
comanda se vor afis, a: versiunea kernelului Linux, a compilatorului

gcc s, i a distribut, iei de Linux folosite:


1
2
3

ubuntu@ubuntu:~$ cat /proc/version


Linux version 2.6.24-24-generic (buildd@rothera) (gcc version 4.2.4 (
Ubuntu
4.2.4-1ubuntu3)) #1 SMP Tue Aug 18 17:04:53 UTC 2009

la un moment dat, o informat, ie


Oricare dintre aceste fis, iere poate fi folosit pentru a gasi,

despre sistem. Spre exemplu, daca se dores, te aflarea tipului procesorului/procesoarelor

din sistem se poate utiliza comanda urmatoare:


1
2

ubuntu@ubuntu:~$ cat /proc/cpuinfo | grep "model name"


model name
: Intel(R) Core(TM)2 Duo CPU
T7500

@ 2.20GHz

Este important de ret, inut ca /proc expune informat, ii care sunt accesibile s, i prin
intermediul unor comenzi. Aceste informat, ii, fie ca sunt citite direct din /proc, fie ca
sunt citite prin intermediul comenzilor, pot fi filtrate pentru a se extrage date utile pentru
utilizator.

210

7.7.2

INTRODUCERE N SISTEME DE OPERARE

Kernel tunables

sysctl este o interfat, a care permite configurarea unor parametri din kernel n timpul
execut, iei acestuia. Parametrii pot fi modificat, i n doua feluri:

prin modificarea directa a fis, ierelor din /proc/sys;


prin utilizarea comenzii sysctl.
precum n exemplul
Primul caz presupune scrierea s, i citirea parametrilor din anumite cai,

urmator:
1
2

root@ubuntu:~# cat /proc/sys/net/ipv4/ip_forward


0

3
4

root@ubuntu:~# echo "1" > /proc/sys/net/ipv4/ip_forward

5
6
7

root@ubuntu:~# cat /proc/sys/net/ipv4/ip_forward


1

Comenzile de mai sus au activat rutarea pachetelor de ret, ea la nivelul kernel-ului, scriind
1 n /proc/sys/net/ipv4/ip_forward. Aceasta facilitate este utila daca se
dores, te ca un sistem care are acces la Internet sa permita accesul unei ntregi subret, ele.

Folosind comanda sysctl, acelas, i lucru se obt, ine n felul urmator:


1
2

root@ubuntu:~# sysctl net.ipv4.ip_forward


net.ipv4.ip_forward = 0

3
4
5

root@ubuntu:~# sysctl -w net.ipv4.ip_forward="1"


net.ipv4.ip_forward = 1

Se observa ca pentru a afis, a starea unui parametru se foloses, te o adresare


atoare

aseman
cu cea a structurilor din C/C++. Comanda a doua modifica un parametru
prin utilizarea opt, iunii --w (write).

temporare, ele fiind pierdute n cazul n


Modificarile
prezentate anterior sunt modificari
permanente, acestea se scriu
care se repornes, te sistemul. Pentru a efectua configurari
n fis, ierul /etc/sysctl.conf.
Presupunnd ca se dores, te dezactivarea
forwarding-ului, sintaxa n fis, ier este destul de simpla (liniile care ncep cu # din fis, ier
sunt comentarii):
1
2
3
4
5

ubuntu@ubuntu:~$ cat /etc/sysctl.conf


[...]
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
[...]

Fis, ierul de configurare este citit la fiecare pornire a sistemului. Pentru a fort, a citirea
fis, ierului de configurare, se poate utiliza comanda sysctl -p:
1
2

root@ubuntu:~# sysctl -p
net.ipv4.ip_forward = 1

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

7.8
7.8.1

211

Studii de caz
Salvarea s, i restaurarea MBR s, i a tabelei extinse de partit, ii

MBR-ul (Master Boot Record) ret, ine informat, ii despre partit, iile primare aflate pe un
hard-disk precum atribute ale acestora, pozit, ia lor pe disc s, i dimensiunea lor. MBR-ul
mai cont, ine s, i bootloader-ul un mic program care pornes, te un sistem de operare
prezent pe computer. ntr-un mediu mixt Windows/Linux, la o instalare a Windows-ului
se va observa ca Linux-ul devine inaccesibil (bootloader-ul Windows-ului nu cunoas, te
nimic despre Linux). n aceste condit, ii, pentru a prentmpina acest lucru, se
, i n
recomanda realizarea unui back-up pentru MBR. Mai multe detalii despre MBR gasit
sect, iunea 6.2.2.

Backup-ul MBR-ului de pe primul HDD se realizeaza cu urmatoarea


comanda:
1
2
3
4

root@ubuntu:~# dd if=/dev/sda of=mbr.img bs=512 count=1


1+0 records in
1+0 records out
512 bytes (512 B) copied, 4.8004e-05 seconds, 10.7 MB/s

n urma execut, iei comenzii se realizeaza fis, ierul mbr.img de 512 octet, i cu MBR-ul.
Acest fis, ier poate fi plasat ntr-un loc sigur s, i accesibil n cazul n care discul devine
inaccesibil (pe un USB stick sau CD-ROM spre exemplu).

Pentru a restaura MBR-ul, se efectueaza operat, ia inversa:


1
2
3
4

root@ubuntu:~# dd if=mbr.img of=/dev/null bs=512 count=1


1+0 records in
1+0 records out
512 bytes (512 B) copied, 4.622e-05 seconds, 11.1 MB/s

n partit, ia extinsa pot


n MBR se poate stabili ca una dintre partit, ii sa fie partit, ie extinsa.
fi create mai multe partit, ii logice, pentru o mai buna organizare a discului. Informat, iile
despre partit, iile logice nu sunt t, inute n MBR, deoarece nu ncap n cei 512 octet, i.
, uita n afara MBR-ului.
Partit, iile logice sunt ret, inute sub forma de lista nlant
n momentul n care se lucreaza cu schema de partit, ii de pe un hard disk, se recomanda
realizarea unui backup nainte. Modificarea schemei de partit, ii nu s, terge datele de pe

hard disk, doar schimba descrierea partit, iilor (locul unde se gasesc
acestea). n situat, ia
este util sa existe un
n care se s, terge o partit, ie importanta (fie ea logica sau primara),
backup al acestor informat, ii pentru recuperare. Modul de backup pentru MBR a fost
descris anterior.
Pentru a realiza backup-ul configurat, iei tuturor partit, iilor se utilizeaza programul
sfdisk. Acesta analizeaza att partit, iile primare ct s, i pe cele logice, dar nu se uita la
informat, iile din MBR care nu sunt legate de partit, ionare (precum bootloader). El este un
bun complement pe lnga metoda amintita mai sus de a face backup la MBR.

Comanda urmatoare
face backup pentru ntreaga schema de partit, ionare folosind
sfdisk fis, ierul de backup este /usbstick/partitions.backup:
1

root@ubuntu:~# sfdisk -d /dev/sda > /usbstick/partitions.backup

Pentru a restaura schema de partit, ionare salvata anterior, sfdisk se utilizeaza astfel:

212

INTRODUCERE N SISTEME DE OPERARE

root@ubuntu:~# sfdisk /dev/sda < /usbstick/partitions.backup

7.8.2

Salvarea cont, inutului unui disc cu sectoare inaccesibile

Exista situat, ii cnd, de obicei dupa o perioada mai lunga de utilizare, un hard disk ncepe
sa nu mai funct, ioneze corect. Se observa acest lucru din erorile pe care sistemul de
operare le afis, eaza cnd vrea sa citeasca date de pe disc. n asemenea situat, ii, cea mai
rapida metoda de backup este copierea fis, ierelor pe un alt disc.
Acesta este cazul favorabil, cnd datele mai pot fi identificate s, i sistemul de operare
n cazul n care defectul hard disk-ului apare n zona n care este
mai funct, ioneaza.
descris sistemul de fis, iere, exista o probabilitate destul de mare ca datele sa nu mai
poata fi salvate prin simpla copiere a fis, ierelor. n aceasta situat, ie se poate opta pentru
repararea sistemului de fis, iere utiliznd aplicat, ia fsck, dar nu se dores, te ca aceasta
reparare sa aiba loc pe hard disk-ul defect. nti se realizeaza o copie a tuturor datelor
de pe primul hard disk pe un alt hard disk, copie numita imagine.
Comanda utilizata pentru a realiza aceasta imagine este dd, mpreuna cu parametrul
conv=noerror, parametru care i spune dd-ului sa nu se opreasca atunci cnd
detecteaza un bloc inaccesibil.
1

root@ubuntu:~# dd if=/dev/sda of=/dev/sdb conv=noerror

Execut, ia acestei comenzi poate dura foarte mult timp, datorita numarului
mare de

blocuri care trebuie citite s, i scrise. Pentru a accelera execut, ia comenzii, se poate mari
dimensiunea blocului citit/scris prin intermediul parametrului bs (block size), prezentat
anterior. Utilizarea unui bloc mai mare dect dimensiunea unui sector de hard disc (512
caci
nu se poate
octet, i) poate duce la pierderea ultimelor sectoare de pe discul sursa,
realiza un bloc cu ele.

7.8.3

Crearea unei imagini de CD; montarea unei imagini

ator

unei imagini de hard disk.


O imagine de CD se creeaza n mod aseman
crearii
1

root@ubuntu:~# dd if=/dev/hda of=cd.iso

Aceasta comanda va citi CD-ul introdus n unitatea /dev/hda sector cu sector s, i va


scrie imaginea lui n fis, ierul cd.iso.
Pentru a putea utiliza imaginea, aceasta trebuie montata ntr-un director precum orice

alt sistem de fis, iere, dar cu urmatoarele


observat, ii:

tipul sistemului de fis, iere de pe un CD este iso9660;


deoarece fis, ierul nu este un dispozitiv real, trebuie utilizata s, i opt, iunea loop.
1

root@ubuntu:~# mount -t iso9660 -o loop cd.iso /mnt/cd

Pentru a demonta imaginea, se utilizeaza comanda:


1

root@ubuntu:~# umount /mnt/cd

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

213

n acest fel pot fi pastrate


pe disc imagini ale CD-urilor utilizate des s, i/sau pot fi testate
imagini de CD create de diferite utilitare.
Trebuie ment, ionat ca se poate aplica aceeas, i procedura s, i pentru DVD-uri, atta timp
ct sistemul de fis, iere este corect precizat n comanda mount (DVD-urile pot fi scrise n
formatul UDF).

7.8.4

Utilizarea unui fis, ier de pe o partit, ie FAT32 ca fis, ier de swap


pentru un LiveCD Linux

Se observa de multe ori ca LiveCD-urile funct, ioneaza greu pe sisteme care nu au multa
ntr-un sistem instalat, memoria RAM poate fi ajutata s, i de
memorie RAM disponibila.
prezent, a spat, iului de swap de pe hard disk. ntr-un sistem n care nu exista nicio partit, ie
de swap, un LiveCD nu activeaza niciun astfel de spat, iu. O posibilitate o reprezinta
utilizarea unui fis, ier de swap, pe o partit, ie deja existenta n sistem. S-a utilizat pentru
exemplificare o partit, ie FAT32, dar se poate utiliza orice tip de partit, ie pe care Linux-ul
poate scrie.
Pentru nceput, se monteaza sistemul de fis, iere (partit, ia a doua, primul hard disk) unde
se dores, te crearea fis, ierului de swap:
1

root@ubuntu:~# mount -t vfat /dev/sda2 /mnt/temp

n acest moment se poate crea un fis, ier de swap de dimensiunea dorita utiliznd
programul dd:
1
2
3
4

root@ubuntu:~# dd if=/dev/zero of=/mnt/temp/fisier.swap bs=1M count=256


256+0 records in
256+0 records out
268435456 bytes (268 MB) copied, 6.41171 seconds, 41.9 MB/s

S-a creat un fis, ier de 256 MB (plin cu zerouri) pentru a fi folosit ca fis, ier de swap. n
ator

acest moment trebuie transformat fis, ierul n zona de swap, printr-un proces aseman
partit, iilor:
formatarii
1

root@ubuntu:~# mkswap /mnt/temp/fisier.swap

pentru a fi folosit ca zona de swap. Sistemul de


n acest moment, fis, ierul este pregatit
atoare

operare trebuie sa afle de prezent, a fis, ierului de swap printr-o operat, ie aseman
unui sistem de fis, iere:
montarii
1

root@ubuntu:~# swapon /mnt/temp/fisier.swap

Dupa execut, ia acestei comenzi sistemul foloses, te fis, ierul creat mai sus ca zona de swap.

Cuvinte cheie

kernel

mas, ina virtuala

kernel-space

von Neumann

user-space

CPU, procesor

214

INTRODUCERE N SISTEME DE OPERARE

RAM, DRAM

sensors

placa de baza

smartmontools

chipset

/dev

northbridge

udev

southbridge
hard-disk, HDD

dispozitive de tip bloc


dispozitive de tip caracter

PCI, AGP
magistrala,

dispozitiv
modul

pseudodispozitive
dd

driver

/proc

lsmod, insmod, modprobe, rmmod

sysctl

/sys

/etc/sysctl.conf

lsusb, lspci

MBR

ntrebari

1. Care dintre urmatoarele


NU este o componenta a arhitecturii von Neumann?

q CPU
q unitatea de comanda
q memoria
q dispozitivele de intrare ies, ire
2. Care utilitar poate fi folosit pentru efectuarea unui backup la MBR?

q lspci
q lsusb
q sysctl
q dd

3. Care din urmatoarele


NU ofera direct informat, ii despre sistem?

q /sys
q /proc
q dd
q lsusb
4. Care comanda NU este folosita pentru interact, iunea cu modulele din kernel?

q lsmod
q modprobe

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

q modinstall
q insmod

5. Care din urmatoarele


NU este un exemplu de pseudodispozitiv?

q /dev/null
q /dev/zero
q /dev/hda3
q /dev/urandom

6. Care din urmatoarele


dispozitive NU este asociat unui hard-disk?

q /dev/sda1
q /dev/hda5
q /dev/sda
q /dev/ttyS0

7. Care din urmatoarele


se refera n mod direct la placa de baza?

q southbridge
q megabyte
q GPU
q cache

8. Care din urmatoarele


acronime NU este corelat direct cu dispozitive fizice?

q SCSI
q USB
q ACPI
q TGZ
9. La care dispozitiv se refera acronimul AGP?

q procesor
q placa de ret, ea
q placa grafica
q hard-disk
10. La ce se refera n general not, iunea de arhitectura pe N bit, i?

q dimensiunea registrelor
q dimensiunea magistralei de date
q dimensiunea memoriei cache L1
q viteza maxima a southbridge-ului

215

Capitolul 8
de ret, ea
Configurari
You know its love when you memorize her IP address to
skip DNS overhead.

Ce se nvat, a din acest capitol?

Not, iunea de ret, ea de calculatoare


Topologia unei ret, ele de calculatoare
Adresarea IP
Parametrii unei ret, ele de calculatoare: adresa IP, masca de ret, ea, gateway

Configurarea unei interfet, e de ret, ea n Linux; adaugarea


de rute n Linux
configurare permanenta;
configurare statica;
configurare
Configurare temporara;
dinamica

Configurare DNS
, ii ntr-o ret, ea locala
Verificarea conectivitat

Configurarea ret, elei n Windows


Configurarea PPPoE n Linux

8.1

Concepte de ret, ea

Aparit, ia s, i evolut, ia calculatoarelor au dus la dorint, a de a facilita comunicat, ia ntre ele


Des, i
pentru a partaja date mai us, or sau pentru a putea ndeplini o sarcina comuna.
implementarea lor a cunoscut o
dezvoltarea ret, elelor de calculatoare a fost init, ial lenta,

cres, tere mare dupa 1990, odata cu explozia numarului


de calculatoare legate la Internet.
Daca init, ial ret, elele de calculatoare au fost create pentru a facilita schimbul de informat, ie
a utilizatorilor
n mediul academic, n momentul de fat, a ele se adreseaza n mare masur
privat, i s, i mediului comercial.
217

218

INTRODUCERE N SISTEME DE OPERARE

Pentru ca un calculator sa fie conectat la o ret, ea trebuie realizate doua conexiuni: o

conexiune fizica s, i o conexiune logica.


Conexiunea fizica este utilizata pentru a codifica informat, ia sub forma de semnale
electrice (n cazul cel mai uzual ntlnit conexiunea se realizeaza prin cablu UTP),

sau semnale electromagnetice


semnale optice (pentru legaturile
prin fibra optica)

a fir). n primele doua cazuri ea se realizeaza printr-un cablu care


(pentru legaturile
far
leaga calculatorul de un echipament de ret, ea.
Conexiunea logica cuprinde un set de mecanisme de adresare complexe (ce asigura
comunicat, ia ntre calculatoarele conectate la ret, ea), cuprinde controlul fluxului de date
, ii datelor. Cel mai cunoscut mecanism de adresare prezent n
s, i ofera garant, ia integritat
cadrul conexiunii logice este IP (Internet Protocol). Acesta asigura identificarea unica s, i
comunicarea calculatoarelor att n ret, elele locale, ct s, i n Internet.

8.1.1

Not, iuni de baza

, ite
Ret, elele de calculatoare, din punctul de vedere al standardelor folosite, sunt mpart
n trei mari categorii: ret, ele locale de calculatoare (Local Area Network LAN), ret, ele
metropolitane de calculatoare (Metropolitan Area Network MAN) s, i ret, ele de
calculatoare pe arii extinse (Wide Area Network WAN). n momentul de fat, a aceasta

clasificare nu se mai pastreaz


a 100%, ret, elele MAN disparnd
aproape complet s, i fiind
nlocuite cu ret, ele LAN.

Figura 8.1: Schema unei ret, ele locale de calculatoare


O ret, ea locala de calculatoare este formata cel mai adesea din mai multe stat, ii legate
ntre ele. O stat, ie poate fi un calculator, un laptop, un PDA, un Tablet PC, un server, un
router etc.

DE RET, EA
CAPITOLUL 8. CONFIGURARI

219

Conectarea stat, ilor se realizeaza printr-un echipament de ret, ea numit switch. Acesta
transfera informat, ia ntre calculatoare bazndu-se pe adresa MAC.
cu o lungime de 48 de bit, i care identifica n mod unic
Adresa MAC este un numar
fiecare interfat, a de ret, ea Ethernet.
Prin urmare nu pot exista doua interfet, e de ret, ea Ethernet cu aceeas, i adresa MAC.
Adresa MAC este nscrisa din fabrica ntr-o memorie ROM de pe placa s, i ea nu poate fi

schimbata.
Datorita faptului ca protocolul DHCP de configurare automata a adreselor IP utilizeaza
frecvent adresa MAC pentru a aloca o adresa IP unui calculator, este uzuala practica
de ret, ea. Acest lucru nu nseamna rescrierea
de a modifica adresa MAC a unei placi
memoriei ROM, ci specificarea unei alte adrese pe care sistemul de operare sa o
foloseasca n locul celei init, iale.
Pentru
Switch-ul permite comunicat, ia ntre calculatoare aflate n aceeas, i ret, ea locala.
a putea accesa s, i alte calculatoare (cel mai adesea pentru a putea accesa Internetul)
a la o alta ret, ea.
trebuie ca unul din echipamentele din ret, ea sa aiba o a doua legatur
Acest echipament poate sa fie o stat, ie sau un server cu mai multe interfet, e de ret, ea sau
un echipament de ret, ea dedicat numit ruter. Transferul informat, iei din ret, eaua locala
mai departe nspre Internet se bazeaza pe adresa IP.
cu o lungime de 32 de bit, i folosit pentru identificarea
Adresa IP este un numar

fiecarei
interfat, e de ret, ea n Internet.
O stat, ie poate avea mai multe adrese IP, n mod uzual cte o adresa pentru fiecare
Este posibil nsa ca pe o interfat, a sa fie configurate mai multe adrese IP.
interfat, a.

8.1.2

IPv6

Pna acum am folosit not, iunea IP pentru a ne referi la Internet Protocol version 4

(IPv4). Internet Protocol version 6 (IPv6) este urmatoarea


generat, ie de protocol de
ret, ea, dezvoltat pentru a nlocui treptat IPv4.
cu o lungime de 128 de bit, i folosit pentru identificarea
Adresa IPv6 este un numar

fiecarei
interfat, e de ret, ea n Internet.
Principalul motiv pentru care a fost implementat un nou protocol de ret, ea pentru Internet
este epuizarea adreselor IPv4. IPv6 are un spat, iu de adrese mult mai mare dect IPv4
din cauza lungimii adreselor. Spat, iul de adrese IPv6 ofera 21 28 adrese, fat, a de IPv4 care
are doar 23 2 adrese.

8.1.3

Moduri de adresare: adresare unicast, multicast, broadcast

, ite n trei categorii, n funct, ie de numarul


de
Comunicat, iile ntre echipamente pot fi mpart
destinatari:

220

INTRODUCERE N SISTEME DE OPERARE

comunicat, ii unicast: au o sursa s, i un destinatar;


comunicat, ii multicast: au o sursa s, i mai mult, i destinatari ce fac parte dintr-un grup
specific;

comunicat, ii broadcast: au o sursa s, i ca destinatar toate stat, iile dintr-o ret, ea.
Att mesajele de tip multicast ct s, i cele de tip broadcast sunt adresate mai multor
destinatari simultan. Diferent, a dintre ele consta n faptul ca mesajele de tip broadcast se
adreseaza tuturor stat, iilor dintr-o ret, ea, pe cnd cele multicast se adreseaza doar unora
din aceste stat, ii.

8.2
8.2.1

Parametri de ret, ea
Adresa IP s, i masca de ret, ea

Adresa IP pe 32 de bit, i a fost introdusa n perioada 80, cnd nu se preconiza cres, terea
ret, elelor, cerint, ele pentru
spectaculoasa a Internetului. Dupa 1990, datorita dezvoltarii
adrese IP au crescut, astfel nct nu peste mult timp adresele au nceput sa se epuizeze.

de adrese IP
Din acest motiv au aparut
mai multe mecanisme menite sa reduca numarul
utilizate, printre care adresele IP private s, i translatarea de adrese IP (Network Address
Translation NAT). n paralel a fost dezvoltata s, i o solut, ie pe termen lung: protocolul

IPv6, a carui
utilizare va cres, te n anii urmatori.
n cadrul acestui protocol adresa IP are
128 de bit, i.
Pentru a us, ura utilizarea adreselor IP, cei 32 de bit, i sunt separat, i n patru grupuri a cte
Astfel adresa IP utilizata n mod uzual
8 bit, i, fiecare grup fiind scris n forma zecimala.
, ite prin puncte:
este compusa din patru numere zecimale ntre 0 s, i 255 despart
1
2
3

01011001110101110001111010000111 - cei 32 de biti ai unei adrese IP


01011001.11010111.00011110.10000111 - patru grupuri a cate 8 biti
89.215.30.135 - fiecare grup este transformat in format zecimal

Atunci cnd o interfat, a de ret, ea are configurata o adresa IP, adresa are doua
componente: o parte din cei 32 de bit, i reprezinta adresa ret, elei din care face parte
stat, ia s, i cealalta parte a bit, ilor reprezinta adresa stat, iei n cadrul ret, elei. Sistemul este
similar cu cel utilizat pentru codul pos, tal: n cadrul codului 014288, primele doua cifre

pot reprezenta judet, ul, urmatoarele


doua pot reprezenta oras, ul, iar ultimele doua pot
reprezenta strada. Astfel destinat, ia este localizata n arii din ce n ce mai restrnse.
Pentru a putea spune care dintre cei 32 de bit, i reprezinta adresa ret, elei s, i care reprezinta
adresa calculatorului n cadrul ret, elei, este utilizata o masca de ret, ea. Aceasta este tot
de 32 de bit, i cu o caracteristica speciala:
este compusa,
pornind de la stnga
un numar
la dreapta, dintr-un bloc compact de 1 urmat de un bloc compact de 0. Pentru utilizarea
, tii de ret, ea este folosita aceeas, i notat, ie ca s, i n cadrul adresei IP:
mai us, oara a mas
1
2
3

11111111000000000000000000000000 - cei 32 de biti ai unei masti


11111111.00000000.00000000.00000000 - patru grupuri a cate 8 biti
255.0.0.0 - fiecare grup este tranformat in format zecimal

, tii de ret, ea un bit este egal cu 1, atunci bitul corespunzator

Daca n cadrul mas


din adresa

IP face parte din adresa ret, elei, iar daca este egal cu 0, bitul corespunzator
din adresa
IP face parte din adresa calculatorului (stat, iei) n cadrul ret, elei:

DE RET, EA
CAPITOLUL 8. CONFIGURARI

1
2
3
4
5

221

01011001.11010111.00011110.10000111 - adresa IP
11111111.00000000.00000000.00000000 - masca de retea
<-A.R.-> <--------A.S.------------>
A.R.- Adresa retelei
A.S.- Adresa statiei

Pentru a putea afla din ce ret, ea face parte o adresa IP, se face SI
logic pe bit, i ntre
adresa IP s, i masca de ret, ea. Dupa realizarea operat, iei de SI
logic se obt, ine o adresa IP
care are tot, i bit, ii din partea de adresa a ret, elei egali cu adresa ret, elei din care face parte
stat, ia, s, i tot, i bit, ii din partea de adresa a stat, iei n cadrul ret, elei egali cu 0:
1
2
3
4
5
6

01011001.11010111.00011110.10000111
11111111.00000000.00000000.00000000
----------------------------------01011001.00000000.00000000.00000000
<-A.R.-> <-------A. C.------------>
01011001.11111111.11111111.11111111

=
=
=

89.215.30.135 - adresa IP
255.0.0.0 - masca de retea
SI logic pe biti
89.0.0.0 - adresa retelei

= 89.255.255.255 - adr. broadcast

Adresa IP n care tot, i bit, ii din partea de adresa a stat, iei sunt egali cu 0 se numes, te
adresa ret, elei din care face parte stat, ia. Toate stat, iile dintr-o ret, ea locala au adrese
IP care au aceeas, i adresa a ret, elei. n felul acesta se realizeaza corespondent, a ntre

conexiunea fizica la ret, ea s, i cea logica.


Adresa IP n care tot, i bit, ii din partea de adresa a stat, iei n cadrul ret, elei sunt egali cu 1

se numes, te adresa de broadcast a ret, elei. Daca un pachet este trimis catre
aceasta
atunci el va fi procesat de toate calculatoarele din ret, ea.
adresa,

Clase de adrese IP
Conceptul de clase de adrese IP este important pentru nt, elegerea modului n care
, it n cinci
funct, ioneaza o ret, ea de calculatoare. Spat, iul de adrese IP este mpart
categorii, denumite clase de adrese. n funct, ie de intervalul din care face parte primul
zecimal din notat, ia cu punct), se
octet al adresei IP (sau, echivalent, primul numar
stabiles, te clasa respectivei adrese IP:

ntre 0 s, i 127, adresa IP face parte din clasa A,


ntre 128 s, i 191, adresa IP face parte din clasa B,
ntre 192 s, i 223, adresa IP face parte din clasa C,
ntre 224 s, i 239, adresa IP face parte din clasa D,
ntre 240 s, i 255, adresa IP face parte din clasa E.
, ire a claselor de adrese a fost aleasa din considerente de performant, a:

Aceasta mpart
pentru a determina clasa unei adrese IP oarecare, un dispozitiv hardware de ret, ea
trebuie sa inspecteze maximum primii patru bit, i ai adresei IP (valoarea bit, ilor notat, i cu
nu este importanta):

0 - - -. - - - -, adresa IP face parte din clasa A,


10 - -. - - - -, adresa IP face parte din clasa B,
110 -. - - - -, adresa IP face parte din clasa C,

222

INTRODUCERE N SISTEME DE OPERARE

1110. - - - -, adresa IP face parte din clasa D,


1111. - - - -, adresa IP face parte din clasa E.
, irea pe clase determina doua caracteristici importante ale unei adrese: tipul rutarii

mpart
(unicast/multicast/rezervat) s, i masca de ret, ea.

Clasa A: 0.0.0.0 127.255.255.255 masca 255.0.0.0 unicast


Clasa B: 128.0.0.0 191.255.255.255 masca 255.255.0.0 unicast
Clasa C: 192.0.0.0 223.255.255.255 masca 255.255.255.0 unicast
Clasa D: 224.0.0.0 239.255.255.255 multicast
Clasa E: 240.0.0.0 255.255.255.255 rezervat
Modul acesta de clasificare a spat, iului de adresa a fost utilizat ntr-o faza incipienta
a Internetului. Din motive care t, in de eficient, a modului de utilizare a adreselor IP, n
, tile de ret, ea nu au doar aceste trei lungimi fixe, ci pot avea lungime variabila,

prezent, mas
, irea n cele cinci clase nu mai este ntnita dect n cazuri rare.
iar mpart

Adrese IP publice s, i adrese IP private

n momentul n care numarul


de adrese IP ramase
libere a nceput sa scada simt, itor, la

nceputul anilor 90, au aparut


mecanisme menite sa rezolve part, ial aceasta problema.

a s, i spat, iul de adrese private.


Printre mecanismele aparute
se numar
Din fiecare clasa de adrese a fost rezervat un spat, iu de adrese care nu pot fi accesate
direct din afara ret, elei locale. Practic stat, iile care au configurate adrese IP private sunt
invizibile din afara ret, elei lor, s, i implicit din Internet. De aceea pot exista mai multe stat, ii,

n felul acesta se
facnd
parte din ret, ele diferite, care au aceeas, i adresa IP privata.
realizeaza o economie mare de adrese IP.
Spat, iile de adrese private sunt:
1
2
3

10.0.0.0 -- 10.255.255.255 din clasa A


170.16.0.0 -- 172.31.255.255 din clasa B
192.168.0.0 -- 192.168.255.255 din clasa C

Pentru ca o stat, ie ce are configurata o adresa IP privata sa poata accesa stat, ii care nu
se afla n aceeas, i ret, ea cu ea este necesara utilizarea mecanismelor de NAT (Network
Address Translation). De cele mai multe ori, prin NAT, toate stat, iile dintr-o ret, ea cu

adrese IP private vor fi recunoscute n afara ret, elei ca avnd aceeas, i adresa IP publica.

8.2.2

Ruter implicit (default gateway)

Pentru a putea accesa calculatoare aflate n alte ret, ele, este necesar ca unul dintre
echipamentele conectate n ret, ea sa aiba o a doua interfat, a conectata la o alta ret, ea.

Din cea de-a doua ret, ea se poate realiza mai departe accesul catre
Internet. Acest
echipament se numes, te gateway.
Atunci cnd o stat, ie A dores, te sa comunice cu o stat, ie B, primul pas pe care l face este
sa verifice daca adresa IP a lui B este n aceeas, i ret, ea cu adresa lui A. n cazul n care

DE RET, EA
CAPITOLUL 8. CONFIGURARI

223

cele doua stat, ii sunt n aceeas, i ret, ea, informat, iile sunt trimise direct catre
B. Daca B nu

se afla n aceeas, i ret, ea cu A, atunci informat, iile sunt trimise catre gateway, urmnd ca

acesta sa gaseasc
a o ruta catre
B.
i
De exemplu cnd A1 vrea sa comunice cu A3, fiind amandoua n aceeas, i ret, ea locala,
va trimite informat, iile direct. Calea pachetelor este reprezentata n figura 8.2.

Figura 8.2: Comunicarea n ret, eaua locala

n cazul n care A1 vrea sa comunice cu B2, va trimite informat, iile catre


R1 care este
gateway-ul. R1 va verifica daca ret, eaua destinat, ie este direct conectata sau daca

cunoas, te calea catre


ea. Schema din figura 8.3 reprezinta calea pachetelor de la A1 la
B2:

Figura 8.3: Comunicarea n afara ret, elei locale


Prin urmare este necesar ca fiecare stat, ie din ret, ea sa cunoasca adresa gateway-ului
pentru a putea avea acces n afara ret, elei s, i masca de ret, ea pentru a vedea daca este
cazul sa foloseasca gateway-ul sau nu.

8.2.3

DNS

mare de servicii de ret, ea, cele mai


Un utilizator acceseaza n mod normal un numar

multe fiind oferite de diverse servere. Accesarea fiecarui


serviciu este condit, ionata de
cunoas, terea adresei IP a serverului care ofera serviciul respectiv. Spre exemplu, pentru
a accesa o pagina web este necesara cunoas, terea adresei IP a serverului pe care este

gazduit
a acea pagina.

224

INTRODUCERE N SISTEME DE OPERARE

mare de adrese IP nu este un lucru comod, a aparut

Pentru ca memorarea unui numar


serviciul numit Sistemul numelor de domenii (Domain Name System DNS). n cadrul
acestui serviciu se realizeaza corespondent, a ntre un s, ir de caractere s, i o adresa IP. De
aceea DNS-ul poate fi privit ca o carte de telefon de unde, daca se cunoas, te numele
unui server, i se poate afla adresa IP.

Figura 8.4: Rolul unui server DNS


, i despart
, ite
Un nume de domeniu (asociat unui calculator) este compus din mai multe part
prin puncte: de exemplu curs.cs.pub.ro. Cea din extremitatea dreapta se numes, te Top
(.ro pentru Romnia, .us pentru
Level Domain TLD s, i poate cont, ine indicativul unei t, ari
SUA, .jp pentru Japonia etc.) sau poate reprezenta un anumit tip de organizat, ie (de
exemplu .com pentru organizat, iile comerciale, .org pentru organizat, iile non-profit, .mil
pentru armata SUA etc).

n stnga Top Level Domain se gasesc


subdomenii.
n exemplul de mai sus
, ii Politehnica Bucures, ti, cs este asociat
subdomeniul pub este asociat Universitat
, ii de Automatica s, i Calculatoare, Catedra de Calculatoare.
Facultat
Serviciile de DNS sunt oferite de servere specializate. Pentru a putea accesa un astfel
de server, este necesara cunoas, terea adresei lui IP. Exista servere publice care ofera
servicii de DNS, nsa de cele mai multe ori este de preferat ca n cadrul ret, elei locale sa

existe un server de DNS din motive ce t, in de timpul de raspuns.


DNS-ul ramne

Chiar daca serverul de DNS este plasat n ret, eaua locala,


cel mai lent

serviciu de ret, ea s, i componenta cu cel mai mare timp de raspuns


n mecanismul de
comunicat, ie n ret, ea. De aceea se spune ca You know its love when you memorize her
IP address to skip DNS overhead.
Aceasta nseamna
Este posibil uneori ca adresa IP asociata unei stat, ii sa fie dinamica.
ca din timp n timp stat, ia respectiva va primi o alta adresa IP. Pentru a putea accesa
a sa i se cunoasca adresa IP existenta la un moment dat se foloses, te sistemul
stat, ia far

DE RET, EA
CAPITOLUL 8. CONFIGURARI

Configurare
temporara
Configurare
permanenta

225

Tabelul 8.1: Configurarea ret, elei


Configurare statica
Configurare dinamica
ifconfig
dhclient, dhcpcd

/etc/network/interfaces /etc/network/interfaces

numit DynDNS (Dynamic DNS). n cadrul acestui sistem stat, ia va trimite catre
un server
DNS specializat informat, ii actualizate legate de adresa ei IP.

8.3
8.3.1

temporare
Configurari
Interfet, e de ret, ea.
temporare

permanente s, i configurari

Configurari

de ret, ea i corespunde n cadrul sistemului de


Din punct de vedere logic, fiecarei
placi

operare o interfat, a. Pe aceasta interfat, a se configureaza o adresa IP s, i o masca de


ret, ea.
n Linux interfet, ele de ret, ea cont, in n denumirea lor doua componente. Prima parte
reprezinta tipul interfet, ei (de exemplu eth pentru Ethernet, wlan pentru placile de ret, ea
a fir etc) s, i numarul
ei (eth0 reprezinta prima interfat, a de Ethernet, wlan1 reprezinta
far

a doua interfat, a fara fir etc).


Configurarea unei adrese IP se poate realiza n doua moduri: temporara sau
Fiecare din cele doua se poate realiza la rndul ei static (parametrii sunt
permanenta.
introdus, i manual de administrator) sau dinamic (parametrii se configureaza n mod
automat).

Configurarea temporara statica se realizeaza cu ajutorul comenzii ifconfig (a carei


este imediat
denumire vine de la interface configuration). Efectul acestei configurari
nsa odata cu repornirea
(parametrii se aplica imediat dupa ce comanda este data)

sistemului de operare, configurarile


se pierd.
Configurarea temporara dinamica se realizeaza cu ajutorul unui client DHCP, de exemplu
dhclient sau dhcpcd.
Configurarea permanenta statica sau dinamica se realizeaza cu ajutorul fis, ierului

/etc/network/interfaces. Efectul acestei comenzi nu este imediat (configurarile

nu se aplica odata cu salvarea fis, ierului), nsa configurarile


se pastreaz
a s, i dupa
repornirea sistemului de operare. Acest lucru se petrece deoarece fis, ierul n care sunt

trecute configurarile
este citit s, i interpretat de sistemul de operare la init, ializare,

configurarile
din fis, ier fiind din nou aplicate.
Si
configurarea unui gateway se poate realiza n mod temporar cu ajutorul comenzii route
sau n mod permanent prin fis, ierul de configurare /etc/network/interfaces.
Fiecare din cele doua metode (permanent vs.
temporar) are avantajele sale.

Configurarile
temporare au efect imediat s, i se aplica us, or. Cele permanente se pot

226

INTRODUCERE N SISTEME DE OPERARE

aplica automat la fiecare init, ializare a sistemului de operare.

8.3.2

Configurarea temporara statica a unei adrese IP pe o interfat, a

Pentru a configura o interfat, a de ret, ea n mod temporar se foloses, te comanda

ifconfig. Modul de utilizare al comenzii este urmatorul:


1
2

root@ubuntu:~# ifconfig [-v] [-a] [-s] [interface]


root@ubuntu:~# ifconfig [-v] interface [aftype] options | address ...

a niciun parametru se pot afla informat, ii despre interfet, ele de


Prin utilizarea comenzii far
ret, ea active:
1
2
3
4
5
6
7
8
9
10

root@asgard:/home/george# ifconfig
eth0
Link encap:Ethernet HWaddr 00:14:D1:38:73:A6
inet addr:10.1.1.2 Bcast:10.1.1.255 Mask:255.255.255.0
inet6 addr: fe80::214:d1ff:fe38:73a6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18982017 errors:0 dropped:0 overruns:0 frame:0
TX packets:27864548 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:144959484 (130 MiB) TX bytes:21665362 (20.6 MiB)
Interrupt:18 Base address:0x4400

11
12

lo

Link encap:Local Loopback


inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:5777 errors:0 dropped:0 overruns:0 frame:0
TX packets:5777 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:360919 (352.4 KiB) TX bytes:360919 (352.4 KiB)

13
14
15
16
17
18
19

Pe lnga interfet, ele corespunzatoare


placilor
de ret, ea exista s, i interfat, a lo. Numele
acestei interfet, e vine de la loopback. Orice informat, ie transmisa pe loopback se va
ntoarce napoi tot pe loopback.
a un corespondent fizic) care este
Interfat, a de loopback este o interfat, a virtuala (far
folosita n scopuri de testare. Ea are, deobicei, asociata o adresa IP standard:
127.0.0.1. Daca un calculator nu are nicio placa de ret, ea, interfat, a de loopback va fi

singura existenta.

Parametrii uzuali ai comenzii ifconfig sunt urmatorii:

-v afis, eaza informat, ii detaliate n cazul erorilor;


-a afis, eaza informat, ii despre toate interfet, ele existente, fie ca sunt active sau
inactive.
1
2
3
4
5
6
7
8

root@asgard:/home/george# ifconfig
eth0
Link encap:Ethernet HWaddr 00:14:D1:38:73:A6
inet addr:10.1.1.2 Bcast:10.1.1.255 Mask:255.255.255.0
[...]
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
[...]

DE RET, EA
CAPITOLUL 8. CONFIGURARI
9
10
11
12
13
14
15
16
17
18

227

root@asgard:/home/george# ifconfig -a
eth0
Link encap:Ethernet HWaddr 00:14:D1:38:73:A6
inet addr:10.1.1.2 Bcast:10.1.1.255 Mask:255.255.255.0
[...]
eth1
Link encap:Ethernet HWaddr 00:18:F3:AB:45:62
BROADCAST MULTICAST MTU:1500 Metric:1
[...]
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
[...]

-s afis, eaza statistici legate de interfet, ele de ret, ea n format compact, sub forma
unui tabel:
1
2
3
4

root@asgard:/home/george# ifconfig -s
iface MTU Met RX-OK RX-ERR [...] TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 193488
0 [...] 282347
0
0
0 BMRU
lo
16436 0
5849
0 [...]
584
0
0
0 LRU

interface reprezinta numele interfet, ei despre care se doresc informat, ii sau


De exemplu, pentru a afis, a informat, ii
numele interfet, ei care va fi configurata.
despre interfat, a de ret, ea eth0 se foloses, te comanda
1
2
3
4

root@asgard:/home/george# ifconfig eth0


eth0
Link encap:Ethernet HWaddr 00:14:D1:38:73:A6
inet addr:10.1.1.2 Bcast:10.1.1.255 Mask:255.255.255.0
[...]

De exemplu,
address reprezinta adresa IP care va fi configurata pe interfat, a.
pentru a configura adresa IP 10.1.1.3 pe interfat, a eth0:
1

root@asgard:/home/george# ifconfig eth0 10.1.1.3

2
3
4
5
6

root@asgard:/home/george# ifconfig eth0


eth0
Link encap:Ethernet HWaddr 00:14:D1:38:73:A6
inet addr:10.1.1.3 Bcast:10.255.255.255 Mask:255.0.0.0
[...]

options reprezinta opt, iuni avansate ce pot fi configurate

Opt, iunile cele mai des folosite sunt urmatoarele:


Odata dezactivata,
interfat, a nu va mai trimite s, i nu
down dezactiveaza o interfat, a.
va mai primi niciun pachet
1
2
3
4
5
6
7

root@asgard:/home/george# ifconfig
eth0
Link encap:Ethernet HWaddr 00:14:D1:38:73:A6
inet addr:10.1.1.2 Bcast:10.1.1.255 Mask:255.255.255.0
[...]
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
[...]

8
9

root@asgard:/home/george# ifconfig eth0 down

10
11
12
13
14

root@asgard:/home/george# ifconfig
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
[...]

228

INTRODUCERE N SISTEME DE OPERARE


dupa ce interfat, a a fost dezactivata,
ea nu mai apare
Se poate observa faptul ca,
n lista de interfet, e active. Pentru a afis, a toate interfet, ele existente se foloses, te
parametrul -a.

n cazul n care este specificata o


up este utilizata pentru a activa o interfat, a.
opt, iunea up este considerata implicit.
adresa IP pentru a fi configurata pe interfat, a,
1
2
3
4

root@asgard:/home/george# ifconfig
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
[...]

5
6

root@asgard:/home/george# ifconfig eth0 up

7
8
9
10
11
12
13
14

root@asgard:/home/george# ifconfig
eth0
Link encap:Ethernet HWaddr 00:14:D1:38:73:A6
inet addr:10.1.1.2 Bcast:10.1.1.255 Mask:255.255.255.0
[...]
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
[...]

netmask addr specifica masca de ret, ea asociata interfet, ei. n cazul n care
aceasta opt, iune nu este prezenta se va considera masca implicita clasei IP-uri
din care face parte adresa IP a interfet, ei Se poate observa din exemplele
nespecificnd masca de ret, ea, aceasta a fost considerata
anterioare faptul ca,
implicit 255.0.0.0, care este valoarea pentru clasa A de adrese IP din care
, tii ca opt, iune,
face parte 10.1.1.3. n cazul n care se specifica s, i valoarea mas
rezultatul va fi:
1

root@asgard:/home/george# ifconfig eth0 10.1.1.3 netmask


255.255.255.0

2
3
4
5
6

root@asgard:/home/george# ifconfig eth0


eth0
Link encap:Ethernet HWaddr 00:14:D1:38:73:A6
inet addr:10.1.1.3 Bcast:10.1.1.255 Mask:255.255.255.0
[...]

hw class addr specifica utilizarea unei alte adrese MAC s, i nu cea din memoria
de ret, ea, n cazul n care driverul placii
de ret, ea ofera suport pentru
ROM a placii
acest lucru. Este foarte important ca interfat, a de ret, ea sa fie dezactivata naintea
unei noi adrese MAC:
configurarii
1
2
3
4

root@asgard:/home/george# ifconfig eth0


eth0
Link encap:Ethernet HWaddr 00:14:D1:38:73:A6
inet addr:10.1.1.3 Bcast:10.1.1.255 Mask:255.255.255.0
[...]

5
6

root@asgard:/home/george# ifconfig eth0 down

7
8

root@asgard:/home/george# ifconfig eth0 hw ether 01:02:03:04:05:06


up

9
10
11
12
13

root@asgard:/home/george# ifconfig eth0


eth0
Link encap:Ethernet HWaddr 01:02:03:04:05:06
inet addr:10.1.1.3 Bcast:10.1.1.255 Mask:255.255.255.0
[...]

DE RET, EA
CAPITOLUL 8. CONFIGURARI

229

de ret, ea apare datorita


Utilitatea folosirii unei adrese MAC diferita de cea a placii

faptului ca protocolul DHCP de configurare automata a adreselor IP utilizeaza


frecvent adresa MAC pentru a aloca o adresa IP unui calculator. Pentru a obt, ine o
anumita adresa IP, trebuie folosita adresa MAC asociata n cadrul serverului

DHCP cu adresa IP dorita.

8.3.3

, ii la Internet. Configurarea temporara


Asigurarea conectivitat
statica a unei rute implicite

Pentru a
Comanda ifconfig permite doar configurarea unei adrese IP pe o interfat, a.
putea accesa Internetul este nevoie sa fie specificata adresa unui gateway.
Specificarea temporara a unui gateway se realizeaza cu ajutorul unei rute. O ruta

reprezinta calea pe care o urmeaza pachetele n drumul lor catre


destinat, ie. Rutele
sunt ret, inute n cadrul unui structuri numite tabela de rutare. Aceasta cont, ine practic
informat, ii despre toate destinat, iile accesibile la un moment dat.
a:
adresa destinat, iei (poate fi
Printre informat, iile ret, inute pentru fiecare ruta se numar
adresa unei stat, ii sau adresa unei ntregi ret, ele), masca de ret, ea asociata s, i adresa

echipamentului de ret, ea catre


care se trimit informat, iile pentru a ajunge la destinat, ie.
Configurarea tabelei de rutare se realizeaza cu ajutorul comenzii route. Aceasta permite

adaugarea,
modificarea s, i s, tergerea de rute. Pentru a vedea care sunt rutele existente
la un moment dat (ca atare pentru a vedea cont, inutul tabelei de rutare) se utilizeaza
a parametri:
comanda route far
1
2
3
4

root@asgard:/home/george# route
Kernel IP routing table
Destination
Gateway
Genmask
localnet
255.255.255.0
*

Flags Metric Ref


U
0
0

Use Iface
0 eth0

n rezultatul de mai sus se vede faptul ca singura ruta existenta este cea asociata ret, elei
locale (localnet) .Aceasta ruta (care este practic asociata cu ret, eaua locala direct
este introdusa n tabela de rutare dupa ce interfat, a de ret, ea asociata ret, elei
conectata)

este configurata.

Formatul comenzii utilizat pentru adaugarea


unei rute implicite este urmatorul:
1

root@@ubuntu:~# route add default gateway addr

Configurarea unei rute implicite se realizeaza astfel:


1

root@asgard:/home/george# route add default gateway 10.1.1.1

2
3
4
5
6
7

root@asgard:/home/george# route
Kernel IP routing table
Destination
Gateway
Genmask
localnet
255.255.255.0
*
default
10.1.1.1
0.0.0.0

Flags Metric Ref


U
0
0
UG
0
0

Use Iface
0 eth0
0 eth0

Unul dintre parametrii utili ai comenzii route este -n (numeric) Folosind acest parametru
adresele din tabela de rutare vor fi afis, at n format numeric n loc sa se afis, eze numele
serverelor sau stat, iilor. Este folosit atunci cnd se dores, te interogarea unui server DNS
(de exemplu atunci cnd nu este configurat un astfel de server).

230

1
2
3
4
5

INTRODUCERE N SISTEME DE OPERARE

root@asgard:/home/george# route -n
Kernel IP routing table
Destination
Gateway
Genmask
10.1.1.0
255.255.255.0
*
0.0.0.0
10.1.1.1
0.0.0.0

8.4
8.4.1

Flags Metric Ref


U
0
0
UG
0
0

Use Iface
0 eth0
0 eth0

permanente
Configurari
Configurarea permanenta a unei interfet, e de ret, ea

Configurarile
de ret, ea permanente se realizeaza n cadrul fis, ierului /etc/network/
interfaces. Manualul de utilizare al acestui fis, ier se poate accesa cu comanda:
1

man interfaces

Un exemplu de fis, ier de configurare este urmatorul:


1
2
3

root@asgard:/home/george# cat /etc/network/interfaces


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

4
5
6
7

# The loopback network interface


auto lo eth0
iface lo inet loopback

8
9
10
11
12
13
14
15
16
17

# The primary network interface


allow-hotplug eth0
iface eth0 inet static
address 10.1.1.2
netmask 255.255.255.0
network 10.1.1.0
broadcast 10.1.1.255
gateway 10.1.1.1
dns-nameservers 10.1.1.1

ale interfet, elor de


Fis, ierul /etc/network/interfaces cont, ine diverse configurari
care sunt interpretate de utilitarele ifup s, i ifdown. ifup este un
ret, ea, configurari
utilitar ce permite activarea unei interfet, e de ret, ea. El este similar opt, iunii up a comenzii
ifconfig. ifdown dezactiveaza o interfat, a de ret, ea, fiind similar cu opt, iunea down a
comenzii ifconfig.
Pentru a activa toate interfet, ele definite cu auto n /etc/network/interfaces se

foloses, te urmatoarea
comanda:
1

root@ubuntu:~# ifup -a

Pentru a activa o anumita interfat, a se precizeaza numele acesteia, de exemplu:


1

root@ubuntu:~# ifup eth0

Pentru a dezactiva toate interfet, ele active se foloses, te urmatoarea


comanda:
1

root@ubuntu:~# ifdown -a

DE RET, EA
CAPITOLUL 8. CONFIGURARI

231

n cadrul fis, ierului interfaces se gasesc


mai multe declarat, ii de tipul iface, auto
sau allow.
Declarat, iile auto specifica ce interfet, e sunt activate atunci cnd ifup este folosit
mpreuna cu parametrul -a. Un astfel de apel (ifup -a) este folosit la pornirea
sistemului de operare. Pornirea unei interfet, e marcate ca auto este realizata n

momentul n care udev (vezi sect, iunea 7.5) a creat mecanismele necesare funct, ionarii
interfet, ei.

Declarat, iile allow specifica interfet, ele care sunt activate automat de catre
diverse
subsisteme. Astfel activarea nu mai este realizata dupa ce udev a detectat placa de

ret, ea, ci n momentul n care aceasta devine disponibila.

Pentru specificarea unei interfet, e de loopback se foloses, te urmatoarea


linie:
1

iface lo inet loopback

Dupa declarat, ia iface urmeaza numele interfet, ei, apoi tipul de adrese pe care interfat, a
l foloses, te (inet reprezinta adresare IP, inet6 reprezinta adresare IPv6). Pentru a
marca o interfat, a ca loopback, se foloses, te parametrul loopback.
atoare

O linie aseman
este folosita s, i pentru a specifica orice alta interfat, a existenta.
Spre exemplu, pentru configurarea interfet, ei eth0:
1

iface eth0 inet static

Dupa declarat, ia iface urmeaza numele interfet, ei apoi tipul de adrese pe care l
foloses, te interfat, a, iar la final, prin includerea parametrului static se specifica faptul

ca interfat, a este configurata manual de administrator, ramnnd


fixa pna la

O alta metoda de configurare este cea n care se


urmatoarea
schimbare manuala.

foloses, te DHCP, prin care stat, ia cere configurarile


interfet, ei de la un server DHCP.
Daca parametrul static a fost precizat n declarat, ia iface, atunci dupa aceasta
declarat, ie trebuie sa urmeze parametrii cu care va fi configurata interfat, a de ret, ea:
1
2
3
4
5
6
7

iface eth0 inet static


address 10.1.1.2
netmask 255.255.255.0
network 10.1.1.0
broadcast 10.1.1.255
gateway 10.1.1.1
dns-nameservers 10.1.1.1

address specifica adresa IP a interfet, ei (parametru obligatoriu), netmask specifica


masca de ret, ea care va fi folosita (parametru obligatoriu), network specifica adresa
ret, elei din care face parte interfat, a (parametru obligatoriu doar pentru kernelul 2.0.x,

adresa ce se poate obt, ine facnd


SI
logic pe bit, i ntre adresa IP s, i masca de ret, ea,
broadcast specifica adresa de broadcast a ret, elei din care face parte interfat, a
(parametru opt, ional).
Dupa modificarea fis, ierului /etc/network/interfaces este necesara restartarea
serviciului de ret, ea pentru a citi noua configurat, ie:
1

root@ubuntu:~# /etc/init.d/networking restart

Serviciul de ret, ea poate fi oprit folosind argumentul stop s, i pornit folosind argumentul
start:

232

INTRODUCERE N SISTEME DE OPERARE

root@ubuntu:~# /etc/init.d/networking stop

2
3

root@ubuntu:~# /etc/init.d/networking start

8.4.2

Configurarea permanenta statica a unei rute implicite

O a doua modalitate de specificare a rutei implicite este folosirea fis, ierului


/etc/network/ interfaces. Structura acestuia a fost descrisa n paragraful
anterior.
Printre parametrii care se pot configura dupa declarat, ia iface se afla s, i gateway-ul
implicit. Specificarea acestuia se realizeaza astfel:
1
2
3

iface eth0 inet static


[...]
gateway 10.1.1.1

unde 10.1.1.1 este adresa IP a gateway-ului.

8.4.3

DHCP. Configurarea unei interfet, e n mod automat

Configurarea parametrilor unei interfet, e de ret, ea se poate realiza static sau dinamic.

n cazul configurarilor
statice tot, i parametrii trebuie introdus, i manual pe fiecare stat, ie din
ret, ea. n cazul n care se schimba gateway-ul, de exemplu, pe fiecare stat, ie din ret, ea
trebuie realizata aceasta schimbare.

Configurarile
dinamice permit atribuirea automata a parametrilor de ret, ea, printre care
adresa IP, masca de ret, ea, gateway-ul, serverul de DNS.
este DHCP (Dynamic Host
Cel mai utilizat protocol de configurare dinamica (automata)
Configuration Protocol). Pentru ca acest protocol sa funct, ioneze este necesar ca n

ret, eaua locala sa se gaseasc


a un server de DHCP. Serverului i sunt specificate plaja de

adrese IP pe care le poate atribui calculatoarelor s, i restul configurarilor


de ret, ea.

Atunci cnd o stat, ie dores, te sa obt, ina o adresa IP, va trimite un mesaj catre
toata ret, eaua
(broadcast) prin care ncearca sa determine daca exista un server de DHCP. Daca acest
atunci el va trimite configurat, iile catre

server exista,
stat, ie.
Configurarea parametrilor interfet, ei de ret, ea folosind DHCP se poate realiza n mod
temporar sau permanent.
Pentru a realiza o configurare temporara se pornes, te clientul de DHCP, de exemplu cu
ajutorul comenzii dhclient:
1
2
3
4
5

root@asgard:/home/george# dhclient
Internet Systems Consortium DHCP Client V3.0.6
Copyright 2004-2007 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

6
7
8

Listening on LPF/eth0/00:40:f4:cc:c5:41
Sending on
LPF/eth0/00:40:f4:cc:c5:41

DE RET, EA
CAPITOLUL 8. CONFIGURARI
9
10
11
12
13
14

233

Sending on
Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 6
DHCPOFFER from 10.1.1.1
DHCPREQUEST on eth0 to 255.255.255.255 port 67
DHCPACK from 10.1.1.1
bound to 10.1.1.2 -- renewal in 815 seconds.

Interfat, a va ramne
astfel configurata pna la urmatoarea
repornire a stat, iei sau pna

cnd configurarile
vor fi schimbate.
Pentru a realiza o configurare permanenta prin DHCP se foloses, te de asemenea fis, ierul
/etc/network/interfaces. Linia care configureaza interfat, a eth0 arata astfel:
1

iface eth0 inet dhcp

8.4.4

DNS. Configurarea serverelor de DNS

Fis, iere de configurare


Pentru

configura adresele serverelor de DNS se foloses, te fis, ierul


/etc/resolv.conf. n cadrul acestui fis, ier se pot specifica adresele mai multor
servere de DNS. n cazul n care unul din ele nu cont, ine informat, ii despre domeniul

cautat,
se va ncerca interogarea celorlalte.
Manualul de utilizare al fis, ierului /etc/resolv.conf se poate accesa folosind
comanda:
1

man resolv.conf

Un exemplu de fis, ier /etc/resolv.conf este urmatorul:


1
2
3
4

search localdomain
nameserver 10.1.1.1
nameserver 217.115.138.24
nameserver 128.107.241.185

n cadrul fis, ierului cea mai importanta declarat, ie este declarat, ia nameserver. Ea
defines, te adresa unui server de DNS. Fis, ierul poate cont, ine mai multe declarat, ii de
acest tip.

Aplicarea configurarilor
se realizeaza imediat deoarece fis, ierul resolv.conf este
interogat de fiecare proces atunci cnd dores, te rezolvarea unui nume de domeniu.
Des, i nu este uzual, serverele de DNS se pot configura s, i din cadrul fis, ierului /etc/

network/interfaces.
De cele mai multe ori, atunci cnd o interfat, a este configurata automat prin DHCP,
serverul de DHCP ofera pe lnga adresa IP s, i adresa unui server DNS, care va fi
salvata automat n /etc/resolv.conf.

Utilitarul resolvconf
Folosind utilitarul resolvconf se pot afis, a informat, ii despre serverele de nume
configurate n sistem s, i se poate modifica configurat, ia din fis, ierul

234

/etc/resolv.conf.
/etc/resolv.conf:
1
2

INTRODUCERE N SISTEME DE OPERARE


Folosind

opt, iunea

-a

se

poate

modifica

fis, ierul

ubuntu@ubuntu:~$ cat /etc/resolv.conf


nameserver 192.168.2.1

3
4

ubuntu@ubuntu:~$ echo "nameserver 192.168.2.100" | resolvconf -a eth0

5
6

ubuntu@ubuntu:~$ echo "nameserver 192.168.2.101" | resolvconf -a eth1

7
8
9
10
11
12
13

ubuntu@ubuntu:~$ cat /etc/resolv.conf


# Dynamic resolv.conf(5) file for glibc resolver(3) generated by
resolvconf(8)
#
DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.2.100
nameserver 192.168.2.101

O diferent, a ntre configurarea cu resolvconf s, i modificarea directa a fis, ierului


/etc/ resolv.conf este specificarea interfet, ei pentru care se face aceasta
configurat, ie. Pentru a s, terge configurat, ia asociata cu o anumita interfat, a se foloses, te

urmatoarea
comanda:
1

ubuntu@ubuntu:~$ resolvconf -d eth0

2
3
4
5
6
7

ubuntu@ubuntu:~$ cat /etc/resolv.conf


# Dynamic resolv.conf(5) file for glibc resolver(3) generated by
resolvconf(8)
#
DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.2.101

Interogarea serverelor de nume


Folosind comanda host se pot obt, ine informat, ii despre un anumit domeniu, cum ar fi
serverul de nume al domeniului, serverul de mail, descrierea, alias-ul
adresa IP asociata,
etc.

De exemplu, adresa IP asociata se poate afla folosind urmatoarea


comanda:
1
2

ubuntu@ubuntu:~$ host -t A cs.pub.ro


cs.pub.ro has address 141.85.37.5

Pentru a obt, ine serverul de nume asociat cu acest domeniu se va folosi comanda:
1
2
3

ubuntu@ubuntu:~$ host -t NS cs.pub.ro


cs.pub.ro name server ns.cs.pub.ro.
cs.pub.ro name server pub.pub.ro.

Serverul de mail se poate obt, ine folosind comanda urmatoare:


1
2

ubuntu@ubuntu:~$ host -t MX cs.pub.ro


cs.pub.ro mail is handled by 5 mail.cs.pub.ro.

Comanda urmatoare
va afis, a descrierea domeniului:
1
2
3

ubuntu@ubuntu:~$ host -t TXT cs.pub.ro


cs.pub.ro descriptive text "Politehnica University of Bucharest,
Computer Science Departament"

DE RET, EA
CAPITOLUL 8. CONFIGURARI

8.4.5

235

Aliasuri. /etc/hosts

Aliasurile reprezinta etichete care sunt asociate unor adrese de IP. Sistemul de aliasuri
ator

funct, ioneaza aseman


cu cel de DNS: de exemplu, atunci cnd o stat, ie dores, te sa

acceseze serverul numit my-print-server, ea va ncerca sa gaseasc


a adresa IP a
serverului respectiv.
Exista nsa doua deosebiri majore fat, a de DNS. Prima consta n faptul ca etichetele
asociate unor adrese IP nu trebuie sa respecte convent, iile numelor de domenii DNS (de
exemplu nu trebuie sa se termine cu un Top Level Domain). A doua deosebire consta n
a adresa IP asociata unei etichete. Daca n cazul DNS se folosesc
felul n care este gasit
servere dedicate, n cazul aliasurilor este interogat fis, ierul /etc/hosts. n acest fis, ier
sunt trecute corespondent, ele ntre etichete s, i adrese IP.

Un exemplu de fis, ier hosts este urmatorul:


1
2
3

root@asgard:/home/george# cat /etc/hosts


127.0.0.1 localhost asgard
127.0.1.1 asgard

4
5
6
7
8

#Servers
10.1.1.100 print.mydomain.ro my-print-server
10.1.1.101 ftp.mydomainro my-ftp-server
192.168.1.150 mail-server

9
10
11
12
13
14
15
16

# The following lines are desirable for IPv6 capable hosts


::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Fis, ierul hosts cont, ine mai multe linii de forma:


1

adresa_IP numele_statiei [eticheta] [eticheta] ...

Cmpul cel mai din stnga este adresa de IP. Urmeaza apoi numele principal al stat, iei,
despart
, ite prin spat, iu.
s, i etichetele care se asociaza cu aceasta adresa,
De obicei, atunci cnd sunt configurate s, i servere de DNS s, i aliasuri, aliasurile au
prioritate s, i vor fi verificate primele.

8.4.6

Configurarea numelui stat, iei curente

Pentru stat, ia curenta se poate configura un nume local.

urmatoarele
comenzi se poate afla numele stat, iei:
1

ubuntu@ubuntu:~$ hostname

2
3

ubuntu@ubuntu:~$ uname -n

4
5

ubuntu@ubuntu:~$ cat /proc/sys/kernel/hostname

6
7

ubuntu@ubuntu:~$ sysctl kernel.hostname

Folosind oricare dintre

236

INTRODUCERE N SISTEME DE OPERARE

Numele stat, iei se poate modifica temporar folosind comanda hostname, ca n exemplul

urmator:
1
2

ubuntu@ubuntu:~$ hostname
ubuntu

3
4

ubuntu@ubuntu:~$ hostname uso

5
6
7

ubuntu@ubuntu:~$ hostname
uso

Pentru a realiza o configurare permanenta se va modifica fis, ierul /etc/hostname care


cont, ine numele stat, iei. Pentru a determina recitirea configurat, iei din acest fis, ier se va

rula urmatorul
script:
1

ubuntu@ubuntu:~$ /etc/init.d/hostname.sh

8.5

Testarea configurat, iilor de ret, ea

Odata ce s-au realizat configurat, iile de ret, ea, acestea trebuie testate. Pentru testarea
lor sunt folosite n mod uzual doua utilitare: ping s, i traceroute. Aceste utilitare

sunt folosite s, i pentru a depista problemele uzuale care pot aparea


n funct, ionarea unei
ret, ele.

8.5.1

Ping

Utilitarul ping este folosit pentru a verifica conectivitatea ntre doua stat, ii. El testeaza
folosindu-se de protocoalele IP s, i ICMP
conexiunea fizica s, i parte din cea logica,
(Internet Control Message Protocol) pentru a trimite s, i pentru a primi mesaje.

Ping primes, te adresa IP a stat, iei destinat, ie s, i va trimite catre


aceasta un mesaj ECHO

REQUEST. Atunci cnd acest mesaj este recept, ionat, stat, ia destinat, ie va raspunde
cu

un mesaj similar, ECHO REPLY. Daca raspunsul


destinat, iei ajunge napoi la sursa,
n caz contrar exista probleme care mpiedica cele
conexiunea dintre ele funct, ioneaza.
doua stat, ii ca comunice.

Principalii parametri ai comenzii ping sunt urmatorii:


1

ping [-f] [-c count] [-i interval] [-I interface] destination

a nicio opt, iune, ping va trimite un numar


nelimitat de mesaje catre

Far
destinat, ie, pna
cnd va fi ntrerupt:
1
2
3
4
5
6
7
8

root@asgard:/home/george# ping 10.1.1.1


PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data.
64 bytes from 10.1.1.1: icmp_seq=1 ttl=255 time=0.395 ms
64 bytes from 10.1.1.1: icmp_seq=2 ttl=255 time=0.359 ms
[CTRL+C]
--- 10.1.1.1 ping statistics --2 packets transmitted, 2 received, 0\% packet loss, time 8998ms
rtt min/avg/max/mdev = 0.341/0.400/0.707/0.106 ms

DE RET, EA
CAPITOLUL 8. CONFIGURARI

237

de pachete trimise, iar opt, iunea -i specifica intervalul n


Opt, iunea -c specifica numarul

secunde ntre doua pachete trimise:


1
2
3
4
5
6
7
8

root@asgard:/home/george# ping 10.1.1.1 -c 3 -i 1


PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data.
64 bytes from 10.1.1.1: icmp_seq=1 ttl=255 time=0.326 ms
64 bytes from 10.1.1.1: icmp_seq=2 ttl=255 time=0.459 ms
64 bytes from 10.1.1.1: icmp_seq=3 ttl=255 time=0.361 ms
--- 10.1.1.1 ping statistics --3 packets transmitted, 3 received, 0\% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.326/0.382/0.459/0.056 ms

Opt, iunea -I specifica pe ce interfat, a se vor trimite pachetele:


1
2
3
4
5

root@asgard:/home/george# ping 10.1.1.1 -I eth0 -c 3


PING 10.1.1.1 (10.1.1.1) from 10.1.1.2 eth0: 56(84) bytes of data.
64 bytes from 10.1.1.1: icmp_seq=1 ttl=255 time=0.331 ms
64 bytes from 10.1.1.1: icmp_seq=2 ttl=255 time=0.326 ms
64 bytes from 10.1.1.1: icmp_seq=3 ttl=255 time=0.367 ms

6
7
8
9

--- 10.1.1.1 ping statistics --3 packets transmitted, 3 received, 0\% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.326/0.341/0.367/0.023 ms

nelimitat de pachete ECHO REQUEST,


Opt, iunea -f permite transmiterea unui numar
a sa se as, tepte raspunsul

far
ECHO REPLY. n acest fel destinat, ia este inundata (flood)
de mesaje. Datorita potent, ialului pe care l are aceasta opt, iune de a fi folosita n atacuri

DoS (vezi sect, iunea 10.4.1), parametrul -f poate fi folosit doar de catre
root:
1
2
3
4
5
6
7
8
9

root@asgard:/home/george# ping -f 10.1.1.1


PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data.
...................................................
.................................................
CTRL+C
--- 10.1.1.1 ping statistics --100 packets transmitted, 3 received, 97% packet loss, time 8148ms
rtt min/avg/max/mdev = 0.240/0.389/2.291/0.450 ms, ipg/ewma 12.053/0.364
ms

8.5.2

Traceroute

Utilitarul traceroute este folosit pentru a testa calea pe care o urmeaza pachetele
ntre sursa s, i destinat, ie.
El va afis, a cte un mesaj pentru fiecare
stat, ie/server/echipament de ret, ea prin care trec mesajele.
Pentru a realiza acest lucru, traceroute se foloses, te de cmpul TTL (Time To Live)

prezent n antetul fiecarui


pachet. Din motive ce t, in de felul n care funct, ioneaza o ret, ea
este posibil ca n drumul ntre sursa s, i destinat, ie sa apara bucle. Daca un pachet intra
el va fi trimis la infinit ntre stat, iile ce apart, in buclei s, i nu va ajunge
ntr-o astfel de bucla,

niciodata la destinat, ie. Pentru a preveni o asemenea situat, ie, n antetul fiecarui
pachet

a fost introdus cmpul TTL. Acest cmp cont, ine numarul


maxim de echipamente de
ret, ea prin care poate trece un pachet nainte de a fi aruncat.

Daca un pachet are cmpul TTL cu valoarea init, iala (atunci cnd pleaca de la sursa)
egala cu 10, atunci el poate trece prin maxim 10 echipamente de ret, ea. Al zecelea

238

INTRODUCERE N SISTEME DE OPERARE

echipament va arunca pachetul s, i va trimite un mesaj ICMP sursei prin care o va ns, tiint, a
de acest lucru. Trimit, nd acest mesaj, al zecelea echipament s, i va anunt, a identitatea

catre
sursa pachetului.
Pe acest sistem se bazeaza funct, ionarea utilitarului traceroute. Se trimit pachete ce au
cmpul TTL configurat la o valoare din ce n ce mai mare. Atunci cnd valoarea TTL

este 1, va raspunde
primul echipament de ret, ea de pe cale s, i va spune ca a aruncat

pachetul trimis. Atunci cnd valoarea TTL este 2, va raspunde


al doilea echipament de
pe cale s, i va spune ca a aruncat pachetul trimis. n felul aceasta toate echipamentele de
pe parcurs vor fi identificate unul cte unul.

Parametrii uzuali ai comenzii traceroute sunt urmatorii:


1

traceroute [-f first_ttl] [-m max_ttl] host

host reprezinta destinat, ia pna la care se dores, te aflarea rutei:


1
2
3
4
5
6
7
8

george@asgard:~$ traceroute rol.ro


traceroute to rol.ro (195.95.229.171), 30 hops max, 40 byte packets
1 10.1.1.1 (10.1.1.1) 0.429 ms 0.332 ms 0.248 ms
2 10.100.0.1 (10.100.0.1) 0.809 ms 0.657 ms 0.527 ms
3 backbone.hertza.ro (89.165.146.177) 6.286 ms 1.765 ms 2.493 ms
4 84.234.111.41 (84.234.111.41) 6.738 ms 7.507 ms 11.869 ms
5 84.234.107.154 (84.234.107.154) 4.406 ms 1.603 ms 1.625 ms
6 195.95.229.171 (195.95.229.171) 2.715 ms 1.676 ms 1.230 ms

Pentru fiecare echipament de pe parcurs este afis, ata adresa lui s, i timpul de raspuns
succesive. n cazul n care pentru un mesaj trimis nu este primit
pentru trei ncercari

raspuns,
se va afis, a caracterul *. Parametrul -f permite configurarea valorii cmpului

TTL din primul mesaj trimis. Valoarea cmpului TTL din mesajele urmatoare
va depinde
de aceasta s, i se va incrementa cu 1 la fiecare mesaj.
1
2
3
4
5

george@asgard:~$ traceroute -f 4 rol.ro


traceroute to rol.ro (195.95.229.171), 30 hops max, 40 byte packets
4 84.234.111.41 (84.234.111.41) 2.008 ms 8.286 ms 10.525 ms
5 84.234.107.154 (84.234.107.154) 3.399 ms 4.614 ms 5.497 ms
6 195.95.229.171 (195.95.229.171) 4.458 ms 2.901 ms 2.947 ms

Parametrul -m configureaza valoarea maxima a cmpului TTL care va fi ncercata n


Daca paramerul nu este specificat, se vor testa
cazul n care destinat, ia nu a fost atinsa.
cu lungimi de pna la 30 de echipamente.
implicit cai
1
2
3
4
5

george@asgard:~$ traceroute -m 3 rol.ro


traceroute to rol.ro (195.95.229.171), 4 hops max, 40 byte packets
1 10.1.1.1 (10.1.1.1) 0.404 ms 0.402 ms 0.326 ms
2 10.100.0.1 (10.100.0.1) 0.623 ms 8.407 ms 2.069 ms
3 backbone.hertza.ro (89.165.146.177) 9.707 ms 6.819 ms 7.895 ms

8.5.3

Cum se depisteaza problemele uzuale n cazul configurarilor


de ret, ea

Atunci cnd apar probleme n configurarile


de ret, ea, pentru depistarea lor exista doua
de sus n jos (top-down) s, i de jos n sus (bottom-up). Partea de sus (top) a unei
abordari:
ret, ele se refera la partea de aplicat, ii, iar partea de jos (bottom) se refera la conexiunile
fizice ntre echipamente.

DE RET, EA
CAPITOLUL 8. CONFIGURARI

239

n continuare va fi analizata abordarea de jos n sus, deoarece majoritatea problemelor


dintr-o ret, ea sunt cauzate de conexiunile fizice ntre echipamente.
Sa presupunem ca nu poate fi accesata pagina web www.google.ro. n cazul acestei
primul lucru care trebuie verificat este faptul ca exista legatur
a fizica ntre stat, ie
abordari
a fir. n cazul legaturilor

s, i switch sau punctul de acces far


la Ethernet (realizate prin
cablu UTP) conectivitatea se poate verifica examinnd led-ul de link de pe placa de
ret, ea. Daca led-ul este aprins, exista conexiune ntre stat, ie s, i switch. Daca led-ul este
stins, trebuie verificat cablul de ret, ea sau funct, ionarea switch-ului.
O alta metoda folosita pentru a verifica starea link-ului pentru o interfat, a de ret, ea, utila n
special atunci cnd nu exista acces fizic la stat, ie, este utilizarea unui program de genul
a fizica
ethtool. Printre altele, acesta ofera informat, ii detaliate despre tipul de legatur
existenta s, i starea ei. Pentru a vedea starea unei interfet, e utilitarul se apeleaza avnd
ca parametru numele interfet, ei:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

root@asgard:/home/george# ethtool eth0


Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes:
10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: yes

n cazul n care Link detected are valoarea yes, exista conexiune ntre stat, ie s, i
switch. Daca are valoarea no, trebuie verificat cablul de ret, ea sau funct, ionarea
switch-ului.

Urmatorul
pas este verificarea existent, ei unui gateway s, i a conexiunii cu acesta. Pentru
a verifica faptul ca un gateway a fost configurat trebuie analizat fis, ierul
/etc/network/ interfaces sau rezultatul comenzii route, funct, ie de
configurat, ie. Daca niciun gateway nu este configurat, trebuie configurat unul. Daca

gateway-ul este configurat, trebuie verificata legatura


catre
acesta cu ajutorul comenzii
ping.
Dupa verificarea gateway-ului, trebuie verificat DNS-ul. Pentru aceasta trebuie analizat
fis, ierul /etc/resolv.conf. n cazul n care nu este configurat niciun server DNS,

trebuie configurat unul. Daca este configurat un server, trebuie testata legatura
cu acesta
cu ajutorul comenzii ping.

, ii cu un alt server din Internet. Se poate


Pasul urmator
este verificarea conectivitat
ncerca accesarea unei alte pagini web, se poate testa conectivitatea cu un alt server
catre

cu ajutorul comenzii ping sau se poate ncerca verificarea caii


google.ro cu

240

INTRODUCERE N SISTEME DE OPERARE

ajutorul comenzii traceroute. Folosirea traceroute ofera avantajul depistarii


echipamentului de ret, ea n care se opresc pachetele.

8.6
8.6.1

Studii de caz
Verificarea n linie de comanda a parametrilor de ret, ea n
Windows

Cea mai us, oara metoda de a verifica parametrii de ret, ea n Windows este folosirea
Pentru a porni
utilitarului ipconfig. Acesta se apeleaza din linie de comanda.
interpretorul de comenzi din Windows XP, se merge la StartRun, unde n cmpul
Open se introduce cmd s, i se apasa pe OK.
Informat, ii despre modul de utilizare al comenzii ipconfig, precum s, i despre parametrii
disponibili, se pot obt, ine utiliznd parametrul /?:
1

C:\Documents and Settings\George >ipconfig /?

a niciun parametru va afis, a parte din parametrii de


Apelarea comenzii ipconfig far
ret, ea:
1
2

C:\Documents and Settings\George>ipconfig


Windows IP Configuration

3
4
5

Ethernet adapter Local Area Connection:


Media State . . . . . . . . . . . : Media disconnected

6
7

Ethernet adapter Wireless Network Connection 2:

8
9
10
11
12

Connection-specific
IP Address. . . . .
Subnet Mask . . . .
Default Gateway . .

DNS
. .
. .
. .

Suffix
. . . .
. . . .
. . . .

.
.
.
.

:
:
:
:

lan
192.168.1.70
255.255.255.0
192.168.1.254

Pentru a vedea tot, i parametrii de ret, ea, inclusiv serverul DNS s, i gateway-ul implicit, se
foloses, te parametrul /all:
1
2
3
4
5
6
7
8

C:\Documents and Settings\George>ipconfig


Windows IP Configuration
Host Name . . . . . . . . . . . .
Primary Dns Suffix . . . . . . .
Node Type . . . . . . . . . . . .
IP Routing Enabled. . . . . . . .
WINS Proxy Enabled. . . . . . . .
DNS Suffix Search List. . . . . .

/all
:
:
:
:
:
:

Asgard
Mixed
No
No
lan

9
10
11
12
13

Ethernet adapter Local Area


Media State . . . :
Description . . . :
Physical Address. :

Connection:
Media disconnected
Broadcom 440x 10/100 Integrated Controller
00-40-F4-CC-C5-41

14
15
16
17
18

Ethernet adapter Wireless Network Connection 2:


Connection-specific DNS Suffix . : lan
Description . . . . : Atheros AR5006X Wireless Network Adapter
Physical Address. . . . . . . . . : 00-19-7E-0B-7E-65

DE RET, EA
CAPITOLUL 8. CONFIGURARI
Dhcp Enabled. . .
Autoconfiguration
IP Address. . . .
Subnet Mask . . .
Default Gateway .
DHCP Server . . .
DNS Servers . . .
Lease Obtained. .
Lease Expires . .

19
20
21
22
23
24
25
26
27

. . . .
Enabled
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

241
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

:
:
:
:
:
:
:
:
:

Yes
Yes
192.168.1.70
255.255.255.0
192.168.1.254
192.168.1.254
192.168.1.254
11 august 2007 16:17:26
12 august 2007 16:17:26

Configurarea parametrilor de ret, ea din line de comanda n Windows este mai dificil de
realizat dect n Linux. Pentru a putea face acest lucru se foloses, te utilitarul netsh.
Informat, ii despre modul de utilizare al acestuia se pot obt, ine folosind parametrul /?:
1

C:\Documents and Settings\George >netsh /?

8.6.2

de ret, ea n Windows Vista


Configurari

ator

Modul de configurare al unei interfet, e de ret, ea n Windows Vista este aseman


cu cel
din Windows XP. Diferent, a importanta ntre ele este data de modul n care se acceseaza
fereastra de configurare a parametrilor.
Din meniul Control Panel se alege Network and Internet (figura 8.5).

Figura 8.5: Selectarea Network and Internet din Control Panel


Apoi se selecteaza Network Sharing Center (figura 8.6).

Figura 8.6: Selectarea Network Sharing Center


Din noua fereastra se alege Manage Network Connections (figura 8.7).
Urmnd ca apoi sa fie afis, ata o lista cu interfet, ele de ret, ea disponibile. Prin efectuarea

unui click dreapta pe simbolul asociat unei interfet, e va aparea


un meniu contextual
ator

aseman
cu cel din Windows XP (figura 8.8).
Prin selectarea opt, iunii Properties din acest meniu va fi afis, ata fereastra de configurare
a parametrilor interfet, ei (figura 8.9).
Pentru a configura adresa IP a interfet, ei, gateway-ul s, i serverul DNS, se alege itemul
Internet Protocol Version 4.
Fereastra de configurare a parametrilor este identica celei din Windows XP (figura 8.10).

242

INTRODUCERE N SISTEME DE OPERARE

Figura 8.7: Selectarea Manage Network Connections

Figura 8.8: Meniul contextual corespunzator


unei interfet, e de ret, ea

, ile unei interfet, e de ret, ea


Figura 8.9: Proprietat

n cazul n care este aleasa opt, iunea Obtain an IP address automatically, adresa IP
a interfet, ei va fi configurata prin DHCP. Pentru a specifica manual parametrii interfet, ei
trebuie aleasa opt, iunea Use the following IP address.

DE RET, EA
CAPITOLUL 8. CONFIGURARI

243

Figura 8.10: Configurarea parametrilor de ret, ea

8.6.3

Configurarea PPPoE n Linux

PPP (Point to Point Protocol) este un protocol utilizat pentru comunicat, ia punct-la-punct
(comunicat, ia dintre doua noduri conectate direct ntre ele). PPP permite realizarea de

legaturi
peste conexiuni fizice seriale, linii telefonice, conexiuni radio sau fibra optica.

Dintre implementarile
PPP, cele mai uzuale sunt cele folosite de conexiunile de tip dial-up
s, i PPPoE.
PPPoE (PPP over Ethernet) este un protocol care permite ncapsularea (includerea)
cadrelor PPP n cadre Ethernet, cel mai frecvent pentru a putea fi trimise printr-o placa
de ret, ea obis, nuita (ce foloses, te cablu UTP).
PPPoE este folosit uzual n cadrul serviciilor de tip ADSL sau Internet prin cablu TV. Daca

legatura
fizica dintre calculator s, i modem se realizeaza prin cablu UTP, atunci este foarte

probabil ca legatura
logica dintre calculator s, i modem sa foloseasca PPPoE. Pentru a
putea sa acceseze Internetul, utilizatorul trebuie mai nti sa stabileasca o conexiune
PPP cu modemul.
de cele mai mule ori, autentificarea utilizatorului.
Stabilirea unei conexiuni PPP necesita,

Aceasta se realizeaza pe baza unui nume de utilizator s, i a unei parole furnizate de catre
ISP (Internet Service Provider furnizorul de servicii de Internet).
Pentru configurarea parametrilor conexiunii PPP, inclusiv a parametrilor necesari

autentificarii,
cea mai us, oara metoda este folosirea utilitarului pppoeconf. Instalarea
protocolului
acestuia depinde de instalarea tuturor pachetelor necesare funct, ionarii
PPP, astfel nct, pe o distribut, ie ce foloses, te pachete cum este Ubuntu sau Debian,
odata cu pppoeconf se vor instala s, i toate dependint, ele sale.
Pe de alta parte, odata configurata conexiunea PPP cu ajutorul pppoeconf, acesta se va

ocupa de realizarea tuturor fis, ierelor de configurare, inclusiv de adaugarea


unui script
care la pornirea sistemului de operare va realiza conectarea prin PPP.

Pentru configurarea PPPoE sunt necesare urmatoarele


fis, iere (ele sunt create sau

actualizate automat de catre


pppoeconf):

244

INTRODUCERE N SISTEME DE OPERARE

/etc/network/interfaces
/etc/ppp/pap-secrets
/etc/ppp/peers/dslprovider
Ultimul dintre fis, iere poate avea orice nume s, i se poate afla n orice loc, nsa trebuie
specificat n cadrul fis, ierului /etc/network/interfaces.

Un exemplu de /etc/network/interfaces este urmatorul:


1
2
3

# The loopback network interface


auto lo
iface lo inet loopback

4
5
6
7

# The primary network interface


allow-hotplug eth0
iface eth0 inet manual

8
9
10
11
12

auto dsl-provider
iface dsl-provider inet ppp
pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf
provider dsl-provider

13
14

auto eth0

Autentificarea conexiunii PPP se realizeaza folosind protocoale specializate. Un


exemplu de fis, ier /etc/ppp/pap-secrets, n care sunt trecute informat, iile
este urmatorul:

necesare autentificarii,
1

[...]

2
3

# INBOUND connections

4
5
6
7

# Every regular user can use PPP and has to use passwords from
/etc/passwd
* hostname "" *

8
9
10
11
12
13
14
15

# UserIDs that cannot


# other accounts that
guest hostname "*" master hostname "*"
root
hostname "*"
support hostname "*"
stats hostname "*" -

use PPP at all. Check your /etc/passwd and add any


should not be able to use pppd!
-

16
17

# OUTBOUND connections

18
19
20
21
22
23
24
25
26
27
28

# Here you should add your userid password to connect to your providers
via
# PAP. The * means that the password is to be used for ANY host you
connect
# to. Thus you do not have to worry about the foreign machine name. Just
# replace password with your password.
# If you have different providers with different passwords then you
better
# remove the following line.
# * password

29
30

"student" * "usorules"

DE RET, EA
CAPITOLUL 8. CONFIGURARI

245

n fis, ierul /etc/ppp/peers/dslprovider sunt trecute informat, ii legate de


parametrii conexiunii PPP, alt, ii dect cei de autentificare:
1

# Minimalistic default options file for DSL/PPPoE connections

2
3
4
5
6
7
8
9
10
11
12
13
14

noipdefault
defaultroute
replacedefaultroute
hide-password
noauth
persist
#mtu 1492
#persist
#holdoff 20
plugin rp-pppoe.so eth0
user "student"
usepeerdns

Pentru a activa o conexiune PPP se foloses, te comanda pon. Ea este echivalenta cu


parametrul up al comenzii ifconfig. Pentru a dezactiva o conexiune PPP se foloses, te
comanda poff, echivalenta cu parametrul down al comenzii ifconfig.

pentru a funct, iona prin PPPoE, o interfat, a de


Un amanunt
important de precizat este ca,
ret, ea Ethernet nu necesita configurarea unei adrese IP. Interfat, a de ret, ea Ethernet este

folosita indirect pentru conectarea la Internet: prin ea sunt trimise datele catre
modemm

acesta asigurnd mai departe legatura


catre
Internet.
n acest caz adresa IP este asociata cu o interfat, a virtuala numita ppp0:
1
2
3
4

root@asgard:/home/george# ifconfig
eth0
Link encap:Ethernet HWaddr 00:14:D1:38:73:A6
inet6 addr: fe80::240:f4ff:febb:1701/64 Scope:Link
[...]

5
6

lo

Link encap:Local Loopback


inet addr:127.0.0.1 Mask:255.0.0.0
[...]

ppp0

Link encap:Point-to-Point Protocol


inet addr:192.168.10.3 P-t-P:10.0.0.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:176 errors:0 dropped:0 overruns:0 frame:0
TX packets:180 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:105255 (102.7 KiB) TX bytes:13991 (13.6 KiB)

7
8
9
10
11
12
13
14
15
16

Dupa cum se poate observa, interfat, a eth0 nu are configurata adresa IP. n schimb
interfat, a ppp0, asociata conexiunii PPP, este cea care fost configurata cu adresa IP
192.168.10.3.

Cuvinte cheie

ret, ea de calculatoare

adresa MAC

LAN, MAN, WAN

Ethernet

protocolul IP; adresa IP

UTP

246

INTRODUCERE N SISTEME DE OPERARE

ruter

/etc/network/interfaces

unicast, multicast, broadcast

/etc/resolv.conf

adresa de (sub)ret, ea

/etc/hosts

default gateway
DNS

route
DHCP

switch
Access Point
DHCP

dhclient
ping

configurare temporara/permanent
a;

traceroute

configurare statica/dinamic
a

ipconfig

ifconfig

PPPoE

ntrebari

1. Un utilizator ncearca sa testeze conectivitatea catre


cs.pub.ro cu ajutorul
comenzii ping: ping cs.pub.ro s, i testul reus, es, te. Totus, i, daca utilizatorul
tasteaza n bara de adrese a browser-ului cs.pub.ro, pagina web respectiva nu
Care poate fi motivul pentru care cele doua teste au rezultate
poate fi accesata.
diferite?

q serverul web de la adresa cs.pub.ro este oprit


q utilizarea comenzii ping este gres, ita
q comanda ping a oprit serverul web
q utilitarul ping nu ofera informat, ii despre conexiunea cu cs.pub.ro
2. Se poate configura adresa 10.138.257.134 pe interfat, a de ret, ea eth0?

q da, oricnd
q da, doar daca este singura interfat, a a sistemului
q da, doar n situat, ia n care este configurat un server DNS
q nu
3. Dndu-se o stat, ie care are configurata adresa IP 172.16.150.200 s, i masca de
ret, ea 255.255.255.0, care este adresa ret, elei din care face parte stat, ia?

q 172.0.0.0
q 172.16.0.0
q 172.16.150.0
q 172.16.150.200

4. Des, i legatura
la Internet funct, iona, utilizatorul Dorel a dorit sa testeze
conectivitatea cu gateway-ul cu ajutorul comenzii ping -f 192.168.10.1.

DE RET, EA
CAPITOLUL 8. CONFIGURARI

247

La scurt timp el a fost contactat de administratorul de ret, ea care l-a rugat sa s, i


verifice calculatorul mpotriva virus, ilor. Acest lucru s-a petrecut deoarece:

q Dorel foloseste Linux s, i nu Windows, la fel ca majoritatea celorlalt, i utilizatori.


q Dorel nu a repornit calculatorul de mult timp.
q Dorel a generat foarte mult trafic n timp scurt, lucru specific virus, ilor.
q Dorel nu obisnuies, te sa cripteze email-urile trimise.
5. Rolul serviciului DNS este de a:

q asocia nume de domenii cu adrese MAC


q asocia nume de domenii cu adrese IP
q asocia adrese IP cu adrese MAC
q asocia adresa IP cu numele utilizatorului
, te urmatoarea

6. n fis, ierul /etc/network/interfaces se gases


linie:
1

iface eth0 inet dhcp

n linia de comanda este data urmatoarea


comanda:
1

ifconfig eth0 192.168.124.150

Care va fi adresa IP a interfet, ei eth0 imediat dupa


dupa care stat, ia este repornita.
repornirea stat, iei?

q 192.168.124.150, pentru ca a fost ultima adresa configurata de root.


q 192.168.124.150 daca aceasta este adresa furnizata stat, iei de serverul
DHCP

q interfat, a nu va avea nicio adresa IP pentru ca s-a creat un conflict prin


configurarea adresei IP n doua moduri

q interfat, a nu va avea nicio adresa IP pentru ca nu a fost dat parametrul


netmask comenzii ifconfig

7. Configurarile
permanente se realizeaza cu ajutorul fis, ierului /etc/network/ip.

Configurarile
temporare s, i pierd efectul o data cu repornirea sistemului.

q adevarat,
fals

q adevarat,
adevarat

q fals, fals

q fals, adevarat
8. Masca de ret, ea este utilizata pentru a identifica adresa ret, elei din cadrul unei
adrese IP. Pentru a putea accesa serverele din Internet este necesara
configurarea unui server DNS.

q adevarat,
fals

q adevarat,
adevarat

248

INTRODUCERE N SISTEME DE OPERARE

q fals, fals

q fals, adevarat
9. Cu ajutorul comenzii traceroute se poate testa:
, imea de banda a unei conexiuni
q Lat

q Calea dintre sursa s, i destinat, ie


q Funct, ionarea serverului web de pe stat, ia destinat, ie
q Existent, a unui ruter ntre sursa s, i destinat, ie

10. Daca un server DNS nu este specificat, care dintre urmatoarele


comenzi este
probabil sa funct, ioneze:

q ping www.google.ro
q ping cs.pub.ro
q ping localhost
q ping dns.localdomain.ro

Capitolul 9
Servicii de ret, ea
When I took office, only high energy physicists had ever
heard of what is called the World Wide Web.... Now
even my cat has its own page.
Bill Clinton, 1996

Ce se nvat, a din acest capitol?

Conceptul de protocol s, i stiva de protocoale


Modelul client-server
Folosirea porturilor
telnet, ssh, wget, curl
Execut, ia comenzilor la distant, a:

Funct, ionarea serviciului de pos, ta electronica (email)


Funct, ionarea serviciului de web
, i de partajare a fis, ierelor: SMB, FTP
Modalitat

9.1
9.1.1

Concepte specifice aplicat, iilor de ret, ea


Stiva TCP/IP

Sistemele de calcul au nceput sa fie dezvoltate odata cu sfrs, itul celui de al doilea razboi
comunicat, iei ntre sisteme aflate n
mondial. Cu toate acestea, problematica asigurarii

locat, ii la mare distant, a a fost formulata abia spre nceputul anilor 70, de catre
US DoD
arii
Nat, ionale al Statelor Unite). Proiectul
(US Department of Defense Ministerul Apar
US DoD a creat s, i un cadru de standardizare pentru solut, iile de comunicat, ie, denumit
stiva de protocoale TCP/IP (Transmission Control Protocol/Internet Protocol).
Un protocol este un set de reguli care guverneaza modul n care doua dispozitive
schimba informat, ie ntr-o ret, ea s, i asigura coerent, a comunicat, iei.

249

250

INTRODUCERE N SISTEME DE OPERARE

O stiva de protocoale reprezinta un set de protocoale ce comunica ntre ele prin


funct, ii (numite primitive) clar definite.
O stiva de protocoale este n general privita ca o succesiune de niveluri. Fiecare dintre
niveluri este descris de:

un set de funct, ii pe care le ndeplines, te;


un set de parametri pe care i as, teapta de la nivelul inferior;
serviciile pe care le ofera nivelului imediat superior.
Protocoalele dintr-o stiva nu vor putea comunica ntre ele direct dect daca se afla pe
niveluri adiacente.
Descrierea unei solut, ii de comunicare prin prisma unei stive de protocoale ofera n
, ii procesului de standardizare. Astfel, schimbarea (sau
primul rnd avantajul flexibilitat
a far
a a solicita modificari
n
simpla optimizare) unui protocol din stiva poate fi facut
restul protocoalelor.
nceputurile ret, elelor de date au fost marcate de existent, a mai multor protocoale de
des, i
comunicat, ie, dezvoltate n paralel, de vendori diferit, i. Problema consta n faptul ca,
doua protocoale, de la doi vendori diferit, i, descriau amndoua foarte bine specificat, iile

propriilor dispozitive, nu puteau sa comunice unul cu celalalt.


Astfel, pentru a face
posibila intercomunicarea ntre echipamentele de ret, ea produse de vendori diferit, i, s-a
introdus conceptul de standardizare a unui protocol. Odata ce un protocol este acceptat
ca standard, el devine dintr-un set de reguli, un set comun de reguli, fiind recunoscut
din punct de vedere procedural s, i funct, ional de tot, i vendorii.

Pentru a descrie prelucrarile


efectuate asupra datelor trimise de la utilizator spre mediul
de transmisie, stiva TCP/IP identifica patru niveluri, prezentate n figura 9.1:
Aplicat, ie, Transport, Ret, ea (sau Internet) s, i Acces la mediu.

Figura 9.1: Stiva TCP/IP

CAPITOLUL 9. SERVICII DE RET, EA

251

Nivelul aplicat, ie
Nivelul aplicat, ie este cel mai apropiat de utilizator s, i ofera acestuia modalitatea de
accesare a serviciului de ret, ea. Un serviciu de ret, ea poate fi implementat prin unul sau
mai multe protocoale de nivel aplicat, ie.
Protocoalele de la acest nivel vor cont, ine reguli referitoare la interact, iunea cu utilizatorul,
formatarea s, i reprezentarea datelor, precum s, i la controlul dialogului ntre componentele
serviciului.
n funct, ie de serviciul oferit, protocoalele de nivel aplicat, ie pot fi grupate n:

serviciul de transfer al fis, ierelor, ce poate fi implementat folosind FTP (File Transfer
Protocol), HTTP (HyperText Transfer Protocol) etc.
ce se bazeaza pe urmatoarele

serviciul de pos, ta electronica,


protocoale: SMTP
(Simple Mail Transfer Protocol), POP3 (Post Office Protocol 3), IMAP (Internet Mail
Access Protocol)
telnet, ssh, rlogin
serviciul de executarea comenzilor la distant, a:

alte protocoale:

DNS (Domain Name System), DHCP (Dynamic Host


Configuration Protocol), SNMP (Simple Network Management Protocol)

Nivelul transport
control al fluxului
Nivelul transport este responsabil cu probleme legate de sigurant, a,
s, i corect, ie de erori. Tot la nivelul transport este realizata multiplexarea comunicat, iei prin
specificarea porturilor sursa s, i destinat, ie. Cele mai importante protocoale de nivel
transport sunt TCP (Transmission Control Protocol) s, i UDP (User Datagram Protocol).
TCP este un protocol orientat conexiune, adica nainte de a trimite datele va negocia
, ile participante la comunicat, ie, iar apoi pe tot
parametrii de comunicat, ie ntre entitat
parcursul va asigura reordonarea pachetelor ajunse n ordine gres, ita la destinat, ie, sau
retransmisia celor pierdute.
Pentru a nt, elege mai bine not, iunea de protocol orientat pe conexiune, se poate face o
n momentul efectuarii
unei
analogie cu transmiterea datelor prin ret, eaua telefonica.
convorbiri telefonice, se stabiles, te ntre sursa s, i destinatie o conexiune dedicata prin

ret, ea, nainte de nceperea comunicarii.


Deasemenea acest exemplu releva faptul ca
ntr-un protocol orientat pe conexiune, destinat, ia este mereu contactata nainte de
nceperea transmisiei propriu-zise (n analogia cu soneria telefonului).
UDP este un protocol neorientat conexiune. Astfel, UDP nu se va preocupa de
init, ierea sau terminarea conexiunii, de pierderea pachetelor sau doar a succesiunii
a a verifica macar

acestora. UDP va ncepe transmisia far


daca destinat, ia finala va
accepta respectivul trafic.
Des, i 95% din traficul Internet foloses, te protocolul TCP, pentru ret, elele locale numeroase
servicii se bazeaza pe UDP: DNS, SNMP, TFTP. Motivul principal l reprezinta gradul
redus al erorilor n ret, elele locale (spre deosebire de WAN). UDP este mai simplu de

implementat, dar s, i mai eficient dect TCP: antetul (informat, ia suplimentara adaugat
a
de fiecare protocol) UDP este doar de 8 octet, i, fat, a de 20 de octet, i ct are TCP.

252

INTRODUCERE N SISTEME DE OPERARE

Nivelul ret, ea
Nivelul ret, ea (Internet) se ocupa cu transmiterea pachetelor de la o sursa la o destinat, ie
indiferent n ce ret, ea se afla aceasta. Alegerea caii
pachetului prin ret, elele
precizata,
intermediare, comutarea lui dintr-o o ret, ea n alta s, i optimizarea traseelor alese sunt
responsabilitatea protocolului de ret, ea.

Nivelul acces la mediu


Nivelul acces la mediu se ocupa cu toate problemele legate de transmiterea efectiva a
a fizica,
incluznd s, i aspectele legate de tehnologii s, i de medii
unui pachet pe o legatur
de transmisie.

9.1.2

Implementarea part, iala a stivei TCP/IP

Dispozitivele de interconectare asigura transferul ct mai rapid al datelor n general pe


baza unor algoritmi de decizie. Un dispozitiv de interconectare poate n acelas, i timp
asigura conversia ntre doua tipuri de ret, ea (doua protocoale) diferite.

Criteriul principal de evaluare a eficient, ei unui dispozitiv de interconectare este numarul


n funct, ie de complexitatea deciziei de comutare
de pachete comutate pe secunda.

numarul
de pachete prelucrate scade. Pentru echipamentele de ret, ea ce folosesc un
redus de criterii pentru decizie, se renunt, a la implementarea nivelurilor superioare
numar
din stiva de protocoale TCP/IP.
O prima clasa de dispozitive de interconectare s, i bazeaza deciziile de comutare doar
pe informat, iile protocoalelor de nivel acces la mediu. n aceasta categorie intra switchurile, dar s, i AP-urile (access point).
A doua clasa de dispozitive va analiza att informat, iile de nivel acces la mediu, ct s, i pe
cele de nivel ret, ea, procesul de decizie fiind mai complex, dar s, i mai lent dect n primul
caz. Cel mai important dispozitiv de interconectare de nivel ret, ea este ruterul.
Dispozitivele de interconectare pot implementa doar o parte a stivei de protocoale. Spre
exemplu un ruter nu trebuie sa nteleaga cont, inutul unui pachet de date pentru a putea
Astfel, ruterul are nevoie doar de informat, iile de
lua decizia de trimitere pe calea optima.
nivel acces la mediu s, i nivel ret, ea s, i va implementa doar primele doua niveluri ale stivei
TCP/IP.

Figura 9.2: Comunicat, ia ntre doua stat, ii aflate n ret, ele diferite
prezetata n figura 9.2, n care un client de web aflat
Considernd o topologie simpla,
pe stat, ia B acceseaza un server aflat pe stat, ia A. Cele doua stat, ii se afla n ret, ele locale
diferite conectate printr-un ruter. Ret, eua din stnga este o ret, ea Ethernet, n vreme ce
n ret, eua din dreapta AP-ul (acces point) este conectat prin Ethernet cu ruterul R s, i ofera
conectivitate fara fir pentru stat, ia B.

CAPITOLUL 9. SERVICII DE RET, EA

253

Modelul de comunicat, ie poate fi descris generic folosind stiva de protocoale TCP/IP


precum n figura 9.3.

Figura 9.3: Descrierea generica a comunicat, iei


Pentru topologia considerata n figura 9.2, la nivelul aplicat, ie se foloses, te serviciul de
web bazat pe protocolul HTTP. La nivelul transport s, i nivelul ret, ea se foloses, te TCP,
respectiv IP. Spre deosebire de nivelul aplicat, ie, unde putem avea o larga diversitate de
protocoale folosite, la nivelurile transport s, i ret, ea peste 95% din trafic-ul n Internet este
trafic TCP/IP.
Pentru nivelul acces la mediu n ret, elele locale exista doua tehnologii dominante:
Ethernet (IEEE 802.3) s, i WLAN (Wireless LAN, IEEE 802.11). Conectivitatea ntre cele
doua standarde poate fi realizata fie de ruter (cu o interfat, a 802.11 s, i una Ethernet), fie
de un AP (acces point).
Un AP nu are nevoie sa interpreteze informat, ia aflata la nivelul ret, ea pentru a realiza
a fir.
comutarea ntre ret, eaua Ethernet s, i ret, eaua far
Cele doua dispozitive de interconectare (ruterul s, i AP-ul) au fost figurate ca avnd cte
o stiva part, iala de protocoale pe fiecare dintre interfet, ele de ret, ea. Stiva interfet, ei de
intrare va fi folosita pentru a lua decizia de comutare a pachetului (alegerea interfet, ei de
ies, ire), un echipament de interconectare putnd avea mai mult de doua interfet, e. Dupa
determinarea interfet, ei de ies, ire se va folosi stiva acesteia (parametrii specifici acestei
interfet, e) pentru eventuala reformatare a pachetului.
Pentru exemplul considerat, fluxul de date ntre stat, ia A s, i stat, ia B, va solicita funct, ii din
mai multe protocoale, acestea fiind prezentate n figura 9.4.

Figura 9.4: Descrierea comunicat, iei ntre doua stat, ii aflate n ret, ele diferite

254

9.1.3

INTRODUCERE N SISTEME DE OPERARE

Modelul client-server

Pentru implementarea accesului la serviciile de ret, ea, arhitectura folosita este bazata
pe modelul client-server. Acesta se bazeaza pe definirea a doua componente: cea de
server s, i cea de client.
Un server este un program (sau prin extindere o stat, ie) ce permite primirea de cereri
, i din ret, ea, oferind acestora un serviciu.
de la alte entitat
Un client este un program ce ofera mecanismul de interogare a unui server s, i

eventual de formatare a raspunsului


primit de la acesta.
Un exemplu de model client server este serviciul de web. Acest serviciu presupune
rularea unui server HTTP (ex: Apache, Microsoft IIS etc). Aplicat, ia client poate fi orice
navigator (broswer ).
Chiar pentru exemplul serviciului de web se poate observa ca aplicat, ia client integreaza
n realitate mai multe aplicat, ii client: pentru HTTP, dar s, i pentru FTP, TFTP.
Modelul client-server ofera centralizarea serviciilor s, i a fost n primul rnd promovat ca

o metoda de reducere a costurilor totale a unui ret, ele. Ca urmare a scaderii


costului
serviciilor a devenit monitorizarea
resurselor hardware, principala motivat, ie a centralizarii
s, i securizarea ret, elei.

Figura 9.5: Modelul client-server s, i modelul peer-to-peer


Not, iunea de server s-a extins s, i pentru sistemele de calcul, specificat, iile hardware ale
unui server depinznd de serviciul pe care l ndeplines, te. Spre exemplu, un server
de stocare va avea un procesor relativ modest, dar un spat, iu impresionant de stocare,
precum s, i mecanisme de redundant, a a discurilor.
Modelul punct-la-punct (peer to peer ) este de fapt un model client-server ascuns, as, a
cum se poate vedea s, i din figura 9.5. Fiecare entitate ce participa la comunicat, ie poate
juca att rol de client ct s, i rol de server.
Spre deosebire de modelul client-server, modelul punct-la-punct este un model
descentralizat.
Multe din programele de partajare de fis, iere utilizeaza acest model pentru a nu folosi un
server care sa intermedieze comunicat, ia. Un model client-server de partajare a fis, ierelor

CAPITOLUL 9. SERVICII DE RET, EA

255

ntre client, i presupune ca orice pachet schimbat ntre cei doi client, i sa treaca prin server,
ct s, i o ncarcare

ceea ce aduce att o latent, a,


a ret, elei s, i a serverului.
serviciilor este faptul ca serverul va fi un punct
Principalul dezavantaj al centralizarii
serviciul este ntrerupt.
critic n ret, ea: n momentul n care serverul nu funct, ioneaza,
ntr-o ret, ea punct-la-punct acest dezavantaj este evitat.

9.1.4

Porturi

n scopul reducerii costurilor unei ret, ele, mai multe servicii pot fi oferite de aceeas, i
Spre exemplu, pentru o ret, ea locala,
serverele de DHCP, s, i DNS pot fi integrate
mas, ina.
pe o singura stat, ie, deoarece resursele solicitate de fiecare serviciu sunt relativ reduse.
Cum va putea totus, i un astfel de server sa diferent, ieze ntre cererile de rezolvare de
nume (cereri DNS) s, i cele de alocare de adrese IP (cereri DHCP)?
Ambele protocoale folosesc la nivelul transport UDP, deci nu vom putea lua decizia pe
baza tipul protocolului de nivel transport.
Att UDP, ct s, i TCP folosesc un mecanism de identificare a serviciilor (a protocolului de
nivel aplicat, ie) denumit port.
reprezentat pe 16 bit, i, ce identifica la nivelul transport (n
Portul este un numar

informat, ia adaugat
a de protocoalele TCP sau UDP) un serviciu specific.
Mecanismul de porturi permite att oferirea simultana a mai multor servicii, ct s, i

diferent, ierea ntre cereri de raspuns


venite din conexiuni diferite, adica folosirea mai
multor servicii simultan. Astfel, n antetul de nivel transport vom preciza att un port
pe care este as, teptat
destinat, ie, ce identifica serviciul apelat, ct s, i un port sursa,

raspunsul.
O conexiune va fi descrisa prin precizarea parametrilor de nivel ret, ea s, i de
port destinat, ie s, i port sursa.

nivel transport: adresa IP destinat, ie, adresa IP sursa,

Daca de pe aceeas, i stat, ie sunt lansate doua sesiuni de SSH catre


acelas, i server, se
creeaza doua conexiuni diferite avnd aceleas, i adrese IP (sursa s, i destinat, ie), acelas, i
port destinat, ie, dar portul sursa diferit.
Porturile sunt numere reprezentate pe 16 bit, i, valorile definite pentru porturi fiind
cuprinse n intervalul [1, 65535]. Porturile pna la 1023 sunt rezervate pentru cele mai
importante protocoale ale Internet-ului, fiind denumite porturi rezervate (known ports).
Porturile rezervate sunt asociate unui protocol pe care serverul l foloses, te n oferirea
unui serviciu.
Rezumnd: fiecare serviciu de ret, ea este oferit folosind un protocol de nivel aplicat, ie,
asociat un port, n unele cazuri doua sau mai multe.
fiecare protocol are la rndul sau
n tabelul 9.1 sunt prezentate cteva dintre protocoalele importante s, i porturile folosite.
Putem observa spre exemplu ca serviciul de FTP are rezervate doua porturi: 21 (pentru
stabilirea conexiunii) s, i 20 (pentru transferul efectiv de fis, iere).
lista porturilor
Pentru a determina serviciile oferite pe stat, ia locala va trebui sa afis, am
deschise (aflate n stare LISTEN). Pentru aceasta putem folosi utilitarul netsat (vezi
sect, iunea 10.3.1):

256

INTRODUCERE N SISTEME DE OPERARE

Tabelul 9.1: Asocieri port-serviciu pentru cteva servicii raspndite


Port
Serviciu
20
80
21
110
22
143
23
161
25
443
53
993

1
2
3
4
5
6
7
8
9

FTP (data)
HTTP
FTP (conexiune)
POP3
SSH
IMAP
telnet
SNMP
SMTP
HTTPS
DNS
IMAPS

root@kiwi~# netstat --tcp --listening


Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address
tcp
0
0 *:sunrpc
tcp
0
0 *:www
tcp
0
0 *:webcache
tcp
0
0 *:auth
tcp
0
0 *:ftp
tcp
0
0 *:smtp

Foreign Address
*:*
*:*
*:*
*:*
*:*
*:*

State
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN

Din rezultatul comenzii de mai sus se poate deduce ca portul ftp (adica portul 21) este
deschis. Altfel spus, exista o aplicat, ie ce foloses, te acest port pentru a accepta conexiuni.
n general, serviciile sunt rulate pe porturile rezervate, dar prin configurarea serviciilor
putem schimba portul pe care se vor accepta conexiunile. Pentru a obt, ine mai multe
informat, ii despre aplicat, ia ce ruleaza pe portul 21 putem folosi clientul de telnet ce va
deschide o conexiune pe acest port:
1
2
3
4
5

razvan@kiwi:~$ telnet kiwi.cs.pub.ro 21


Trying 141.85.99.5...
Connected to kiwi.cs.pub.ro.
Escape character is ^].
220 Welcome to Kiwi FTP service. vsFTPd 2.0.3 is in service

serverul de SSH sa primeasca cereri pe


Daca oprim serviciul de FTP s, i reconfiguram
portul 21, rezultatul comenzii telnet va fi:
1
2
3
4
5

razvan@kiwi:~$ telnet kiwi.cs.pub.ro 21


Trying 141.85.99.5...
Connected to kiwi.cs.pub.ro.
Escape character is ^].
SSH-2.0-OpenSSH_3.8.1p1 Debian-8.sarge.4

Din motive de securitate serverele pot fi configurate sa nu afis, eze informat, ii referitoare
la versiunea serviciului, sau sa afis, eze informat, ii false.
n cazul n care se ncearca init, ierea unei sesiuni de telnet pe un port ce nu este deschis

va fi ntors mesajul de conexiune refuzata:

CAPITOLUL 9. SERVICII DE RET, EA


1
2
3

257

razvan@kiwi:~$ telnet kiwi.cs.pub.ro 29


Trying 141.85.99.5...
telnet: Unable to connect to remote host: Connection refused

9.2

Execut, ia comenzilor la distant, a

Serviciul de execut, ie al comenzilor la distant, a (remote connection) este oferit de mai


multe protocoale, cele mai importante fiind: telnet, rlogin, RSH, SSH.
Protocoalele telnet, rlogin s, i RSH se bazeaza pe realizarea unei conexiuni necriptate (n

text clar). Spre deosebire de acestea, protocolul SSH stabiles, te o conexiune criptata,
ct s, i pentru transferul de
conexiune folosita att pentru lansarea comenzilor la distant, a,
fis, iere.

9.2.1

Telnet

granit, a dintre serviciu de ret, ea s, i protocol de nivel aplicat, ie este, deseori,


n practica,
una greu de evident, iat. Astfel, putem spune ca serviciul de execut, ie al comenzilor la
distant, a este oferit de protocolul telnet, dar la fel de corect se poate vorbi de serviciul
telnet. Prin serviciul telnet se nt, elege posibilitatea execut, iei comenzilor la distant, a peste

o conexiune nesigura (necriptata).


Pe lnga denumirea unui protocol de nivel aplicat, ie, s, i a unui serviciu de ret, ea, telnet
este s, i denumirea aplicat, iei ce implementeaza protocolul (a procesului care din punctul
de vedere al sistemului de operare ofera serviciul de ret, ea).
Aplicat, ia telnet este o aplicat, ie client-server: procesul server se numes, te
telenetd, iar clientul se numes, te telnet. Serverul de telnet este responsabil cu
acceptarea sesiunilor init, iate de client, i. O sesiune de telnet pune la dispozit, ia aplicat, iei
client (dupa autentificare) un interpretor de comenzi ce ruleaza pe server. n mod
unui
implicit, nu exista diferent, e ntre resursele disponibile unui utilizator n urma rularii

interpretor de comenzi local, s, i resursele accesibile printr-o sesiune de telnet de catre


acelas, i utilizator.
1
2
3
4
5
6
7
8
9

rookie@apple~$ telnet 141.85.99.5


Trying 141.85.99.5...
Connected to 141.85.99.5.
Escape character is ^].
Fedora release 7 (Moonshine)
Kernel 2.6.21-1.3194.fc7 on an i686
login: manager
Password:
manager@kiwi~$

n exemplul de mai sus utilizatorul rookie init, iaza o sesiune telnet catre
serverul cu
adresa 141.85.99.5. Dupa afis, area mesajelor de ntmpinare (denumite MotD
Message of the Day ) este afis, at prompt-ul de login. Este folosit numele de utilizator

manager s, i parola asociata acestui cont. Dupa autentificare va aparea


prompt-ul
interpretorului de comenzi.

258

INTRODUCERE N SISTEME DE OPERARE

Protocolul telnet a fost standardizat pentru a permite clientului de telnet init, ierea de

conexiuni la distant, a s, i catre


alte servere. Majoritatea implementarilor
serverelor permit
init, ierea unei conexiuni prin clientul de telnet (cu unele except, ii notabile, precum client, ii

RDS, carora
le este blocat portul 25 al serviciului SMTP).
Pentru a init, ia o conexiune pe serverul de HTTP ce ruleaza pe stat, ia cu adresa IP
141.85.99.5 trebuie rulata aplicat, ia client telnet cu precizarea destinat, iei s, i a portului
pe care ruleaza serviciu (implicit 80). Dupa stabilirea sesiunii se pot executa inclusiv
comenzi ce respecta sintaxa protocolului HTTP, spre exemplu pentru a obt, ine o pagina

se foloses, te comanda HTTP GET, urmata de pagina ce se dores, te afis, ata.


1
2
3
4
5

razvan@kiwi:~$ telnet 141.85.99.5 80


Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is ^].
GET /~razvan/test.html HTTP/1.0

6
7
8
9
10
11
12
13
14
15

HTTP/1.1 200 OK
Date: Fri, 03 Nov 2008 19:57:10 GMT
Server: Apache/1.3.33 (Debian GNU/Linux) PHP/4.3.10-16
Last-Modified: Fri, 03 Nov 2008 19:56:40 GMT
ETag: "253095-44-454b9ef8"
Accept-Ranges: bytes
Content-Length: 68
Connection: close
Content-Type: text/html; charset=iso-8859-1

16
17
18

<br />Pagina de test pentru cursul USO - Servicii de Retea <br />
Connection closed by foreign host.

Este important de ret, inut ca pentru terminarea unei sesiuni de telnet se poate folosi
combinat, ia CRTL+].

9.2.2

SSH

SSH (Secure Shell) este un protocol de nivel aplicat, ie, folosit n ret, ele de calculatoare
pentru asigurarea unui canal securizat de transmitere a informat, iei.
Protocolul funct, ioneaza dupa modelul client-server. Pentru a init, ia o conexiune, clientul

dupa autentificarea
de SSH trimite o cerere catre
serverul de SSH, iar acesta din urma,
clientului, permite transferul de date.
Cea mai ntalnita implementare a protocolului SSH 2.0 este varianta open-source numita
OpenSSH.
dar poate fi
Protocolul este adesea folosit pentru executarea comenzilor la distant, a,
deasemenea utilizat s, i pentru transfer securizat de fis, iere sau tunelarea altor protocoale
mai nesigure (FTP). Exista multe alte protocoale de nivel aplicat, ie, mai vechi, cu care
se pot obt, ine aceleas, i efecte precum cu SSH: FTP, rlogin, rsh, telnet. Toate aceste

protocoale au nsa n comun aceeas, i slabiciune:


folosesc metode de autentificare slabe,
ce presupun trimiterea parolelor pe ret, ea n format text clar (clear text). Formatul text clar

reprezinta un risc maxim de securitate, capturarea parolelor facndu-se


relativ simplu de
o persoana cu intent, ii malit, ioase.

CAPITOLUL 9. SERVICII DE RET, EA

259

, ii, SSH foloses, te algoritmul RSA de generare de chei publice


Pentru asigurarea securitat

s, i private. Dupa cum denota s, i numele celor doua chei, cheia privata trebuie pastrat
a
iar cea publica poate fi cunoscuta de oricine. Exista o strnsa
ntotdeauna secreta,
relat, ie matematica ntre cele doua chei, care face imposibila derivarea cheii private din
dar care permite decriptarea unui mesaj criptat cu una dintre chei, folosind
cea publica,

cealalta cheie. Daca se dores, te trimiterea unui mesaj privat catre


destinatarul X, tot

ce trebuie facut
este criptarea mesajului cu cheia publica a destinatarului (fiind publica,
toata lumea are acces la aceasta cheie). Odata criptat, acest mesaj poate fi decriptat
el este singurul care det, ine cheia privata corespunzatoare

doar de destinatarul X, caci

cheii publice cu care s-a facut


criptarea.

la distant, a
Utilizarea SSH pentru efectuarea conectarii
Comanda de conectare la un server SSH are doi parametri important, i: numele
utilizatorului s, i adresa (numele) serverului destinat, ie. Serverul de SSH la care se va
face conectarea (securessh.pub.ro n exemplul de mai jos), este un nume public
pe care serviciul de DNS l va traduce ntr-o adresa IP. Daca se dores, te conectarea la
DNS, se poate introduce direct IP-ul
un server dar nu se cunoas, te numele sau
serverului. Cnd un client init, iaza o conexiune ssh pe un server, trebuie sa se
conecteze folosind un utilizator existent pe acel server pentru a putea avea acces la

interpretorul de comenzi. Parametrul bogdand specifica utilizatorul n contul caruia


se
va intra dupa stabilirea conexiunii.
1
2
3
4

razvan@kiwi:~$ ssh bogdand@securessh.pub.ro


Password:
Last login: Wed Sep 19 14:37:29 2007 from 86.121.138.243
Welcome to the dark side.. weve got cookies!

5
6

bogdand@securessh:~$

n rezultatul comenzii de mai sus se poate observa faptul ca s-au mai facut
conexiuni
anterioare pe acel server de SSH, fiind oferita att ora s, i data ultimei conexiuni, ct s, i
adresa IP de la care s-a realizat conexiunea.

Cnd un client de ssh init, iaza pentru prima data o conexiune catre
un server nou,

acesta din urma va trebui sa se autentifice catre


client. Fiecare server de SSH are un
identificator unic (host key ) cu care se autentifica n comunicat, ia cu client, ii. Acest
identificator este implementat prin chei publice s, i chei private. La primirea unei
facnd

conexiuni de la un client, serverul ofera cheia sa publica,


astfel posibila
autentificarea. La acceptarea cheii publice de la server, clientul adauga aceasta cheie

n fis, ierul known_hosts. Astfel, urmatoarea


conexiune pe care acest client o va face

catre server nu va mai necesita transferul cheii publice, aceasta existnd deja stocata
pe client.
1
2
3
4
5
6

razvan@kiwi:~$ ssh bogdand@82.77.5.245


The authenticity of host 82.77.5.245 (82.77.5.245) cant be established
.
RSA key fingerprint is 11:94:89:c3:e5:fe:c3:6c:2e:ab:f6:e2:bd:6d:bb:e7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 82.77.5.245 (RSA) to the list of known hosts
.
Password:

260
7

INTRODUCERE N SISTEME DE OPERARE

Have a lot of fun...

8
9

bogdand@server:~$

Un utilitar pentru sistemele Windows ce permite conectarea n linie de comanda la un


server de SSH este aplicat, ia PuTTY. PuTTY este disponibil gratuit s, i este un client pentru
protocolul SSH, telnet, rlogin, dar poate fi folosit s, i n comunicat, iile TCP raw. O privire de
a online1 .
ansamblu asupra opt, iunilor oferite de client, ii important, i de SSH poate fi gasit

Utilizarea SSH pentru rularea de comenzi la distant, a


Sintaxa completa a utilitarul ssh permite precizarea unei liste de parametri, a
utilizatorului s, i a adresei destinat, ie, precum s, i a unei comenzi ce va fi rulata dupa
stabilirea sesiunii SSH. Daca nu este precizata o comanda se va rula un interpretor de
comenzi (cel mai adesea /bin/bash).
n exemplul de mai jos sunt rulate local doua comenzi separate prin ;. Apoi se ruleaza
aceleas, i comenzi (de data aceasta protejate ntre ghilimele), rezultatul afis, at fiind cel
lor pe stat, ia destinat, ie, dupa autentificarea cu utilizatorul bogdand. Se
al executarii
a a interoga utilizatorul, aceasta
observa din exemplu ca autentificarea se realizeaza far
pe baza de chei (vezi sect, iunea 10.5.2):
fiind rezultatul unei autentificari
1
2
3

rrazvan@apple:~$ hostname; pwd


apple
/home/rrazvan

4
5
6
7

rrazvan@apple:~$ ssh bogdand@141.85.99.5 "hostname;


kiwi
/home/users/bogdand

pwd"

8
9

rrazvan@apple:~$

Copierea fis, ierelor la distant, a


Efectuarea transferului de date se poate face prin utilitarul scp, ce face parte din
pachetul ssh. Ideea din spatele scp este de a folosi canalul securizat oferit de ssh
pentru a face transfer de date n format text sau binar ntre client s, i server. Sintaxa scp
atoare

este aseman
comenzii tradit, ionale cp:
1

scp sursa destinatie

Daca se dores, te transferul mai multor fis, iere sau directoare, destinat, ia trebuie sa fie un
director existent. Pentru a efectua o copiere de fis, ier de pe client, n directorul
/home/bogdand/work/ de pe serverul cu adresa IP 82.77.5.245, comanda este:
1
2
3

razvan@kiwi:~$ scp CiscoTFTP.exe bogdand@82.77.5.245:~/work


Password:
CiscoTFTP.exe
100% 1296KB 129.6KB/s

4
5

razvan@kiwi:~$
1

http://en.wikipedia.org/wiki/Comparison_of_SSH_clients

00:10

CAPITOLUL 9. SERVICII DE RET, EA

261

Pentru platforma Windows o aplicat, ie open source ce poate fi folosita pentru partajarea
de fis, iere peste o conexiune SSH este WinSCP. Aceasta ofera o interfat, a grafica pentru
transferul de fis, iere prin SCP, SFTP sau FTP.

Serverul de SSH
trebuie instalat serverul de
Pentru a putea permite conexiuni SSH spre stat, ia locala,
OpenSSH (pentru Ubuntu pachetul se numes, te openssh-server). Fis, ierul de
configurare pentru serverul de SSH se afla n /etc/ssh/sshd_config, s, i cont, ine
directive standard precum: portul pe care se accepta conexiuni SSH sau opt, iunea de a
putea rula aplicat, ii X peste conexiunea criptata de SSH.
1
2
3
4
5

razvan@kiwi:/etc/ssh$ cat sshd_config


[...]
Port 22
X11Forwarding yes
[...]

Autentificarea cu chei
SSH, se poate folosi autentificarea cu chei publice
Pentru o securitate sporita a utilizarii

s, i chei private. n cazul standard al folosirii SSH, fiecare stat, ie pastreaz


a o asociere
bazata
ntre utilizator s, i parola n mod automat. Daca se dores, te nsa utilizarea criptarii
pe chei, devine obligat, ia utilizatorului de a crea aceasta asociere manual. Pentru a
genera o pereche de chei se poate folosi utilitarul ssh-keygen instalat odata cu
pachetul OpenSSH.
1
2
3
4
5
6
7
8
9

razvan@kiwi:~$ ssh-keygen -t rsa


Generating public/private rsa key pair.
Enter file in which to save the key (/home/waters/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/waters/.ssh/id_rsa.
Your public key has been saved in /home/waters/.ssh/id_rsa.pub.
The key fingerprint is:
c1:45:40:92:b6:f6:e5:0b:72:23:73:ff:88:58:27:d0 waters@waters-laptop

10
11

razvan@kiwi:~$

Odata generate, cele doua chei sunt stocate n mod implicit n doua fis, iere: id_rsa
s, i id_rsa.pub (cheia publica).

(cheia privata)
Cheia publica trebuie sa ajunga pe

stat, ia unde se afla serverul de SSH, iar cheia privata va ramne


local pe stat, ia unde au
fost generate cheile.
cheilor, utilizatorului i se va cere un s, ir de caractere (passphrase)
n momentul crearii
care este asociat cu perechea de chei, s, i care va fi cerut ulterior, n locul parolei. Acest

s, ir poate fi vid, caz n care nu se va mai cere intervent, ia utilizatorului n cazul utilizarii
cheilor pentru autentificare. Folosirea unui passphrase vid devine deosebit de utila
pentru automatizarea unor act, iuni (prin scripturi).
Pentru a copia cheia publica pe stat, ia aflata la distant, a se poate folosi un utilitar dedicat,
ssh-copy-id, specificnd ca parametru adresa serverului SSH.

262

INTRODUCERE N SISTEME DE OPERARE

razvan@kiwi:~$ ssh-copy-id bogdand@82.77.5.245

La urmatoarea
ncercare de conectare prin SSH, singura diferent, a va fi cerea
passphrase-ul (daca a fost introdus la generarea cheilor) n locul unei parole de cont,
din punct de vedere al securitat
, ii, utilizarea serviciului va fi mai sigura.

nsa,

9.2.3

Utilitarul wget

wget este un utilitar gratuit (din suita GNU Project), creat pentru a facilita o descarcare
simpla s, i eficienta a resurselor de pe Web. Aceste resurse pot fi obt, inute cu wget prin
doua dintre cele mai folosite protocoale din Internet: HTTP s, i FTP. Numele utilitarului

este obt, inut de fapt printr-o alaturare


semantica a World Wide Web (W) s, i a metodei
HTTP GET.

Principalul avantaj al wget este faptul ca executa o descarcare


neinteractiva a

fis, ierelor. ntr-o aplicat, ie din mediul grafic (Firefox, Filezilla), o descarcarea
uzuala
necesita prezent, a pe sistem a utilizatorului. Cu alte cuvinte, acesta trebuie sa fie logat

pentru a se putea efectua operat, ia de descarcare,


sau pentru a avea posibilitatea de a

reactiva o descarcarea
ntrerupta de catre
server.
n contrast, folosind wget, utilizatorul poate sa se autentifice pe sistem, sa porneasca

descarcarea,
s, i sa se deautentifice, wget continund sa ruleze pna la terminarea

utilitarul
sarcinilor nencheiate. Mai mult, daca conexiunea catre
server este ntrerupta,

va stoca fis, ierele descarcate


pna n acel moment pe hard-disc, va salva parametrii

sesiunii s, i adresa serverului s, i va putea continua sarcina de descarcare


n momentul n

care legatura
cu serverul se reface s, i resursa este din nou accesibila.

Prezentnd un astfel de avantaj evident fat, a de client, ii de descarcare


din mediul grafic,
wget a fost rapid adoptat de marea majoritate a utilizatorilor care aveau o conexiune
nceata la Internet s, i care nu puteau petrece autentificat, i pe sistem timpul necesar unei
ari
interactive. Pe masur
a ce Web-ul a evoluat wget adaugat

, i.
descarc
noi funct, ionalitat

Un avantaj notabil al utilitarului wget este capabilitatea de descarcare


s, i de pastrare
pe

client a structurii de directoare de pe server, fiind de asemenea posibila descarcarea

unui site cu indicarea nivelului de adncime pna la care sa fie descarcat


a structura de
directoare.

a fost extins pna la posibilitatea


Acest tip de descarcare,
numit descarcare
recursiva,

de a descarca
pe client site-uri ntregi cu toate paginile s, i legaturile
dintre acestea.

Considernd situat, ia unei ret, ele locale, descarcarea


unui site pe mas, ina server din
ret, ea (proces numit s, i oglindirea site-ului), ar face implicit posibila accesarea acelui site

n mod offline de catre


tot, i client, ii din ret, eaua locala.

Modul de apelare al utilitarului n linia de comanda

Pentru a descarca
un fis, ier prin HTTP se poate folosi comanda:
1

razvan@kiwi:~$ wget -c http://ccnp.catc.ro/resources/CiscoTFTP.exe \&

2
3

--15:57:06--

http://ccnp.catc.ro/resources/CiscoTFTP.exe

CAPITOLUL 9. SERVICII DE RET, EA

263

=> CiscoTFTP.exe

4
5
6
7
8
9

Resolving ccnp.catc.ro... 141.85.37.2


Connecting to ccnp.catc.ro|141.85.37.2|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1,327,497 (1.3M) [application/x-msdos-program]

10
11

100%[====================================>] 1,327,497

2.66M/s

12
13

15:57:07 (2.66 MB/s) - CiscoTFTP.exe saved [1327497/1327497]

arii
n cazul ntreruperii conexiunii cu serverul,
Opt, iunea -c asigura continuarea descarc
iar simbolul & specifica rularea utilitarului n background.

Descarcarea
unui site pe discul local pentru a face posibila accesarea sa offline este

exemplificata prin comanda urmatoare:


1

razvan@kiwi:~$ wget --convert-links -r http://www.gnu.org/ -o gnulog

2
3
4

razvan@kiwi:~$ ls
gnulog www.fsf.org

www.gnu.org

Parametrul --convert-links transforma legaturile


(linkurile) din site pentru ca site-ul
sa poata fi vizionat offline.

Descarcarea
tuturor legaturilor
de pe siteul www.yahoo.com cu o adncime de 1 se
face prin:
1

razvan@kiwi:~$ wget -r -l1 www.yahoo.com

9.3

Email Pos, ta electronica

Pos, ta electronica (electronic mail), abreviat e-mail sau email, este o metoda
de compunere, transmitere s, i recept, ie a mesajelor peste sisteme de comunicat, ie

electronica.
Ideea de mesagerie electronica dateaza din anul 1971, cnd Ray Tomlinson dezvolta
prima aplicat, ie de email pentru ARPANET. Aceasta era formata din doua programe:
SNDMSG, utilizat pentru a transmite mesaje, respectiv READMAIL, folosit pentru citirea

mesajelor. n anul 1972, comenzile MAIL s, i MLFL au fost adaugate


programului FTP.
Aceasta a fost modalitatea de transmitere a mesajelor n ret, eaua ARPANET pna la
nceputul anilor 80, cnd a fost dezvoltat protocolul SMTP. n scurt timp, serviciul de
email a crescut popularitatea ARPANET-ului s, i a devenit aplicat, ia principala a acestuia.
Serviciul de email a oferit la nceput doar transferul de mesaje text ntre utilizatori aflat, i
n ret, ele diferite. Ulterior serviciul a fost extins s, i la transmiterea de fis, iere binare.
Standardul de codificare a informat, iei binare ntr-un mesaj e-mail se numes, te MIME
(Multipurpose Internet Mail Extensions).

264

9.3.1

INTRODUCERE N SISTEME DE OPERARE

Arhitectura s, i funct, ionare

Pentru livrarea mesajelor se foloses, te un mecanism de adresare ce apeleaza att


ierarhia de nume din Internet (serviciul de DNS) pentru a preciza serverul, ct s, i
informat, ii relevante local, precum numele utilizatorului.
O adresa de email cont, ine doua tipuri de informat, ii separate prin simbolul @ (citit la sau
at sau a-round):

numele utilizatorului care dores, te transmiterea sau recept, ia mesajului;


numele (DNS) al server-ului care transmite/recept, ioneaza mesajul.
Pe baza adresei de email destinat, ie serviciul de pos, ta electronica livreaza mesajele de

, a pos, tala asociata cu adresa


la client, ii de email, folosind servere de email, catre
casut
de email destinat, ie.
, a pos, tala este o intrare n sistemul local de fis, iere utilizata pentru stocarea
Casut

mesajelor de pos, ta electronica corespunzatoare


unui utilizator.
Componenta esent, iala a serviciului de pos, ta electronica o reprezinta protocolul SMTP
(Simple Mail Transfer Protocol). Acest protocol ofera mecanisme pentru preluarea
mesajelor de la client, i de email s, i livrarea lor pe serverele de email destinat, ie (ca atare
pentru trimiterea mesajelor).

Odata cu dezvoltarea sistemelor de operare pentru calculatoarele personale, a aparut


s, i
noilor mesaje din casut
, a pos, tala pe stat, ia utilizatorului. Acest lucru este
nevoia preluarii
, ei
realizat printr-un nou serviciu ce asigura ridicarea email-ului s, i sincronizarea casut
pos, tale de pe server cu cea de pe stat, ia de lucru.
Pentru ridicarea mesajelor de pe serverul de email cele mai folosite protocoale sunt
IMAP (Internet Message Access Protocol) s, i POP3 (Post Office Protocol version 3).
Pentru oferirea acestui serviciu va trebui pornit un daemon de IMAP sau POP3, n plus
fat, a de serverul de SMTP.
Marea majoritate a client, ilor de email integreaza pe lnga componenta de client SMTP
(folosita pentru transmiterea mesajelor) s, i componente de client IMAP s, i POP3 pentru
, ei pos, tale de pe serverul de email.
interogarea casut
, ilor de
O deosebire importanta a IMAP fat, a de POP3 o reprezinta extinderea posibilitat
, a pos, tala oferite de protocolul IMAP. Folosind IMAP
prelucrare a mesajelor din casut

mesajele nu sunt descarcate


de pe server dect la vizualizarea lor, existnd totodata s, i
arii
doar a unei part
, i din mesaj.
opt, iunea descarc

, a
Spre deosebire de POP3, unde toate mesajele se gasesc
pe server ntr-o singura casut
pos, tala (inbox), iar directoarele nu se pot crea dect n aplicat, ia client, protocolul IMAP
permite crearea de directoaret pe server direc. Utiliznd comenzi IMAP, aplicat, ia client
a sa fie nevoie
poate folosi filtre pentru mutarea mesajelor dintr-un director n altul, far

macar
ca mailbox-urile sa fie situate pe acelas, i server.
Rezumnd, arhitectura serviciului de email include doua componente principale: un
serviciu pentru primirea s, i trimiterea mesajelor s, i un serviciu pentru ridicarea mesajelor
de pe serverul de email.

CAPITOLUL 9. SERVICII DE RET, EA

265

Trimiterea unui mesaj

Pentru a exemplifica modul n care componentele prezente mai sus interact, ioneaza,

vom considera urmatoarea


situat, ie: Dan are adresa de mail dan@a.org s, i dores, te sa-i
transmita un mesaj lui Bogdan care are adresa de mail bogdan@b.org.
, a pos, tala asociata contului bogdan@b.org, pas, ii sunt
Pentru livrarea unui mesaj n casut
prezentat, i n figura 9.6.

Figura 9.6: Livrarea unui mesaj


Dan va deschide un client de email n care va edita mesajul. Cnd Dan va da comanda

de trimitere a mesajului, clientul de email va init, ia o conexiune SMTP catre


serverul
de mail local. Pentru stabilirea conexiunii, serverul va cere autentificarea utilizatorului
Dan. n general, clientul de mail va salva numele de utilizator s, i parola s, i va realiza
autentificarea conexiunii SMTP n mod transparent pentru utilizator. Dupa autentificare,

clientul de email va formata mesajul conform protocolului SMTP s, i l va trimite catre


server.

Serverul de mail local va analiza apoi adresa de email destinat, ie, pe baza careia
va
determina domeniul de nume n care trebuie livrat mesajul (n cazul exemplului: b.org).
Va init, ia o cere de rezolvare de nume (cerere DNS) pentru a determina adresa serverului
responsabil cu preluarea mailului pentru domeniul b.org (acest server se numes, te mail
exchanger ). Dupa determinarea serverului de mail pentru b.org, serverul local va trimite
mesajul folosind protocolul SMTP.
, a pos, tala a utilizatorului bogdan. La nivelul
Serverul b.org va stoca mesajul n casut
acestui pas se poate interpune o aplicat, ie de distribut, ie a mesajelor denumita generic
LDA (Local Delivery Agent). O astfel de aplicat, ie poate realiza filtrarea mesajelor,
livrarea anumitor mesaje n alte directoare, oprirea spamurilor etc. n Linux cea mai
folosita aplicat, ie de distribut, ie a mesajelor este oferita de pachetul procmail.

Ridicarea mesajelor
, a pos, tala vor fi urmat, i pas, ii din figura 9.7:
Pentru a ridica mesajul din casut

Figura 9.7: Ridicarea mesajelor de pe server

266

INTRODUCERE N SISTEME DE OPERARE

Bogdan va deschide clientul de mail, iar acesta va init, ia o sesiune de IMAP catre
serverul

de mail. Dupa autentificare, serverul va deschide casut, a pos, tala a utilizatorului Bogdan.
, a pos, tala n sesiunile anterioare de IMAP au fost marcate,
Mesajele ridicate din casut
astfel serverul va selecta doar noile mesaje (ce nu sunt marcate) s, i le va transmite prin

sesiunea de IMAP catre


clientul de email. nainte de a ncheia sesiunea, clientul de email
, a pos, tala aflata pe
va informa serverul asupra listei mesajelor ce au fost s, terse din casut
, ei pos, tale
stat, ia utilizatorului, permit, nd astfel serverului sa sincronizeze cont, inutul casut
locale cu cea aflata pe stat, ie.
, a pos, tala poate fi consultata inclusiv offline,
Dupa ridicarea mesajelor de pe server, casut
folosind clientul de email.

Folosirea webmail pentru citirea s, i transmiterea mesajelor


O alta metoda disponibila utilizatorilor pentru citirea s, i trimiterea mesajelor este folosirea
unui server de web pentru interfat, a cu serverul de SMTP, serviciu rezultat fiind denumit
webmail.
, a pos, tala a
Folosind exemplul anterior, mesajul livrat prin SMTP a fost stocat n casut
utilizatorului Bogdan. Utilizatorul va lansa un client web (un broswer) s, i va init, ia o

conexiune HTTP catre


serverul de web ce ruleaza pe acelas, i sistem cu serverul de
SMTP, responsabil cu primirea mesajelor pentru domeniul b.org. Serverul de web va
, a pos, tala aflata pe server:
oferi o interfat, a ce permite operat, ii direct pe casut
s, tergerea/mutarea mesajelor, marcarea lor, crearea de directoare etc.

Figura 9.8: Citirea mesajelor folosind webmail

9.3.2

Client, i de email

As, a cum s-a prezentat mai sus, client, ii de email sunt utilitare care permit descarcarea
de mesaje de pe un server de email s, i stocarea lor local. n mod real, exista doua
situat, ii n care este necesara folosirea lor: atunci cnd contul de email nu poate fi
vizualizat printr-o interfat, a de tip web, sau atunci cnd conexiunea la Internet este slaba
s, i este de preferat salvarea corespondent, ei pe computerul personal
sau instabila,
pentru a fi us, or accesata s, i ulterior. Exista mai mult, i client, i de email, cei mai important, i
fiind Microsoft Outlook (varianta inclusa n distribut, ia de Windows se numes, te Outlook
Express) s, i Mozilla Thunderbird.
Un avantaj al client, ilor de email este stocarea centralizata a mesajelor primite pe conturi
ne vom concentra asupra Mozilla Thunderbird,
de email diferite. n cele ce urmeaza,

CAPITOLUL 9. SERVICII DE RET, EA

267

deoarece este gratuit s, i disponibil pentru toate sistemele majore de operare (Windows,
Linux, Mac OS).
Configurarea unui client de email presupune n primul rnd crearea unui cont pentru
fiecare adresa de email ce se dores, te administrata cu Thunderbird. Sunt folosite doua
protocoale diferite: SMTP pentru a trimite mesaje s, i POP3 pentru a primi mesaje.
Setarea unui cont presupune introducerea adresei de email, parolei asociate, adresa
serverului de SMTP s, i a serverului de POP3. Se poate opta pentru salvarea parolei
ntr-un fis, ier de configurare, sau pentru introducerea ei manuala de fiecare data cnd
se va stabili o conexiune la unul dintre serverele de mail. n cazul n care doar unul

dintre cele doua servere este setat corespunzator,


se vor putea doar descarca
(n cazul
POP3) sau trimite mesaje (respectiv SMTP).
Unul dintre avantajele Thunderbird este integrarea cu serviciul de email oferit de Google,

numit Gmail. Pentru setarea unui cont de Gmail, trebuie parcurs, i urmatorii
pas, i: se
activeaza pe site-ul Gmail opt, iunea de a folosi un server de POP3, apoi din Thunderbird
se creeaza un nou cont, se alege Gmail account s, i se introduce adresa de email. Restul

setarilor
se efectueaza automat.
se foloses, te butonul Get Mail, comanda ce
Pentru a trimite/primi corespondent, a,

un email care
sincronizeaza baza de date locala cu cea de pe server. n consecint, a,
este scris poate fi trimis instantaneu sau poate fi stocat local s, i trimis mai trziu, cnd
va exista conectivitate la Internet. Thunderbird se sincronizeaza n mod automat cu
serverul la intervale regulate de timp.
Thunderbird ofera o gama de servicii standard: memorarea adreselor de email, sortarea
data primirii, subiect, numele expeditorului, important, a (crescator

emailurilor dupa,
sau

descrescator).
Emailurile pot fi grupate pe threaduri (toate mesajele care fac parte din
aceeas, i discut, ie), facilitate deosebit de folositoare n cazul mesajelor primite de la o
lista de discut, ii. De asemenea pentru localizarea unui mesaj clientul ofera un motor de

adresa destinat, ie, subiectul


cautare
ce poate folosii criterii ce vor analiza: adresa sursa,

mesajului sau cont, inutul sau.


Pentru o mai buna organizare a corespondent, ei, se poate crea o structura de directoare
s, i gruparea mesajelor n mod logic, n opozit, ie cu stocarea tradit, ionala a tuturor
, a pos, tala (inbox). Aplicarea de filtre permite selectarea emailurilor
email-urilor n casut
nume expeditor, subiect, cont, inut) s, i
pe baza de criterii avansate (ce includ adresa,
efectuarea de act, iuni asupra lor (mutarea n diferite directoare, s, tergerea lor, marcarea
mare de mesaje zilnice.
lor), facilitate extrem de utila n cazul unui numar
O limitare n folosirea unui solut, ii mixte bazate pe Thunderbird s, i Gmail o reprezinta
mesajelor citite ntre cele doua aplicat, ii.
nesincronizarea marcarii

9.3.3

Securitatea serviciului de email

Cea mai ntlnita problema asociata cu pos, ta electronica o reprezinta primirea de spam

, it 90% din traficul SMTP n


(mesaje nesolicitate). Din pacate,
traficul de spam a depas
Internet.
Pentru a reduce traficul de spam n primul rnd trebui ca serverul de email (SMTP) sa nu
accepte sa trimita mesaje de la orice client SMTP din Internet. Majoritatea destinat, iilor

268

INTRODUCERE N SISTEME DE OPERARE

de mail vor verifica pentru fiecare mesaj daca nu a fost trimis folosind un server SMTP
de tip open mail relay (server ce accepta sa trimita mesaje pentru orice client), caz n
care vor considera respectivul mesaj drept spam.
Traficul de spam poate fi controlat s, i pe serverul destinat, ie nainte de a fi preluat de
a prin
aplicat, ia client. Reducerea traficului de spam pe serverul de SMTP poate fi facut
implementarea a trei tipuri de liste:

Liste albe mesajele trimise de un server cont, inut ntr-o astfel de lista sunt
considerate automat mesaje legitime

Liste gri mesajele primite de la servere necunoscute sunt, pentru o perioada


de timp, respinse. Daca serverul sursa ncerca retransmiterea mesajului s, i dupa
expirarea acestei perioade, mesajul va fi considerat legitim. Aceasta metoda se
bazeaza pe faptul ca serverele de spam nu vor ncerca retransmiterea mesajelor.

Liste negre mesajele primite de la un astfel de server sunt etichetate ca spam


O alta clasa de aplicat, ii de filtrare a traficului de spam sunt integrate n LDA (Local
Delivery Agent). Aceste aplicat, ii n general folosesc un set extins de criterii pentru a
calcula probabilitatea ca un mail sa fie spam.
Filtrarea traficului de spam poate fi realizata inclusiv de clientul de mail. Cu toate
acestea, chiar s, i n cazul folosirii simultane a tuturor metodelor de control al traficului
nedorit, mesajele de spam nu pot fi total eliminate.
O alta problema importanta a serviciului de email este absent, a unui mecanism de
autentificare a expeditorului. Exista extensii ale protocolului SMTP ce rezolva
Singura solut, ie
aceasta problema, dar care nu se bucura de o popularitate nsemnata.

,i
cu adevarat
eficienta n prevenirea atacurilor bazate pe asumarea unui false identitat

(numite atacuri phising) este instruirea utilizatorilor asupra limitarilor


protocolului SMTP.

9.4

WWW

World Wide Web sau WWW este, probabil, cel mai cunoscut s, i utilizat serviciu din
Internet. WWW-ul se prezinta ca un set de resurse interconectate prin intermediul de

legaturi
(hyperlink -uri). Aceste resurse sunt denumite pagini web s, i cont, in hypertext,

imagini, filme. Hypertext-ul este n esent, a text simplu, la care s-a adaugat
o formatare
ce specifica utilizarea de hyperlink -uri. Accesul la resurse se realizeaza
standardizata,

prin intermediul unui navigator (browser ). O pagina web va cont, ine, de obicei, legaturi

(hyperlink -uri) catre


alte pagini (resurse), justificnd denumirea de Web.
World Wide Web-ul este invent, ia lui Sir Tim Berners-Lee din 1989, una din
, ile marcante n dezvoltarea Internet-ului.
personalitat
Sir Tim Berners-Lee este
directorul World Wide Web Consortium (W3C), organizat, ia care coordoneaza
dezvoltarea WWW.
n ultimii ani, WWW-ul a cunoscut o dezvoltare mult mai ampla ajungndu-se la
folosirea expresiei Web 2.0 pentru a simboliza serviciile web de noua generat, ie oferite
, i web. n acelas, i timp, WWW-ul evolueaza catre

de diversele comunitat
ceea ce Sir Tim
Berners Lee a denumit Semantic Web, adica o extensie a WWW-ului n care cont, inutul

poate fi exprimat n limbaj natural s, i utilizat de agent, i specifici de analiza.

CAPITOLUL 9. SERVICII DE RET, EA

9.4.1

269

Tehnologiile de baza ale WWW

WWW-ul s, i datoreaza existent, a celor trei tehnologii utilizate de Sir Tim Berners-Lee.
Acestea sunt URL, HTTP s, i HTML s, i sunt prezentate n continuare.

URL
URL nseamna Uniform Resource Locator s, i este un nume ntr-o sintaxa bine precizata
pentru a identifica resursele din Internet. URL este de fapt un sinonim pentru URI
(Uniform Resource Identifier ).
n mod tipic, un URL/URI este introdus n bara de adrese a unui navigator s, i este folosit
pentru accesarea unei resurse (a unei pagini web) din Internet. Un navigator va
Astfel, n cazul n care se acceseaza
decodifica URL-ul s, i va accesa resursa dorita.

URL-ul http://www.example.com se face o cerere HTTP catre


server-ul
example.com. Pe de alta parte, URI-ul mailto:bogdan@example.com va

nsemna deschiderea unui client de e-mail pentru compunerea unui mesaj catre
bogdan@example.com.
Un URL are o sintaxa bine specificata folosita pentru identificarea stat, iei din Internet, a
serviciului folosit de aceasta s, i a resursei pe care o poate pune la dispozit, ie acest
serviciu. Astfel, n cazul URL-ului http://www.example.com/page.html stat, ia
care det, ine resursa este server-ul www.example.com. O cerere DNS va fi folosita
pentru translatarea numelui ntr-o adresa IP. Sirul

http:// este folosit pentru


identificarea serviciului; n cazul de fat, a acesta este serviciul de Web care foloses, te
protocolul HTTP s, i portul implicit 80. Resursa ceruta de pe server este /page.html.
Drept urmare, n urma introducerii URL-ui n bara de adrese a navigatorului, acesta va

face o cerere HTTP catre


stat, ia identificata de numele www.example.com pentru
pagina /page.html de pe server. Aceasta va fi afis, ata apoi clientului (n interiorul
browser -ului).
Exemplul de URL prezentat mai sus este unul simplificat. Astfel, sintaxa completa pentru
un URL este:
1

protocol://server:port/cale/catre/resursa

evident, protocolul folosit pentru comunicat, ie.


cmpul protocol specifica,
Acesta poate fi ftp, http, scp etc.; daca acest cmp lipses, te, un browser va
folosi implicit http;

cmpul server reprezinta numele sau adresa IP a stat, iei cu care se dores, te
realizarea unei comunicat, ii;

cmpul port este portul utilizat (acesta poate lipsi), caz n care se foloses, te portul
implicit al serviciului;

/cale/catre/resursa reprezinta calea catre


resursa aflata pe server;
acesta va folosit aceasta cale pentru a oferi respectiva resursa clientului; de
obicei, resursa este o intrare n sistemul de fis, iere al server-ului.
Astfel, un URL tip ftp poate asigura inclusiv
Sintaxa URL-ului poate fi complicata.
autentificarea
pe
server.
Folosirea
URL-ului
ftp://bogdan:p4r0l48un4@example.com/
sources.tgz
nseamna

270

INTRODUCERE N SISTEME DE OPERARE

autentificarea

utilizatorului bogdan cu parola p4r0l48un4 pe

example.com, folosind ftp pentru descarcarea


fis, ierului sources.tgz.

serverul

HTTP
HTTP (Hypertext Transfer Protocol) este protocolul fundamental al World Wide

Web-ului. Des, i navigatoarele pot folosi alte protocoale n afara HTTP, acesta ramne
cel mai important mecanism de comunicare.
Similar celorlalte servicii din Internet, serviciul Web (HTTP) funct, ioneaza ca sistem
client-server. Clientul Web este navigatorul (browser-ul) folosit pentru cererea unei
resurse prin intermediul unui URL. Portul implicit utilizat de HTTP este 80.

Protocolul HTTP este un protocol de tip ntrebare raspuns


(request response). Clientul

Web (navigatorul) face o cerere catre


un server, dupa care acesta i trimite un raspuns
n exemplul de mai jos, telnet este utilizat pentru a efectua o cerere
s, i resursa ceruta.

HTTP catre
google.ro:
1
2
3
4
5
6
7
8
9

razvan@anaconda:~$ telnet google.ro 80


Trying 72.14.221.104...
Connected to google.ro.
Escape character is ^].
GET / HTTP/1.0
HTTP/1.0 302 Found
Location: http://www.google.ro/
Cache-Control: private
[...]

Dupa realizarea conexiunii pe portul 80, clientul trimite cererea GET / HTTP/1.0.
acin
a al serverului folosind HTTP versiunea
Aceasta nseamna citirea directorului rad

1.0. Raspunsul
server-ului este HTTP/1.0 302 Found urmat de pagina efectiva.

Daca pagina dorita nu se afla pe server, raspunsul


server-ului va fi Error 402 Page

caz n
not Found. Acest raspuns
nu nseamna nsa ca serverul nu funct, ioneaza,
care mesajul afis, at de client ar fi Server not Found.
O alta caracteristica importanta a protocolului HTTP este faptul ca este un protocol
neorientat pe conexiune (stateless). Acest lucru nseamna ca dupa ce clientul trimite o

Pentru o noua resursa trebuie


cerere s, i i soses, te raspunsul
conexiunea este ncheiata.
realizata o alta conexiune. Opus este protocolul FTP care este un protocol cu
Petru ca este nevoie ca anumite informat, ii sa fie persistente
conexiune persistenta.
diverse solut, ii: cookie-uri pe client, sesiuni
de-a lungul mai multor conexiuni s-au gasit
pe server, variabile HTTP etc.
Un alt neajuns al HTTP este lipsa unui suport puternic de securitate. Acest lucru este

corectat prin folosirea protocolului HTTPS care foloses, te comunicat, ie criptata.

Majoritatea sistemelor de webmail de astazi


folosesc HTTPS pentru a asigura
confident, ialitatea datelor.

HTML
HTML (Hypertext Markup Language) este un limbaj folosit pentru a descrie cont, inutul
unei pagini Web. HTML foloses, te marcaje (tag-uri) pentru a defini modul n care un

CAPITOLUL 9. SERVICII DE RET, EA

271

element dintr-o pagina Web este afis, at de un browser.

O pagina simpla Web descrisa n format HTML este urmatoarea:


1
2
3
4
5

razvan@anaconda:~/public_html$ cat main.html


<html>
<head>
<title>Pagina mea</title>
</head>

<body>

<h1>Antet</h1>

8
9

Text simplu
<strong>Text aldin</strong>
<em>Text cursiv</em>

10
11
12

</body>

13
14

</html>

Un marcaj ncadreaza de obicei un text. La nceput, marcajul este <nume_marcaj> s, i


se ncheie cu </nume_marcaj>. Marcajele prezente n aceasta pagina sunt:

html, pentru definirea documentului HTML


spre exemplu titlul (marcajul title)
head prezinta informat, ii despre pagina,

h1 defines, te un antet de nivel 1


strong defines, te un text aldin (bold)
em defines, te un text cursiv (italic)
Un client Web va interpreta o pagina HTML s, i o va afis, a utilizatorui conform marcajelor
existente.

XHTML
XHTML (Extensible Hypertext Markup Language) este un standard s, i un limbaj de
marcare care are aceleas, i posibilitat, i de exprimare ca s, i HTML nsa se conformeaza
un document
sintaxei mult mai stricte a XML. Urmnd o sintaxa mult mai stricta,
XHTML este mult mai us, or de interpretat, spre deosebire de un document HTML care
necesita un parser complex.
XHTML o reprezinta cres, terea numarului

Motivat, ia utilizarii
de dispozitive care nu au
capacitatea de procesare a unui document HTML complex. Sintaxa stricta a XHTML

permite o prelucrare mult mai rapida a unei pagini Web de catre


client.
Adoptarea XHTML se realizeaza ntr-un ritm inegal datorita lipsei de implementare n
navigatoare a caracteristicilor noi pe care standardul le aduce.
Versiunea curenta de XHTML este 1.1. Versiunea 2.0 a standardului este nca n
dezvoltare.

272

9.4.2

INTRODUCERE N SISTEME DE OPERARE

Funct, ionarea serviciului

Dupa cum s-a precizat, serviciul de Web funct, ioneaza n sistem client-server s, i
foloses, te protocolul HTTP pentru comunicare.
Funct, ionarea serviciului este
sistematizata n figura 9.9, n care sunt prezentat, i un set de pas, i urmat, i tipic n

obt, inerea de catre


client, a unei resurse aflate pe un server Web (de obicei o pagina
Web).

Figura 9.9: Funct, ionarea serviciului de Web


n prima faza utilizatorul va folosi un client Web (navigator) s, i va introduce n bara de

adrese a acestuia un URL care identifica resursa dorita.

Navigatorul identifica din URL sistemul unde trebuie sa se conecteze s, i resursa ceruta.
De obicei se va genera s, i o cerere DNS pentru a afla adresa IP asociata serverului.
Navigatorul se conecteaza la server s, i, n cazul protocolului HTTP, formuleaza o cerere
de forma GET /cale/resursa HTTP/1.0.

Cererea ajunge la serverul Web. Acesta trebuie sa ofere clientului resursa ceruta.
Resursa este, de obicei, o intrare n sistemul de fis, iere (pagina web, imagine, film etc.).
Drept urmare serverul Web va trebui sa localizeze resursa. Orice server web are
acin
a specializat, denumit s, i webroot. Orice resursa este
configurat un director rad

obt, inuta din acest director. Drept urmare, calea completa n sistemul de fis, iere este
din cererea HTTP la webroot, rezultnd intrarea
obt, inuta prin concatenarea caii
/webroot/cale/ resursa.
serverul va trebui sa o transmita clientului. Pentru
Dupa ce obt, ine resursa obt, inuta,

aceasta el emite un raspuns


HTTP 200 OK s, i atas, eaza resursa.
Clientul primes, te resursa de la server s, i, daca este vorba de o pagina Web, interpreteaza
codul (X)HTML s, i afis, eaza rezultatul utilizatorului. Conexiunea se nchide.

9.4.3

Servere Web

Un server Web este responsabil cu oferirea de resurse din sistemul local de fis, iere

catre
client, i (navigatoare) prin intermediul protocolului HTTP. Exemple de servere Web
sunt Apache HTTP Server, Microsoft IIS, Sun Web Server, Zeus Web Server. Apache
HTTP Server este cel mai folosit server Web din Internet.

n general, un server Web prezinta un fis, ier de configurare prin intermediul caruia
i
poate fi alterat comportamentul. n cazul Apache HTTP Server versiunea 2, acest fis, ier

CAPITOLUL 9. SERVICII DE RET, EA

273

de configurare este /etc/apache2/apache2.conf. Alterarea acestui fis, ier de


configurare permite schimbarea portului pe care acesta asculta conexiuni (implicit 80),
a webroot-ului (implicit /var/www) s, i altele.
Un server Web va primi o cerere HTTP n forma GET /cale/catre/resursa
HTTP/ 1.0 s, i va identifica din sistemul local de fis, iere intrarea asociata resursei.
acin
a (denumit webroot) unde este cautat

Fiecare server are un director rad


a resursa
pentru a fi oferita clientului. n cazul serverului Apache, n urma unei cereri GET
/cale/catre/resursa HTTP/1.0 va trimite clientului fis, ierul identificat de
/var/www/cale/catre/resursa (sau /usr/local/Apache2/htdocs).

9.4.4

Client, ii Web

Client, ii Web se numesc navigatoare sau browser-e. Un client Web se va conecta la


Resursa este specificata de utilizator ntr-un
un server Web pentru a solicita o resursa.

URL. Clientul Web transmite o cerere HTTP catre


server solicitnd resursa clientului.
De obicei aceasta resursa este o pagina Web. Codul HTML este interpretat apoi de
navigator s, i afis, at utilizatorului.
Cele mai utilizate tipuri de navigatoare sunt Internet Explorer, Mozilla Firefox, Opera s, i
Safari. Internet Explorer este cel mai utilizat navigator cu o pondere de 80-85% urmat
de Mozilla Firefox cu o pondere de 10-15%. Celelalte navigatoare au ponderi mult mai
cum ar fi lynx, w3m, links.
mici. Exista s, i navigatoare n linie de comanda,
Navigatoarele Web reprezinta una dintre cele mai utilizate aplicat, ii din cadrul unui sistem
de operare. Competit, ia dintre acestea a generat ceea ce s-a numit browser wars.
Astfel, anii 1994-1998 au fost marcat, i de competit, ia dintre Netscape Navigator s, i Internet
n anul 2002, Internet Explorer era folosit n proport, ie
Explorer cu victoria celui din urma.
de circa 92%. Ultimii ani sunt dominat, i de competit, ia ntre Mozilla Firefox s, i Internet
Explorer.
important de
Competit, ia dintre navigatoare a condus s, i la aparit, ia unui numar
blocarea mesajelor de tip pop-up, corect, ie
caracteristici printre care: navigare tabulara,
gesturi de mouse, suport pentru diverse protocoale (FTP, IRC, BitTorrent)
gramaticala,
s, i pentru standarde (CSS, XHTML, XSLT, RSS).

9.5

Studii de caz

9.5.1

Utilitarul cURL

Utilitarul cURL este aplicat, ie pentru transferul de fis, iere ce s, i propune sa ofere suport
foarte mare de
att pentru cerint, e avansate de securitate, ct s, i pentru un numar
protocoale. Lista protocoalelor implementate de cURL include FTP, HTTP, telnet, LDAP,
precum s, i protocoale orientate spre securitate precum SCP, SFTP, FTPS, HTTPS.
, i se pot folosi n cURL numeroase metode de autentificare
Pentru asigurarea securitat
ct s, i pe certificate.
pe baza de parola,

274

INTRODUCERE N SISTEME DE OPERARE

ceea ce permite includerea sa n


Utilitarul cURL ce se executa din linia de comanda,

scripturi. Cel mai adesea cURL este folosit pentru scripting HTTP, n scopul simularii
, ii utilizatorilor ce folosesc diferite broswere.
activitat
Utilitarul cURL implementeaza numeroase mecanisme specifice client, ilor web, cele mai
multe suplimentare fat, a de wget. Spre exemplu ofera gestionarea cookies (trimiterea s, i
navigarea prin pagini de formular, folosirea unui proxy web, urmarirea

salvarea locala),

redirectarilor
automate, sau schimbarea semnaturii
navigatorului.
Spre exemplu, presupunem ca n cadrul unui site se afla un formular disponibil la
adresa: test.cs.pub.ro/login.cgi. n acest formular trebuie completat un

cmp de nume s, i apoi apasat


butonul OK pentru a accesa site-ul. Formularul este scris
folosind sintaxa HTML:
1
2
3
4

<form method="GET" action="login.cgi">


<input type=text name="nume">
<input type=submit name=press value="OK">
</form>

Listing 9.1: Formular de login simplu


Cererea poate fi trimisa folosind cURL astfel:
1

razvan@kiwi:~$ curl "test.cs.pub.ro/login.cgi?nume=Razvan\&press=OK"

n cazul unui formular ce permite clientului sa ncarce un fis, ier se poate folosi cURL cu
opt, iunea -F. Presupunem ca formularul este scris astfel:
1
2
3
4

<form method="POST" enctype=multipart/form-data action="upload.cgi">


<input type=file name=upload>
<input type=submit name=press value="OK">
</form>

Listing 9.2: Formular de upload simplu

Pentru formularul aflat la adresa test.cs.pub.ro/upload.cgi va fi ncarcat

fis, ierul test01 s, i apoi simulata apasarea


butonului OK:
1

razvan@kiwi:~$ curl -F upload=@test01 -F press=OK test.cs.pub.ro/upload.


cgi

, ii navigatorului. Pentru a simula


Utilitarul cURL ofera suport s, i pentru schimbarea identitat

o cerere catre
serverul test.com init, iata de un navigator Internet Explorer 7.0 ce ruleaza
pe un sistem Windows 2000 vom folosi comanda:
1

razvan@kiwi:~$ curl -A "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT


5.0)" test.co

9.5.2

FTP

FTP (File Transfer Protocol) este un protocol foarte raspndit


ce ofera posibilitatea
transferului de fis, iere att ntr-o ret, ea locala ct s, i prin Internet. Se bazeaza pe modelul
, i ntre care se realizeaza un
client-server, deci presupune existent, a a doua entitat
la serverul de
transfer de fis, iere, clientul fiind cel care se conecteaza (s, i se autentifica)

la care poate descarca


sau caruia
i poate trimite fis, iere.

CAPITOLUL 9. SERVICII DE RET, EA

275

Ca s, i n cazul modelului generalizat de client-server, serviciul FTP oferit de catre


acesta

din urma se reduce la existent, a unei aplicat, ii, numita server FTP ce ruleaza pe o stat, ie.
Similar, clientul ruleaza o aplicat, ie numita client FTP ce se ocupa de managementul

conexiunii catre
server s, i de traficul de date dintre aces, tia. Att aplicat, iile server ct
s, i cele client FTP sunt disponibile, practic, pentru toate platformele existente, dovada a
, ii s, i raspndirii

versatilitat
protocolului FTP.
Un dezavantaj al protocolului FTP este faptul ca acesta transfera att informat, iile de
conectare ct s, i cont, inutul propriu-zis al fis, ierelor n mod necriptat, interceptarea unui
astfel de trafic putnd duce la o interpretare facila a sa.

Funct, ionare
Un client FTP ce se conecteaza la un server trimite acestuia un set de date de
care au asociate pe server un o structura de directoare
autentificare (nume s, i parola)
ce sunt puse la dispozit, ia acelui utilizator. Daca autentificarea reus, es, te, clientul are
dreptul sa trimita n continuare comenzi pentru a interact, iona cu fis, ierele la care are
acces. Drepturile de acces la fis, iere se reduc la cele de listare/creare de directoare,
citire, modificare, s, tergere de fis, iere sau directoare, ceea ce implica un transfer
bidirect, ional ntre client s, i server (clientul poate att sa descarce, ct s, i sa trimita fis, iere
aceste drepturi sunt enunt, ate n aceeas, i structura de tip rwx ca
pe server). n practica,
s, i pe sistemele UNIX.
conexiunile pe portul 21 s, i realizeaza transferul de comenzi tot
Serverul FTP asculta
pe acesta. Transferul efectiv de fis, iere se realizeaza n paralel, pe portul 20, doar n
urma unei conexiuni prestabilite. Porturile rezervate pentru protocolul FTP sunt 21
pentru stabilirea conexiunii s, i 20 pentru transferul efectiv de date. O varianta securizata
s, i similara o reprezinta SFTP (SSH File Transfer Protocol). O alta limitare a sa este

fis, ierelor,
imposibilitatea de a transmite atributele ce t, in de data s, i ora crearii/modific
arii
acestea fiind rescrise la destinat, ie. De asemenea, aceasta limitare este eliminata n
cazul lui SFTP.
Transferul datelor prin FTP se poate face prin doua moduri, selectate manual naintea

init, ierii transferului sau determinate automat de catre


clientul FTP:

Mod ASCII: folosit pentru transferul fis, ierelor text; are avantajul de a transmite
datele folosind codurile ASCII ale caracterelor, ceea ce permite compresia
dinamica a informat, iei, la un raport foarte bun, deci un flux mai puternic de date,

dar are dezavantajul de a corupe cont, inutul oricarui


fis, ier non-text.

Mod binar: folosit pentru transferul oricarui


tip de fis, iere (inclusiv text)

Exemplu de utilizare
Conectarea la un server FTP dintr-o linie de comanda Linux se poate face direct prin
comanda ftp, urmata de numele sau adresa serverului la care se dores, te conectarea,
ca n exemplul:
1
2
3

rookie@localhost~$ ftp ftp.lug.ro


Trying 193.226.140.51...
Connected to ftp.lug.ro (193.226.140.51).

276
4
5
6
7
8
9
10
11

INTRODUCERE N SISTEME DE OPERARE

220 (vsFTPd 2.0.3)


Name (ftp.lug.ro:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Promptul ftp> indica faptul ca urmatoarele


comenzi vor fi trimise direct catre
server.
Cteva comenzi comune sunt ls sau dir pentru a lista cont, inutul directorului curent, cd

pentru a schimba directorul, get pentru a descarca


fis, ierele specificate ca parametri
(mget pentru fis, iere multiple) sau put pentru trimiterea de fis, iere. Deconectarea de la
serverul FTP se face prin comenzile quit sau disconnect.
O categorie speciala de client, i FTP o reprezinta broswerele web, limitarea acestora

constnd n faptul ca nu permit dect descarcarea


fis, ierelor de pe server. Conectarea
la un server FTP printr-un browser web se poate face prin introducerea adresei sale n
bara de adrese a browserului, specificndu-se protocolul:
1

ftp://ftp.lug.ro

a cont predefinit),
n cazul serverelor n care accesul nu se poate face anonim (far

browserul va cere un nume de utilizator s, i o parola.


Pentru a specifica direct din adresa parametrii de autentificare, se poate scrie:
1

ftp://user:parola@server:2555

Exemplul anterior specifica explicit s, i portul pe care se realizeaza conexiunea (2555),


informat, ie necesara n cazul n care serverul nu ruleaza pe portul implicit, 21.

Cuvinte cheie

client

SMB

curl

spam

FTP

SSH (Secure Shell)

HTML

stiva de protocoale

HTTP
IMAP

TCP
telnet

IP
LDA
POP3

UDP
URL

port

webmail

punct-la-punct

wget

scp

WWW

server

XHTML

CAPITOLUL 9. SERVICII DE RET, EA

277

ntrebari
1. Care dintre operat, iile de mai jos NU se bazeaza pe o arhitectura client-server?

q ridicarea mesajelor
q editarea unui nou mesaj
q trimiterea unui nou mesaj
q verificarea mesajelor folosind broswer
a intermedierea nivelului transport) cu nivelul
2. Protocolul telnet comunica direct (far
ret, ea. Dupa stabilirea unei conexiuni de telnet comunicat, ia se va face doar

unidirect, ional: de la server catre


client.

q adevarat,
adevarat

q adevarat,
fals

q fals, adevarat

q fals, fals
3. Care dintre serviciile de mai jos NU este util intr-o solut, ie de webmail?

q SMTP
q IMAP
q HTTP
q SSH
4. Care dintre cele de mai jos NU reprezinta o tehnologie relevanta pentru serviciul
web:

q URL
q HTTP
q HTML
q FTP

5. Care dintre urmatoarele


este o aplicat, ie server SMTP?

q Postfix
q Firefox
q Outlook
q Apache
6. ntr-un client web (broswer) este tastata adresa:
1

ftp://bestman:none@test.com/lista/admisi.txt

a?

Care dintre urmatoarele


afirmat, ii este adevarat

q va fi init, iata o conexiune pe portul 80 catre


serverul test.com

q va fi descarcat
fis, ierul /test.com/lista/admisi.txt

278

INTRODUCERE N SISTEME DE OPERARE

q se va folosi pentru autentificare parola bestman


q pentru stabilirea conexiunii utilizatorul bestman sa trebuie sa existe pe
test.com
7. Pentru conectarea la un server SSH este necesara cunoas, terea adresei IP sau
a numelui DNS a serverului. Filtrarea mesajelor spam se poate face numai pe
serverul de mail, nu s, i pe client

q adevarat,
adevarat

q adevarat,
fals

q fals, adevarat

q fals, fals

8. Care din urmatoarele


NU este un client web?

q Firefox
q Internet Explorer
q wget
q Thunderbird

9. Care dintre urmatoarele


aplicat, ii NU poate fi folosita pentru conectarea la un server
web:

q telnet
q ssh
q wget
q curl
10. Comunicat, ia ntre doua servere de mail se realizeaza folosind:

q POP3
q HTTP
q SMB
q niciuna dintre variante

Capitolul 10
Elemente de securitate
There are two kinds of cryptography in this world:
cryptography that will stop your kid sister from reading
your files, and cryptography that will stop major
governments from reading your files.
Bruce Schneier

Ce se nvat, a din acest capitol?


, ii IT
Problematica securitat

Elementele unei politici de securitate


Securizarea sistemului
Controlul accesului
Securitatea sistemului de fis, iere
Forme de atac de ret, ea
Criptare s, i firewall-uri
Monitorizare

10.1

, ii
Problematica securitat

Securitatea la nivelul calculatoarelor, n particular, s, i a domeniului IT, n general, a


atat

cap
un interes deosebit n ultimele decenii. Des, i un concept discutat din cele mai
atat

vechi timpuri, securitatea a cap


noi forme, ramuri de proiectare s, i implementare
odata cu dezvoltarea sistemelor de calcul s, i ndeosebi a Internetului. Pe o planeta n
care peste 1.5 miliarde de oameni sunt conectat, i la Internet (circa 25% din populat, ie)1
n domeniul IT, domeniul
securitatea s, i integritatea informat, iei au o relevant, a deosebita.
, ii a cunoscut o dezvoltare alerta,
cu multe subdomenii s, i specialis, ti. Se discuta
securitat
, ii, despre criptografie, gestiunea riscului, securitatea ret, elei,
despre ingineria securitat
virus, i s, i antivirus, i, scrierea de cod sigur (secure coding).
inginerie sociala,
1

http://www.internetworldstats.com/stats.htm

279

280

INTRODUCERE N SISTEME DE OPERARE

n ciuda faptului ca domeniul este unul vast, nivelul de cunoas, tere s, i nt, elegere a
, ii este destul de scazut.

publicului larg n privint, a securitat


De-a lungul ultimilor ani,
, ii au par
asit
domeniul IT, fiind preluate
multe teme tehnice specifice domeniului securitat
Din pacate

de ziare, jurnale TV, sau de industria cinematografica.


procesul nu a fost,
cel mai adesea, unul ce ncerca aducerea n sfera publica a conceptelor de securitate,
ci mai ales unul ce speculeaza senzat, ionalul prin ignorarea constrngerilor lumii reale,
ducnd la promovarea unor noi mituri ale erei IT.
De multe ori se considera normale performant, ele hackerilor din filme, care reus, esc sa
compromita securitatea unui sistem n cteva secunde. Exemple de scenarii care

ajuta la raspndirea
acestui fenomen sunt scrierea de virus, i pentru sisteme de operare
extraterestre (vezi Ziua Independent, ei, 1997) sau folosirea unui ecran 3D pentru
nsa,
s, i exemple pozitive n
virusarea unui sistem (vezi Swordfish, 2001). Exista,
precum folosirea nmap s, i SSH pentru compromiterea unei
lumea cinematografica,
ret, ele electrice computerizate (vezi Matrix, 19971 ).
Capitolul de fat, a nu s, i propune sa ofere cititorului sfaturi despre obt, inerea unei puteri

nemarginite
n controlul tuturor sistemelor electronice, ci sa aduca un nivel minim de
, ii IT. A deveni cu adevarat

ordine n domeniul populat de mituri al securitat


un profesionist

n securitate este o cariera, dupa cum spunea s, i Eric S. Raymond: Being able to break
security doesnt make you a hacker anymore than being able to hotwire cars makes you
an automotive engineer.

10.1.1

Principii de baza

Securitatea calculatoare are drept scop protejarea informat, iilor de la accese


, ii se refera att la
neautorizate, furt, corupere s, i alte riscuri. Domeniile securitat
mecanismele folosite pentru a obt, ine accesul sau a corupe informat, iile ct s, i la
protejarea acestora. Forma generala de risc n securitatea IT se numes, te atac de
securitate.
O prima clasificare a riscurilor de securitate distinge trei tipuri de atacuri:

atacuri venite din Internet (cu o rata de succes redusa);

atacuri init, iate din ret, eaua locala;


acestea din urma avnd un impact mult
atacuri generate de pe aceeas, i mas, ina,
mai nsemnat dect primele.
Des, i cu gradul de risc cel mai ridicat, atacurile init, iate de utilizatorii serverului t, inta sunt
deseori tratate n graba s, i unitar.
, ii dispune de un set de principii generale. Acestea nu sunt aplicabile
Domeniul securitat
, ii n general. Aceste principii nu sunt
doar n cadrul domeniului IT, ci n domeniul securitat

exhaustive, dar urmarirea


acestora faciliteaza proiectarea s, i implementarea unui sistem
cu nivel de sigurant, a ct mai ridicat.
Privit din perspectiva unui sistem IT, o solut, ie de securitate trebuie sa includa att o
, ile utilizatorilor, ct s, i
politica de securitate, ce defines, te drepturile s, i responsabilitat
1

http://nmap.org/images/matrix/

CAPITOLUL 10. ELEMENTE DE SECURITATE

281

securitat
, ii fizice, ale componentelor sistemului de operare, ale
specificat, ii ale asigurarii
aplicat, iilor locale, precum s, i ale serviciilor de ret, ea.
, ii, fie ea IT sau de orice alta natura,
este:
Unul dintre principiile fundamentale ale securitat
securitatea unui sistem este egala cu securitatea celei mai slabe verigi.
Altfel spus, degeaba t, i pui us, a ultra-performanta daca nu foloses, ti cheia, sau aplicat n
domeniul IT: nu are rost sa cheltui sume enorme de bani pe sisteme de securitate, daca
utilizatorii folosesc drept parole propriul nume, sau s, i t, in parola lipita pe monitor.
, i active (utilizatori, procese) s, i drepturi pe care acestea le
n orice sistem exista entitat
securitat
, ii sistemului, fundamental este
au asupra sistemului. n condit, iile asigurarii
principiul celui mai mic privilegiu. Acest principiu impune alocarea drepturilor
, ilor active: doar ceea ce este nevoie.
minime entitat
Un administrator de sistem va avea acces la ntreg sistemul s, i resursele acestuia. Un
utilizator obis, nuit va avea acces doar la acele resurse care i sunt necesare. Cteva de
mecanisme care respecta acest principiu sunt:

folosirea unui director de tip home cu drepturi complete pentru fiecare utilizator;
folosirea comenzii sudo s, i fis, ierului /etc/sudoers pentru a conferi anumite
privilegii utilizatorilor; (vezi sect, iunea 10.3.3)

separat, ia ntre informat, iile din fis, ierul /etc/passwd s, i /etc/shadow; (vezi
sect, iunea 10.2.3)

folosirea doar a dreptului de execut, ie pe directoare cnd se dores, te parcurgerea


acestora; (vezi sect, iunea 10.2.4)
drepturilor (vezi sect, iunea 10.3.3).
Acest principiu este legat de principiul limitarii
ntruct resursele sistemului sunt limitate, un utilizator poate ajunge sa foloseasca o

foarte mare parte a acestora n dauna


altor utilizatori sau a sistemului de operare,

putnd conduce us, or la suspendarea funct, ionarii


acestuia. n general, limitarea
1
drepturilor previne atacuri de tipul DoS (denial-of-service).
Un utilizator poate crea foarte multe procese ducnd la ocuparea memoriei (fork
bomb2 ), un atac de ret, ea poate deschide multe conexiuni3 care ocupa memorie, un
utilizator poate ocupa spat, iu pe disc s, i mpiedica folosirea acestuia. Solut, ia este
configurarea sistemului sa limiteze drepturile utilizatorilor sau proceselor sistemului
pentru a preveni suprautilizarea resurselor sistemului. Spre exemplu, folosirea cotelor4

previne suprancarcarea
spat, iului de pe disc.
Asocierea dintre o entitate activa (denumita s, i subiect) s, i drepturile pe care aceasta
le det, ine asupra unor resurse (denumite s, i obiecte) se numes, te controlul accesului
(access control). Sistemele de operare folosesc diferite mecanisme pentru a stabili cnd,
ct de mult, cum s, i daca poate un proces (subiect) sa foloseasca o resursa (obiect).
O politica de securitate trebuie sa stabileasca un compromis ntre gradul de
flexibilitate a serviciilor IT s, i nivelul de securitate dorit. Luate ad literam, cerint, ele
dar cum o
de securitate ar presupune izolarea totala a sistemului de lumea exterioara,
1

http://en.wikipedia.org/wiki/Denial_of_service
http://en.wikipedia.org/wiki/Fork_bomb
3
http://en.wikipedia.org/wiki/SYN_flood
4
http://en.wikipedia.org/wiki/Disk_quota
2

282

INTRODUCERE N SISTEME DE OPERARE

, ii, cel mai adesea securitatea unui


astfel de abordare duce la limitarea funct, ionalitat

sistem este definita ca un set de metode de protect, ie menite sa descurajeze s, i sa


ntrzie atacatorul.
, ii unui sistem presupune adaugarea

, i. Aceasta
Asigurarea flexibilitat
de noi funct, ionalitat
se traduce, n general, n crearea unei aplicat, ii complexe. Se spune complexitatea este
, ii1 .
, ii este
dus, manul securitat
Un principiu de baza pentru asigurarea securitat
2

simplitatea . Orice noua caracteristica adaugat


a unui sistem sau unui program poate
, i. Se estimeaza ca ntr-o companie
nsemna introducerea unei noi vulnerabilitat
specializata pentru dezvoltarea de programe, se introduc zeci de defecte (bug-uri) la
, ii se numes, te
fiecare 1000 de linii de cod. n dezvoltarea software, opusul simplitat

, i care nu sunt necesare.


feature creep3 : adaugarea
de funct, ionalitat
Un sistem cu nivel foarte bun de securitate se poate obt, ine mai us, or daca planificarea
acestuia t, ine cont de securitate dect daca mecanismele de securitate sunt
implementate dupa o perioada n care acesta a fost dezvoltat. Planificarea unui sistem
t, innd cont de securitate (design with security in mind) este un factor decisiv pentru
obt, inerea unui sistem ct mai sigur.
Daca n proiectarea unei aplicat, ii, a unei ret, ele sau a unui sistem, se t, ine cont de
, ii, de mediul s, i contextul de utilizare
posibilile atacuri, de principiile de baza ale securitat
a.
De asemenea,
a aplicat, iei, probabililitatea obt, inerii unui sistem vulnerabil este scazut
orice noi mecanisme de asigurare a unui nivel suplimentar de securitate vor fi mai us, or

adaugate
sistemului. Ingineria sofware foloses, te denumirea de secure by design4 . Un
exemplu este sistemul de operare OpenBSD5 , care pune accent pe obt, inerea unui
sistem ct mai sigur sigur.
Securitatea unui sistem nu este o finalitate, ci un proces. Un sistem nu va fi niciodata
perfect sigur, ct timp acesta este folosit. Securitatea unui sistem presupune un s, ir de
act, iuni continue pentru a preveni posibile atacuri. n general, securitatea se traduce n
resursele pe care le poate investi un atacator fat, a de resursele pe care le investes, te cel
care protejeaza sistemul (bani, timp, personal).
n cartea Secure Coding: Principles and Practices [8] (capitolul 2 Architecture), se
ntr-un interviu de angajare, raspunsul

ment, ioneaza ca,


potrivit la ntrebarea Ct de

sigura pot, i sa faci aplicat, ia mea? este Ct de sigura vrei sa fie?. Raspunsurile
Pot

sa o fac sigura n fat, a oricarui


atac. sau Pot sa o fac ct de sigura se poate. ar trebui
sa rezulte n eliminarea candidatului din lista de potent, iali angajat, i. Un sistem poate fi
crescut de
mai sigur dect un alt sistem, dar acest lucru se realizeaza cu un numar
ct de sigur se
, i obscure. ntotdeauna trebuie cntarit
resurse, stres s, i funct, ionalitat
dores, te a fi un sistem la cte resurse pot fi investite.
Nu se poate obt, ine un sistem perfect sigur, dar un sistem trebuie ment, inut la un nivel
monitorizare, actualizare, verificare
de securitate. Operat, iuni periodice de mentenant, a,
sunt necesare pentru asigurarea unui nivel dorit de securitate. O divizie responsabila
, ii unui sistem va trebui sa considere n permanent, a exteriorul
cu asigurarea securitat
Tot ceea ce nu face parte din sistemul controlat trebuie
ca fiind o zona nesigura.
1

http://www.schneier.com/news-038.html
http://en.wikipedia.org/wiki/KISS_principle
3
http://en.wikipedia.org/wiki/Feature_creep
4
http://en.wikipedia.org/wiki/Secure_by_design
5
http://www.openbsd.org/
2

CAPITOLUL 10. ELEMENTE DE SECURITATE

283

considerat ca o zona cu potent, iale riscuri sau atacatori. Orice vulnerabilitate a sistemului

trebuie reparata la timp pentru a nu permite unui potent, ial atacator sa o foloseasca.
, ii.
Depinznd de domeniu, pot exista s, i alte principii pentru asigurarea securitat
, ii.
Principiile prezentate mai sus reprezinta cteva din principiile de baza ale securitat
Pentru a obt, ine un
Aceste principii nu sunt complete s, i nu sunt aplicate o singura data.
sistem cu nivel ct mai bun de securitate, principiile de baza trebuie revizuite,
at
, ite s, i, n general, trebuie executate act, iuni
mecanismele folosite trebuie mbunat
, ii sistemului.
periodice de evaluare a securitat

10.1.2

Termeni

, ii dispune de o serie de termeni care descriu la nivel general


Domeniul securitat
conceptele de baza folosite. nt, elegerea acestor termeni este fundamentala pentru
orice specialist n IT s, i mai ales pentru cei care doresc sa urmeze o cariera n domeniul
, ii.
securitat
Mai jos sunt prezentat, i o parte din termenii de baza ai domeniului:

amenint, are (threat) se refera la orice eveniment sau circumstant, a cu potent, ial de
a produce pagube unui sistem prin access neautorizat, distrugerea sau

modificarea datelor sau denial of service; amenint, arile


provin ca urmare a
act, iunilor umane sau a cauze naturale;
, ii unui utilizator,
autentificare (authentication) nseamna verificarea identitat
proces sau dispozitiv, n general ca cerint, a pentru a permite acestuia accesul la
resursele sistemului;

autorizare (authorization) este oferirea sau respingerea drepturilor de acces


pentru un utilizator sau proces;
, ii care solicita protejarea
confident, ialitate (confidentiality ) este scopul securitat

datelor de la ncercari
intent, ionate sau accidentale de vizualizare/citire;
confident, ialitatea se refera att la datele aflate pe un dispozitive de stocare, ct s, i
la cele aflate n procesare sau n tranzit;

control acces (access control) nseamna permiterea folosirii autorizate a unei


resurse, simultan cu prevenirea folosirii neautorizate sau ntr-un mod neautorizat;
, ii care solicita protejarea de la ncercari

integritate (integrity ) este scopul securitat


, ii datelor; integritatea datelor
intent, ionate sau accidentale de alterare a integritat
presupune ca acele date sa nu fi fost alterate/modificate ntr-un mod neautorizat;
la fel ca s, i confident, ialitatea se refera att la date aflate pe dispozitive de stocare,
ct s, i la date aflate n procesare sau n tranzit;

denial of service este un tip de atac care are ca efect prevenirea accesului
autorizat la o resursa sau ntrzierea operat, iilor critice n raport cu timpul;

identitate (identity ) reprezinta o informat, ie unica n cadrul unui domeniu de


securitate, recunoscuta ca o entitate unica n acel domeniu;

risc (risk ) reprezinta probabilitatea ca o anumita amenint, are sa exploateze o


vulnerabilitate a sistemului s, i impactul care ar rezulta n urma acestei act, iuni;

284

INTRODUCERE N SISTEME DE OPERARE

vulnerabilitate (vulnerability ) se refera la o slabiciune


la nivelul proiectarii,
sau operarii
sistemului, care poate fi declans, ata intent, ionat sau
implementarii
accidental, rezultnd ntr-o violare a politicii de securitate a sistemului.
Exista o serie de confuzii de termeni de nume pentru persoanele implicate n domeniul
, ii. De multe ori not, iunea de hacker este folosita generic pentru a cataloga
securitat
atacatorii de ret, ea des, i, mai corect, denumirea corecta este cea de cracker (sau

black-hat hacker ).
Urmatoarea
lista reprezinta denumirile uzuale folosite s, i
semnificat, iile acestora:
init, ial, un programator caracterizat prin curiozitate s, i
hacker este, n sensul sau
dorint, a de rezolvare a problemelor existente (de unde not, iunea de hacking 1 ; n
, ii, not, iunea de hacker poate avea doua nt, elesuri: white-hat hacker
sensul securitat
(ethical hacker ) sau black-hat hacker (cracker );

cracker (sau black-hat hacker este specializat n atacatarea unor sisteme pentru
politica,
sau pentru distract, ie;
obt, inerea accesului; motivat, ia poate fi financiara,
scopul este, n general, distrugerea, furtul sau alterarea informat, iei;
a
script kiddie este un termen peiorativ folosit pentru a descrie persoanele far
cunos, tint, e tehnice deosebite pentru a fi considerat, i hackeri dar care folosesc
scripturi sau programe scrise de alt, ii pentru a ataca sisteme de calcul s, i ret, ele;

ethical hacker (sau white-hat hacker este un expert n securitate, specializat


, ii unui sistem sau a unei ret, ele pentru
n metodologii de testare a vulnerabilitat
a asigura un nivel ct mai bun de securitate; n general, ethical hackerii aplica
metode similare crackerilor, dar cu scopul final de testare s, i securizare a sistemului
atacat.

10.2

Securizarea sistemului

Securitatea sistemului se refera la mijloacele prin care se poate proteja un sistem de


pot veni din
calcul. Atacurile pot veni din exterior (din Internet, sau din ret, eaua locala),

interior (de la utilizatori) sau pot fi cauze naturale (caderea


tensiunii poate conduce la
pierderea unui hard disk sau la coruperea datelor).
Protejarea sistemului nu se refera doar la protect, ia sistemului de operare s, i a aplicat, iilor
ce ruleaza peste acesta ci s, i la protect, ia fizica a sistemului: pozit, ionarea n zone sigure,
folosirea de us, i metalice, prevenirea accesului persoanelor neautorizate.

10.2.1

Securitatea sistemului de operare

Securitatea aplicat, iilor trebuie sa porneasca de la asumarea gradului de risc dat de


sistemul de operare. Dintre componentele sistemului de operare, o mare parte a
ale implementarilor

atacurilor ncearca sa exploateze limitari


de separare a drepturilor
de acces la memorie sau la sistemul de fis, iere.
1

http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)

CAPITOLUL 10. ELEMENTE DE SECURITATE

285

Un sistem de operare este sigur daca resursele acestuia (zone de memorie, dispozitive
, ile active (n general
de intrare/ies, ire, fis, iere etc.) sunt accesate n mod valid de entitat
procese). Accesul valid este asigurat de nucleul sistemului de operare, ce act, ioneaza ca
un intermediar ntre utilizatori s, i componentele hardware.
Pornind de la sistemele de operare simple (cele pentru PDA) pna la sistemele complexe
ce ruleaza pe calculatoarele personale, securitatea oferita de nucleu se bazeaza pe
suport hardware. Procesoarele ofera cel put, in doua niveluri de privilegii:

un nivel de privilegii pentru operat, ii obis, nuite;


un altul pentru accesul la instruct, iuni privilegiate: accesul la zone de memorie
accesul la dispozitivele hardware etc.
rezervata;
Accesul la aceste instruct, iuni privilegiate este permis doar nucleului.

Securitatea memoriei
a de
n sistemele de operare moderne, securitatea memoriei este strns legat
Far
a a intra n detalii, este suficient de precizat faptul
mecanismul de memorie virtuala.

ca sistemele de operare asigura fiecarui


proces un spat, iu dedicat de memorie virtuala
(denumit s, i spat, iu de adrese) care este mapat/asociat unor zone din memoria RAM.
Zonele de memorie RAM peste care este mapat spat, iul de adrese al unui proces nu

poate fi accesat de catre


alte procese.

Problemele de securitate la nivelul memoriei t, in de detectarea corecta a ncercarilor


de

accesare a unor zone de memorie care nu se afla n spat, iul de adresa al procesului

respectiv, dar s, i a ncercarilor


de schimbare a unor zone de memorie n spat, iul propriu
procesului.
de adrese, pe parcursul rularii
spat, iu de memorie virtuala mapat peste un spat, iu de
Fiecare proces are propriul sau
memorie fizica printr-o tabela de translatare ce apart, ine procesului. Pentru un proces
care ncearca sa acceseze o adresa de memorie pentru care nu exista o translatare

catre
o adresa fizica (adica pentru care nu exista pagina respectiva de memorie n
RAM), procesorul va verifica la nivel hardware daca respectiva adresa se afla n spat, iul
nseamna ca respectiva pagina de memorie a
de adrese al procesului. Daca se afla,
fost evacuata pe disc (swap) s, i trebuie adusa n RAM. n caz contrar va fi generat un

semnal de pagina (de memorie) invalida (denumit page fault1 ), pe baza caruia
nucleul
n sistemele Unix
va putea decide suspendarea sau terminarea procesului n cauza.
procesul primes, te semnalul SIGSEGV, s, i are ca efect terminarea procesului cu mesajul
Segmentation fault.
Toate aceste operat, iuni cad n sarcina procesorului s, i sunt realizate la nivel hardware.
Protect, ia memoriei este o componenta esent, iala a sistemelor multitasking (sisteme ce
ofera posibilitatea mai multor procese de a se afla n stare de execut, ie n acelas, i timp).
Din punct de vedere hardware, primele procesoare pentru calculatoarele personale ce
ofera suport pentru protect, ia memoriei sunt procesoarele din familia Intel 803862 .
a suport
Folosind mecanisme mprumumate de la DOS, care rula pe sisteme far
1
2

http://en.wikipedia.org/wiki/Page_fault
http://en.wikipedia.org/wiki/Intel_80386

286

INTRODUCERE N SISTEME DE OPERARE

hardware (8086, 80286), versiunile de Windows pna la Windows 98 s, i Windows ME


nu au oferit o protect, ie completa a memoriei.

10.2.2

Controlul accesului

Controlul accesului se refera la oferirea accesului autorizat s, i prevenirea acccesului


neautorizat la sistem. Poate fi vorba de accesul fizic al unei persoane sau de accesul
unui utilizator n cadrul sistemului de operare.

Securitatea fizica
Securitatea fizica include o gama larga de parametri, de la controlul accesului personal
pna la asigurarea diferit, ilor parametri optimi de funct, ionare.
, ii fizice presupune plasarea echipamentelor n locuri
O prima componenta a securitat

n care se poate asigura controlul accesului, pentru a preveni utilizarea neautorizata,


distrugerea sau furtul.
ale consumului de putere
Specificat, iile de alimentare cu tensiune vor include evaluari
pentru dimensionarea surselor neinteruptibile de putere (UPS-uri), sau a generatoarelor
de tensiune.
Asigurarea temperaturii optime n centrele de operat, ii t, ine de folosirea unor sisteme de

aer condit, ionat sau de ncalzire


cu un grad ridicat de redundant, a.

Exista s, i cerint, e de protect, ie mpotriva incendiilor: o camera cu servere va trebui sa aiba,


pe lnga sisteme de detect, ie s, i stingere a incendiilor, s, i podea s, i peret, i din materiale
rezistente la foc.
plasarea echipamentelor n bunkere aflate la
O buna politica de securizare va urmari

subsolul cladirilor,
urmarindu-se
astfel s, i protect, ia mpotriva cutremurelor.

Securitatea la nivelul utilizatorilor


Una dintre componentele esent, iale ale unei politici de securitate este securitatea la
nivelul utilizatorilor. Securitatea utilizatorilor se bazeaza pe separarea resurselor

pentru protejarea accesului la


fiecarui
utilizator, precum s, i pe folosirea autentificarii
resurse.
Principiul important de prevenire a atacurilor la nivelul utilizatorilor este principiul celui
mai mic privilegiu. Orice operat, iune trebuie executata dintr-un cont cu drepturi ct mai
limitate.
Un administrator novice va folosi contul privilegiat inclusiv pentru efectuarea unor
, i ale variabilelor de mediu poate duce n
operat, iuni uzuale. Exploatarea unor ambiguitat
a ntr-un spat, iu public
acest caz la rularea accidentala a unei aplicat, ii malit, ioase lasat
(gen /tmp/), rulare ce nu ar fi fost posibila dintr-un cont de utilizator. Una dintre criticile
aduse sistemelor din familia Windows a fost crearea unui cont implicit de tip
Administrator care ofera drepturi depline utilizatorului sistemului, inclusiv instalarea

CAPITOLUL 10. ELEMENTE DE SECURITATE

287

unor programe malit, ioase. ncepnd cu Windows Vista, acest lucru a fost combatut
prin
1
folosirea User Account Control .

10.2.3

Parole

Des, i mecanismele de autentificare s-au diversificat, n continuare o pondere

semnificativa o constituie perechile <utilizator, parol


a>. O solut, ie alternativa,
ce ofera un grad mult mai ridicat de scalabilitate, precum s, i de securitate, este folosirea
de certificate. Conceptul ce sta la baza folosirii de certificate se numes, te PKI2 (Public
Key Infrastructure).
resurselor electronice fiind n continua cres, tere, mult, i utilizatori ajung sa comita
Numarul
ati
ale autentificarii:

cel put, in una dintre erorile de cap


alegerea de parole us, or de ghicit
(spart), folosirea unei parole pentru mai multe conturi sau notarea parolelor n locuri
nesigure.

Alegerea parolelor
Una dintre principalele probleme n alegerea parolelor este folosirea de parole prea
simple. Mult, i utilizatori folosesc numele propriu, numele sot, iei, copiilor sau cinelui, o
data de nas, tere, numele echipei preferate. Aceste parole pot fi us, or ghicite printr-un
atac de tipul dict, ionar.
o parola eficienta:

Se spune ca,
de minim 7-8 caractere;
trebuie sa aiba un numar

trebuie sa foloseasca att minuscule, ct s, i majuscule s, i cifre;


trebuie sa includa cel put, in un caracter special (s, i nu doar pe ultima pozit, ie n
cadrul parolei);

nu trebuie sa fie un cuvnt din dict, ionar;

nu trebuie sa fie un nume de persoana.


Cu toate acestea, parolele trebuie sa fie us, or de ret, inut. n aceasta situat, ie, cea mai la

ndemna solut, ie este alegerea unei fraze pe baza careia


se poate deduce parola (vezi
Ross Anderson Security Engineering, sect, iunea 3.3.3 [3]). Come to the dark side, we
have cookies! poate fi folosita pentru a ret, ine parola Cttds, whc!, dupa cum Social
engineering bypasses all technologies, including firewalls poate genera S3bat,1f.

n cazul folosirii unei parole ce nu respecta recomandarile


de mai sus, atacurile bazate
pe dict, ionar (ncercarea parolelor ce apart, in unui set de cuvinte comune), sau cele
bazate pe fort, a burta (ncercarea tuturor combinat, iilor de caractere) pot avea rezultate
aproape imediate. Exista numeroase aplicat, ii ce simuleaza astfel de atacuri, una dintre
cele mai renumite fiind John the Ripper3 .
1

http://en.wikipedia.org/wiki/User_Account_Control
http://en.wikipedia.org/wiki/Public_key_infrastructure
3
http://openwall.com/john/
2

288

INTRODUCERE N SISTEME DE OPERARE

De la conturi triviale de download pna la conturile de email, sau la conturile bancare


Este ideala
electronice, tot mai multe resurse solicita o autentificare pe baza de parola.
separarea conturilor prin parole individuale.
Cum acest lucru presupune
ridicat de fraze, o solut, ie de compromis consta n folosirea unor
memorarea unui numar
Astfel, nu este
parole comune pentru servicii similare cu miza de securitate redusa.
prudenta folosirea PIN-ului cardului de banca pentru contul de mail; un atac de fort, a
Se poate nsa folosi aceeas, i parola pentru
bruta ar dura aproximativ o microsecunda.

mai multe site-uri de descarcare


de software.
Des, i folosirea unor parole comune pentru servicii electronice cu miza mica reduce

destul de multe. n plus, politicile de securitate


numarul
parolelor, acestea pot fi nsa,
solicita schimbarea periodica a parolelor: timpul de viat, a recomandat pentru o parola

este de s, ase luni. n masura


n care parolele folosite nu pot fi memorate, vor trebui
a pe o foaie cu acces public.
notate. n mod evident, notarea parolelor nu trebuie facut

O solut, ie pentru parolele rar folosite consta n pastrarea


lor centralizata.
Exista
numeroase aplicat, ii menite sa protejeze printr-o singura parola o baza de date de
parole (spre exemplu KeePass1 .
Cons, tientizarea important, ei unei parole nu t, ine doar de protejarea unor resurse
personale, ci de gradul de securitate a ntregului sistem, precum s, i a ret, elei locale.
Altfel spus, ntr-o ret, ea n care utilizatorii folosesc parole triviale, riscul nu este doar unul
personal. Un atacator poate sa compromita din Internet un cont local, transformnd un
ceea ce i cres, te mult
atac de la distant, a ntr-unul generat de pe aceeas, i mas, ina,
s, ansele de succes. Acesta este s, i motivul pentru care au evoluat s, i mecanismele prin
care administratorii de ret, ea pot fort, a folosirea unor parole eficiente.
Att ret, elele Windows, ct s, i cele Linux ofera suport pentru securitatea bazata pe
jetoane hardware (security token2 ) ce s, i regenereaza parola la fiecare 30 sau 60 de
secunde. Odata sincronizat ceasul serverului cu ceasul jetonului hardware, utilizatorul
de cont s, i parola afis, ata de jeton la momentul autentificarii.

va folosi numele sau


Pret, ul
unei astfel de solut, ii este de 5-10 euro per jeton hardware, fiecare jeton trebuind
reconfigurat la 6 luni. Trebuie remarcat totus, i ca aceasta solut, ie nu rezolva riscurile de
securitate fizica a parolei.

Gestiunea parolelor n Unix


a ce precalcularea
Parolele erau, init, ial, stocate n fis, ierul /etc/passwd, dar, pe masur
3
a aparut

s, i stocarea parolelor comune a devenit posibila,


nevoia unui fis, ier separat, cu
permisiuni mai stricte, n care sunt stocate parolele. Acesta se numes, te /etc/shadow
ct s, i al /etc/passwd, este descris n sect, iunea 3.3.1.
s, i formatul sau,
Utilitarul pentru schimbarea parolei n Unix este passwd. Utilizatorul privilegiat (root)

poate schimba parola oricarui


utilizator, inclusiv a sa. Un utilizator neprivilegiat poate
schimba doar parola proprie. nainte de a schimba parola i este solicitata parola proprie

pentru a preveni situat, ia n care un utilizator uita o sesiune shell deschisa.


1
2

alina@valhalla:~$ passwd
Changing password for alina.
1

http://keepass.info/
http://en.wikipedia.org/wiki/Security_token
3
Un astfel de atac se numes, te dictionary attack : http://en.wikipedia.org/wiki/Dictionary_attack
2

CAPITOLUL 10. ELEMENTE DE SECURITATE


3
4
5
6

289

(current) UNIX password:


Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

se
Daca se dores, te obt, inerea unei parole us, or de ret, inut, dar care sa fie relativ sigura,
poate folosi utilitarul pwgen. pwgen genereaza n mod implicit parole de 8 caractere
(incluznd cifre):
1
2

alina@valhalla:~$ pwgen -N 1
uo3Pheis

3
4
5

alina@valhalla:~$ pwgen -N 2
Eeb7Aej9 Xoo0beir

Utilitarul permite personalizarea parolelor obt, inute. n exemplul de mai jos, parametrul
parametru -c de va defini
-n precizeaza faptul ca n parola va fi inclusa cel put, in o cifra,

lungimea parolei dorite. Ultima cifra reprezinta numarul de parole ce trebuie generate.
1
2

alina@valhalla:~$ pwgen -n -c 7 3
ahngeZ5 aiv5Iec bie3poR

10.2.4

Securitatea sistemului de fis, iere

, te asigurarea izolarii
utilizatorilor prin separarea
Securitatea sistemului de fis, iere urmares
fis, ierelor personale s, i prin definirea act, iunilor permise de utilizatori pe diverse sect, iuni
din ierarhia sistemului de fis, iere.
Fiecare utilizator dispune de o intrare (un director) n sistemul de fis, iere pentru care are
, te n /home. n Windows Vista, acest
drepturi depline. n Unix, acest director se gases
director este subdirector al C:\Users. Utilizatorul poate controla act, iunile permise pe
n sistemul de fis, iere nu pot fi
fis, ierele cont, inute n respectivul director. Unele intrari
folosite dect de utilizatorul privilegiat.

Controlul accesului
Controlul accesului la diverse elemente ale sistemului de fis, iere difera ntre sistemele
Windows s, i cele Unix.
n Windows, sistemul de fis, iere NTFS ofera de la versiunea 4.0 posibilitatea definirii unei
liste de acces pentru fiecare utilizator din sistem. Aceasta lista de acces este definita n
raport cu s, apte tipuri de act, iuni: Full Control, Modify, Read & Execute, List, Read, Write,
Special Permisions. Subiectul drepturilor de acces pe un sistem de fis, iere NTFS este
tratat mai pe larg n studiul de caz al acestui capitol n sect, iunea 10.6.1. Abordarea n
cazul Windows este o forma a mecanismului de control a accesului1 .
Abordarea folosita n Unix pentru definirea drepturilor de acces la sistemul de fis, iere este
o matrice de drepturi.
se folosesc trei trepte de privilegiu:
Pentru a obt, ine o matrice limitata,
1

http://en.wikipedia.org/wiki/Access_control_list

290

INTRODUCERE N SISTEME DE OPERARE


Tabelul 10.1: Matricea drepturilor de acces n Unix
citire (r)
scriere (w)
execut, ie (x)
utilizator
grup
alt, ii

utilizatorul (user) care det, ine fis, ierul;


grupul (group) care det, ine fis, ierul;
alt, i utilizatori (others).
Pentru fiecare dintre cele trei trepte de privilegiu sunt definite cte trei drepturi:

citire (read) permite vizualizarea cont, inutului unui director sau a unui fis, ier;
scriere (read) permite alterarea cont, inutului unui fis, ier sau director. Pentru
de
un director, alterarea cont, inutului nseamna posibilitatea s, tergerii sau crearii
fis, iere;

execut, ie (execute) permite execut, ia unui fis, ier s, i permite parcurgerea unui
director; daca un director nu are drept de execut, ie, nu poate fi parcurs (nu se
poate ajunge la fis, ierele s, i subdirectoarele cont, inute).
rezulta un total de 9
Avnd trei trepte de privilegiu s, i trei drepturi pentru fiecare treapta,
drepturi care pot fi configurate pentru un fis, ier dat. Forma liniarizata a matricei de acces
(s, i a celor 9 drepturi) este afis, ata de comanda ls cu opt, iunea de long listing (-l):
1
2

root@rosedu:~:~# ls -ld /var/svn/hfall/db/


drwxr-xr-x 6 hfall projects 4096 Jul 23 13:34 /var/svn/hfall/db/

n listing-ul de mai sus, utilizatorul asociat directorului /var/svn/hfall/db/,


(hfall), are drepturi complete (rwx), iar grupul asociat (projects) s, i ceilalt, i
utilizatori au drept de citire s, i execut, ie (r-x) (se poate vizualiza s, i parcurge directorul).
Forma liniarizata a matricei de acces pentru un fis, ier (afis, ata de comanda ls -l) este
prezentata n figura 10.1.

Figura 10.1: Permisiuni Unix

CAPITOLUL 10. ELEMENTE DE SECURITATE

291

Pentru a specifica mai succint drepturile de acces la un fis, ier, utilizatorii avansat, i Unix
prefera forma octala a drepturilor de acces la un fis, ier. n cadrul acestei forme, fiecare
drept de acces este nlocuit cu un bit. Astfel, n cazul listing-ului de mai sus, drepturile
de acces sunt:
1
2

rwx r-x r-x


111 101 101

Fiecare pereche de trei bit, i (asociata unei trepte de privilegiu) este tranformata ntr-o
Forma finala,
n octal, pentru drepturile de mai sus este, as, adar 755.
valoare octala.
n tabelul 10.2 sunt prezentate cteva exemple de asociere ntre forma literala s, i forma
octala a dreputurilor de acces pe fis, iere n Unix.
Tabelul 10.2: Permisiuni n format literal s, i octal
Format literal
Format binar
Format octal

r-xr----rw--w--wx
rwxr-xrwrwx--x--x
rw-r--r--

101
110
111
111
110

100
010
101
001
100

000
011
110
001
100

540
623
756
711
644

chown s, i chmod
, ii sistemului de fis, iere n Unix, utilitarele de baza sunt chown s, i
n administrarea securitat
proprietarului s, i a grupului caruia

chmod. Primul ofera posibilitatea schimbarii


i apart, ine
respectivul fis, ier, n vreme ce al doilea permite modificarea drepturilor.
1

root@kiwi:~# chown -R george:users test/

n exemplul de mai sus a fost efectuata o schimbare recursiva pentru toate fis, ierele
s, i subdirectoarele directorului test/. ntreg cont, inutul directorului test/ va apart, ine
utilizatorului george s, i grupului users.
Daca se dores, te doar modificarea utilizatorului sau grupului, se foloses, te doar o parte a
sintaxei:
1
2

razvan@valhalla:/tmp$ chown alina battleship


chown: changing ownership of battleship: Operation not permitted

3
4

razvan@valhalla:/tmp$ sudo bash

5
6

root@valhalla:/tmp# chown alina battleship

7
8
9

root@valhalla:/tmp# ls -l battleship
-rw-r--r-- 1 alina razvan 0 Sep 19 18:01 battleship

10
11

root@valhalla:/tmp# chown :shadow battleship

12
13
14

root@valhalla:/tmp# ls -l battleship
-rw-r--r-- 1 alina shadow 0 Sep 19 18:01 battleship

n exemplul de mai sus a fost schimbat utilizatorul s, i grupul fis, ierul /tmp/battleship
n alina, respectiv shadow. Se observa ca n Linux, un utilizator neprivilegiat nu

292

INTRODUCERE N SISTEME DE OPERARE

poate schimba det, inatorul


unui fis, ier. n Linux, comanda chown este folosita doar de

catre utilizatorul privilegiat. Pe alte Unixuri (spre exemplu, Solaris) comanda poate fi
folosita s, i de un utilizator neprivilegiat.
Comanda chmod permite modificarea drepturilor de acces ale unui fis, ier. Comanda
poate fi folosita doar de utilizatorul ce det, ine fis, ierul sau de utilizatorul privilegiat. Noile

drepturi ale fis, ierului pot fi precizate n forma literala sau octala.
Fie fis, ierul hello.c de mai jos:
1
2

root@kiwi:~# ls -l
hello.c -rw-r--r--

1 razvan new 81 Oct

6 21:35 hello.c

Drepturile pot fi
Pentru schimbarea drepturilor se va folosi mai nti forma literala.
precizate pentru oricare dintre cele trei niveluri de privilegiu: utilizator, grup, alt, i
u, g, o. Drepturile pot fi:
utilizatori printr-o singura litera:

adaugate
prin folosirea operatorului +;

nlaturate
prin folosirea operatorului -;

precizate explicit prin folosirea operatorului =.


1

root@kiwi:~# chmod o+x hello.c

2
3
4

root@kiwi:~# ls -l hello.c
-rw-r--r-x 1 razvan new 81 Oct

6 21:35 hello.c

5
6

root@kiwi:~# chmod u=rx hello.c

7
8
9
10

root@kiwi:~# ls -l hello.c
-r-xr--r-x 1 razvan new 81 Oct

6 21:35 hello.c

n exemplul de mai sus a fost mai nti adaugat


pentru restul utilizatorilor dreptul de
execut, ie, iar la al doilea pas s-a precizat explicit ca drepturile utilizatorului trebuie sa fie
rx adica doar citire s, i execut, ie.
n format octal, pentru a acorda toate drepturile utilizatorului (rwx), drepturi de citire s, i
execut, ie grupului (r-x), s, i doar drepturi de citire pentru restul utilizatorilor (r--) este

suficienta o singura comanda:


1

root@kiwi:~# chmod 754 hello.c

2
3
4

root@kiwi:~# ls -l hello.c
-rwxr-xr-- 1 razvan new 81 Oct

6 21:35 hello.c

umask
n sistemul de fis, iere se foloses, te un parametru
Pentru controlul drepturilor unei noi intrari
de restrict, ie numit masca de creare (file mode creation mask ). Drepturile efective ce
n sistemul de fis, iere se obt, in prin efectuarea operat, iei de S, I
vor fi atribuite unei noi intrari
, tii s, i permisiunile implicite (666 pentru fis, iere s, i 777
logic ntre valoarea inversata a mas
pentru directoare). Reprezentata matematic, operat, ia este default_perm & ~mask.
, tii se numes, te umask.
Comanda ce permite inspectarea s, i modificarea mas

CAPITOLUL 10. ELEMENTE DE SECURITATE

1
2

293

root@kiwi:~# umask
0022

3
4

root@kiwi:~# touch uso7_test1

5
6
7

root@kiwi:~# ls -l uso7_test1
-rw-r--r-- 1 razvan razvan 0 Nov 10 17:28 uso7_test1

8
9

root@kiwi:~# umask 027

10
11

root@kiwi:~# touch uso7_test2

12
13
14

ro0t@kiwi:~# ls -l uso7_test2
-rw-r----- 1 razvan razvan 0 Nov 10 17:28 uso7_test2

15
16

root@kiwi:~# mkdir uso7_test_dir

17
18
19

root@kiwi:~# ls -ld uso7_test_dir/


drwxr-x--- 2 razvan razvan 1024 Nov 10 17:29 uso7_test_dir

n listingul de mai sus, n prima faza masca are valoarea 0022. Acest lucru nseamna
ca un fis, ier nou creat (uso7_test1 va avea drepturile
1
2

666 & ~022 = 666 & 755 = 110 110 110 & 111 101 101 =
= 110 100 100 = 644 = rw- r-- r--

n ultimul pas, masca are valoarea 027. Directorul uso7_test_dir/ va fi creat cu


drepturile
1
2

777 & ~027 = 777 & 750 = 111 111 111 & 111 101 000 =
= 111 101 000 = 750 = rwx r-x ---

10.3

ntret, inerea sistemului

Dupa configurarea drepturilor de acces la nivelul sistemului de operare sau al sistemului


de fis, iere, unui sistem i trebuie asigurata mentenant, a. Aceasta presupune verificarea
periodica a nivelului de securitate a sistemului, a jurnalelor, a act, iunilor utilizatorilor s, i
, ii, iar
proceselor. Prevenirea atacurilor este cea mai buna forma de asigurare a securitat

un administrator de sistem profesionist va inspecta periodic sistemul s, i va lua masurilor

adecvate atunci cnd sigurant, a sistemului este periclitata.

10.3.1

Monitorizarea sistemului

Monitorizarea dinamica a sistemului


, te nivelul de ncarcare

Monitorizarea dinamica (n timp real) a sistemului urmares


a

diferitelor resurse hardware.


Astfel, pentru a determina gradul de ncarcare
a
nivelul de folosire a
procesorului se poate folosi comanda uptime. Pentru a urmari
memoriei RAM se poate folosi comanda free.

294

INTRODUCERE N SISTEME DE OPERARE

Comanda top (vezi sect, iunea 5.2.4) combina informat, iile oferite de comenzile uptime
s, i free.
1
2
3
4
5

top - 14:05:43 up 8:12, 2 users, load average: 1.01, 1.02, 1.00


Tasks: 61 total,
3 running, 58 sleeping,
0 stopped,
0 zombie
Cpu(s): 99.7% us, 0.3% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.0%
si
Mem:
256740k total,
254200k used,
2540k free,
12680k buffers
Swap:
289128k total,
1444k used,
287684k free,
41356k cached

6
7
8
9
10
11
12
13
14
15
16

PID
2490
14067
1
2
3
4
5
31
41

USER
www-data
root
root
root
root
root
root
root
root

PR
25
16
16
34
5
8
14
5
20

NI VIRT RES SHR S %CPU %MEM


TIME+ COMMAND
0 26204 18m 12m R 99.5 7.5 275:26.52 apache
0 2064 1036 1852 R 0.3 0.4
0:00.02 top
0 1504 512 1352 S 0.0 0.2
0:00.73 init
19
0
0
0 S 0.0 0.0
0:00.00 ksoftirqd/0
-10
0
0
0 S 0.0 0.0
0:00.00 events/0
-10
0
0
0 S 0.0 0.0
0:00.00 khelper
-10
0
0
0 S 0.0 0.0
0:00.00 kacpid
-10
0
0
0 S 0.0 0.0
0:03.15 kblockd/0
0
0
0
0 S 0.0 0.0
0:00.00 pdflush

Prima linie cont, ine (n acelas, i format) informat, iile oferite de comanda uptime: ora
intervalul de timp de la ultima init, ializare a sistemului (n cazul exemplului 8 ore
curenta,

s, i 12 minute), numarul
de utilizatori autentificat, i n sistem s, i ncarcarea
medie a

sistemului pentru ultimele 1, 5 sau 15 minute. O ncarcare


supraunitara este
echivalenta cu un sistem solicitat.

Liniile 4 s, i 5 ofera informat, iile specifice comenzii free. Linia 4 descrie ncarcarea
memoriei RAM, iar linia 5 indica nivelul de utilizare a partit, iei de swap. Folosirea unei
, i nsemnate de memorie din swap indica faptul ca memoria RAM este
cantitat
insuficienta pentru cerint, ele sistemului.

n exemplul de mai sus se observa ca procesorul este suprancarcat,


n vreme ce

memoria RAM este bine dimensionata (pentru ca memoria swap nu este folosita).
Inspectnd mai departe procesele cele mai relevante din punctul de vedere al
consumului de resurse se observa ca procesul apache a petrecut n procesor 275 de

minute, adica mai mult de jumatate


din timpul scurs de la ultima init, ializare a sistemului.
de asemenea, ca,
n momentul rularii
comenzii, procesul apache folosea
Se observa,
99.5% din procesor. Acesta este un comportament neobis, nuit. Pentru un sistem bine
configurat cele mai active procese vor reus, i la nivelul unei luni de zile sa ocupe 1-2
minute.
Concluzia analizei dinamice a sistemului de mai sus nu este ca resursele hardware
sunt insuficiente, ci ca unul dintre servicii (mai exact serviciul de web) are un
a ar trebui sa fie oprirea procesului apache s, i
comportament anormal. Prima masur
inspectarea configurat, iilor specifice acestui daemon.

discului
Monitorizarea utilizarii
O alta resursa importanta a unui sistem o reprezinta spat, iul liber de pe hard-disk.
Pentru aceasta trebuie monitorizat nivelul de ocupare a partit, iilor definite pe disc, dar s, i
dimensiunea unor directore s, i fis, iere.

CAPITOLUL 10. ELEMENTE DE SECURITATE

295

Spat, iul liber pentru partit, iile disculurilor sistemului se poate vizualiza cu ajutorul comenzii
df:
1
2
3
4
5

root@cursuri:/home/courses#
Filesystem
Size
/dev/hda1
4.6G
tmpfs
126M
/dev/hda6
32G

df -h
Used Avail Use% Mounted on
3.2G 1.2G 74% /
4.0K 126M
1% /dev/shm
30G 1.2G 97% /home

, it n doua partit, ii: una folosita pentru


n exemplul de mai sus spat, iul pe disc este mpart
rularea sistemului (montata ca /) s, i o a doua folosita pentru stocarea datelor utilizatorilor
(montata ca /home). n acest fel, chiar daca spat, iul pe partit, ia /home este epuizat,
acest lucru nu va afecta funct, ionarea sistemului.
n cazul n care se dores, te inspectarea dimensiunii unui fis, ier anume se poate folosi
comanda ls sau comanda stat:
1
2

root@rosedu:~# ls -lh /var/log/apache2/access.log


-rw-r----- 1 root adm 7.2M Sep 19 20:12 /var/log/apache2/access.log

3
4
5

root@rosedu:~# stat -c %s /var/log/apache2/access.log


7482956

Pentru a obt, ine dimensiunea unui director se poate folosi comanda du:
1
2

root@cursuri:/home/courses# du -sh rc
155M
rc

Monitorizarea serviciilor de ret, ea


Pentru monitorizarea serviciilor de ret, ea disponibile pe stat, ia locala este folosit utilitarul
netstat.
a niciun parametru, netstat va afis, a o lista cu toate conexiunile active
Apelat far
(porturile aflate n starea de listen se considera inactive). O utilizare frecventa a acestui
, te testarea funct, ionalitat
, ii anumitor servere (HTTP, FTP etc.). n general,
utilitar urmares
aceste servere as, teapta conexiuni TCP sau UDP pe anumite porturi.
Pentru a obt, ine lista tuturor conexiunilor TCP, se poate folosi:
1
2
3
4
5
6
7

root@rosedu:~# netstat --tcp --all


Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address
Foreign Address
tcp
0
0 *:ssh
*:*
tcp
0
0 *:smtp
*:*
tcp
0
0 *:git
*:*
[..]

State
LISTEN
LISTEN
LISTEN

Pentru a verifica funct, ionarea diferitelor servere instalate, care asculta eventuale cereri
de conectare, este utila comanda:
1
2
3
4
5
6

root@rosedu:~# netstat --tcp --listening --numeric-ports


Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address
Foreign Address
State
tcp
0
0 0.0.0.0:22
0.0.0.0:*
LISTEN
tcp
0
0 0.0.0.0:25
0.0.0.0:*
LISTEN
tcp
0
0 0.0.0.0:9418
0.0.0.0:*
LISTEN

296
7
8

tcp
[..]

INTRODUCERE N SISTEME DE OPERARE


0

0 127.0.0.1:3306

0.0.0.0:*

LISTEN

Se observa ca sistemul mas, ina locala exista servere care asculta pe portul 22 (SSH),
25 (SMTP) sau 3306 (mysql). As, adar, server-ele SSH, SMTP s, i mysql sunt funct, ionale.
Pentru vizualizarea conexiunilor UDP, se poate utiliza parametrul -u sau --udp
Sa presupunem ca se descopera un server care funct, ioneaza (se afla n starea LISTEN)

pe portul 22. Pentru oprirea acestui server putem opri procesul corespunzator.
nainte
trebuie aflat pid-ul acestui proces (opt, iunea -p sau --program):
nsa,
1
2
3
4
5
6
7

root@rosedu:~# netstat --tcp --listening --program --numeric-ports


Active Interne connections (only servers)
Proto Recv-Q Send-Q Local Address
Foreign Address State
PID/Program
name
tcp
0
0 0.0.0.0:80
0.0.0.0:*
LISTEN
5721/apache
[..]
tcp6
0
0 :::22
:::*
LISTEN
5515/sshd
tcp6
0
0 ::1:25
:::*
LISTEN
5505/master

Ulterior, se poate trimite un semnal KILL catre


procesul cu numarul
5515.
1

root@rosedu:~# kill -KILL 5515

, ii utilizatorilor
Monitorizarea activitat
Pentru a determina ce utilizatori sunt autentificat, i la un moment dat n sistem se foloses, te
comanda who:
1
2
3

root@cursuri:~# who
so
pts/0
Aug 10 13:50 (anaconda.cs.pub.ro)
ot
pts/1
Aug 10 14:05 (kiwi.cs.pub.ro)

Din exemplul de mai sus se poate deduce ca n sistem sunt autentificat, i utilizatorii so
s, i ot. Ambii utilizatori au acces n sistem prin emulatoare de terminal (pts), cu alte
Sesiunea utilizatorului so a fost init, iata
cuvinte prin intermediul unor sesiuni la distant, a.
la ora 13:50 de pe stat, ia anaconda.cs.pub.ro, n vreme ce sesiunea utilizatorului
ot a fost nceputa la 14:05 de pe sistemul kiwi.cs.pub.ro.
se poate folosi
Pentru a determina ce utilizatori au folosit sistemul n ultima perioada,
comanda last:
1
2
3
4
5
6

root@swarm:~# last -5
root
pts/1
141.85.37.227
root
pts/1
188.27.105.225
andreif pts/2
81.181.250.24
andreif pts/2
81.181.250.24
andreif pts/2
81.181.250.24

Sat
Sat
Sat
Sat
Sat

Sep
Sep
Sep
Sep
Sep

19
19
19
19
19

20:24
18:21
14:55
14:25
14:01

still logged in
18:39 (00:17)
14:56 (00:00)
14:41 (00:15)
14:25 (00:24)

7
8

wtmp begins Tue Sep

10.3.2

1 08:01:55 2009

Jurnalizarea s, i gestiunea jurnalelor

Majoritatea serviciilor sistemului ruleaza ca daemoni (vezi sect, iunea 5.3) s, i nu pot
comunica direct cu utilizatorul. Utilizatorul interact, ioneaza cu serviciile prin intermediul

CAPITOLUL 10. ELEMENTE DE SECURITATE

297

semnalelor s, i a fis, ierelor de configurare, iar serviciile ofera informat, ii de stare, raportare
s, i funct, ionare prin intermediul fis, ierelor jurnal (server logs).
Fis, ierele jurnal pot avea diverse formate, dar, n general, fiecare linie de tip jurnal
precizeaza ora s, i data, adresa IP cu care serviciul a comunicat s, i o descriere a
mesajului. Linia de mai jos este o parte dintr-un jurnal al unui server Apache n
Common Log Format. n cazul de fat, a este vorba de o conexiune init, iata de web
crawler-ul de la Yahoo!1 .
1

72.30.78.249 - - [19/Sep/2009:20:29:26 +0300] "GET /tag/picasa/ HTTP/1.0"


200 6331 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.
yahoo.com/help/us/ysearch/slurp)"

Pe un sistem Unix, jurnalele se gasesc,


de obicei, n /var/log/:
1
2
3
4
5
6

root@swarm:~# ls /var/log
apache2
daemon.log.4.gz
apt
debug
.0
auth.log
dmesg
.1
auth.log.0
dmesg.0
.2.gz
[...]

kern.log
kern.log.1

mail.log.4
mail.log.5.gz

syslog
syslog

lastlog

mail.log.6

syslog

lpr.log

mail.log.6.gz

syslog

Crearea jurnalelor

sysklogd este un utilitar care permite lucrul cu mesajele sistem s, i cele generate de

kernel. Pe scurt, aplicat, iile trimit diferite mesaje catre


sysklogd iar acesta, utiliznd
un fis, ier de configurare, depune aceste mesaje n anumite fis, iere, le scrie n anumite

console sau eventual le trimite catre


o alta mas, ina.
n Debian utilitarul sysklogd este disponibil n pachetul cu acelas, i nume.
Fis, ierul de configurare este /etc/syslog.conf. Acest fis, ier cont, ine reguli care
definesc modul n care sunt stocate mesajele de jurnalizare transmise de serviciile
sistemului.
Des, i este foarte util pentru monitorizarea sistemului, sysklogd prezinta s, i unele
dezavantaje. De exemplu, o aplicat, ie neglijenta ar putea genera foarte multe mesaje,
ceea ce ar putea duce la umplerea discului s, i la instabilitatea ntregului sistem. Trimirea

mai put, in importanta n ret, ea, ar rezolva aceasta


mesajelor catre
o alta mas, ina,

problema.
Unele aplicat, ii, precum serverul web Apache, nu folosesc sysklogd, ci implementeaza
module proprii de jurnalizare.

Inspectarea jurnalelor
Pentru citirea jurnalelor se poate folosi orice utilitare de editare sau vizualizare, de la vi
la less. Datorita faptului ca mesajele recente sunt atas, ate la sfrs, itul fis, ierului jurnal, un
utilitar des folosit este tail.
1

http://help.yahoo.com/l/us/yahoo/search/webcrawler/

298

INTRODUCERE N SISTEME DE OPERARE

Pentru inspectarea dinamica a jurnalelor se foloses, te comanda tail cu opt, iunea -f.
Comanda tail afis, eaza n mod implicit ultimele 10 linii dintr-un fis, ier dat. Prin folosirea

parametrului -f se asigura afis, area dinamica a liniilor adaugate


la respectivul fis, ier.
, ii
Comanda de mai jos este un exemplu de folosire pentru inspectarea dinamica a activitat
serviciilor de e-mail:
1

root@cursuri:/var/log# tail -f /var/log/mail.log

Rotirea jurnalelor
spat, iului de pe disc de fis, ierele jurnal, sistemele Unix
Pentru a evita problema ocuparii
dispun de utilitarul logrotate. Acesta permite reutilizarea fis, ierelor de jurnalizare
amnal

, it o anumita dimensiune. n momentul n care


zilnic, sapt
sau daca au depas
condit, ia de timp sau spat, iu a fost ndeplinita se efectueaza o rotat, ie.
O rotat, ie nseama salvarea cont, inutul jurnalului ntr-un fis, ier de backup cu un nume
Fis, ierul de backup copia avnd
format din numele original la care se adauga un numar.
mai mare cu ct este mai veche (test.log.1, test.log.2 etc). La fiecare rulare,
un numar

logrotate va s, terge fis, ierul cel mai vechi s, i le va actualiza pe celelalte corespunzator.
n
general, fis, ierele de backup sunt arhivate s, i comprimate.
Mai jos sunt prezentate fis, ierele de jurnalizare pentru un server web Apache:
1
2
3
4
5
6
7
8

root@swarm:~# ls -l /var/log/apache2/
total 35092
-rw-r----- 1 root adm
8178409 Sep 19
-rw-r----- 1 root adm 10545752 Sep 13
-rw-r----- 1 root adm
549344 Jul 12
-rw-r----- 1 root adm
712546 Jul 5
-rw-r----- 1 root adm
845592 Jun 28
[...]

20:45
03:35
03:36
03:33
03:35

access.log
access.log.1
access.log.10.gz
access.log.11.gz
access.log.12.gz

logrotate este de obicei rulat zilnic de catre


serviciul de planificare periodica (cron).
de configurare este /etc/logrotate.conf.
Fis, ierul sau

Alte utilitare de jurnalizare


Utilitarul dmesg poate fi folosit pentru afis, area informat, iilor de la init, ializarea sistemului.
Acestea sunt mesaje ale nucleului s, i pot fi obt, inute s, i prin vizualizarea directa a jurnalelor

de nucleu. Pentru configurat, iile implicite, jurnalele de nucleu sunt pastrate


n fis, ierul
/var/log/kern.log.

10.3.3

Limitarea drepturilor

Sistemele Unix ofera suport n principal doar pentru doua niveluri de privilegiu: utilizatori
neprivilegiat, i s, i administrator (root). n practica este necesar un grad mai ridicat de
flexibilitate n acordarea privilegiilor, pentru a permite utilizatorilor obis, nuit, i rularea unor
aplicat, ii privilegiate. n acelas, i timp, un utilizator obis, nuit poate abuza de resursele care

CAPITOLUL 10. ELEMENTE DE SECURITATE

299

i sunt puse la dispozit, ie s, i poate, accidental sau intent, ionat, conduce la destabilizarea
sau suspendarea sistemului.
, i pentru limitarea sau extinderea
De accea, un sistem de operare va oferi facilitat
privilegiilor la nivel de aplicat, ie sau la nivel de utilizator.

Folosirea atributelor setuid s, i setgid


O categorie aparte de aplicat, ii o reprezinta utilitarele ce necesita resurse speciale din
nucleu. Pentru a putea da posibilitatea s, i utilizatorilor neprivilegiat, i de a rula astfel de
programe, identificatorul utilizatorului (uid) se schimba pe parcursul execut, iei
programului. La ncheierea unei astfel de act, iuni se revine la identificatorul utilizatorului
ce a lansat aplicat, ia.
ntr-un sistem Linux, acest lucru este realizat prin folosirea atributelor setuid s, i
Aceste atribute sunt marcate ca permisiuni de acces pentru un fis, ier
acelui executabil, procesul creat ruleaza nu mai ruleaza
executabil. n momentul rularii
cu drepturile utilizatorului care a lansat programul, ci cu drepturile utilizatorului ce
det, ine fis, ierul; daca acest utilizator este root, atunci procesul are drepturi privilegiate.

setgid.

Pentru activarea atributelor setuid s, i setgid se foloses, te utilitarul chmod. Bit, ii

n octal care precede cele 3


asociat, i celor doua atribute se gasesc
ntr-un numar
numere n octal asociate drepturilor de acces:
1
2

root@kiwi:~# ls -l a.out
-rwxr-xr-x 1 razvan razvan 13564 Jul

9 20:49 a.out

3
4

root@kiwi:~# chmod 2755 a.out

5
6
7

root@kiwi:~# ls -l a.out
-rwxr-sr-x 1 razvan razvan 13564 Jul

9 20:49 a.out

8
9

root@kiwi:~# chmod 4755 a.out

10
11
12

root@kiwi:~# ls -l a.out
-rwsr-xr-x 1 razvan razvan 13564 Jul

9 20:49 a.out

n exemplul de mai sus, prima rulare a comenzii chmod activeaza bitul asociat setgid
(folosind valoarea octala 2). A doua rulare a comenzii chmod activeaza bitul asociat
setuid (folosind valoarea octala 4). Alternativ, bitul asociat setgid poate fi activat
folosind sintaxa g+s, iar bitul asociat setuid cu ajutorul sintaxei u+s ca argumente la
chmod.
Trebuie avut n vedere ca marcarea unui executabil cu dreptul de suid reprezinta un
potent, ial risc de securitate. Daca pe parcursul execut, iei utilizatorul reus, es, te sa fort, eze
terminarea anormala a programului nainte de refacerea uid-ului, se poate obt, ine acces
la un shell de root. Din acest motiv un pas important n securizarea unui sistem este
determinarea tuturor executabilelor ce au activat atributul setuid, s, i dezactivarea
acestuia de la aplicat, iilor nefolosite. Aceast lucru se poate realiza cu ajutorul comenzii
find (vezi sect, iunea 12.6.3).
1

root@kiwi:~# find / -perm -4000 -o -perm -2000 -type f -print

300

INTRODUCERE N SISTEME DE OPERARE

Printre utilitarele care au nevoie de activarea atributului setuid pentru a putea fi rulate

de catre
utilizatori obis, nuit, i se afla ping s, i traceroute.

acinii

Schimbarea rad
sistemului de fis, iere (chroot)
Unul dintre mecanismele extrem de eficiente n securizarea unor servicii se numes, te
, ii unui serviciu n raport cu sistemul de
chroot. Acesta presupune dimininuarea vizibilitat
fis, iere.
Folosirea mecanismului chroot are rolul de reducere a riscurilor de securitate. Daca un
, i ntr-un proces ce foloses, te chroot,
atacator obt, ine acces cu ajutorul unei vulnerabilitat
acin
a vizibil
acesta va avea acces limitat la sistemul de fis, iere. Noul director rad
procesului poarta numele de chroot jail.
datorita faptului ca
Pe de alta parte, folosirea acestui mecanism este destul de dificila,
n general programele sunt compilate pentru a folosi biblioteci (vezi sect, iunea 11.4). Din
bibliotecile trebuie incluse n directorul vazut

acin
a.
O
aceasta cauza,
de proces ca rad
a biblioteci.
alta solut, ie este compilarea statica a programelor, far

Fie serverul de DNS bind9. Daca se modifica scriptul de init, ializare adaugnd
opt, iunea
acin
a a ntregului
-t /var/dns, serviciul va porni considernd /var/dns/ ca rad

sistem de fis, iere. Primul fis, ier cautat


va fi /etc/bind/named.conf, astfel ca nainte
de lansarea serviciului va trebui copiat fis, ierul /etc/bind/named.conf n
/var/dns/etc/bind/named.conf. Pe lnga acest fis, ier vor trebui copiate fis, ierele
serviciului de DNS), fis, ierele de jurnalizare, dar s, i unele
de zona (necesare configurarii
fis, iere speciale gen /dev/null sau /dev/log.

Majoritatea programelor ce implementeaza serviciile UNIX ofera posibilitatea rularii


procesului cu sistemul de fis, iere limitat. Daca programul nu ofera aceasta posibilitate,
sau daca se dores, te testarea mecanismului, se poate folosi utilitarul chroot.
Utilitarul chroot este implementarea la nivelul shellului a mecanismului de schimbare
acinii

a rad
sistemului de fis, iere vazut
de un proces.
n exemplul de mai jos se ruleaza utilitarul chroot ntr-un nou director /root/test.
implicit se executa interpretorul de
Daca nu se specifica ce comanda se ruleaza,
a catre

comenzi precizat de variabila de mediu SHELL. Cum /bin/sh este o legatur


/bin/bash, este necesara copierea sa n viitorul sistem de fis, iere.
1
2

root@kiwi:~# pwd
/root

3
4

root@kiwi:~# mkdir test

5
6

root@kiwi:~# mkdir test/bin

7
8

root@kiwi:~# cp /bin/bash test/bin/

9
10
11

root@kiwi:~# chroot /root/test


chroot: cannot run command /bin/bash: No such file or directory

12
13
14
15

root@kiwi:~# ldd /bin/bash


libncurses.so.5 => /lib/libncurses.so.5 (0x4001c000)
libdl.so.2 => /lib/tls/libdl.so.2 (0x4005b000)

CAPITOLUL 10. ELEMENTE DE SECURITATE


16
17
18

301

libc.so.6 => /lib/tls/libc.so.6 (0x4005f000)


/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
root@kiwi:~# mkdir test/lib

19
20

root@kiwi:~# cp /lib/libncurses.so.5 /lib/libdl.so.2 test/lib

21
22

root@kiwi:~# cp /lib/libc.so.6 test/lib

23
24

root@kiwi:~# chroot /root/test

25
26
27

root@kiwi:/# pwd
/

n prima faza,
rularea comenzii bash prin chroot nu poate fi realizata.

Se observa ca,
Motivul este absent, a bibliotecilor. Se afis, eaza apoi lista bibliotecilor necesare bash, iar
respectivele biblioteci sunt apoi copiate n viitorul sistem de fis, iere. Comanda chroot
rezultnd un prompt ntr-un sistem de fis, iere ce are doar 2
poate fi acum executata,
directoare s, i 4 fis, iere. Se pot totus, i rula comenzile interne shellului bash.

sudo
Utilitarul sudo permite utilizatorilor neprivilegiat, i sa ruleze unele comenzi avnd
identitatea (uid-ul) altui utilizator (n general a utilizatorului root). Utilitarul sudo poate fi
folosit pentru a oferi privilegii limitate anumitor utilizatori s, i a evita astfel folosirea
contului root; privilegiile acestuia pot deveni o problema n cazul n care contul este
compromis.
Controlul utilizatorilor care au dreptul sa ruleze comenzi privilegiate, precum s, i lista

exacta a comenzilor este pastrat


a n fis, ierul /etc/sudoers. Fis, ierul are n mod
implicit doar drepturi de citire.
Pagina de manual ment, ioneaza The sudoers file should always be edited by the visudo.
Utilitarul visudo evita oferirea unor drepturi provizorii de scriere s, i minimizeaza astfel
alte riscuri de securitate.
La lansarea unei comenzi sudo, dupa verificarea fis, ierului /etc/sudoers va trebui
introdusa parola utilizatorului ce a lansat comanda sudo. Daca se dores, te rularea
a solicitarea parolei (risc de securitate), se
comenzilor privilegiate configurate far
foloses, te tag-ul NOPASSWD n fis, ierul de configurare:
1

razvan

ALL=(ALL) NOPASSWD: ALL

Listingul de mai sus este o linie din fis, ierul /etc/sudoers. Utilizatorul razvan poate
rula n numele tuturor utilizatorilor din sistem (ALL=(ALL)) orice comanda (ALL), fara
a i fi solicitata parola (NOPASSWD).

Pentru exemplul urmator


sa presupunem ca a fost dezactivat atributul setuid din
cadrul executabilului /bin/ping.
Pentru a permite utilizatorului rookie sa
foloseasca comanda ping, administratorul va trebui sa adauge n fis, ierul

/etc/sudoers urmatoarea
linie:
1

rookie ALL=(ALL) /bin/ping

Daca utilizatorul rookie ncearca rularea unui interpretor de comenzi cu drepturi

privilegiate, operat, ia es, ueaza:

302

1
2

INTRODUCERE N SISTEME DE OPERARE

rookie@kiwi:~$ sudo /bin/bash


Sorry, user rookie is not allowed to execute /bin/bash as root on
localhost.

Daca se ncearca rularea comenzii ping, fara a folosi sudo, se obt, ine din nou mesaj
de eroare:
1
2

rookie@kiwi:~$ /bin/ping 141.85.99.1


-su: /bin/ping: Permission denied

Folosirea comenzii sudo impune parcurgerea fis, ierului /etc/sudoers s, i permite


rularea executabilului /bin/ping:
1
2
3

rookie@kiwi:~$ sudo /bin/ping 141.85.99.1


PING 141.85.37.1 (141.85.37.1): 56 data bytes
64 bytes from 141.85.37.1: icmp_seq=0 ttl=64 time=0.5 ms

a a avea o corespondent, a n fis, ierul /etc/sudoers


Rularea unei comenzi sudo far
va fi jurnalizata ca un incident de securitate. Pentru a verifica lista comenzilor ce pot fi
rulate ca root se poate folosi opt, iunea -l a comenzii sudo:
1
2
3

rookie@kiwi:~$ sudo -l
User rookie may run the following commands on this host:
(ALL) /bin/ping

Limitarea resurselor folosite de un proces sau utilizator


Utilitarul ulimit permite controlul resurselor alocate pentru un proces pornit din

interpretorul de comenzi. Pentru inspectarea limitarilor


curente se poate se foloses, te
argumentul -a:
1
2
3
4
5
6
7
8

root@kiwi:~# ulimit -a
core file size
data seg size
scheduling priority
file size
pending signals
max locked memory
[...]

(blocks, -c) 0
(kbytes, -d) unlimited
(-e) 0
(blocks, -f) unlimited
(-i) 16382
(kbytes, -l) 64

9
10

root@kiwi:~# ulimit -n 2048

11
12
13

root@kiwi:~# ulimit -n
2048

n exemplu de mai sus a fost realizata o listare a tuturor limitarilor


curente, pentru ca apoi

sa fie redefinit numarul


maxim de fis, iere deschise la 2048.
n scopul prevenirii unui atac DoS local (cauzat de crearea unui numar
de procese
Daca,

extrem de mare), se dores, te limitarea numarului


de procese pentru utilizatorul privilegiat,

se recomanda adaugarea
n fis, ierul /root/.bashrc a unei limite de procese:
1

ulimit -u 1024

a a fi nsa
Utilitarul ulimit permite limitarea drepturilor la nivelul unui proces far

persistente. La repornirea sistemului, configurarile


realizate se vor pierde. Pentru a

CAPITOLUL 10. ELEMENTE DE SECURITATE

303

asigura persistent, a schimbarilor,


pe un sistem Linux se poate folosi fis, ierul
/etc/security/limits.conf. Acest fis, ier reprezinta un mecanism eficient
pentru limitarea resurselor disponibile unui utilizator sau unui grup de utilizatori.
Se pot defini doua tipuri de limite, denumite limite software s, i limite hardware. La
, irea unei limite software se genereaza un mesaj de atent, ionare. La depas
, irea
depas
hardware procesul n cauza este terminat.
unei limitari
Sintaxa fis, ierului se bazeaza pe definirea de reguli. O regula are patru elemente:

t, inta: utilizatorii sau grupurile pentru care se aplica respectiva regula;


regulile pot fi definite ca software sau hardware;
tipul de regula:

tipul de limitare: este precizat parametrul care este limitat;


limitarea: valoarea la care se realizeaza limitarea.

Ca exemplu, se presupune ca se dores, te limitarea numarului


de procese ale utilizatorului
, irea limitei de 20 de procese sa fie generat un mesaj de
rookie la 35, iar la depas

simultane permise
avertisment. n plus se dores, te limitarea numarului
de autentificari

utilizatorului rookie la 10. Pentru aceasta vom adauga


n fis, ierul /etc/security/

limits.conf urmatoarele trei linii:


1
2
3

rookie
rookie
rookie

soft
hard
-

nproc
nproc
maxlogins

20
35
10

Limitarea spat, iului ocupat pe disc


Limitarea spat, iului ocupat de fis, ierele unui utilizator se realizeaza prin folosirea de cote.
n Linux, acest lucru este realizat cu ajutorul utilitarului quota. ntruct configurarea
, es, te domeniul acoperit de aceasta carte, recomandam
cititorului sa
acestui utilitar depas
parcurga unul din multiplele tutoriale din Internet legat de configurarea cotelor n Linux.

10.4

Atacuri de ret, ea

Privite ca forma principala de act, iune a crackerilor, atacurile de ret, ea nu trebuie sa


constituie cunos, tint, e interzise sau privite cu suspiciune. nt, elegerea modului n care un
atac este produs, a condit, iilor care faciliteaza producerea acestuia s, i a efectelor
ulterioare sunt esent, iale pentru a proteja o ret, ea de calculatoare sau pentru a defini
politicile de securitate asociate. Cunos, tint, ele s, i deprinderile legate de atacurile de ret, ea
sunt necesare ethical hacker -ilor, persoane specializate n forme de testare a
sistemelor informatice pentru securizarea acestora.

10.4.1

Tipuri de atacuri n ret, ea

Atacurile de ret, ea sunt clasificate n funct, ie de gravitate n trei categorii: atacuri de


recunoas, tere, atacuri DoS, s, i atacuri de obt, inere a accesului.

304

INTRODUCERE N SISTEME DE OPERARE

Atacurile de recunoas, tere nu sunt atacuri propriu-zise, ci de obicei constituie faza


de investigare, a unui atac (vezi sect, iunea 10.4). Cel mai simplu atac de
init, iala,
recunoas, tere poate fi generat printr-un script ce inventariaza stat, iile dintr-o ret, ea
a cu serviciile rulate pe o
folosind pachete de ping. Pentru a obt, ine informat, ii n legatur
mas, ina se poate folosi o aplicat, ie de scanat porturi (vezi sect, iunea 10.4.3). Aplicat, iile
mai complexe de recunoas, tere ofera nu numai lista serviciilor, dar s, i o lista a posibilelor
, i. Un astfel de utilitar este Nessus1 .
vulnerabilitat
Atacurile DoS (Denial of Service) au ca scop congestionarea unei ret, ele, a unui server
, ii. Se poate distinge
sau doar a unui serviciu, n scopul reducerii sau opririi funct, ionalitat
ntre atacurile clasice DoS, bazate n general pe flooding, s, i atacurile DoS distribuite,
ct mai
numite DDoS, ce au la baza un mecanism de propagare (un virus) pe un numar

mare de destinat, ii s, i sincronizarea atacului DoS catre


o t, inta.
foate mare de pachete venite ntr-un interval scurt de timp.
Un flood reprezinta un numar
Un trafic ce poate fi interpretat drept flood la nivelul ruterului de acces n ret, eua locala
poate fi tratat drept trafic normal n nucleul Internetului. Pentru tehnologiile actuale un
flood este definit astfel:
de 100.000-150.000 de pachete pe
la nivelul unui switch de nivel 2 un numar

secunda;
un flood are
la nivelul unui ruter de acces (ce conecteaza o ret, ea locala)

8.000-12.000 de pachete pe secunda;

n nucleul Internetului un trafic de milioane de pachete pe secunda poate fi tratat


drept trafic legitim.
, ii de prelucrare a unui volum de pachete de ordinul zecilor de mii pe
n ciuda capacitat
complexitatea adaugat

secunda,
a de modele de flood specifice poate reduce limita de
pachete pe secunda la cteva sute.
foarte mare de pachete ICMP (de
ICMP flooding se bazeaza pe trimiterea unui numar
, ime de banda disponibila.
Cel mai adesea atacul este
tip ping), consumnd ntreaga lat
, i utilitarelor
prevenit prin filtrarea ntreg traficului ICMP, cu costul pierderii funct, ionalitat
ping s, i traceroute.
Atacul UDP flooding are efecte puternice cnd foloses, te drept t, inta porturile 7 s, i 19,
adica serviciile de echo s, i chargen. Aceste servicii fiind rar folosite, n ret, ele locale
a un impact real asupra funct, ionarii
ret, elei.
pot fi oprite de firewall-ul de intrare n LAN, far
Atacurile bazate pe flooding sunt n general combinate cu un atac de tip spoofing, prin
care se genereaza adrese sursa fictive s, i diferite pentru pachetele din flood. n lipsa
, irii unui numar
limita de pachete per sursa
unui atac spoofing, o filtrare pe baza depas
, ii
ar elimina atacul flooding. Atacul spoofing asigura n acelas, i timp ascunderea identitat
atacatorului. n plus, daca destinat, ia atacului bazat pe flooding nu este o sursa t, inta ci
adresa de difuzare a unei ret, ele, toate echipamentele din respectiva ret, ea vor ncerca

sa raspund
a unei surse ce nu exista n realitate, atacul devenind un atac de tip DDoS s, i
se va numi un atac smurf.
Atacurile DDoS pornesc de la puterea enorma de calcul disponibila n ret, elele actuale
locale. Unele dintre aceste atacuri pot fi neintent, ionate, precum n cazul Slashdot effect.

,i
Numele vine de la vestitul site Slashdot, care a postat un link catre
un site cu capabilitat
1

http://www.nessus.org/nessus/

CAPITOLUL 10. ELEMENTE DE SECURITATE

305

mai mici. Cnd foarte mult, i utilizatori au ncercat sa acceseze respectivul site, efectul a
fost echivalent cu un atac DoS.
Atacurile de obt, inere a accesului au impactul cel mai mare, deoarece prin obt, inerea
accesului la un serviciu cel mai adesea pot fi compromise s, i alte servicii sau mas, ini.
O pondere importanta n atacurile de obt, inere a accesului o au atacurile bazate pe
, ii aplicat, iilor web. Subiectul este unul amplu, iar cei ce vor sa
exploatarea vulnerabilitat

urmareasc
a numeroasele metode de exploatare a riscurilor de securitate ar trebui sa
parcurga cartea lui Joel Scambray, Hacking Exposed Web Applications [24].
Atacurile de obt, inere a accesului pot avea drept t, inta s, i tehnologiile din spatele aplicat, iilor
important de atacuri fiind direct, ionat mpotriva bazelor de date. Cel mai
web, un numar
cunoscut astfel de atac este inserarea de cod SQL (SQL Injection). Acest atac se
bazeaza pe modul direct de interogare a bazei de date.
1

SELECT X from TABLE where user = $user_input AND pass = $pass_input

Presupunnd scriptul de mai sus, daca la introducerea n cmpul utilizator a unui nume
valid de utilizator urmat OR -- (n SQL -- defines, te un comentariu), operat, ia de select, ie
devine:
1

SELECT X from TABLE where user = $xxx OR -- AND pass = nu_conteaza

s, i va fi validata pertru orice nume de utilizator aflat n baza de date. Mergnd mai
departe se poate introduce n cmpul utilizator xxx OR 1=1 OR --, aceasta
garantnd accesul indiferent daca utilizatorul xxx exista sau nu n baza de date.
a prin funct, ii
Pentru a preveni un astfel de atac, interogarea bazei de date trebuie facut
de biblioteca s, i nu direct prin select.
unui numar
mare de atacuri. O astfel de
Exista aplicat, ii ce ofera posibilitatea lansarii
1
, ilor (efectuata,

aplicat, ie este metasploit . Dupa o faza de determinare a vulnerabilitat


, ile gasite

spre exemplu cu Nessus) se pot selecta vulnerabilitat


s, i pot fi lansate simultan
mai multe atacuri de obt, inere a accesului.
Dincolo de not, iunile tehnice legate de atacurile de ret, ea, nu trebuie pierdut din vedere
riscul de securitate adus de utilizatorii neglijent, i din ret, ea. Chiar s, i n cazul unor

utilizatori responsabili, nu trebuie ignorate riscurile unui atac bazat pe inginerie sociala.

Nu este o ntmplare ca cel mai cunoscut cracker este Kevin Mitnik, ale carui
atacuri
a pe o buna nt, elegere a modului de gndire a utilizatorilor s, i
s-au bazat n mare masur
a administratorilor din ret, elele actuale.

10.4.2

Virus, i, viermi, troieni

Un virus este un program sau doar o secvent, a de cod ce se atas, eaza altor
a cunos, tint, a sau acceptul utilizatorului. Un virus include alaturi

fis, iere executabile far


, i de replicare prin inserare n codul altei
de mecanismele de execut, ie s, i modalitat
aplicat, ii.
1

http://www.metasploit.com

306

INTRODUCERE N SISTEME DE OPERARE

Clasificarea virus, ilor n funct, ie de modul de replicare distinge ntre mai multe tipuri de
virus, i, dintre care cei mai ntlnit, i sunt: virus, i de email, de macro, bombe logice, virus, i
de boot, viermi s, i troieni.
Simpla prezent, a a unui fis, ier infectat pe un calculator nu este echivalenta cu infectarea

sistemului. Pentru a infecta sistemul, un virus trebuie sa fie executat cel put, in o data.
a informarea utilizatorului).
Unele aplicat, ii ruleaza cod executabil n mod automat (far
Un exemplu este rularea fis, ierului autorun.inf1 la montarea unui CD-ROM sau USB
stick.
Email-ul este unul dintre modurile principale de propagare a virus, ilor. Virus, ii de email
sunt cont, inut, i n atas, amentul emailului, deseori avnd extensia schimbata (cel mai
adesea n extensie specifica imaginilor). Aplicat, ia t, inta a unui astfel de virus este

clientul de email. Datorita numarului


mare de utilizatori ai Microsoft Outlook, o mare
parte a acestor virus, i sunt dezvoltat, i special pentru aceasta aplicat, ie.
Odata executat un atas, ament de email infectat, virusul se ncarca n memoria RAM s, i
sa se multiplice. Pentru aceasta va cauta

va urmari
lista de adrese construite de clientul
de email (address book). Majoritatea client, ilor de email creeaza lista de adrese n mod
a consultarea utilizatorului, s, i nu o protejeaza prin criptare. Odata deschisa
dinamic, far
lista de adrese, virusul va folosi direct API-ul de trimis emailuri pentru a se multiplica.
Exemplele de virus, i de email sunt MyDoom, I love you.
O a doua categorie importanta de virus, i o reprezinta virus, ii de macro. Un macro este
o bucata de cod executabil, atas, ata unui fis, ier document. Aplicat, iile t, inta a acestor virus, i
sunt cele de gestionare a documentelor, gen editoare de text, foi de lucru, sau editoare
Aceste aplicat, ii n general vor atent, iona utilizatorul nainte de deschiderea
de prezentari.
unui document ce cont, ine macro-uri. Pentru a reduce gradul de risc, daca la deschiderea
unui fis, ier suntet, i avertizat, i de existent, a unor macro-uri, nchidet, i documentul s, i rulat, i un
program antivirus pe respectivul fis, ier.
Virus, ii de boot nu reprezinta o amenint, are majora pentru sistemele actuale datorita
, ii de lansare n execut, ie. Pentru a lansa un astfel de virus, sistemul trebuie sa
dificultat
Impactul acestor virus, i s-a diminuat odata
ncerce init, ializarea de pe o partit, ie infectata.
cu disparit, ia floppy discurilor. n prezent virus, ii de boot se pot propaga prin CD-uri sau
flash carduri.

Troienii (trojan horses) reprezinta aplicat, ii (aparent legitime) ce cont, in (sau instaleaza)
un program malit, ios. Pentru a evita astfel de atacuri se recomanda instalarea aplicat, iilor
, ii fis, ierelor nainte de instalare.
doar din surse sigure, precum s, i verificarea integritat
, i n diferite servicii din Internet
Viermii (worms) sunt programe care folosesc vulnerabilitat
pentru a se multiplica. Virus, ii de mail reprezinta o categorie de viermi.

Pentru a reduce impactul virus, ilor sunt importante att masurile


luate la nivelul ret, elei,
ct s, i exersarea unor deprinderi din partea utilizatorilor. Este important ca accesul n
ret, ea sa fie protejat de un firewall (vezi sect, iunea 10.5.1), ca serverul de email sa aiba
instalat un antivirus, sa existe o politica de monitorizare a serviciilor etc. La nivelul
utilizatorului este important sa nu lanseze n execut, ie fis, iere primite prin email, sa nu
deschida atas, amente primite de la necunoscut, i, sa ment, ina un antivirus actualizat pe
stat, ia de lucru etc.
1

http://en.wikipedia.org/wiki/AutoRun#Attack_vectors

CAPITOLUL 10. ELEMENTE DE SECURITATE

10.4.3

307

Scanarea porturilor

Un program de scanat porturi este o aplicat, ie care init, iaza conexiuni catre
toate
Scopul este cel de a detremina care porturi sunt deschise,
porturile unei sistem t, inta.
aflnd astfel ce servicii sunt disponibile.
Programele de scanat porturi fac parte din setul de utilitare de baza folosite att de
crackeri (black-hat hackers) s, i ethical hackeri (white-hat hackers) pentru a detecta
de porturi
serviciile deschise pe un sistem s, i versiunea acestora. Daca n urma scanarii
se detecteaza servicii potent, ial vulnerabile, se poate trece la folosirea unui exploit.
, ii programelor
Sfrs, itul anilor 90 n Romnia a dus la o cres, tere dramatica a popularitat
de scanat porturile, att n rndul crackerilor ct s, i al administratorilor de ret, ea.
a fost dezvoltarea ret, elei metropolitane, precum s, i
Principala cauza a acestei schimbari
a diferent, ei foarte mari ntre costul traficului metropolitan s, i cel al traficului Internet.

Astfel ntr-un interval relativ scurt numarul


atacurilor asupra serverelor aflate n ret, ele
, i) a crescut foarte mult.
publice (mai ales asupra celor aflate n universitat
folosirea unui scaner de porturi poate fi interpretata drept un atac,
Des, i nu este ilegala,
s, i prin urmare este posibil sa va fie filtrat accesul din ret, eaua din care au fost init, iate

scanarile.
O astfel de restrict, ionare este totus, i destul de improbabila.

Utilitarul nmap
Exista numeroase aplicat, ii de scanat porturile, una dintre cele mai cunoscute fiind
, ii de care se bucura n rndul administratorilor de sisteme
nmap1 . Datorita popularitat
Linux, aplicat, ia a fost portata s, i pe platforme Windows2 .
nmap implementeaza mai multe metode de scanare, putnd oferi informat, ii despre
porturile deschise, dar s, i despre porturile explicit filtrate. n plus fat, a de informat, iile
referitoare la sericiile rulate, nmap pune la dispozit, ia administratorului de ret, ea metode
de detectare a stat, iilor active dintr-o ret, ea, de aflare a versiunii sistemului de operare,
versiunile serviciilor active, utilizatorii ce ruleaza aceste servicii, precum s, i multe alte
informat, ii relevante pentru sistemul scanat.
Dintre cele opt tipuri importante de scanare, s, ase se refera la scanarea porturilor TCP,
, ii, aceasta ultima
unul la scanarea porturilor UDP s, i unul la monitorizarea conectivitat
metoda ncercnd sa determine doar daca stat, ia destinat, ie este activa s, i daca se poate
ajunge la ea.

Opt, iunea -sP (Ping Scan) permite detectarea stat, iilor active ntr-o ret, ea locala:
1

root@cursuri:~# nmap -sP 141.85.37.0/24

2
3
4
5
6
7

Starting Nmap 4.62 ( http://nmap.org ) at 2009-09-23 16:21 EEST


Host csr.cs.pub.ro (141.85.37.1) appears to be up.
MAC Address: 00:09:6B:89:06:67 (IBM)
Host ns.catc.ro (141.85.37.2) appears to be up.
MAC Address: 00:17:31:49:3A:E4 (Asustek Computer)
1
2

http://www.insecure.org/nmap
http://www.sourceforge.net/projects/nmapwin

308
8
9
10
11
12
13
14
15

INTRODUCERE N SISTEME DE OPERARE

Host prof.cs.pub.ro (141.85.37.3) appears to be up.


MAC Address: 00:09:6B:89:05:24 (IBM)
Host info.cs.pub.ro (141.85.37.6) appears to be up.
MAC Address: 00:13:8F:78:42:2C (Asiarock Incorporation)
Host 141.85.37.7 appears to be up.
MAC Address: 00:50:56:9A:33:46 (VMWare)
Host 141.85.37.8 appears to be up.
MAC Address: 00:09:6B:89:06:67 (IBM)

Metodele de scanare a porturilor TCP sunt diferent, iate prin prezent, a unui anumit flag
ntr-un pachet TCP. Opt, iunea -sS (TCP SYN scan) este opt, iunea implicita care foloses, te
flagul SYN al TCP s, i detecteaza porturile deschise pe un sistem.
1
2
3

razvan@valhalla:~/carte-uso$ nmap -sS localhost


You requested a scan type which requires root privileges.
QUITTING!

4
5

root@valhalla:~# nmap -sS localhost

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Starting Nmap 4.68 ( http://nmap.org ) at 2009-09-23 15:38 EEST


Interesting ports on localhost (127.0.0.1):
Not shown: 1705 closed ports
PORT
STATE SERVICE
21/tcp
open ftp
22/tcp
open ssh
25/tcp
open smtp
53/tcp
open domain
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
631/tcp open ipp
5900/tcp open vnc
7634/tcp open hddtemp

21
22

Nmap done: 1 IP address (1 host up) scanned in 0.312 seconds

Opt, iunea -sS necesita drepturi privilegiate. n exemplul de mai sus, utilizatorul
neprivilegit razvan nu a putut rula comanda nmap cu opt, iunea -sS, fiind necesara
folosirea utilizatorului root.
Pentru utilizatorii neprivilegiat, i, se pot folosi alte opt, iuni precum -sT (TCP connect scan).
Comportamentul este similar opt, iunii -sS, dar mai lent:
1

razvan@valhalla:~/carte-uso$ nmap -sT localhost

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Starting Nmap 4.68 ( http://nmap.org ) at 2009-09-23 16:00 EEST


Interesting ports on localhost (127.0.0.1):
Not shown: 1705 closed ports
PORT
STATE SERVICE
21/tcp
open ftp
22/tcp
open ssh
25/tcp
open smtp
53/tcp
open domain
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
631/tcp open ipp
5900/tcp open vnc
7634/tcp open hddtemp

CAPITOLUL 10. ELEMENTE DE SECURITATE

309

17
18

Nmap done: 1 IP address (1 host up) scanned in 0.170 seconds

Alte doua opt, iuni de scanare importante sunt -sV s, i -O. Opt, iunea -sV ofera informat, ii
despre versiunea serviciilor ce asculta pe porturile deschise, n vreme ce opt, iunea -O
ofera informat, ii despre sistemul de operare instalat, precum s, i timpul de la ultima
repornire.
1

root@kiwi:~# nmap -sV -O 141.85.37.53

2
3
4
5
6
7
8
9
10
11

Starting nmap 3.55 ( http://www.insecure.org/nmap/ ) at 2004-08-27 17:23


EEST
Interesting ports on dhcp-53.cs.pub.ro (141.85.37.53):
(The 1659 ports scanned but not shown below are in state: closed)
PORT
STATE SERVICE VERSION
22/tcp open ssh
OpenSSH 3.8.1p1 (protocol 1.99)
Device type: general purpose
Running: Linux 2.4.X|2.5.X|2.6.X
OS details: Linux 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7)
Uptime 0.105 days (since Fri Aug 27 14:52:12 2004)

12
13

Nmap run completed -- 1 IP address (1 host up) scanned in 11.840 seconds

nmap ofera s, i alte opt, iuni. Comanda de mai jos realizeaza scanarea porturilor cuprinse

ntre 1 s, i 100 pe stat, ia locala:


1

root@valhalla:~/carte-uso# nmap -p 1-100 localhost

2
3
4
5
6
7
8
9
10

Starting Nmap 4.68 ( http://nmap.org ) at 2009-09-23 16:14 EEST


Interesting ports on localhost (127.0.0.1):
Not shown: 96 closed ports
PORT
STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
53/tcp open domain

11
12

Nmap done: 1 IP address (1 host up) scanned in 0.107 seconds

10.5

Securizarea ret, elei

Securizarea unui sistem sau a unei ret, ele pot presupune investit, ii importante att n
echipamente, ct s, i n software. Cu toate acestea, orice solut, ie de securitate nu trebuie

sa piarda din vedere cteva componente de baza.


Primul pas n orice solut, ie de securitate o reprezinta stabilirea unor politici clare de

securitate. O astfel de politica de securitate va urmari:

separarea domeniilor cu nivel de securitate diferit;

definirea clara a drepturilor fiecarui


utilizator;

definirea serviciilor ce trebuie oferite de fiecare componenta a ret, elei.


Odata stabilita politica de securitate va trebui restrict, ionat traficul nedorit/nenecesar prin
configurarea politicilor de filtrare a pachetelor s, i a unui firewall (vezi
sect, iunea 10.5.1).

310

INTRODUCERE N SISTEME DE OPERARE

Infectarea stat, iilor dintr-o ret, ea locala poate oferi o poarta de acces unui atacator n
spatele firewall-ului, reducnd gradul de securitate al ret, elei. Din acest motiv un
administrator responsabil nu se va ocupa doar de configurarea firewall-ului s, i a
serverelor, ci s, i de securizarea stat, iilor de acces.
, ii o reprezinta confident, ialitatea. n scopul
O componenta importanta a securitat
unor date sensibile se recomanda configurarea criptarii
traficului. Operat, ia de
protejarii
as, a cum se ntmpla n
autentificarea trebuie sa fie, n general, o operat, ie securizata,
cazul SSH.

10.5.1

Firewall-uri

Firewall-urile sunt dispozitive sau aplicat, ii care filtreaza pachetele de ret, ea pe baza
unor politici sau reguli prestabilite.
Firewall-urile au rolul de protejare a ret, elei prin filtrarea traficului nedorit/nenecesar. Un
firewall poate fi configurat sa filtreze traficul ICMP pentru a preveni atacuri de tip flood,
cererile de init, iere de conexiune n ret, eaua locala sau orice trafic care nu este ment, ionat
explicit ca fiind trafic legitim.
Firewall-urile pot fi dispozitive dedicate (firewall-uri hardware) sau aplicat, ii (firewalluri software). Firewall-urile hardware sunt mai rapide, dar prezinta costuri mai mari.
, ii, dar nu sunt la fel de eficiente ca
Firewall-urile software prezinta avantajul flexibilitat
firewall-urile hardware.
de filtrare a
Aplicat, ia firewall pe sistemele Linux este iptables1 . Exceptnd rolul sau
pachetelor, iptables poate fi folosit s, i pentru alterarea pachetelor s, i pentru NAT (Network
Address Translation).

Sistemele Windows ncepnd cu Windows XP dispun de o aplicat, ie firewall nativa,


Windows Firewall, dar exista numeroase aplicat, ii de tip firewall personal, precum Zone
Alarm2 .

10.5.2

Criptarea informat, iei

O tehnica folosita nca din cele mai vechi timpuri, criptarea informat, iei nseamna
folosirea unui algoritm care sa transforme un mesaj cunoscut ntr-un mesaj
criptat. Aceast algoritm presupune, n general, folosirea unei chei de criptare.
Operat, ia inversa se cheama decriptare.
Criptarea este folosita pentru a proteja datele de acces neautorizat. Datele protejate
pot fi stocate la un moment dat pe un dispozitiv de suport sau pot fi date transmise prin
ret, ea.
n domeniul IT, exista doua tipuri de criptare: criptarea cu chei simetrice s, i criptarea cu
chei asimetrice.
1
2

http://www.netfilter.org/
http://www.zonealarm.com/security/en-us/home.htm?lid=en-us

CAPITOLUL 10. ELEMENTE DE SECURITATE

311

Criptarea cu chei simetrice presupune folosirea unei chei att pentru criptare ct s, i
, i care
pentru decriptare. Cheia este secreta este cunoscuta doar celor doua entitat
Formal, cele doua operat, ii sunt descrise astfel:
comunica.

criptare: K(M) = C
decriptare: K(C) = M
K este cheia, M este mesajul init, ial, iar C este mesajul criptat. Folosirea aceleias, i chei
peste mesajul criptat duce la obt, inerea mesajului init, ial.
Exemple de algoritmi de criptare cu chei simestrice sunt DES, Twofish, Blowfish, IDEA,
AES. AES (Advanced Encryption Standard) este algoritmul adoptat oficial de guvernul
SUA. Algoritmul a fost ales n urma unui proces de standardizare de 5 ani la care au
participat 15 proiecte diferite.
Criptarea cu chei asimestrice foloses, te o pereche de chei: o cheie publica s, i o cheie
Dupa cum reiese s, i din denumire, cheia privata este secreta,
iar cheia publica
privata.
pentru o pereche cheie privata/cheie

este accesibila de oricine. Exista doua utilizari

publica:

semnaturi
digitale (digital signatures), n care cheia privata este folosita pentru
criptarea/semnarea unui document, iar cheia publica este folosita pentru a verifica
faptul ca documentul este autentic; oricine poate face verificarea dar numai

det, inatorul
chei private poate semna un document;

criptare (public key encryption), n care cheia publica este folosita pentru criptarea
unui mesaj, iar cheia privata este folosita pentru decriptarea mesajului; oricine
poate crea mesajul criptat pentru a fi transmis posesorului cheii private, dar numai
acesta din urma poate decripta mesajul.
Formal, procesele de semnare s, i verificare s, i cele de criptare s, i decriptare sunt descrise
mai jos:

semnare: p(M) = S
verificare: P(S) = M
criptare: P(M) = C
decriptare: p(C) = M
se foloses, te cheia privata p pentru a cripta mesajul M n mesajul S.
n cazul semnarii,
Cheia publica P este folosita pentru decriptarea mesajului S napoi n mesajul M. n cazul

, oara aseman
ator,

criptarii/decript
arii,
lucrurile se desfas
dar se foloses, te cheia publica
pentru criptare s, i cheia privata pentru decriptare.
Criptarea cu chei asimetrice este, n general, mai sigura dect criptarea cu chei
simetrice: cheia nu trebuie sa fie partajata s, i algoritmii sunt mai robus, ti. Cu toate
acestea, criptarea cu chei asimestrice este mult mai lenta dect criptarea cu chei
simetrice. Exista situat, ii n care cele doua metode se folosesc la un loc. Spre exemplu,
n cazul SSH, init, ierea conexiunii se realizeaza folosind criptare cu chei asimetrice; n
aceasta
urma init, ierea se realizeaza o negociere dupa care se obt, ine o cheie simetrica;
cheie va fi folosita n continuare pentru criptarea comunicat, iei ntre clientul s, i serverul
SSH.

312

INTRODUCERE N SISTEME DE OPERARE

O extensie a semnaturilor
digitale o reprezinta certificatele digitale1 . Un certificat digital
cont, ine o cheie publica s, i un set de informat, ii despre posesorul certificatului semnate
digitale. ntruct cheia publica este inclusa n certificat, oricine poate verifica validitatea
semnatura poate fi a unei autoritat
,i
informat, iilor. Depinznd de infrastructura folosita,
specializate (CA certificate authority 2 , n cazul PKI public key infrastructure3 ) sau a
mai multor utilizatori (endorsements), n cazul web of trust 4 .

10.5.3

Monitorizarea ret, elei

, i de ret, ele de calculatoare sau de ghiduri pentru administratorii de ret, ea


Autorii de cart
precizeaza n general ca activitatea de monitorizare este una dintre cele mai importante

sarcini ale unui administrator. Cu toate acestea, adesea, recomandarile


propuse sunt
deseori limitate la cele evidente precum: Un administrator trebuie sa citeasca regulat
jurnalele de pe fiecare server sau Este important sa nu uitat, i sa pornit, i serviciul de
monitorizare.
Este important de nt, eles ca monitorizarea nu se rezuma doar la rularea unui daemon de
amnal

genul sysklogd sau la deschiderea sapt


a a unei aplicat, ii precum Event Viewer.
sunt asigurarea dinamica a securitat
, ii prin
Cele doua funct, ii principale ale monitorizarii
de atac, s, i posibilitatea localizarii
s, i definirii unei defect, iuni
alertarea n fat, a unei ncercari
suboptimale.
sau a unei funct, ionari
Exista mai multe criterii pentru a clasifica diversele tipuri de act, iuni de monitorizare. O
prima clasificare face distinct, ia ntre:

monitorizarea unui sistem specific;


, ii;
monitorizarea conectivitat

monitorizarea traficului din ret, ea.

Monitorizarea unui dispozitiv specific presupune rularea unui serviciu ce va urmari


apelarea celorlalte servicii, precum s, i accesul la jurnalele create de acest server. Un
exemplu este serviciul de jurnalizare oferit de sysklogd. Monit5 permite monitorizarea
proceselor, fis, ierelor s, i poate sa execute diverse act, iuni la nevoie.
, ii se bazeaza deseori pe mecanisme foarte simple, cel mai
Monitorizarea conectivitat
important dintre acestea fiind folosirea utilitarului ping, metoda fiind denumita ping
ICMP periodice poate oferi administratorului
sweep. Crearea unui sistem de interogari
informat, ii despre ntreruperea unui segment de ret, ea sau despre defectarea sau
poate fi realizat ori
stingerea unuia dintre servere. Un astfel de sistem de interogari
printr-un script simplu, ori se poate apela la aplicat, ii dedicate.
Monitorizarea de ret, ea cuprinde numeroase componente, de la dispozitive hardware
dedicate (denumite generic IDS Intrusion Detection System), la programe de
interceptare a traficului n ret, ea (programe de sniffing), precum s, i programe de evaluare
1

http://en.wikipedia.org/wiki/Digital_certificate
http://en.wikipedia.org/wiki/Certificate_authority
3
http://en.wikipedia.org/wiki/Public_key_infrastructure
4
http://en.wikipedia.org/wiki/Web_of_trust
5
http://mmonit.com/monit/
2

CAPITOLUL 10. ELEMENTE DE SECURITATE

313

, ii unui sistem din ret, ea, n aceasta categorie intrnd programele de scanat
a securitat
porturi. O aplicat, ie foarte cunoscuta de monitorizare a ret, elei este Nagios1 .
Aparit, ia switchurilor n ret, elele locale a transformat mediul partajat al Ethernetului ntr-un
mediu dedicat. Cu alte cuvinte, ntr-o ret, ea cu switchuri, pachetele schimbate ntre doua
n aceasta
stat, ii nu vor mai fi vizibile de o a treia stat, ie aflata n aceeas, i ret, ea locala.

situat, ie, un administrator de ret, ea ce dores, te monitorizarea traficului catre


o anumita
destinat, ie va trebui ca nainte de a lansa programul de interceptare a traficului sa faca un
atac ARP poisoning2 pentru respectiva destinat, ie. Pentru aceasta se pot folosi utilitare
precum Cain3 s, i dsniff4 .

Utilitarul tcpdump
traficului n ret, ea s, i achizit, ionarii
de date.
tcpdump este un utilitar destinat monitorizarii

a de date doar
Placile
de ret, ea, cum sunt cele Ethernet, captureaza la nivelul legatur
cadrele adresate lor sau pe cele de difuzare. De aceea, pentru a captura toate cadrele,
tcpdump trebuie sa treaca interfat, a ntr-un mod special de lucru, numit promiscuous
mode, pentru care are nevoie de suportul sistemului de operare.
tcpdump captureaza pachetele de pe prima interfat, a de ret, ea a
La o rulare simpla,
sistemului s, i afis, eaza informat, ii din antetul IP s, i TCP.
1
2
3
4
5

root@frodo:~# tcpdump
tcpdump: listening on eth0
14:45:09.252803 frodo.noi.39993 > 64.12.30.90.5190: P
444608787:444608793(6) ack 1453900500 win 32893 (DF)
14:45:09.254097 frodo.noi.33335 > main.noi.domain: 16713+ PTR?
90.30.12.64.in-addr.arpa.(42) (DF)
14:45:09.254583 main.noi.domain > frodo.noi.33335: 16713 NXDomain 0/1/0
(113)(DF)

n exemplul de mai sus, fiecare linie cont, ine:

timpul n care pachetul TCP a intrat n ret, eaua locala;

informat, ii legate de antetul IP (adresa sursa s, i adresa destinat, ie);


pot destinat, ie, numere de secvent, a,
flag-uri
informat, ii din antetul TCP (port sursa,
TCP).
Pentru a vedea s, i cont, inutul pachetului se poate utiliza opt, iunea -x:
1
2
3
4
5
6
7
8

root@frodo:~# tcpdump -c1 -x


tcpdump: listening on eth0
18:38:51.087244 64.12.24.48.5190 > frodo.noi.32777: P
3127656695:3127656809(114) ack 3009470569 win 16384 (DF) [tos 0x80]
4580 009a c7a1 4000 6406 354d 400c 1830
c0a8 000b 1446 8009 ba6c 40f7 b360 e069
5018 4000 1f0d 0000 2a02 20dc 006c 0003
000b 0000 87d9 0d61 0836 3032 3033 3631
3400 0000 0700 0100 0200 7000 0c00 2500
1

http://www.nagios.org/
http://en.wikipedia.org/wiki/ARP_spoofing
3
http://www.oxid.it/cain.html
4
http://www.monkey.org/~dugsong/dsniff/
2

314
9
10
11

INTRODUCERE N SISTEME DE OPERARE

0000
6 packets received by filter
0 packets dropped by kernel

Conform structurii unui pachet IP, primii 20 octet, i (4580 009a c7a1 4000 6406 354d 400c

1830 c0a8 000b) reprezinta antetul IP iar urmatorii


20 de octet, i (1446 8009 ba6c 40f7
b360 e069 5018 4000 1f0d 0000) reprezinta antetul TCP.
Exista solut, ii grafice ce realizeaza interpretarea cont, inutului pachetului. Cea mai
cunoscuta aplicat, ie grafica de interceptare s, i interpretare a traficului de ret, ea este
Wireshark1 , utilitar disponibil att n mediul Windows, ct s, i n Linux. Echivalentul
pentru tcpdump n lumea Windows este windump2 .

10.6

Studiu de caz

10.6.1

Drepturile pe fis, iere n NTFS

at
, iri fat, a de FAT, att din punctul de
Sistemul de fis, iere NTFS ofera o serie de mbunat
, ii. ntr-un sistem de fis, iere FAT, toate conturile
vedere al performant, ei, ct s, i al securitat
de utilizator au drepturi egale s, i depline asupra sistemului de fis, iere.

Figura 10.2: Precizarea drepturilor n NTFS


Securitatea n NTFS se implementeaza prin intermediul mecanismului de liste de acces.
O lista de acces reprezinta un set descriptori atas, ati fis, ierelor s, i directoarelor din sistemul
1
2

http://www.wireshark.org/
http://www.winpcap.org/windump/install/

CAPITOLUL 10. ELEMENTE DE SECURITATE

315

de fis, iere. Pentru ca un proces sa poata accesa un fis, ier sau un director, sistemul de
securitate verifica daca procesul are dreptul de a-l accesa.
a sporita de securitate, sistemul de fis, iere NTFS ofera posibilitatea criptarii

Ca masur

datelor pe care le stocheaza. Avantajul implementarii mecanismelor de criptare direct n


sistemul de fis, iere l reprezinta viabilitatea pe care acest tip de securitate o ment, ine n
lucrul cu orice sistem de operare care ofera suport pentru sistemul respectiv de fis, iere.

Din mediul Windows, criptarea unui fis, ier sau a unui director (inclusiv a cont, inutului sau)
, i al fis, ierului/directorului (clic dreapta > Properties >
se face din ecranul de proprietat
Advanced > "Encrypt contents to secure data").
, ii sistemului de fis, iere, n Windows
Pentru a putea act, iona granular asupra securitat
trebuie dezactivata opt, iunea Use simple file sharing (de la Explorer > Folder Options >
View > Use Simple File Sharing: debifare). Ulterior, atribuirea drepturilor se face din
, i a unui director sau a unui fis, ier, sub tabul Security. Se
fereastra de proprietat
selecteaza utilizatorul sau grupul care va fi editat, iar din lista de drepturi se indica

permisiunile ce vor fi atribuite. Toate configurarile


se aplica doar fis, ierului sau
directorului selectat. Pentru a configura explicit permisiunile, butonul Advanced
afis, eaza o noua interfat, a n care pot fi vizualizate toate tipurile de permisiuni ce sunt
aplicate fis, ierului sau directorului ales, inclusiv drepturi mos, tenite prin ierarhia
sistemului de fis, iere.

10.6.2

Recuperarea parolei

Un bun administrator de sistem trebuie sa fie cons, tient de mecanismele de recuperare


a parolei pentru a putea preveni proceduri neautorizate de modificare a acesteia.
Exista doua metode importante pentru a realiza recuperarea parolei de root, ambele
necesitnd accesul fizic la echipament. Prima metoda presupune modificarea din meniul

bootloader-ului a parametrilor trimis, i la ncarcarea


nucleului, iar a doua se bazeaza pe
folosirea unui CD Linux bootabil.

Editarea GRUB
Prima metoda de a parolei de root necesita editrea meniului de boot a GRUB. Din

meniul GRUB se selecteaza imaginea de nucleu ce se dores, te ncarcat


a s, i se activeaza
editarea respectivei linii de grub prin opt, iunea e. n capitolul 6 sunt prezentate pe larg

metodele de modificare a opt, iunilor transmise la ncarcarea


nucleului.
La linia cont, innd imaginea de nucleu selectata se adauga opt, iunea init=/bin/bash
s, i se continua procesul de init, ializare a sistemului. n urma ncheierii procesului de
init, ializare se va obt, ine un shell root. Daca la execut, ia comenzii passwd se primes, te
mesaj de eroare trebuie remontat sistemul de fis, iere pentru scriere s, i citire. Acest lucru
se realizeaza folosind comanda:
1

root@ubuntu:~# mount -o remount,rw /

Pentru a preveni o recuperare neautorizata a parolei de root se recomanda folosirea


parolelor de acces la meniul bootloader-ului. n cazul GRUB, acest lucru se realizeaza
cu ajutorul opt, iunii password n cadrul fis, ierului de configurare a GRUB.

316

INTRODUCERE N SISTEME DE OPERARE

Folosirea unui Live CD


A doua metoda de recuperare a parolei presupune folosirea unui Live CD Linux. Daca
, ii optice n fat, a hard discului, va trebui
ordinea de boot nu acorda prioritate unitat
schimbata ordinea de boot din BIOS.
Dupa init, ializarea sistemului de pe CD trebuie obt, inut un shell de root. n cazul Live
CD-ului Ubuntu aceasta se realizeaza prin executarea din contul neprivilegiat a comenzi
sudo:
1

root@ubuntu:~# sudo bash

Trebuie creat un nou director n care se va face montarea vechiului sistem de fis, iere:
1

root@ubuntu:~# mkdir /mnt/x

2
3

root@ubuntu:~# mount /dev/hda2 /mnt/x

n acest moment putem invoca comanda chroot:


1

root@ubuntu:~# chroot /mnt/x

Ultimul pas presupune invocarea utilitarului passwd s, i schimbarea parolei de root.


ntruct, prin intermediul Live CD-ului, utilizatorul are acces privilegiat la ntreg sistemul,
va avea acces complet la sistemul de fis, iere de pe discul sistemului. Invocarea
comenzii passwd va conduce la modificarea informat, iei din fis, ierul /etc/shadow.
Pentru a preveni o astfel de procedura este necesar sa se fort, eze din BIOS ca prim
dispozitiv de boot unul dintre hard discuri s, i sa se defineasca o parola de acces la meniul
de configurare a BIOS-ului.

Cuvinte cheie

cel mai mic privilegiu

drepturi pe fis, iere n UNIX

cea mai slaba veriga

du

controlul accesului

/etc/sudoers

autentificare

/etc/passwd, /etc/shadow

autorizare

/etc/security/limits.conf

criptare

liste de control a accesului ACL

atacuri

matrice de drepturi

chmod

firewall

chown

criptare, decriptare

chroot

chei simetrice, chei asimetrice

df

chei private, chei publice

DoS

a digitala,
certificat digital
semnatur

drepturi pe fis, iere n NTFS

hacker

CAPITOLUL 10. ELEMENTE DE SECURITATE

netstat

sudo

monitorizare

suid

nmap

syslog

parole

tcpdump

politica de securitate

top

quota

ulimit

securitatea fizica

umask

sniffer

virus, i

317

ntrebari

1. Care dintre urmatoarele


NU este o funct, ionalitate oferita de utilitarul nmap?

q scanarea porturilor UDP s, i TCP


q detectarea versiunii sistemului de operare
q detectarea stat, iilor active din ret, eaua locala
q filtrarea pachetelor de ret, ea

2. Fie urmatoarele
comenzi:
1
2
3

umask 022
echo "Acesta nu este un test" > test
chmod go+x test

Care vor fi drepturile pentru utilizatorii grupului fis, ierului test?

q doar citire
q doar execut, ie
q citire s, i execut, ie
q citire, scriere s, i execut, ie
3. Care dintre parolele de mai jos este cea mai sigura pentru utilizatorul cornel?

q cornelush
q coRnel
q _cOrN31[]sh+
q niciuna, toate parolele vor fi ncercate ntr-un atac bazat pe dict, ionar
4. Care dintre riscurile de mai jos reprezinta riscuri de securitate fizica pentru un
server?

q lipsa unui firewall


q parole pentru utilizatori prea simple
q vrfuri de tensiune n ret, eaua electrica

318

INTRODUCERE N SISTEME DE OPERARE

q absent, a licent, ei pentru sistemul de operare


5. n urma procesului de scanare de porturi se poate determina:

q daca un serviciu ruleaza pe un port dat


q versiunea serviciului
q daca serviciul este filtrat
q toate variantele
6. Primirea unui email ce cont, ine un virus pe un sistem ce nu are antivirus duce
automat la infectarea sa. Un sistem infectat cu un virus nu mai poate fi t, inta unui
alt atac.

q adevarat,
adevarat

q adevarat,
fals

q fals, adevarat

q fals, fals

7. Traficul catre
un server este monitorizat cu tcpdump. Care dintre urmatoarele

informat, ii NU poate obt, inuta?

q portul pe care ruleaza serviciul

q numarul
de client, i ai server-ului

q dimensiunea pachetelor folosite


q adresa IP a serverului

8. Pentru a limita numarul


de procese per utilizator se poate folosi:

q ulimit
q quota
q nmap
q chroot
9. Care este primul pas n securizarea unei ret, ele?

q definirea unei politici de securitate


q definirea regulilor de filtrare pe firewall
q instalarea de programe antivirus pe toate stat, iile din ret, ea
q criptarea traficului
10. Pe un sistem Linux, ce fis, ier stocheaza parolele utilizatorului (criptate)?

q /etc/passwd
q /etc/shadow
q /etc/security/limits.conf
q /var/log/apache2/access.log

Capitolul 11
Compilare s, i linking
He who hasnt hacked assembly language as a youth
has no heart. He who does as an adult has no brain.
John Moore

Ce se nvat, a din acest capitol?

Cum se obt, ine un program executabil dintr-un program sursa


Compilarea s, i interpretarea unui program

Etapele compilarii

Utilizarea GCC pentru compilarea s, i link-editarea unui program

Optimizarea compilarii

Fis, iere obiect s, i fis, iere executabile


Biblioteci de funct, ii
Automatizarea act, iunilor cunoscnd dependent, ele ntre ele; utilitarul make
Concepte de portabilitate
Link-editarea codului C s, i C++

11.1

Introducere

Unul dintre aspectele importante n utilizarea unui sistem de operare este dezvoltarea
de noi programe. Acest lucru presupune folosirea unui limbaj de programare pentru
Codul sursa este compilat, iar programul executabil obt, inut este
scrierea de cod sursa.
rulat. Act, iunea de scriere de cod sursa poarta numele de programare sau dezvoltare.
Persoana care scrie codul se numes, te programator sau dezvoltator. Termenii n limba
engleza sunt programmer, software developer sau software engineer.
Sistemele de operare moderne pun la dispozit, ia dezvoltatorului/programatorului o suita
de aplicat, ii folosite pentru scrierea de noi programe. n cazul familiei de sisteme de
operare Windows, suita de aplicat, ii Visual Studio reprezinta forma cea mai cunoscuta
319

320

INTRODUCERE N SISTEME DE OPERARE

pentru dezvoltarea de noi aplicat, ii. Aceasta permite crearea de programe n diverse
Dezvoltarea de aplicat, ii se desfas
, oara
limbaje de programare s, i cu utilitate diversa.
ntr-un mediu integrat (IDE Integrated Development Environment) (vezi
sect, iunea 14.9).
sistemele Linux pun la dispozit, ia utilizatorului suita de aplicat, ii GNU,
De partea cealalta,
folosita pentru compilarea, link-editarea s, i depanarea programelor. n mod tradit, ional,
dezvoltatorii de aplicat, ii pe sisteme Linux folosesc utilitare dedicate (editor, compilator,
depanator), dar se folosesc din ce n ce mai mult s, i mediile integrate precum Eclipse sau
Anjuta (vezi sect, iunea 14.9.1 s, i sect, iunea 14.9.2).

11.1.1

Editoare

Prima faza a procesului de dezvoltare este scrierea de cod specific unui limbaj de
programare. Codul reprezinta o ns, iruire de instruct, iuni, variabile s, i funct, ii pentru acel
limbaj. Limbajul impune o sintaxa pe care programatorul trebuie sa o respecte. Fis, ierul

n care se scrie codul este, n general, un fis, ier text s, i poarta numele de fis, ier sursa,
Expresia trebuie sa ma uit prin surse1 se refera la parcurgerea
sau mai simplu sursa.
fis, ierelor sursa ale unei aplicat, ii pentru analiza codului.

Scrierea de cod sursa se realizeaza prin intermediul unui editor. Editoare raspndite
n

lumea Unix sunt vi, Emacs, nano, joe, kate, gedit. Editoare raspndite
n lumea Windows
sunt Notepad++, Ultraedit, Crimson Editor. De obicei, n lumea Windows, editoarele
sunt parte a unui IDE (Integrated Development Environment) cum este Visual Studio
sau Eclipse.

Un editor este folosit pentru scrierea unui fis, ier sursa.


Drept urmare, editoarele

moderne prezinta o serie de caracteristici utile acestui scop: indentare automata,


colorare a codului (syntax highlighting), code folding, variable completion, folosirea de
registre de editare pentru operatii multiple etc.
Lumea Unix este dominata de rivalitatea dintre editoarele vi s, i Emacs2 . n vreme ce vi
este un adept al filozifiei Unix (keep it simple) s, i este folosit doar pentru editarea de
Emacs este un editor complex cu facilitat
, i care includ posibilitatea de
fis, iere sursa,
folosire ca mediu integrat de dezvoltare (IDE), client de e-mail, client de IRC etc. De-a
numeroase facilitat
, i au fost adaugate

lungul vremii, nsa,


s, i editorului vi astfel nct
, ile oferite sunt apropiate. vi s, i Emacs reprezinta de fapt doua familii de
funct, ionalitat
editoare. Cei mai cunoscut, i reprezentant, i ai celor doua familii sunt, respectiv, editorul
, i avansate pentru editare
Vim3 s, i GNU Emacs4 . Ambele editoare dispun de facilitat
eficienta s, i permit posibilitatea de extensie s, i personalizare.
Cunoscut, i pentru

fanatismul folosirii unuia dintre cele doua editoare, programatorii vor prezenta fis, ierul
propriu de configurare (.vimrc n cazul Vim s, i .emacs n cazul GNU Emacs).
, i n capitolul 14.
O prezentare mai ampla a editorului Vim gasit
1

http://encyclopedia2.thefreedictionary.com/Use+the+Source+Luke
http://en.wikipedia.org/wiki/Editor_war
3
http://vim.sourceforge.net/
4
http://www.gnu.org/software/emacs/
2

CAPITOLUL 11. COMPILARE S, I LINKING

11.1.2

321

Compilare s, i interpretare

Programul scris n cod sursa este compilat sau interpretat pentru a ndeplini sarcina
pentru care a fost scris. Att compilarea ct s, i interpretarea unui program sunt forme
de translatare a acestuia s, i execut, ie pe un sistem hardware. Translatarea se refera la
transformarea ntr-un limbaj a unui program scris ntr-un alt limbaj.
compilarea unui program se refera la obt, inerea unui fis, ier
n definit, ia cea mai simpla,
binar executabil. Executarea acestui fis, ier duce la ndeplinirea sarcinii pentru care a
fost scris programul. Dupa cum se va observa n sect, iunea 11.3 exista mai multe faze
unui program.
specifice compilarii
interpretarea unui program elimina faza obt, inerii unui executabil s, i
De partea cealalta,

executa codul asociat unui program pe masura


parcurgerii acestuia.
Avantajul
unui program este timpul mai scurt de dezvoltare (se elimina faza de
interpretarii
Pe de alta parte, dezavantajul interpretarii
unui
compilare) s, i depanarea mult mai facila.
a de execut, ie. n cazul compilarii,

program este viteza mai scazut


rularea executabilului
codul sursa este
nseamna rularea de cod specific sistemului fizic. n cazul interpretarii,
parcurs, analizat s, i apoi executat, rezultnd ntr-un timp de rulare mai mare.

Limbaje compilate s, i limbaje interpretate


Utilitarul folosit pentru compilarea unui program poarta numele de compilator, iar cel
folosit pentru interpretare poarta numele de interpretor. Compilatorul, respectiv

interpretorul, sunt implementari


ale limbajului de programare asociat.
Astfel,
compilatorul/interepretorul cunoas, te sintaxa limbajului de programare n care a fost
scris respectivul program s, i este folosit pentru translatarea acestuia ntr-o forma
fis, ier executabil n cazul compilatorului, sau execut, ie n timpul translatarii

executabila:
n cazul interpretorului.
n general
Una dintre cele confuziile din lumea limbajelor de programare s, i a programarii
este clasificarea n limbaje compilate s, i limbaje interpretate. De multe ori se ment, ioneaza
ca C, C++, Ada, Fortran, Java sunt limbaje compilate, n vreme ce Perl, Python, PHP,
Ruby, Lisp sunt limbaje interpretate.
De fapt, orice limbaj poate fi att interpretat ct s, i compilat. Astfel, des, i limbajul C este
de obicei compilat, exista s, i interpretoare pentru acesta1 .

n concluzie, nu exista limbaje interpretate sau compilate ci implementari


de
limbajele
de interpretor pentru un limbaj. ntr-adevar,
compilator sau implementari
de
au asociate preponderent un anumit tip de implementare (C are implementari
de interpretor) s, i, drept urmare, sunt denumite
compilator, Perl are implementari
limbaje compilate sau limbaje interpretate. Totus, i, aceasta clasificare este fort, ata s, i
sa fie atribuita implementarii
acelui limbaj.
recomandam
1

http://www.softintegration.com/

322

INTRODUCERE N SISTEME DE OPERARE

Limbaje de nivel scazut


s, i limbaje de nivel nalt
posibile ale limbajelor de programare1 , o clasificare
Dintre multiplele clasificari

raspndit
a este n limbaje de programare de nivel scazut
s, i limbaje de programare de
nivel nalt.

Limbajele de programare de nivel scazut


sunt acele limbaje care nu ofera o
abstractizare a arhitecturii sistemului de calcul. n mod obis, nuit, aceste limbaje ofera
o translatare minima a instruct, iunilor arhitecturii.

adica scrierea unui program


Limbaje de programare de nivel scazut
sunt codul mas, ina,
direct n binar s, i limbajul de asamblare. Un programator nu va scrie niciodata cod mas, ina
s, i foarte rar cod n limbaj de asamblare.
Limbajele de programare de nivel nalt sunt limbaje de programare care ofera o
abstractizare a arhitecturii sistemului de calcul. Limbajele de programare de nivel
nalt sunt mai us, or portabile s, i ofera o sintaxa mai apropiata de limbajul natural.

Limbajele de programare de nivel nalt ofera o plaja larga de abstractizari.


Unele
limbaje pot ascunde complet detalii legate de modul de adresare a procesorului,
alocarea/dezalocarea memoriei, lucrul cu obiecte etc. Not, iunea de limbaj de nivel nalt
, ile oferite. Daca n anii 70, limbajul de programare C
devine relativa raportat la facilitat
era considerat limbaj de nivel nalt, n zilele noastre poate fi considerat limbaj de nivel

scazut
n comparat, ie cu limbaje precum Java, Python, Ruby.
Exemple de limbaje de nivel nalt sunt: C/C++, Java, Perl, Python, PHP, Ruby, Lisp,
Scheme, Prolog, Haskell.

11.1.3

De la sursa la executabil, de la executabil la proces

unui fis, ier sursa se obt, ine un executabil care


Dupa cum s-a precizat, n urma compilarii
poate fi apoi rulat pentru ndeplinirea sarcinii pentru care a fost scris. n capitolul 5 s-a
ment, ionat ca un executabil este o entitate pasiva care descrie modul n care va rula
programul. Rularea efectiva se realizeaza n urma execut, iei programului n cadrul unui

proces. Procesul este entitatea activa n cadrul careia


se vor aloca resursele programului
s, i se va rula codul asociat pe procesor.
As, a cum reiese s, i din figura 11.1, obt, inerea unui executabil dintr-un fis, ier sursa se
acestuia din urma.
La fel, procesul este obt, inut din
realizeaza n urma compilarii
executabil n urma execut, iei. Utilizatorul va trebui sa cunoasca doar limbajul de nivel
nalt s, i sa scrie codul sursa n acest limbaj. n continuare, compilatorul va obt, ine
operat, iile
executabilul; executabilul este un fis, ier binar care descrie, n cod mas, ina,
precizate de utilizator. n faza de execut, ie, cu suportul nucleului sistemului de operare,
din executabilul obt, inut anterior se creeaza un proces. Procesul este entitatea activa
care va executa pe procesor operat, iile descrise n cod mas, ina n zona de cod a
executabilului (vezi sect, iunea 5.1.2).
1

http://en.wikipedia.org/wiki/Categorical_list_of_programming_languages

CAPITOLUL 11. COMPILARE S, I LINKING

323

Figura 11.1: De la fis, ier sursa la executabil; de la executabil la proces


Compilatorul ofera n acest fel un beneficiu important: utilizatorul nu trebuie sa det, ina
informat, ii despre sistemului fizic din spate (zone de memorie, instruct, iuni ale

procesorului etc.), ci numai not, iuni despre limbajul folosit pentru a scrie codul sursa.
text) n cod
Compilatorul va fi responsabil cu translatarea codului sursa (fis, ierul sursa,
executabilului, sistemul de
mas, ina (fis, ierul executabil, binar). Ulterior, n urma rularii
operare creeaza procesul care executa codul pe procesor.
, ii codului: utilizatorul va
Folosirea unui compilator aduce dupa sine avantajul portabilitat
scrie cod sursa portabil specific limbajului de programare. Compilatorul genereaza cod
binar neportabil specific sistemului fizic pe care acesta va rula. Mai multe detalii despre
portabilitate sunt prezentate n sect, iunea 11.6.
n exemplul de mai jos este prezentat un fis, ier sursa C (hw.c) s, i comenzile pentru
compilarea acestuia (gcc hw.c), generarea unui executabil (a.out) s, i executarea
acestuia n cadrul unui proces (./a.out).
1

#include <stdio.h>

2
3
4
5

int main(void)
{
printf("Hello, World!\n");

return 0;

7
8

Listing 11.1: hw.c


1
2

mircea@cougar:~/carte-uso/cap-10$ file hw.c


hw.c: ASCII C program text

3
4

mircea@cougar:~/carte-uso/cap-10$ gcc hw.c

5
6
7

mircea@cougar:~/carte-uso/cap-10$ file a.out


a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/
Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1,
not stripped

8
9
10

mircea@cougar:~/carte-uso/cap-10$ ./a.out
Hello, World!

11.1.4

Pachete necesare

Pentru dezvoltarea de aplicat, ii este nevoie de

cunos, tint, e despre un anumit limbaj de programare;

324

INTRODUCERE N SISTEME DE OPERARE

un editor folosit pentru a scrie codul sursa;

un interpretor sau un compilator pentru acel limbaj.


n restul acestui capitol, limbajul de programare folosit pentru exemplificare va fi C.
Compilatorul folosit va fi GCC1 , compilatorul implicit pe distribut, iile Linux. Pachetele
necesare pentru dezvoltarea de aplicat, ii C sub Ubuntu sunt gcc, libc6-dev. Se
recomanda s, i paginile de manual pentru dezvoltare din pachetul manpages-dev s, i
documentat, ia
bibliotecii
standard
C
din
pachetul
glibc-doc
(sau
glibc-doc-reference pe sistemele Debian). Instalarea utilitarului Make (vezi

sect, iunea 11.5) este, de asemenea, recomandata.


1

root@cougar:~# apt-get install gcc libc6-dev manpages-dev glibc-doc make

Mai us, or, se poate instala pachetul virtual build-essential. Destinat formal crearii
de pachete .deb, instalarea acestui pachet conduce la instalarea pachetelor importante
pentru dezvoltarea programelor pe un sistem Ubuntu. Pachetul nu include pachetele de
documentat, ie, deci acestea vor trebui instalate separat:
1

root@cougar:~# apt-get install build-essential manpages-dev glibc-doc

11.2

Compilare. GCC

n general, procesul de compilare se refera la obt, inerea unui fis, ier executabil dintr-un
Aplicat, ia care realizeaza aceasta translatare se numes, te compilator.
fis, ier cod sursa.
Un compilator este o aplicat, ie complexa care, pe lnga rolul de translator, trebuie sa
ndeplineasca s, i alte cerint, e. Codul binar obt, inut de compilator n cadrul executabilului

va trebui sa satisfaca una (sau mai multe) din urmatoarele


solicitari:

sa fie ct mai mic;


sa ruleze ct mai rapid;

sa consume ct mai put, ina memorie n momentul rularii.


Un compilator trebuie sa implementeze ct mai mult din specificat, iile standardelor n
rigoare. Spre exemplu, n cazul C, standardele sunt stabilite de ISO2 . Ultimul standard
este ISO 9899:1999 denumit s, i C993 .
Pe sistemele Unix, compilarea se realizeaza prin transmiterea fis, ierului sursa ca
argument compilatorului. Compilarea rezulta n generarea executabilului implicit
a.out4 :
1

mircea@cougar:~/carte-uso/cap-10$ gcc hw.c

2
3
4

mircea@cougar:~/carte-uso/cap-10$ ls
a.out hw.c

5
6
7

mircea@cougar:~/carte-uso/cap-10$ ./a.out
Hello, World!
1

http://gcc.gnu.org/
http://www.iso.org/iso/home.htm
3
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
4
http://en.wikipedia.org/wiki/A.out
2

CAPITOLUL 11. COMPILARE S, I LINKING

325

n linia de comanda,
folosind utilitarul
Pe sistemele Windows compilarea se realizeaza,
1

cl . Executabilul obt, inut are acelas, i nume cu fis, ierul sursa nsa cu extensia .exe:
1

C:\> cl hw.c

2
3
4

C:\> hw.exe
Hello, World!

mare de alte sisteme


GCC este compilatorul implicit pe distribut, iile Linux s, i pe un numar
2
Unix. Scris de Richard Stallman n 1989 pentru proiectul GNU, era folosit init, ial doar
pentru a compila programe C (GNU C Compiler). De-a lungul timpului s-a extins, s, i n
ziua de azi, poate compila programe scrise n C++, Fortran, Objective-C, Pascal, Java
etc. Drept urmare, denumirea sa a fost schimbata n GNU Compiler Collection. Pachetul
GCC ofera executabile (denumite s, i front-end-uri) pentru fiecare tip de limbaj pe care l
poate compila:

gcc este folosit pentru a compila programe scrise n C;


g++ compileaza programe scrise n C++;
gnat compileaza programe scrise n Ada;
gcj compileaza programe scrise n Java;
g77 compileaza programe scrise n Fortran;

11.2.1

Utilizare GCC

La o rulare implicita a GCC, acesta genereaza executabilul a.out. Fie urmatorul


program C:
1

#include <stdio.h>

2
3
4

main()
{
printf("Hello, World!\n");

5
6

Listing 11.2: hw2.c


compilarea se realizeaza prin transmiterea fis, ierului sursa
n forma sa cea mai simpla,
ca argument comenzii gcc:
1

mircea@cougar:~/carte-uso/cap-10$ gcc hw2.c

n mod implicit se obt, ine executabilul a.out. Pentru rularea acestuia se foloses, te
construct, ia ./ care precizeaza execut, ia din directorul curent:
1
2

mircea@cougar:~/carte-uso/cap-10$ ./a.out
Hello, World!

Se poate specifica numele executabilului care se dores, te obt, inut prin folosirea opt, iunii

-o urmata de numele executabilului:


1
2

http://msdn.microsoft.com/en-us/library/ms235639(VS.80).aspx
http://en.wikipedia.org/wiki/Richard_Stallman

326

INTRODUCERE N SISTEME DE OPERARE

mircea@cougar:~/carte-uso/cap-10$ gcc hw2.c -o my_exec

2
3
4

mircea@cougar:~/carte-uso/cap-10$ ./my_exec
Hello, World!

n general, executabilele n Unix nu au extensie. Opt, iunea -o poate fi prezenta oriunde


doar ca va trebui sa fie urmata de numele executabilului:
n linia de comanda,
1

mircea@cougar:~/carte-uso/cap-10$ gcc -o my_other_exec hw2.c

2
3
4

mircea@cougar:~/carte-uso/cap-10$ ./my_other_exec
Hello, World!

O gres, eala frecventa este folosirea opt, iunii -o urmata imediat de numele fis, ierului sursa:
1
2
3
4

mircea@cougar:~/carte-uso/cap-10$ gcc -o hw2.c my_other_exec


my_other_exec:(.rodata+0x0): multiple definition of _fp_hw
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o:(.rodata+0x0):
first defined here
[...]

ATENT, IE: Aceasta gres, eala are consecint, e grave pentru ca duce la pierderea fis, ierului

sursa.
dar nu respecta ntru totul standardul
Programul hw2.c prezentat mai sus compileaza,
C. De exemplu, funct, ia main trebuie sa ntoarca int1 . Compilatorul nu va afis, a, n
mod implicit, niciun fel de avertisment pentru astfel de inconsistent, e. Acest lucru poate
fi schimbat prin folosirea opt, iunii -Wall (Warnings All) care comanda compilatorul sa
atipice:
afis, eze mesaje de avertizare pentru abateri de la standard sau pentru formulari
1
2
3

mircea@cougar:~/carte-uso/cap-10$ gcc -Wall hw2.c -o my_exec


hw2.c:4: warning: return type defaults to int
hw2.c: In function main: hw2.c:6: warning: control reaches end of nonvoid function

Dupa corectare, avertismentele nu vor mai fi furnizate:


1

#include <stdio.h>

2
3
4
5

int main(void)
{
printf("Hello, World!\n");

return 0;

7
8

Listing 11.3: hw2.c


1

mircea@cougar:~/carte-uso/cap-10$ gcc -Wall hw2.c -o my_exec

2
3

mircea@cougar:~/carte-uso/cap-10$

O gres, eala frecventa care poate fi eliminata prin folosirea opt, iunii -Wall este utilizarea
construct, iei if (a = 1). Programul de mai jos foloses, te o astfel de construct, ie care
nsa,
de compilator n momentul folosirii opt, iunii -Wall:
este raportata,
1

Una dintre gres, elile frecvente realizate de programatorii ncepatori


este folosirea formelor void

main(void) sau main(). Standardul C specifica forma int main(void) ca fiind cea corecta.
Nefolosirea acestei forme poate conduce la probleme - http://users.aber.ac.uk/auj/voidmain.shtml

CAPITOLUL 11. COMPILARE S, I LINKING

327

#include <stdio.h>

2
3
4
5

int main(void)
{
int a = 1;

if (a = 1)
printf("Hello, World!\n");

7
8
9

return 0;

10
11

Listing 11.4: hw3.c


1
2

mircea@cougar:~/carte-uso/cap-10$ gcc -Wall hw2.c -o my_exec


hw2.c: In function main: hw2.c:7: warning: suggest parentheses around
assignment used as truth value

IMPORTANT: Din cauza sintaxei relaxate a limbajului C este recomandata folosirea


opt, iunii -Wall la orice compilare de program.

11.2.2

Compilarea din surse multiple

, i din
O aplicat, ie complexa va avea mai multe fis, iere sursa cont, innd diverse part
implementare. n exemplul de mai jos, fis, ierul main.c cont, ine funct, ia main, fis, ierele
add.c s, i sub.c cont, in, respectiv, implementarea funct, iilor add s, i sub, iar fis, ierul
func.h det, ine antetele (declarat, iile) acelor funct, ii.
1

#include <stdio.h>

2
3

#include "func.h"

4
5

#define NUM

10

6
7
8
9
10

int main(void)
{
printf("Suma(%d) = %d\n", NUM, sum(NUM));
printf("Suma-alternanta(%d) = %d\n", NUM, sumalt(NUM));

11

return 0;

12
13

Listing 11.5: main.c


1
2

#ifndef FUNC_H_
#define FUNC_H_

3
4
5

int sum(int n);


int sumalt(int n);

6
7

#endif

Listing 11.6: func.h


1
2

#include "func.h"

328
3
4
5

INTRODUCERE N SISTEME DE OPERARE

int sum(int n)
{
int i, sum;

sum = 0;
for (i = 1; i <= n; i++)
sum += i;

7
8
9
10

return sum;

11
12

Listing 11.7: sum.c


1

#include "func.h"

2
3
4
5

int sumalt(int n)
{
int i, sum;

sum = 0;
for (i = 1; i <= n; i++) {
if (i % 2 == 0)
sum -= i;
else
sum += i;
}

7
8
9
10
11
12
13
14

return sum;

15
16

Listing 11.8: sumalt.c


Pentru obt, inerea unui executabil, toate aceste fis, iere vor fi transmise ca argument
compilatorului:
1

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ gcc -Wall main.c


sum.c sumalt.c

2
3
4
5

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ ./a.out
Suma(10) = 55
Suma-alternanta(10) = -5

Se poate folosi opt, iunea -o pentru a specifica numele executabilului final:


1

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ gcc -Wall main.c


sum.c sumalt.c -o exec

2
3
4
5

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ ./exec
Suma(10) = 55
Suma-alternanta(10) = -5

11.3

(inclusiv link-editarea)
Etapele compilarii

Exemplele de pna acum au folosit GCC pentru a obt, ine dintr-un fis, ier sau mai multe
Totus, i,
fis, iere sursa un executabil. Acest lucru a fost realizat ntr-o singura comanda.
rularea unei instant, e a GCC presupune trecerea printr-un set de etape de prelucrare a
fis, ierului sursa pna la executabil. Aceste faze sunt, n ordine:

CAPITOLUL 11. COMPILARE S, I LINKING

329

1. preprocesarea;
2. compilarea;
3. asamblarea;
4. link-editarea.
O rulare simpla a comenzii gcc nseamna trecerea prin toate aceste faze. Prezent, a
unor parametri poate fort, a GCC sa se opreasca dupa una dintre ele.

Figura 11.2 sintetizeaza etapele compilarii:

Figura 11.2: Fazele compilarii


n cazul folosirii directe a comenzii gcc, se realizeaza integrat toate cele 4 faze. Fis, ierele

obt, inute n urma fiecarei


faze sunt, n aceasta situat, ie, stocate temporar n sistemul de
fis, iere dupa care sunt s, terse. O rulare de tip verbose a comenzii gcc prezinta detaliat
fazele procesului de compilare:
1
2
3
4
5
6
7
8
9
10
11
12

razvan@valhalla:~/code/ptr$ gcc -v -Wall ptr.c -o ptr


Using built-in specs.
Target: x86_64-linux-gnu
[...]
/usr/lib/gcc/x86_64-linux-gnu/4.3.3/cc1 -quiet -v ptr.c -quiet -dumpbase
ptr.c -mtune=generic -auxbase ptr -Wall -version -o /tmp/ccYyQvdx.s
[...]
GNU C (Debian 4.3.3-14) version 4.3.3 (x86_64-linux-gnu) compiled by GNU
C version 4.3.3, GMP version 4.3.1, MPFR version 2.4.1-p2.
[...]
as -V -Qy -o /tmp/ccoFhtN3.o /tmp/ccYyQvdx.s
GNU assembler version 2.19.51 (x86_64-linux-gnu) using BFD version (GNU
Binutils for Debian) 2.19.51.20090723
[...]
/usr/lib/gcc/x86_64-linux-gnu/4.3.3/collect2 --build-id --eh-frame-hdr m elf_x86_64 --hash-style=both -dynamic-linker /lib64/ld-linux-x86-64.so
.2 -o ptr /usr/lib/gcc/x86_64-linux-gnu/4.3.3/../../../../lib/crt1.o
[...] /tmp/ccoFhtN3.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc
[...]

comenzii gcc:
Dupa cum se observa mai sus, exista 3 etape rezultate n urma rularii
1. invocarea compilatorului (cc1) conduce la obt, inerea fis, ierului n limbaj de
asamblare /tmp/ccYyQvdx.s;

330

INTRODUCERE N SISTEME DE OPERARE

2. invocarea

asamblorului
/tmp/ccoFhtN3.o;

(as)

conduce

la

obt, inerea

fis, ierului

obiect

3. invocarea linker-ului (collect2) conduce la obt, inerea fis, ierului executabil ptr;
n cazul GCC, preprocesorul este invocat intern de compilator (cc1) s, i nu rezulta n
obt, inerea unui fis, ier temporar.
n continuare vor fi prezentate mai detaliat fazele procesului de compilare s, i fis, ierele
intermediare obt, inute.

11.3.1

Preprocesarea

Etapa de preprocesare presupune

preprocesare din fis, ierul sursa.

nlocuirea/expandarea

directivelor

de

Printre acestea se
Directivele de preprocesare ncep cu # (diez, sharp n engleza).
a directiva #include s, i directiva #define. Dupa preprocesare, directiva
numar
#include este nlocuita cu fis, ierul inclus, iar directiva #define defines, te un macro

care va fi substituit cu valoarea sa oriunde apare n codul sursa.


n exemplul de mai jos se realizeaza preprocesarea fis, ierului info.c.
1
2

#ifndef INFO_H_
#define INFO_H_

3
4

#define MAX_ARRAY_LENGTH

32

5
6
7
8
9

struct array_struct {
int array[MAX_ARRAY_LENGTH];
int len;
};

10
11

#endif

Listing 11.9: info.h


1

#include "info.h"

2
3
4
5
6

int get_sum(struct array_struct *a)


{
int i;
int sum;

if (a->len >= MAX_ARRAY_LENGTH)


return 0;

8
9
10

for (i = 0; i < a->len; i++)


sum += a->array[i];

11
12
13

return sum;

14
15

Listing 11.10: info.c


GCC dupa faza de preprocesare se foloses, te opt, iunea -E:
Pentru oprirea rularii

CAPITOLUL 11. COMPILARE S, I LINKING

1
2
3
4
5
6

331

mircea@cougar:~/carte-uso/cap-10$ gcc -E info.c


# 1 "info.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "info.c"
# 1 "info.h" 1

7
8
9
10
11
12
13

struct array_strunct {
int array[32];
int len;
};
# 2 "info.c" 2

14
15
16
17
18

int get_sum(struct array_struct *a)


{
int i;
int sum;

19

if (a->len >= 32)


return 0;

20
21
22

for (i = 0; i < a->len; i++)


sum += a->array[i];

23
24
25

return sum;

26
27

Se observa nlocuirea directivei #include cu fis, ierul info.h s, i nlocuirea


macrodefinit, iei MAX_ARRAY_LENGTH cu 32 n fis, ierul preprocesat.
Preprocesarea este singura faza a procesului de compilare care nu rezulta n mod
este scris la
implicit ntr-un nou fis, ier. n absent, a opt, iunii -o, rezultatul preprocesarii
ies, irea standard.
Folosirea opt, iunii -o sau a operatorului de redirectare permite precizarea fis, ierului de
ies, ire. Convent, ional, fis, ierul preprocesat are extensia .i:
1

mircea@cougar:~/carte-uso/cap-10$ gcc -E info.c -o info.i

2
3

mircea@cougar:~/carte-uso/cap-10$ gcc -E info.c > info.i

Preprocesarea este efectuata pe un sistem Linux cu ajutorul utilitarului GNU CPP (C


preprocessor)1 .

11.3.2

Compilarea

Compilarea este etapa n care din fis, ierul preprocesat se obt, ine un fis, ier n limbaj
de asamblare.
Compilarea efectiva nseamna traducerea codului din limbaj de nivel nalt n limbaj de
asamblare.
Limbajul de asamblare descrie instruct, iunile specifice procesorului
1

http://gcc.gnu.org/onlinedocs/cpp/

332

INTRODUCERE N SISTEME DE OPERARE

sistemului fizic.
opt, iunea -S.

GCC dupa faza de compilare se foloses, te


Pentru oprirea rularii

n exemplul de mai jos, se compileaza fis, ierul info.c din sect, iunea anterioara s, i se
obt, ine, implicit, fis, ierul info.s. Se poate preciza explicit fis, ierul de ies, ire cu ajutorul
opt, iunii -o.
1
2

mircea@cougar:~/carte-uso/cap-10$ ls info.*
info.c info.h

3
4

mircea@cougar:~/carte-uso/cap-10$ gcc -S info.c

5
6
7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

mircea@cougar:~/carte-uso/cap-10$ ls info.*
info.c info.h info.s
.file
.text
.globl get_sum
.type
get_sum:
pushl
movl
subl
movl
movl
cmpl
jle
movl
jmp
[...]

"info.c"

get_sum, @function
%ebp
%esp, %ebp
$20, %esp
8(%ebp), %eax
128(%eax), %eax
$31, %eax
.L2
$0, -20(%ebp)
.L4

Listing 11.11: info.s


Pe sistemele Linux s, i Unix, fis, ierul n limbaj de asamblare are, de obicei, extensia .s.
Pe sistemele Windows, un fis, ier n limbaj de asamblare are extensia .asm.

Limbaje de asamblare

Limbajul de asamblare este un limbaj de programare de nivel scazut.


Instruct, iunile sale
(denumite s, i mnemonici) sunt de fapt reprezentarea simbolica a instruct, iunilor puse la
dispozit, ie de procesorul sistemului. Exemple de mnemonici sunt mov, cmp, add, sub,

push etc. Instruct, iunea n cod mas, ina:


1

10110000 01100001 (0xb061)

este scrisa n limbaj de asamblare ca:


1

mov

al,

061h

Mnemonica mov nseamna efectuarea unei copieri. Rezultatul este ncarcarea


valorii
n general, o asociere unu la unu ntre o
0x61 n registrul al al procesorului. Exista,

instruct, iune n limbaj de asamblare s, i o instruct, iune n cod mas, ina.


Un program scris n limbaj de asamblare este neportabil: poate fi rulat numai pe
arhitectura de calcul pentru care a fost scris. Daca programul n limbaj de asamblare
trebuie rescris s, i folosite mnemonicile spcifice acelei
trebuie portat pe o alta arhitectura,
arhitecturi.

CAPITOLUL 11. COMPILARE S, I LINKING

333

ntruct necesita cunos, tint, e despre structura procesorului, resursele acestuia,


Se
mecanismul de acces la memorie, programarea n limbaj de asamblare este dificila.
recomanda folosirea acestuia doar la nevoie:

cnd un limbaj cum este C nu ofera instruct, iuni pentru efectuarea unei anumite
operat, ii

cnd este nevoie de eficient, a maxima care poate fi obt, inuta numai prin scrierea de
cod n limbaj de asamblare
Traducerea codului n limbaj de asamblare n cod obiect se realizeaza cu ajutorul unui

asamblor n faza de asamblare descrisa n sect, iunea urmatoare.


Fiind vorba de o
asociere unu la unu ntre mnemonici s, i instruct, iunile procesorului, este posibila
obt, inerea codului n limbaj de asamblare pornind de la codul obiect. Aceasta operat, ie
poarta numele de dezasamblare s, i este prezentata n sect, iunea 11.3.3.

Tipuri de limbaje de asamblare


Chiar pentru acelas, i procesor pot exista limbaje de asamblare diferite sau, mai corect
spus, sintaxe de limbaj de asamblare diferite. Pe arhitectura x86, asamblorul de la
Microsoft foloses, te sintaxa Intel, pe cnd asamblorul de Linux (GNU) foloses, te sintaxa
AT&T1 . Astfel, copierea valorii 0x100 n registrul eax se face, folosind cele doua
sintaxe, astfel:
1
2

movl
mov

$0x100,
eax,

%eax
100h

; sintaxa AT&T
; sintaxa Intel

La fel, stocarea valorii 100 la adresa indicata de eax:


1
2

movl $0x100,
movl [eax],

11.3.3

(eax)
100h

; sintaxa AT&T
; sintaxa Intel

Asamblarea

Etapa de asamblare este etapa de traducere a codului scris n limbaj de asamblare (fis, ier
text cont, innd mnemonici specifice arhictecturii sistemului de calcul) n cod binar. Acest
cod binar este cod mas, ina reprezentnd codificarea binara a instruct, iunilor procesorului.
Fis, ierul obt, inut poarta numele de fis, ier cod obiect sau modul obiect. Pe Unix un modul
obiect are extensia .o iar pe Windows extensia .obj.
gcc dupa faza de asamblare se foloses, te opt, iunea -c. n mod
Pentru oprirea rularii
implicit se nlocuies, te extensia fis, ierului sursa cu .o. Fis, ierul sursa poate fi un fis, ier C
sau un fis, ier n limbaj de asamblare:
1

mircea@cougar:~/carte-uso/cap-10$ gcc -c info.c

2
3
4

mircea@cougar:~/carte-uso/cap-10$ ls -l info.o
-rw-r--r-- 1 ubuntu ubuntu 764 Sep 19 00:29 info.o

5
6

mircea@cougar:~/carte-uso/cap-10$ gcc -c info.s

7
1

http://en.wikipedia.org/wiki/X86_assembly_language

334
8
9

INTRODUCERE N SISTEME DE OPERARE

mircea@cougar:~/carte-uso/cap-10$ ls -l
info.o -rw-r--r-- 1 ubuntu ubuntu 744 Sep 19 00:29 info.o

Ca s, i pna acum, se poate folosi opt, iunea -o pentru a preciza explicit numele fis, ierului
de ies, ire:
1

mircea@cougar:~/carte-uso/cap-10$ gcc -c info.s -o modul.o

2
3
4

mircea@cougar:~/carte-uso/cap-10$ ls -l modul.o
-rw-r--r-- 1 ubuntu ubuntu 744 Sep 19 00:47 modul.o

n cadrul suitei de aplicat, ii GNU, asamblorul folosit Gas (GNU Assembler)1 , iar
executabilul asociat este as. Un fis, ier n limbaj de asamblare poate fi asamblat folosind
as:
1

mircea@cougar:~/carte-uso/cap-10$ as info.s -o as_out.o

2
3
4

mircea@cougar:~/carte-uso/cap-10$ ls -l as_out.o
-rw-r--r-- 1 ubuntu ubuntu 744 Sep 19 00:48 as_out.o

Modul obiect
Un modul obiect cont, ine cod mas, ina specific procesorului. Acest cod este obt, inut n
urma fazelor de preprocesare, compilare s, i asamblare. Un modul obiect are, de obicei,
extensia .o:
1
2

mircea@cougar:~/carte-uso/cap-10$ file info.o


info.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not
stripped

objdump; dezasamblare
Datorita asocierii unu la unu care exista ntre codul obiect s, i codul n limbaj de asamblare,
se poate realiza o operat, ie de dezasamblare.
Dezasamblare nseamna recuperarea mnemonicilor n limbaj de asamblare
este operat, ia inversa asamblarii.

pornind de la codul mas, ina;


Utilitarul folosit n acest sens este objdump:
1
2

razvan@anaconda:~/uso/compilare$ objdump -d info.o


info.o:
file format elf32-i386

3
4

Disassembly of section .text:

5
6
7
8
9
10
11
12

00000000 <get_sum>:
0:
55
1:
89 e5
3:
83 ec 14
6:
8b 45 08
9:
8b 80 80 00 00 00
f:
83 f8 1f
1

push
mov
sub
mov
mov
cmp

http://en.wikipedia.org/wiki/GNU_Assembler

%ebp
%esp,%ebp
$0x14,%esp
0x8(%ebp),%eax
0x80(%eax),%eax
$0x1f,%eax

CAPITOLUL 11. COMPILARE S, I LINKING


13
14
15

12:
14:
[...]

7e 09
c7 45 ec 00 00 00 00

jle
movl

335
1d <get_sum+0x1d>
$0x0,0xffffffec(%ebp)

nm
Un alt utilitar folositor n lucrul cu fis, iere obiect este nm. Cu ajutorul acestuia se pot lista
simbolurile dintr-un fis, ier obiect:
1
2

razvan@anaconda:~/uso/compilare$ nm info.o
00000000 T get_sum

nm poate oferi informat, ii despre definirea sau nu a unui simbol ntr-un modul obiect:
1
2
3
4
5

razvan@anaconda:~/uso/compilare$ nm main.o
U add
00000000 T main
U printf
U sub

se observa ca simbolurile sunt marcate cu U sau T. T nseamna


Din rezultatul afis, arii
ca acel simbol este definit n zona de text (cod) a executabilului, iar U nseamna ca
este nedefinit n modulul obiect primit ca argument. n exemplul nostru, modulul are
definit simbolul main dar nedefinite simbolurile add, sub s, i printf. Aceste simboluri

se gasesc
n alte module obiect sau n biblioteci. Rezolvarea acestor simboluri se va

realiza n momentul link-editarii.

11.3.4

Optimizarea compilarii

Un compilator translateaza codul sursa n limbaj de asamblare, s, i dupa faza de


Operat, iile descrise ntr-un limbaj de nivel nalt pot fi traduse
asamblare, n cod mas, ina.
n diverse scenarii de instruct, iuni n limbaj de asamblare. Avnd cunos, tint, e intime
despre arhitectura sistemului de calcul (setul de instruct, iuni, registrele procesorului s, i
modurile de adresare), compilatorul poate alege un scenariu mai bun de translatare.
n care compilatorul ncearca obt, inerea unui cod mas, ina mai bun
Faza translatarii
poarta numele de optimizarea codului.
Un termen mult mai bun este cel de
Denumirea de optimizare este us, or fort, ata.
at
, ire; nu se poate spune ca se obt, ine cod optim. Datorita raspndirii

mbunat
acestei
forme, att n limba romna ct s, i n limba engleza (optimizing compiler ), se va folosi n
continuare denumirea de optimizare.
Optimizarea are drept scop obt, inerea unui executabil care sa ruleze ct mai rapid s, i/sau
care sa ocupe ct mai put, in spat, iu.
Se poate ntmpla ca aceste doua scopuri (viteza mare, spat, iu ocupat mic) sa fie n
conflict; utilizatorul va putea preciza compilatorului care scop este mai important.

O data cu dezvoltarea sistemelor embedded, un rol important pe care trebuie sa-l


ndeplineasca executabilul obt, inut de compilator este consumul redus de putere.

336

INTRODUCERE N SISTEME DE OPERARE

reprezinta un compromis ntre obt, inerea unui executabil mai rapid


Folosirea optimizarii

sau care ocupa mai put, in spat, iu s, i un timp mai ndelungat de compilare. Din acest motiv,
a optimizare. Faza de optimizare
partea de dezvoltare a unei aplicat, ii se realizeaza far
a pentru lansare (release).
este folosita n momentul n care aplicat, ia este pregatit
mai jos se prezinta doua
Pentru a justifica avantajele s, i dezavantajele folosirii optimizarii,
scenarii de compilare a unei aplicat, ii C++:
a optimizare; se obt, ine executabilul bb-ssa-no-opt;
far

cu folosirea unor opt, iuni de optimizare; se obt, ine executabilul bb-ssa-opt.


Se poate observa, ca dezavantaj o cres, tere a timpului necesar pentru compilare (de la

4.1 secunde la 5.7 secunde), dar ca avantaj o scadere


a dimensiunii executabilului
(de la 328KB la 140KB):
1

razvan@valhalla:~/school/2001-2006_code/pt/tema4/pt4$ time g++ -o bb-ssano-opt bb-ssa.cpp basic_block.cpp ssa.cpp asamblor.c analizor.c


interpretor.tab.c -lfl

2
3
4
5

real
user
sys

0m4.143s
0m3.624s
0m0.488s

6
7

razvan@valhalla:~/school/2001-2006_code/pt/tema4/pt4$ time g++ -O -o bbssa-opt bb-ssa.cpp basic_block.cpp ssa.cpp asamblor.c analizor.c


interpretor.tab.c -lfl

8
9
10
11

real
user
sys

0m5.769s
0m5.288s
0m0.456s

12
13
14

razvan@valhalla:~/school/2001-2006_code/pt/tema4/pt4$ ls -lh bb-ssa-noopt


-rwxr-xr-x 1 razvan razvan 328K Aug 21 22:11 bb-ssa-no-opt

15
16
17

razvan@valhalla:~/school/2001-2006_code/pt/tema4/pt4$ ls -lh bb-ssa-opt


-rwxr-xr-x 1 razvan razvan 140K Aug 21 22:12 bb-ssa-opt

GCC permite optimizarea codului obt, inut prin intermediul opt, iunii -O. Aceasta este
care specifica gradul de optimizare/mbunat
at
, ire a codului. n mod
urmata de un numar
implicit, compilatorul nu optimizeaza codul. Acest lucru este echivalent cu folosirea
opt, iunii -O0 (litera o majuscula s, i zero):
1

mircea@cougar:~/carte-uso/cap-10$ gcc -c chatserv.c -O0

2
3
4

mircea@cougar:~/carte-uso/cap-10$ ls -l
chatserv.o -rw-r--r-- 1 ubuntu ubuntu 3656 Sep 18 23:46 chatserv.o

GCC prezinta 3 niveluri numerice de compilare:


a a
opt, iunea -O1 nseamna reducerea timpului de execut, ie s, i a codului obt, inut far
afecta semnificativ timpul de compilare; este echivalenta cu folosirea opt, iunii -O
a un argument numeric)
(far
1

mircea@cougar:~/carte-uso/cap-10$ gcc -c chatserv.c -O1

2
3
4

mircea@cougar:~/carte-uso/cap-10$ ls -l
chatserv.o -rw-r--r-- 1 ubuntu ubuntu 3200 Sep 18 23:46 chatserv.o

CAPITOLUL 11. COMPILARE S, I LINKING

337

opt, iunea -O2 nseamna folosirea tuturor optimizarilor


care nu atrag un compromis
viteza-spat, iu
1

mircea@cougar:~/carte-uso/cap-10$ gcc -c chatserv.c -O2

2
3
4

mircea@cougar:~/carte-uso/cap-10$ ls -l
chatserv.o -rw-r--r-- 1 ubuntu ubuntu 3232 Sep 18 23:47 chatserv.o

Se observa ca s-a obtinut un cod ceva mai mare dect n cazul opt, iunii -O1, dar
care va rula mai rapid. Nu ntotdeauna un cod mai mic va fi mai rapid.
metoda de
opt, iunea -O3 este n acest moment cea mai puternica (s, i agresiva)
compilare:
1

mircea@cougar:~/carte-uso/cap-10$ gcc -c chatserv.c -O3

2
3
4

mircea@cougar:~/carte-uso/cap-10$ ls -l
chatserv.o -rw-r--r-- 1 ubuntu ubuntu 3308 Sep 18 23:47 chatserv.o

GCC ofera s, i opt, iunea -Os care nseamna optimizarea codului pentru a ocupa
ct mai put, in spat, iu. O utilizare tipica este n cazul dispozitivelor embedded care
dispun de resurse hardware reduse:
1

mircea@cougar:~/carte-uso/cap-10$ gcc -c chatserv.c -Os

2
3
4

mircea@cougar:~/carte-uso/cap-10$ ls -l
chatserv.o -rw-r--r-- 1 ubuntu ubuntu 2868 Sep 18 23:47 chatserv.o

11.3.5

Link-editarea

Modulul obiect descrie


Un modul obiect este asociat unui singur fis, ier/modul sursa.
datele s, i codul funct, iilor proprii. Varibialele s, i funct, iile poarta numele generic de
simboluri. Simbolurile externe modulului (adica funct, iile sau variabilelele externe
nedefinite local, prezente n alte module) sunt marcate ca nedefinite n cadrul
modulului.

Pentru obt, inerea unui fis, ier executabil s, i deci pentru rularea acestui cod este necesara:

identificarea simbolurilor nedefinite, operat, ie denumita s, i rezolvarea simbolurilor,


s, i

unificarea sau legarea (linking) a zonelor de date s, i cod asociate ntr-un fis, ier
executabil.
Aceasta operat, ie se numes, te link-editare, linking sau legare.
Spre exemplu, n momentul n care se compileaza un modul obiect care foloses, te funct, ia
de biblioteca printf, simbolul apare ca fiind nedefinit (caracterul U la nm):
1
2
3

razvan@anaconda:~/uso/compilare$ nm main.o
00000000 T main
U printf

se obt, ine un
Funct, ia printf este definita n biblioteca standard C. n urma link-editarii
executabil care importa zona de cod asociata funct, iei printf din biblioteca standard
C. Alta situat, ie este folosirea ntr-un modul obiect a unei funct, ii definite ntr-un alt modul

338

INTRODUCERE N SISTEME DE OPERARE

obiect; un exemplu este folosirea funct, iei sum n fis, ierul main.c descris n
sect, iunea 11.2.2. Funct, ia sum este definita n sum.c.
Aplicat, ia care rezolva simbolurile nedefinite s, i care realizeaza legarea modulelor
obiect poarta numele de linker.
Rolul unui linker este, as, adar, de a lega mai multe fis, iere obiect sau biblioteci, de a

rezolva simbolurile nedefinite s, i de a obt, ine un executabil sau o biblioteca.


Figura 11.3 prezinta rolul ndeplinit de un linker.

Figura 11.3: Funct, ionarea linker-ului

Mai multe detalii despre biblioteci se gasesc


n sect, iunea 11.4.

Invocare linker
Linker-ul de pe distribut, iile GNU/Linux este GNU linker sau GNU ld1 . Executabilul asociat
este ld. Linker-ul este rareori invocat cu ajutorul comenzii ld. n mod obis, nuit, linker-ul
este invocata intern de comanda gcc:
1

mircea@cougar:~/carte-uso/cap-10$ gcc -Wall -c main.c

2
3

mircea@cougar:~/carte-uso/cap-10$ gcc -Wall -c add.c

4
5

mircea@cougar:~/carte-uso/cap-10$ gcc -Wall -c sub.c

6
7

mircea@cougar:~/carte-uso/cap-10$ gcc main.o add.o sub.o -o exec

8
9
10

mircea@cougar:~/carte-uso/cap-10$ ./exec
Suma (10): 55
1

http://en.wikipedia.org/wiki/GNU_linker

CAPITOLUL 11. COMPILARE S, I LINKING


11

339

Suma alternanta (10): -5

Se poate folosi s, i ld, nsa numarul


mare de argumente care trebuie transmis face

aceasta opt, iune mai put, in viabila:


1

mircea@cougar:~/carte-uso/cap-10$ ld -dynamic-linker /lib/ld-linux.so.2 /


usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.1.2/crtbegin
.o main.o add.o sub.o -lc /usr/lib/gcc/i486-linux-gnu/4.1.2/crtend.o /usr
/lib/crtn.o -o exec

2
3
4
5

mircea@cougar:~/carte-uso/cap-10$ ./exec
Suma (10): 55
Suma alternanta (10): -5

11.3.6

Fis, iere executabile

Un fis, ier executabil este un fis, ier binar obt, inut dintr-un set de fis, iere obiect s, i
biblioteci n urma operat, iei de link-editare.
Spre deosebire de fis, ierele obiect, un fis, ier executabil are identificate s, i, n general,
sau la
rezolvate simbolurile. Aceste simboluri sunt rezolvate la linking (legare statica)

rulare (legare dinamica).


n execut, ie, informat, iile cont, inute n fis, ierul executabil sunt folosite
n momentul lansarii
pentru a genera un proces. Un fis, ier executabil va cont, ine codul mas, ina folosit pentru
ndeplinirea sarcinilor date dar s, i antete s, i sect, iuni de formatare auxiliare. Acestea sunt
folosite pentru a descrie modul n care se foloses, te codul, zonele de memorie folosite
etc.
Un fis, ier executabil are, as, adar, un format bine definit. Formatul de fis, ier executabil se

refera la fis, iere obiect, fis, iere executabile s, i la biblioteci cu legare dinamica.

Formate ale fis, ierelor executabile


Formatul unui fis, ier executabil1 este strns legat de sistemul de operare. Sistemul de
operare este responsabil cu interpretarea unui fis, ier executabil s, i generarea unui
proces pe baza acestuia. Un executabil poate fi rulat pe un sistem de operare daca
acel sistem de operare ofera suport pentru formatul de executabil folosit. Formatul de
fis, ier executabil se refera s, i la fis, ierele obiect.
Exemple de formate de fis, iere obiect/executabile sunt:

ELF folosit n sistemele Unix;


COFF versiunea anterioara ELF folosita pe Unix;
a.out primul format folosit de sistemele Unix; a oferit denumirea pentru
executabilul implicit generat de compilator/linker;

PE formatul implicit pe sistemele Windows;


1

http://en.wikipedia.org/wiki/Object_file

340

INTRODUCERE N SISTEME DE OPERARE

Mach-O formatul implicit pe Mac OS X.


n Linux, formatul de fis, ier obiect/executabil folosit este ELF (Executable and Linking
Format)1 :
1
2

mircea@cougar:~/carte-uso/cap-10$ file info.o


info.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not
stripped

3
4
5

mircea@cougar:~/carte-uso/cap-10$ file exec


exec: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/
Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1,
not stripped

6
7
8

mircea@cougar:~/carte-uso/cap-10$ file /bin/ls


/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for
GNU/Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux
2.4.1, stripped

9
10
11

mircea@cougar:~/carte-uso/cap-10$ file /lib/libc-2.3.6.so


/lib/libc-2.3.6.so: ELF 32-bit LSB shared object, Intel 80386, version 1
(SYSV), for GNU/Linux 2.4.1, stripped

n listingul de mai sus se observa tipurile de fis, iere care folosesc formatul ELF:

module obiect; fis, ierul info.o este un modul obiect ELF relocabil2 ;
fis, iere executabile; fis, ierele exec s, i /bin/ls sunt fis, iere executabile format ELF;
biblioteci partajate (vezi x.y.z); fis, ierul /lib/libc-2.3.6.so este o biblioteca
partajata (shared-object) (vezi sect, iunea 11.4.1).
Utilitarul readelf poate fi folosit pentru analiza unui fis, ier n format ELF. n exemplul
de mai jos se pot observa cteva din sect, iunile unui fis, ier executabil: .text reprezinta
zona de cod, .rodata zona de date read-only.
1
2

razvan@anaconda:~/uso/compilare$ readelf -S exec


There are 34 section headers, starting at offset 0xe38:

3
4
5
6
7
8
9
10

Section Headers:
[Nr] Name
Inf Al
[ 0]
0 0
[ 1] .interp
0 1
[ 2] .note.ABI-tag
0 4
[ 3] .hash
0 4
[...]

1
2

Type

Addr

NULL

00000000 000000 000000 00

PROGBITS

08048114 000114 000013 00

NOTE

08048128 000128 000020 00

HASH

08048148 000148 000028 04

http://en.wikipedia.org/wiki/Executable_and_Linkable_Format
http://en.wikipedia.org/wiki/Relocation_(computer_science)

Off

Size

ES Flg Lk
0

CAPITOLUL 11. COMPILARE S, I LINKING

11.4

341

Biblioteci de funct, ii

O biblioteca este colect, ie de funct, ii sau clase care ofera servicii preimplementate
dezvoltatorului. n general, o biblioteca este obt, inuta prin comasarea mai multor
fis, iere obiect. O biblioteca este, de asemenea, un fis, ier.

Figura 11.4: Biblioteca


libraries) au aparut pentru a oferi o mai mare flexibilitate
Bibliotecile de funct, ii (engleza:
dezvoltatorilor de software. Acestea reunesc funct, ii des utilizate, astfel nct un program
a a fi nevoie de rescrierea codului dorit.
va folosi o biblioteca far
n zilele noastre, foarte multe servicii au fost ncapsulate n biblioteci de funct, ii pentru a
us, ura procesul de dezvoltare de noi aplicat, ii. Astfel:

biblioteca standard C (libc) ofera serviciile de baza ale sistemului;


biblioteci precum GTK+1 sau Qt2 ofera primitive pentru dezvoltarea de interfet, e
grafice;

utilitarul Pidgin3 de instant messaging a izolat funct, iile principale n biblioteca


libpurple;
dezvotatorii Subversion4 au dezvoltat biblioteca libsvn1;
libpng, libjpeg, libtiff sunt folosite pentru prelucrarea de imagini;
libtorrent-rakshasa s, i libtorrent-rasterbar sunt biblioteci care
mare de client, i
implementeaza protocolul BitTorrent folosite de un numar
BitTorrent.
Mai sus sunt prezentate doar cteva dintre aplicat, iile bibliotecilor. Practic, orice

funct, ionalitate utilizabila de mai multe aplicat, ii poate fi implementata ntr-o biblioteca.
1

http://www.gtk.org/
http://qt.nokia.com/
3
http://www.pidgin.im/
4
http://subversion.tigris.org/
2

342

INTRODUCERE N SISTEME DE OPERARE

Din circa 25000 de pachete instalabile n cadrul distribut, iei Debian GNU/Linux
Testing/Squeeze1 , peste 5000 sunt biblioteci:
1
2

razvan@valhalla:~/code/ptr$ apt-cache search library | grep ^lib | wc -l


5699

11.4.1

Tipuri de biblioteci

Bibliotecile s, i ncep utilizarea n momentul link-editarii.


Pentru rezolvarea simbolurilor
nedefinite, linker-ul cauta n modulele obiect ncapsulate n cadrul bibliotecilor s, i
realizeaza rezolvarea simbolurilor. Rezolvarea nseamna marcarea locului n care
simbolul este definit. n funct, ie de tipul bibliotecii, linker-ul decide sa adauge modulul
Exista,

obiect necesar n codul executabilului sau doar sa marcheze referint, a rezolvata.


astfel, doua tipuri de biblioteci:

biblioteci cu legare statica (statically-linked libraries) sau, pe scurt, biblioteci


statice;

biblioteci cu legare dinamica (dinamically-linked libraries) denumite biblioteci


partajate (shared libraries) pe Linux s, i dynamic-link libraries (DLL) pe Windows.
Indiferent de tip, bibliotecile de funct, ii exista sub forma de fis, iere independente n sistem.

Bibliotecile statice (static libraries) sunt acele biblioteci ale caror


module obiect

componente sunt incluse n fis, ierul executabil n momentul link-editarii.


cu o biblioteca statica det, ine tot codul
Altfel spus, un executabil obt, inut n urma legarii
a prin includerea fis, ierelor
necesar pentru a rula. Dimensiunea executabilului este marit
obiect necesare din cadrul bibiotecii.
n cazul bibliotecilor partajate (shared libraries), operat, ia de link-editare doar
marcheaza referint, ele ca fiind rezolvate. Modulele obiect nu sunt incluse n codul

n execut, ie sau n
executabilului obt, inut; vor fi adaugate
n momentul lansarii

momentul rularii.
Codul asociat unei biblioteci partajate nu ajunge niciodata n cadrul unui executabil.

Biblioteca va fi ncarcat
a n memorie la nevoie s, i va fi folosita n cadrul procesului

obt, inut n urma execut, iei. n funct, ie de momentul n care biblioteca va fi ncarcat
a n

memorie, exista doua subtipuri de biblioteci cu legare dinamica:

biblioteci cu ncarcare
la execut, ie (load-time dynamically-linked library )
biblioteca este adusa n memorie n momentul n care programul executat, daca
nu exista deja acolo;

biblioteci cu ncarcare
la rulare (run-time dinamically-linked library ) biblioteca
este adusa n memorie la cerere, n momentul n care programul executa o
instruct, iune care solicita acest lucru.
Bibliotecile partajate, dupa cum le spune s, i denumirea, reprezinta metoda cea mai
utilizata de a pune la dispozit, ie funct, ii comune pentru mai multe aplicat, ii. Daca doua
1

http://packages.debian.org/testing/

CAPITOLUL 11. COMPILARE S, I LINKING

343

aceasta va trebui sa fie ncarcat

sau mai multe aplicat, ii folosesc aceeas, i biblioteca,


a o

singura data n memorie, economisind astfel spat, iul ocupat. Biblioteca standard C,

folosita de cea mai mare parte a aplicat, iilor, este, de obicei, o bibioteca partajata.
Tabela 11.1 reprezinta o comparat, ie ntre bibliotecile statice s, i cele partajate:
Tabelul 11.1: Comparat, ie ntre tipurile de biblioteci
Biblioteci statice
Biblioteci partajate
Colect, ie/arhiva de module obiect
Executabil rezultat mai mare; se include
cod
Executabilul poate fi mutat pe alt sistem

Codul necesar este adaugat


fiecarui

executabil s, i apoi fiecarui


proces
Timp de execut, ie mai rapid

11.4.2

Fis, ier format ELF


nu se
Executabil de dimensiune mica;
include cod
Executabilul are nevoie de prezent, a
bibliotecii pentru a putea rula
Codul bibliotecii este partajat ntre toate
procesele care o folosesc
Timp de execut, ie mai lent; se face
rezolvarea simbolurilor n mod dinamic

Informat, ii despre bibliotecile de funct, ii

Pe un sistem Linux, bibliotecile se gasesc


n directoarele /lib, /usr/lib sau
/usr/local/lib. Bibliotecile statice au extensia .a, iar cele partajate .so (de la
shared object).
Informat, ii primare despre bibliotecile de funct, ii se pot afla prin intermediul comenzii

file:
1
2

mircea@cougar:~/carte-uso/cap-10$ file /usr/lib/libm.a


/usr/lib/libm.a: current ar archive

3
4
5

mircea@cougar:~/carte-uso/cap-10$ file /lib/libm.so.6


/lib/libm.so.6: symbolic link to libm-2.3.3.so

6
7
8
9

mircea@cougar:~/carte-uso/cap-10$ file /lib/libm-2.3.3.so


/lib/libm-2.3.3.so: ELF 32-bit LSB shared
object, Intel 80386, version 1 (SYSV), not stripped

Bibliotecile statice sunt de fapt arhive de fis, iere obiect. Ele sunt create prin intermediul
comenzii ar. (pentru mai multe informat, ii se poate consulta man ar).
O biblioteca partajata este creata de linker. Pe un sistem Linux, o biblioteca partajata
se creeaza cu ajutorul comenzii gcc s, i opt, iunea -shared1 . O biblioteca partajata este
de versiune. Pentru a facilita folosirea acesteia, se creeaza
identificata printr-un numar
a care nu include numarul

o legatur
versiunii.
Comanda nm poate fi utilizata pentru a vizualiza lista simbolurilor dintr-o biblioteca

(statica sau dinamica):


1
2
3

mircea@cougar:~/carte-uso/cap-10$ nm /lib/libm.so.6
00052b60 T fscanf
00043f20 T fprintf
1

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

344
4
5
6
7
8

INTRODUCERE N SISTEME DE OPERARE

00052b90 T scanf
00052bd0 T sscanf
U __libc_enable_secure@@GLIBC_PRIVATE
U __libc_stack_end@@GLIBC_2.1
[...]

Simbolurile marcate cu T sunt simboluri din zona de cod (funct, ii) ce pot fi folosite extern
de alte programe sau alte biblioteci. Simbolurile care sunt precedate de caracterul U
sunt simboluri care trebuie rezolvate de linker la apelarea programului (se observa ca
ele nu au adresa n fis, ierul cu biblioteca). Acestea nu sunt definite local, ci n alte
biblioteci (simbolul __libc_enable_secure@@GLIBC_PRIVATE este definit n
biblioteca standard C libc)

11.4.3

Utilizarea bibliotecilor

Bibliotecile reprezinta colect, ii de module preimplementate folosite pentru obt, inerea unui
n momentul link-editarii,
linker-ului i trebuie precizate
executabil, ceea ce nseamna ca,
bibliotecile necesare. Acest lucru se realizeaza cu ajutorul opt, iunii -l (litera L mic). n
listingul 11.4.3 se apeleaza funct, ii din biblioteca ncurses.
1
2
3

#include <stdio.h>
#include <stdlib.h>
#include <ncurses.h>

4
5
6
7
8
9
10
11
12
13

int main(void)
{
initscr();
cbreak(); noecho();
printf("Smash forehead on keyboard to continue ...");
fflush(stdout); fflush(stdin);
getch();
nocbreak(); echo();
endwin();

14

return 0;

15
16

Listing 11.12: Folosire funct, ii din biblioteca ncurses

n urma comenzii de compilare s, i rulare rezulta urmatoarea


eroare:
1
2
3
4
5
6
7
8
9
10
11

razvan@valhalla:~/carte-uso/cap-10$ gcc -Wall -o getch getch.c


/tmp/ccavsseB.o: In function main:
getch.c:(.text+0x5): undefined reference to initscr
getch.c:(.text+0xa): undefined reference to cbreak
getch.c:(.text+0xf): undefined reference to noecho
getch.c:(.text+0x3d): undefined reference to stdscr
getch.c:(.text+0x42): undefined reference to wgetch
getch.c:(.text+0x47): undefined reference to nocbreak
getch.c:(.text+0x4c): undefined reference to echo
getch.c:(.text+0x51): undefined reference to endwin
collect2: ld returned 1 exit status

, te definit, iile funct, iilor initscr, cbreak, noecho etc. Pentru a


Linker-ul nu gases
rezolva aceasta problema link-erului i trebuie specificat sa foloseaca biblioteca
ncurses. Aceasta este localizata n fis, ierul libncurses.a sau libncurses.so:

CAPITOLUL 11. COMPILARE S, I LINKING

1
2

345

razvan@valhalla:~/carte-uso/cap-10$ ls /usr/lib/libncurses.*
/usr/lib/libncurses.a /usr/lib/libncurses.so /usr/lib/libncurses.so.5

Numele sub care va fi folosita biblioteca de linker se obt, ine prim eliminararea extensiei
(.a sau .so) s, i a prefixului lib. Pentru face legarea fis, ierului getch.c cu biblioteca
ncurses, se foloses, te comanda:
1
2

razvan@valhalla:~/carte-uso/cap-10$ gcc -Wall -o getch \


> getch.c -lncurses

3
4
5

razvan@valhalla:~/carte-uso/cap-10$ ls -l getch
-rwxr-xr-x 1 razvan razvan 10734 Sep 21 23:25 getch

n acest caz, operat, ia de linking se desfas


, oara cu sucess s, i se obt, ine
Se observa ca,
executabilul getch.

Bibliotecile sunt cautate


n zone standard din sistemul de fis, iere: /lib, /usr/lib,
, te ntr-unul
/usr/local/lib. n cazul n care fis, ierul asociat bibliotecii nu se gases
din directorele standard, se foloses, te opt, iunea -L. Astfel, daca se dores, te legarea cu
o biblioteca definita n fis, ierul /home/traian/libs/libavatar.a, se foloses, te o
comanda de forma:
1

ubuntu@ubuntu:~$ gcc -Wall -o morph morph.c -lavatar -L/home/traian/libs

Cnd se specifica un director suplimentar n care se va realiza cautarea,


numele
acestuia se lipes, te de opt, iunea -L; nu se lasa spat, ii libere ntre opt, iunea -L s, i
numele directorului.

n cazul bibliotecilor partajate, exista o etapa suplimentara de cautare


a bibliotecii n
n execut, ie a programului (la ncarcare).

momentul lansarii
Modul n care se specifica

, es, te sfera de cuprindere a acestui capitol.


directoare suplimentare de cautare
depas
Pentru cei interesat, i, Internetul ofera multe tutoriale despre aceste not, iuni1 .

11.5

Automatizarea sarcinilor make

mare de fis, iere sursa.

Aplicat, iile complexe dispun de un numar


Compilarea s, i
link-editarea acestora poate deveni un proces anevoios s, i repetitiv. Se poate ntmpla
ca doar cteva fis, iere sursa sa fie modificate s, i sa nu fie nevoie de recompilarea ntregii
aplicat, ii. Se dores, te, as, adar, un utilitar care sa automatizeze sarcinile de compilare,
linking s, i altele s, i sa rezolve dependent, ele ntre fis, ierele sursa pentru a eficientiza
procesul.
Make este un un astfel de utilitar: un program pentru automatizarea task-urilor. Make
rezolva problema execut, iei unor act, iuni n funct, ie de relat, iile (dependet, ele) ntre ele. O
act, iune este executata doar daca act, iunile de care depinde au fost executate.
Relat, iile ntre act, iuni sunt definite ntr-un fis, ier numit Makefile. Pe baza acestuia,
Make determina automat secvent, a de pas, i care trebuie efectuata pentru respectarea
dependent, elor. Pentru a optimiza execut, ia act, iunilor, Make determina daca o act, iune
n acelas, i timp, Make detecteaza daca pentru o
a fost efectuata s, i nu o mai executa.
1

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

346

INTRODUCERE N SISTEME DE OPERARE

act, iune s-a modificat o dependent, a s, i o executa din nou. Figura 11.5 descrie mdoul de
funct, ionare a utilitarului Make.

Figura 11.5: Funct, ionare Make


de fapt, o clasa de aplicat, ii. Cel mai raspndit

Make reprezinta,
membru al acestei clase
1
este GNU Make . Executabilul asociat este make.
Vom descrie modul de funct, ionare s, i utilizare a Make prin compilarea s, i link-editarea
aplicat, iei descrisa n sect, iunea 10.3. Aplicat, ia consta din 4 fis, iere (main.c, sum.c,
sumalt.c, func.h).

11.5.1

Cel mai simplu Makefile

Cea mai simpla forma de fis, ier Makefile cont, ine comanda de compilare s, i linking a
fis, ierelor de mai sus:
1

exec:
gcc main.c sum.c sumalt.c -o exec

Listing 11.13: Makefile foarte simplu


Pentru rularea comenzii descrise n fis, ierul Makefile se foloses, te comanda make:
1
2

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ make
gcc main.c sum.c sumalt.c -o exec

Fis, ierul Makefile specifica faptul ca pentru a obt, ine executabilul exec se ruleaza
comanda gcc main.c sum.c sumalt.c -o exec. exec poarta numele de
a fis, ierului Makefile: ceea ce se dores, te obt, inut.
target (t, inta)
Din motive de tradit, ie, comenzile dintr-un fis, ier Makefile sunt precedate de caracterul

TAB. O gres, eala frecventa este folosirea de spat, ii n loc de caracterul TAB nainte de
destul
folosirea unei comenzi. Aparit, ia unui mesaj de forma celui de mai jos nseamna,
de probabil, omiterea folosirii caracterului TAB:
1
2

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ make
Makefile:2: *** missing separator. Stop.
1

http://www.gnu.org/software/make/

CAPITOLUL 11. COMPILARE S, I LINKING

11.5.2

347

Folosirea dependent, elor

Fis, ierul Makefile de mai sus are un neajuns important: la orice rulare a comenzii Make
se va executa comanda de compilare s, i linking indiferent daca fis, ierele sursa au fost sau
nu modificate. Acest lucru nseamna realizarea unei act, iuni inutile.
n Makefile faptul ca executabilul exec se obt, ine
Pentru a evita acest lucru, specificam
din cele trei fis, iere sursa (main.c, sum.c, sumalt.c). Cele trei fis, iere sursa sunt

adaugate
n lista de dependent, e a executabilului (dupa caracterul : - doua puncte).

Dependent, ele sunt fis, iere sau alte target-uri de a caror


existent, a sau realizare depinde
target-ul curent:
1
2

exec: main.c sum.c sumalt.c


gcc main.c sum.c sumalt.c -o exec

Listing 11.14: Makefile cu dependent, e


n aceasta situat, ie, rularea comenzii make nu mai are ca efect compilarea s, i link-editarea
celor trei fis, iere sursa ci afis, area unui mesaj care ment, ioneaza ca executabilul exec
exista s, i nu au fost modificate fis, ierele de care depinde:
1
2

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ make
make: exec is up to date.

Daca un fis, ier din lista de dependent, e va fi modificat, Make va observa acest lucru s, i
va rula din nou comanda. Un element target sau dependent, a a unui fis, ier Makefile are

doua stari:

actualizat: fis, ierul asociat nu a fost modificat s, i dependent, ele sale sunt actualizate;
neactualizat: fis, ierul asociat a fost modificat sau o parte din dependent, ele sale nu
sunt actualizate.

11.5.3

Dependent, e ierarhice

Fis, ierul Makefile anterior are nca neajunsuri. Un neajuns important este prezent, a
fis, ierelor sursa n lista de dependent, e.
Fie situat, ia n care programatorul modifica fis, ierul sum.c. Rularea comenzii make va

nsemna urmatorul
set de pas, i:

se verifica daca dependent, ele target-ului exec sunt actualizate;


se observa ca fis, ierul sum.c a fost modificat, deci dependent, a sum.c este

neactualizata;

target-ul exec este marcat ca neactualizat; trebuie rulata comanda asociata


target-ului;

se ruleaza comanda gcc main.c sum.c sumalt.c;


comanda are drept consecint, a compilarea tuturor fis, ierelor din lista de
dependent, e s, i apoi link-editarea fis, ierelor obiect asociate.

348

INTRODUCERE N SISTEME DE OPERARE

as, adar, trei procese de compilare (pentru main.c, sum.c,


Se efectueaza,
sumalt.c) s, i un proces de link-editare a celor trei module obiect asociate. Totus, i,
ntruct doar fis, ierul sum.c a fost modificat, nu este nevoie de compilarea fis, ierelor
main.c s, i sumalt.c.
Pentru a elimina acest neajuns, se modifica fis, ierul Makefile astfel:
1
2

exec: main.o sum.o sumalt.o


gcc main.o sum.o sumalt.o -o exec

3
4
5

main.o: main.c
gcc -c main.c -o main.o

6
7
8

sum.o: sum.c
gcc -c sum.c -o sum.o

9
10
11

sumalt.o: sumalt.c
gcc -c sumalt.c -o sumalt.o

Listing 11.15: Makefile cu dependent, e ierarhice


n aceasta situat, ie, fis, ierul Makefile descrie o arborescent, a de dependent, e, ca n
figura 11.6.

Figura 11.6: Dependent, e ntr-un fis, ier Makefile

n figura sunt reprezentate s, i comenzile rulate pentru obt, inerea fiecarui


fis, ier n parte.

Astfel, o rulare simpla a comenzii make va produce urmatorul


rezultat:
1
2
3
4
5

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ make -f Makefile.


dep.ier
gcc -c main.c -o main.o
gcc -c sum.c -o sum.o
gcc -c sumalt.c -o sumalt.o
gcc main.o sum.o sumalt.o -o exec

Pas, ii pe care i efectueaza utilitarul Make sunt:

CAPITOLUL 11. COMPILARE S, I LINKING

349

verifica lista de dependent, e a target-ului exec; exista trei dependent, e care au la


rndul lor alte dependent, e; aceste dependent, e trebuie verificate;
deci trebuie obt, inut; se ruleaza comanda gcc -c
target-ul main.o nu exista,
main.c -o main.o;
deci trebuie obt, inut; se ruleaza comanda gcc -c
target-ul sum.o nu exista,
sum.c -o sum.o;
deci trebuie obt, inut; se ruleaza comanda gcc -c
target-ul sumalt.o nu exista,
sumalt.c -o sumalt.o;

toate cele trei dependent, e ale target-ului exec erau neactuzalizate; target-ul
gcc main.o
exec este atunci neactualizat s, i trebuie rulata comanda asociata:
sum.o sumalt.o -o exec.
Dupa cum se precizase la nceput, presupunem ca programatorul modifica fis, ierul
comenzii make este:
sum.c. Rezultatul rularii
1
2
3

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ make -f Makefile.


dep.ier
gcc -c sum.c -o sum.o
gcc main.o sum.o sumalt.o -o exec

Pas, ii urmat, i de utilitarul Make sunt:

verifica lista de dependent, e a target-ului exec; exista trei dependent, e care au la


rndul lor alte dependent, e; cele trei dependent, e trebuie verificate;
dependent, a sa (main.c) exista s, i este nemodificata;

target-ul main.o exista,


target-ul este actualizat, nu este nevoie de rularea comenzii asociate;
dependent, a sa (sum.c) exista dar este modificata;

target-ul sum.o exista,


target-ul sum.o trebuie actualizat s, i se ruleaza comanda gcc -c sum.c -o
sum.o;
dependent, a sa (sumalt.c) exista s, i este
target-ul sumalt.o exista,
target-ul este actualizat, nu este nevoie de rularea comenzii
nemodificata;
asociate;

una dintre trei dependent, e ale target-ului exec (sum.o) este neactuzalizata;

target-ul exec este atunci neactualizat s, i trebuie rulata comanda asociata: gcc
main.o sum.o sumalt.o -o exec.
n acest caz, din cei patru pas, i posibili (trei pas, i de compilare s, i un pas
Se observa ca,
de link-editare) este nevoie de execut, ia a doar doi dintre aces, tia: compilarea sum.c s, i
link-editarea.
a fis, ierul
Fis, ierul Makefile curent mai prezinta un neajuns: n cazul unei modificari

header func.h nu se actualizeaza niciun target, ntruct fis, ierul nu este adaugat
n
lista de dependent, e a niciunui target. Un fis, ier Makefile corect arata astfel:
1
2

exec: main.o sum.o sumalt.o


gcc main.o sum.o sumalt.o -o exec

3
4
5
6

main.o: main.c func.h


gcc -c main.c -o main.o

350
7
8

INTRODUCERE N SISTEME DE OPERARE

sum.o: sum.c func.h


gcc -c sum.c -o sum.o

9
10
11

sumalt.o: sumalt.c func.h


gcc -c sumalt.c -o sumalt.o

Listing 11.16: Makefile cu fis, ier header n lista de dependent, e

11.5.4

Target-ul clean

de obicei, se dores, te curat


, area completa a mediului de lucru (pentru
Pentru ca,
distribut, ia surselor, mutarea aplicat, iei, recompilarea acesteia n alt mediu etc.), un fis, ier
de obicei, o regula numita clean. Regula are rolul de a s, terge fis, ierele
Makefile ofera,

produse n urma rularii


comenzilor din fis, ierul Makefile: fis, iere obiect, fis, iere
executabile, fis, iere temporare etc.
n mod tipic, o regula clean are asociata o comanda rm ca mai jos:
1
2

exec: main.o sum.o sumalt.o


gcc main.o sum.o sumalt.o -o exec

3
4
5

main.o: main.c
gcc -c main.c -o main.o

6
7
8

sum.o: sum.c
gcc -c sum.c -o sum.o

9
10
11

sumalt.o: sumalt.c
gcc -c sumalt.c -o sumalt.o

12
13

clean:
rm -f exec main.o sum.o sumalt.o

14

Listing 11.17: Makefile cu target clean


Pentru a rula comanda asociata target-ului clean se transmite target-ul ca argument
comenzii make clean se s, terg fis, ierele obiect s, i
comenzii make. Astfel, n urma rularii
fis, ierul executabil:
1
2

razvan@valhalla:~/carte-uso.git/src/code/10-compilare/tmp$ ls
Makefile exec func.h main.c main.o sum.c sum.o sumalt.c

sumalt.o

3
4
5
6
7

razvan@valhalla:~/carte-uso.git/src/code/10-compilare/tmp$ make clean


rm -f exec main.o sum.o sumalt.o
razvan@valhalla:~/carte-uso.git/src/code/10-compilare/tmp$ ls
Makefile func.h main.c sum.c sumalt.c

11.5.5

Target-urile .PHONY s, i all

O problema care poate mpiedica funct, ionarea corecta a target-ului clean este
prezent, a unui fis, ier cu numele clean n directorul curent. n aceasta situat, ia, Make va

considera target-ul clean ca fiind actualizat s, i nu va rula comanda asociata.

CAPITOLUL 11. COMPILARE S, I LINKING

1
2

351

razvan@valhalla:~/carte-uso.git/src/code/10-compilare/tmp$ ls
Makefile clean exec func.h main.c main.o sum.c sum.o sumalt.c
sumalt.o

3
4
5

razvan@valhalla:~/carte-uso.git/src/code/10-compilare/tmp$ make clean


make: clean is up to date

trebuie marcat clean ca un target care nu este


Pentru a rezolva aceasta problema,
niciodata actualizat. Comanda asociata va fi, astfel, executata tot timpul. Marcajul unui
target ca neactualizabil se realizeaza cu ajutorul target-ului predefinit .PHONY, ca mai
jos:
1

.PHONY: clean

2
3

clean:
rm -f exec main.o sum.o sumalt.o

Listing 11.18: Makefile cu target clean


Folosirea target-ului .PHONY nseamna ca se va rula comanda asociata target-ului
clean indiferent daca exista sau nu un fis, ier cu numele clean n directorul curent:
1
2

razvan@valhalla:~/carte-uso.git/src/code/10-compilare/tmp$ ls
Makefile clean exec func.h main.c main.o sum.c sum.o sumalt.c
sumalt.o

3
4
5

razvan@valhalla:~/carte-uso.git/src/code/10-compilare/tmp$ make clean


rm -f exec main.o sum.o sumalt.o

Target-ul .PHONY este, n general, folosit s, i pentru marcarea target-ului all ca target
neactulizabil. Target-ul all este, n general, primul target ntr-un fis, ier Makefile s, i este
verificat implicit la rularea comenzii make. Target-ul all ncapsuleaza ca dependent, e
fis, ierele/target-urile ce se doresc obt, inute prin rularea comenzii make (n cazul de fat, a
este vorba doar de target-ul exec).
1

.PHONY: all clean

2
3

all: exec

4
5
6

exec: main.o sum.o sumalt.o


gcc main.o sum.o sumalt.o -o exec

7
8
9

main.o: main.c
gcc -c main.c -o main.o

10
11
12

sum.o: sum.c
gcc -c sum.c -o sum.o

13
14
15

sumalt.o: sumalt.c
gcc -c sumalt.c -o sumalt.o

16
17
18

clean:
rm -f exec main.o sum.o sumalt.o

Listing 11.19: Makefile cu target all

352

INTRODUCERE N SISTEME DE OPERARE

11.5.6

Variabile n Makefile

n fis, ierele Makefile construite pna acum nu a fost folosita opt, iunea -Wall la
compilarea fis, ierelor sursa C. O solut, ie simpla este introducerea opt, iunea -Wall n

cadrul celor trei comenzi de compilare. Totus, i, aceasta abordare nu este flexibila.
la un moment ulterior, se dores, te s, i adaugare

Prespunnd ca,
opt, iunea -g pentru
depanare, vor trebui din nou actualizate cele trei comenzi.
O abordare flexibila este folosirea variabilelor n cadrul fis, ierului Makefile. O variabila se
la un moment ulterior, se dores, te
defines, te o data s, i se foloses, te de mai multe ori. Daca,

actualizarea variabilei, modificarea se va face doar n locul unde a fost definita.


1
2

CC = gcc
CFLAGS = -Wall

3
4
5

exec: main.o sum.o sumalt.o


$(CC) main.o sum.o sumalt.o -o exec

6
7
8

main.o: main.c
$(CC) $(CFLAGS) -c main.c -o main.o

9
10
11

sum.o: sum.c
$(CC) $(CFLAGS) -c sum.c -o sum.o

12
13
14

sumalt.o: sumalt.c
$(CC) $(CFLAGS) -c sumalt.c -o sumalt.o

15
16

clean:
rm -f exec main.o sum.o sumalt.o

17

Listing 11.20: Makefile cu variabile


n cadrul fis, ierului Makefile de mai sus, au fost folosite variabilele, respectiv, CC pentru
a ret, ine comanda asociata compilatorului s, i CFLAGS pentru a ret, ine opt, iunile transmise
acestuia. Variabila CFLAGS nu a fost folosita pentru obt, inerea executabilului exec
pentru ca are sens doar n faza de compilare, nu s, i n cea de link-editare
(avertismentele indicate de -Wall rezulta n urma etapei de compilare).

11.5.7

Sintaxa Makefile

Aceasta sect, iune are un rol recapitulativ s, i descrie formal sintaxa unui fis, ier Makefile.
Dupa cum s-a prezentat s, i n sect, iunile anterioare, sintaxa unui fis, ier Makefile este
compusa dintr-o lista de reguli de forma:
1
2
3
4

target: dependente ...


<tab>comanda
<tab>comanda
<tab>...

Listing 11.21: Sintaxa Makefile


unde:

target numele unui fis, ier care trebuie generat sau numele unei act, iuni; n cazul
n care target-ul este un fis, ier, comenzile trebuie sa genereze acest fis, ier; n cazul

CAPITOLUL 11. COMPILARE S, I LINKING

353

n care comenzile nu genereaza un fis, ier cu numele target-ului, se va considera la


fiecare rulare ca target-ul nu a fost creat (as, adar toate comenzile se vor executa);

dependent, e lista de target-uri (separate prin spat, ii) care trebuie ndeplinite
(fis, iere care trebuie sa existe) pentru a se realiza target-ul curent make poate
determina daca trebuie reexecutat target-ul daca una dintre dependet, e s-a
modificat (unul din fis, ierele din lista de dependent, e s-a modificat);

comanda comanda care duce la realizarea target-ului (de obicei la comenzi


sunt trecute comenzile de compilare care duc la realizarea unui fis, ier cu numele
target-ului);

<tab> caracterul TAB.


Regulile formeaza un arbore de dependent, e. Pentru ca un target sa fie executat, se
verifica daca toate dependent, ele lui exista ca fis, iere. Daca nu este ndeplinita aceasta
condit, ie, dependent, ele care nu exista sunt executate, aplicndu-se acelas, i algoritm.

11.5.8

Moduri de utilizare a Make

La execut, ia comenzii make, vor fi luate n considerare target-urile definite n fis, ierul
Makefile.
Pentru a executa un target, se foloses, te sintaxa:
1

mircea@cougar:~/carte-uso/cap-10$ make target

unde target este numele target-ului care se dores, te a fi executat.


a parametri, se va executa primul target definit n fis, ierul
La utilizarea lui Make far
Makefile. Din acest motiv, primul target descris este de obicei cel mai complex, cu
cele mai multe dependent, e. Convent, ional, Makefile-urile folosite pentru compilarea unei
aplicat, ii definesc primul target all. Target-ul all det, ine n lista de dependent, e celelalte
target-uri care trebuie obt, inute.
Utilitarul GNU Make foloses, te, n mod implicit, unul din fis, ierele GNUMakefile,
s, i
Makefile sau makefile. n cazul n care niciunul dintre acestea nu exista,
comanda make nu primes, te nici un argument, va ntoarce eroare:
1
2

razvan@valhalla:~/carte-uso.git/src/code$ make
make: *** No targets specified and no makefile found.

Stop.

Pentru a fort, a folosirea unui fis, ier Makefile cu alt nume dect numele implicite, se
foloses, te opt, iunea -f:
1
2
3
4
5

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ make -f Makefile.


dep.ier.head
gcc -c main.c -o main.o
gcc -c sum.c -o sum.o
gcc -c sumalt.c -o sumalt.o
gcc main.o sum.o sumalt.o -o exec

a existent, a unui fis, ier Makefile. Pentru a compila direct fis, ierul
Make poate funct, iona s, i far
myprog.c (care nu depinde de altele) se foloses, te comanda:
1

mircea@cougar:~/carte-uso/cap-10$ make myprog

354

INTRODUCERE N SISTEME DE OPERARE

Iar pentru a compila direct myprog.c cu parametrul de compilare -Wall se foloses, te


comanda:
1

mircea@cougar:~/carte-uso/cap-10$ make CFLAGS=-Wall myprog

11.6

Portabilitate

Portabilitatea este caracteristica unei aplicat, ii de a putea fi folosita ntr-un mediu


Acest lucru poate nsemna un alt
diferit de cel pentru care fost init, ial proiectata.

sistem de operare, o alta arhitectura hardware, o alta biblioteca.


minime pentru a
Se spune ca o aplicat, ie este portabila daca are nevoie de modificari
putea rula pe un alt mediu. Act, iunea de portare este act, iunea de modificare a unei
aplicat, ii pentru a putea fi folosita pe un alt sistem de operare sau sistem fizic. Un mediu

pe care se realizeaza portarea se mai numes, te platforma.

Daca n deceniile trecute numarul


de arhitecturi posibile pe care rula o aplicat, ie era
destul de mare, n zilele noastre arhitectura hardware dominanta este x86. La fel
sistemele de operare pe care se porteaza o aplicat, ie sunt Microsoft Windows, Apple
portabilitatea ramne

Mac OS X s, i Unix/Linux. n lumea sistemelor embedded, nsa,


o

problema importanta.

11.6.1

Portabilitatea la nivelul arhitecturii sistemului de calcul

n zilele noastre, sistemele desktop sunt dominate de arhitectura x86 as, a ca rareori este
nevoie de portarea unei aplicat, ii la nivelul arhitecturii sistemului de calcul. n sistemele
embedded portarea la nivelul procesorului este un factor important.
portarea la nivelul arhitecturii nu este necesara datorita compilatorului.
n general, nsa,
Astfel, pentru un limbaj de nivel nalt, compilatorul va asigura traducerea codului sursa
n cod mas, ina specific procesorului dat. GCC este cel mai portat s, i cel mai portabil
compilator fiind capabil de a compila programe pentru o varietate de arhitecturi.

11.6.2

Portabilitatea unui limbaj de programare

prin definit, ie, portabilitatea codului,


Programarea n limbaj de asamblare nu asigura,
deorece acesta este intrinsec legat de arhitectura sistemului de calcul. Unul dintre

motivele raspndirii
Unix n anii 70 a fost scrierea acestuia n C, un limbaj de nivel nalt
portabil.
Folosirea C nsemna eliberarea de arhitectura hardware pe care va rula aplicat, ia.
a prin intermediul compilatorului. n ziua de azi, aplicat, iile C
Portarea codului era facut
Cu toate
sunt us, or portabile datorita existent, ei unui compilator C pe orice platforma.
1
acestea, anumite aspecte precum organizarea octet, ilor sau lungimea cuvntului
1

http://en.wikipedia.org/wiki/Endianness

CAPITOLUL 11. COMPILARE S, I LINKING

355

procesorului1 ramn
aspecte de care trebuie t, inut cont.

Figura 11.7: Portabilitatea asigurata de compilator


Java este un limbaj de programare gndit pentru a fi portabil. Deviza Java este Write
once, run everywhere. Pentru a asigura acest lucru, un program Java este compilat
ntr-o forma portabila de modul obiect denumita bytecode. Acest bytecode este apoi
interpretat de o mas, ina virtuala Java. Mas, ina virtuala Java este responsabila cu

translatarea bytecode-ului portabil n cod specific sistemului pe care acesta ruleaza.


Astfel, rularea unui program Java sau unui modul compilat n bytecode pe o noua
Mas, ina
platforma este condit, ionata de existent, a unei mas, ini virtuale pe acea platforma.
virtuala Java este cont, inuta n pachetul JRE de la Sun (Java Runtime Environment).
Acesta cont, ine mas, ina virtuala s, i bibliotecile cu funct, ii standard Java.

Figura 11.8: Portabilitatea asigurata de mas, ina virtuala


1

http://en.wikipedia.org/wiki/Word_(computing)

356

INTRODUCERE N SISTEME DE OPERARE

11.6.3

Portabilitatea la nivelul sistemului de operare

acesteia pe un alt
Portabilitatea unei aplicat, ii se poate referi s, i la posibilitatea rularii
sistem de operare. Acest lucru este corelat, de obicei, cu interfet, ele de programare
(API Application Programming Interface) pe care sistemul de operare le pune la
dispozit, ie (system API). Astfel, Windows pune la dispozit, ia programatorului C interfat, a
Win32 API1 . Unix, pe de alta parte pune la dispozit, ia programatorului interfat, a POSIX
(Portable Operating System Interface)2 . Pentru deschiderea unui fis, ier un programator
Windows va folosi apelul CreateFile, iar un programator Unix open.
, ii nsa,
multe biblioteci ofera programatorului o interfat, a
Pentru asigurarea portabilitat
portabila peste sistemul de operare. Astfel, funct, iile ANSI din biblioteca standard C sunt
portabile peste diverse sisteme de operare. De exemplu, pentru deschiderea unui fis, ier,
programatorul va folosi apelul fopen indiferent de sistemul de operare pe care va rula
aplicat, ia.
Un exemplu de biblioteca portabila este wxWidgets3 . Aceasta biblioteca permite
crearea de aplicat, ii grafice peste diferite sisteme de operare prin intermediul unui API
comun. Biblioteca ascunde att comunicarea cu sistemul de operare din spate ct s, i cu
bibliotecile grafice neportabile pe care acesta le pune n mod obis, nuit la dispozit, ie.

11.7

Studiu de caz

11.7.1

GCC n Windows

Suportul pentru compilatorul GCC n mediul Windows este disponibil prin proiectele:

MinGW4 (Minimalist GNU for Windows) reprezinta o portare a aplicat, iilor de


dezvoltare de baza ale proiectului GNU pe sisteme Windows. Componentele
principale sunt GNU Compiler Collection (GCC), GNU Binutils s, i bibliotecile de
runtime C. MinGW foloses, te DLL-urile de sistem standard s, i API-ul de baza al
sistemului Windows.

Cygwin5 este un mediu care ofera aplicat, iilor un strat (layer) de emulare a API-ului
, ile din Unix. n
Unix, mpreuna cu o colect, ie de utilitare care ofera funct, ionalitat
vreme ce MinGW ofera doar aplicat, ii pentru dezvoltare, Cygwin permite instalarea
, i de aplicat, ii.
unei mari diversitat
ofera acces la suita de aplicat, ii de dezvoltare a proiectului GNU.
Aceste implementari
Parametrii s, i modul de utilizare a compilatorului sunt similare unui sistem Linux.
n mediul Windows este posibila utilizarea GCC s, i mpreuna cu un mediu integrat de

dezvoltare IDE. Dev-C++6 este un astfel de IDE care ofera posibilitatea compilarii
programelor utiliznd GCC.
1

http://msdn.microsoft.com/en-us/library/aa383749(VS.85).aspx
http://www.opengroup.org/onlinepubs/9699919799/
3
http://www.wxwidgets.org/
4
http://www.mingw.org/
5
http://sourceware.org/cygwin/
6
http://www.bloodshed.net/devcpp.html
2

CAPITOLUL 11. COMPILARE S, I LINKING

11.7.2

357

Link-editarea modulelor C s, i a modulelor C++

atoare

Des, i doua limbaje aseman


(C++ este considerat un superset al C), combinarea
codului scris n C s, i C++ poate furniza probleme. n cele ce urmeaza nu ne vom referi
la accesarea claselor C++ din C sau folosirea apelurilor din biblioteca standard C++ n
programe C situat, ii rar ntlnite. Ne vom referi la folosirea funct, iilor definite n module
C ntr-un modul C++ s, i invers12 .

Contextul
Vom considera un scenariu foarte simplu care include 6 fis, iere:

c_print.c: fis, ier C cont, ine implementarea funct, iei c_print;


cpp_print.cpp: fis, ier C++ cont, ine implementarea funct, iei cpp_print;
c_print.h: fis, ier header ce cont, ine declarat, ia funct, iei c_print;
cpp_print.h: fis, ier header ce cont, ine declarat, ia funct, iei cpp_print;
c_main.c: fis, ier C cont, innd funct, ia main; va apela funct, ia c_print din fis, ierul
c_print.c sau funct, ia cpp_print din fis, ierul cpp_print.cpp;
cpp_main.cpp: fis, ier C++ cont, innd funct, ia main; va apela funct, ia c_print
din fis, ierul c_print.c sau funct, ia cpp_print din fis, ierul cpp_print.cpp.
1

#include <stdio.h>

2
3

#include "c_print.h"

4
5
6
7
8

void c_print(void)
{
printf("C-style: Wassup!\n");
}

Listing 11.22: c_print.c


1

#include <iostream>

2
3

#include "cpp_print.h"

4
5
6
7
8

void cpp_print()
{
std::cout << "C++ style: True, true!" << std::endl;
}

Listing 11.23: cpp_print.cpp


1
2

#ifndef C_PRINT_H_
#define C_PRINT_H_

3
4

void c_print(void);

5
6

#endif
1
2

http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B#Linking_C_and_C.2B.2B_code
http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html

358

INTRODUCERE N SISTEME DE OPERARE

Listing 11.24: c_print.h


1
2

#ifndef CPP_PRINT_H_
#define CPP_PRINT_H_

3
4

void cpp_print();

5
6

#endif

Listing 11.25: cpp_print.h


1
2

#include "c_print.h"
//#include "cpp_print.h"

3
4
5
6
7

int main(void)
{
c_print();
//cpp_print();

return 0;

9
10

Listing 11.26: c_main.c


1
2

#include "cpp_print.h"
//#include "c_print.h"

3
4
5
6
7

int main()
{
cpp_print();
//c_print();

return 0;

9
10

Listing 11.27: cpp_main.cpp


n mod implicit, n cadrul fis, ierului c_main.c se apeleaza funct, ia c_print, iar n cadrul
fis, ierului cpp_main.cpp se apeleaza funct, ia cpp_main.
ntr-un prim pas, se compileaza cele patru fis, iere C/C++. Folosim gcc pentru compilarea
fis, ierelor C s, i g++ pentru compilarea fis, ierelor C++.
1
2

razvan@valhalla:~/mix$ ls
c_main.c c_print.c c_print.h

cpp_main.cpp

cpp_print.cpp

cpp_print.h

3
4

razvan@valhalla:~/mix$ gcc -Wall -c c_main.c

5
6

razvan@valhalla:~/mix$ gcc -Wall -c c_print.c

7
8

razvan@valhalla:~/mix$ g++ -Wall -c cpp_main.cpp

9
10

razvan@valhalla:~/mix$ g++ -Wall -c cpp_print.cpp

11
12
13
14

razvan@valhalla:~/mix$ ls
c_main.c c_print.c c_print.o
c_main.o c_print.h cpp_main.cpp

cpp_main.o
cpp_print.cpp

cpp_print.h
cpp_print.o

CAPITOLUL 11. COMPILARE S, I LINKING

359

Pentru

link-editare, folosim perechile c_main.o s, i c_print.o, respectiv


cpp_main.o s, i cpp_print.o. Executabilele obt, inute sunt denumite n conformitate
cu fis, ierele obiect folosite pentru generare.

razvan@valhalla:~/mix$ gcc c_main.o c_print.o -o c_main-c_print

2
3

razvan@valhalla:~/mix$ g++ cpp_main.o cpp_print.o -o cpp_main-cpp_print

4
5
6

razvan@valhalla:~/mix$ ./c_main-c_print
C-style: Whassup?

7
8
9

razvan@valhalla:~/mix$ ./cpp_main-cpp_print
C++ style: True, true!

Pentru link-editarea modulelor obiect obt, inute din surse C++ a fost folosita comanda
g++. Comanda g++ apeleaza linker-ul (ld) cu toate opt, iunile necesare. Se poate folosi
s, i comanda gcc pentru linking, dar trebuie specificata explicit folosirea bibliotecii
standard C++ (libstdc++).
1
2
3
4
5
6

razvan@valhalla:~/mix$ gcc cpp_main.o cpp_print.o -o cpp_main-cpp_print


cpp_main.o:(.eh_frame+0x12): undefined reference to __gxx_personality_v0

cpp_print.o: In function cpp_print():


cpp_print.cpp:(.text+0xa): undefined reference to std::cout
[...]
collect2: ld returned 1 exit status

7
8
9

razvan@valhalla:~/mix$ gcc cpp_main.o


cpp_print.o -o cpp_main-cpp_print_new -lstdc++

10
11
12

razvan@valhalla:~/mix$ ./cpp_main-cpp_print_new
C++ style: True, true!

Problema
nsa,
daca link-editarea se realizeaza ntre un modul obiect provenit
Ce se ntmpla,
dintr-un fis, ier sursa C s, i un modul provenit dintr-un fis, ier sursa C++?
Pentru a testa acest lucru, sunt actualizate fis, ierele c_main.c, respectiv
cpp_main.cpp pentru a include s, i apela funct, iile specifice celuilalt limbaj. Dupa care
se compileaza s, i se realizeaza link-editarea:
1
2
3
4

razvan@valhalla:~/mix-new$ gcc c_main.o cpp_print.o -o c_main-cpp_print lstdc++


c_main.o: In function main:
c_main.c:(.text+0xa): undefined reference to cpp_print
collect2: ld returned 1 exit status

5
6
7
8
9

razvan@valhalla:~/mix-new$ g++ c_main.o cpp_print.o -o c_main-cpp_print lstdc++


c_main.o: In function main:
c_main.c:(.text+0xa): undefined reference to cpp_print
collect2: ld returned 1 exit status

10
11
12
13

razvan@valhalla:~/mix-new$ g++ cpp_main.o c_print.o -o cpp_main-c_print


cpp_main.o: In function main:
cpp_main.cpp:(.text+0x5): undefined reference to c_print()

360
14

INTRODUCERE N SISTEME DE OPERARE

collect2: ld returned 1 exit status

15
16
17
18
19

razvan@valhalla:~/mix-new$ gcc cpp_main.o c_print.o -o cpp_main-c_print lstdc++


cpp_main.o: In function main:
cpp_main.cpp:(.text+0x5): undefined reference to c_print()
collect2: ld returned 1 exit status

n ambele situat, ii, indiferent de comanda folosita (gcc sau g++) se obt, ine eroare de
, te simbolul asociat funct, iei cpp_print, respectiv c_print.
linker. Linker-ul nu gases
Folosind utilitarul nm se pot inspecta simbolurile din cadrul celor patru module obiect:
1
2
3

razvan@valhalla:~/mix-new$ nm c_main.o
U cpp_print
0000000000000000 T main

4
5
6
7
8

razvan@valhalla:~/mix-new$ nm cpp_main.o
U _Z7c_printv
U __gxx_personality_v0
0000000000000000 T main

9
10
11
12

razvan@valhalla:~/mix-new$ nm c_print.o
0000000000000000 T c_print
U puts

13
14
15
16
17
18

razvan@valhalla:~/mix-new$ nm cpp_print.o
000000000000005f t _GLOBAL__I__Z9cpp_printv
0000000000000022 t _Z41__static_initialization_and_destruction_0ii
0000000000000000 T _Z9cpp_printv
[...]

Problema este folosirea tehnicii de name mangling 1 folosita de compilatorul de C++.


Simbolurile dintr-un modul C++ sunt precedate de o construct, ie speciala de forma _Z.
Tehnica este folosita pentru a preveni folosirea aceluias, i identificator pentru o variabila
funct, ie care are acelas, i nume n doua namespace-uri diferite.
Modulul c_main.o marcheaza simbolul cpp_print nedefinit s, i solicita linker-ului
rezolvarea acestuia.
Modulul cpp_print.o defines, te nsa simbolul
_Z9cpp_printv s, i linker-ul nu poate face rezolvarea. Similar se ntmpla s, i n cazul
simbolului c_print (varianta C) s, i _Z7c_printv (varianta C++).

Solut, ia
compilatorul trebuie sa det, ina informat, ii
Pentru a rezolva aceasta problema,

suplimentare s, i sa marcheze simbolurile corespunzatoare


n modulele obiect.
O solut, ie directa este compilarea tuturor fis, ierelor sursa folosind g++. Compilatorul de
C++ poate compila s, i fis, iere C, iar modulele obt, inute vor folosi tehnica de name
mangling.
1

razvan@valhalla:~/mix-new$ g++ cpp_main.cpp c_print.c -o cpp_main-c_print

2
3

razvan@valhalla:~/mix-new$ ./cpp_main-c_print
1

http://en.wikipedia.org/wiki/Name_mangling

CAPITOLUL 11. COMPILARE S, I LINKING


4

361

C-style: Whassup?

5
6

razvan@valhalla:~/mix-new$ g++ c_main.c cpp_print.cpp -o c_main-cpp_print

7
8
9

razvan@valhalla:~/mix-new$ ./c_main-cpp_print
C++ style: True, true!

ntruct este posibila absent, a unui anumit tip de compilator de pe un sistem s, i pentru ca
este mai eficient ca un fis, ier sursa ntr-un limbaj de prorgramare sa fie compilat cu un
compilator specific, este de dorit o alta solut, ie. Solut, ia consta n folosirea construct, iei
extern "C". Aceasta construct, ie se plaseaza naintea declarat, iei unei funct, ii pentru
a fort, a compilatorul de C++ sa foloseasca un identificator de simbol care sa nu utilizeze
tehnica de name mangling.
n general, construct, ia extern "C" se foloses, te n cadrul fis, ierelor header unde se

gasesc
declarat, iile de funct, ii. Fisierele c_print.h s, i cpp_print.h actualizate vor fi:
1
2

#ifndef C_PRINT_H_
#define C_PRINT_H_

3
4
5
6

#ifdef __cplusplus
extern "C" {
#endif

7
8

void c_print(void);

9
10
11
12

#ifdef __cplusplus
}
#endif

13
14

#endif

Listing 11.28: c_print.h cu extern "C"


1
2

#ifndef CPP_PRINT_H_
#define CPP_PRINT_H_

3
4
5
6

#ifdef __cplusplus
extern "C" {
#endif

7
8

void cpp_print();

9
10
11
12

#ifdef __cplusplus
}
#endif

13
14

#endif

Listing 11.29: cpp_print.h cu extern "C"


adica folosind perechea
n acest moment se poate realiza link-editarea n diagonala,
c_main.o s, i cpp_print.o pe de o parte s, i perechea cpp_main.o s, i c_print.o
de cealalta parte.
1

razvan@valhalla:~/mix-new$ gcc -c c_main.c

2
3

razvan@valhalla:~/mix-new$ g++ -c cpp_main.cpp

362

INTRODUCERE N SISTEME DE OPERARE

4
5

razvan@valhalla:~/mix-new$ gcc -c c_print.c

6
7

razvan@valhalla:~/mix-new$ g++ -c cpp_print.cpp

8
9

razvan@valhalla:~/mix-new$ gcc c_main.o cpp_print.o -o c_main-cpp_print lstdc++

10
11

razvan@valhalla:~/mix-new$ g++ cpp_main.o c_print.o -o cpp_main-c_print

12
13
14

razvan@valhalla:~/mix-new$ ./c_main-cpp_print
C++ style: True, true!

15
16
17

razvan@valhalla:~/mix-new$ ./cpp_main-c_print
C-style: Whassup?

a name
Prin folosirea utilitarului nm se observa folosirea unui identificator de simbol far
mangling n cadrul fis, ierelor obiect C++.
1
2
3
4

razvan@valhalla:~/mix-new$ nm cpp_main.o
U __gxx_personality_v0
U c_print
0000000000000000 T main

5
6
7
8
9

razvan@valhalla:~/mix-new$ nm cpp_print.o
000000000000005f t _GLOBAL__I_cpp_print
[...]
0000000000000000 T cpp_print

Construct, ia extern "C" se foloses, te att n cazul n care se apeleaza funct, ii C dintr-un
unei funct, ii C++ dintr-un modul C.
modul C++ ct s, i n cazul apelarii
funct, iei C dintr-un modul C++, compilatorul de C++
n primul caz, cel al apelarii
marcheaza n modulul obiect obt, inut din fis, ierul C++ simbolul ca fiind nedefinit, n forma
unei funct, ii C++ dintr-un modul C,
non-mangled. n cel de-al doilea caz, al apelarii
compilatorul de C++ marcheaza n modulul obiect obt, inut din fis, ierul C++ simbolul ca
fiind definit, n formatul non-mangled.
Compilatorul ia aceasta decizie pe baza folosirii construct, iei extern "C". Este
important ca att fis, ierul care defines, te funct, ia, ct s, i cel care apeleaza funct, ia sa
includa fis, ierul header care cont, ine declarat, ia funct, iei precedata de construct, ia
extern "C".
Folosirea macro-ului __cplusplus permite diferent, ierea ntre compilatorul de C s, i
compilatorul de C++. Doar compilatorul de C++ va folosi construct, ia extern "C".
Construct, ia nu are nicio relevant, a pentru compilatorul de C.

Cuvinte cheie

compilare

proces

executabil

sursa

interpretare

preprocesare

limbaj

asamblare

CAPITOLUL 11. COMPILARE S, I LINKING

363

cod obiect

execut, ie

linker

apel de sistem

biblioteca

make

partajare

target

portabilitate

dependent, a

ntrebari
1. Bibliotecile partajate de funct, ii:

q sunt ncarcate
explicit la cerere de aplicat, ii

q ajuta ca aplicat, iile sa fie mai simplu de ntret, inut

q maresc
aplicat, iile deoarece sunt incluse n executabilele rezultate

q sunt prezente sub forma de arhive de fis, iere obiect


2. Pentru a dezactiva link-editarea implicita pe care o realizeaza GCC, se utilizeaza
parametrul:

q -O0
q -c
q -lstdc++
q -o
3. Caracteristica unei aplicat, ii de a putea fi folosita ntr-un mediu pentru care nu a

fost init, ial proiectata:

q se ntlnes, te doar la bibliotecile partajate


q este ntlnita numai la aplicat, iile Java
q se numes, te portabilitate
q niciuna din variantele de mai sus
4. Pentru a executa un target dintr-un fis, ier Makefile, se foloses, te comanda

q make Makefile <target>


q make <target>
q <target>
q make <target> Makefile
se obt, in:
5. n urma preprocesarii

q fis, iere obiect


a directive de precompilare
q fis, iere sursa C far

q fis, iere n limbaj de asamblare


q fis, iere executabile

364

INTRODUCERE N SISTEME DE OPERARE

6. Care din urmatoarele


reprezinta o biblioteca al carei
cod este integrat explicit n
codul unui executabil?

q static library
q shared library
q public library
q common library
7. Apelul de sistem reprezinta o metoda de a accesa resursele computerului.
Apelurile de sistem sunt realizate doar de biblioteci.

q adevarat,
adevarat

q adevarat,
fals

q fals, adevarat

q fals, fals
8. Fie comanda:
1
2

mircea@cougar:~/carte-uso/cap-10$ file /lib/libm-2.3.3.so


/lib/libm-2.3.3.so: ELF 32-bit LSB shared object, Intel 80386,
version 1 (SYSV), not stripped

Care afirmat, ie referitoare la fis, ierul /lib/libm-2.3.3.so este falsa?

q fis, ierul este binar, nu poate fi editat cu un editor text


q fis, ierul este o biblioteca partajata
q fis, ierul este executabil
q fis, ierul funct, ioneaza pe o platforma Intel pe 32 bit, i
9. Programele interpretate se depaneaza mai greu dect cele compilate. n urma
rezulta fis, iere n limbaj de asamblare care sunt executate direct pe
compilarii
procesor.

q adevarat,
adevarat

q adevarat,
fals

q fals, adevarat

q fals, fals

10. Apelurile de sistem ale programului <program> pot fi urmarite


folosind comanda:

q time <program>
q file <program>
q ldd <program>
q strace <program>

Capitolul 12
Shell scripting
Shell to DOS... Come in DOS, do you copy? Shell to
DOS...

Ce se nvat, a din acest capitol?

Rolul unui shell n sistem


Ce este un script shell
Utilitatea scripturilor shell
Interact, iunea cu shell-ul; execut, ia comenzilor ntr-un shell
Crearea s, i rularea unui script shell
Programarea shell: variabile, funct, ii, structuri de control
Folosirea filtrelor de text
Expandarea shell
Programarea shell (batch programming) pe Windows
Utilitarul sed
Utilitarul awk

12.1

Not, iuni introductive

Capitolul de fat, a s, i propune prezentarea mecanismelor prin care diversele comenzi


utilizate pna acum pot fi combinate pentru obt, inerea unor efecte complexe n cadrul
unui script shell.
Un script shell este un program scris ntr-un fis, ier text format din combinat, ii de
comenzi s, i instruct, iuni specifice unui interepretor de comenzi (unui shell).

365

366

INTRODUCERE N SISTEME DE OPERARE

Un shell este un program care asigura utilizatorului o interfat, a de control s, i utilizare


a sistemului de operare.
Un shell poate avea interfat, a grafica (GUI) sau poate avea interfat, a text (CLI). n cea
de-a doua situat, ie un shell mai poarta denumire de interpretor de comenzi. Shell-uri cu
interfat, a grafica sunt Windows Explorer sau medii desktop construite peste X Window
System. Shell-uri cu interfat, a text (interpretoare de comenzi) sunt cmd.exe (Windows
NT, XP), Windows PowerShell (Windows Vista, Server 2008, 7), Bash (Bourne Again
Shell), csh (C Shell).
Not, iunea de shell scripting se aplica shell-urilor cu interfat, a text (Bash, C shell etc.). n
shell-ul folosit va fi Bash. GNU Bash1 (Bourne-Again Shell) este shell-ul
capitolul de fat, a,
implicit pe majoritatea distribut, iilor de Linux s, i pe Mac OS X. Ne vom referi prin Bash (cu
la shell, iar cu bash la executabilul utilizat de acesta.
majuscula)

12.1.1

De ce shell scripting?

Utilitatea principala a unui shell script deriva din faptul ca este o combinat, ie de comenzi
deja existente. Acest lucru nseamna posibilitatea de automatizare. Sarcinile repetitive
pot fi descrise ntr-un script shell. Ori de cte ori este necesara executarea acelei sarcini,

se ruleaza script-ul shell s, i aceasta va fi ndeplinita.


Un exemplu elocvent este crearea unui cont de utilizator. Pas, ii urmat, i pentru aceasta

pot fi urmatorii:
1. crearea unui cont de utilizator (folosind useradd);
creat;
2. copierea unor directoare s, i fis, iere pentru contul proaspat
3. stabilirea de cote (quota);
4. schimbarea/stabilirea parolei;
5. transmiterea unui e-mail pentru a notifica utilizatorul de crearea contului.
n lipsa unui script shell, administratorul sistemului ar trebui sa ruleze comenzi pentru
fiecare din pas, ii de mai sus ori de cte ori este necesara crearea unui cont de utilizator.
Folosind un script shell, administratorul l va rula doar pe acesta (folosind eventuali

parametri). Efectul imediat este marirea


eficient, ei.
precum:
Scripturile shell se folosesc n general pentru automatizarea sarcinilor de rutina,
sistemului etc.
realizarea de backup-uri, verificarea starii
Exista situat, ii cnd un utilizator dores, te realizarea unei noi comenzi prin mbinarea unora
deja existente. Pentru a realiza acest lucru, el va crea un script shell pe care-l va putea
utiliza ulterior.
n sistemele Unix, scripturile shell au un grad mare de utilizabilitate pentru ca cea mai
mare partea a comenzilor urmeaza filozofia Unix: Do one thing, do one thing well.
Acest lucru nsemna ca fiecare comanda este utila s, i (am putea spune) exceleaza n
1

http://www.gnu.org/software/bash/

CAPITOLUL 12. SHELL SCRIPTING

367

realizarea unei anumite sarcini, urmnd ca sarcinile mai complexe sa fie realizate prin
mbinarea mai multor comenzi simple ntr-un script shell.

12.1.2

, i oferite de scripturile shell


Facilitat

n afara folosirii comenzilor simple deja existente n sistem, lucru care conduce la
,i
posibilitatea de automatizare a sarcinilor, un script shell ofera s, i alte facilitat
utilizatorului.
n primul rnd, un shell ofera un limbaj de programare cu variabile s, i instruct, iuni de ciclu
dincolo de comenzile
(for, while) s, i de decizie (if, case). Acest lucru nseamna ca,
un script shell poate folosi facilitat
, ile tipice unui limbaj de programare.
de baza,
Evident, se poate pune ntrebarea: De ce nu s-ar folosi un limbaj de programare precum
C/Java?
Avantajul major unui script shell este timpul redus de scriere a acestuia, utilizarea unor
a a fi nevoie de rescrierea acestora) s, i folosirea unor resurse
componente deja create (far
specifice ale sistemului: fis, iere de configurare, drepturi de acces, utilizatori etc. Folosind
, i de combinare a acestora s, i de control al fluxului, un
comenzi deja existente, facilitat
script shell este o solut, ie rapida s, i eficienta a unei probleme. Se spune ca un script shell
este o metoda quick and dirty de rezolvare a unor probleme care ar necesita efort mai
mare daca s-ar folosi alte limbaje. n plus depanarea unui script shell este extrem de
n momentul n care un script shell nu funct, ioneaza corect se poate determina s, i
facila.
corecta foarte rapid linia din script care a cauzat eroarea.
a de execut, ie s, i lipsa accesului la
Dezavantajul unui script shell este viteza scazut
structuri eficiente de calcul. Astfel, nu este recomandata folosirea unui script shell ntr-o
situat, ie n care viteza de execut, ie este un factor important. La fel, anumite probleme nu
, i. Problemele
se preteaza la a fi rezolvate cu un script shell din cauza lipsei de facilitat
efectuarea de calcule complexe, interact, iunea cu hardware-ul se
de algoritmica,
realizeaza prin folosirea de limbaje specializate.
un script shell permite interact, iunea ntre comenzi (sau mai bine zis ntre
Totodata,
procesele create prin rularea unei comenzi), prin operatori specifici: | (pipe), ;, ||, &&
etc.
, i includ:
Alte facilitat

posibilitatea ret, inerii ies, irii unei comenzi ntr-o variabila pentru folosirea ulterioara
a acesteia;
intrarii/ies

posibilitatea redirectarii
, irii unei comenzi dintr-un/ntr-un fis
, ier; acest
lucru duce la prelucrarea foarte us, oara a fis, ierelor relevante n sistem (de
exemplu: /etc/passwd, /etc/shadow);

folosirea de comenzi non-interactive s, i programarea scriptului pentru execut, ie la


un moment ulterior.
as, adar, ca un script shell este un instrument foarte puternic pentru
Se observa,
rezolvarea rapida a diverselor probleme des ntlnite de utilizator. Programarea shell
devine un factor important pentru o mai buna utilizare s, i gestiune a sistemului.

368

INTRODUCERE N SISTEME DE OPERARE

12.2

Interact, iunea cu shell-ul

Shell-urile cu interfat, a text interact, ioneaza cu utilizatorul prin intermediul comenzilor. Un


shell ofera un prompt utilizatorului (n mod tipic acesta se termina cu un caracter de
de
forma $, % sau #) unde se pot introduce comenzi. Execut, ia unei comenzi nseamna,
obicei, generarea unui proces dintr-un executabil asociat comenzii.
O deprindere utila n lucrul cu comenzile este prelucrarea s, irului de caractere care le
Astfel, un utilizator avansat va edita comenzile sale s, i va folosi istoricul pus la
formeaza.
dispozit, ie de un shell pentru a fi ct mai eficient. Shell-ul pune la dispozit, ia utilizatorului
, i de editare s, i utilizare rapida a comenzilor.
mai multe facilitat

12.2.1

Editarea comenzilor

O comanda este introdusa la promptul shell-ului prin folosirea tastelor corespunzatoare,

dupa care se apasa ENTER s, i comanda va fi executata.


nsa,
situat, ii n care se gres, es, te sau se uita un argument sau o litera s, i este
Exista,
nevoie de editarea acelei comenzi pentru obt, inerea efectului dorit. Editarea comenzii

poate nsemna adaugarea


sau s, teregerea unui caracter, a unui set de caractere, a unui
argument al comenzii. n mod evident, la fel ca n cazul unui editor, este nevoie s, i de
parcurgerea comenzii scrise.
Editarea comenzilor n Bash este realizata prin intermediul bibliotecii readline. Detalii
, i la online1 . Biblioteca readline este cea care asigura editarea unei
despre aceasta gasit
comenzi, oferind interfat, a de control a terminalului.
Comenzile puse la dispozit, ie de readline pentru editarea comenzilor shell sunt inspirate
din editorul Emacs. Urmnd convent, ia Emacs, vom prescurta cu C tasta Control iar

cu M tasta Alt (Meta). Prezentam,


n continuare, cteva dintre cele mai utile comenzi:

C-f, C-b un caracter nainte, respectiv


S
ageat
a-Dreapta s, i S
ageat
a-Stnga)

napoi

(echivalent

cu

C-a, C-e nceput de linie, respectiv sfrs, it de linie (echivalent cu Home s, i End)
M-f, M-b cuvnt nainte, respectiv napoi; pe unele terminale (spre exemplu

gnome-terminal) trebuie dezactivate scurtaturile


terminalului pentru a permite
comenzile readline

C-d s, terge caracterul de sub cursor (echivalent cu Delete)


Backspace s, terge caracterul de dinainte de cursor
M-d s, terge pna la sfrs, itul cuvntului
M-Backspace s, terge pna la nceputul cuvntului
C-k s, terge pna la sfrs, itul liniei
C-w s, terge pna la nceputul liniei
C-y lipes, te (paste, yank ) ceea ce s-a s, ters ultima oara
1

http://www.gnu.org/software/bash/manual/html_node/Readline-Interaction.html

CAPITOLUL 12. SHELL SCRIPTING

369

C-_ (Control-underscore) anuleaza (undo) ultima comanda de editare.


Pentru cei ce doresc acest lucru, editarea comenzilor folosind readline poate fi
personalizata folosind un fis, ier de configurare. Pentru mai multe detalii consultat, i
manualul1 .

12.2.2

Folosirea istoricului. Completare automata

Biblioteca readline memoreaza comenzile folosite n shell ntr-un istoric care poate fi
folosit ulterior. Se pot folosi comenzi readline pentru parcurgerea comenzilor shell.
Astfel C-p sau C-n parcurg comenzile anterioare sau ulterioare comenzii curente. Sunt
echivalente cu S
ageat
a-Sus s, i S
ageat
a-Jos.
asirea

Istoricul este salvat la par


shell-ului ntr-un fis, ier. n cazul bash acesta este

~/.bash_history. La o noua autentificare, shell-ul va ncarca


respectivele comenzi
din history s, i utilizatorul le va putea reutiliza.

Cautarea
comenzilor (reverse search)

n afara parcurgerii comenzilor din istoric, o opt, iune foarte utila este cautarea
acestora.

Pentru cautarea
comenzilor n istoric se poate folosi comanda C-r (reverse search):
1
2

razvan@anaconda:~$ cd
(reverse-i-search)chm: chmod o+w uploads/

n exemplul de mai sus, apasarea


C-r duce la schimbarea promptului. Utilizatorul

poate introduce un s, ir de cautare


pentru identificarea unei comenzi. Pentru fiecare

caracter introdus, shell-ul va afis, a prima comanda anteriora cea mai potrivita.
arii.

Completarea s, irului va duce la refacerea caut


n afara introducerii s, irului de cautare

exista cteva comenzi utile n modul de cautare:

daca se apasa (din nou) C-r se cauta urmatoarea


potrivire;

daca se apasa ESC sau C-j se ncheie cautarea;


comanda afis, ata la prompt va fi
a;

cea gasit

a;

daca se apasa ENTER se ncheie cautarea


s, i se executa comanda gasit

daca se apasa C-g se ntrerupe cautarea


cu revenire la comanda de dinainte de

cautare.

Completare automata (autocompletion)


O facilitate extrem de utila n eficientizarea lucrului cu comenzile shell este cea de
completare automata (autocompletion). Aceasta facilitate nseamna introducerea unui
n sistemul de fis, iere s, i apoi
s, ir part, ial de nceput al unei comenzi sau al unei intrari

Spre exemplu, daca cineva dores, te


apasarea
tastei TAB pentru completarea automata.
sa verifice server-ul de nume (DNS) al unui sistem, va folosi comanda:
1

http://www.gnu.org/software/bash/manual/html_node/Readline-Init-File.html

370

INTRODUCERE N SISTEME DE OPERARE

ubuntu@ubuntu:~$ cat /etc/resolv.conf

Un calcul simplu arata ca este nevoie de apasarea


a 21 de taste (cu ENTER) pentru
execut, ia comenzii.

Putem folosi, n schimb, completarea automata s, i vom apasa


tastele n mod prezentat
mai jos:
1

ubuntu@ubuntu:~$ cat /e<TAB>res<TAB>.<TAB><ENTER>

Un calcul la fel de simplu indica apasarea


a doar 14 taste (plus ca tasta TAB devine foarte
a mult mai us, or). Comanda afis, ata la prompt va fi identica cu
importanta s, i este apasat
cea de mai sus s, i, drept urmare, efectul va fi acelas, i.
se recomanda insistent folosirea facilitat
, ii de completarea automata.

n consecint, a,
Aceasta facilitate nu este prezenta numai la shell-urile unui sistem de operare ci s, i
pentru comanda dispozitivelor de ret, ea s, i a altor echipamente care dispun de o interfat, a
n plus, folosirea tastei TAB are un rol important n evitarea erorilor
n linia de comanda.

de scriere n cazul intrarilor


sistemului de fis, iere. Experient, a personala a autorilor
, i a surprins, nu de put, ine ori, crearea de fis, iere cu nume apropiate, dar nu
acestei cart
identice, de cele reale (precum /etc/rezolv.conf, /etc/resolv.comf,
/etc/resolv.cf etc.). Aceste erori ar fi putut fi evitate (dincolo de o mai mare viteza
, ii de completare automata.

de utilizare a comenzilor) prin folosirea facilitat


, i de completare, apasarea

n situat, ia n care exista mai multe posibilitat


tastei TAB nu are

niciun efect. Totus, i, se pot vizualiza toate aceste combinat, ii prin apasarea
de doua ori a

tastei TAB. Astfel, apasarea


z<TAB><TAB> va duce la afis, area tuturor comenzilor care
ncep cu litera z:
1
2
3
4
5

razvan@anaconda:~$ z<TAB><TAB>
zcat
zegrep
zforce
zcmp
zeisstopnm zgrep
zdiff
zenity
zip
zdump
zfgrep
zipcloak

zipgrep
zipinfo
zipnote
zipsplit

zless
zmore
znew
zsoelim

La fel, folosirea comenzii cat /<TAB><TAB> duce la afis, area tuturor intrarilor
care se

acin
a al sistemului de fis, iere:
gasesc
n directorul rad
1
2
3
4
5
6
7
8

razvan@anaconda:~$ cat /
.viminfo
home/
aquota.user
initrd/
bin/
initrd.img
boot/
initrd.img.old
cdrom/
lib/
dev/
lost+found/
etc/
media/

mnt/
opt/
proc/
root/
sbin/
srv/
sys/

tmp/
usr/
var/
vmlinuz
vmlinuz.old

automate Dupa cum s-a observat, completarea automata se


Extinderea completarii
n sistemul de fis, iere. Totus, i, aceasta poate fi extinsa prin
refera la comenzi s, i la intrari
intermediul unor scripturi personalizate la argumentele posibile ale unei comenzi.

Astfel fis, ierul /etc/bash_completion este folosit pentru extinderea completarii


automate. Pentru folosirea acestui script este necesara rularea comenzii:
1

ubuntu@ubuntu:~$ . /etc/bash_completion

CAPITOLUL 12. SHELL SCRIPTING

371

Cteva linii din acest fis, ier:


1

complete -f -X !*.@(sxi|sti|pps|ppt|pot|odp|otp) ooimpress

Linia de mai sus nseamna ca daca un utilizator foloses, te n linia de comanda


ooimpress, argumentele posibile ale acesteia vor fi considerate doar fis, ierele cu
extensiile precizate.
1
2

# user commands see only users


complete -u su usermod userdel passwd chage write chfn groups slay w

Linia de mai sus permite ca argumente numai nume de utilizatori pentru comenzile de
lucru cu aces, tia.
n afara extinderilor existente n /etc/bash_completion, utilizatorul s, i poate defini
noi extinderi pentru a le integra n shell. Se recomanda ca acestea sa fie plasate n
directorul /etc/bash_completion.d. Generarea de noi extensii de completare
, es, te domeniul de interes al acestei cart
, i. Recomandam
celor interesat, i pagina
depas
1
web asociata proiectului sau articolul legat de completarea automata de pe Debian
Administration2 .

12.2.3

Comenzi interne (built-in) s, i comenzi externe

Comenzile care pot fi rulate dintr-un shell sunt de doua tipuri:


1. comenzi externe: sunt rulate prin intermediul unui executabil
a invocarea unui alt program.
2. comenzi interne: sunt executate direct de shell far
, i care sunt
Comenzile interne (sau built-in) sunt utilizate pentru implementarea de facilitat
fie imposibil fie neconvenabil de realizat folosind programe separate. Un bun exemplu
este comanda cd de schimbare a directorului curent. Aceasta comanda nu poate fi
comenzii s-ar pierde orice
folosita dintr-un executabil extern, ntruct la sfrs, itul rularii
astfel, schimbarea persistenta a directorului curent).
efect ar avea (s, i nu ar fi posibila,
Exemple de comenzi externe s, i executabilul folosit pentru rularea acestora sunt:

ls cu /bin/ls
file cu /usr/bin/file
su cu /bin/su
ifconfig cu /sbin/ifconfig
Exemple de comenzi interne sunt:

: comanda nu face nimic, doar expandeaza variabile s, i realizeaza redirectarile;


astfel, rularea comenzii:
1

ubuntu@ubuntu:~$ : > out.txt

duce la trunchierea fis, ierului out.txt. Versiunea s, i mai simpla este


1
1
2

ubuntu@ubuntu:~$ > out.txt

http://www.caliban.org/bash/index.shtml
http://www.debian-administration.org/articles/316

372

INTRODUCERE N SISTEME DE OPERARE

. comanda este folosita pentru interpretarea unui fis, ier (de obicei script) n
shell-ul curent. Echivalenta este comanda source. Un exemplu de folosire este

ncarcarea
configurat, iilor din /etc/bash_completion:
1

ubuntu@ubuntu:~$ . /etc/bash_completion

sau
1

ubuntu@ubuntu:~$ source /etc/bash_completion

cd comanda folosita pentru schimbarea directorului curent


echo afis, area s, irului de caractere primit ca parametru la ies, irea standard
unui alias pentru o
alias/unalias configurarea/dezactivarea configurarii
Astfel, daca folosim:
comanda.
1

alias mygrep=grep --color=tty -d skip

comanda mygrep (alias) va fi lansata ca o comanda grep cu argumentele


precizate; se poate folosi ca alias chiar numele comenzii, n cazul n care
utilizatorul dores, te rularea implicita cu acele argumente:
1

alias grep=grep --color=tty -d skip

De notat este faptul ca o comanda poate fi implementata att n shell (built-in) ct s, i prin
intermediul unui executabil. Astfel de comenzi sunt echo s, i time. n aceste situat, ii
Pentru execut, ia comenzii externe
comanda executata implicit este comanda interna.
n exemplul de mai jos sunt prezentate cele doua tipuri
trebuie apelata calea completa.
pentru comanda time (interna s, i externa):

de rulari
1
2

razvan@anaconda:~/code$ time ls
asm boot_hello latex stack_ovfl

static

tests

3
4
5
6

real
user
sys

0m0.004s
0m0.000s
0m0.000s

7
8
9
10
11

razvan@anaconda:~/code$ /usr/bin/time ls
asm boot_hello latex stack_ovfl static tests
0.00user 0.00system 0:00.00elapsed 133%CPU (0avgtext+0avgdata 0
maxresident)k
0inputs+0outputs (0major+254minor)pagefaults 0swaps

Se observa ca poate exista o deosebire ntre formatele de ies, ire ale unei comenzi
interne, respectiv externe.
De asemenea, mecanismele de ajutor folosite pentru comenzi (whereis, apropos,
--help, man, info) funct, ioneaza doar pentru comenzi externe. Pentru comenzi
interne va trebui consultata documentat, ia de Bash (man bash, info bash) sau
help:
folosita comanda (interna)
1
2
3
4

razvan@anaconda:~/code$ help time


time: time [-p] PIPELINE
Execute PIPELINE and print a summary of the real time, user CPU time
,
[...]

5
6

razvan@anaconda:~/code$ help alias

CAPITOLUL 12. SHELL SCRIPTING


7
8
9

373

alias: alias [-p] [name[=value] ... ]


alias with no arguments or with the -p option prints the list
[...]

, i n pagina de manual.
O lista completa a comenzilor interne Bash gasit
1
bash/info bash sau online )

12.2.4

(man

Execut, ia unei comenzi shell

Dupa cum s-a precizat, comenzile sunt de doua tipuri: interne s, i externe. Clasificarea
este data de modul n care comenzile se executa n cadrul shell-ului. Astfel, comenzile
interne (built-in) sunt executate direct n cadrul shell-ului, altfel spus n cadrul procesului
execut, ia unei comenzi externe nseamna crearea unui
curent. De partea cealalta,
proces fiu n shell-ul curent s, i nlocuirea imaginii procesului cu executabilul asociat
n
comenzii. Mai multe detalii despre caracteristicile s, i crearea unui proces se pot gasi
sect, iunea 5.2.
Un proces astfel creat va cont, ine ca imagine executabilul asociat comenzii. De obicei,
shell-ul va as, tepta terminarea procesului curent dupa care va oferi promptul utilizatorului.
Acest efect poate fi schimbat prin rularea procesului n fundal (background) cu ajutorul
operatorului & (vezi sect, iunea 5.3).
n cazul nlant
, uirii mai multor comenzi (vezi sect, iunea 5.5.1),
De ret, inut este faptul ca,
Astfel, la rularea comenzii:
se creeaza un proces pentru fiecare comanda.
1

ubuntu@ubuntu:~$ ls -l | sort

se vor crea doua procese: unul generat din executabilul /bin/ls iar altul generat din

executabilul /usr/bin/sort. Shell-ul este procesul parinte


al celor doua procese

s, i va asigura comunicat, ia ntre acestea (ies, irea comenzii ls -l va fi redirectata catre


intrarea comenzii sort).
Figura 12.1 ilustreaza grafic execut, ia comenzii de mai sus.

Figura 12.1: Execut, ia unei comenzi n shell


1

http://www.gnu.org/software/bash/manual/bashref.html#SEC55

374

12.3

INTRODUCERE N SISTEME DE OPERARE

Scripturi shell

Dupa cum am specificat, un script shell este un fis, ier text (un program) cont, innd
comenzi shell, variabile, structuri de control s, i funct, ii cu rolul de rezolvare a unei
probleme. Un script shell este interpretat de shell. Interpretarea nseamna parcurgerea

, uiri de comenzi sau structuri de control s, i realizarea sarcinilor descrise de


fiecarei
nlant
aceasta.
Ceea ce separa un script shell de limbajele interpretate obis, nuite este folosirea directa a
, ilor de nlant
, uire a comenzilor puse la dispozit, ie s, i a fis, ierelor
comenzilor shell, a facilitat
de configurare specifice sistemului.
Comenzile componente ale unui script shell pot fi executate manual la promptul shell-ului
scriptului. Astfel, liniile urmatoare

cu aceleas, i rezultate ca n cazul rularii


dintr-un script
shell:
1
2
3
4
5

if test 10 -gt 4; then


echo "mai mare"
else
echo "mai mic"
fi

pot fi executate direct n linia de comanda:


1
2

razvan@anaconda:~$ if test 10 -gt 4; then echo "mai mare"; else echo "mai
mic"; fi
mai mare

sau astfel:
1
2
3
4
5
6
7

razvan@anaconda:~$ if test 10 -gt 4


> then
> echo "mai mare"
> else
> echo "mai mic"
> fi
mai mare

n ultimul exemplu, shell-ul ofera utilizatorului un miniprompt (>) pentru a indica acestuia
ca nu a finalizat comanda. n cazul de fat, a comanda este if. Detalii despre if s, i despre
, i de script se regasesc

efectul acestei bucat


n sect, iunea 12.4.3.

12.3.1

Cel mai simplu script shell

Pentru a pastra
tonul tutorialelor de limbaje de programare, cel mai simplu script shell
pe care l vom descrie va fi cel care va afis, a mesajul Hello, World! la ies, irea standard.
Programul este prezentat mai jos:
1
2

echo "Hello, World!"


exit 0

Programul este foarte simplu. Folosim comanda echo pentru a afis, a un s, ir de caractere
la ies, irea standard s, i comanda exit pentru ca programul sa se termine cu succes.

CAPITOLUL 12. SHELL SCRIPTING

375

un script shell va ntoarce n mod implicit 0


Folosirea comenzii exit este opt, ionala;

daca se ajunge la sfrs, itul programului. Astfel, scriptul nostru shell poate fi scris ntr-o
singura linie:
1

echo "Hello, World!"

Rularea unui script shell


Rularea unui script shell se realizeaza la fel ca n cazul unui limbaj interpretat prin
transmiterea sa ca parametru interpretorului:
1
2

razvan@anaconda:~/uso/scripting$ bash hw.bash


Hello, World!

Scriptul shell poarta denumirea de hw.bash. Se recomanda ca scripturile shell Bash


Se
sa aiba extensia .sh sau .bash, cu toate ca n lumea Unix extensia poate fi omisa.
observa afis, area mesajului Hello, World! la ies, irea standard.
n spatele acestei execut, ii, shell-ul genereaza un nou proces care interpreteaza
cont, inutul scriptului primit ca parametru.

#! shebang
Mecanismul uzual de execut, ie a unui shell script este acela prin care se executa un
program obis, nuit:
1

ubuntu@ubuntu:~$ ./hw.bash

Totus, i, pentru a putea realiza acest lucru avem de ndeplinit doua precondit, ii:
1. scriptul trebuie sa fie executabil
2. n momentul execut, iei trebuie sa se cunoasca ce interpretor va fi folosit
(/bin/bash
pentru
Bash,
/usr/bin/python
pentru
Python,
/usr/bin/perl pentru Perl etc.)
Primul pas se realizeaza foarte simplu.
comanda chmod:
1

Se adauga drepturi de execut, ie folosind

razvan@anaconda:~/uso/scripting$ chmod a+x hw.bash

2
3
4

razvan@anaconda:~/uso/scripting$ ls -l hw.bash
-rwxr-xr-x 1 razvan razvan 42 Aug 31 18:46 hw.bash

Pentru realizarea celui de-al doilea pas se foloses, te perechea de caractere #! (diez s, i

semnul exclamarii)
denumita s, i shebang. Aceasta pereche de caractere este urmata de

calea completa catre


programul care va interpreta scriptul. Linia care cont, ine shebang s, i

calea completa catre


interpretor este prima linie din script. n momentul n care scriptul
este lansat n execut, ie, shell-ul parcurge prima linie s, i foloses, te interpretorul specificat
pentru a executa scriptul. Exemple de linii shebang sunt:

#!/bin/bash executarea scriptului folosind Bash


#!/usr/bin/perl executarea scriptului folosind Perl

376

INTRODUCERE N SISTEME DE OPERARE

#!/usr/bin/php executarea scriptului folosind PHP


#!/usr/bin/python executarea scriptului folosind Python

Astfel, dupa adaugarea


drepturilor de execut, ie s, i a liniei shebang scriptului nostru:
1
2

razvan@anaconda:~/uso/scripting$ cat hw.bash


#!/bin/bash

3
4
5

echo "Hello, World!"


exit 0

# afisare mesaj

l putem executa:
1
2

razvan@anaconda:~/uso/scripting$ ./hw.bash
Hello, World!

Un script shell nu necesita prezent, a liniei shebang. n mod implicit un script este
totus, i, prezent, a acestei linii pentru a
interpretat folosind /bin/bash. Se recomanda,
asigura consistent, a.
n prezent, distribut, ia Debian s, i distribut, iile derivate (precum Ubuntu, Kubuntu etc.)
folosesc ca shell Bash, iar ca interpretor implicit de script-uri shell Dash. Interpretorul

de script-uri shell implicit este /bin/sh (link simbolic catre


Dash).
Dash este mult mai rapid s, i mai eficient din punct de vedere al consumului de resurse
comparativ cu Bash. As, adar, atunci cnd modificat, i
dar este s, i mai limitat ca s, i sintaxa,
scripturi existente n sistem care au n linia shebang ca interpretor /bin/sh, luat, i n
considerare ca sintaxa este limitata 1 comparativ cu Bash.

12.3.2

Comentarii ntr-un script shell

Comentariile ntr-un script shell se realizeaza cu ajutorul caracterului #. Un comentariu


ator

ncepe de la aparit, ia # pna la sfrs, itul liniei, aseman


cu // din C++. Exemple de
comentarii sunt:
1
2
3

# comentariu
echo "hello" # comentariu
# echo "hello" (comanda comentata)

12.3.3

Comenzi simple shell

n mod evident, scriptul shell prezentat anterior nu este un script shell n adevaratul
sens al cuvntului. Aceasta deoarece acelas, i efect poate fi obt, inut prin rularea simpla
a comenzii echo urmata de argumentul Hello, World! la promtpul shell-ului. Un script
shell va cont, ine mai multe comenzi care vor fi interpretate ntr-o singura instant, a n
momentul execut, iei scriptului.
Scripturile shell folosesc de multe ori comenzi interne. Vom prezenta, n continuare, o
parte din cele mai folositoare comenzi interne:
1

https://wiki.ubuntu.com/DashAsBinSh

CAPITOLUL 12. SHELL SCRIPTING

377

echo
Comanda echo permite afis, area s, irului primit ca parametru la ies, irea standard a
terminalului:
1
2

razvan@anaconda:~$ echo "test"


test

Opt, iuni utile pentru echo sunt:

-n: dezactiveaza afis, area implicita a unui caracter newline la sfrs, itul liniei:
1
2

razvan@anaconda:~$ echo -n "test"


testrazvan@anaconda:~$

-e: permite interpretarea caracterelor speciale:


1
2
3

razvan@anaconda:~$ echo -ne "test\n\t\ttest2\n"


test
test2

printf
Comanda printf permite, ca s, i echo, afis, area unui s, ir de caractere la ies, irea
la fel ca funct, ia printf din C, formatarea s, irului de afis, are:
standard. Permite, nsa,
1
2

razvan@anaconda:~$ printf "%s


test
020

%03d\n" "test" 20

Se observa similaritatea cu funct, ia printf din C: primul argument este s, irul de formatare
iar celelalte sunt argumentele de afis, at la ies, irea standard.

exit
Comanda exit permite ntreruperea execut, iei scriptului. Comanda poate primi un
argument care specifica valoarea de retur. Aceasta valoare este implicit 0.

export
Comanda export permite exportarea unei variabile (sub forma unei variabile de mediu)
din scriptul curent n shell. Astfel, dupa ce shell-ul a ncheiat interpretarea scriptului,
a cu
variabila va putea fi folosita direct din shell. Pentru mai multe detalii n legatur
variabile n script-uri consultat, i sect, iunea 12.4.1.

set
Comanda set este utilizata pentru configurarea s, i personalizarea shell-ului. O opt, iune
a ce
utila este opt, iunea -x care permite afis, area comenzilor unui script shell pe masur
acestea sunt executate.

378

INTRODUCERE N SISTEME DE OPERARE

read
Comanda read este folosita pentru a citi date de la intrarea standard s, i pentru stocarea
n exemplul de mai jos, se dores, te stocarea datelor introduse
acestora ntr-o variabila.
de utilizator n variabila a:
1
2

razvan@anaconda:~/uso/scripting$ read a
test_msg

3
4
5

razvan@anaconda:~/uso/scripting$ echo $a
test_msg

Se observa ca variabila cont, ine s, irul test_msg introdus de utilizator.

12.3.4

One liners

, ilor shell pot fi realizate prin


Multe din problemele ce necesita utilizarea facilitat
intermediul unei simple linii. S-a observat ca nu este necesar (s, i nici eficient) sa
un script shell doar pentru afis, area unui mesaj precum Hello, World!\n la
utilizam
ies, irea standard.
sau nlant
, uirea comenzilor se pot obt, ine efecte imediate ntr-o
Folosind redirectari
singura linie de shell. Astfel de comenzi combinate poarta numele de one liners.

Redirectarea intrarii/ies
, irii unei comenzi

Redirectarea unei comenzi se ofera la posibilitatea de substituire a intrarii,


ies, irii sau
standard
erorii standard a unei comenzi cu un fis, ier. Astfel, redirectarea intrarii
nseamna ca o comanda va citi informat, ii dintr-un fis, ier n locul citirii de la intrarea

standard. Redirectarea ies, irii standard nseamna ca rezultatul comenzii se va regasi


ntr-un fis, ier de ies, ire.
standard se foloses, te operatorul < (caracterul mai mic)
Pentru redirectarea intrarii
ies, irii
urmat de numele fis, ierul din care se realizeaza redirectarea. n cazul redirectarii
s, i
standard, operatorul folosit este > (mai mare). Informat, ii despre redirectarea intrarii

ies, irii standard se regasesc


s, i n sect, iunea 4.4.
n mod
Vom exemplifica redirectarea folosind utilitarul cat. Comanda cat realizeaza,
standard la ies, irea standard. Un exemplu de rulare
implicit, afis, area cont, inutului intrarii
este prezentat n continuare:
1
2
3
4
5

razvan@anaconda:~$ cat
mesaj1
mesaj1
mesaj2
mesaj2

Pentru ncheierea introducerii de informat, ii de la intrarea standard trebuie folosita


combinat, ia CTRL-D, nsemnnd sfrs, it de fis, ier (end of file). Se observa ca ceea ce
introduce utilizatorul la intrarea standard se afis, eaza la ies, irea standard.
Daca vom redirecta un fis, ier la intrarea standard, efectul va fi afis, area cont, inutului
fis, ierului la ies, irea standard:

CAPITOLUL 12. SHELL SCRIPTING

1
2

379

razvan@anaconda:~/uso/scripting$ cat < hw.bash


#!/bin/bash

3
4

echo "Hello, World!"

5
6

exit 0

Acest lucru este echivalent cu transmiterea fis, ierului ca argument comenzii cat.
ies, irea standard ntr-un fis, ier, acesta va cont, ine ceea ce
n mod similar, daca redirectam
a introdus utilizatorul la intrarea standard (se foloses, te CTRL-D pentru ncheiere):
1
2
3

razvan@anaconda:~/uso/scripting$ cat > out.txt


introducem mesaj
dupa care apasam CTRL-D

4
5
6
7

razvan@anaconda:~/uso/scripting$ cat out.txt


introducem mesaj
dupa care apasam CTRL-D

n exemplul de mai sus, comanda cat a afis, at fis, ierul out.txt prin transmiterea

acestuia ca argument, echivalent cu redirectarea acestuia catre


intrarea standard a
comenzii. Acest comportament se extinde s, i la alte comenzii de prelucrare de fis, iere
text (vezi sect, iunea 12.5).

intrarii
s, i
Un efect care poate parea
surprinzator
este folosirea simultana a redirectarii
ies, irii standard. n acest fel, cont, inutul fis, ierului de la intrare este copiat n fis, ierul de la
ies, ire. Efectul este identic cu folosirea comenzii cp:
1

razvan@anaconda:~/uso/scripting$ cat < hw.bash > new.bash

2
3
4

razvan@anaconda:~/uso/scripting$ cat new.bash


#!/bin/bash

5
6

echo "Hello, World!"

7
8

exit 0

a cu
Pentru redirectarea erorii standard se foloses, te operatorul 2>. Aceasta are legatur
descriptorul de fis, ier asociat: intrarea standard are asociat descriptorul de fis, ier 0, ies, irea
standard are asociat descriptorul de fis, ier 1 iar eroarea standard are asociat descriptorul
de fis, ier 2.
Astfel, daca se doresc redirectate ntr-un fis, ier erorile s, i avertismentele emise de gcc se
foloses, te operatorul 2>:
1

razvan@anaconda:~/uso/scripting$ gcc hw.c 2> err_warn.txt

2
3
4
5

razvan@anaconda:~/uso/scripting$ cat err_warn.txt


hw.c: In function main:
hw.c:3: warning: incompatible implicit declaration of built-in function
printf

6
7

razvan@anaconda:~/uso/scripting$ gcc hw.c 2> /dev/null

n cel de-al doilea exemplu, s-a redirectat eroarea standard catre


/dev/null. Aceasta
nseamna ca nu se dores, te afis, area la eroarea standard sau ntr-un fis, ier a diverselor
informat, ii de avertisment afis, ate de gcc.

380

INTRODUCERE N SISTEME DE OPERARE

Se poate redirecta att ies, irea standard ct s, i eroarea standard folosind operatorul &>
(Atent, ie: acest operator nu funct, ioneaza n interpretorul shell Dash1 ). n exemplu de mai
jos se redirecteaza att ies, irea standard ct s, i eroarea standard a execut, iei comenzii
strace:
1

razvan@anaconda:~/uso/scripting$ strace ls &> out_ls.txt

Operatorul >> Operatorul >> este utilizat pentru redirectarea ies, irii standard nsa cu

adaugarea
(append) a informat, iilor redirectate la sfrs, itul fis, ierului. Echivalent exista

operatorul 2>> pentru adaugarea


informat, iilor de la eroarea standard. n exemplul de
mai jos scriem ies, irile comenzilor ls, ps s, i uptime ntr-un acelas, i fis, ier:
1

razvan@anaconda:~/uso/scripting$ ls > out.txt

2
3

razvan@anaconda:~/uso/scripting$ ps >> out.txt

4
5

razvan@anaconda:~/uso/scripting$ uptime >> out.txt

6
7
8
9
10
11
12
13
14
15
16
17
18
19

razvan@anaconda:~/uso/scripting$ cat out.txt


a.out
err_warn.txt
hw.bash
hw.c
new
new.bash
out.txt
out_ls.txt
PID TTY
TIME CMD
30624 pts/2
00:00:00 bash
31508 pts/2
00:00:00 ps
15:34:59 up 59 days, 39 min, 2 users, load average: 0.37, 0.55, 0.61

Here documents; operatorul << Operatorul << este folosit n ceea ce se cheama
here document. Un here document este folosit, de obicei, cu utilitare interactive.
Formatul de utilizare este:
1

command <<word

Acest lucru va impune comenzii citirea informat, iei aflata n continuarea comenzii de la
intrarea standard pna la ntlnirea cuvntului word n corpul scriptului. n exemplul de
mai jos, se cites, te de la intrarea standard pna la ntlnirea cuvntului END:
1
2

razvan@anaconda:~/uso/scripting$ cat here.bash


#!/bin/bash

3
4
5
6

cat <<END
mesaj simplu
... pentru un here document ...

7
8
9

avantajul este ca nu trebuie sa folosesc multe comenzi echo


END

10
11
12

echo "s-a terminat"


razvan@anaconda:~/uso/scripting$ bash here.bash
1

https://wiki.ubuntu.com/DashAsBinSh

CAPITOLUL 12. SHELL SCRIPTING


13
14

381

mesaj simplu
... pentru un here document ...

15
16
17

avantajul este ca nu trebuie sa folosesc multe comenzi echo


s-a terminat

Dupa cum se observa s, i din comentariile fis, ierului, un here document poate fi folosit n
locul comenzii echo. Un exemplu util l constituie generarea unei pagini web simple. O
prima alternativa este folosirea comenzii echo:
1
2

razvan@ragnarok:~/uso/scripting$ cat echo.bash


#!/bin/bash

3
4
5

hostname="ragnarok"
name="razvan"

6
7
8
9
10
11
12
13
14
15
16

echo
echo
echo
echo
echo
echo
echo
echo
echo
echo

-e
-e
-e
-e
-e
-e
-e
-e
-e
-e

"<html>"
"\t<title>"
"\t\tPagina mea"
"\t</title>"
"\t<body>"
"\t\t<h3>Statia este $hostname</h3>"
"\t\t<h3>Numele meu este $name</h3>"
"\t\t<p>Data este $(date)</p>"
"\t</body>"
"</html>"

17
18
19
20
21
22
23
24
25
26
27
28

razvan@ragnarok:~/uso/scripting$ bash echo.bash


<html>
<title>
Pagina mea
</title>
<body>
<h3>Statia este ragnarok</h3>
<h3>Numele meu este razvan</h3>
<p>Data este Tue Sep 4 23:23:05 EEST 2007</p>
</body>
</html>

Se observa ca este incomoda folosirea comenzii echo. O solut, ie este utilizarea unui
here document:
1
2

razvan@ragnarok:~/uso/scripting$ cat here.bash


#!/bin/bash

3
4
5

hostname="ragnarok"
name="razvan"

6
7
8
9

cat <<EndOfHtml
<html>
<title>
Pagina mea

10
11
12

</title>
<body>
<h3>Statia este $hostname</h3>
<h3>Numele meu este $name</h3>
<p>Data este $(date)</p>

13
14
15
16
17
18

</body>
</html>
EndOfHtml

382

INTRODUCERE N SISTEME DE OPERARE

online1 .
Informat, ii suplimentare despre here documents se pot gasi

Here strings; operatorul <<< Operatorul <<< permite folosirea de here strings, adica

redirectarea unui s, ir de caractere catre


intrarea standard a unei comenzi. n exemplul
de mai jos, se foloses, te comanda read pentru a citi cont, inutul unui s, ir ntr-un set de
variabile:
1

razvan@anaconda:~$ read a b c d <<< "alfa beta gamma delta "

2
3
4

razvan@anaconda:~$ echo $a $b $c $d
alfa beta gamma delta

Ca s, i n cazul operatorului <<, acelas, i rezultat poate fi obt, inut prin folosirea comenzii
echo:
1

razvan@anaconda:~$ echo "alfa beta gamma delta" | read a b c d

Trunchierea unui fis, ier Trunchierea unui fis, ier nseamna eliminarea cont, inutului
acestuia: fis, ierul devine gol (dimensiune 0). Trunchierea unui fis, ier se realizeaza prin
redirectarea cont, inutului /dev/null n fis, ier. Acest lucru se realizeaza folosind
comanda:
1
2

razvan@anaconda:~/uso/scripting$ ls -l out.txt
-rw-r--r-- 1 razvan razvan 220 Sep 4 15:34 out.txt

3
4

razvan@anaconda:~/uso/scripting$ cat /dev/null > out.txt

5
6
7

razvan@anaconda:~/uso/scripting$ ls -l out.txt
-rw-r--r-- 1 razvan razvan 0 Sep 4 15:35 out.txt

Mai simplu, trunchierea unui fis, ier se realizeaza prin redirectarea unei comenzi care nu
afis, eaza nimic la ies, irea standard. O astfel de comanda este : (comanda care nu face
nimic):
1

razvan@anaconda:~/uso/scripting$ : > out.txt

Si
mai simplu, trunchierea se realizeaza folosind comanda de mai jos:
1

razvan@anaconda:~/uso/scripting$ > out.txt

Comanda este echivalenta cu cea de mai sus, cu absent, a comenzii :.

, uirea comenzilor
nlant
, uirea diverselor
Shell-ul pune la dispozit, ia utilizatorului operatori care permit nlant
, i. Dintre aces, tia, cel mai cunoscut este
comenzi pentru obt, inerea de noi funct, ionalitat
operatorul | (pipe) care redirecteaza ies, irea unei comenzi la intrarea alteia. Detalii

despre acest operator se gasesc


s, i n capitolul 5.
1

http://tldp.org/LDP/abs/html/here-docs.html

CAPITOLUL 12. SHELL SCRIPTING

383

Operatorul | (pipe) Un exemplu de utilizare al operatorului | este cautarea


unei

informat, ii ntr-un fis, ier. O comanda uzuala este:


1

ubuntu@ubuntu:~$ cat file.txt | grep keyword

Cautarea
informat, iei n fis, ier se realizeaza cu ajutorul comenzii grep, descrisa n
sect, iunea 12.5.7.
Un exemplu mai complex care utilizeaza o serie de comenzi prezentate n acest capitol

este determinarea numarului


de utilizatori unici care s-au autentificat n sistem ntr-o
Comenzile utilizate sunt last, grep, cut, sort, uniq, wc. Detalii despre
zi data.

aceste vor fi prezentate n sect, iunile urmatoare.

Pentru nceput, vom folosi comanda last care afis, eaza autentificarile
n sistem.

Comanda grep este folosita pentru a extrage numai acele linii care cont, in ziua dorita:
1
2
3
4
5
6
7
8
9
10
11
12
13
14

razvan@anaconda:~/uso/scripting$ last -30 | grep Mon


sergiu
pts/4
89.18.20.56
Mon Sep 3 23:36
razvan
pts/4
dhcp-204.cs.pub. Mon Sep 3 23:19
carpalex pts/0
86.121.140.140
Mon Sep 3 23:14
alexef
pts/0
89.120.196.59
Mon Sep 3 22:42
cojocar pts/0
86.127.17.156
Mon Sep 3 19:50
ddvlad
pts/3
84.247.45.23
Mon Sep 3 16:00
root
pts/0
dhcp-204.cs.pub. Mon Sep 3 15:14
ddvlad
pts/0
84.247.45.23
Mon Sep 3 15:07
valentin pts/2
86.122.195.234
Mon Sep 3 13:47
alexef
pts/0
89.120.196.59
Mon Sep 3 13:30
razvan
pts/0
dhcp-204.cs.pub. Mon Sep 3 10:30
stefanb pts/0
adsl-76-200-147- Mon Sep 3 10:05
stefanb pts/0
adsl-76-200-147- Mon Sep 3 06:13

23:46
23:35
01:41
22:51
19:51
16:01
17:33
15:09
02:43
15:04
10:44
10:17
07:57

(00:09)
(00:15)
(02:27)
(00:08)
(00:01)
(00:00)
(02:18)
(00:01)
(12:55)
(01:34)
(00:13)
(00:12)
(01:43)

Dupa obt, inerea autentificarilor


n sistem vrem sa extragem numai numele utilizatorilor.
Pentru aceasta vom folosi comanda cut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14

razvan@anaconda:~/uso/scripting$ last -30 | grep Mon | cut -d -f1


sergiu
razvan
carpalex
alexef
cojocar
ddvlad
root
ddvlad
valentin
alexef
razvan
stefanb
stefanb

n acest moment avem numele utilizatorilor care s-au autentificat n sistem n ziua de

Luni. Mai departe, va trebui sa extragem o singura instant, a a numelor care se repeta.
Drept urmare vom folosi utilitarele sort s, i uniq:
1
2
3
4
5

razvan@anaconda:~/uso/scripting$ last -30 | grep Mon | cut -d -f1 |


sort | uniq
alexef
carpalex
cojocar
ddvlad

384
6
7
8
9
10

INTRODUCERE N SISTEME DE OPERARE

razvan
root
sergiu
stefanb
valentin

Mai ramne
sa afis, am
numarul
de autentificari.
Acest lucru se realizeaza prin
contorizarea liniilor obt, inute la pasul anterior, cu ajutorul utilitarului wc:
1
2

razvan@anaconda:~/uso/scripting$ last -30 | grep Mon | cut -d -f1 |


sort | uniq | wc -l
9

Comanda de mai sus poate da rezultate incorecte n cazul n care Mon mai apare
altundeva n rezultatul furnizat de last. Daca ar exista un utilizator Monica, atunci vor

aparea
s, i liniile ce descriu autentificarea n sistem a utilizatorului Monica (chiar daca
autentificarea a avut sau nu loc n ziua de luni). Aceasta problema va fi corectata n
sect, iunea 12.11.1.

, uire a comenzilor t, in cont de


Operatorii ;, || s, i && Operatorii ;, || s, i && de nlant
Astfel:
valoarea ntoarsa de comanda anterioara.

comm1 ; comm2 comanda comm2 se executa dupa execut, ia comenzii comm1


comm1 || comm2 comanda comm2 se executa n cazul n care comm1 se
ntoarce cu o valoare nenula

comm1 && comm2 comanda comm2 se executa n cazul n care comm1 se


ncheie cu succes (ntoarce 0)

Operatorul ; este echivalent cu execut, ia secvent, iala a fiecarei


comenzi.
Operatorul && este folosit cnd comm2 depinde de execut, ia cu succes a comenzii
comm1. O situat, ie este compilarea din surse s, i instalarea unei aplicat, ii:
1

root@ubuntu:~# make && make install

12.4

Programarea shell

Dupa prezentarea ctorva comenzi simple s, i a operatorilor shell, putem patrunde


n
aspectele de programare a unui shell script. Dupa cum s-a precizat, shell-ul pune la
dispozit, ia utilizatorului un limbaj de programare. Acesta cont, ine, ca s, i alte limbaje de
programare, variabile, funct, ii, structuri de ciclare, instruct, iuni de decizie. Combinate cu
, i oferite de shell (utilizarea de comenzi deja implementate, nlant
, uirea
celelalte facilitat
comenzilor, redirectarea), programarea shell devine un instrument puternic la ndemna
utilizatorului.

12.4.1

Variabile

O variabila are asociat un nume s, i o valoare. La fel ca n C, numele variabilelor este


un s, ir de caractere ce poate cont, ine litere, cifre sau caracterul _ (underscore) s, i trebuie

CAPITOLUL 12. SHELL SCRIPTING

385

sa nceapa cu litera sau underscore. Exemple de nume de variabile sunt a, a0b, a_b,
AxB_01_D etc.
Spre deosebire de limbaje precum C, variabilele n shell nu au un tip. Faptul ca o variabila
sau un s, ir de caractere depinde de contextul n care este folosita.
De
este un numar
asemenea, o variabila poate fi definita oriunde. n mod obis, nuit, unei variabile i este
sunt:
asociata o valoare n momentul definirii. Exemple de init, ializari
1
2
3
4

a=0
b="alfa"
c="a08ss"
d=230

Un lucru important de ret, inut este fragilitatea programarii


shell s, i constrngerile
importante pe care le impune. Una dintre ele este faptul ca nu poate exista spat, iu
unei variabile. Astfel, urmatoarele

nainte sau dupa semnul = din momentul init, ializarii


vor fi invalide:
init, ializari
1
2
3

a =0
b = "alfa"
d= 230

Valoarea unei variabile este referita cu ajutorul simbolului $. Astfel, daca dorim afis, area
valorii variabilelor definite mai sus folosim comanda:
1
2

razvan@anaconda:~$ echo $a $b $c $d
0 alfa a08ss 230

daca dorim init, ializarea unei variabile la valoarea unei alteia vom folosi o
n consecint, a,
construct, ie de forma:
1
2

razvan@anaconda:~$ echo $e
0

3
4

razvan@anaconda:~$ f="$b$c"

5
6
7

razvan@anaconda:~$ echo $f
alfaa08ss

n ultimul exemplu se observa ca variabila f cont, ine valorile concatenate ale celorlalte
doua variabile. De asemenea, se poate observa ca ghilimelele nu schimba sensul
simbolului $.
Daca se dores, te ca o variabila sa fie un rezultat al unei operat, ii aritmetice cu o alta
variabila se foloses, te operatorul de expandare aritmetica descris n sect, iunea 12.7.1:
1

razvan@anaconda:~$ a=4

2
3

razvan@anaconda:~$ c=3

4
5
6

razvan@anaconda:~$ echo $(($a * $c + 1))


13

ies, irii unei comenzi ntr-o


O facilitate importanta a shell-ului este posibilitatea stocarii
Acest lucru se realizeaza prin intermediul construct, iei $(command). n
variabila.

exemplul de mai jos, ret, inem n variabila local_users_num numarul


de utilizatori
care au directorul de baza n /home:

386

INTRODUCERE N SISTEME DE OPERARE

razvan@anaconda:~$ local_users_num=$(cat /etc/passwd | grep /home | wc -l


)

2
3
4

razvan@anaconda:~$ echo $local_users_num


52

s, i utilizatorul root, adaug


am
1 la acea variabila:

Daca vrem sa contorizam


1

razvan@anaconda:~$ total_local=$(($local_users_num + 1))

2
3
4

razvan@anaconda:~$ echo $total_local


53

O gres, eala frecventa n init, ializarea unei variabile este folosirea de spat, ii nainte sau
dupa =. Evitat, i aparit, ia unor astfel de gres, eli n scripturile voastre.

Exemple

afis, area ultimelor n adrese IP de la care s-au realizat conexiuni pentru un serviciu
(inspect, ie de jurnale)
1
2
3
4
5
6
7

root@anaconda:/home/razvan/uso/scripting# cat -n service_ip.bash


1 #!/bin/bash
2
3 ip_num=3
4 log_file="/var/log/apache/access.log"
5
6 tail -n $ip_num $log_file | cut -d -f 1

8
9
10
11
12

root@anaconda:/home/razvan/uso/scripting# bash service_ip.bash


38.99.44.102
38.99.44.102
38.99.44.102

Afis, area memoriei totale ocupate de primele 3 procese din sistem1


1
2
3
4
5
6
7
8
9
10

root@anaconda:/home/razvan/uso/scripting# cat -n mem_proc.bash


1 #!/bin/bash
2
3 rss1=$(ps -e -o rss --sort=-rss | head -n 2 | tail -n 1)
4 rss2=$(ps -e -o rss --sort=-rss | head -n 3 | tail -n 1)
5 rss3=$(ps -e -o rss --sort=-rss | head -n 4 | tail -n 1)
6
7 total_rss_kb=$(($rss1 + $rss2 + $rss3))
8
9 echo "memorie totala ocupata de primele 3 procese:
$total_rss_kb KB"

11
12
13

root@anaconda:/home/razvan/uso/scripting# bash mem_proc.bash


memorie totala ocupata de primele 3 procese: 29088 KB

Adaugarea
unui utilizator n sistem n mod neinteractiv
1
2

root@anaconda:/home/razvan/uso/scripting# cat -n my_add_user.sh


1 #!/bin/bash

1
presupunem ca nu se modifica procesele pe parcursul execut, iei script-ului, astfel nct ordinea lor sa

se pastreze

CAPITOLUL 12. SHELL SCRIPTING


3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

387

2
3 #
4 # Add a new user; invoke all necesary script and command for
adding complete
5 # user facilities
6 #
7
8 username="newuser"
9 email="razvand@gmail.com"
10
11 GROUP_NAME="students"
12 GROUP_DIR="students"
13 QUOTA="250"
# size in megs
14
15 # add user
16 useradd -m -d /home/$GROUP_DIR/$username -g $GROUP_NAME -s /
bin/bash $username
17
18 # create password
19 password=$(pwgen -N 1)
20
21 # add password - non-interractive mode
22 echo "$username:$password" | chpasswd
23
24 # set quota
25 setquota $username $(($QUOTA * 1024)) $((($QUOTA + 10) *
1024)) $(($QUOTA * 10)) $((($QUOTA + 10) * 10)) -a
26
27 # send e-mail
28 mail -s "New Account" $email <<EndOfMsg
29 A new account has been created for you. Username is
$username.

31
32

30

Your password is $password. Please use passwd to change it.

31
32

Your qota limit is $QUOTA MB.

33
34
35
36

33
34
35
36
37

37
38
39
40
41

Have a nice day!


EndOfMsg
exit 0

42
43

root@anaconda:/home/razvan/uso/scripting# ./my_add_user.sh

44
45
46

root@anaconda:/home/razvan/uso/scripting# cat /etc/passwd | tail -1


newuser:x:1051:1026::/home/students/newuser:/bin/bash

12.4.2

Caractere speciale shell

Shell-ul are un set de caractere rezervate, caractere ce au roluri bine definite ntr-un
script.

388

INTRODUCERE N SISTEME DE OPERARE

Caracterul blank (spat, iu)


Caracterul blank este folosit pentru a separa argumentele unei comenzi de comanda s, i
ntre ele. Astfel, n exemplul
1

ubuntu@ubuntu:~$ ls -l mydir

avem comanda ls cu doua argumente: -l s, i mydir. Se poate ntmpla sa avem un


argument care cont, ine caractere blank. Spre exemplu, avem directorul my dir. Pentru
afis, area cont, inutului acestui director, nu putem folosi comanda:
1

ubuntu@ubuntu:~$ ls my dir

ntruct shell-ul ar considera doua argumente transmise comenzii ls. Astfel, s-ar
ncerca afis, area cont, inutului directorului my s, i apoi a directorului dir. Pentru a
prentmpina acest efect, caracterul blank trebuie citat, adica trebuie folosit ca un
caracter obis, nuit. Pentru aceasta exista trei solut, ii:
1. folosirea caracterului special ghilimele pentru nglobarea numelui de director ce
cont, ine blank:
1

ubuntu@ubuntu:~$ ls "my dir"

2. folosirea caracterului special apostrof, la fel cum s-a folosit ghilimele:


1

ubuntu@ubuntu:~$ ls my dir

3. folosirea caracterului special backslash, care dezactiveaza caracterul special de


dupa el
1

ubuntu@ubuntu:~$ ls my\ dir

Despre caracterele speciale ghilimele, apostrof s, i backslash se va discuta n continuare.

Caracterul $ (dolar)
Unul dintre acestea este caracterul $ care poate fi folosit pentru expandarea unei

variabile (a valorii acesteia), a unei comenzi sau expandare aritmetica.


Expandarea unei variabile se refera la determinarea valorii acesteia:
1

razvan@anaconda:~$ a=3

2
3

razvan@anaconda:~$ b=mesaj

4
5
6

razvan@anaconda:~$ echo $a $b
3 mesaj

Expandarea unei comenzi se refera la ret, inerea rezultatului execut, iei comenzii:
1

razvan@anaconda:~$ num_dirs=$(ls -l | wc -l)

2
3
4

razvan@anaconda:~$ echo $num_dirs


21

a folosirea
Expandare aritmetica se refera la executarea de calcule aritmetice. Far
operatorii aritmetici ar fi considerat, i caractere
operatorului de expandare aritmetica,
simple:

CAPITOLUL 12. SHELL SCRIPTING

1
2

389

razvan@anaconda:~$ echo 2+3+4


2+3+4

3
4
5

razvan@anaconda:~$ echo $((2+3+4))


9

Mai multe informat, ii despre utilizarea caracterului $ s, i despre expandare sunt prezentate
n sect, iunea 12.7.
Caracterul $ este un caracter special. Acest lucru nseamna ca nu poate fi folosit cu
semnificat, ia de caracter direct cnd este urmat de un alt caracter care impune o
expandare. Daca dorim afis, area s, irului $a, nu putem folosi comanda echo $a, pentru
ca ar afis, a valoarea variabilei a:
1
2

razvan@anaconda:~$ echo $a
3

Pentru aceasta trebuie folosit caracterul backslash sau apostrof.


Folosirea ghilimelelor nu conduce la folosirea semnificat, iei de caracter pentru $:
1
2

razvan@anaconda:~$ echo "$a"


3

3
4
5

razvan@anaconda:~$ echo $a
$a

6
7
8

razvan@anaconda:~$ echo \$a


$a

Caracterul " (ghilimele)


Un alt caracter special este " (ghilimele). Acest caracter este folosit pentru a defini s, iruri
de caractere:
1
2

$ a="sir"
$ b="acest sir"

Caracterul ghilimele este folosit pentru pastrarea semnificat, iei de caracter pentru
caracterele speciale: blank, (, ), &, | etc. Except, ia o constituie caracterul $ care s, i

pastreaz
a semnificat, ia n cazul expansiunii:
1

razvan@anaconda:~$ c=3

2
3

razvan@anaconda:~$ b=a

4
5
6

razvan@anaconda:~$ echo "c = $c; b = $b"


c = 3; b = a

Pentru afis, area unui caracter ghilimele putem folosi backslash sau apostrof :
1
2

razvan@anaconda:~$ echo "simbolul ghilimele (\")"


simbolul ghilimele (")

3
4
5

razvan@anaconda:~$ echo simbolul ghilimele (")


simbolul ghilimele (")

390

INTRODUCERE N SISTEME DE OPERARE

Caracterul \ (backslash)
S-a observat nsa ca nu putem afis, a caracterul $. Comanda de mai jos afis, eaza valoarea
variabilei a:
1
2

razvan@anaconda:~$ echo $a
3

Shell-ul interpreteaza caracterul $ ca init, iator al unei expandari.


Daca dorim afis, area
s, irului $a, nu putem folosi construct, ia de mai sus, ntruct se va ncerca expandarea
variabilei a. Pentru a realiza acest lucru vom folosi caracterul \(backslash). Acest

caracter este caracterul de citarea s, i are rolul de a pastra


semnificat, ia caracterului de

dupa el. Citare nseamna folosirea unui caracter cu semnificat, ia literala.


Astfel, daca dorim afis, area s, irului $a, folosim comanda:
1
2

razvan@anaconda:~$ echo \$a


$a

Caracterul \ poate fi folosit s, i pentru citarea caracterului ":


1
2

razvan@anaconda:~$ echo \"


"

Tot \ este folosit pentru afis, area \:


1
2

razvan@anaconda:~$ echo \\
\

Caracterul (apostrof)
Caracterul are un rol similar cu cel al caracterului ". Este folosit pentru descrierea de
, i pastreze

s, iruri s, i fort, eaza caracterele speciale sa-s


semnificat, ia. Deosebirea ntre s, i
" este ca primul este mult mai puternic. Astfel, orice caractere speciale care apar ntre

doua caractere apostrof s, i pastreaz


a semnificat, ia:
1
2

razvan@anaconda:~$ echo " ) ; & $ \


" ) ; & $ \

Alte caractere speciale


Alte caractere cu rol special n shell sunt cele folosite de operatorii shell: >, <, |, &, ;,
(, ) sau cele folosite pentru expresii regulate n shell: {, }, *, +, ?, [, ]. Toate aceste

caractere s, i pastreaz
a semnificat, ia daca sunt folosite ntre ghilimele sau apostroafe.

Mai multe detalii despre caracterele folosite pentru expresii regulate n shell se regasec
n sect, iunea 12.7.2.
spre exemplu, un utilizator dores, te afis, area tuturor pachetelor instalate care ncep
Daca,
cu litera n, va trebui sa utilizeze comanda:
1

ubuntu@ubuntu:~$ dpkg -l n*

Comanda de mai jos nu va funct, iona daca exista o intrare n directorul curent care ncepe
expresiei regulate de catre

a a fi transmis catre

cu litera n din cauza expandarii


shell, far
utilitarul dpkg:

CAPITOLUL 12. SHELL SCRIPTING

1
2

391

razvan@anaconda:~/uso/scripting$ ls
hw.bash new

3
4
5

razvan@anaconda:~/uso/scripting$ dpkg -l n*
No packages found matching new.

Solut, ia este citarea caracterului *:


1
2
3
4
5
6
7
8
9
10
11
12
13

razvan@anaconda:~/uso/scripting$ dpkg -l n*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err:
uppercase=bad)
||/ Name
Version
Description
+++-==============-==============-========================================
ii
un
un
un
pn
pn
ii

nano
nano-tiny
nas
nas-lib
nautilus
nautilus-cd-bu
nautilus-data

12.4.3

2.0.2-1etch1
<none>
<none>
<none>
<none>
<none>
2.14.3-11

free Pico clone with some new features


(no description available)
(no description available)
(no description available)
(no description available)
(no description available)
data files for nautilus

Instruct, iuni de decizie

Instruct, iunile de decizie folosite n scripturile shell sunt if s, i case. O instruct, iune de
decizie permite testarea unei condit, ii s, i executarea unei act, iuni sau a alteia conform
condit, iei.

if

Vom analiza instruct, iunea if prin urmatorul


exemplu: daca utilizatorul local este root
atunci se afis, eaza un mesaj, daca utilizatorul local este razvan se afis, eaza un alt
mesaj, iar daca utilizatorul local este altcineva, se afis, eaza un mesaj specific:
1
2
3
4
5
6
7
8
9
10
11
12

razvan@anaconda:~/uso/scripting$ cat -n if_user.bash


1 #!/bin/bash
2
3 user=$(whoami)
4
5 if test $user = "root"; then
6
echo "Bow before me for I am root."
7 elif test $user = "razvan"; then
8
echo "I am no humble user."
9 else
10
echo "I am but a humble user."
11 fi

13
14
15

razvan@anaconda:~/uso/scripting$ bash if_user.bash


I am no humble user.

Opt, iunea -n a comenzii cat afis, eaza s, i numarul


liniei. Sintaxa if este urmatoarea:

392

1
2
3
4
5
6
7

INTRODUCERE N SISTEME DE OPERARE

if conditie1; then
actiune conditie1 indeplinita
elif conditie2; then
actiune conditie2 indeplinita
else
actiune conditie neindeplinita
fi

Cuvinte cheie predefinite sunt if, then, elif, else, fi. conditie1, respectiv conditie2
sunt condit, ii care sunt testate. n cazul n care o conditie este ndeplinita se executa

act, iunea asociata.


Dupa cum se vede din exemplu (liniile 5 s, i 7), condit, iile sunt exprimate cu ajutorul
utilitarului test. Acesta interpreteaza condit, ia s, i ntoarce 0 daca este ndeplinita sau 1
daca nu:
1

razvan@anaconda:~/uso/scripting$ test "alfa" = alfa

2
3
4

razvan@anaconda:~/uso/scripting$ echo $?
0

5
6

razvan@anaconda:~/uso/scripting$ test "alfa" = alf

7
8
9

razvan@anaconda:~/uso/scripting$ echo $?
1

Variabila $? este o variabila predefinita care det, ine valoarea de retur a ultimei expresii.
Acelas, i efect poate fi obt, inut cu ajutorul operatorului de test al shell-ului [ ..
1

]:

razvan@anaconda:~/uso/scripting$ [ "alfa" = alfa ]

2
3
4

razvan@anaconda:~/uso/scripting$ echo $?
0

5
6

razvan@anaconda:~/uso/scripting$ [ "alfa" = alf ]

7
8
9

razvan@anaconda:~/uso/scripting$ echo $?
1

Este obligatoriu un caracter blank (spat, iu) dupa [ s, i nainte de ] la operatorul de test de
condit, ie din shell.

Condit, ia folosita if nu trebuie sa fie neaparat


o condit, ie de test. Se poate folosi orice
Daca acel numar
este 0 condit, ia este
construct, ie care poate fi evaluata la un numar.

ndeplinita s, i se executa act, iunea corespunzatoare,


altfel nu. n exemplu urmator,
se

afis, eaza un mesaj corespunzator


doar daca utilizatorul indicat de variabila user are
directorul de baza n /home (nu este utilizator de sistem):
1
2
3
4
5
6
7
8
9

razvan@anaconda:~/uso/scripting$ cat -n home_user.bash


1 #!/bin/bash
2
3 user="mihai"
4
5 if grep "$user" /etc/passwd | grep "/home"; then
6
echo "User $user is not homeless."
7 else
8
echo "User $user is homeless."

CAPITOLUL 12. SHELL SCRIPTING


10

393

fi

11
12
13
14
15
16

razvan@anaconda:~/uso/scripting$ bash home_user.bash


amihaiuc:x:1011:1011:Alex Mihaiuc,,,:/home/amihaiuc:/bin/bash
mihai:x:1014:1014:Mihai Dobrescu,,,:/home/mihai:/bin/bash
mihaif:x:1023:1023:Mihai Florian,,,:/home/mihaif:/bin/bash
User mihai is not homeless.

echo -n "test" Se observa ca if testeaza ies, irea comenzii compuse


1

grep "$user" /etc/passwd | grep "/home"

care verifica daca exista utilizatorul mihai n sistem s, i daca acest utilizator are directorul
afis, eaza mesajul User mihai is not
de baza n /home (linia 5). ntruct acesta exista,
homeless..

Totus, i, comanda grep afis, eaza s, i liniile gasite,


lucru care este deranjant n perspectiva
, ii scriptului.

funct, ionalitat
Solut, ia este redirectarea ies, irii comenzii grep catre
/dev/null.
1
2
3
4
5
6
7
8
9
10

razvan@anaconda:~/uso/scripting$ cat -n home_user.bash


1 #!/bin/bash
2
3 user="mihai"
4
5 if grep "mihai" /etc/passwd | grep "/home" > /dev/null ; then
6
echo "User $user is not homeless."
7 else
8
echo "User $user is homeless."
9 fi

11
12
13

razvan@anaconda:~/uso/scripting$ bash home_user.bash


User mihai is not homeless.

Condit, ii de test Att test ct s, i operatorul de condit, ie shell [..] analizeaza o


n exemplele
condit, ie s, i ntorc 0 daca este ndeplinita sau 1 daca nu este ndeplinita.
prezentate de anterior condit, ia a fost sir1 = sir2. Exista mai multe condit, ii, o parte
din care sunt prezentate n tabelul de mai jos:
Mai multe condit, ii pot fi folosite simultan folosind operatorii -a s, i -o cu sintaxele respectiv
conditie1 -a conditie2 s, i conditie1 -o conditie2.
Cteva exemple de folosire a condit, iilor de mai sus sunt prezentate n continuare:
1

razvan@anaconda:~/uso/scripting$ test -f a.txt

2
3

razvan@anaconda:~/uso/scripting$ test -s a.txt

4
5

razvan@anaconda:~/uso/scripting$ test a.txt -ot b.txt

6
7

razvan@anaconda:~/uso/scripting$ test 3 -eq 4

8
9

razvan@anaconda:~/uso/scripting$ test -z ""

10
11

razvan@anaconda:~/uso/scripting$ test -z "a"

12
13
14

razvan@anaconda:~/uso/scripting$ test "a" = "b"

394
15

INTRODUCERE N SISTEME DE OPERARE

razvan@anaconda:~/uso/scripting$ test -f a.xt -a 3 -eq 4

Negarea unui condit, ii se face cu ajutorul operatorului !:


1
2

razvan@anaconda:~$ if ! test 4 -gt 5; then echo "4 nu e mai mare ca 5";


else echo "4 e mai mare ca 5"; fi
4 nu e mai mare ca 5

Operatorul ((...)) de expansiune aritmetica poate fi folosit pentru evaluarea unor


ator

condit, ii ntr-un format aseman


C:
1
2

razvan@anaconda:~/uso/scripting$ if ((1 < 4)); then echo "adevarat"; fi


adevarat

Mai multe detalii despre operatorul ((...)) se gasesc


n sect, iunea 12.7.1.

case
Instruct, iunea case permite selectarea ntre mai multe s, abloane de s, iruri de expresii
o litera
regulate. n exemplul de mai jos se verifica daca un s, ir ncepe cu o litera mica,

mare sau cu un numar:


1
2
3
4
5
6
7
8
9
10
11

razvan@anaconda:~/uso/scripting$ cat -n case_begin.bash


1 #!/bin/bash
2
3 var="Alfa"
4
5 case $var in
6
[a-z]*) echo "litera mica";;
7
[A-Z]*) echo "litera mare";;
8
[0-9]*) echo "cifra";;
9
*) echo "altceva";;
10 esac

12
13
14

razvan@anaconda:~/uso/scripting$ bash case_begin.bash


litera mare

Sintaxa pentru case, observabila s, i n exemplu, este:


1
2
3
4

case valoare_variabila in
sablon1) actiuni;;
sablon2) actiuni;;
...

5
6

esac

Cuvinte rezervate sunt case, in, esac. Se verifica daca valoare_variabila se

potrives, te cu unul dintre s, abloanele ulterioare. n momentul gasirii


unei potriviri se
executa act, iunile asociate. Act, iunile asociate s, ablonului se ncheie cu ;; (doua

simboluri punct s, i virgula).


n exemplul de mai sus, variabila var se init, ializeaza la s, irul Alfa (linia 3). Dupa
aceasta se verifica daca variabila ncepe cu litera mica (linia 6), cu litera mare (linia 7)
sau cu cifra (linia 8). Sabloanele

sunt date, de obicei, de expresii regulate. Mai multe

detalii despre expresii regulate se gasesc


n sect, iunea 12.7.2.
Caracterul * nseamna orice s, i este folosit ca echivalent pentru cuvntul cheie default
din C.

CAPITOLUL 12. SHELL SCRIPTING

12.4.4

395

Cicluri n shell

Bash pune la dispozit, ia utilizatorului trei instruct, iuni de ciclare cu funct, ionalitate similara
for, while s, i do/until. Vom exemplifica sintaxa s, i modul de
dar sintaxa diferita:
utilizare a acestor comenzi pe un exemplu simplu: calculul sumei primelor 10 numere
naturale.

Instruct, iunea for

Scriptul shell pentru calculul sumei primelor 10 numere naturale este urmatorul:
1
2
3
4
5
6
7
8
9

razvan@anaconda:~/uso/scripting$ cat -n for10.bash


1 #!/bin/bash
2
3 sum=0
4 for i in 1 2 3 4 5 6 7 8 9 10; do
5
sum=$(($sum + $i))
6 done
7
8 echo "Suma este: $sum"

10
11
12

razvan@anaconda:~/uso/scripting$ bash for10.bash


Suma este: 55

Dupa cum se vede, sintaxa for este


1
2
3

for var in lista; do


actiuni
done

sau
1
2
3
4

for var in lista


do
actiuni
done

Varibila var este folosita pentru a parcurge lista element cu element. Cuvinte rezervate
sunt for, in, do s, i done.
Se parcurg elementele listei (linia 4) s, i se executa act, iunile precizate (linia 5). n cazul de
fat, a (linia 5), folosind operatorul de expansiune aritmetica $((...)) se incrementeaza
, i shell, for poate fi folosit direct n linia de
suma cu valoarea lui i. Ca orice alte facilitat

comanda:
1
2
3
4
5

razvan@anaconda:~/uso/scripting$ for i in 1 2 3 4; do echo $i; done


1
2
3
4

, ii:
Acest lucru se poate extinde s, i la scriptul de mai sus cu pierderea part, iala a claritat
1
2

razvan@anaconda:~/uso/scripting$ sum=0; for i in 1 2 3 4 5 6 7 8 9 10; do


sum=$(($sum+$i)); done; echo "Suma este: $sum"
Suma este: 55

396

INTRODUCERE N SISTEME DE OPERARE

sau:
1

razvan@anaconda:~$ sum=0

2
3
4
5

razvan@anaconda:~$ for i in 1 2 3 4 5 6 7 8 9 10; do


> sum=$(($sum + $i))
> done

6
7
8

razvan@anaconda:~$ echo $sum


55

fie s, ir de caractere:
Lista poate cont, ine orice fel de element, fie numar
1
2
3
4

razvan@anaconda:~/uso/scripting$ for i in abc def ghi; do echo $i; done


abc
def
ghi

Separatorul implicit pentru lista este caracterul blank (spat, iu). Daca un s, ir cont, ine blank,
acesta trebuie citat:
1
2
3

razvan@anaconda:~/uso/scripting$ for i in "abc def" ghi; do echo $i; done


abc def
ghi

4
5
6
7

razvan@anaconda:~/uso/scripting$ for i in abc def ghi; do echo $i; done


abc def
ghi

8
9
10
11

razvan@anaconda:~/uso/scripting$ for i in abc\ def ghi; do echo $i; done


abc def
ghi

Comanda seq Revenind la calculul sumei primelor 10 numere naturale se observa


manuale a elementelor listei. Acest aspect poate
lipsa de scalabilitate a specificarii
fi automatizat prin folosirea comenzii seq. Aceasta permite generarea unei liste de
numere ntr-un interval dat:
1
2
3
4
5

razvan@anaconda:~/uso/scripting$ seq 1 4
1
2
3
4

6
7
8
9
10
11
12

razvan@anaconda:~/uso/scripting$ seq 1 2 10
1
3
5
7
9

Cu doua argumente, seq afis, eaza elementele cuprinse ntre cele doua limite. Cu trei
argumente, argumentul din mijloc (al doilea) este folosit ca pas de incrementare.
spre exemplu, am dori calculul sumei primelor 100 de numere naturale am folosi
Daca,
urmatorul script shell:
1

razvan@anaconda:~/uso/scripting$ cat -n for10_seq.bash

CAPITOLUL 12. SHELL SCRIPTING


2
3
4
5
6
7
8
9

1
2
3
4
5
6
7
8

397

#!/bin/bash
sum=0
for i in $(seq 1 100); do
sum=$(($sum + $i))
done
echo "Suma este: $sum"

10
11
12

razvan@anaconda:~/uso/scripting$ bash for10_seq.bash


Suma este: 5050

aritmetice ca n exemplul de mai jos:


O alta solut, ie este folosirea expandarii
1
2
3
4
5
6
7
8
9

razvan@anaconda:~/uso/scripting$ cat -n for10_exp.bash


1 #!/bin/bash
2
3 sum=0
4 for ((i = 1; i <= 100; i++)); do
5
sum=$(($sum + $i))
6 done
7
8 echo "Suma este: $sum"

10
11
12

razvan@anaconda:~/uso/scripting$ bash for10_exp.bash


Suma este: 5050

Se observa similaritatea cu sintaxa C pentru instruct, iunea for.

Lucrul cu sistemul de fis, iere Folosind for putem parcurge intrarile


dintr-un director

al sistemului de fis, ier. O emulare a comenzii ls este urmatorul


script shell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

razvan@anaconda:~/uso/scripting$ cat -n for_ls.bash


1 #!/bin/bash
2
3 n=0
4 for i in *; do
5
n=$(($n + 1))
6
if test -f "$i"; then
7
echo "f - $i"
8
elif test -d "$i"; then
9
echo "d - $i"
10
else
11
echo "u - $i"
12
fi
13 done
14 echo "total $n"

16
17
18
19
20
21
22
23
24
25
26
27

razvan@anaconda:~/uso/scripting$ bash for_ls.bash


f - do_until10.bash
f - echo.bash
f - for10.bash
f - for10_exp.bash
f - for10_seq.bash
f - for_ls.bash
f - here.bash
f - hw.bash
d - test_dir
f - while10.bash

398
28

INTRODUCERE N SISTEME DE OPERARE

total 10

Folosirea caracterului * (linia 4) nseamna expandarea cont, inutului directorului curent


care este parcursa cu ajutorul variabilei i. Variabila n (linia 3) este
ntr-o lista de intrari

(linia 5) folosind expandare aritmetica.

folosita pentru contorizarea numarului


de intrari
Se recomanda folosirea ghilimelelor n lucrul cu fis, ierele (linia 6) pentru a preveni aparit, ia
caracterelor cu rol special n shell (vezi sect, iunea 12.4.2).

Instruct, iunea while


Calculul sumei primelor 10 numere naturale folosind while se realizeaza cu scriptul de
mai jos:
1
2
3
4
5
6
7
8
9
10
11
12
13

razvan@anaconda:~/uso/scripting$ cat -n while10.bash


1 #!/bin/bash
2
3 i=1
4 n=10
5 sum=0
6
7 while test $i -le $n; do
8
sum=$(($sum + $i))
9
((i++))
10 done
11
12 echo "Suma este: $sum"

14
15
16

razvan@anaconda:~/uso/scripting$ bash while10.bash


Suma este: 55

Sintaxa while este


1
2
3

while conditie; do
actiuni
done

a
conditie urmeaza aceleas, i reguli ca n cazul if. Exemplul prezentat seaman
(liniile 2, 3, 4), condit, ie (linia 7), act, iuni (linia 8),
foarte mult cu un program C: init, ializari
incrementare (linia 9). Se poate observa ca incrementarea lui i (linia 9) s-a realizat prin

intermediul operatorului de expandare aritmetica.

Comanda while este folosita cu precadere


n momentul n care condit, ia este data de
valoarea de retur a unei alte comenzi (de multe ori read). O emulare a comenzii cat

cu opt, iunea -n este exemplificata n scriptul urmator:


1
2
3
4
5
6
7
8
9

razvan@anaconda:~/uso/scripting$ cat -n while_cat.bash


1 #!/bin/bash
2
3 i=1
4 cat for10.bash | while read a; do
5
echo -e "$i:\t$a"
6
i=$(($i + 1))
7 done
8

10
11
12

razvan@anaconda:~/uso/scripting$ bash while_cat.bash


1:
#!/bin/bash

CAPITOLUL 12. SHELL SCRIPTING


13
14
15
16
17
18
19

2:
3:
4:
5:
6:
7:
8:

399

sum=0
for i in 1 2 3 4 5 6 7 8 9 10; do
sum=$(($sum + $i))
done
echo "Suma este: $sum"

Se observa ca se cites, te n variabila a cte o linie din fis, iereul for10.bash pna la
sfrs, itul fis, ierului.

Instruct, iunea until


atoare

Comanda until este aseman


cu while, doar ca n acest caz condit, ia nu este
, ii nu vom insista;
cea de continuare a act, iunilor, ci este cea de oprire. Datorita similaritat
scriptul shell care calculeaza suma primelor 10 numere naturale este prezentat n
continuare:
1
2
3
4
5
6
7
8
9
10
11
12
13

razvan@anaconda:~/uso/scripting$ cat -n until10.bash


1 #!/bin/bash
2
3 i=1
4 sum=0
5 n=10
6
7 until test $i -gt $n; do
8
sum=$(($sum + $i))
9
i=$(($i + 1))
10 done
11
12 echo "Suma este: $sum"

14
15
16

razvan@anaconda:~/uso/scripting$ bash until10.bash


Suma este: 55

Exemplele prezentate n sect, iunea 12.4.2 sunt pur academice. Nu exista niciun motiv
ntemeiat pentru a calcula suma numerelor naturale sau a emula comenzi existente
folosind un script shell. Rolul unui script shell este acela de a folosi cele mai potrivite

utilitare existente pentru a rezolva o problema.

12.5

Filtre de text

Utilitarele de filtrare a textului primesc la intrare un fis, ier text s, i ofera la ies, ire o forma
prelucrata a acestuia. Prelucrarea poate impune schimbarea ordinii elementelor, select, ia
anumitor elemente (linii, coloane), substitut, ia unor elemente (linii, cuvinte, caractere),

de linie etc.) s, i alte operat, ii. Aceste utilitare sunt, de


adaugarea
de noi elemente (numar
obicei, folosite n tandem cu instruct, iuni de decizie sau de cicluri shell pentru obt, inerea
unor informat, ii ce pot fi utilizate ulterior.

400

INTRODUCERE N SISTEME DE OPERARE

12.5.1

cat, tac, nl

Utilitarul principal n prelucrarea de s, iruri este cat. cat este folosit pentru afis, area unui
, uire de comenzi care
fis, ier s, i (de cele mai multe ori) este prima comanda dintr-o nlant
folosesc |. Dupa cum s-a precizat n sect, iunile anterioare, o opt, iune utila a cat este -n

care afis, eaza s, i numarul


liniei:
1
2
3
4
5
6
7
8
9

razvan@anaconda:~/uso/scripting$ cat -n nume.txt


1 sorin
2 stefania
3 mihaela
4 florin
5 codrin
6 lucian
7 razvan
8 tavi

Utilitarul tac (cat inversat) este folosit pentru afis, area unui fis, ier cu liniile inversate
(prima linie ultima):
1
2
3
4
5
6
7
8
9

razvan@anaconda:~/uso/scripting$ tac nume.txt


tavi
razvan
lucian
codrin
florin
mihaela
stefania
sorin

Utilitarul nl este folosit pentru a afis, a liniile mpreuna cu numarul


lor:
1
2

razvan@anaconda:~/uso/scripting$ nl for10_exp.bash
1 #!/bin/bash

3
4
5
6
7

2
3
4
5

sum=0
for ((i = 1; i <= 100; i++)); do
sum=$(($sum + $i))
done

echo "Suma este: $sum"

8
9

Deosebirea fat, a de cat -n este faptul ca nl nu considera liniile goale. De asemenea,


, esc aria de
nl are opt, iuni pentru paginare, considerare de sect, iuni etc. care depas
, i.
cuprindere a acestei cart

12.5.2

sort, uniq

Comanda sort este folosita pentru sortarea liniilor primite la intrare. n exemplul de mai
jos, se realizeaza sortarea liniilor din fis, ierul nume.txt:
1
2
3
4
5

razvan@anaconda:~/uso/scripting$ cat nume.txt


sorin
stefania
mihaela
florin

CAPITOLUL 12. SHELL SCRIPTING


6
7
8
9

401

codrin
lucian
razvan
tavi

10
11
12
13
14
15
16
17
18
19

razvan@anaconda:~/uso/scripting$ sort nume.txt


codrin
florin
lucian
mihaela
razvan
sorin
stefania
tavi

Se poate ntmpla ca un nume sa apara de doua ori s, i sa avem nevoie doar de o singura
aparit, ie n ies, ire. n aceasta situat, ie trebuie folosit utilitarul uniq sau opt, iunea -u la sort:
1
2
3
4
5
6
7
8
9

razvan@anaconda:~/uso/scripting$ sort nume2.txt


alex
alina
alina
cristi
cristi
cristi
razvan
razvan

10
11
12
13
14
15

razvan@anaconda:~/uso/scripting$ sort nume2.txt | uniq


alex
alina
cristi
razvan

16
17
18
19
20
21

razvan@anaconda:~/uso/scripting$ sort -u nume2.txt


alex
alina
cristi
razvan

Un exemplu util a fost prezentat n sect, iunea 12.4.2. n acel exemplu se dorea aflarea

Comanda utilizata
numarului
de utilizatori care s-au autentificat n sistem ntr-o zi data.
a fost:
1
2

razvan@anaconda:~/uso/scripting$ last -30 | grep Mon | cut -d -f1 |


sort | uniq | wc -l
9

Opt, iuni utile sort Dintre opt, iunile utile ale comenzii sort amintim:

-u: elimina duplicatele dupa sortare;

-r: sortare inversa (n ordine descrescatoare);

-t:

specificarea separatorului folosit pentru sortare; implicit, sortarea se


realizeaza dupa primul cmp;

implicit sortarea este alfanumerica,


dupa cum se poate
-n: sortare numerica;
vedea n exemplul de mai jos:

402

1
2
3
4
5
6
7
8
9
10

INTRODUCERE N SISTEME DE OPERARE

razvan@anaconda:~/uso/scripting$ sort numere.txt


-3
10
100
12
15
2101
28
492
5

11
12
13
14
15
16
17
18
19
20
21

razvan@anaconda:~/uso/scripting$ sort -n numere.txt


-3
5
10
12
15
28
100
492
2101

Sortare avansata Uneori poate aparea


situat, ia n care dorim sortarea dupa o coloana

a fis, ierului de intrare. Presupunem ca avem o miniagenda cu persoane n care intrarile


sunt n forma prenume, nume, num
ar de telefon, adres
a de e-mail s, i
Pentru aceasta vom folosi
dorim sortarea dupa nume (adica dupa a doua coloana).
comanda:
1
2
3
4
5

razvan@anaconda:~/uso/scripting$ cat nume3.txt


Adrian,Munteanu,0711 111 111,am@ex.com
Ilinca,Zafiu,0711 111 112,iz@ex.com
Andreea,Popa,0711 111 113,ap@ex.com
Dan,Badea,0711 111 114,db@ex.com

6
7
8
9
10
11

razvan@anaconda:~/uso/scripting$ sort -t , -k 2,2 nume3.txt


Dan,Badea,0711 111 114,db@ex.com
Adrian,Munteanu,0711 111 111,am@ex.com
Andreea,Popa,0711 111 113,ap@ex.com
Ilinca,Zafiu,0711 111 112,iz@ex.com

Am folosit argumentul -t pentru a specifica virgula ca separator. Pentru sortarea dupa


o cheie specifica se foloses, te argumentul -k. Acesta specifica de la ce cmp se ncepe
sortarea (aici este vorba de al doilea cmp) s, i cu ce cmp se termina (n cazul de fat, a
tot 2: -k 2,2). n caz de egalitate, se poate alege un nou cmp de sortare prin
specificarea unui nou argument -k.

12.5.3

head, tail

Comenzile head s, i tail sunt utile pentru a ret, ine primele sau ultimele linii dintr-un fis, ier
primit la intrare. Implicit se ret, in primele sau ultimele 10 linii. Exemple de utilizare sunt
prezentate n continuare:
1

razvan@anaconda:~/uso/scripting$ head /etc/passwd

CAPITOLUL 12. SHELL SCRIPTING

403

2
3

razvan@anaconda:~/uso/scripting$ tail /etc/passwd

4
5

razvan@anaconda:~/uso/scripting$ head -n 20 /etc/passwd

6
7

razvan@anaconda:~/uso/scripting$ tail -n 20 /etc/passwd

Comenzile specificate afis, eaza respectiv: primele 10 linii din fis, ierul /etc/passwd,
ultimele 10 linii, primele 20 de linii, ultimele 20 de linii.
Comanda tail este utila pentru inspect, ia jurnalelor (log-urilor). Jurnalele sunt de
obicei fis, iere de mari dimensiuni s, i, pentru acestea, de cele mai multe ori este

suficienta vizualizarea ultimelor intrari.


O opt, iune utila a comenzii tail este -f. Aceasta permite vizualizarea cont, inutului unui
fis, ier n timp real n sensul ca as, teapta scrierea unor noi linii n fis, ier s, i afis, area acestora
a ce acestea sunt adaugate:

pe masur
1

root@anaconda:~# tail -f /var/log/apache/access.log

comenzii se ncheie prin apasarea

ntreruperea rularii
CTRL-C (transmiterea semnalului
SIGINT).

12.5.4

cut

Comanda cut este utila pentru a extrage coloane dintr-un fis, ier format corespunzator.
Spre exemplu, daca folosim fis, ierul prezentat n sect, iunea anterioara s, i vrem afis, area
prenumelui s, i a adresei de e-mail vom folosi comanda:
1
2
3
4
5

razvan@anaconda:~/uso/scripting$ cut -d , -f 1,4 < nume3.txt


Adrian,am@ex.com
Ilinca,iz@ex.com
Andreea,ap@ex.com
Dan,db@ex.com

Cele doua opt, iuni cele mai importante ale comenzii cut sunt -d pentru a specifica
delimitatorul s, i -f pentru a preciza cmpurile (coloanele) care se doresc extrase. n
exemplul de mai sus, separatorul a fost virgula s, i s-au ret, inut cmpurile (coloanele) 1 s, i

4 corespunzatoare
prenumelui s, i adresei de e-mail.
Daca se dores, te extragerea numelui de utilizator s, i al directorului de baza pentru

utilizatorii care au directorul de baza n /home, vom folosi urmatoarea


comanda:
1
2
3
4
5
6
7
8

razvan@anaconda:~/uso/scripting$ cat /etc/passwd | grep /home | cut -d


: -f1,6
ftp:/home/ftp
george:/home/students/george
andreic:/home/students/andreic
iepurasu:/home/students/iepurasu
valentin:/home/students/valentin
dhartescu:/home/students/dhartescu
ciconaru:/home/students/ciconaru

Comanda de mai sus extrage utilizatorii care au directorul de baza n /home (cat
/etc/passwd | grep /home), dupa care extrage numele de utilizator s, i directorul
de baza asociat (cut -d : -f 1,6). Separatorul de cmp n /etc/passwd

404

INTRODUCERE N SISTEME DE OPERARE

este :, iar indexurile de cmp corespunzatoare


numelui de utilizator s, i directorului de

baza sunt 1 s, i 6.

12.5.5

tr

Utilitarul tr (transliterate) este folosit pentru translatarea la nivel de caracter a


informat, iilor de la intrare. Act, iuni posibile care pot fi efectuate cu ajutorul comenzii tr
sunt:

translatarea caracterelor,
eliminarea caracterelor care se repeta (squeeze),
s, tergerea de caractere.
Exemple de translatarea caracterelor sunt:
1
2

razvan@anaconda:~/uso/scripting$ tr a b <<<"acadaeaf"
bcbdbebf

3
4
5

razvan@anaconda:~/uso/scripting$ tr acd xyz <<<"acadaeaf"


xyxzxexf

6
7
8

razvan@anaconda:~/uso/scripting$ tr a-z A-Z <<<"acadaeaf"


ACADAEAF

9
10
11

razvan@anaconda:~/uso/scripting$ tr [:lower:] [:upper:] <<<"acadaeaf"


ACADAEAF

n primul exemplu se translateaza caracterul a n caracterul b. Sirul

este transmis sub


forma de here string. n cel de-al doilea exemplu, avem un set de intrare (acd) s, i un set
de ies, ire (xyz). Translatarea se face ntre primul element din setul de intrare s, i primul
element din setul de ies, ire, al doilea element din setul de intrare s, i al doilea element din
setul de ies, ire etc. Al treilea s, i al patrulea exemplu translateaza literele mari n litere
mici. a-z simbolizeaza literele de la a la z. De asemenea, expresiile [:lower:] s, i
respectiv, literele mici s, i literele mari din alfabet. Utilitarul tr
[:upper:] reprezinta,
foloses, te mai multe astfel de expresii. Mai multe detalii putet, i afla din pagina de manual
sau info (man tr, info coreutils).

Exemple de eliminare a caracterelor care se repeta sunt urmatoarele:


1
2

razvan@anaconda:~/uso/scripting$ tr -s <<< "a


a b c

c"

razvan@anaconda:~/uso/scripting$ tr -s a-z A-Z <<< "aa


A
B
C

bb

3
4
5

cc"

n cazul primului exemplu, caracterul spat, iu este eliminat pna la o singura aparit, ie.
Opt, iunea -s este folosita pentru a specifica act, iunea de eliminare a duplicatelor unui
caracter (squeeze).
n cel de-al doilea exemplu se foloses, te simultan operat, iunea de translatare s, i de
eliminare de duplicate pe s, irul de intrare aa bb cc. Rezultatul este transformarea
literelor mici n litere mari simultan cu eliminarea duplicatelor acestora.
Stergerea

caracterelor se face cu ajutorul opt, iunii -d:

CAPITOLUL 12. SHELL SCRIPTING

1
2

405

razvan@anaconda:~/uso/scripting$ tr -d a <<< abcdcba


bcdcb

3
4
5

razvan@anaconda:~/uso/scripting$ tr -ds a bcd <<< aabbccddccbbaa


bcdcb

Opt, iunea -d primes, te un set de caractere care sunt eliminate. Opt, iunea -d poate fi
completata de opt, iunea -s. n cel de-al doilea exemplu se s, terge caracterul a din s, irul
de intrare iar celorlalte caractere le sunt eliminate duplicatele.

12.5.6

wc

Utilitarul wc (word count) permite contorizarea numarului


de linii, de caractere sau de
a opt, iuni, wc afis, eaza att numarul

cuvinte dintr-un fis, ier text. La o folosire far


de linii ct

s, i numarul
de cuvinte s, i caractere:
1
2

razvan@anaconda:~/uso/scripting$ wc < for10.bash


8 24 102

Pentru afis, area numai a numarului


de linii, de cuvinte sau de caractere, se folosesc,
respectiv, opt, iunile -l, -w, -c:
1
2

razvan@anaconda:~/uso/scripting$ wc -l < for10.bash


8

3
4
5

razvan@anaconda:~/uso/scripting$ wc -w < for10.bash


24

6
7
8

razvan@anaconda:~/uso/scripting$ wc -c < for10.bash


102

12.5.7

grep

Utilitarul grep s, i variantele sale (egrep, fgrep) sunt utilitarele de baza n prelucrarea
fis, ierelor text. Acest utilitar permite selectarea anumitor linii dintr-un fis, ier text pe baza
unei expresii regulate transmise ca argument. grep primes, te ca parametru s, irul de

cautare
s, i, eventual, fis, ierul n care se face cautarea.
Daca dorim sa vedem informat, ii
despre autentificarea utilizatorului adrian n sistem vom folosi comanda:
1
2
3
4

razvan@anaconda:~/uso/scripting$ last | grep adrian


adrian
pts/2
92.80.182.158
Sun Sep 2 22:30 - 22:38
adrian
pts/2
92.80.149.10
Sun Sep 2 09:10 - 09:29
adrian
pts/0
92.80.149.10
Sun Sep 2 09:06 - 09:29

(00:07)
(00:18)
(00:23)

informat, ii despre utilizatorii din sistem al caror

Daca dorim sa afis, am


nume ncepe cu
litera a vom folosi comanda:
1
2
3
4
5
6

razvan@anaconda:~/uso/scripting$ cat /etc/passwd | grep ^a


alexpoke:x:1003:1003:Poke Alexandu,,,,A & C:/home/alexpoke:/bin/bash
adrian:x:1009:1009:Adrian Nistor,,,:/home/adrian:/bin/bash
amihaiuc:x:1011:1011:Alex Mihaiuc,,,:/home/amihaiuc:/bin/bash
alina:x:1016:1016:Alina Deaconescu,,,:/home/alina:/bin/bash
andrewbwm:x:1031:1026:Andrei Buhaiu:/home/students/andrewbwm:/bin/bash

406
7
8

INTRODUCERE N SISTEME DE OPERARE

alexef:x:1032:1026:Alex Eftimie:/home/students/alexef:/bin/bash
andreic:x:1045:1026:Andrei Cibotaru:/home/students/andreic:/bin/bash

pentru obt, inerea utilizatorilor al caror

n cazul de fat, a,
nume ncepe cu litera a se
foloses, te expresia regulata a. Utilizarea ei va duce la selectarea acelor linii care ncep
cu litera a (caracterul este special s, i simbolizeaza nceput de linie). Mai multe detalii

despre expresii regulate grep se gasesc


mai jos:

grep este utilizabil cu foarte multe opt, iuni. O parte din cele mai importante sunt
exemplificate n continuare pentru fis, ierul grep_test.txt:
1
2
3
4
5
6

razvan@anaconda:~/uso/scripting$ cat grep_test.txt


alfa beta
AlFa BeTa
Beta gamma
beta delta
deltadd epsilon

opt, iunea -i ignora literele mari (ignore case):


1
2
3

razvan@anaconda:~/uso/scripting$ grep -i "alfa" < grep_test.txt


alfa beta
AlFa BeTa

opt, iunea -v inverseaza cautarea


(afis, eaza liniile care nu cont, in expresia de

cautare):
1
2
3
4
5

razvan@anaconda:~/uso/scripting$ grep -v "alfa" < grep_test.txt


AlFa BeTa
Beta gamma
beta delta
deltadd epsilon

6
7
8
9
10

razvan@anaconda:~/uso/scripting$ grep -v -i "alfa" < grep_test.txt


Beta gamma
beta delta
deltadd epsilon

opt, iunea -n afis, eaza numarul


liniei:
1
2

razvan@anaconda:~/uso/scripting$ grep -n "alfa" < grep_test.txt


1:alfa beta

opt, iunea -w este folosita pentru cautarea


unui cuvnt ntreg:
1
2

razvan@anaconda:~/uso/scripting$ grep -w "delta" < grep_test.txt


beta delta

opt, iunea -r face cautare


recursiva n structura de directoare:
1

razvan@anaconda:~/uso/scripting$ grep -r "for" .

2
3
4
5
6
7
8

./for_ls.bash:for i in *; do
./while_cat.bash:cat for10.bash | while
./for10.bash:for i in 1 2 3 4 5 6 7 8 9
./for10_seq.bash:for i in $(seq 1 100);
./for10_exp.bash:for ((i = 1; i <= 100;
./if_user.bash: echo "Bow before me for

read a; do
10; do
do
i++)); do
I am root."

acel
Rezultatul dat de utilizarea acestei opt, iuni prezinta fis, ierele n care s-a gasit

s, ir/expresie regulata s, i linia completa/liniile


complete din fis, iere.

CAPITOLUL 12. SHELL SCRIPTING

407

Expresii regulate grep

Dupa cum s-a observat, grep foloses, te un s, ir de cautare


care poate avea forma unei
expresii regulate.
O expresie regulata este un s, ir de caractere utilizat pentru a se potrivi cu un alte
s, iruri de caractere conform unor reguli de sintaxa bine precizate. O expresie regulata

cont, ine caractere simple s, i caractere cu semnificat, ie speciala.

O parte din caracterele/gruparile


de caractere cu semnificat, ie speciala sunt prezentate
n continuare:

Caracterele [] sunt folosite pentru a defini un set de caractere de potrivit; exemple:


[abcd] nseamna potrivire cu oricare din caracterele a, b, c, d;

[a-z] nseamna potrivire cu oricare minuscula;


[0-9a-zA-Z] nseamna potrivire cu orice caracter alfanumeric;
[A-Z] nseamna potrivire cu orice caracter mai put, in majusculele.

Caracterul . nseamna orice caracter;


Caracterul pozit, ionat n afara unui set de caractere nseamna potrivire cu
nceputul liniei;

Caracterul $ nseamna potrivire cu sfrs, itul liniei;


Simbolurile \<, respectiv \> sunt folosite pentru a se potrivi cu s, irul vid de la
nceput s, i sfrs, it de cuvnt;

Simbolul ?

nseamna potrivire de cel mult o data a caracterului/grupului de


caractere anterioare;

Simbolul * nseamna potrivire de zero sau mai multe ori a caracterului/grupului de


caractere anterioare;

Simbolul + nseamna potrivire de o data sau mai multe ori a caracterului/grupului


de caractere anterioare;

{n} nseamna potrivire de n ori;


{n,} nseamna potrivire de cel put, in n ori;
{n,m} nseamna potrivire de cel put, in n ori s, i cel mult m ori.
Caracterele/grupurile de caractere prezentate mai sus pot fi concatenate pentru
generarea unei expresii regulate complexe.
, i n
Informat, ii complete despre comenzile de filtrare de text folosite n shell scripting gasit
paginile info asociate (info coreutils).

408

12.5.8

INTRODUCERE N SISTEME DE OPERARE

sed

textuale unui flux de


Utilitarul sed (stream editor) este folosit pentru a aplica transformari
dupa care
date. n mod implicit, cites, te de la intrare o linie, aplica operat, ia specificata,

afis, eaza linia modificata.

sed poate fi considerat un editor non-interactiv. Acesta aplica un set de operat, ii fiecarei
linii din fis, ierul de la intrare. ntruct n memorie se ret, ine o singura linie, prelucrarea se
arbitrar de linii.
poate face pe un fis, ier cu un numar

Pentru a exemplifica modul de utilizare a sed vom folosi urmatorul


fis, ier de lucru:
1
2
3
4
5
6
7

razvan@anaconda:~/uso/scripting$ cat sed_ex.txt


Andreea Popescu
Alin Ionescu
Mihai Francu
Calin Antonescu
Silvia Asavei
Doina Ignat

Sintaxa de rulare
Un exemplu obis, nuit de rulare a sed este nlocuirea unui text cu un altul:
1
2
3
4

razvan@anaconda:~/uso/scripting$ sed s/Alin/ALIN/ sed_ex.txt


Andreea Popescu
ALIN Ionescu
[...]

sintaxa de rulare sed este:


Dupa cum se observa,
1

sed comenzi fisier_intrare

n cazul n care fis, ierul de intrare lipses, te, se foloses, te intrare standard. De cele mai
multe ori, comenzile sunt date ntre caractere apostrof pentru a evita folosirea
caracterelor speciale shell.
n mod implicit, sed afis, eaza liniile de la intrare la ies, ire. Pentru a dezactiva acest lucru
se foloses, te opt, iunea -n.

Sintaxa comenzi sed


Dupa cum s-a putut observa s, i la exemplele anterioare, o comanda sed are sintaxa
[adres
a][functie][argumente].
Adresa defines, te spat, iul din fis, ier la care se aplica funct, ia. Adresa poate fi o linie a
fis, ierului, un spat, iu de linii sau o expresie ce identifica linia. n acest fel:

1 s/a/A/ nlocuies, te litera a cu A n prima linie a fis, ierului;


1,10 s/a/A/ nlocuies, te litera a cu A n primele zece linii ale fis, ierului;
100,$ s/a/A/ nlocuies, te litera a cu A de la linia 100 pna la sfrs, itul fis, ierului;
/alfa/ s/a/A/ nlocuies, te litera a cu A numai n liniile n care apare s, irul
alfa.

CAPITOLUL 12. SHELL SCRIPTING

409

Funct, ii sed
Funct, iile cele mai utile sed sunt prezentate n continuare.
Funct, ia de substitut, ie (s) a lui sed este s s, i a fost folosita n exemplele anterioare.
Aceasta foloses, te ca argumente s, irul de nlocuit s, i cel nlocuitor. Separatorul folosit
implicit este / (slash), dar se poate folosi oricare altul:
1

s/sir_de_inlocuit/sir_inlocuitor/optiuni

Opt, iuni utile ale funct, iei de substitut, ie sunt:

g (global) nlocuies, te toate aparit, iile s, irului de nlocuit


p (print) afis, eaza linia la ies, ire; folosit, de obicei, n conjunct, ie cu opt, iunea -n
pentru sed
w (write) scrie linia ntr-un fis, ier primit ca parametru
Funct, ia quit (q) opres, te citirea de la intrare a fis, ierului. Exemple de folosire sunt afis, area
primelor N linii din fis, ierul de la intrare:
1
2
3

razvan@anaconda:~/uso/scripting$ sed 2q sed_ex.txt


Andreea Popescu
Alin Ionescu

sau afis, area primelor linii pna la gasirea


s, irului Calin:
1
2
3
4
5

razvan@anaconda:~/uso/scripting$ sed /Calin/q sed_ex.txt


Andreea Popescu
Alin Ionescu
Mihai Francu
Calin Antonescu

respectiv s, terg linia de la intrare la ies, ire.


Funct, iile print s, i delete (p s, i d) afis, eaza,

Expresii regulate n sed


Funct, iile sed pot avea argumente. ntruct sed lucreaza pe intrare n format text,
argumentele pot fi exprimate ca expresii regulate. Acestea sunt similare cu expresiile
n
regulate grep (vezi sect, iunea 12.5.7). Mai multe detalii despre acestea putet, i gasi
pagina info sed, folosind comanda:
1

info sed "Regular Expressions"

Exemple
cteva exemple de utilizare a comenzii sed:
Mai jos se pot regasi

translatarea unui fis, ier n format DOS (CR/LF) n format Unix:


1

sed s/.$//

Se observa ca se elimina ultimul caracter de la sfrs, itul liniei (n cazul de fat, a


caracterul \r Carriage Return)

410

INTRODUCERE N SISTEME DE OPERARE

translatarea unui fis, ier n format Unix n format DOS:


1

sed s/$/\r/

Se adauga la sfrs, itul liniei caracterul \r.

afis, area tuturor liniilor mai put, in ultimele 100:


1

sed 1,2800d

s, tergerea spat, iilor albe de la nceputul liniilor unui fis, ier:


1

sed s/[ \t]*//

s, tergerea spat, iilor albe de la sfrs, itul liniilor de fis, ier:


1

sed s/[ \t]*$//

s, tergerea liniilor goale:


1

sed s/^[ \t]*$//

afis, area liniilor care cont, in un s, ir de cautare


(emulare grep):
1

sed -n /regex/p

afis, area ntr-un fis, ier a liniilor care cont, in un anumit s, ir:
1

sed /regex/w out.txt

substitut, ia de coloane; n fis, ierul de exemplu vrem sa nlocuim numele cu


prenumele:
1
2
3
4
5
6
7

razvan@anaconda:~/uso/scripting$ sed s/\([a-zA-Z]*\) \([a-zA-Z]*\)


/\2 \1/ sed_ex.txt
Popescu Andreea
Ionescu Alin
Francu Mihai
Antonescu Calin
Asavei Silvia
Ignat Doina

n exemplul de mai sus se foloses, te construct, ia \(regex\) pentru a stoca


valoarea expresiei regulate. Aceste valori sunt folosite, respectiv, cu ajutorul
construct, iilor \1, \2, \3 etc. n situat, ia de mai sus, numele este ret, inut n
construct, ia \2 iar prenumele n \1. Afis, area se face n formatul nume prenume.

12.5.9

awk

awk este un utilitar s, i un limbaj de programare folosit pentru prelucrarea textului pe


sisteme Unix. Exista mai multe versiuni de awk, versiunea cea mai ntlnita pe sisteme
atoare

Linux fiind implementarea GNU, gawk1 . Limbajul awk are o sintaxa aseman
cu
limbajul C care permite operat, ii avasate pentru formatarea fis, ierului text. Denumirea awk
provine de la init, ialele celor care au proiectat limbajul: Alfred V. Aho, Peter J. Weinberger
s, i Brian W. Kernighan.
1

http://www.gnu.org/software/gawk/

CAPITOLUL 12. SHELL SCRIPTING

411

awk poate fi folosit ca o versiune avansata a utilitarului cut.


n forma sa cea mai simpla,

Daca, spre exemplu, se dores, te doar extragerea numelui de utilizator s, i a directorului

home folosind fis, ierul /etc/passwd urmatoarele


doua comenzi sunt echivalente:
1

razvan@valhalla:~/carte-uso.git$ cut -d : -f 1,6 /etc/passwd

2
3

razvan@valhalla:~/carte-uso.git$ awk -F : { print $1,":",$6;} /etc/


passwd

Comenzile de mai sus ret, in primul s, i al s, aselea cmp al fiecarei


linii din fis, ierul /etc/
passwd folosind separatorul :. Opt, iunea -F a awk precizeaza separatorul folosit.
Argumentele $1, respectiv $6 sunt folosite pentru extrage primul s, i al s, as, elea cmp.
ies, irii. n vreme ce
Un avantaj important al awk fat, a de cut este posibilitatea formatarii
cut selecteaza anumite coloane, awk permite s, i prelucrarea ies, irii selectate. Astfel,
daca dorim ca informat, ii afis, ate sa fie ncadrate de caracterul | (pipe), se va folosi

urmatoarea
comanda:
1
2
3
4
5
6
7
8
9

razvan@valhalla:~/carte-uso.git$ awk -F : { printf "|%-15s|%-25s|\n",


$1, $6;} /etc/passwd
|root
|/root
|
|daemon
|/usr/sbin
|
|bin
|/bin
|
|sys
|/dev
|
|sync
|/bin
|
|games
|/usr/games
|
|man
|/var/cache/man
|
[...]

Instruct, iunea printf folosita n exemplul de mai sus are o sintaxa similara celei din C,
cu absent, a parantezelor.
Sintaxa awk este similara sintaxei sed:
1

awk [options] program instructions [input file]

n general, programul awk este aplicat fiecarei


linii citita de la intrare. awk permite
folosirea clauzelor speciale BEGIN s, i END care permit aplicarea instruct, iunilor asociate

doar la nceputul s, i sfrs, itul prelucrarii.


Astfel, pentru a ncadra ies, irea de mai sus, se
foloses, te o comanda ca cea de mai jos. Programul se poate introduce pe mai multe
linii, pna la nchiderea acestuia folosind caracterul (apostrof):
1
2
3
4
5
6
7
8
9
10
11
12
13
14

razvan@valhalla:~/carte-uso.git$ awk -F :
> BEGIN { printf "+---------------+-------------------------+\n"; }
>
{ printf "|%-15s|%-25s|\n", $1, $6; }
> END
{ printf "+---------------+-------------------------+\n"; }
> /etc/passwd
+---------------+-------------------------+
|root
|/root
|
|daemon
|/usr/sbin
|
|bin
|/bin
|
|sys
|/dev
|
[...]
|pulse
|/var/run/pulse
|
|saned
|/home/saned
|
+---------------+-------------------------+

412

INTRODUCERE N SISTEME DE OPERARE

awk foloses, te instruct, iuni s, i comenzi similare limbajului C. Daca se dores, te afis, area din
5 n 5 a utilizatorilor sistemului s, i a directorului home asociat se poate folosi o comanda
de forma:
1
2
3
4
5
6
7
8
9
10
11
12

razvan@valhalla:~/school/2009-2010/uso/carte-uso.git$ awk -F : -f
print_users.awk /etc/passwd
+---------------+-------------------------+
|root
|/root
|
|games
|/usr/games
|
|uucp
|/var/spool/uucp
|
|irc
|/var/run/ircd
|
|messagebus
|/var/run/dbus
|
|gdm
|/var/lib/gdm
|
|mpd
|/var/lib/mpd
|
|postfix
|/var/spool/postfix
|
|pulse
|/var/run/pulse
|
+---------------+-------------------------+

Opt, iunea -f permite selectarea fis, ierul care sa cont, ina programul awk, prezentat n

listingul 12.5.9. Variabila current_users ret, ine numarul


de utilizatori curent. Este

init, ializata cu 0 la nceputul prelucrarii


(n cadrul blocului BEGIN) s, i apoi este
liniilor. Se foloses, te instruct, iunea if pentru a
incrementata pe parcursul prelucrarii
selecta doar anumit, i utilizatori.
1

#!/usr/bin/awk -f

2
3

BEGIN {
current_users = 0;
printf "+---------------+-------------------------+\n";

4
5
6
7

}
{
current_users++;
if (current_users % 5 == 1)
printf "|%-15s|%-25s|\n", $1, $6;

8
9
10
11
12

}
END {
printf "+---------------+-------------------------+\n";

13
14

Listing 12.1: Afis, are utilizatorilor din 5 n 5


awk permite folosirea expresiilor regulate pentru selectarea doar anumitor linii. Astfel,
daca se dores, te afis, area doar acelor utilizatori care au directorul home n /home se
foloses, te un program ca cel prezentat n listingul 12.2. Expresiile regulate se scriu ntre
acestui program este:
caractere / (slash) similar utilitarului sed. Rezultatul rularii

razvan@valhalla:~/carte-uso.git$ awk -F : -f print-home-users.awk /etc/


passwd
+---------------+-------------------------+
|razvan
|/home/razvan
|
|festival
|/home/festival
|
|ntp
|/home/ntp
|
|alina
|/home/alina
|
|ftp
|/home/ftp
|
|saned
|/home/saned
|
+---------------+-------------------------+

#!/usr/bin/awk -f

1
2
3
4
5
6
7
8

CAPITOLUL 12. SHELL SCRIPTING


3

BEGIN {

printf "+---------------+-------------------------+\n";
}
/\/home/ {
printf "|%-15s|%-25s|\n", $1, $6;
}
END {
printf "+---------------+-------------------------+\n";
}

5
6
7
8
9
10
11

413

Listing 12.2: Afis, are utilizatori /home

n listingul 12.2 se verifica daca fiecare linie cont, ine s, irul /home. De fapt, funct, ionarea
corecta a programului se bazeaza doar pe verificarea faptului ca a s, asea coloana cont, ine
s, irul /home. Acest lucru se poate realiza us, or n awk, dupa cum este prezentat n
listingul 12.8.1. Construct, ia $6 ~ /^\/home/ verifica daca al s, aselea cmp al unei linii
ncepe cu s, irul /home.
1

#!/usr/bin/awk -f

2
3

BEGIN {

printf
}
$6 ~ /^\/home/
printf
}
END {
printf
}

5
6
7
8
9
10
11

"+---------------+-------------------------+\n";
{
"|%-15s|%-25s|\n", $1, $6;

"+---------------+-------------------------+\n";

Listing 12.3: Afis, are utilizatori /home folosind expresii regulate

Un alt avantaj important al comenzii awk fat, a de comanda cut este folosirea unei
expresii regulate pe post de separator. Opt, iunea -F a awk primes, te ca argument o

expresie regulata care este folosita pentru a separa cmpurile unei linii. Urmatoarele
doua comenzi, pentru determinarea adresei hardware a interfet, ei eth0 sunt echivalente:
1
2

razvan@valhalla:~/carte-uso.git$ /sbin/ifconfig eth0 | head -1 | tr -s


| cut -d -f 5
00:1d:09:b4:0c:26

3
4
5
6

razvan@valhalla:~/carte-uso.git$ /sbin/ifconfig eth0 | head -1 | awk -F


[
\t]+ { print \$5; }
00:1d:09:b4:0c:26

Expresia regulata [ \t]+ specifica faptul ca orice set de spat, ii albe (caractere blank
sau TAB) va fi folosit ca separator.
, i. Mai multe detalii despre acestea s, i
awk ofera un set mult mai amplu de funct, ionalitat
, i n manualul Gawk1 .
despre cazuri posibile de utilizare gasit
1

http://www.gnu.org/software/gawk/manual/

414

INTRODUCERE N SISTEME DE OPERARE

12.6

Comenzi de lucru cu fis, iere

Comenzile de lucru cu fis, iere sunt comenzi care permit cautarea


n sistemul de fis, iere

s, i executarea unor act, iuni pentru fis, ierele cautate.


Comenzile prezentate n aceasta
sect, iune sunt xargs, locate s, i find.

12.6.1

xargs

Comanda xargs permite transmiterea de argumente unei alte comenzi, argumente ce


pot fi trimise de la intrarea standard. Spre exemplu, daca avem un fis, ier ce cont, ine o
lista fis, iere pe care dorim sa le s, tergem (cte unul pe linie), vom folosi comanda: xargs
rm < file.txt ca n exemplul de mai jos
1
2
3
4

razvan@anaconda:~/uso/scripting$ cat file.txt


tmp1.txt
tmp2.txt
tmp3.txt

5
6
7
8

razvan@anaconda:~/uso/scripting$ ls tmp*
tmp1.txt tmp2.txt tmp3.txt
razvan@anaconda:~/uso/scripting$ xargs rm < file.txt

9
10
11

razvan@anaconda:~/uso/scripting$ ls tmp*
ls: tmp*: No such file or directory

n exemplu, fis, ierul file cont, inea trei nume de fis, ier: tmp1.txt, tmp2.txt,
tmp3.txt. Folosind xargs se invoca rm. Argumentele pentru rm sunt citite de la
intrarea standard n care a fost redirectat fis, ierul file.txt. Rezultatul este s, tergerea
fis, ierelor tmp1.txt, tmp2.txt s, i tmp3.txt precizate n fis, ierul file.txt.
Daca un utilizator dores, te afis, area fis, ierelor ce cont, in s, irul for va utiliza comanda:
1

ubuntu@ubuntu:~$ grep -l for *

sau
1

ubuntu@ubuntu:~$ ls | xargs grep -l for

La fel, daca se dores, te generarea unei liste a utilizatorilor n sistem se poate utiliza
comanda:
1
2

razvan@anaconda:~/uso/scripting$ cut -d : -f 1 < /etc/passwd | sort |


tr -s \n
Debian-exim adrian alexef alexpoke alina amihaiuc [...]

sau
1
2

razvan@anaconda:~/uso/scripting$ cut -d : -f 1 < /etc/passwd | sort |


xargs echo
Debian-exim adrian alexef alexpoke alina amihaiuc [...]

Opt, iuni utile pentru xargs sunt:

-d este folosita pentru a specifica delimitatorul de parametri; implicit acesta este


orice caracter alb (whitespace); n exemplul de mai jos se s, terg fis, ierele
tmp1.txt, tmp2.txt s, i tmp3.txt:

CAPITOLUL 12. SHELL SCRIPTING

1
2

415

razvan@anaconda:~/uso/scripting$ cat file2.txt


tmp1.txt,tmp2.txt,tmp3.txt

3
4
5

razvan@anaconda:~/uso/scripting$ ls tmp*
tmp1.txt tmp2.txt tmp3.txt

6
7
8

razvan@anaconda:~/uso/scripting$ xargs -d , rm < file2.txt


rm: cannot remove \n: No such file or directory

Ultima linie apare ca urmare a faptului ca se interpreteaza caracterul newline (\n)


ca un argument posibil.

-0 impune folosirea ca delimitator de argument a nul-terminatorului de sir (\0);


acest lucru este util n momentul n care parametrii cont, in caractere speciale
(blank, backslash etc.); este folosit, de obicei, mpreuna cu argumentul -print0
la find, precum este descris n sect, iunea 12.6.3.

-I permite folosirea unui s, ir care va fi substituit pe parcursul comenzii cu

argumentul primit la intrare; n urmatorul


exemplu, fis, ierele primite la intrare sunt
copiate cu extensia .bkup n /tmp:
1
2
3
4

razvan@anaconda:~/uso/scripting$ cat file3.txt


for10.bash
for10_seq.bash
for10_exp.bash

5
6

razvan@anaconda:~/uso/scripting$ xargs -I abc cp abc /tmp/abc.bkup <


file3.txt

7
8
9

razvan@anaconda:~/uso/scripting$ ls /tmp/*.bkup
/tmp/for10.bash.bkup /tmp/for10_exp.bash.bkup /tmp/for10_seq.bash.
bkup

Se observa ca s-a folosit s, irul abc ca s, ir de substituit (prin intermediul opt, iunii
-I). La aparit, ia acestui s, ir n comanda folosita de xargs, acesta a fost nlocuit
cu parametrul de la intrare (n cazul nostru fiecare din cele trei fis, iere). Astfel,
comanda
1

ubuntu@ubuntu:~$ xargs -I abc cp abc /tmp/abc.bkup

este echivalenta cu
1

ubuntu@ubuntu:~$ cp for10.bash for10.bash.bkup

2
3

ubuntu@ubuntu:~$ cp for10.bash for10_seq.bash.bkup

4
5

ubuntu@ubuntu:~$ cp for10.bash for10_exp.bash.bkup

12.6.2

locate

Comanda locate permite localizarea de fis, iere al caror


nume corespunde unui anumit
s, ablon transmis ca parametru. Comanda locate foloses, te o baza de date construita cu
ajutorul comenzii updatedb.
Un exemplu este prezentat n continuare:

416

1
2
3
4
5
6
7
8
9
10

INTRODUCERE N SISTEME DE OPERARE

razvan@anaconda:~/uso/scripting$ time locate strace


/usr/bin/strace
/usr/share/doc/strace
/usr/share/doc/strace/changelog.Debian.gz
/usr/share/doc/strace/changelog.gz
/usr/share/doc/strace/copyright
/usr/share/doc/strace/TODO.gz
/usr/share/man/man1/strace.1.gz
/usr/share/vim/vim70/syntax/strace.vim
/var/lib/dpkg/info/strace.list

11
12
13
14

real
user
sys

0m0.288s
0m0.284s
0m0.004s

Dupa cum se vede comanda locate este foarte rapida ntruct foloses, te baza de date

generata/actualizat
a anterior de updatedb. ntruct este posibil ca anumite fis, iere sa
fi fost s, terse de la ultima actualizare, se poate folosi opt, iunea -e pentru a afis, a doar
fis, ierele care exista n sistem dintre cele cunoscute:
1
2
3
4
5
6

razvan@anaconda:~/uso/scripting$ locate -e strace


/usr/bin/strace
/usr/share/doc/strace
/usr/share/doc/strace/changelog.Debian.gz
/usr/share/doc/strace/changelog.gz
[...]

Comanda locate este de multe ori folosita mpreuna cu xargs:


1
2

3
4

razvan@anaconda:~/uso/scripting$ locate -e strace | xargs file


/usr/bin/strace:
ELF 32-bit LSB executable,
Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.1, dynamically linked (
uses shared libs), for GNU/Linux 2.4.1, stripped
/usr/share/doc/strace:
directory
/usr/share/doc/strace/changelog.Debian.gz: gzip compressed data, was "
changelog.Debian", from Unix, last modified: Fri Oct 27 00:22:12 2006,
max compression
[...]

12.6.3

find

Comanda find este principala comanda utilizata pentru cautarea


n sistemul local de

fis, iere. Comanda realizeaza o cautare


recursiva n structura de directoare s, i descopera
n sistemul de fis, iere care satisfac o anumita condit, ie. Suplimentar, comanda
acele intrari
find permite executarea unei act, iuni specifice.
Sintaxa find este mai complexa dect a altor comenzi s, i o vom prezenta dupa

urmatorul
exemplu:
1
2
3
4
5
6
7

razvan@anaconda:~$ find /usr/include/ -type f -name *term*.h -print


/usr/include/asm-generic/termios.h
/usr/include/linux/termios.h
/usr/include/asm/termbits.h
/usr/include/asm/termios.h
/usr/include/bits/termios.h
/usr/include/sys/termios.h

CAPITOLUL 12. SHELL SCRIPTING


8
9
10

417

/usr/include/termio.h
/usr/include/termios.h
[...]

n exemplul de mai sus, se cauta recursiv n /usr/include fis, ierele (-type f) al

caror
nume corespunde expresiei regulate *term*.h s, i se afis, eaza acele fis, iere
(-print).
Astfel, sintaxa find este
1

find director optiuni_potrivire actiuni

unde:

director este directorul n care se face cautarea


(recursiv);

optiuni_potrivire sunt opt, iuni de cautare


n sistemul de fis, iere (adncimea
arii,
tipul intrarii,
nume, det, inator,

caut
permisiuni etc.);

actiuni reprezinta act, iunile ntreprinse n momentul gasirii


unei intrarii

corespunzatoare;
act, iunea implicita este -print (de afis, are).
Opt, iuni de potrivire utile sunt:

tipul intrarii
se precizeaza cu ajutorul opt, iunii -type; astfel, -type f
nseamna un fis, ier, -type d nseamna un director, -type l nseamna o
a simbolica etc.; exemplu:
legatur
utilizatorului curent:
1
2
3
4
5
6
7
8

afis, area legaturilor


simbolice din ierarhia

razvan@anaconda:~$ find /home/razvan/public_html/ -type l


/home/razvan/public_html/pub/books
/home/razvan/public_html/pictures
/home/razvan/public_html/movies
/home/razvan/public_html/games
/home/razvan/public_html/wiki
/home/razvan/public_html/school/uso/cursuri
[...]

se precizeaza cu ajutorul opt, iunii -name urmata de o expresie


numele intrarii
regulata descriind numele; opt, iunea -wholename este folosita pentru potrivire
(cale absoluta);
exemplu: afis, area directoarelor ce
cu numele complet al intrarii
cont, in calea c++:
1
2
3
4
5
6
7
8

razvan@anaconda:~$ find /usr/include/ -type d -wholename */c++/*


/usr/include/c++/4.1.2
/usr/include/c++/4.1.2/backward
/usr/include/c++/4.1.2/bits
/usr/include/c++/4.1.2/debug
/usr/include/c++/4.1.2/ext
/usr/include/c++/4.1.2/ext/pb_assoc
[...]

permisiunile se precizeaza cu ajutorul opt, iunii -perm; astfel, -perm 644 va gasi

intrarile
care au drepturi de citire s, i scriere pentru utilizator s, i doar de citire pentru
grup s, i pentru ceilalt, i; exemplu: afis, area executabilelor suidate de sistem:
1
2
3

razvan@anaconda:~$ find /bin -perm 4755


/bin/su
/bin/mount

418
4
5
6

INTRODUCERE N SISTEME DE OPERARE


/bin/umount
/bin/ping
/bin/ping6

cu ajutorul opt, iunilor -amin,


timpul ultimului acces sau a ultimei modificari
-atime, -mmin, -mtime; -amin 20 nseamna ca fis, ierul a fost accesat n
urma cu 20 de minute, -amin -20 nseamna ca fis, ierul a fost accesat n urma
cu cel mult 20 de minute, -amin +20 nseamna ca fis, ierul a fost accesat n
urma cu cel put, in 20 de minute; exemplu: aflarea fis, ierelor modificate n urma cu
mai mult de 100 de zile:
1

razvan@anaconda:~$ find /home/razvan/ -type f -mtime +100

spat, iul ocupat pe disc cu ajutorul opt, iunii -size; -size +10M va selecta fis, ierele
care ocupa mai mult de 10 MB; exemplu: aflarea fis, ierelor care ocupa mai mult de
200 MB:
1

razvan@anaconda:~$ find /home/razvan/ -size +200M

det, inatorul
fis, ierului cu ajutorul opt, iunii -user;

grupul fis, ierului cu ajutorul opt, iunii -group.


Act, iunile ce pot fi ntreprinse cu ajutorul comenzii find sunt:

afis, area fis, ierului se face folosind -print; aceasta act, iune este implicita;

afis, area fis, ierelor folosind nul-terminatorul ca separator folosind -print0;


opt, iunea este utila n combinat, ie cu argumentul -0 la xargs; exemplu: mutarea
fis, ierelor .iso pe o noua partit, ie:
1

ubuntu@ubuntu:~$ find . -type f -name *.iso -print0 | xargs -0 -I


abc mv abc /mnt/hda6

s, tergerea fis, ierului cu ajutorul -delete; exemplu: s, tergerea fis, ierelor temporare
din ierarhia utilizatorului local:
1

razvan@anaconda:~$ find . -type f -name *~ -delete

execut, ia unei comenzi precizate de utilizator cu ajutorul opt, iunii -exec; s, irul {}
gasite

este utilizat pentru nlocuirea intrarii


n comanda de dupa exec; comanda
se recomanda ca att s, irul {} ct
trebuie sa se termine cu ; (punct s, i virgula);
s, i caracterul ; sa fie citate pentru a preveni interpretarea lor ca nis, te caractere
speciale; exemple:
crearea unei copii pentru fis, ierele mai vechi de 1 an din directorul curent:
1

razvan@anaconda:~/uso/scripting$ find . -type f -mtime +365 exec cp {} /tmp/{}.bkup ;

adaugarea
dreptului de execut, ie pentru toate directoarele:
1

razvan@anaconda:~/uso/scripting$ find . -type d -exec chmod a+x


{} ;

afis, area fis, ierelor C n care este definita funct, ia main:


1

razvan@anaconda:~$ find school/2001-2006_code/ -type f -name *.


c -exec grep -l int main* {} ;

CAPITOLUL 12. SHELL SCRIPTING

419

Act, iuni asupra fis, ierelor gasite


cu find pot fi executate cu ajutorul opt, iunii -exec
sau prin folosirea xargs.

Exemple
n continuare sunt prezentate cteva exemple utile de lucru cu find:

editarea fis, ierelor .c din ierarhia curenta care folosesc funct, ia printf:
1

razvan@anaconda:~$ vi $(find school/2001-2006_code/ -type f -name


*.c -exec grep -l -w printf {} ;)

arhivarea fis, ierelor mai vechi de 30 de zile:


1

razvan@anaconda:~/uso/scripting$ find . -depth -type f -mtime 30 |


tar --files-from=- --null -czf out.tgz

s, tergerea fis, ierelor utilizatorului local din /tmp:


1

razvan@anaconda:~/uso/scripting$ find /tmp -type f -user $(whoami) delete

Informat, ii complete de comenzile de lucru cu fis, ierele se gasesc


n paginile info asociate
(info find).

12.7

Expandarea n shell

De-a lungul sect, iunilor anterioare s-au prezentat diferite metode de expandare n shell.
Expandarea unei variabile la valoarea ei, expandarea unei comenzi, expandare
Sect, iunea de fat, a ofera o recapitulare structurata a acestor mecanisme.
aritmetica.

12.7.1

Simbolul $

Simbolul $ este folosit pentru expandarea unei variabile, comenzi sau expresii s, i

posibilitatea transmiterii rezultatului acesteia. Caracterul are o semnificat, ie speciala,


drept pentru care va trebui citat (folosind ghilimele, apostrof, backslash) n cazul n care

se dores, te folosirea sa literala.

Variabile
O variabila are un nume s, i o valoare. As, a cum s-a specificat, o variabila nu are tip n
sau ca s, ir n funct, ie de situat, ie. Spre exemplu, n
shell. Poate fi interpretata ca numar
niciunul din cazurile de test de mai jos nu se genereaza eroare:
1

razvan@anaconda:~/uso/scripting$ b=3

2
3

razvan@anaconda:~/uso/scripting$ test "a" = $b

4
5

razvan@anaconda:~/uso/scripting$ test 1 -eq $b

420

INTRODUCERE N SISTEME DE OPERARE

Numele variabilei poate fi ncadrat ntre acolade. Acestea sunt opt, iunale dar sunt utile

pentru a proteja numele variabilei de caracterele urmatoare.


n exemplul de mai jos
altfel nu ar fi fost afis, at nimic, variabila ba
utilizarea acoladelor duce la afis, area dorita,

nefiind init, ializata:


1
2

razvan@anaconda:~/uso/scripting$ echo ${b}a


3a

asupra variabilei:
Folosind caracterul $ se pot face diverite expandari

determinarea numarului
de litere compun variabila:
1

razvan@anaconda:~/uso/scripting$ var="alfanumeric"

2
3
4

razvan@anaconda:~/uso/scripting$ echo ${#var}


11

port, iuni din numele variabilei:


1
2

razvan@anaconda:~/uso/scripting$ echo ${var:3}


anumeric

3
4
5

razvan@anaconda:~/uso/scripting$ echo ${var:3:6}


anumer

Expandarea unei comenzi


Expandarea unei comenzi nseamna executarea acesteia s, i ret, inerea rezultatului
comenzii. Acest lucru se poate face n doua moduri:
1

$(comanda)

sau
1

comanda

(caracterul folosit este backquote se afla pe tasta cu ~ de lnga tasta 1) Rezultatul


unei comenzi poate fi ret, inut ntr-o variabila s, i folosit ulterior.

Expandarea aritmetica
Expandarea aritmetica presupune evaluarea unei expresii s, i ret, inerea rezultatului
acesteia. Pentru aceasta se foloses, te operatorul $((...)) sub forma $((
expresie )).
Daca nu este nevoie de ret, inerea rezultatului se poate folosi operatorul ((...))
1

razvan@anaconda:~/uso/scripting$ a=1

2
3

razvan@anaconda:~/uso/scripting$ ((a++))

4
5
6

razvan@anaconda:~/uso/scripting$ echo $a
2

CAPITOLUL 12. SHELL SCRIPTING

12.7.2

421

Expresii regulate n shell

Shell-ul permite interpretarea expresiilor regulate pentru a permite expandarea numelor


de fis, iere.
Construct, iile care permit expandarea numelor de fis, iere sunt:

acoladele {} permit precizarea unor opt, iuni pentru expandare; astfel, expresia
{a,b,c}.d se va expanda la a.d b.d c.d;
* nseamna expandarea la orice s, ir de caractere; astfel *.c nseamna toate fis, iere
care au extensia .c, iar a*.c reprezinta toate fis, ierele care ncep cu litera a s, i se
termina n .c;
? nseamna potrivirea cu un singur caracter (oricare ar fi acela);
[ ...

] permit specificarea unei clase de caractere; astfel, [a-z] nseamna


litere mici [a-d0-3A-D] nseamna literele de la a la d, de la A la D sau cifrele de
la 0 la 3; [a-z] nseamna orice mai put, in literele de la a la z.

Exemple de utilizare a expresiilor regulate shell sunt prezentate n continuare:

afis, area tuturor fis, ierelor C din directorul curent:


1

ubuntu@ubuntu:~$ ls *.c

afis, area tuturor fis, ierelor de tip png, jpg sau gif:
1

ubuntu@ubuntu:~$ ls *.{png,jpg,gif}

afis, area tuturor fis, ierelor al caror


nume ncepe cu 3 cifre:
1

ubuntu@ubuntu:~$ ls [0-9][0-9][0-9]*

12.8

Parametrii unui script shell

La fel ca orice alt program, un script shell poate primi argumente n linia de comanda.
Acestea pot fi folosite pentru a oferi un mod de configurare a scriptului n momentul
execut, iei.
n C, modul n care se realizeaza accesul la argumentele n linia de comanda este prin

intermediul variabilelor argc s, i argv. Astfel, variabila argc indica numarul


de
argumente primite n linia de comanda (incluznd numele executabilului), iar argv este
vectorul de argumente: argv[0] este numele executabilului, argv[1] numele
primului argument, argv[argc-1] este ultimul argument.
n Bash, accesul la argumente se realizeaza prin intermediul variabilei $#,

reprezentnd numarul
de argumente, s, i al variabilelor $1, $2 etc. reprezentnd
argumentele efective. Ca exemplu, vom folosi scriptul de mai jos, care nu face altceva
dect sa afis, eze argumentele primite:
1
2
3
4

razvan@anaconda:~/uso/scripting$ cat -n args.bash


1 #!/bin/bash
2
3 echo "Scriptul are $# argumente."

422
5
6
7
8
9
10
11
12
13

INTRODUCERE N SISTEME DE OPERARE


4
5
6
7
8
9
10
11
12

echo "Numele scriptului este $0."


echo "Argumentele scriptului sunt $@."
i=1
while test $i -le $#; do
echo "Argumentul $i este ${!i}."
((i++))
done

14
15
16

razvan@anaconda:~/uso/scripting$ bash args.bash alfa beta gamma delta


Scriptul are 4 argumente.

17
18

Numele scriptului este args.bash.

19
20

Argumentele scriptului sunt alfa beta gamma delta.

21
22

Argumentul 1 este alfa.

23
24

Argumentul 2 este beta.

25
26

Argumentul 3 este gamma.

27
28

Argumentul 4 este delta.

n cazul exemplului de mai sus, se trimit 4 argumente. Daca variabila argc numara
inclusiv executabilul, variabila $# contorizeaza doar argumentele. Variabila $0 cont, ine
numele executabilului. Variabila $@ cont, ine toate argumentele separate prin spat, iu
(blank ) (linia 5). Folosind variabila i se parcurg toate argumentele primite n linia de
comanda (linia 9) s, i se afis, eaza (linia 10). Se observa ca am folosit construct, ia $!i,
pentru a expanda variabila i s, i apoi variabila care reprezinta argumentul primit din linia

de comanda.
Un al mod de a realiza parcurgerea argumentelor primite n linia de comanda ar fi fost

urmatorul:
1
2
3
4
5

i=1
for arg in $@; do
echo "Argumentul $i este $arg."
((i++))
done

Variabilele $1, $2, ..., $N, reprezentnd argumentele primite din linia de comanda,
poarta numele de parametri pozit, ionali.

12.8.1

Comanda shift

Comanda shift, dupa cum i spune numele, este folosita la deplasarea argumentelor
din linia de comanda n parametri pozit, ionali. n exemplul de mai jos, se face parcurgerea
parametrilor pozit, ionali folosind comanda shift:
1
2
3
4
5

i=1
while ! test -z $1 ; do
echo "Argumentul $i este $1."
((i++))
shift

CAPITOLUL 12. SHELL SCRIPTING


6

423

done

Comanda shift este responsabila cu deplasarea spre stnga a argumentelor unui


script shell. Astfel, dupa rularea comenzii shift, se pierde informat, ia despre primul
argument, variabila $# scade cu 1, variabila $1 reprezinta al doilea argument, variabila
$2 reprezinta al treilea argument etc.
Comanda shift poate primi un argument reprezentnd contorul de deplasare. Implicit
a argument) acesta este 1.
(far

12.8.2

Parametri speciali

Dupa cum a fost prezentat anterior, exista variabile speciale folosite de shell pentru

prelucrarea argumentelor n linia de comanda:

$# reprezinta numarul
de argumente din linia de comanda;

$0 reprezinta numele scriptului shell;

$1, $2, ..., $N reprezinta argumentele din linia de comanda;

$@ reprezinta lista de argumente separate prin spat, ii.


n afara acestor variabile mai exista ct, iva parametri speciali, prezentat, i n continuare:

$? reprezinta valoarea de retur a ultimei comenzi;


$$ reprezinta pid-ul procesului bash curent;
$! reprezinta pid-ul ultimului proces lansat n fundal.

12.8.3

Exemplu de utilizare a parametrilor

Un exemplu util este un script shell care sa us, ureze lucrul cu comanda find n
arii
unor fis, iere dupa nume. Scriptul este prezentat n continuare:
momentul caut
1

#!/bin/bash

2
3
4
5
6

if test $# -ne 2; then


echo "Two arguments are required."
exit 1
fi

7
8
9
10
11

if ! test -d $1; then


echo "First argument is not a directory."
exit 1
fi

12
13

find "$1" -type f -name "$2"

Listing 12.4: Fis, ierul myfind.bash


1
2
3
4

razvan@anaconda:~/uso/scripting$ bash myfind.bash . "*.bash"


./while10.bash
./hw.bash
./for_ls.bash

424
5
6
7
8

INTRODUCERE N SISTEME DE OPERARE

./service_ip.bash
./while_cat.bash
./rss.bash
[...]

Se observa ca se transmit ca argumente directorul n care se face cautarea


s, i expresia

regulata asociata numelui fis, ierului. n afara apelarii find (linia 13), se verifica numarul
de argumente (liniile 3-6) s, i daca primul argument este un director (liniile 8-11).

12.9

Funct, ii

La fel ca majoritatea limbajelor de programare, shell scriptingul permite folosirea de


, i de cod folosite pentru a separa o funct, ionalitate
funct, ii. n general funct, iile sunt bucat
sau pentru refolosire (pentru a nu se scrie de doua ori acelas, i cod). De asemenea,

, ii codului.
funct, iile au un rol important n marirea
lizibilitat
n shell scripting, funct, iile intervin n cazul scripturilor de dimensiune mai mare, unde
, i de cod care sunt folosite de mai multe ori.
exista bucat

12.9.1

Sintaxa unei funct, ii

sintaxa comenzii prin urmatorul

Prezentam
exemplu, n care se poate s, terge sau adauga
un utilizator n sistem:
1

#!/bin/bash

2
3
4
5
6

if test $# -ne 1; then


echo "One argument required: a or d (add or delete)."
exit 1
fi

7
8
9

username=testuser
groupname=testgroup

10
11
12
13
14
15
16
17
18
19
20

function add ()
{
cat /etc/group | grep $groupname &> /dev/null
if test $? -eq 1; then
# no group
addgroup $groupname
echo "Group $groupname didnt exist so it was created."
fi
useradd -m -d /home/$username -g $groupname -s /bin/bash
$username
echo "User $username added. Use passwd to change password."
}

21
22
23
24
25
26

function delete ()
{
userdel -r $username
echo "User $username deleted."
}

27
28

case $1 in

CAPITOLUL 12. SHELL SCRIPTING


"a") add;;
"d") delete;;
*) echo "Required arguments are a or d."; exit 1;;

29
30
31
32

425

esac

Listing 12.5: Fis, ierul user.bash


1
2

root@anaconda:/home/razvan/uso/scripting# bash user.bash a


Adding group testgroup (GID 1031) ...

3
4

Done.

5
6

Group testgroup didnt exist so it was created.

7
8

User testuser added. Use passwd to change password.

9
10
11

root@anaconda:/home/razvan/uso/scripting# bash user.bash d


User testuser deleted.

n exemplul de mai sus funct, iile sunt add s, i delete s, i sunt folosite, respectiv, pentru a

adauga
s, i a elimina un utilizator n/din sistem. Sintaxa unei definit, ii de funct, ie este:
1
2
3
4

function nume_functie ()
{
cod shell
}

Se observa ca o funct, ie shell are un antet s, i un corp. n antet se prezinta numele funct, iei

(nume_functie), iar n corp se regasesc


comenzile ce se executa n momentul apelarii
funct, iei. Cuvntul function este cuvnt rezervat s, i poate fi omis. Astfel, o funct, ie

definita:
1
2
3
4

function testare ()
{
...
}

poate fi definita s, i astfel:


1
2
3
4

testare ()
{
...
}

Pentru a apela o funct, ie se foloses, te direct numele funct, iei urmat de parametri, exact ca
n cazul apelului unei comenzi.

12.9.2

Parametrii unei funct, ii

n mod evident, o funct, ie poate primi s, i argumente. Modul de definire funct, iei nu se
altfel spus, ntr-un shell script o funct, ie nu are parametri formali. Totus, i, modul
schimba;
de apel se schimba prin precizarea parametrilor pentru funct, ie.
Pentru a exemplifica modul n care se transmit parametrii unei funct, ii vom folosi un
exemplu de calcul a sumei unor numere naturale transmise ca argumente funct, iei
sum-func:

426

INTRODUCERE N SISTEME DE OPERARE

#!/bin/bash

2
3
4
5
6
7
8
9
10

function sum_func ()
{
sum=0
while ! test -z $1; do
sum=$(($sum + $1))
shift
done
}

11
12
13

sum_func 1 2 3 4 5
echo "Sum: $sum"

14
15
16

sum_func 2 3 5 7 11 13 17 19
echo "Sum: $sum"

Listing 12.6: Fis, ierul sum-func.bash


1
2
3

razvan@anaconda:~/uso/scripting$ bash sum-func.bash


Sum: 15
Sum: 77

Se observa ca argumentele unei funct, ii se obt, in tot folosind parametri pozit, ionali ($1,

$2 etc.). Variabila $# reprezinta numarul


de argumente transmise funct, iei. Variabila $0

ramne
neschimbata s, i reprezinta numele scriptului. De asemenea, se poate folosi
comanda shift. n momentul n care funct, ia se ntoarce, valorile parametrilor
pozit, ionali sunt restaurate. Numele funct, iei este ret, inut n variabila FUNCNAME.
Variabila sum a fost definita n cadrul funct, iei s, i este vizibila s, i n exterior. Daca se
dores, te ca o variabila sa fie vizibila numai n interiorul unei funct, ii aceasta trebuie
prefixata folosind cuvntul cheie local.

12.10

Scripturile de pornire Bash

Scripturile de pornire Bash sunt fis, iere intepretate la pornirea unei sesiuni shell. Acestea
se ocupa de actualizarea variabilelor de mediu s, i de rularea unor comenzi personalizate
de utilizator; un exemplu l constituie configurarea de alias-uri.
Sesiunile de shell pot fi clasificate n:

sesiuni interactive/non-interactive dupa cum permit sau nu rularea de comenzi


prin prezentarea unui prompt utilizatorului; o sesiune non-interactiva este, de cele
mai multe ori, folosita pentru rularea unui script shell

sesiuni de autentificare (login)/non-autentificare (non-login); sesiunile de


emulator de terminal (gnome-terminal, konsole, xterm) sunt sesiuni
non-login

Fis, ierele de pornire sunt interpretate de sesiunile de shell interactive n modul urmator:

o sesiune de shell login va interpreta, n ordine, fis, ierele /etc/profile, apoi


~/.bash_profile, ~/.bash_login s, i ~/.profile; la ncheierea sesiunii
se interpreteaza fis, ierul ~/.bash_logout

CAPITOLUL 12. SHELL SCRIPTING

427

o sesiune de shell non-login va interpreta comenzile din ~/.bashrc


Fis, ierul ~/.bashrc este fis, ierul recomandat pentru personalizarea sesiunilor de
shell ale unui utilizator. ntruct un shell de login nu interpreteaza ~/.bashrc,
fis, ierul ~/.bash_profile va cont, ine, de obicei, o linie de forma:
1
2
3
4

# include .bashrc if it exists


if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

12.10.1

Variabile de mediu

Dupa cum a fost specificat anterior, unul din rolurile importante ale scripturilor de pornire
shell este configurarea variabilelor de mediu.
n
Variabilele de mediu sunt variabile care afecteaza modul n care un proces ruleaza.

mod obis, nuit, n sistemele Unix, un proces mos, tenes, te variabilele de mediu ale parintelui

sau.
Astfel, pentru procesul asociat execut, iei unei comenzi, variabilele de mediu sunt
cele ale shell-ului.
De cele mai multe ori, variabilele de mediu sunt configurate n scripturile de pornire ale
Bash. Declarat, ia unei variabile de mediu se face n formatul
1

export VARIABLE=value

Daca nu se precizeaza export, atunci variabila nu va fi mos, tenita de procesele fiu. n


mod obis, nuit, variabilele de mediu sunt denumite cu majuscule.
Vizualizarea variabilelor de mediu existente la un moment dat se realizeaza cu ajutorul
comenzii env sau set:
1
2
3
4
5

razvan@anaconda:~/uso/scripting$ env
SSH_AGENT_PID=7985
TERM=xterm
SHELL=/bin/bash
[...]

Exemple de variabile de mediu sunt:


executabilele
PATH ret, ine o lista de directoare folosite de shell pentru a gasi
asociate comenzii; lista este separata prin : (doua puncte); daca se dores, te

adaugarea
directorului ~/bin la variabila de mediu, se foloses, te comanda:
1
2

razvan@anaconda:~/uso/scripting$ echo $PATH


/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

3
4

razvan@anaconda:~/uso/scripting$ export PATH="$PATH":~/bin

5
6
7

razvan@anaconda:~/uso/scripting$ echo $PATH


/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/razvan/
bin

HOME ret, ine directorul de baza al utilizatorului curent


USER este numele utilizatorului curent
EDITOR este editorul implicit

428

INTRODUCERE N SISTEME DE OPERARE

12.11

Studii de caz

12.11.1

Contorizarea numarului
de utilizatori autentificat, i n sistem

Folosind cunos, tint, ele din acest capitol, se poate rezolva corect problema contorizarii

numarului
de utilizatori autentificat, i n ziua de luni n sistem, problema propusa n
sect, iunea 12.3.4. Solut, ia este prezentata n continuare:
1

#!/bin/bash

2
3

user_day="Monday"

4
5
6
7
8
9
10
11
12
13
14

case $user_day in
"Monday") day_last="Mon";;
"Tuesday") day_last="Tue";;
"Wednesday") day_last="Wed";;
"Thursday") day_last="Thu";;
"Friday") day_last="Fri";;
"Saturday") day_last="Sat";;
"Sunday") day_last="Sun";;
*) echo "Zi invalida"; exit 1;;
esac

15
16
17
18
19
20

last | head -n -2 | while read user term ip day other; do


if test $day = $day_last; then
echo "$user";
fi
done | sort -u | wc -l

Listing 12.7: Fis, ierul count-login.bash


1
2

razvan@anaconda:~/uso/scripting$ bash count-login.bash


9

Linia 3 defines, te variabila user_day folosita pentru a ret, ine ziua despre care dorim
informat, ii (generalizat). Aceasta va fi data n formatul complet pentru a avantaja
utilizatorul. Liniile 5-14 se ocupa de traducerea zilei n formatul last; ziua n formatul
last (prescurtat) este ret, inuta n variabila day_last.
de fapt, o comanda nlant
, uita.

Liniile 16-20 reprezinta,


comenzii sunt:

Componentele lant, ului de

last afis, eaza informat, ii despre utilizatorii autentificat, i n sistem;


este
head -n -2 ret, ine primele linii de la intrare, mai put, in ultimele doua;
nevoie de acest lucru deoarece ultimele doua linii date la ies, ire de last nu sunt
utile;

ciclul while este folosit pentru a citi, folosind read, diversele cmpuri ale fiecarei
linii date de last: numele de utilizator, terminalul asociat, adresa IP de conectare,
ret, ine
ziua n care s-a realizat autentificarea; variabila other, fiind ultima variabila,
daca ziua
restul de informat, ii pna la sfrs, itul liniei (informat, ii care nu intereseaza);
corespunde zilei ret, inute n variabila day_last atunci se afis, eaza la ies, ire numele
de utilizator;

CAPITOLUL 12. SHELL SCRIPTING

429

sort -u sorteaza s, i ret, ine n mod unic liniile primite la intrare; n cazul nostru
aceste linii sunt chiar cele afis, ate de ciclul while, adica utilizatorii care s-au
autentificat n sistem n ziua data de variabila user_day;

wc -l contorizeaza numarului
de linii furnizat de sort -u; rezultatul este

numarul
de utilizatori distinct, i care s-au autentificat n sistem n ziua de data de
variabila user_day.

12.11.2

Schimbarea promptului shell

Promptul este s, irul de caractere oferit de shell unde utilizatorul poate introduce comenzi.
n Bash, un prompt care se termina n caracterul $ reprezinta o sesiune de shell a unui
utilizator neprivilegiat; un prompt care se termina n caracterul # este asociat unei sesiuni
de shell a utilizatorului root.
Aspectul promptului este controlat prin intermediul unei variabile speciale, anume PS1.
Aceasta controleaza modul n care promptul este oferit utilizatorului. Comanda echo
permite inspectarea variabilei:
1
2

razvan@anaconda:~$ echo $PS1


\u@\h:\w\$

Se observa ca variabila cuprinde o serie de caractere speciale citate cu ajutorul


backslash:

\u nseamna numele utilizatorului; n exemplul de mai sus se traduce n s, irul


razvan
\h nseamna numele sistemului
\w nseamna afis, area directorului curent, cu abrevierea directotului de baza la
caracterul ~
\$ nseamna # pentru root sau $ n rest
Promptul poate fi schimbat la un s, ir de caractere simplu:
1
2

razvan@anaconda:~$ PS1="prompt: "


prompt:

Promptul fi personalizat s, i folosind o serie de caractere speciale ca n exemplele de mai


jos:
1
2

prompt: echo PS1="\u-\h[\d]\$ "


PS1=\u-\h[\d]$

3
4

prompt: PS1="\u-\h[\d]\$ "

5
6

razvan-anaconda[Fri Sep 14]$ PS1="\u+\h \W (\A)"

7
8

razvan+anaconda ~ (18:08)cd uso/

9
10

razvan+anaconda uso (18:08)cd ~/uso/conv/

11
12

razvan+anaconda conv (18:09)

Secvent, e speciale care au fost folosite n exemplele de mai sus sunt:

430

INTRODUCERE N SISTEME DE OPERARE

\d nseamna data curenta


\A nseamna timpul curent
\W nseamna directorul curent ca s, i cale relativa fat, a de directorul home (\w

afis, eaza calea completa)

O lista completa cu secvent, ele speciale de personalizare a promptului se poate gasi


online1 .
Variabila PS1 este definita n /etc/profile s, i ~/.bashrc. Pentru configurarea
permanenta a acesteia se recomanda utilizarea fis, ierului ~/.bashrc.

Folosirea de culori n prompt


Promptul poate fi colorat prin folosirea secvent, ei speciale \e[. Astfel, daca se dores, te
afis, area unui prompt de culoare ros, ie, se foloses, te comanda:
1

razvan@anaconda:~/uso/conv$ PS1="\e[0;31m\u@\h:\w\$ \e[m"

Pentru obt, inerea unui prompt de culoare verde comanda este:


1

razvan@anaconda:~/uso/conv$ PS1="\e[0;32m\u@\h:\w\$ \e[m"

Secvent, ele speciale \e[x;ym s, i \e[m definesc spat, iul de aplicabilitate al unei culori.
Secvent, e posibile sunt:
Secvent, a x;y defines, te culoarea utilizata.

0;30 negru
0;31 ros, u
0;32 verde
0;33 galben
0;34 albastru
0;35 magenta
0;36 cyan
0;37 alb
n lista de mai sus x are valoare 0. Se poate folosi valoarea 1 pentru versiunea deschisa
a culorii. n mod evident, se pot asocia culori diferite pentru componentele promptului,
ca n exemplul de mai jos:
1

razvan@anaconda:~$ PS1="\e[0;36m\u\e[m@\e[0;34m\h\e[m:\e[0;31m\w\e[m\$ "

n exemplul de mai sus, n cadrul promptului, numele utilizatorului va fi afis, at folosind


cyan, numele sistemului folosind albastru, iar numele directorului curent folosind ros, u.
1

http://tldp.org/HOWTO/Bash-Prompt-HOWTO/bash-prompt-escape-sequences.html

CAPITOLUL 12. SHELL SCRIPTING

12.11.3

431

Batch scripting n Windows

n Windows, scripturile shell au ca echivalent scripturi batch. Un script batch are de


obicei extensia .bat. Programul folosit pentru rularea scripturilor batch este cmd
(interpretorul de comenzi pe Windows).
La fel ca un script shell, un script batch permite execut, ia de comenzi native Windows
s, i programarea cu ajutorul variabilelor, a instruct, iunilor de decizie s, i a instruct, iunilor de
ciclare.

Comenzi Windows
Rularea unei comenzi n Windows se realizeaza prin intermediul interpretorului de
comenzi Windows. Pentru pornirea acestuia, n Windows XP trebuie pornita aplicat, ia
Command Prompt: Start->All Programs->Accesories->Command Prompt.
n afara comenzilor obis, nuite pentru lucrul cu sistemul de fis, iere (dir, cd, mkdir,
rmdir, del, copy, move etc.), exista s, i alte comenzi utile. Lista cu toate comenzile
Windows se poate obt, ine folosind comanda help:
1
2
3

C:\Documents and Settings\Razvan.RAGNAROK>help


For more information on a specific command, type HELP command-name
ASSOC
Displays or modifies file extension associations.

4
5

AT

Schedules commands and programs to run on a computer.

ATTRIB

Displays or changes file attributes.

BREAK

Sets or clears extended CTRL+C checking.

CACLS

Displays or modifies access control lists (ACLs) of files.

6
7
8
9
10
11
12
13

[...]

n tabelul 12.2 este prezentat un tabel cu comenzile utile Linux s, i echivalentul lor n
Windows:

Operatori
ator

Interpretorul de comenzi Windows are, aseman


interpretorului Bash, operatori de
redirectare sau de comunicare ntre procese. n exemplul de mai jos dorim sa ret, inem n
fis, ierul del.txt informat, ii despre comenzile care se ocupa cu s, tergerea de informat, ii:
1

C:\Documents and Settings\Razvan.RAGNAROK>help | findstr "[Dd]elete" >


del.txt

2
3
4

C:\Documents and Settings\Razvan.RAGNAROK>type del.txt


DEL
Deletes one or more files.

5
6

ERASE

Deletes one or more files.

LABEL

Creates, changes, or deletes the volume label of a disk.

7
8
9

432
10

INTRODUCERE N SISTEME DE OPERARE

[...]

Variabile
Ca s, i n Bash, variabilele nu au un tip. Definirea acestora se realizeaza cu ajutorul
comenzii set:
1

C:\Documents and Settings\Razvan.RAGNAROK>set a=3

2
3
4

C:\Documents and Settings\Razvan.RAGNAROK>echo %a%


3

Afis, area cont, inutul unei variabile nu se mai realizeaza prefixnd-o cu ajutorul
caracterului $, ci folosind caracterul % nainte s, i dupa numele variabilei.
Ca s, i n Bash, comanda set este folosita s, i pentru afis, area variabilelor curente:
1
2
3
4
5
6
7
8
9
10
11

C:\Documents and Settings\Razvan.RAGNAROK>set


a=3
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Razvan.RAGNAROK\Application Data
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=RAGNAROK
ComSpec=C:\WINDOWS\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\Razvan.RAGNAROK
[...]

Variabile de mediu Daca n Bash variabilele de mediu sunt definite n fis, ierele de
pornire, n Windows trebuie folosita o fereastra de configurare. Pentru accesul la
aceasta
se
foloses, te:
click
dreapta
pe
My
Computer ->Properties->Advanced->Environment Variables.

Variabila PATH det, ine, ca s, i n cazul Bash, lista de directoare ale caror
executabile pot fi
Spre deosebire de Bash, separatorul folosit este ; (punct s, i
rulate din linia de comanda.

virgula).
n exemplul de mai jos se adauga directorul D:\mybin la calea de executabile:
1
2
3

C:\Documents and Settings\Razvan.RAGNAROK>echo %PATH%


c:\program files\imagemagick-6.3.4-q16;C:\Program Files\MiKTeX 2.6\miktex
\bin;C:
\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;D:\Software\
swftools

4
5

C:\Documents and Settings\Razvan.RAGNAROK>set PATH=%PATH%;D:\mybin\

6
7
8
9

C:\Documents and Settings\Razvan.RAGNAROK>echo %PATH%


c:\program files\imagemagick-6.3.4-q16;C:\Program Files\MiKTeX 2.6\miktex
\bin;C:
\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;D:\Software\
swftools;D:\mybin\

CAPITOLUL 12. SHELL SCRIPTING

433

Programarea batch
Dupa cum s-a precizat, echivalentul scripturilor shell din Linux sunt scripturile batch din
Windows. De obicei, acestea au extensia .bat. Exemplul cel mai simplu de script batch
este prezentat mai jos:
1
2
3

C:\DOCUME~1\RAZVAN~1.RAG>type hw.bat
@echo off
echo "Hello, World!"

4
5
6

C:\DOCUME~1\RAZVAN~1.RAG>hw.bat
"Hello, World!"

n mod implicit, rularea unui script batch duce la afis, area comenzilor ntlnite (echivalent
cu set -x din Bash). Pentru a prentmpina acest lucru se foloses, te directiva @echo
off.
Un emulator al comenzii dir foloses, te for s, i este prezentat n continuare:
1
2
3

C:\DOCUME~1\RAZVAN~1.RAG>type dir.bat
@echo off
for %%f in (*) do echo %%f

4
5
6
7
8
9
10
11
12
13
14

C:\DOCUME~1\RAZVAN~1.RAG>dir.bat
.gtk-bookmarks
del.txt
dir.bat
gsview32.ini
hw.bat
logfile.txt
PUTTY.RND
winscp.RND
_viminfo

atoare

Instruct, iunea if are o sintaxa aseman


instruct, iunii echivalente din Bash:
1

C:\DOCUME~1\RAZVAN~1.RAG>set a=3

2
3
4

C:\DOCUME~1\RAZVAN~1.RAG>if %a% EQU 3 echo "true"


"true"

Mai multe despre comenzile instruct, iunile if s, i for se pot afla prin consultarea informat, iei
de ajutor: if /? s, i for /? .

12.11.4

PowerShell pe Windows

PowerShell este un nou interpretor de comenzi dezvoltat de Microsoft. Se bazeaza


pe programare orientata obiect s, i pe versiunea 2.0 a platformei de dezvoltare .NET.

Windows PowerShell este gratis; poate fi descarcat


de pe site-ul asociat1 .
ntr-o oarecare masur
a,
ideea din spatele utilitarelor
Windows PowerShell urmeaza,
shell Unix, anume de a realiza sarcini complexe prin combinarea unor componente deja
existente. Aceste componente sunt denumite cmdlets s, i sunt, de fapt, instant, e ale unor
clase .NET. Deosebirea de shellurile Unix este faptul ca n loc de a crea o banda de
transmitere a informat, iei n format text (pipeline), cmdlet-ii comunica folosind obiecte.
1

http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

434

INTRODUCERE N SISTEME DE OPERARE

Cmdlets
Cmdlet-ii reprezinta blocurile de baza pentru PowerShell echivalent cu comenzile de
baza Unix folosite de Bash.
Astfel, pentru listarea proceselor din sistem se foloses, te cmdlet-ul get-process.
Acesta prezinta aliasul ps s, i este echivalent comenzii ps din Linux. Pentru listarea
cont, inutului unui director se foloses, te cmdlet-ul get-childitem cu aliasul ls.
spre exemplu, un utilizator dores, te omorrea proceselor al caror

Daca,
nume ncepe cu
litera p, se foloses, te comanda:
1

PS> get-process p* | stop-process

Folosind concepte din programarea orientata obiect, se pot extrage cmpuri din
rezultatul unei comenzi. Astfel, daca se dores, te aflarea timpului ultimului acces pentru
un directorul Cookies, se foloses, te comanda:
1

PS> $(get-item Cookies).lastaccesstime

Pentru afis, area proceselor din sistem n forma tabelara se poate folosi comanda
1
2
3
4
5
6
7
8

PS> Get-Process | Format-Table Id, Name


Id Name
-- ---2876 alg
532 ApntEx
2044 Apoint
3448 calc
1824 CFSvcs

Variabile s, i structuri de control


, ile precizate se
PowerShell permite crearea de scripturi. Ca s, i Bash, printre facilitat
a completare automata,
utilizarea de variabile, structuri de control s, i funct, ii.
numar
Spre deosebire de Bash, variabilele PowerShell au un tip:
1

PS C:\> $b = 3.1415926

2
3
4

PS C:\> $b
3.1415926

5
6

PS C:\> $b.GetType().Name

n Windows PowerShell, echivalentul pentru for (din Bash) este foreach:


1
2
3
4
5
6
7
8
9
10
11

PS C:\WINDOWS\system32> 1..10 | foreach { $_ * 2 }


2
4
6
8
10
12
14
16
18
20

CAPITOLUL 12. SHELL SCRIPTING

435

Informat, ii complete despre Windows PowerShell se gasesc


n documentat, ia care
soses, te cu pachetul de instalare.
la online1 .
Informat, ii complete s, i tutoriale sed se pot gasi

Cuvinte cheie

shell

operatorul de comunicat, ie |

bash

variabile shell

script shell

caractere speciale shell: $, #, *, ", , \, (,

readline

), , , &, |, ;, [, ], ?, blank

editarea comenzilor

if, test, comanda de test [ ... ]

istoricul comenzilor

for, while, until

reverse search

filtre de text: cat, tac, nl, sort, uniq,

autocompletion

head, tail, cut, tr, grep

comenzi interne (built-in)

expresie regulata (pattern matching)

comenzi externe

xargs, locate, find

shebang

expandarea

echo
printf
set

shell:
variabilei,
substitut, ia
expandare aritmetica

parametrii unui script shell; expresiile


$0, $n, $#, $@, $?, $$, $!

exit

funct, ii shell

read

scripturi

de init, ializare:
.bashrc,
.bash_profile, /etc/bash_profile

redirectarea intrarii/ies
, irii/erorii standard
variabile de mediu
operatorii <, >, 2>, &>, >>

here document, here string

batch scripting

operatorii <<, <<<

power shell; cmdlet

operatorii de secvent, iere ;, &&, ||

sed

ntrebari

1. Care din urmatoarele


nu este un intepretor de comenzi?

q Bash
q PowerShell
q Command Prompt
1

http://sed.sourceforge.net/grabbag/tutorials/

expandarea
comenzii,

436

INTRODUCERE N SISTEME DE OPERARE

q Flash

2. Ce comanda este folosita pentru cautarea


unei expresii regulate ntr-un fis, ier?

q tr
q grep
q cut
q sort

3. Care din urmatorii


operatori este asociat cu un here document?

q >
q |
q &>
q <<

4. Care din urmatoarele


opt, iuni testeaza egalitatea ntre doua s, iruri?

q set $a == $b
q [$a == $b]
q test $a == $b
q { $a == $b }
5. Care este efectul comenzii sort -n file.txt?

q sorteaza liniile nevide din fis, ier


q sorteaza liniile vide din fis, ier
q sorteaza liniile unice din fis, ier
q sorteaza liniile n format numeric
6. Ce utilitar NU va ajuta un utilizator sa substituie caracterul a cu A ntr-un fis, ier?

q vim
q cut
q sed
q tr

7. Care din urmatoarele


NU este un avantaj al unui shell script?

q viteza mare de execut, ie


q automatizarea sarcinilor
q folosirea de componente existente
q depanare facila
8. Care este utilitatea shebang (#!)?

q permite editarea unui script shell

CAPITOLUL 12. SHELL SCRIPTING

q permite asocierea de drepturi de execut, ie unui script shell

q prezinta calea catre


utilitarul folosit pentru rularea scriptului

q este o linie de comentariu speciala ntr-un script shell

9. Care din urmatoarele


NU este o instruct, iune n Bash?

q for
q while
q until
q repeat

10. Care din urmatoarele


comenzi NU afis, eaza intrarile
din directorul curent?

q ls
q for i in *; do echo $i; done
q find .
q ls *

-mindepth 2 -type f

437

438

INTRODUCERE N SISTEME DE OPERARE

Tabelul 12.1: Condit, ii n shell


operator tip operanzi

-e
-f

1 fis, ier
1 fis, ier

-s

1 fis, ier

-d
-r
-w
-x
-O

1 fis, ier
1 fis, ier
1 fis, ier
1 fis, ier
1 fis, ier

-G

1 fis, ier

-nt

2 fis, iere

-ot

2 fis, iere

-eq
-ne
-gt

2 numere
2 numere
2 numere

-ge

2 numere

-lt

2 numere

-le

2 numere

2
s, iruri
de
caractere
2
s, iruri
de
caractere
1 s, ir de caractere

!=
-z

condit, ie verificata

utilizare

fis, ierul exista


fis, ierul este fis, ier obis, nuit
(regular file)
fis, ierul are dimensiune
non-zero
fis, ierul este director
fis, ierul poate fi citit
fis, ierul poate fi scris
fis, ierul poate fi executat
fis, ierul este det, inul de
utilizator
grupul ce det, ine fis, ierul
este s, i grupul utilizatorului
primul fis, ier este mai
recent dect al doilea
primul fis, ier este mai put, in
recent dect al doilea
numerele sunt egale
numerele nu sunt egalee
este mai
primul numar
mare dect al doilea
este mai mic
primul numar
sau egal cu al doilea
este mai mic
primul numar
dect al doilea
este mai mic
primul numar
sau egal cu al doilea
s, irurile sunt identice

-e fisier
-f fisier

s, irurile nu sunt identice

sir1 != sir2

s, irul este vid

-z sir

-s fisier
-d
-r
-w
-x
-O

fisier
fisier
fisier
fisier
fisier

-G fisier
fisier1 -nt
fisier2
fisier1 -ot
fisier2
numar1 -eq numar2
numar1 -nq numar2
numar1 -gt numar2
numar1 -ge numar2
numar1 -lt numar2
numar1 -le numar2
sir1 = sir2

CAPITOLUL 12. SHELL SCRIPTING

439

Tabelul 12.2: Comenzi utile Linux s, i Windows


Linux
Windows
Efect
pwd
ls
cd
mkdir
rmdir
touch
rm
cp
mv
cat
echo
less, more
cmp
diff
file
grep
shift
sort

cd
dir
cd
mkdir, md
rmdir, rm

del, erase
copy
move
type
echo
more
comp
fc
ftype
findstr
shift
sort

afis, eaza directorul curent


listeaza cont, inut director
schimba director
creeaza director
s, terge director
creeaza fis, ier
s, terge fis, ier
copiaza fis, ier
muta fis, ier
afis, eaza cont, inut fis, ier
afis, eaza mesaj
afis, are paginata fis, ier
compara fis, iere
compara s, i afis, eaza diferent, e
afis, eaza tipul fis, ierului
cauta n fis, ier
schimba parametrii pozit, ionali
sorteaza intrarea

Capitolul 13
Mediul grafic
A bus station is where a bus stops. A train station is
where a train stops. On my desk I have a workstation...
(Anonymous)

Ce se nvat, a din acest capitol?

Tipuri de imagini, fonturi, Unicode, UTF-8


Interfat, a grafica n Linux: X Window System
Componentele X Window System: window manager, desktop environment, display
manager
de baza:
rezolut, ia, aranjamentul caracterelor pe tastatura
Configurari

Configurarea sistemului folosind KDE


Servicii desktop
Configurare X peste SSH, VNC, RDC
cea mai utilizata metoda de interact, iune cu sistemul de operare
n momentul de fat, a,
avantaj fat, a de celelalte tipuri de interfet, e (CLI, TUI)
este interfat, a GUI. Principalul sau

(vezi s, i sect, iunea 2.3.1) consta n us, urint, a cu care utilizatorii nvat, a sa o foloseasca.
Evolut, ia interfet, elor grafice s-a realizat n paralel cu evolut, ia hardware-ului. Prima
ncercare de realizare a unei interfet, e grafice a avut loc n anii 60 la Institutul de
al Universitat
, ii Standford 1 . La acel moment, interfat, a grafica cuprindea un
Cercetari

mouse elementar cu ajutorul caruia


se puteau accesa link-uri n documentele text (text
hyperlinks).
interfet, ele grafice ncep sa pas
, easca n era 3D. Aero din Windows
n momentul de fat, a,
2
3
4
Vista/7 , Compiz /KWin din Linux s, i Quartz Compositor5 din MacOS X ofera
1

Stanford Research Institute http://www.sri.com/


http://www.microsoft.com/windows/windows-vista/features/aero.aspx
http://www.microsoft.com/windows/windows-7/features/aero.aspx
3
http://en.wikipedia.org/wiki/Compiz
4
http://en.wikipedia.org/wiki/KWin
5
http://arstechnica.com/apple/reviews/2005/04/macosx-10-4.ars/13
2

441

442

INTRODUCERE N SISTEME DE OPERARE

realizare participa n mare masur


a placa video s, i
utilizatorului o experient, a 3D la a carei

nu procesorul ca pna acum.

13.1

Concepte n mediul grafic

13.1.1

Tipuri de imagini

n funct, ie de modul de stocare a informat, iei, imaginile digitale se impart n doua tipuri:
imagini raster (bitmap) s, i imagini vectoriale.
O imagine raster (bitmap) ret, ine informat, ia ca o matrice de puncte.
De exemplu, fotografiile realizate cu o camera foto digitala sunt imagini raster. Este
BMP, JPEG, GIF,
formatul de imagini cel mai des folosit, avnd diverse implementari:
atunci cnd imaginea este
PNG etc. Dezavantajul acestui tip de imagini este ca,

redimensionata (scalata),
cont, inutul noii imagini trebuie aproximat din cont, inutul
imaginii init, iale. Aceasta aproximare se poate realiza cu rezultate bune n cazul n care
n cazul n care imagine este marit
a,
rezultatele sunt cu att
imaginea este mics, orata.
atoare

mai nesatisfac
cu ct factorul de scalare este mai mare, precum se poate vedea
n figura 13.1.

Figura 13.1: Marirea


unei imagini n format raster
Fiecare punct dintr-o imagine raster (bitmap) este descris prin mai multe componente,
n funct, ie de suportul de ies, ire:

pe ecran un punct dintr-o imagine raster este descris prin 3 valori reprezentnd

intensitatea luminoasa (pe 8 bit, i) a urmatoarelor


culori: ros, u (Red), verde

(Green), albastru (Blue) prescurtate RGB. n cazuri speciale (prelucrari

profesionale de imagini), intensitatea fiecarei


culori poate fi exprimata pe 16 bit, i
(crescnd astfel spectrul de culori ce poate fi reprezentat). De asemenea, pe
langa cele 3 componente (RGB), anumite imagini digitale (precum formatul PNG)
cont, in s, i o a 4-a componenta numita transparent, a (Alpha). Astfel, n cazul
imaginilor cu transparent, a (RGBA), pentru fiecare punct se asociaza s, i un nivel
permit, nd astfel ascunderea (totala sau part, iala)
a unor part
, i din
de transparent, a,
imagine.

CAPITOLUL 13. MEDIUL GRAFIC

443

pe suport tiparit,
un punct dintr-o imagine raster este descris prin 4 valori,
reprezentnd cantitatea de culoare necesara pentru obt, inerea culorii punctului din
patru componente: cyan (C), magenta (M), galben (Yellow), negru (black K)
ntr-o imagine vectoriala informat, iile sunt ret, inute sub forma elemente geometrice
linii, elipse, puncte s, i gradient, i de culoare.
de baza:
Avantajul major al acestor tipuri de imagini este acela ca sunt foarte us, or de

redimensionat (practic, culoarea fiecarui


punct din imagine poate fi calculata exact pe
(mics, orare sau
baza elementelor ce compun imaginea). n urma redimensionarii

marire),
calitatea imaginii nu se pierde (figura 13.2). Exista cteva formate mai
cunoscute care stocheaza cont, inutul n format vectorial, cele mai cunoscute fiind:
SVG1 , PS, EPS, PDF.

Figura 13.2: Marirea


unei imagini n format vectorial

13.1.2

Fonturi. Unicode

Fonturile sunt fis, iere ntr-un anumit format care cont, in informat, ii despre modul de
desenare a caracterelor pe ecran. Printre cele mai utilizate n prezent formate pentru
a True Type (.ttf) s, i Open Type (.otf).
fonturi se numar
Fonturile sunt de cele mai multe ori descrieri vectoriale ale aspectului caracterelor,
motiv pentru care ele pot scala att la dimensiuni foarte mici ct s, i la dimensiuni foarte
a pierderi calitative. Exista 4 stiluri mai cunoscute n care se poate prezenta un
mari far
font: normal, italic (caractere aldine caracterele sunt us, or nclinate spre dreapta), bold
(caracterele sunt ngros, ate), bold-italic (caractere aldine ngros, ate).
Init, ial, setul de caractere ASCII2 a necesitat 7 bit, i pentru reprezentare (un bit fiind folosit
, ii n transmiterea fiecarui

pentru calculul paritat


caracter). Acest lucru permitea existent, a
a 128 caractere, 33 dintre acestea fiind caractere de control. Ulterior, cnd bitul 8 nu
a mai fost folosit ca bit de paritate, folosirea acestuia a dus la extinderea setului de
caractere cu nca 128. Pe cele 128 de noi pozit, ii au fost plasate caractere s, i simboluri
dar s-a constatat necesitatea unor extensii.
1
2

acceptat de W3C ca standard pentru WWW http://www.w3.org/Graphics/SVG/


http://en.wikipedia.org/wiki/ASCII

444

INTRODUCERE N SISTEME DE OPERARE

Astfel, a aparut
not, iunea de pagina de coduri (code page)1 prin care erau definite noile
128 de caractere disponibile. Pentru o perioada de timp s-au folosit frecvent pagini de
coduri create fie pentru o anumita limba fie pentru grupuri de limbi.
Nevoia de a avea mai mult de 256 caractere accesibile la un moment dat a dus la
impunerea unui nou standard de reprezentare a setului de caractere Unicode (n
prezent ajuns la versiunea 5). Acesta permite reprezentarea prin pna la 4 octet, i a unui
caracter (folosind maxim 32 de bit, i). n acest fel sunt acoperite inclusiv caracterele
asiatice.
Exista mai multe standarde2 pentru codificarea caracterelor Unicode n fis, iere. Cel mai
folosit este UTF-8, format n care primele 128 de caractere sunt identice cu cele din
variabil de octet, i, numarul
de octet, i ocupat, i de un
ASCII. Acesta este un format cu numar
de bit, i de 1, pna la primul bit 0, din primul octet (ncepnd
caracter fiind dat de numarul
de la cel mai semnificativ bit3 ). Daca primul bit este 0, atunci caracterul ocupa un octet
s, i, n mod special, este acelasi caracter ca n setul ASCII. Daca un octet are primii bit, i
10, atunci este un octet care continua reprezentarea unui caracter. Mai multe informat, ii
online4 .
despre codificarea UTF-8 se pot gasi
n prezent, fonturile importante din sistemele de operare moderne au suport pentru un
semnificativ de caractere definite n standardul Unicode.
numar

13.2

Interfat, a grafica n Linux. Componente

13.2.1

X Window System

X Window System (cunoscut ca X11 sau ca X) este un cadru (framework) ce


permite dezvoltarea de interfet, e grafice n medii Unix.
Monitoarele (CRT sau LCD) afis, eaza imagini n format raster. Din acest motiv, imaginea

finala trimisa catre


acestea este n format raster.
X Window System permite: desenarea s, i mutarea ferestrelor pe ecran, interact, iunea

cu mouse-ul s, i interact, iunea cu tastatura. Restul este lasat


n seama programelor, motiv
pentru care aspectul vizual al interfet, elor grafice bazate pe X difera destul de mult de la
un sistem de operare la altul, sau chiar ntre versiunile aceluias, i sistem de operare.

X a fost creat n 1984 la MIT5 . Versiunea curenta a protocolului este X11 s, i a aparut
n

1987. n momentul de fat, a proiectul X este condus de catre


X.Org Foundation s, i a ajuns
la versiunea X11 Release 7.4.
1

http://en.wikipedia.org/wiki/Code_page
http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings
3
http://en.wikipedia.org/wiki/Most_significant_bit
4
http://en.wikipedia.org/wiki/UTF-8
5
http://www.mit.edu
2

CAPITOLUL 13. MEDIUL GRAFIC

13.2.2

445

Arhitectura X Window System

X Window System are o arhitectura de tip client-server: mai mult, i client, i X se


conecteaza la un server X (figura 13.3). Serverul accepta cereri de desenare a

obiectelor grafice s, i trimite napoi catre


client, i intrarile
(inputul) de la utilizator (preluate
mouse etc.).
de la tastatura,

Figura 13.3: Arhitectura X Window System


Serverul X este responsabil de administrarea resurselor ce permit interact, iunea cu
utilizatorul. Aceste resurse sunt: ecranul, tastatura, mouse-ul, touchpad-ul, stylus-ul,
joystick-ul etc. Serverul X ruleaza pe calculatorul care interact, ioneaza cu utilizatorul s, i

trimite intrarile
(inputul) primit de la acesta catre
client, i. Client, ii proceseaza informat, ia
primita de la server s, i i trimit acestuia napoi informat, ii pe care serverul le va afis, a
utilizatorului pe ecran. n prezent, cea mai utilizata implementare a server-ului X este
oferita de proiectul X.Org1 .
Client, ii X se conecteaza la un server X pentru a folosi resursele administrate de
acesta. Ei cer serverului sa afis, eze pe ecran obiecte grafice s, i preiau de la acesta

arile

intrarile
(inputul) utilizatorului, precum apas
de taste sau mis, carile
mouse-ului.
Client, ii pot rula local (pe acelas, i calculator cu serverul) sau pot rula pe un alt calculator
Exemple de client, i X: un browser web, un client de e-mail, un program
aflat la distant, a.
de mesagerie instant.
Protocolul X este protocolul utilizat n comunicat, ia dintre client, i X s, i serverul X.
, oara diferit fat, a de modelul general al
Comunicat, ia dintre client, i s, i server se desfas
comunicat, iei client-server. n general clientul, ca localitate, se afla pe calculatorul local
n cazul X Window System lucrurile
iar serverul se afla pe un calculator aflat la distant, a.
stau invers. Serverul se afla pe calculatorul local pentru a putea trimite s, i primi
informat, ii de la utilizator. Client, i se pot afla tot pe calculatorul local sau pe unul aflat la

distant, a.
n exemplul din figura 13.4, pe un calculator aflat la distant, a ruleaza trei client, i X. Acest
Fiecare
calculator poate sa nu aiba conectat niciun monitor s, i nici mouse sau tastatura.
din cei trei client, i este conectat la un alt server X (fiecare server X fiind pe un calculator
1

http://www.x.org/

446

INTRODUCERE N SISTEME DE OPERARE

Figura 13.4: Exemplu de conectare client-server folosind protocolul X


diferit). Fiecare server X preia datele de la utilizatorul local (de exemplu prin intermediul
tastaturii) s, i le transfera client, ului, primind napoi de la aces, ta informat, ii care trebuie
prezentate utilizatorului pe ecran. Toata procesarea informat, iei de la utilizator este
realizata de calculatorul aflat la distant, a (acolo unde se executa clientul). Practic, n
modelul de mai sus, calculatorul aflat la distant, a se ocupa de procesarea datelor,
calculatoarele 1, 2 s, i 3 funct, ionnd pe post de terminale.
X nu cont, ine nicio specificat, ie legata de felul n care arata interfat, a cu utilizatorul
(Application User Interface): modul n care arata butoanele, meniurile, ferestrele etc.

Aceste specificat, ii sunt implementate n schimb de catre


alte componente, precum
Window Manager -ul (manager-ul de ferestre), Desktop Environment-ul (mediul
desktop) sau de bibliotecile de componente grafice utilizate de aplicat, ie aplicat, ie.
Un window manager controleaza amplasarea s, i modul n care arata ferestrele aplicat, iilor.
Acesta este un tip special de client X (se conecteaza la serverul X ca orice alt client) care
controleaza felul n care arata ceilalt, i client, i X.
Window manager-ul face ca tot, i client, ii sa aiba caracteristici comune: bara de
titlu a ferestrei, butoanele de minimize s, i maximize etc. El poate crea o interfat, a
atoare

aseman
cu cea din Microsoft Windows sau cu cea din Mac OS X.
, i de baza (precum twm1 , window managerul
Window managerele pot oferi funct, ionalitat
, i complexe (cum ar fi Enlightenment ce se
care vine mpreuna cu X) sau funct, ionalitat
apropie ca funct, ionalitate de un desktop environment). Printre cele mai cunoscute
a:
Kwin2 este window managerul folosit de KDE, Metacity 3
window managere se numar
cel folosit de GNOME s, i Compiz 4 este cel utilizat pentru desenarea interfet, ei 3D din
proiectul cu acelas, i nume.
1

http://en.wikipedia.org/wiki/Twm
http://en.wikipedia.org/wiki/Kwin
3
http://en.wikipedia.org/wiki/Metacity
4
http://en.wikipedia.org/wiki/Compiz
2

CAPITOLUL 13. MEDIUL GRAFIC

447

n cazul n care aceasta componenta lipses, te, se vor putea crea ferestre noi dar nu vor
avea bara de titlu. n plus, ele nu vor putea fi mutate pe ecran, nu vor putea fi nchise cu
ALT+F4, nu va funct, iona ALT+TAB, nu se va putea muta o fereastra din fundal

(background) n prim-plan (foreground). n schimb, cont, inutul ferestrelor va ramne


neschimbat.
Stilul n care arata ferestrele (aspectul lor vizual) este controlat de o componenta
a window managerului numita window decorator. Acesta este responsabil cu
desenarea titlului ferestrei, a butoanelor s, i a marginii acesteia.
Un desktop environment (mediu desktop) include un window manager, mai multe
aplicat, ii s, i o interfat, a consistenta din punct de vedere vizual.
Cele mai cunoscute medii desktop sunt KDE1 (figura 13.5) s, i GNOME2 (figura 13.6).

Figura 13.5: KDE


Un display manager este un program care permite pornirea unei sesiuni pe un
Acesta este
server X de pe acelas, i calculator sau de pe unul aflat la distant, a.
implementat ca un tip special de client X.
Display managerul afis, eaza utilizatorului un ecran de autentificare (login) permit, ndu-i
Dupa ce autentificarea s-a
acestuia sa introduca un nume de utilizator s, i o parola.
Exemplu de display managere: kdm
realizat cu succes o noua sesiune este pornita.
(figura 13.7) folosit de KDE, gdm (figura 13.8) folosit de GNOME sau xdm, display
managerul implicit din X Window System.
Atunci cnd display managerul ruleaza pe acelas, i calculator cu serverul X, el va porni
serverul nainte de afis, a fereastra de autentificare. Astfel display manager-ul are o
atoare

funct, ie aseman
cu procesele login s, i getty(vezi sect, iunea 6.5.3).
1
2

http://en.wikipedia.org/wiki/KDE
http://en.wikipedia.org/wiki/GNOME

448

INTRODUCERE N SISTEME DE OPERARE

Figura 13.6: GNOME

Figura 13.7: Fereastra de login din Kubuntu (KDM)

13.3

Pornirea s, i oprirea interfet, ei grafice

n cazul n care interfat, a grafica nu pornes, te odata cu sistemul de operare, ea poate fi


, i:
pornita separat. Pentru a realiza acest lucru exista mai multe posibilitat
Folosind xinit

xinit este un program care pornes, te serverul X s, i un prim client care se conecteaza
la el. Utilizatorul nu mai trebuie sa se autentifice ntr-o fereastra de login deoarece el s-a
autentificat n sistem nainte de a rula comanda xinit. Atunci cnd acest prim client
s, i ncheie activitatea, xinit va opri serverul X:

CAPITOLUL 13. MEDIUL GRAFIC

449

Figura 13.8: Fereastra de login din Ubuntu (GDM)


1
2
3

george@asgard:~$ man xinit


[...]
The xinit program is used to start the X Window System server and a first
client program on systems that cannot start X directly from /etc/init or
in environments that use multiple window systems. When this first
client exits, xinit will kill the X server and then terminate.

Folosind startx

startx este un front-end pentru xinit care ofera utilizatorului o interfat, a mai

complexa:
1
2
3

george@asgard:~$ man startx


[...]
The startx script is a front end to xinit that provides a somewhat nicer
user interface for running a single session of the X Window System. It is
often run with no arguments.

Folosind un Display Manager


Atunci cnd un Display Manager este pornit pe calculatorul local, el va porni mai nti
un server X, urmnd ca apoi sa prezinte utilizatorului un ecran de autentificare. Dupa
autentificare este pornit un server X n numele utilizatorului.
ator

Pornirea unui Display Manager se poate face n mod aseman


serviciilor:
1

root@asgard:/home/george# service kdm start

ator.

Pentru gdm se procedeaza n mod aseman


Pentru oprirea interfet, ei grafice este suficienta oprirea display managerului. Acest lucru

se poate realiza n felul urmator:


1

root@asgard:/home/george# kill -9 *dm

Comanda anterioara opres, te toate procesele al caror


nume este orict de lung s, i se
termina cu s, irul de caractere dm.

450

INTRODUCERE N SISTEME DE OPERARE

O alta metoda de oprire a interfet, ei grafice este oprirea serviciului kdm (sau gdm) folosind
paramerul stop:
1

root@asgard:/home/george# service kdm stop

Pentru oprirea s, i repornirea imediata a interfet, ei grafice este suficient sa fie repornit
display managerul folosind serviciile kdm (sau gdm) nsa cu parametrul restart:
1

root@asgard:/home/george# service kdm restart

De asemenea oprirea s, i repornirea imediata a serverului X se poate realiza s, i prin


combinat, ia de taste Ctrl+Alt+Backspace.

13.4

Configurarea serverului X

Aceasta sect, iune se va concentra pe prezentarea modurilor de configurat, ie temporara


a server-ului X. KDE s, i GNOME vin cu aplicat, ii pentru configurarea permanenta a
server-ului X, salvnd configurat, iile n fis, iere specifice Desktop Environment-ului.
unui fis, ier de configurare a server-ului X a fost
n ultimele versiuni, necesitatea utilizarii
Fis, ierul de configurare utilizat n versiunile anterioare se numea
eliminata.
/etc/X11/xorg.conf.
Principalul dezavantaj al acestuia era faptul ca trebuia repornit server-ul la fiecare
modificare a fis, ierului. Fis, ierul mai poate fi utilizat n prezent pentru realizarea

configurarilor
permanente, dar, pentru simplitate n configurare, comenzile pentru
configurarea temporara se pot salva n fis, ierul ~/.xprofile.
Fis, ierul /etc/X11/xorg.conf, daca este folosit, trebuie structurat pe sect, iuni

specifice fiecarui
dispozitiv, dupa cum se poate observa s, i online1 sau n documentat, ia
man (man xorg.conf).

13.4.1

Configurarea rezolut, iei

Versiunile recente ale server-ului X implementeaza extensia Xrandr, extensie care


a repornirea mediului grafic) a rezolut, iei, dimensiunii
permite modificarea live (far
ecranelor etc. Acest lucru reprezinta un mare avantaj n cazul
desktop-ului, orientarii
sistemelor la care se conecteaza monitoare externe (precum laptop-urile).
frecvente
Extensia Xrandr poate fi utilizata folosind comanda xrandr. Cteva utilizari
ale comenzii sunt prezentate mai jos:
curente a sistemului grafic
afis, area starii
1
2
3
4
5
1

mircea@acorn:~$ xrandr
Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 1280 x
1280
VGA connected 1280x1024+0+0 (normal left inverted right x axis y
axis) 338mm x 270mm
1280x1024
60.0*+
75.0
60.0*
1152x864
75.0

https://wiki.ubuntu.com/X/Config/Resolution

CAPITOLUL 13. MEDIUL GRAFIC


1024x768
832x624
800x600
640x480
720x400

6
7
8
9
10

75.0
74.6
72.2
75.0
70.1

451
70.1

60.0

75.0
72.8

60.3
66.7

56.2
59.9

activarea tuturor monitoarelor conectate la rezolut, ia lor default:


1

mircea@acorn:~$ xrandr --auto

dezactivarea unui monitor (LCD-ul n acest caz):


1

mircea@acorn:~$ xrandr --output LVDS --off

activarea unei anumite rezolut, ii (se poate preciza opt, ional s, i rata de refresh
pentru 75 Hz se foloses, te parametrul --rate 75)
1

mircea@acorn:~$ xrandr --output LVDS --mode 1024x768

13.4.2

Configurarea tastaturii

ale tastaturii se numar


a aranjamentul caracterelor
Printre cele mai importante configurari
pe taste (keyboard layout). Aceasta configurat, ie este importanta mai ales n condit, iile n

care un utilizator dores, te sa scrie caractere care nu se gasesc


implicit pe tastatura.
n limba romna s-au impus mai multe standarde de-a lungul timpului. Unele
presupuneau nlocuirea completa a unor caractere de pe tastatura pentru includerea
diacriticelor. n 2004 a fost decis un nou standard pentru aranjamentul caracterelor
cu urmatoarele

romnes, ti pe tastatura,
specificat, ii (pe scurt):

caractere romnes, ti sunt disponibile ca aranjament secundar pentru tastatura US,

apasnd
tasta AltGr (tasta Alt din dreapta) majoritatea tastaturilor din
Romnia au aranjamentul US, foarte put, ine fiind inscript, ionate cu diacritice
romnes, ti n vechiul standard

a
diacriticele
a, , s, , t, sunt disponibile apasnd
AltGr s, i aceleas, i taste dar far
virgula (respectiv a, i, s, t)

este accesibil pe tasta q


pentru a obt, ine literele mari se apasa s, i tasta Shift
Astfel, pentru a obt, ine caracterul T, se apasa tastele: AltGr+Shift+t; pentru a obt, ine
caracterul se apasa AltGr+q.

Pe lnga acestea, aranjamentul permite s, i obt, inerea caracterului e(euro) prin apasarea
combinat, iei de taste AltGr+e.
O alta problema n cazul aranjamentului de tastatura pentru limba romna este modul
n care se formeaza diacriticele s, s, i t, . Mult, i utilizatori nu remarca faptul ca aceste doua
posibile: cu virgula (virgula
caractere (s, i literele mari echivalente) au doua reprezentari
este la o mica distant, a de caracter) s, i cu sedila (virgula este lipita de caracter).
Standardul realizat de Academia Romna ment, ioneaza ca diacriticele se construiesc
O mare parte din implementarile

folosind virgula.
de aranjamente din sistemele de
operare sunt gres, ite din acest punct de vedere.

452

INTRODUCERE N SISTEME DE OPERARE

Pentru a activa aranjamentul de tastatura pentru limba romna conform standardului, n


Linux se utilizeaza comanda:
1

mircea@acorn:~$ setxkbmap ro

n caz ca este necesara pentru compatibilitate, se poate activa


Varianta cu sedila,

folosind aceeas, i comanda dar adaugnd


s, i parametrul cedilla.

13.5

Configurarea sistemului din KDE

n Kubuntu, toate configurarile


importante ale sistemului sunt reunite ntr-un panou de
ator

comanda numit System Settings. Acest panou este aseman


ca funct, ionalitate cu
Control Panel din Windows s, i poate fi accesat din meniul de KDE (aflat n stnga jos,
n mod implicit).

13.5.1

System Settings

Pentru Kubuntu 9.10, fereastra de configurare este prezentata n figura 13.9.

Figura 13.9: System Settings n Kubuntu 9.10


desktop-ului s, i ale sistemului de operare:
Ea ofera acces la principalele configurari
legate de aspectul vizual, configurarea perifericelor, configurarea ret, elei etc.
configurari

13.5.2

Schimbarea aspectului interfet, ei grafice

legate de modul n care arata interfat, a grafica.


Se poate
Appearance cont, ine configurari
alege schema de culori a ferestrelor s, i a butoanelor (Colors), fonturile folosite pentru
afis, area textelor din interfat, a grafica (Fonts), icoanele folosite n sistem (Icons), stilul n
care arata elementele vizuale(Style), felul n care arata bara de titlu a ferestrelor (Window

Decorations), animat, ia care arata stadiul curent al procesului de narcare


KDE (Splash
vizuale.
Screen). Figura 13.10 prezinta un exemplu de configurari

CAPITOLUL 13. MEDIUL GRAFIC

453

Figura 13.10: Alegerea schemei de culori


Desktop permite modificarea fundalului (Background), a screen saver-ului (Screen

Saver ) sau a numarului


de desktop-uri (Multiple Desktops). n mod normal n Linux se
folosesc doua sau patru desktop-uri. Fiecare poate avea propria imagine de fundal s, i
propriile programe deschise.

n general, aplicat, iile sunt grupate de catre


utilizatori pe desktop-uri n funct, ie de utilitate.
De exemplu, pe desktop-ul 1 se poate deschide un web browser, pe desktop-ul 2 un
client de e-mail, pe desktop-ul 3 o tema de casa s, i pe desktop-ul 4 un program de
mesagerie instant. Avantajul oferit de aceasta abordare este acela ca fiecare desktop
devine mai liber, avnd mai put, ine programe deschise. De asemenea, acest mod de

organizare permite mai us, or concentrarea atent, iei pe anumite activitati.


legate de sunetele asociate diferitelor act, iuni din
Notifications cont, ine configurari
sistemul de operare (System Notifications). De asemenea tot n aceasta sect, iune se
pot defini s, i aplicat, iile care pornesc atunci cnd un disc este inserat n unitatea optica
(echivalentul opt, iunii autorun din Windows) (Storage Media Notifications).

13.5.3

de baza ale sistemului de operare


Configurari

About Me permite introducerea datelor personale ale utilizatorului s, i specificarea caii

catre
directoarele sale personale: directorul home, directorul unde se afla fis, ierele de pe
Desktop s, i directorul Autostart. n directorul de Autostart se pot pune scripturi
care vor fi rulate la pornirea KDE.
pentru persoanele cu dizabilitat
, i.
Accesibility ofera acces la diferire configurari
Default Applications permite specificarea aplicat, iilor folosite la deschiderea diferitelor
tipuri de fis, iere.
legate de regiunea n care se gases
, te
Regional & Language cont, ine configurari
utilizatorul (de exemplu modul n care sunt afis, ate numerele, separatorul pentru partea
tipul de calendar folosit,
zecimala a numerelor, simbolul pentru moneda utilizata,
formatul orei s, i al datei). Tot n aceasta sect, iune se poate alege tipul de tastatura (de
exemplu cu 104 sau 105 taste) s, i aranjamentul caracterelor pe taste. Figura 13.11

454

INTRODUCERE N SISTEME DE OPERARE

prezinta configurat, ia pentru tastatura n limba romna.

Figura 13.11: Tastatura n limba romna

13.5.4

administrative
Configurari

Date & Time permite configurarea datei s, i a orei sistemului. Tot aici se poate alege s, i

, te utilizatorul.
fusul orar corespunzator
zonei n care se gases
legate de tastatura s, i mouse. Una din cele
Keyboard & Mouse cont, ine configurari
mai importante opt, iuni prezente aici este cea legata de starea NumLock la init, ializarea

KDE. Se poate alege ca NumLock sa fie activat, dezactivat sau sa s, i pastreze


starea
n cadrul subsect, iunii Mouse se poate alege tema cursorului de la mouse.
anterioara.
Tot n aceasta sect, iune se pot configura combinat, iile de taste (shortcut) pentru diferite
funct, ii din KDE. Cele mai utilizate combinat, ii (cu valorile lor implicite) sunt prezentate n
tabelul 13.1.
Display permite, printre altele, alegerea uneia dintre rezolut, iile de ecran disponibile s, i a
parametrilor de culoare (gamma, luminozitate, contrast).
ale placii
audio.
Multimedia cont, ine configurari

13.5.5

Configurarea ret, elei

ale ret, elei.


n System Settings, la Network Settings se pot face configurari
n Network Connections > Wired apare lista conexiunilor configurate (figura 13.12).
Alegnd una din aceste conexiuni se pot configura parametrii ei [referint, a la parametrii
de ret, ea], precum n figura 13.13.

13.5.6

Managementul utilizatorilor

Configurarea utilizatorilor se realizeaza folosind aplicat, ia KDE User Manager (kuser)


figura 13.14.

CAPITOLUL 13. MEDIUL GRAFIC

455

Tabelul 13.1: Combinat, ii de taste uzuale n KDE


Combinat, ia
taste

de

Act, iune

Deschide fereastra de ajutor


Deschide fereastra de Run de unde se poate porni o aplicat, ie
specificnd numele executabilului
Ctrl+Esc
Pornes, te aplicat, ia System Activity n care este afis, ata o lista a
proceselor active
ntre 1 s, i 4)
Ctrl+Fn
Face trecerea la desktop-ul n (n este un numar
Alt+Tab
sau Face trecerea de la o aplicat, ie la alta. Folosind tasta Shift se
Alt+Shift+Tab cicleaza aplicat, iile n ordine inversa
Alt+F4
nchide fereastra activa
Ctrl+Alt+Esc Aceasta combinat, ie permite terminarea unei aplicat, ii n mod fort, at.
cursorul mouse-ului
Dupa ce combinat, ia de taste a fost efectuata,
se va transforma (cel mai uzual ntr-un X) s, i fereastra pe care se
va realiza click va fi terminata n mod fort, at. Funct, ionarea aplicat, iei
este similara comenzii kill

F1
Alt+F2

Figura 13.12: Configurarea conexiunilor la ret, ea

Aici se pot adauga,


s, terge sau modifica utilizatorii din sistem. Se pot modifica numele
de login, numele real al utilizatorului, grupurile din care face parte etc. Pentru a modifica
datele unui utilizator se selecteaza utilizatorul dorit s, i se apasa butonul Modify, fereastra
afis, ata fiind prezentata n figura 13.15.

13.5.7

Monitorizarea sistemului s, i managementul proceselor

Aplicat, ia KDE pentru monitorizarea sistemului este System Monitor (comanda


ksysguard). Aceasta vine implicit mpreuna cu Kubuntu.
unul pentru managementul s, i
Aplicat, ia are doua tab-uri n configurat, ia implicita:
monitorizarea proceselor (figura 13.16) s, i unul pentru monitorizarea sistemului

456

INTRODUCERE N SISTEME DE OPERARE

Figura 13.13: Configurarea parametrilor de ret, ea de baza

Figura 13.14: Administararea utilizatorilor n KDE User Manager

(figura 13.17). Daca se dores, te, lista de procese poate fi afis, ata sub forma de arbore.

De asemenea, n partea de sus a ferestrei se afla un cmp Search se permite cautarea


unui proces n lista dupa numele lui. Un proces poate fi oprit n mod fort, at daca este

selectat din lista s, i este apasat


butonul Kill.
Pentru monitorizarea sistemului, aplicat, ia pune la dispozit, ie o colect, ie de senzori ale

caror
valori pot fi grupate n tab-uri personalizate, precum se poate observa n
figura 13.18.

CAPITOLUL 13. MEDIUL GRAFIC

457

Figura 13.15: Modificarea datelor unui utilizator

Figura 13.16: System Monitor lista de procese

13.5.8

Gestiunea pachetelor

Exista mai multe utilitare pentru a realiza gestiunea pachetelor folosind interfat, a grafica.
n Kubuntu, aplicat, ia utilizata pentru managementul pachetelor se numes, te
KPackageKit.
Figura 13.19 prezinta interfat, a KPackageKit pentru realizarea

actualizarilor.

Aplicat, ia permite gestiunea repository-urilor, actualizarea bazei de date cu pachete,

cautarea
de pachete dupa nume, instalarea de pachete noi, dezinstalarea de pachete
s, i actualizarea tuturor pachetelor din sistem.

458

INTRODUCERE N SISTEME DE OPERARE

Figura 13.17: System Monitor monitorizarea sistemului

Figura 13.18: System Monitor senzori care pot fi folosit, i n tab-uri personalizate

13.6

Servicii desktop

13.6.1

Pornirea facila a aplicat, iilor

KDE versiunea 4 a introdus n KDE un nou serviciu de pornire a aplicat, iilor. El nlocuies, te
atoare

vechea fereastra de Run (aseman


cu cea din Windows) cu o fereastra n care

utilizatorul este ajutat dinamic sa identifice aplicat, ia pe care dores, te sa o porneasca.


Accesul la aceasta fereastra de execut, ie se face folosind combinat, ia de taste Alt+F2
aceeas, i combinat, ie ca n KDE3 s, i n Gnome.
n urma introducerii ctorva litere din numele sau descrierea aplicat, iei (figura 13.20),
fereastra se va completa cu aplicat, iile posibile. Aceeas, i fereastra poate fi folosita s, i

CAPITOLUL 13. MEDIUL GRAFIC

459

Figura 13.19: KPackageKit aplicat, ia pentru managementul pachetelor

Figura 13.20: Fereastra de execut, ie a aplicat, iilor


pentru realizarea de calcule simple doar se introduce calculul dorit urmat de semnul

egal (spre exemplu: .19 * 2000 = ) s, i rezultatul apare n lista.

13.6.2

Cautarea
fis, ierelor n sistem

date pe calculatorul propriu, fiecare sistem


n prezent, pentru ca utilizatorul sa poata gasi

de operare modern ofera un serviciu de cautare


a fis, ierelor. n general, acest serviciu se
bazeaza pe un daemon care indexeaza permanent fis, ierele din sistem. La indexare, pe
lnga numele s, i locat, ia fis, ierelor, daemon-ul de indexare poate colecta att cont, inut ct
s, i metadate ale fis, ierului (spre exemplu, n cazul fis, ierelor MP3, se indexeaza s, i tag-urile
fis, ierului precum artistul, numele melodiei etc.).

Serviciile de cautare
din sistemele de operare pe cele mai cunoscute sunt urmatoarele:

460

INTRODUCERE N SISTEME DE OPERARE

Windows Windows Search1


Linux Strigi2 (KDE), Beagle3 (GNOME)
Mac OS X Spotlight 4
arilor

Utilizatorul poate instala s, i solut, ii third-party pentru realizarea caut


n sistem. Cea
mai cunoscuta solut, ie pentru cautare pe desktop oferita ca aplicat, ie separata este
Google Desktop Search5 .

13.6.3

Notificari

Sistemele de operare moderne pun la dispozit, ia aplicat, iilor servicii de notificare a

utilizatorului. Astfel, notificarile


au un aspect consistent, efortul pentru dezvoltarea

aplicat, iilor scade s, i cres, te nivelul de utilizabilitate. n Linux exista suport pentru notificari
generice prin intermediul bibliotecii libnotify.
Pe lnga sistemele de notificare puse la dispozit, ie de desktop, majoritatea interfet, elor
grafice pun la dispozit, ie o zona n dreptul ceasului pentru icoanelor aplicat, iilor care
doresc sa notifice utilizatorul (pe bara de aplicat, ii sau pe bara cu meniul desktop-ului).
Aceasta zona mai este numita tray (sau system tray ).

13.7

Aplicat, ii KDE vs. GNOME

Alegerea ntre KDE s, i GNOME apart, ine fiecarui


utilizator s, i se poate baza pe mai multe
criterii, precum aspectul vizual s, i nivelul de funct, ionalitate dorit. Tabelul 13.2 prezinta
comparativ aplicat, iile cele mai uzuale de KDE s, i GNOME.
Aplicat, iile prezentate nu reprezinta restrict, ii de utilizare. Ele se pot executa att pe s, i
KDE ct s, i pe GNOME daca sunt instalate bibliotecile necesare6 .

13.8

Studii de caz

13.8.1

Configurarea X peste SSH

As, a cum a fost prezentat s, i la nceputul capitolului, arhitectura X Window System


permite comunicarea prin ret, ea ntre client, ii X s, i serverul X. Aceasta comunicare se
poate realiza folosind mai multe protocoale, printre care s, i SSH. SSH este un protocol
care permite comunicarea ntre doua calculatoare utiliznd un canal securizat
(sect, iunea 9.2.2). SSH poate astfel securiza mesajele dintre client, ii s, i serverul X
1

http://www.microsoft.com/windows/products/winfamily/desktopsearch/default.mspx
http://strigi.sourceforge.net/
3
http://beagle-project.org/
4
http://www.apple.com/macosx/what-is-macosx/spotlight.html
5
http://desktop.google.com/
6
bibliotecile sunt instalate automat la instalarea aplicat, iilor
2

CAPITOLUL 13. MEDIUL GRAFIC

Aplicat, ie

Tabelul 13.2: Aplicat, ii KDE s, i GNOME


KDE

Configurarea Sistemului
Gestiunea pachetelor
Monitorizarea sistemului
File Manager
Editor de text
Emulator de consola
Calculator
Video Player
Audio Player
nscriptor de CD/DVD
Viewer de imagini
Viewer PDF
Browser Web
(figura 13.21).
Forwarding.

461

System Setings
KPackageKit
System Monitor (KSysGuard)
Konqueror, Dolphin
Kate
Konsole
Kcalc
Kaffeine
Amarok
K3B
Gwenview
Okular
Konqueror

GNOME

Meniul System
Synaptic Packet Manger
System Monitor
Nautilus
Gedit
gnome-terminal
Gcalctool
Totem
Rhythmbox
Brasero
Eye of GNOME
Evince
Epiphany

Opt, iunea SSH care permite acest lucru poate se numes, te X11

Figura 13.21: Conexiunea client server X peste SSH


Pentru a putea rula un client X aflat la distant, a peste SSH, primul pas este configurarea
protocolului SSH n acest sens (activarea X11 Forwarding). Cea mai simpla metoda
este specificarea parametrului -X atunci cnd se realizeaza conexiunea SSH de pe
calculatorul utilizatorului (unde este server-ul X) pe calculatorul unde se va executa
clientul X.
Comanda cu care se realizeaza conexiunea SSH pentru a permite ncapsularea
protocolului X este:
1

george@asgard:~$ ssh george@192.168.1.10 -X

se poate porni un client X. De exemplu, se


Dupa ce conexiunea SSH a fost stabilita,
poate porni KCalc:
1

george@acasa:~$ kcalc

Dupa cum se poate observa n figura 13.22, bara de titlu a ferestrei KCalc specifica
, te pe calculatorul
faptul ca aceasta fereastra corespunde unui client care nu se gases
local (<@acasa>).

462

INTRODUCERE N SISTEME DE OPERARE

Figura 13.22: Pornirea unei aplicat, ii X peste SSH


Folosind X peste SSH se poate executa s, i un ntreg Desktop Environment, nu doar
programe individuale. Acest lucru nu este nsa uzual datorita alternativelor mai bune
existente n acest sens (vnc, freenx etc.). Conexiunea SSH necesita criptare s, i
decriptare acest lucru presupune consumul unor resurse hardware suplimentare.
Pentru a putea rula X peste SSH folosind pe calculatorul local Windows (server X) s, i
Linux pentru client, ii X, trebuie ca pe calculatorul local sa fie instalat Cygwin (sau un alt
server X instalabil pe Windows).

13.8.2

Instalarea s, i configurarea VNC

VNC (Virtual Network Computing) este unul dintre cele mai folosite sisteme de vizualizat
VNC se bazeaza pe protocolul RFB (Remote
desktop-ul unui calculator aflat la distant, a.
Frame Bufer ) s, i de aceea poate fi folosit ntre sisteme de operare diferite (Windows,
Linux, Mac OS X).

VNC funct, ioneaza pe sistemul client server. Pe calculatorul aflat la distant, a (al carui
desktop va fi vizualizat) ruleaza un server de VNC la care se conecteaza un client aflat
pe calculatorul local. La un server se pot conecta mai mult, i client, i simultan. Un client
poate sa vizualizeze desktop-ul calculatorului pe care ruleaza serverul VNC sau, daca
este permis din configurarea server-ului, poate sa s, i interact, ioneze cu el (de exemplu
schimbnd pozit, ia cursorului mouse-ului). Figura 13.23 prezinta o astfel de sesiune
VNC.
Serverul de VNC preia de cteva ori pe secunda imaginea care se afis, eaza pe ecran s, i o
trimite tuturor client, ilor. n cazul n care client, ii i cer acest lucru, serverul poate accepta
de la aces, tia cereri de mis, care a cursorului mouse-ului, de efectuare de click-uri de
mouse sau de introducere de caractere. n acest fel, utilizatorul poate prelua controlul
calculatorului pe care ruleaza serverul de VNC.

CAPITOLUL 13. MEDIUL GRAFIC

463

Figura 13.23: Conectarea prin VNC folosind un client Windows s, i un server Linux
Folosind VNC este posibil ca mai mult, i utilizatori sa aiba simultan controlul unui
calculator. De cele mai multe ori, nainte de a putea accesa un server de VNC,
utilizatorul trebuie sa se autentifice. Acest lucru se realizeaza pe baza unui nume de
utilizator s, i a unei parole.
Att n Windows ct s, i n Linux exista mai multe programe, att server ct s, i client,
care implementeaza VNC. Pentru Linux, unul dintre cele mai simple servere VNC este
x11vnc. Odata instalat, acest server este pornit prin apelarea comenzii x11vnc:
1
2

george@acasa:~$ x11vnc -usepw


10/09/2007 22:48:59 -usepw: found /home/george/.vnc/passwd

3
4
5

[...]
10/09/2007 22:48:59 *** Trying ":0" in 4 seconds.

Press Ctrl-C to abort.

6
7
8

10/09/2007 22:48:59 *** 1 2 3 4


10/09/2007 22:49:03 *** XOpenDisplay of ":0" successful.

9
10
11
12
13

10/09/2007
10/09/2007
10/09/2007
10/09/2007

22:49:03
22:49:03 Using X display :0
22:49:03
22:49:03 X display :0.0 is 32bpp depth=24 true color

14
15
16
17
18
19

FrameBuffer Info:
width:
height:
scaled_width:
scaled_height:

1280
1024
1280
1024

20
21

[...]

22
23
24

The VNC desktop is:


PORT=5900

acasa:0

Comanda trebuie apelata de catre


utilizatorul care este autentificat n interfat, a grafica.
serverul se va opri.
Implicit, dupa ce ultimul client se deconecteaza,
Pentru a securiza accesul client, ilor pe baza unei parole, x11vnc trebuie pornit cu
opt, iunea -usepw.
n acest caz serverul va verifica daca exista fis, ierul

464

INTRODUCERE N SISTEME DE OPERARE

din el va fi citita parola ce va fi ceruta


~/.vnc/passwd. n cazul n care fis, ierul exista,
utilizatorului i se va cere o parola ce va fi stocata n
client, ilor. Daca fis, ierul nu exista,

~/.vnc/passwd s, i va fi folosita la urmatoarele


instant, e ale serverului.
Exista mai mult, i client, i VNC n Linux: xvnc4viewer, xvncviewer etc.
Si
n Windows exista servere ct client, i VNC. Unele programe sunt gratuite (ca de

exemplu tightVNC), altele trebuie cumparate


(ca de exemplu RealVNC, ce dispune s, i
de o versiune gratuita dar limitata ca opt, iuni).
O alternativa la VNC este FreeNX. Acest program trimite datele ntre client s, i server
peste SSH, nsa comprima datele nainte de a le trimite. n acest fel reus, es, te sa obt, ina

, ime de banda consumata.

performant, e superioare VNC-ului ca timp de raspuns


s, i ca lat

13.8.3

Remote Desktop Connection

RDC (Remote Desktop Connection) este o aplicat, ie care funct, ioneaza n mod similar cu
VNC s, i care permite unui utilizator sa acceseze de la distant, a desktop-ul unui calculator.
Aceasta aplicat, ie este disponibila doar mpreuna cu Windows XP Professional sau cu
Windows Vista Business, Ultimate sau Enterprise.
n comparat, ie cu VNC, RDC are avantajul ca este instalat odata cu instalarea Windows.
Dezavantajul RDC este acela ca nu permite accesarea desktop-ului simultan local s, i de
Cu alte cuvinte, atunci cnd un utilizator este autentificat local pe calculator
la distant, a.
s, i interact, ioneaza direct cu sistemul de operare, nu este posibil ca altcineva sa fie
autentificat prin RDC s, i sa vada act, iunile primului utilizator. n momentul n care se
ncearca autentificarea prin RDC, utilizatorul local este deconectat. Atunci cnd un
utilizator aflat la distant, a este autentificat prin RDC s, i un utilizator local ncearca s, i el sa
se autentifice, utilizatorul aflat la distant, a este deconectat.
Pentru utilizarea RDC, acesta trebuie activat pe calculatorul server (calculatorul care va
Pentru a realiza acest lucru pe Windows XP se acceseaza
fi controlat de la distant, a).
System Properties (click dreapta pe My Computer, apoi Properties), dupa care din tabul
Remote se bifeaza Allow users to connect remotely to this computer (figura 13.24).
ale programelor de tip firewall (vezi
Este posibil sa fie necesare configurari
sect, iunea 10.5.1) existente pe cele doua calculatoare ntre care se dores, te realizarea

legaturii.
Pentru a realiza conexiunea, de pe calculatorul local trebuie pornit clientul de RDC
(figura 13.25). Acesta se acceseaza prin Start > All Programs > Accessories >
Communications > Remote Desktop Connection sau Start > All Programs >
Accessories > Remote Desktop Connection.
Pentru conectarea la calculatorul aflat la distant, a este necesara adresa IP a acestuia.
Folosind butonul Options se pot configura parametrii conexiunii RDC (figura 13.26).
utilizatorul trebuie sa se autentifice (figura 13.27).
Dupa ce conexiunea a fost init, ializata,
Dupa ce autentificare este realizata cu succes, desktop-ul calculatorului afla la distant, a
ator

poate fi accesat, aseman


unei conexiuni VNC.

CAPITOLUL 13. MEDIUL GRAFIC

465

Figura 13.24: Activarea RDC

Figura 13.25: Fereastra clientului de RDC


Cuvinte cheie

aplicat, ii grafice

RDC

client X

server X

desktop environment: KDE, GNOME

servicii desktop

diacritice

Unicode

display manager: gdm, xdm, kdm

UTF-8

font

VNC

grafica raster

window manager:

grafica vectoriala
GUI
keyboard layout
protocolul X
rezolut, ie

Compiz

X Forwarding
X Window System
X.Org
xinit, startx
Xrandr

Kwin,

Metacity,

466

INTRODUCERE N SISTEME DE OPERARE

Figura 13.26: Configurarea opt, iunilor conexiunii RDC

Figura 13.27: Autentificarea RDC

ntrebari

1. Care din urmatoarele


formate de fis, iere NU este un format vectorial?

q PDF
q True Type font
q PNG
q SVG

2. Care dintre urmatoarele


este un standard pentru descrierea modul de codificare a
caracterelor intr-un fis, ier?

CAPITOLUL 13. MEDIUL GRAFIC

467

q True Type
q Unicode
q UTF-8
q RGB
3. Un Display Manager are rolul de a:

q controla felul n care arata ferestrele


q permite unui utilizator sa se autentifice n interfat, a grafca
q controla deschiderea s, i nchiderea ferestrelor
q gestiona cont, inutul ferestrelor

4. Care dintre urmatoarele


perechi NU cont, ine elemente cu acelas, i rol?

q KDE s, i GNOME
q kdm s, i gdm
q Kwin s, i Metacity
q Xorg s, i bitmap
dar care NU
5. Utilizatorul Dorel lucraza pe un calculator cu interfat, a grafica instalata,

este pornita. El ncearca sa porneasca interfat, a folosind comanda urmatoare


dar
nu reus, es, te. De ce?
1

dorel@home:~$ service kdm start

q scriptul kdm nu porneste interfat, a grafica


q Dorel nu are dreptul sa porneasca serviciul kdm
q Dorel trebuia sa ruleze scriptul startx nainte de a rula scriptul kdm
q Dorel trebuia sa ruleze scriptul startx dupa ce a rulat scriptul kdm
6. Care dintre urmatoarele NU este o metoda de control de la distant, a a unui
calculator?

q X peste SSH
q VNC
q Spotlight
q Remote Desktop Connection

7. Care dintre urmatoarele


NU este un Window Manager?

q KDE
q Compiz
q Kwin
q Metacity

468

INTRODUCERE N SISTEME DE OPERARE

8. Care dintre urmatoarele


aplicat, ii este utilizata n mediul grafic pentru monitorizarea

ocuparii resurselor hardware?

q top
q System Information (ksysguard)
q htop
q free
9. Un Window Manager controleaza felul n care arata ferestrele aplicat, iilor. Un client

X preia intrarea
(input-ul) direct de la utilizator.

q adevarat,
adevarat

q adevarat,
fals

q fals, adevarat

q fals, fals

10. Care dintre urmatoarele


NU reprezinta un client X?

q Kcalc
q gnome-terminal
q Xorg
q kdm

Capitolul 14
Utilitare pentru dezvoltare
First learn computer science and all the theory. Next
develop a programming style. Then forget all that and
just hack.
George Carrette

Ce se nvat, a din acest capitol?

Convent, ii de codare
Editorul Vim
Sisteme de control a versiunii; Subversion s, i Git
Parcurgerea rapida a codului
Compilarea unei aplicat, ii din surse
Zonele unui executabil s, i proces
Depanarea unui program folosind GDB, ddd s, i Valgrind
IDE-uri: Eclipse, Anjuta, Microsoft Visual Studio
Gestiunea unui proiect software

14.1

Introducere

, i ale specialis, tilor n


Dezvoltarea aplicat, iilor este una din principalele activitat
calculatoare. Procesul de dezvoltare necesita un set de utilitare pe care programatorul
(dezvoltatorul software le foloses, te), de la editoare s, i utilitare de parcurgere a codului,
a a s, i propune sa
pna la utilitare de depanare s, i investigare a execut, iei aplicat, iei. Far
acopere la nivel de detaliu aceste utilitare, capitolul de fat, a prezinta principalele utilitare
folosite de un dezvoltator de software pe un sistem Unix/Linux. Multe dintre acestea
sunt portate pe Windows s, i Mac OS X. n general, dezvoltarea de aplicat, ii pe un sistem
Linux presupune folosirea de utilitare dedicate (editoare, compilatoare, depanatoare,
mecanisme de documentare), n vreme ce dezvoltatorii de aplicat, ii pe sisteme Windows
folosesc, de obicei, un mediu integrat de dezvoltare (IDE Integrated Development
469

470

INTRODUCERE N SISTEME DE OPERARE

Environment); cel mai cunoscut este Microsoft Visual Studio (vezi sect, iunea 14.12.1).
Totus, i, s, i n Linux sunt folosite IDE-uri precum Eclipse sau Anjuta (vezi sect, iunea 14.9).

14.2

Coding style (indent, astyle)

Una dintre gres, elile frecvente realizate de programatorii ncepatori


este credint, a ca vor
putea nt, elege codul sursa scris de ei ns, is, i oricnd n viitor1 . Scrierea unui cod
a comentarii este, de obicei, echivalenta cu scrierea unui cod
dezorganizat, far
nementenabil.
Pentru a preveni situat, iile n care se consuma timp pentru nt, elegerea codului scris de
altcineva trebuie respectate un set de norme de baza pentru editarea codului. Folosirea
acestor norme ajuta s, i lucrul ntr-o echipa de dezvoltare, cnd mai mult, i dezvoltatori
ajung sa parcurga codul scris de un altul.
Diverse proiecte software colecteaza normele preferate (sau obligatorii) de redactare
a codului ntr-un document de stil de codare (coding style, programming style, coding
standards, code conventions). Exemple sunt Java2 , GNU3 , BSD4 , Linux5 , Python6 , PHP7
etc.
Stilurile de codare variaza n funct, ie de limbajul de programare sau de proiect, dar exista
at
, irea ulterioara a codului.
un set de reguli comune care faciliteaza nt, elegerea s, i mbunat
Exemple de astfel de reguli sunt:

folosirea de nume relevante pentru variabile; se prefera denumirea num_files


n loc de num_var, EncryptMessage n loc de DoStuff sau tmp n loc de
TemporaryVariabileForStoringIntegerArraySize; variabilele de
genul i, j se considera implicite pentru parcurgerea vectorilor iar folosirea lor nu

trebuie detaliata;

indentarea codului; corpul unui bloc de instruct, iuni se indenteaza fie cu TAB fie cu
spat, ii;

spat, ii/linii libere; pentru lizibilitate se recomanda folosirea spat, iilor libere ntre
unei
argumentele unei funct, ii, nainte s, i dupa simbolul = n momentul init, ializarii
variabile etc. s, i a liniilor libere pentru separarea blocurilor de instruct, iuni;

funct, ii kilometrice; corpul funct, iilor trebuie limitat pentru a fi us, or de parcurs; funct, ii
, esc doua ecrane trebuie evitate;
care depas

comentarii; codul trebuie comentat pentru a facilita nt, elegerea acestuia;


comentariile nu trebuie sa fie redundante, trebuie sa ajute programatorul acolo
unde codul este dificil de nt, eles;
1

Eaglesons Law of Programming: Any code of your own that you havent looked at for six or more
months, might as well have been written by someone else.
2
http://java.sun.com/docs/codeconv/
3
http://www.gnu.org/prep/standards/
4
http://www.freebsd.org/cgi/man.cgi?query=style&sektion=9
5
http://lxr.linux.no/#linux+v2.6.31/Documentation/CodingStyle
6
http://www.python.org/dev/peps/pep-0008/
7
http://pear.php.net/manual/en/standards.php

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

471

consecvent, a stilului; este mai bine sa se scrie un cod greu lizibil, dar care are o
consecvent, a n stil chiar ilizibil dect sa se foloseasca mai multe stiluri, fie ele
s, i bune.

indent, astyle n situat, iile n care fis, ierele sursa cont, in cod indentat necorespunzator,
se pot folosi utilitare precum indent sau astyle.

Utilitarul indent indenteaza corespunzator


codul C, conform unor opt, iuni configurabile
introducerea de linii libere, afis, area
prin argumente: spat, ierea s, i indentarea folosita,
codului de funct, ii, pentru blocuri if s, i for, afis, area comentariilor.

indent permite integrarea diverselor opt, iuni n ceea ce se numes, te stil


(COMMONSTYLES). n mod implicit se foloses, te stilul de codare folosit de GNU1 .

Fis, ierul 14.1 cont, ine cod indentat necorespunzator.


Folosind comanda de mai jos se va
obt, ine
fis, ierul 14.2 formatat folosind stilul GNU.
1

razvan@valhalla:~/development$ indent ugly-code.c -o ugly-code-default.c

Opt, iunea -o este folosita pentru a specifica fis, ierul de ies, ire. n absent, a acesteia se

modifica direct fis, ierul sursa.


1

#include<stdio.h>

2
3
4
5
6
7
8
9
10
11
12
13
14

int main(){ int i;


int par=0,impar=0;
int
sum= 0;
for(i=0;i<100;i++){
sum=sum+i;
printf("partial sum is %d\n",sum);
if(sum%2==0)
{ printf("par\n");
par++;}
else {printf("impar\n"); par--;}
}
return 0;}

Listing 14.1: Fis, ier indentat necorespunzator


1

#include<stdio.h>

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

int
main ()
{
int i;
int par = 0, impar = 0;
int sum = 0;
for (i = 0; i < 100; i++)
{
sum = sum + i;
printf ("partial sum is %d\n", sum);
if (sum % 2 == 0)
{
printf ("par\n");
par++;
1

http://www.gnu.org/prep/standards/

472
}
else
{

17
18
19

printf ("impar\n");
par--;

20
21

}
}
return 0;

22
23
24
25

INTRODUCERE N SISTEME DE OPERARE

Listing 14.2: Fis, ier formatat cu stilul GNU


Folosind alte opt, iuni se pot specifica alte stiluri de coding: -kr pentru stilul Kernighan &
Ritchie, -linux pentru stilul Linux, -orig pentru stilul init, ial BSD.
Fis, ierul 15.8 este formatat folosind stilul Linux, folosind comanda:
1

razvan@valhalla:~/development$ indent -linux ugly-code.c -o ugly-codelinux.c

#include<stdio.h>

2
3
4
5
6
7
8

int main()
{
int
int
int
for

9
10
11
12
13
14
15
16
17

}
return 0;

18
19
20

i;
par = 0, impar = 0;
sum = 0;
(i = 0; i < 100; i++) {
sum = sum + i;
printf("partial sum is %d\n", sum);
if (sum % 2 == 0) {
printf("par\n");
par++;
} else {
printf("impar\n");
par--;
}

Listing 14.3: Fis, ier formatat cu stilul Linux


Utilitarul astyle1 (Artistic Style permite indentarea s, i formatarea codului C, C++, C# s, i
Java. La fel ca s, i indent, astyle are diverse opt, iuni de formatare s, i stiluri predefinite.
O lipsa a utilitarului astyle este absent, a opt, iunilor de introducere de spat, ii. Comenzile
de mai jos formateaza un fis, ier conform stilurilor GNU, Linux sau Kernighan & Ritchie:
1

razvan@valhalla:~/development$ astyle --style=gnu < ugly-code.c > uglycode-astyle-gnu.c

2
3

razvan@valhalla:~/development$ astyle --style=linux < ugly-code.c > uglycode-astyle-linux.c

4
5

razvan@valhalla:~/development$ astyle --style=k\&r < ugly-code.c > uglycode-astyle-kr.c


1

http://astyle.sourceforge.net/

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

14.3

473

Editorul Vim

Editoarele reprezinta utilitarele de baza pentru un dezvoltator de aplicat, ii. Editoarele


, i pentru parcurgerea, prelucrarea s, i editarea
profesioniste vor oferi acestuia facilitat
Editoarele profesioniste vor oferi funct, ionalitat
, i de colorare
rapida a fis, ierelor cod sursa.
a sintaxei (syntax highlighting), colapsarea codului (code folding), indentare automata
etc.
n lumea Unix, cele mai cunoscute editoare sunt Vim s, i GNU Emacs.

, ile editorului Vim.


urmatoare
prezinta modul de lucru s, i funct, ionalitat

Sect, iunea

Unul dintre cele doua editoare protagoniste, tradit, ional, ale razboiului
editoarelor1 este

vi. Pentru ca programul original nu mai este activ dezvoltat, au aparut


numeroase
clone, derivate ale codului, sau rescrieri complete. Cel mai cunoscut astfel de program
este Vim2 , dezvoltat de Bram Moolenaar.
Pentru
Majoritatea distribut, iilor de Linux vin cu o clona de vi minimala preinstalata.

recomandam,

majoritatea exemplelor urmatoare,


aceasta nu este suficienta;
deci,
instalarea pachetului vim ntreg. n sistemele Debian, de exemplu, pachetul instalat
implicit se numes, te vim-tiny, iar cel cu mai multe opt, iuni vim. Pentru varianta care
exista vim-full.
include interfat, a grafica,

Pornirea editorului. Moduri


avnd drept parametru opt, ional numele fis, ierului
Vim poate fi pornit din linie de comanda,
pe care sa l ncarce. Lipsa acestui parametru nseamna editarea unui fis, ier nou.
Odata pornit, editorul nu funct, ioneaza convent, ional. El este n modul Normal, unde nu
Vim poate
este posibila introducerea textului. Funct, ie de sarcina care trebuie ndeplinita,
3
fi ntr-unul dintre modurile de mai jos :

Normal faciliteaza deplasarea rapida prin text. De asemenea, o serie de opt, iuni
avansate ca mark-uri sau fold-uri, descrise sumar n continuare, pot fi manevrate
n modul Normal.

Insert singurul mod n care putem introduce text. Acesta nu este modul implicit
la pornirea editorului, deci nu este posibila introducerea de text imediat dupa

ncarcarea
unui fis, ier. Aceasta particularitate este sursa multor confuzii. Pentru a
intra n modul Insert din Normal, comanda cea mai simpla este i. Pentru a reveni
n modul normal, se foloses, te Escape.

Pentru a edita text eficient, nu se ramne


n modul Insert mai mult dect este
nevoie.

Command comenzile avansate se introduc utiliznd acest mod. Din modul


Normal, se foloses, te : pentru a intra n modul Command. Lansarea comenzii se
face folosind Enter, iar anularea ei, natural, prin Escape. Multe dintre
comenzile Vim sunt precedate de :. Aceasta nseamna ca introducerea lor se
face n modul Command.
1

http://en.wikipedia.org/wiki/Editor_war
Vi iMproved http://www.vim.org/
3
lista nu este exhaustiva
2

474

INTRODUCERE N SISTEME DE OPERARE

Visual selectarea unei port, iuni arbitrare de text se face folosind acest mod. Dupa
selectare, o comanda va act, iona, daca acest lucru este posibil, asupra textului
selectat. Intrarea n modul Visual se face, din Normal, folosind v, iar revenirea n
Normal utiliznd Escape sau lansnd o comanda de editare.
Cteva comenzi de baza sunt:

:w salvare fis, ier (write). Daca fis, ierului i este asociat un nume, se suprascrie
vechiul fis, ier. Daca comanda este urmata de un nume de fis, ier, acesta este creat
suprascris;
sau, daca exista,
nesalvate, utilizatorul
:q ies, ire din program (quit). Daca exista modificari
trebuie fie sa le salveze (:w), fie sa foloseasca varianta :q! pentru a nu le salva;
a pentru cele doua comenzi de mai sus.
:wq scurtatur

Sistemul integrat de Help


Spre deosebire de majoritatea comenzilor Unix, pagina de manual vim nu s, i propune
sa documenteze n ntregime utilizarea editorului, ci doar detalii despre argumentele n
Vim are un sistem intern de help, foarte dezvoltat.
linia de comanda.
Pentru a afla informat, ii despre comanda :w, se foloses, te :help :w. Implicit, ecranul
, it n jumatate,

va fi mpart
cu partea superioara afis, nd informat, ii de ajutor. nchiderea
noii ferestre se face folosind :q.
Este util de ret, inut ca se poate folosi :help pentru comenzi n mod Normal, comezi
extinse (caracterul : care le precede trebuie inclus), dar s, i parametri de configurare.
Aces, tia din urma trebuie sa fie dat, i ntre ghilimele, de exemplu: :help cindent.
Nu n ultimul rnd, o resursa excelenta pentru familiarizarea cu Vim este vimtutor, un
tutorial self-contained care vine cu editorul. Lansarea lui se face convent, ional, n linie

de comanda.

Deplasarea n modul Normal


Modul Normal ofera cteva opt, iuni inedite de deplasare. Parte din puterea editorului vi
pentru ca atunci cnd nu se editeaza text, tastele alfabetice
sta n natura sa modala,
sunt disponibile pentru alte comenzi utile.
inclusiv n modul Insert, folosirea tastelor saget
, i pentru deplasare prin
Des, i este posibila,
Se pot folosi tastele hjkl n loc de
text, modul Normal ofera o alternativa avantajoasa.
, i, dupa topologia:
saget
1
2

k
h j l

pe o tastatura standard QWERTY, se afla pe home row,


Aceste taste au avantajul ca,

far
a a deplasa prea mult
rndul central al tastaturii. Ele pot fi apasate
cu mna dreapta,
folosind tehnica touch typing 1 .
degetele din pozit, ia lor naturala,
Alte comenzi utile pentru deplasare, precum s, i semnificat, iile lor, sunt:
1

http://en.wikipedia.org/wiki/Touch_typing

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

475

$ sfrs, itul liniei (analog End);


nceputul liniei (analog Home);

w cuvntul urmator
(word);

b cuvntul anterior (back);

fx urmatoarea
aparit, ie a caracterului x pe linia curenta (find);

Fx precedenta aparit, ie a caracterului x pe linia curenta;

<num
ar>g pozit, ionare pe linia data (go to line);
gg prima linie;
G ultima linie;
% paranteza care corespunde celei de sub cursor. Perechile de paranteze pot fi
configurate: :help matchpairs.

/text urmatoarea
aparit, ie a textului specificat. Aceasta este o comanda
(tastarea / provoaca intrarea n modul Command).
extinsa

Editare avansata
Exista comenzi care, lansate n modul Normal sau Visual, manipuleaza text. Majoritatea

celor prezentate mai jos funct, ioneaza n felul urmator:

daca o comanda este lansata n modul Normal, ea as, teapta o secvent, a de

deplasare, pentru a specifica textul asupra caruia


sa opereze. Astfel, dfa va

s, terge tot textul din pozit, ia curenta pna la urmatoarea


aparit, ie a caracterului a

pe linia curenta;

daca o comanda este lansata n modul Visual, ea act, ioneaza imediat asupra
textului selectat. n plus, se iese din modul Visual s, i se revine n Normal. Except, ie
fac comenzile similare cu c, descrise mai jos, care duc n modul Insert.
Cteva comenzi de editare s, i variante utile ale lor sunt prezentate n continuare, cu
Important este ca o comanda
ment, iunea esent, iala ca lista nu este nicidecum completa.
poate fi urmata de orice mis, care1 , inclusiv folosind repetit, ii2 .

d s, tergere (delete). Textul este pus n clipboard;


a);

dd s, terge linia curenta (scurtatur


a);

D s, terge restul liniei curente (scurtatur

dw s, terge urmatorul
cuvnt (comanda compusa);
pna la finalul fis, ierului (comanda compusa);

dG s, terge de la linia curenta,

c schimbare (change). Textul este pus n clipboard s, i editorul intra n modul


Insert;
a);

cc schimba linia curenta (scurtatur


1
2

:h motion.txt
:h repeat.txt

476

INTRODUCERE N SISTEME DE OPERARE


a);

C schimba restul liniei curente (scurtatur

c8w schimba urmatoarele


8 cuvinte (comanda compusa);
c schimba de la nceputul liniei, pna la caracterul curent (comanda

compusa);

y copiere n clipboard (yank). Nu afecteaza textul, dar poate fi folosit n


conjunct, ie cu p;
p inserare din clipboard (put sau paste). Pune cont, inutul ultimei comenzi d,

c, sau y dupa pozit, ia curenta.


O gres, eala frecventa este aceea de a copia ceva folosind y, apoi, nainte de a pune
Aceasta
cont, inutul n alt loc, a s, terge cont, inut superfluu, spre exemplu o linie goala.
s, tergere suprascrie cont, inutul clipboard-ului. O solut, ie imediata este comanda u

(undo), dar raspunsul


mai amplu este folosirea registrelor.

Registre
Registrele sunt locuri n memorie unde Vim poate stoca text. Astfel, ceea ce pna acum
am numit clipboard este, de fapt, un registru implicit.
Registrele de uz general sunt adresate folosind literele alfabetului. Nu exista nicio
diferent, a ntre a folosi litere mici sau mari. Modul de folosire a registrelor cu comenzile

de editare este urmatorul:


1

"Rc

Semnificat, ia componentelor comenzii este urmatoarea:

" anunt, a ca vom folosi un registru nestandard;


R anunt, a registrul folosit. Poate fi orice registru din domeniul a-z sau unul
special1 ;
Toate precizarile

c comanda propriu-zisa.
s, i exemplele sect, iunii precedente sunt
valabile.

Utilizare make
Folosind comanda :make, se poate rula make (vezi sect, iunea 11.5) direct din Vim.
facilitnd deplasarea prin
Implicit, Vim recunoas, te mesajele de eroare s, i le listeaza,
surse.
Deplasarea ntre mesajele de eroare se face utiliznd comanzile :cnext s, i :cprev.
Aceste comenzi funct, ioneaza s, i daca eroarea nu se afla n fis, ierul curent, deschiznd
fis, iere noi daca este nevoie. Astfel, Vim poate fi folosit eficient pe post de IDE (vezi
sect, iunea 14.9).
O alta comanda utila n acest sens este :copen, care deschide o fereastra cu toate
a a folosi
erorile. Acesta poate fi folosita pentru pozit, ionarea pe o anumita eroare far
, i este quickfix.
:cnext n mod repetat. Denumirea generica a acestor facilitat
1

mai multe informat, ii la :h registers

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

477

Configurarea Vim
, ii
Editorul Vim este remarcat prin flexibilitatea sa, iar elementul central al configurabilitat
sale sunt opt, iunile. Folosind comanda :set se pot interoga sau configura opt, iuni.
Unele opt, iuni sunt de tip boolean. Acestea se seteaza pe true folosind numele lor (:set
autowrite), iar pe false lipind no la nceputul numelui (:set noautowrite).
Cteva exemple
O lista completa a lor este prezenta n help, dar poate fi intimidanta.
relevante sunt prezentate n continuare.

textwidth lungimea unei linii dupa care se face wrap. n general, pentru text,
sau mesaje email, aceasta opt, iune trebuie sa fie mai mica dect 80. O
cod sursa,
valoare de 0 nseamna ca Vim nu va face line wrap;
Vim va face indentare inteligenta

cindent daca aceasta opt, iune este setata,

bazata pe sintaxa limbajului C. Aceasta este o opt, iune booloeana;

filetype tipul fis, ierului editat. Aceasta opt, iune influent, eaza tipul de syntax
highlighting folosit, dar s, i alte opt, iuni.
Nu n utimul rnd, interogarea valorii unei opt, iuni se face utiliznd comanda :set, dar

adaugnd
caracterul ? dupa numele opt, iunii:
1

:set cindent?

Configurare persistenta
Pentru a pastra

Configurarea opt, iunilor la fiecare rulare a editorului este incomoda.


unele valori ale opt, iunilor, dar s, i pentru a rula script-uri de extensie, se foloses, te un fis, ier
de configurare.
Vim cites, te, n ordine, /etc/vim/vimrc, apoi ~/.vimrc. Astfel, este posibil sa
suprascriem opt, iuni globale folosind fis, ierul personal de configurare.
n general, un fis, ier de configurare n /usr/share/vim. Acesta
Distribut, iile livreaza,
poate fi copiat n /etc/vim/vimrc s, i apoi personalizat local. Este important ca unele
opt, iuni, spre exemplu syntax1 , sa fie activate tot timpul, pentru folosirea eficienta a
editorului.
unor opt, iuni numai pentru anumite tipuri de fis, iere. Linia
Exista posibilitatea configurarii

urmatoare configureaza lungimea liniei, indentarea, s, i comportamentul nlocuirii spat, iilor


cu tab-uri numai pentru sursele sau headerele C:
1

autocmd FileType c,cpp

set tw=72 cindent noexpandtab

Editarea de fis, iere multiple


Vim poate edita mai multe fis, iere simultan, iar abstract, iile pe care le foloses, te pentru a
prezenta utilizatorilor acest lucru sunt diverse.
1

:syntax on

478

INTRODUCERE N SISTEME DE OPERARE

, irea ecranului n mai multe ferestre, cum face comanda


O posibilitate este mpart
:help. Deschiderea unei noi ferestre se face folosind :split sau :vsplit, urmate
de numele fis, ierului de editat. Deplasarea ntre ferestre se face utiliznd hjk, dar
precedate de prefixul Ctrl-W. nchiderea unei ferestre este un simplu s, i bine-cunoscut
:q.
Cnd mai multe ferestre nu sunt suficiente, vim poate folosi tab-uri. Fiecare tab poate
cont, ine mai multe ferestre, deci este o gres, eala a asocia unu-la-unu fis, ierele deschise
cu tab-urile. Pentru deschiderea unui tab se foloses, te :tabnew, urmat opt, ional de
numele unui fis, ier, iar pentru deplasare ntre tab-uri gt s, i gT. nchiderea ultimei ferestre
dintr-un tab provoaca nchiderea tab-ului.

Informat, ii mai complete se gasesc,


ca de obicei, n help: :help windows.txt s, i
:help tabpage.txt.

Lucrul cu proiecte mari

A edita un ansamblu de fis, iere mari pune probleme complet diferite fat, a de a adauga
, i pentru primul caz, as, a cum se va
cteva linii unui fis, ier de configurare. Vim are facilitat
vedea n continuare.
Pentru deplasarea ntr-un proiect C, Vim are suport de ctags1 . Generarea unui fis, ier
ctags se face folosind:
1

vlad@cormyr:~/school/so/tema4 $ ctags -aR *

Odata generat un astfel de fis, ier, Vim trebuie notificat de existent, a lui, prin intermediul
opt, iunii tags. Deplasarea la locul de definit, ie al funct, iei de sub cursor se face utiliznd
Ctrl-], iar pentru revenirea n locul anterior2 se foloses, te Ctrl-T. O alternativa mai
dar ceva mai dificil de folosit, este cscope3 . Exista script-uri Vim care ofera
puternica,
, i similare pentru cod scris n alte limbaje. n general, ele sunt publicate pe site-ul
facilitat
central Vim4 .
Uneori, este utila memorarea unui loc ntr-un fis, ier. Vim numes, te acest concept mark.
se foloses, te, n modul Normal, m, urmat de
Pentru a pune un mark pe linia curenta,

litera corespunzatoare
mark-ului. Literele mici sunt mark-uri per-fis, ier, iar cele mari sunt
globale. Deplasarea pna la un mark se face utiliznd (apostrof) urmat de litera

corespunzatoare.
Combinat, ia (doua apostroafe) este analogul Alt-Tab. Ea duce cursorul unde a fost

nainte, s, i are euristici care detecteaza deplasarile


semnificative. Astfel, deplasarile
mici
sunt ignorate.

O alta facilitate pentru lucrul cu fis, iere lungi este folding. Aceasta este, n esent, a,

comprimarea vizuala (fis, ierul ramne


neschimbat) a unei regiuni de text. Criteriul dupa
sau
care se face comprimarea poate fi nivelul de indentare, elemente de sintaxa,
marcaje ad hoc. Modul de comprimare este dat de opt, iunea foldmethod.
Combinat, ii de taste esent, iale pentru folding sunt:
1

http://ctags.sourceforge.net/
popping the tag stack
3
http://cscope.sourceforge.net
4
http://www.vim.org/scripts/index.php
2

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

479

zo deschide un fold;
zc nchide un fold;
zf creeaza un fold, daca foldmethod=marker. Aceasta comanda insereaza
marcajele configurate cu foldmarker.

14.4

Sisteme de control al versiunii

14.4.1

Principii

Sistemele de control al versiunii sunt programe care t, in codul sursa s, i toata istoria

modificarilor
asupra lui. Folosirea unui astfel de sistem este o practica aproape
universala n industria software, dar s, i o deprindere utila pentru proiecte personale.
n primul
Un sistem de control al versiunii (VCS Version Control System) protejeaza,

rnd, mpotriva modificarilor


care au efecte neprevazute,
dar sunt greu de observat.
n urma unui build, se constata ca s-a introdus un bug, se pot inspecta schimbarile

Daca,

facute
s, i determina mai simplu sursa erorii.

O alta situat, ie care poate aparea


este caderea
hardware sau s, tergerea din gres, eala a
unor fis, iere. Un VCS ofera un backup permanent sincronizat al codului, deci pierderile
ar putea fi minimizate.
Nu n ultimul rnd, un VCS faciliteaza colaborarea ntre dezvoltatori, prin combinarea

automata a schimbarilor
asupra aceluias, i fis, ier, acolo unde acest lucru este posibil.
Cteva elemente cheie n jargonul VCS sunt:

repository locul central unde sunt t, inute sursele s, i istoria.

n majoritatea
cazurilor, repository-ul se afla pe un server s, i este foarte bine protejat. Pierderea
Sistemele distribuite (vezi sect, iunea 14.4.3)
unui repository poate fi o catastrofa.
redefinesc not, iunea de repository;

working copy copia unui repository det, inuta de un dezvoltator. De obicei, un


working copy nu are istoria codului, deci pentru consultarea lor este nevoie de
comunicat, ia cu repository-ul. Obt, inerea unui working copy se face printr-o operat, ie
numita tradit, ional checkout;
pe care un dezvoltator l trimite catre

commit un set de modificari


repository.
Istoria codului este o ns, iruire de commit-uri;

update sincronizarea unui working copy cu repository-ul. Aceasta operat, ie va


aplica commit-urile care nu sunt deja n working copy;

branch o istorie distincta a sursei. Conceptul este folosit tradit, ional pentru
dar sistemele distribuite redefinesc acest
experimente asupra codului sursa,
concept.

tag o stare semnificativa a repository-ului. Un exemplu de tag este un release. O


importante.
alta situat, ie n care ar fi nevoie de un tag este naintea unei refactorizari
Se disting doua tipuri de sisteme de versionare:

480

INTRODUCERE N SISTEME DE OPERARE

Sisteme centralizate.

Aceastea sisteme se preteaza perfect la descrierile


conceptelor prezentate mai sus. Sunt nca foarte folosite s, i activ dezvoltate, dar

tendint, a actuala este migrarea catre


sistemele distribuite. Exemple relevante sunt
CVS, Subversion, Perforce.

Sisteme distribuite. Ideea din spatele lor este aceea ca fiecare working copy are,
de fapt, istoria completa a codului. Astfel, nu mai exista un repository central.
Asemenea sisteme sunt descentralizate, n sensul ca nu sunt coerente toate
o copie a codului se numes, te branch.
copiile dezvoltatorilor. Din aceasta cauza,
Pentru ca nu exista un repository central, branch-urile sunt adesea schimbate prin
email. Exemple relevante de VCS distribuite sunt: git, darcs, Mercurial, Bazaar.
n VCS se t, in toate fis, ierele care nu pot fi generate altfel. Cu alte cuvinte, sistemele VCS
ment, in surse, dar nu s, i fis, iere binare. O alta regula este ca, n orice moment, starea
codul trebuie tot timpul sa compileze, indiferent daca
repository-ului sa fie consistenta;
, i incomplete. Sintagma a strica build-ul descrie un commit care
are bug-uri sau facilitat

lasa codul ntr-o stare n care nu se compileaza.

14.4.2

Subversion

Este urmas, ul
Subversion1 este sistemul centralizat cel mai folosit n momentul de fat, a.
simplu de nt, eles. Executabilul de Subversion se
CVS s, i adopta o abordare clasica,
numes, te svn.
Operat, ia prin care se creaza un working copy este svn checkout. Subversion poate
funct, iona peste SSH, sau poate folosi protocolul propriu.
1

vlad@cormyr $ svn checkout svn://svn.rosedu.org/wouso

Pentru a face un nou commit, se foloses, te svn commit. Schimbarile


sunt automat
transmise serverului central, deci computerul are nevoie de conexiune la ret, ea. nainte
de a face un commit, se recomanda actualizarea working copy-ului pentru a evita
conflictele. Aceast lucru se face folosind comanda svn update.

Adaugarea
unui nou fis, ier la repository se face folosind svn add. Transferul catre
dect la urmatorul

server nu se va face, nsa,


commit.
Folosind svn status, se poate inspecta starea copiei de lucru. Aceasta comanda
, te un sumar al fis, ierelor schimbate sau adaugate,

tipares
dar s, i al celor care nu sunt

n repository-ul central (untracked). Pentru a vedea schimbarile


aduse fis, ierelor, se
foloses, te svn diff.
Subversion nu are suport nativ pentru branch-uri s, i tag-uri, fapt pentru care majoritatea
acin
a,
3 directoare:
repository-urilor cont, in, n rad

branches simuleaza funct, ionarea branch-urilor din alte VCS-uri.

Practic,
crearea unui branch este o copiere a surselor ntr-un nou subdirector al
branches;

tags simuleaza existent, a tag-urilor. Crearea unui tag este echivalenta cu o


copiere, cu ment, iunea ca exista o convent, ie ca nimeni sa nu modifice cont, inutul
directorului tags
1

http://subversion.tigris.org/

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

481

trunk aici rezida codul propriu-zis. Acest director este sursa copierilor care fac
tag-uri s, i branch-uri.

14.4.3

Git

Git1 este un VCS distribuit dezvoltat, init, ial, de Linus Torvalds. Se distinge prin flexibilitate
Este sistemul de versionare folosit de kernelul Linux.
s, i viteza s, i are o comunitate activa.
Pentru a folosi eficient Git, se recomanda activarea culorilor s, i configurarea globala a
numelui s, i adresei de mail a utilizatorului.
1

vlad@cormyr $ git config --global user.name "John Doe"

2
3

vlad@cormyr $ git config --global user.email "john.doe@foobar.com"

4
5

vlad@cormyr $ git config --global color.ui always

Operat, ia de creare a unui working copy (numit branch n terminologie Git) este git
clone. Pentru comunicat, ia cu serverul se pot folosi HTTP sau SSH, dar este
recomandat protocolul propriu Git, care are suport mai bun de compresie.
1

vlad@cormyr $ git clone git://git.rosedu.org/rtt.git

Dupa modificarea fis, ierelor, ele trebuiesc adaugate


explicit s, i apoi creat un commit. n
cultura Git, acest lucru se sumarizeaza prin Git tracks changes, not files. git commit
lanseaza un editor n care este solicitata o descriere a noului commit.
1

vlad@cormyr $ git add binops.c

2
3

vlad@cormyr $ git commit

Starea branch-ului curent poate fi inspectata folosind git status, iar schimbarile
pot

fi propagate catre
branch-ul de unde s-a facut
clonarea (origin) folosind git push.
Sincronizarea cu origin se face folosind git pull.

Aspecte netriviale ale utilizarii


Git sunt lucrul cu branch-uri, operat, iile de merge,
rezolvarea conflictelor, sau folosirea git rebase.

14.5

Analiza s, i parcurgerea codului

mult mai mult timp n


Un dezvoltator software profesionist va petrece, de regula,
parcurgerea, nt, elegerea s, i revizia fis, ierelor cod sursa dect n crearea de cod. Altfel
spus, operat, ia de citire a codului este mai frecventa s, i mai de durata dect cea de
scriere.

Pentru a facilita nt, elegerea codului, cel care scrie codul va trebui sa urmareasc
a un stil
cel care urmares
, te sau revizuies, te
de codare sau un set de norme. n acelas, i timp, nsa,
codul dispune de un set de utilitare specifice acestui scop. n momentul n care proiectul
este foarte important ca revizorul sa ajunga
software dispune de multe fis, iere sursa,

rapid la anumite pozit, ii din cadrul fis, ierelor sursa.


1

http://git-scm.com/

482

INTRODUCERE N SISTEME DE OPERARE

Utilitare precum ctags ajuta revizorul sa ajunga n locul unde a fost definita o funct, ie
astfel setul
sau o variabila din doar cteva combinat, ii de taste. Revizorul poate urmari
de apeluri din cadrul unei aplicat, ii, sau locurile n care o anumita variabila este folosita
Unele IDE-uri (precum Microsoft Visual Studio (vezi sect, iunea 14.12.1).
sau utilizata.

14.5.1

ctags

Utilitarul ctags este folosit pentru a genera un index al simbolurilor dintr-un set de fis, iere
sursa pentru parcurgerea us, oara a acestora. Indexul este generat ntr-un fis, ier tag care
va fi ulterior folosit de un editor.
Utilitarul are asociate doua comenzi: ctags s, i etags. Comanda ctags este folosita
pentru a genera fis, ierul index pentru a fi folosit de editoare din familia vi, iar comanda
etags genereaza fis, ier index pentru editoare din familia Emacs. Editoarele folosesc
rapid locul n care este definita/utilizat

comenzi specializate pentru a gasi


a o funct, ie sau
variabila pe baza fis, ierului index.
n general, pentru a genera un fis, ier index se foloses, te opt, iunea -R pentru a parcurge
recursiv toate fis, ierele sursa din directorul curent. Astfel, pentru a genera fis, ierele index
pentru sursele bibliotecii standard C, se vor folosi comenzile:
1

razvan@valhalla:~/packages/glibc-2.7/glibc-2.7$ ctags -R .

2
3

razvan@valhalla:~/packages/glibc-2.7/glibc-2.7$ etags -R .

4
5
6
7

razvan@valhalla:~/packages/glibc-2.7/glibc-2.7$ ls -l tags TAGS


-rw-r--r-- 1 razvan razvan 5338062 Sep 26 11:31 TAGS
-rw-r--r-- 1 razvan razvan 7364195 Sep 26 11:31 tags

n mod implicit, ctags genereaza fis, ierul tags, iar etags genereaza fis, ierul TAGS.

, te n
Fis, ierul este ncarcat
automat de editor n cazul n care fis, ierul index se gases

directorul curent. Altfel, fis, ierul poate fi ncarcat


n Vim folosind o comanda de forma
1

:set tags+=/usr/include/tags

sau n Emacs, folosind


1

M-x visit-tags-table

Detalii despre utilizarea fis, ierelor index n Vim pentru parcurgerea rapida a codului se

gasesc
n sect, iunea 14.5.1. Pentru Emacs, informat, ii utile sunt descrise n sect, iunea
asociata a manualului1 .

14.5.2

Analiza statica a codului splint

Pe lnga erorile raportate de compilator, sau erorile/problemele din momentul execut, iei
raportate de utilitare precum Valgrind (vezi sect, iunea 14.8.2), dezvoltatorul poate folosi
utilitare de analiza statica a codului (Static code analysis2 ). Aceste utilitare parcurg codul
a compilarea, interpretarea sau executarea acestuia.
sursa far
1
2

http://www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html#Tags
http://en.wikipedia.org/wiki/Static_code_analysis

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

483

Un astfel de utilitar este Splint1 . Descendent al utilitarului lint din Unix, Splint permite
detectarea potent, ialelor probleme de securitate s, i a erorilor de codare. Splint poate fi
configurat sa foloseasca diverse niveluri de verificare. Conform paginii de manual, se
ofera un premiu special persoanei care creeaza un program util care nu raporteaza erori

n cazul folosirii opt, iunii -strict (verificare stricta).


Un exemplu de rulare a comenzii splint s, i o parte a ies, irii acesteia este prezentat mai
jos:
1
2

razvan@valhalla:/tmp$ splint -warnposix mini-shell.c


Splint 3.1.2 --- 20 Feb 2009

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

mini-shell.c: (in function simple_cmd)


mini-shell.c:38:5: Return value (type int) ignored: close(pin[0])
Result returned by function call is not used. If this is intended, can
cast
result to (void) to eliminate message. (Use -retvalint to inhibit
warning)
mini-shell.c:52:7: Test expression for if not boolean, type int:
cmd->io_flags \& 0x01
Test expression type is not boolean or int. (Use -predboolint to
inhibit
warning)
mini-shell.c:65:5: Assignment of int to char: str[0] = 0
Types are incompatible. (Use -type to inhibit warning)
mini-shell.c:68:48: Possibly null storage passed as non-null param:
strlen (getenv(par->string))
mini-shell.c:25:5: Function exported but not used outside mini-shell:
simple_cmd
A declaration is exported, but not used outside this module.
Declaration can
use static qualifier. (Use -exportlocal to inhibit warning)
mini-shell.c:171:1: Definition of simple_cmd
[...]

Dupa cum reiese din exemplul de mai sus, cteva dintre probleme de codare,
neraportate implicit de compilator, sunt:

ignorarea valorii de retur a unei funct, ii;


folosirea unei expresii care ntoarce o valoare ntreaga n locul unei valori
booleene;

init, ializarea unei variabile cu o valoare de alt tip;


posibila folosire a unei valori null;
definirea unei funct, ii non-statice care nu este folosita ntr-un alt modul.
O buna parte din problemele raportate de Splint nu sunt relevante n contextul unui
program. De aceea, Splint pune la dispozit, ia dezvoltatorului opt, iuni de dezactivare a
anumitor mesaje, precum -exportlocal, -predboolinit, -retvalint etc.
a important, a deosebita
n general, informat, iile oferite de Splint pot fi foarte stricte s, i far
n cadrul programului. De aceea, se recomanda selectarea informat, iilor furnizate dupa
relevant, a acestora.
1

http://www.splint.org/

484

14.6

INTRODUCERE N SISTEME DE OPERARE

Automatizarea compilarii

Este posibil ca unele aplicat, ii sa nu se gaseasc


a n repository-urile distribut, iei folosite.
Mai mult, este posibil ca acestea sa nu fie disponibile ntr-un format ce ar facilita
instalarea (cum ar fi .deb, .rpm). Astfel de aplicat, ii trebuie compilate explicit pentru
pornind de la sursele lor.
platforma folosita,

14.6.1

Compilarea unei aplicat, ii din surse

De cele mai multe ori, sursele unei aplicat, ii se gasesc


n formatul tar.gz sau tar.bz2.
As, adar, primul pas este extragerea surselor din aceste arhive folosind utilitarul tar.
Presupunnd ca arhiva cu sursele se numes, te foo.tar.gz sau foo.tar.bz2, pentru a
extrage sursele trebuie rulata una din comenzile:
1
2
3

user@sys:~$ tar -xzvf foo.tar.gz


[...]
user@sys:~$ tar -xjvf foo.tar.bz2

Urmatorul
pas l reprezinta obt, inerea fis, ierului makefile.
n acest punct este

recomandata citirea fis, ierelor README sau INSTALL pentru a vedea exact pas, ii ce

trebuie urmat, i. Des, i pot aparea


mici diferent, e, majoritatea aplicat, iilor pot fi instalate

urmarind
pas, ii descris, i n continuare.
Scriptul configure este cel responsabil de generarea makefile-ului, acesta verificnd
versiunile de software disponibile s, i daca diverse dependint, e sunt ndeplinite. Este
important de ment, ionat ca prin modificarea acestui script sau prin parametrii pasat, i n
se poate specifica directorul n care urmeaza sa fie instalata
linia de comanda,
, te n directorul n care am extras sursele, s, i rularea lui se
aplicat, ia. Scriptul se gases
face astfel:
1

user@sys:~/foo$ ./configure

Orice fel de eroare ntlnita la acest pas, cum ar fi lipsa unei alte aplicat, ii, va fi semnalata

n output-ul comenzii s, i trebuie rezolvata nainte de trecerea la urmatoarea


etapa.
n urma scriptului de configurare a rezultat un fis, ier numit makefile (sau Makefile, depinde
de fis, ierul de configurare), pe care l vom folosi pentru a compila sursele. Pentru a face
acest lucru vom folosi utilitarul make, care cauta n directorul curent un fis, ier makefile pe
care l va folosi n obt, inerea executabilelor:
1

user@sys:~/foo$ make

Astfel, dupa rularea make, sursele vor fi compilate nsa executabilele rezultate se afla
doar n directorul curent. Pentru a le muta n directorul de instalare:
1

user@sys:~/foo$ make install

n acest moment, aplicat, ia a fost instalata s, i daca directorul n care aceasta se afla exista
n PATH, ar trebui sa se poata rula din directorul curent.

Pentru a scapa
de fis, ierele temporare ce au fost generate n procesul de configurare s, i
compilare, se poate rula:

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

485

user@sys:~/foo$ make clean

Pentru dezinstalarea aplicat, iei, pot fi s, terse manual fis, ierele din directorul unde a fost
sau se poate folosi makefile-ul generat anterior, rulndu-se:
instalata,
1

user@sys:~/foo$ make uninstall

GNU Autotools
GNU Autotools1 reprezinta un set de utilitare din cadrul proiectului GNU ce ajuta la
, ii pachetelor software s, i a simplificarii
procesului de instalare a
cres, terea portabilitat

acestora. Cum am vazut anterior, majoritatea aplicat, iilor pot fi instalate urmnd cei trei
pas, i simpli : ./configure, make, make install. Acest lucru se datoreaza n mare parte
utilitarelor din Autotools, care reus, esc sa uniformizeze procesul de build, indiferent de

platforma.
Utilitarele care fac parte din Autotools sunt:

Automake pornind de la un fis, ier numit Makefile.am, creeaza un fis, ier Makefile.in,
folosit apoi de scriptul de configurare pentru a genera Makefile-ul final;

Autoconf este cel care creeaza scriptul de configurare, pornind de la un fis, ier
numit configure.ac;

Libtool abstractizeaza procesul de creeare a librariilor


statice s, i dinamice.

14.7

Execut, ia unui program

n urma procesului de compilare s, i link-editare rezulta un executabil (vezi


sect, iunea 11.1.2). Acest executabil det, ine informat, ii necesare sistemului de operare la
rulare, pentru crearea unui proces.

14.7.1

Zonele de memorie ale unui executabil s, i proces

un
Un fis, ier executabil are un format specific. Pe lnga datele de organizare interna,
executabil cont, ine informat, ii despre instruct, iunile care vor fi executate pe procesor s, i
s, i rularii

datele folosite. Aceste informat, ii se vor stoca n memorie n momentul crearii


procesului asociat. Un executabil va cont, ine, as, adar, zona de cod s, i zonele de date.
Zona de cod, denumita s, i zona text este, de fapt, traducerea n cod mas, ina a funct, iilor
Aceste instruct, iuni vor fi executate pe rnd pe procesor, n momentul
scrise n cod sursa.
procesului. Funct, ia main dintr-un program C este punctul de start din zona de cod.
crearii
Zonele de date reprezinta echivalentul binar al variabilelor globale definite de un
Exista mai multe zone de date:
programator n codul sursa.

zona pentru date init, ializate (.data) unde sunt stocate variabilele
globale init, ializate (de forma int size = 30;)
1

http://sourceware.org/autobook/autobook/autobook.html

486

INTRODUCERE N SISTEME DE OPERARE

zona pentru date neinit, ializate (.bss) unde sunt stocate variabilele
globale neinit, ializate (de forma int file_array[10];)
zona pentru date read-only (.rodata) unde sunt stocate datele ce pot
fi doar citite; din aceasta categorie fac parte literalii din C; de exemplu, n cazul
instruct, iunii printf("Hello, World!\n");, s, irul Hello, World\n este
stocat n .rodata.
procesului, se aloca memorie pentru zonele de mai sus. n afara
n momentul crearii

acestor zone, n cadrul unui proces se aloca zone de memorie doar pe parcursul rularii
(zone de memorie dinamice), care nu sunt disponibile n executabil. Cele mai importante
zone sunt stiva s, i heap-ul.
Stiva (stack ) este zona de memorie dinamica folosita pentru a ret, ine informat, ii despre
apelurile de funct, ii s, i pentru a stoca variabilele locale funct, iilor. La fiecare apel de funct, ie,
pe stiva se creeaza un cadru de stiva (stack frame) cu informat, ii despre apel s, i pentru
alocarea variabilelor locale funct, iei. n momentul n care se revine din funct, ii, cadrul
Motivul pentru care se recomanda evitarea
de stiva asociat este eliberat de pe stiva.

mare de apeluri.
apelurilor recursive este ncarcarea
stivei n cazul unui numar
dinamice. Alocarile

Heap-ul este zona de memorie folosita pentru alocari


dinamice sunt

procesului (la runtime). Opusul este dat de


alocarile
care se petrec n timpul rularii

alocarile statice, care sunt realizate n momentul compilarii.


Variabilele globale sunt
alocate static n zona .data sau n zona .bss.
n C, cu ajutorul apelurilor de biblioteca malloc,
Alocarea dinamica se realizeaza,

calloc sau realloc. Acestea primesc ca argument numarul


de octet, i pentru
O gres, eala frecventa este omiterea eliberarii
zonelor de
regiunea care va fi alocata.
memorie alocate. Orice zona de memorie alocata folosind apelurile din familia malloc
Daca se
va trebui dezalocata folosind apelul free atunci cnd nu mai este folosita.
omite operat, ia de eliberare a memoriei se poate ajunge la situat, ii de memory leaking 1
care afecteaza negativ funct, ionarea aplicat, iai sau a sistemului.

14.7.2

Utilizarea bibliotecilor partajate

n momentul execut, iei, sistemul de operare efectueaza o serie de operat, ii pentru a


aplicat, ia pentru rulare. Procesele lucreaza n zone de memorie independente
pregati
, te la o anumita adresa pentru un proces nu se
unele de altele. Astfel, ceea ce se gases
, te s, i la alt proces.
gases

Pe lnga ncarcarea
zonei de cod s, i a zonei de date din executabil, sistemul de operare
trebuie sa ncarce s, i bibliotecile partajate. Bibliotecile statice devin parte din aplicat, ii s, i
nu au cum sa fie tratate la execut, ie.
Pentru a vizualiza lista bibliotecilor partajate utilizate de un program, se foloses, te

comanda ldd, precum n exemplul urmator:


1
2
3
4

mircea@cougar:~/carte-uso/cap-10$ ldd /bin/bash


linux-gate.so.1 => (0xffffe000)
libreadline.so.5 => /lib/libreadline.so.5 (0xb7eb4000)
libhistory.so.5 => /lib/libhistory.so.5 (0xb7eac000)
1

http://en.wikipedia.org/wiki/Memory_leak

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

487

libncurses.so.5 => /lib/libncurses.so.5 (0xb7e6a000)


libdl.so.2 => /lib/libdl.so.2 (0xb7e66000)
libc.so.6 => /lib/libc.so.6 (0xb7d3a000)
/lib/ld-linux.so.2 (0xb7f0d000)

5
6
7
8

Informat, iile despre bibliotecile partajate aflate n sistem sunt colectate (manual sau

automat) utiliznd programul ldconfig. Aceasta comanda:

cauta biblioteci partajate n locat, iile standard s, i n directoarele specificate n


/etc/ld.so.conf,

configureaza legaturi
simbolice corecte n directoarele cu biblioteci (pentru a oferi
denumiri standard biblitecilor, din punct de vedere al formatului)

salveaza referint, ele catre


biblioteci ntr-un cache.
Rularea programului ldconfig la fiecare bootare este ineficienta acesta este un
motiv n plus pentru utilizarea unui cache.
Modul n care programele utilizeaza bibliotecile de funct, ii este definit la link-editare.
Linker-ul (ld) cauta bibliotecile partajate n directoarele standard s, i n directoarele

adaugate
n linia de comanda prin intermediul unor parametri speciali (-rpath dir s, i
-Ldir).
ntr-un sistem bazat pe biblitecile standard GNU C, inclusiv toate sistemele Linux,
pornirea unui executabil de tip ELF (formatul standard al executabilelor) determina
ncarcarea s, i rularea unui program loader.
Pe sistemele Linux, acesta este

/lib/ld-linux.so.X (unde X este versiunea). Acest loader gaseste


s, i ncarca

bibliotecile partajate utilizate de catre


program.

Daca se dores, te suprancarcarea


unor funct, ii dintr-o biblioteca dar cu pastrarea
restului
bibliotecii, se pot introduce bibliotecile suprancarcate n /etc/ld.so.preload

aceste biblioteci prencarcate


vor avea ntietate relativ la setul standard. Acest fis, ier
ari
este utilizat de obicei pentru patch-uri de urgent, a distribut, iile nu
pentru prencarc
includ de obicei un astfel de fis, ier.

14.7.3

Analiza apelurilor de sistem s, i a semnalelor

Pentru a interact, iona cu sistemul de operare (cel care partajeaza resursele


computerului), bibliotecile de funct, ii apeleaza o serie de funct, ii ale kernel-ului numite
apeluri de sistem (system calls).

n continuare sunt prezentate doar cteva dintre utilizarile


apelurilor de sistem:

deschiderea/inchiderea unui fis, ier (open, close)


citirea/scrierea dintr-un/intr-un fis, ier (read, write)
deschiderea unui socket (pentru o conexiune TCP/IP)
executia unui program (execv)
Aceste funct, ii sunt implementate la nivelul nucleului sistemului de operare deoarece
aceste apeluri n
SO-ul face management-ul resurselor. Bibliotecile de functii mbraca

funct, ii/clase/obiecte utilizabile direct de catre


programatori.

488

INTRODUCERE N SISTEME DE OPERARE

strace

Comanda strace este utila pentru urmarirea


apelurilor de sistem efectuate la execut, ia
unui program. Aceasta analiza reprezinta o metoda destul de eficienta n debugging-ul

programelor al caror
cod sursa nu-l avem.
Pentru a observa ce informat, ii poate sa ofere strace, se va analiza ies, irea programului
pentru o aplicat, ie simpla (o parte din ies, irea programului a fost eliminata pentru a us, ura
analiza):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

mircea@cougar:~/carte-uso/cap-10$ strace echo "USO"


execve("/bin/echo", ["echo", "USO"], [/* 51 vars */]) = 0
uname({sys="Linux", node="aquarium", ...}) = 0
[...]
access("/etc/ld.so.preload", R_OK)
= -1 ENOENT (No such file or
directory)
open("/etc/ld.so.cache", O_RDONLY)
= 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=141679, ...}) = 0
[...]
close(3)
= 0
open("/lib/tls/libc.so.6", O_RDONLY)
= 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220R\1"..., 512)
= 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1363203, ...}) = 0
[...]
close(3)
= 0
[...]
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=38399616, ...}) = 0
[...]
close(3)
= 0
[...]
fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 1), ...}) = 0
[...]
write(1, "USO\n", 4USO
)
= 4
[...]
exit_group(0)
= ?

Se poate observa:

primul apel de sistem (execve) indica ce parametri a primit programul: echo s, i


USO

programul a ncercat sa deschida fis, ierul /etc/ld.so.preload dar nu a fost


(scopul acestui fis, ier este descris n subcapitolul dedicat bibliotecilor)
gasit

apelul de sistem open a returnat valoarea 3 aceasta reprezinta un descriptor de


fis, ier (fd file descriptor) descriptorul de fis, ier este folosit n procesele de citire
s, i n procesele de scriere (e un fel de pointer la fis, ier, pointer utilizat de sistemul
de operare)

apelul de sistem close are ca singur parametru descriptorul de fis, ier care
trebuie nchis odata nchis, un descriptor de fis, ier poate fi refolosit

apelul de sistem read indica o citire din descriptorul de fis, ier 3


apelul de sistem write are 3 parametri:

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

489

1 = file descriptor-ul unde se scrie: n cazul nostru, dupa cum s, tim, 1 este file
descriptor-ul pentru stdout (ies, irea standard)
USO\n = acesta este textul ce trebuie afis, at de comanda echo
4 = lungimea textului ce trebuie afisat
n acest program s-au putut identifica cteva apeluri de sistem frecvente.

14.8

Depanarea unui program

De cele mai multe ori, programele scrise de noi nu funct, ioneaza corect de la prima rulare.
De asemenea, se poate ntmpla ca un program care a funct, ionat corect timp de ct, iva

ani nainte sa nu mai ruleze bine acum, n momentul introducerii unei date neprevazute
initial.
s, i identifica aceste erori sau defecte
Depanarea unui program este o metoda de a gasi
din program. Depanarea este o activitatea de durata s, i obositoare, de obicei. Abilitatea
programatorului de a identifica bug-urile (gres, elile din program) reprezinta factorul cheie
n acest proces. Dar, nu trebuie uitata influent, a pe care o au metodele de depanare
(debugging).
Desigur, pentru programele scurte se poate folosi printf pentru afis, area diverselor
informat, ii chiar daca este o metoda ce presupune modificarea codului mai mult dect
este nevoie pentru corectarea gres, elii.
Pentru programele mai complicate este necesara folosirea unor instrumente de
depanare, as, a numitele debuggers. Acestea sunt programe sau biblioteci ce-i permit
programatorului monitorizarea execut, iei unui program, oferindu-i capacitatea de a-l
porni, opri, reporni s, i, n unele cazuri, a rula napoi.

14.8.1

gdb, ddd

Un bun instrument de debug este GNU Debugger cunoscut mai mult sub denumirea
prescurtata de GDB1 , depanatorul standard GNU, scris de Richard Stallman n 1986.
Este un instrument portabil, capabil de a depana programe scrise ntr-o suita mai larga
de limbaje (C, Ada, Basic, Fortran, C++ etc).

, i cerute de la orice program de


GDB se remarca prin urmatoarele
4 lucruri, capacitat
depanare a codului:

se permite pornirea execut, iei unui program, specificnd orice parametru ce-i poate
afecta comportamentul;

este posibila oprirea programului ntr-un anumit punct, pe baza unor condit, ii
specificate de utilizator;

n cazul opririi premature a programului, se pot examina toate condit, iile ce au dus
la acest caz;
1

http://sourceware.org/gdb

490

INTRODUCERE N SISTEME DE OPERARE

se permite schimbarea valorii unei variabile uneori putndu-se schimba s, i


a a par
asi
depanatorul.
instruct, iuni pentru a modifica execut, ia programului far
Pentru a putea depana un program cu GDB, acesta trebuie nti compilat utiliznd un flag
special -g pentru a se permite salvarea anumitor informat, ii ce vor fi utile n continuare.

De asemenea, se recomanda evitarea oricarei


optimizari.
n continuare, vom prezenta un exemplu de rulare a unui program sub gdb. Pornim prin
a lista problema pe care o avem:
1
2
3

mihai@keldon:~/tmp$ cat 1.c


#include <stdio.h>
#include <stdlib.h>

4
5
6
7
8
9
10

int main()
{
int
n =
a =
for

11
12

i, n, **a, j;
6;
(int*) malloc(n * sizeof(char));
(i = 0; i < n; i++){
for (j = 0; j < n; j++)
a[i][j] = i + (j-1);

13
14

for (i = 0; i < n; i++){


for (j = 0; j < n; j++)
printf("%d ", a[i][j]);
printf("\n");
}
return 0;

15
16
17
18
19
20
21

22
23
24
25

mihai@keldon:~/tmp$ gcc -Wall 1.c


1.c: In function main:
1.c:8: warning: assignment from incompatible pointer type

26
27
28

mihai@keldon:~/tmp$ ./a.out
Segmentation fault

nti warningurile s, i apoi sa depanam


codul, vom proceda
Des, i este normal sa tratam
diferit acum, ignornd outputul lui gcc.
1
2
3
4
5
6

mihai@keldon:~/tmp$ gcc -Wall -g -O0 1.c


...
mihai@keldon:~/tmp$ gdb ./a.out
...
(gdb) run
Starting program: /home/mihai/tmp/a.out

7
8
9
10
11
12
13
14
15
16
17

Program received signal SIGSEGV, Segmentation fault.


0x08048488 in main () at 1.c:11
11
a[i][j] = i + (j-1);
(gdb) list
6
int i, n, **a, j;
7
n = 6;
8
a = (int*) malloc(n * sizeof(char));
(gdb) print *a
$4 = (int *) 0x0
(gdb) break main

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE


18
19
20
21
22

491

Breakpoint 1 at 0x8048445: file 1.c, line 7.


(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/mihai/tmp/a.out

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

Breakpoint 1, main () at 1.c:7


7
n = 6;
(gdb) next
8
a = (int*) malloc(n * sizeof(char));
(gdb) display a
1: a = (int **) 0xbfe62388
(gdb) n
9
for (i = 0; i < n; i++){
1: a = (int **) 0x8634008
(gdb)
10
for (j = 0; j < n; j++)
1: a = (int **) 0x8634008
...
(gdb) q
The program is running. Exit anyway? (y or n) y

n interiorul gdb, s-au folosit urmatoarele


comenzi:

run, prescurtat r permite execut, ia programului;


list, prescurtat l permite listarea codului programului n jurul punctului unde
acesta s-a oprit;

print, prescurtat p permite afis, area unei variabile;


break, prescurtat b permite stabilirea unui punct de ntrerupere n interiorul
programului;

next, prescuratat n executa urmatoarea


instruct, iune a programului (cea afis, ata
comenzii);
n momentul tastarii

display, disp permite afis, area unei variabile pe parcursul procesului de depanare;
programului, ies, irea din gdb.
quit, q terminarea depanarii

Observat, i ca simpla trimitere a unei comenzi goale (doar apasarea


tastei Enter) duce la
executarea comenzii anterioare.
Pentru mai mult detalii, consultat, i manualul GDB1 ,.

ddd
folosirea lui
Des, i foarte util, GDB are un dezavantaj major: neavnd interfat, a grafica,
este mai greoaie. Din fericire, exista un front-end grafic sub denumirea de Data Display
Debugger (DDD2 ).
Pe lnga oferirea unei interfet, e grafice ce permite stabilirea mult mai us, oara a unor
puncte de oprire a programului (breakpoints), ddd s-a remarcat prin afis, area interactiva
1
2

http://sourceware.org/gdb/current/onlinedocs/gdb_toc.html#SEC_Contents
http://www.gnu.org/software/ddd/

492

INTRODUCERE N SISTEME DE OPERARE

a datelor programului utiliznd grafuri. Aceasta afis, are permite studierea unui program
prin analiza datelor s, i nu a liniilor de cod, un proces evident mult mai simplu.
1
2
3
4

mihai@keldon:~/tmp$ gcc -Wall -g -O0 1.c


...
mihai@keldon:~/tmp$ ddd ./a.out
...

Fiind un front-end al GDB, principiile de folosire sunt similare. Se va compila sursa s, i se


va porni debugger-ul, restul comenzilor fiind nlocuite cu butoane n mediul grafic.

14.8.2

valgrind

Valgrind1 este un utilitar de programare folosit pentru a depana memoria, a detecta


leak-urile de memorie s, i a face profiling. Autorul lui este Julian Seward, care n 2006 a
cs, tigat un al doilea Google-OReilly Open Source Award pentru Valgrind.
El cont, ine un set de utilitare, iar
Valgrind este un framework de analiza dinamica.

fiecare dintre acestea realizeaza un tip aparte de depanare sau profiling. Dintre aceste
componente, cele mai importante sunt:

memcheck checker de memorie.

cachegrind simulator de cache, numarul


de instruct, iuni executate s, i cache
miss-uri cauzate

helgrind depisteaza posibile race conditions din program


massif un profiler pentru heap, spune ct memory heap utilizeaza programul
Cel mai des folosit este memcheck, de aceea implicit valgrind l folosest, e pe acesta,
daca se dores, te folosirea altui utilitar acesta se va da ca parametru.
1

andrew@Goliath:~$ valgrind --tool=massif ./test

2
3

andrew@Goliath:~$ valgrind --tool=cachegrind ./test

Similar cu gdb, programul trebuie compilat cu flag-ul -g pentru a primit informat, ii de

depanare, astfel nct sa se poata specifica linia exacta la care a aparut


o problema.
a optimizari
este s, i ea recomanda daca este posibil, daca acest lucru ar
Compilarea far
de
determina un timp de rulare prea mare se recomanda -O1. Folosirea unei optimizari
la -O2 n sus poate produce erori de valori neinit, ializate care nu sunt corecte.
n continuare vom analiza un exemplu de rulare. Daca n mod normal at, i rula programul
astfel:
1

andrew@Goliath:~$ ./test arg1 arg2

Pentru a rula n valgrind cu verificarea leak-urilor de memorie rulat, i urmatoarea

comanda:
1

andrew@Goliath:~$ valgrind --leak-check=full ./test arg1 arg2

Utilitarul memcheck depisteaza urmatoarele


tipuri de erori:
1

http://en.wikipedia.org/wiki/Valgrind

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

493

variabile neinit, ializate


citiri/scrieri n zone de memorie eliberate
citiri/scrieri n zone inaccesibile
leak-uri de memorie
Exemple de output pentru anumite erori:

citire invalida
1
2
3
4
5

Invalid write of size 1


at 0x804841E: main (example2.c:6)
Address 0x1BA3607A is 0 bytes after a block of size 10 allocd
at 0x1B900DD0: malloc (vg_replace_malloc.c:131)
by 0x804840F: main (example2.c:5)

utilizare de variabile neinit, ializate


1
2
3
4

Conditional jump or move depends on uninitialised value(s)


at 0x402DFA94: _IO_vfprintf (_itoa.h:49)
by 0x402E8476: _IO_printf (printf.c:36)
by 0x8048472: main (tests/manuel1.c:8)

free-uri ilegale
1
2
3
4
5
6

Invalid free()
at 0x4004FFDF: free (vg_clientmalloc.c:577)
by 0x80484C7: main (tests/doublefree.c:10)
Address 0x3807F7B4 is 0 bytes inside a block of size 177 freed
at 0x4004FFDF: free (vg_clientmalloc.c:577)
by 0x80484C7: main (tests/doublefree.c:10)

suprapunerea adresei destinat, ie cu cea sursa la copierea unor blocuri de memorie


1
2
3

Source and destination overlap in memcpy(0xbffff294, 0xbffff280, 21)


at 0x40026CDC: memcpy (mc_replace_strmem.c:71)
by 0x804865A: main (overlap.c:40)

rezumat al leak-urilor de memorie


1
2
3
4
5
6

LEAK SUMMARY:
definitely lost:
indirectly lost:
possibly lost:
still reachable:
suppressed:

48 bytes in 3 blocks.
32 bytes in 2 blocks.
96 bytes in 6 blocks.
64 bytes in 4 blocks.
0 bytes in 0 blocks.

Pentru mai multe detalii se va folosi parametrul --leak-check=full. Informat, iile


astfel:
detaliate despre leak-uri vor arata
1
2
3
4

8 bytes in 1 blocks are definitely lost in loss record 1 of 14


at 0x........: malloc (vg_replace_malloc.c:...)
by 0x........: mk (leak-tree.c:11)
by 0x........: main (leak-tree.c:39)

5
6
7
8
9

88 (8 direct, 80 indirect) bytes in 1 blocks are definitely lost in


loss record 13 of 14
at 0x........: malloc (vg_replace_malloc.c:...)
by 0x........: mk (leak-tree.c:11)
by 0x........: main (leak-tree.c:25)

494

INTRODUCERE N SISTEME DE OPERARE

mai multe informat, ii


Site-ul proiectului cont, ine un manual de utilizare1 n care se pot gasi
2
3
despre erori s, i opt, iuni pentru memcheck.
neoficiale pentru
Valgrind ruleaza pe majoritatea platformelor Linux, exista s, i portari
NetBSD s, i FreeBSD.

14.9

Medii integrate de dezvoltare

Un mediu integrat de dezvoltare este construit pentru a spori productivitatea


programatorilor prin oferirea unor componente strns legate prin intermediul interfet, ei
cu utilizatorul. Totus, i, deoarece este vorba de un sistem complex, productivitatea

, are a mediului.
sporita poate aparea
dupa o perioada lunga de adaptare s, i nvat
un mediu de dezvoltare (IDE) reprezinta un singur program n care se
De regula,
, oara tot procesul de dezvoltare: editare, compilare, depanare etc.
desfas
n mod obis, nuit, un IDE este orientat pe un limbaj de programare specific, des, i exista s, i
except, ii.

14.9.1

Eclipse

Utiliznd Java, avnd un comportament configurabil prin plugin-uri, mediul de dezvoltare


Eclipse4 poate fi utilizat pentru a dezvolta cod ntr-o mult, ime de limbaje.
Sistemul de plugin-uri nu este doar un mecanism ce permite folosirea mai multor
limbaje de programare, fiind posibila s, i integrarea solut, iilor de versionare a codului
(SVN), scrierea documentat, iei LaTeX, testarea aplicat, iilor de ret, ea etc.
Cu toate acestea, Eclipse are s, i cteva dezavantaje. Interfat, a grafica este put, in mai
Fiind scris n Java, este absolut necesara prezent, a unei mas, ini virtuale Java
complicata.
n sistem pentru a putea fi folosit. Nu n ultimul rnd, memoria consumata este destul
de mare. De asemenea, fiind orientat pe proiecte, mediul de dezvoltare nu se preteaza
pentru programele mici (sub 300 de linii).

14.9.2

Anjuta

Spre deosebire de Eclipse, Anjuta5 este un IDE pentru C s, i C++ pentru GNU/Linux.
, i precum managementul
Scris pentru GTK s, i Gnome, programul ofera o serie de facilitat
proiectelor, un depanator interactiv s, i un editor de cod ce permite syntax highlight s, i
source browsing.
De asemenea, sunt posibile, print intermediul unor plugin-uri scrise n C (n viitor C++ s, i
De exemplu, se poate schimba editorul de cod din Scintilla
Python) diverse configurari.
1

http://valgrind.org/docs/manual/manual.html
http://valgrind.org/docs/manual/mc-manual.html#mc-manual.errormsgs
3
http://valgrind.org/docs/manual/mc-manual.html#mc-manual.options
4
http://www.eclipse.org
5
http://projects.gnome.org/anjuta/index.shtml
2

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

495

Figura 14.1: Eclipse

Figura 14.2: Anjuta


sau GtkSourceView n vim sau Emacs prin intermediul unui singur script scris de
utilizator. Daca Anjuta detecteaza mai multe plugin-uri pentru acelas, i scop, utilizatorul

va fi rugat sa selecteze unul din acestea, select, ia fiindu-i memorata.


, i de source control
De asemenea, prin intermediul plugin-urilor se pot introduce facilitat
(SVN). Mult mai important este faptul ca managerul de proiecte nu ret, ine informat, ii
despre proiect n alt fis, ier, astfel fiind posibila dezvoltarea ntr-un grup mixt de utilizatori,

496

INTRODUCERE N SISTEME DE OPERARE

unii folosind Anjuta, alt, ii folosind editoare clasice (vim, Emacs).


Pentru dezvoltarea aplicat, iilor grafice Gtk, Anjuta ofera un plugin pentru interact, iunea cu
Glade. Acceptnd s, i limbajul C++, Anjuta ofera un generator de clase s, i un plugin ce va
ierarhia claselor din proiect. De asemenea, exista plugin-uri pentru gdb, valgrind
arata
s, i gprof (ultimul pentru profiling-ul codului scris).

14.10

Managementul proiectelor software

, ile de
O componenta importanta n dezvoltarea aplicat, iilor software o reprezinta activitat
gestiune, monitorizare s, i control a acestora. Managementul proiectelor software este

legat de procesul de dezvoltare software s, i de modul n care o aplicat, ie este proiectata,


testata s, i prezentata.

dezvoltata,
, ile de management al proiectelor software se refera la nt, elegerea cerint, elor
Activitat
, irea de roluri s, i responsabilitat
, i n
aplicat, iei, arhitectura s, i proiectarea acesteia, mpart
cadrul echipei, motivarea echipei, rezolvarea conflictelor, discut, ii, monitorizarea s, i
, ilor, feedback, evaluarea rezultatelor, analiza calitat
, ii. Domeniul
controlul activitat
managementului proiectelor sofware are o relevant, a deosebita ntruct fiecare proiect
software difera de un altul. De asemenea, ntruct niciun limbaj de programare nu este
perfect, procesele de dezvoltare trebuie sa fie bine corelate cu limbajele, tehnologiile s, i
framework-urile folosite.

14.10.1

Procese de dezvoltare software

, i folosita pentru
Procesul de dezvoltare software reprezinta structura de activitat
dezvoltarea unui produs software.

Activitatile
cuprinse n procesul de dezvoltare software sunt:
, ilor;
planificarea se refera extragerea cerint, elor s, i stabilirea funct, ionalitat

proiectarea se refera la stabilirea specificat, iilor s, i a arhitecturii (module sau


componente s, i interact, iunile ntre acestea);

implementare se refera la dezvoltarea efectiva a aplicat, iei;


cerint, elor software s, i a
testarea sau verificarea nsemna verificarea respectarii
n condit, ii optime a aplicat, iei;
funct, ionarii

documentarea aplicat, iei;


lansarea aplicat, iei pe piat, a sau livrarea acestuia clientului;
corecte a aplicat, iei n condit, iile
mentenant, a se refera asigurarea funct, ionarii

aparit, ieie de noi probleme s, i raspunsuri


la solicitarile
client, ilor.

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

497

Exista doua tipuri de modele pentru implementarea procesului de dezvoltare software:


modelul clasic (waterfall 1 ) s, i modelul iterativ2 .
, ilor procesului de
Modelul clasic presupune o dezvoltare pas cu pas a activitat
management. O activitate nu va ncepe ct timp activitatea anterioara nu a fost
Acest model are avantajul unei dezvoltari
riguroase, dar ofera o flexibilitate
definitivata.
iar o echipa care lucreaza la o anumita componenta va trebui sa as, tepte ca
redusa,
echipele anterioare sa ncheie componente proprie.
, i reduse a proiectului
Modelul de dezvoltare iterativa presupune construirea unei part
software s, i apoi cres, terea acesteia. Procesul iterativ este preferat n momentul n care

nu se cunoas, te foarte bine scopul urmarit.


O subclasa a modelului iterativ o reprezinta
dezvoltarea agila (agile software development 3 ).
Dezvoltarea agila foloses, te
mecanismul de feedback ca principal mecanism pentru controlul s, i evolut, ia proiectului.
Un alt exemplu de model iterativ este Extreme Programming 4 care presupune
, i foarte mici ale unui proiect (de obicei n echipe mici) s, i apoi
dezvoltarea de part
integrarea acestora n proiect.

14.10.2

Aplicat, ii web pentru managementul proiectelor software

Exista un set divers de aplicat, ii de gestiune a proiectelor software. n cadrul acestora, o


categorie aparte o reprezinta aplicat, iile web pentru managementul proiectelor software.
n general, un set integrat de componente printre care:
Aceste aplicat, ii ofera,

wiki un wiki este o aplicat, ie web care permite editarea colaborativa facila de
cont, inut; celebra enciclopedie online Wikipedia foloses, te tehnologia wiki pentru

dezvoltare colaborativa;

un repository (vezi sect, iunea 14.4) pentru gestiunea codului sursa;

sistem de tichete pentru raportarea problemelor (bug-urilor ) s, i pentru cerint, e de


, i;
noi funct, ialitat
, ilor.
roadmap s, i milestone-uri pentru planificarea s, i contorizarea activitat
Trac5 este o aplicat, iei minimalista pentru gestiunea proiectelor software. Trac foloses, te

Subversion ca aplicat, ie pentru gestiunea codului. Un aspect pozitiv al Trac este numarul
mare
mare de plugin-uri disponibile6 . Trac este scris n Python s, i este folosit de un numar
de organizat, ii. Redmine7 este o aplicat, ie web pentru gestiunea proiectelor software
scrisa folosind Ruby on Rails8 . Redmine a fost influent, at puternic de Trac. Redmine
ofera n plus fat, a de Trac o diversitate de utilitare de gestiune a codului (Subversion, Git,
Mercurial, Bazaar, Darcs), gestiunea de proiecte multiple n cadrul aceleias, i instant, e s, i
folosirea de diagrame Gantt s, i de calendare.
1

http://en.wikipedia.org/wiki/Waterfall_model
http://en.wikipedia.org/wiki/Iterative_development
3
http://en.wikipedia.org/wiki/Agile_software_development
4
http://en.wikipedia.org/wiki/Extreme_Programming
5
http://trac.edgewall.org/
6
http://trac-hacks.org/
7
http://www.redmine.org/
8
http://www.rubyonrails.org/
2

498

INTRODUCERE N SISTEME DE OPERARE

14.10.3

Resurse online pentru dezvoltarea proiectelor

Pentru cei care nu doresc instalarea unei instant, e de Trac sau Redmine pentru
dezvoltarea s, i managementul proiectelor sofware, se po folosi resurse online. n
general, accesul la acestea este gratis. Oricine poate crea un cont asociat unui proiect
s, i poate folosi resursele puse la dispozit, ie pentru dezvoltarea acestuia.
Aplicat, iipe ce stau la baza acestor site-uri sunt denumite software forge-uri1 .
Majoritatea forge-urilor pot fi instalate separat. Principalele site-uri care ofera servicii

de gazduire
a proiectelor software sunt SourceForge2 , GNU Savannah3 , Google code4 ,
5
BerliOS , CodePlex6 .

14.11

Resurse de documentare pentru dezvoltator

Mai mult dect n orice alt domeniu, n IT documentat, ia este us, or de obt, inut, de la format
, i tradit, ionale, din surse oficiale sau contribut, ii ale altor persoane.
electronic pna la cart

14.11.1

Documentat, ie oficiala

Aceasta este
Pachetele software cunoscute vin, n general, cu documentat, ie detaliata.
n cazul programelor simple s, i a bibliotecilor, prin pagini de manual (man).
accesibila,
n cazul programelor GNU7 , manualul nu cont, ine dect un sumar al comenzilor. Pentru
informat, ii mai detaliate se foloses, te info. Exista alternative la info, printre care
cititorul integrat din Emacs, sau pinfo8 .
Alte suite software complexe, n general limbaje de programare, poseda utilitare
personalizate pentru vizualizarea documentat, iei. Cteva exemple sunt:

pythondoc pentru documentarea limbajului Python9 ;


perldoc pentru documentarea limbajului Perl10 ;
texdoc pentru documentarea limbajului TEX11 s, i a suitei de macro-uri pentru el,
LATEX12 .

http://en.wikipedia.org/wiki/Forge_(software)
http://sourceforge.net/
3
http://savannah.gnu.org/
4
http://code.google.com/
5
http://www.berlios.de/
6
http://www.codeplex.com/
7
http://www.gnu.org/
8
http://pinfo.sourceforge.net/
9
http://www.python.org/
10
http://www.perl.org
11
http://tug.org/
12
http://www.latex-project.org/
2

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

14.11.2

499

Documentarea programelor proprii

Orice program trebuie documentat, chiar daca nu este intent, ia explicita a programatorului
ca sursa sa fie citita de altcineva. Des, i, n general, comentarii sumare la nceputul

fiecarei
funct, ii sunt suficiente, exista programe care permit comentarea structurata s, i

generarea de documentat, ie n varii formate (HTML, pagini de manual, LATEX). Este, nsa,
important de ment, ionat ca documentat, ia generata este adresata dezvoltatorilor, s, i nu
utilizatorilor.
Pentru ca un astfel de program sa funct, ioneze corect, este nevoie de o metoda de a
delimita comentariile uzuale de cele care contribuie la generarea automata a
documentat, iei. Doua exemple de formate speciale pentru limbajele din familia C/C++
sunt nceperea comentariilor cu /** sau cu ///.
Un astfel de program este Doxygen1 . Este open-source, are suport pentru mai multe
limbaje s, i genereaza documentat, ie n formate variate. Este, n general, prima alegere
pentru proiecte open-source care aleg sa genereze documentat, ia automat. Un exemplu
excelent de documentat, ie generata de Doxygen este cea a proiectului Pidgin2 .
Un exemplu de comentariu compatibil cu Doxygen, pentru o funct, ie C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

/**
* Executa comenzile corespunzatoare unui arbore.
*
* @param c comanda compusa care trebuie executata
* @param pi descriptorul care trebuie duplicat pentru intrare
* @param po descriptorul care trebuie duplicat pentru iesire
* @param w este 1 daca trebuie sa asteptam comanda sa se termine
*
* @return Codul de iesire al ultimului proces executat, sau pidul
* procesului nou creat daca acesta nu a fost asteptat. Daca comanda
* executata a fost quit sau exit, se intoarce valoarea speciala
* QUITTING.
*
* @remarks pi si po sunt folosite atunci cand comanda face parte
* dintr-un pipe. Pentru a nu le folosi, le setam la -1.
*/
int exec_command(const command_t *c, int pi, int po, int w)
{
[...]

Limbajul Java are un instrument propriu pentru generarea documentat, iei de API, numit

Javadoc3 . Toata documentat, ia platformei Java4 este generata utiliznd Javadoc, iar

formatul Doxygen este voit compatibil cu cel Javadoc pentru a fi o alternativa facila.
folosind comentarii n format XML s, i marcate cu ///.
C# ofera o alternativa interesanta,
mediul Visual Studio ofera suport excelent
Des, i marcarea cmpurilor este mai dificila,
pentru acest tip de comentarii.
1

http://www.doxygen.org/
http://developer.pidgin.im/doxygen/dev/html/classes.html
3
http://java.sun.com/j2se/javadoc/
4
http://java.sun.com/j2se/1.4.2/docs/api/
2

500

INTRODUCERE N SISTEME DE OPERARE

14.11.3

, i s, i tutoriale
Cart

a,
o referint, a rapida,
dar incompleta a unei tehnologii sau
Un tutorial este o scurtatur
n faza
limbaj. O astfel de resursa poate substitui temporar documentat, ia propriu-zisa,
de familiarizare, dar detaliile care lipsesc (intent, ionat, pentru a asimila mai us, or lucrurile
sunt adesea esent, iale pentru o utilizare eficienta a conceptului n cauza.

de baza)
s, tiint, a
Des, i documentat, ia la obiect este accesibila sub forma electronica,
, i n format clasic. Acestea nu sunt nicidecum
calculatoarelor nu duce lipsa de cart
, i s, i practici foarte valoroase.
redundante, pentru ca deseori cont, in sugestii, subtilitat
, i sunt cele care s, i propun sa detalieze un domeniu
O categorie importanta de cart
ntreg, independent de implementare. Acestea cont, in elemente teoretice avansate, dar
s, i studii de caz relevante. n general, fiecare domeniu are o asemenea carte,
Pentru ca nu sunt ncuiate n studiul
recunoscuta s, i respectata de persoanele n tema.
particulare, aceste cart
, i sunt preferate n domeniul academic.
unei implementari
, i s, i domeniile1 lor asociate sunt:
Exemple de asemenea cart

sisteme de operare: Silberschatz, Galvin, Gagne, Operating System Concepts


[26]; Tanenbaum Modern Operating Systems [32];

ret, ele de calculatoare: Tanenbaum Computer Networks [30];


arhitectura sistemelor:

Hennessy, Patterson Computer Architecture:

Quantitative Approach [9];

compilatoare: Aho, Sethi, Ullman Compilers: Principles, Techniques, and Tools


[2].

Nu n ultimul rnd, profesorul Donald Knuth scrie o veritabila monografie a programarii


calculatoarelor, numita The Art of Computer Programming [14]. nceputa n 1962, cartea

este programata sa aiba 7 volume, dintre care doar primele 3 au aparut


complet.
, i se refera exclusiv la programare s, i descriu n detaliu fie un limbaj, fie un set
Alte cart

de utilitare sau un mediu ntreg de programare. Spre deosebire de categoria anterioara,


, i se adreseaza unui domeniu mai ngust de probleme, dar adopta o abordare
aceste cart
hands-on, cont, innd frecvent exemple de cod.
celebre n acest sens sunt: Kernighan, Ritchie The C Programming Language
Lucrari
[13], Wall, Christiansen, Orwant Programming Perl 2 [33], Kernighan, Pike The
Practice of Programming [12], sau Eckel Thinking in Java [5].
exista cart
, i care descriu n detaliu un program sau o parte a unui
n cele din urma,
sistem complex. Acestea se remarca printr-un grad nalt de specificitate s, i limbaj tehnic,
sunt apreciate n
dar ofera o detalii fine despre subiectul abordat. Asemenea lucrari
special n industrie, de persoane care configureaza sau modifica programe ca parte a
slujbei lor.
de exemplu, cart
, ile lui Robert Love despre kernelul
n aceasta categorie se ncadreaza,
Linux, Learning the vi and Vim Editors de Robbins, Hannah s, i Lamb, sau DNS and BIND
de Liu s, i Albitz.
1

Desigur, domeniile se ntrepatrund.


Un inginer nu s, i permite sa se limiteze la un singur aspect al
profesiei lui.
2
cunoscuta cu afect, iune n comunitatea Perl drept The Camel Book

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

501

Departe de domeniul tehnic, dar relevante pentru industria IT, sunt lucrarile
cu tenta

ideologica sau cele care observa s, i compara tendint, e. Acestea tind sa se refere la
procesul producerii software-ului, fie el proprietar sau liber. Titluri notabile sunt Brooks
The Mythical Man-Month, Raymond The Cathedral and the Bazaar s, i Fogel
Producing Open Source Software1 .
, ilor, este esent, ial a realiza ca ele dezvolta competent, e
Ca o nota finala asupra cart
distincte fat, a de citirea documentat, iei exclusiv tehnice. Cele doua tipuri de resurse se
nu se substituie.
folosesc mpreuna ele se completeaza,

14.11.4

Documentat, ie din Internet

exista multe alte surse, fiecare cu specificul ei. Gradul


Pe lnga documentat, ia oficiala,
de detaliu s, i interact, iunea dintre persoane variaza funct, ie de mijlocul de comunicat, ie.

IRC
IRC (Internet Relay Chat) este un protocol de comunicat, ie multidirect, ional n timp real.
Client, i uzuali pentru acest mediu sunt Pidgin2 , XChat3 , sau irssi4 .
programului mIRC, are o reputat, ie
Des, i protocolul nsus, i, n special datorita utilizarii
exista mult pachete software s, i comunitat
, i care ofera suport informal folosind
ndoielnica,

IRC. Este utila o asemenea abordare cnd se dores, te un raspuns


n timp real, la obiect,
dar din care de multe ori lipsesc detalii care nu sunt imediat relevante.

Majoritatea proiectelor care folosesc IRC drept mijloc de comunicare sunt gazduite
de
5
a legatur
a
ret, eaua Freenode . Dezvoltatorii se lanseaza frecvent n discut, ii informale, far
cu subiectul, de aceea protocolul are un signal-to-noise ratio destul de mic.

Usenet
Usenet este o ret, ea care precede cronologic World Wide Web-ul. Canalul de
comunicat, ie este tot one-to-many, dar, spre deosebire de IRC, aceasta metoda este
asemanndu-se

asincrona,
cu email-ul.
Datorita vrstei venerabile a s, i a lipsei sale relative de popularitate, Usenet este folosit
dar care au cunos, tint, e tehnice except, ionale. Usenet
de unii utilizatori mai n vrsta,
cont, ine discut, ii tehnice detaliate, dar s, i atacuri personale s, i flame-wars.
n ultimii ani, ISP-urile au ncetat sa mai ofere servere de Usenet, dar o metoda excelenta

de a citi s, i scrie mesaje este arhiva Google Groups6 . Un grup de o notorietate legendara,
att pentru discut, iile referitoare la limbajul C, ct s, i pentru flame-urile numeroase, este
comp.lang.c.
1

http://producingoss.com/
http://pidgin.im/
3
http://xchat.org
4
http://irssi.org
5
http://freenode.net/
6
http://groups.google.com/groups/dir?sel=gtype%3D0
2

502

INTRODUCERE N SISTEME DE OPERARE

Mai mult dect orice alta sursa de informat, ie, Usenet este neiertator
cu persoanele care

fac gres, eli. Se recomanda citirea ctorva tread-uri de discut, ie nainte de a porni o
discut, ie noua 1 .

Google

O ultima sursa de informat, ie este a folosi un motor de cautare.


Avantajul este viteza cu
care acesta cauta prin majoritatea surselor ment, ionate mai sus, inclusiv discut, ii Usenet
sau log-urile canalelor de IRC. Pe de alta parte, este uneori dificila alegerea cuvintelor
potrivite pentru exprimarea unei probleme.

14.12

Studiu de caz

14.12.1

Microsoft Visual Studio

Microsoft Visual C++ (MSVC) este un IDE(Integrated Development Enviroment) facut


de
Microsoft pentru limbajele de programare C, C++ s, i C++/CLI. Acesta cont, ine utilitare de
depanare s, i dezvoltare a codului scris n C++.
Visual C++, componenta care se ocupa de codul C/C++, este compus din mai multe
elemente:
pentru platformele x86, x64 s, i Itanium
compilatorul Visual C++, cont, ine optimizari

bibliotecile Visual C++, cum ar fi ATL(Active Template Library), MFC(Microsoft


Foundation Class), CRT(C RunTime Library) s, i biblioteca standard C

mediul de dezvoltare Visual C++. Compilatorul s, i bibliotecile pot fi accesate s, i prin


mediul de dezvoltare ofera posibilitat
, i de dezvoltare
interfat, a n linie de comanda,
s, i depanare mai facila a proiectelor
Exista mai multe metode de a crea un proiect n Visual C++:

se poate folosi un s, ablon, cum ar fi Console Application Template, pentru a realiza


proiecte simple

se poate folosi s, i un wizard pentru crearea unei solut, ii, o solut, ie poate sa cont, ina
mai multe proiecte

se poate crea un fis, ier text simplu salvat cu extensia .cpp, iar acesta sa fie inclus
ntr-un proiect gol de tipul Win32 Application
Folosind wizard-ul avem acces la o interfat, a ce permite sa se creeze un proiect, sa
se modeleze un proiect dupa un s, ablon s, i sa se generezeze fis, iere sursa s, i directoare
pentru aplicat, ie. Visual C++ lucreaza cu framework-uri de aplicat, ii s, i biblioteci pentru a
crea schelete de programe peste care se poate lucra ulterior.
pe site-ul MSDN2 .
Mai multe detalii despre proiecte putet, i gasi
1
2

Lurk before you leap.


http://msdn.microsoft.com/en-us/library/6765tta0.aspx

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

Figura 14.3: Proiect n Visual C++

Figura 14.4: Creare proiect n Visual C++


Cuvinte cheie

coding style

subversion

indent, astyle

git

editor

ctags

vim

fis, iere index (tag)

modul insert, command, visual

analiza statica

controlul versiunii

splint

503

504

INTRODUCERE N SISTEME DE OPERARE

GNU Autotools

Eclipse

strace

Anjuta

.data, .bss, .rodata

waterfall

stiva

model iterativ

heap

Trac

apeluri de sistem

Redmine

ldd

man

depanare

info

GDB

Doxygen

ddd

Javadoc

Valgrind

IRC Internet Relay Chat

memory leak

Usenet

IDE

Microsoft Visual Studio

ntrebari

1. Care din urmatoarele


este un editor?

q Vim
q astyle
q ctags
q gdb

2. Care din urmatoarele


aplicat, ii este folosita pentru depanarea la runtime a unui
program?

q Valgrind
q Trac
q indent
q git

3. Care din urmatoarele


operat, ii NU este o operat, ie valida la folosirea unui sistem de
gestionare a versiunii?

q commit
q update
q checkout/clone
q boot

din cadrul unor convent, ii de


4. Care din urmatoarele
NU se refera la recomandari
codare?

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

505

q nume sugestive pentru variabile


q funct, ii cu dimensiune rezonabila
q folosirea de spat, ii s, i linii libere
q licent, ierea codului sub GPL

5. Care din urmatoarele


NU este un IDE?

q Anjuta
q Eclipse
q Microsoft Visual Studio
q OpenOffice

6. Care din urmatoarele


utilitare este folosit n conjunct, ie cu Vim pentru parcurgerea
facila a codului?

q ctags
q splint
q indent
q gdb

7. Care din urmatoarele


NU este un mod de folosire pentru editorul Vim?

q visual
q command
q insert
q graphic

n Vim, pentru salvarea unui fis, ier?


8. Care din urmatoarele
comenzi este folosita,

q :w
q :q
q :s
q :help

9. Care din urmatoarele


este un sistem pentru controlul versiunii?

q Git
q Vim
q Eclipse
q ddd

10. Care din urmatoarele


este o aplicat, ie web pentru gestiunea proiectelor software?

q Trac
q GTK

506

INTRODUCERE N SISTEME DE OPERARE

q ddd
q Waterfall

Capitolul 15
Viat, a n Linux
See, you not only have to be a good coder to create a
system like Linux, you have to be a sneaky bastard too
;-)
Linus Torvalds

Ce se nvat, a din acest capitol?

Cu ce se asculta muzica n Linux


Cum se vede un film n Linux
Cum se scrie un CD/DVD n Linux
Cum se foloseste Y!M n Linux
Cum se descarca cont, inut BitTorrent n Linux
Cum se foloses, te imprimanta n Linux
Ce jocuri 3D s, i 2D exista n Linux
Cum se folosesc doua monitoare n Linux
Cum se editeaza documente Word/Excel n Linux

15.1

Muzica n Linux

Un player bun de muzica trebuie sa asigure, pe lnga posibilitatea de a reda fis, ierele
audio, managementul acestora, salvarea playlist-urilor, posibilitatea de minimize to
tray s, i, eventual, posibilitatea de audio-scrobbling (trimiterea informat, iilor despre
muzica ascultata unor site-uri de profil, precum last.fm1 ). Un utilizator mai pretent, ios ar
cere s, i management-ul fis, ierelor de pe Audio-CD-uri, iPod-uri etc.
Din fericire, majoritatea acestor condit, ii sunt respectate de player-ele audio din Linux,
a a fi necesara instalarea unor plugin-uri suplimentare (acestea fiind instalate automat
far
aplicat, iei).
n momentul instalarii
1

http://www.last.fm/

507

508

INTRODUCERE N SISTEME DE OPERARE

Figura 15.1: Rhythmbox

Figura 15.2: Amarok


Sistemele de operare Ubuntu au preinstalat Rhythmbox. Nu este doar un player audio
ci s, i o aplicatie pentru managementul fis, ierelor audio, inspirata din aplicat, ia iTunes de la
Apple. Echivalent, n mediile Kubuntu este preinstalat Amarok.
Daca aplicat, iile preinstalate nu corespund preferint, elor lui, utilizatorul poate oricnd sa
instaleze altele, precum:

Banshee1 o aplicat, ie similara Rhythmbox, bazata pe mono


Listen2 o aplicat, ie minimala scrisa n Python
Audacious3 un player similar aplicat, iei Winamp din Windows
1

http://banshee-project.org/
http://www.listen-project.org/
3
http://audacious-media-player.org
2

CAPITOLUL 15. VIAT, A N LINUX

509

Figura 15.3: Audacious

Exaile1 o aplicat, ie similara Amarok pentru GNOME


O aplicat, ie interesanta este Music Player Daemon2 . As, a cum i spune s, i numele,
programul ruleaza ca daemon, dar este controlat, fie local, fie prin ret, ea, de un client.
Exista zeci de astfel de client, i, pentru diverse platforme, scris, i n varii limbaje de
programare s, i cu interfet, e grafice sau n mod text.

15.2

Filme n Linux

Vizualizarea de filme este deseori mai facila n Linux dect n Windows, pentru ca

programele care exista sunt toate gratuite n adevaratul


sens al cuvntului, adica nu vin
Mai mult, n general instalarea unui video
cu alt software de provenient, a ndoielnica.
player pe Linux implica automat instalarea codecurilor asociate, daca ele nu sunt deja
instalate.
VLC este un player produs de proiectul VideoLAN. Acesta are avantajul de a avea
codec-uri integrate, ceaa ce reduce pachetele adit, ionale care trebuiesc instalate cu el.
Pe sistemele Debian, pachetul asociat se numes, te vlc.
dar la fel de bogat
O alternativa la VLC este mplayer, cu o interfat, a mai minimala,
, i. Utilizatorii mplayer pot alege ntre mai multe variante de interfet, e, de la
n facilitat
mod text pna la GUI-uri sofisticate s, i interfet, e native (pentru Mac OS X, de exemplu).
mplayer are, de asemenea, posibilitatea de a reda filme folosind mai multe drivere de
Astfel, daca pachetele potrivite sunt
output, folosind parametrul -vo n linie de comanda.
instalate, un utilizator nu are, de exemplu, nevoie de interfat, a grafica pentru a vizualiza
un fis, ier. mplayer poate afis, a direct n framebuffer folosind biblioteca directfb sau
n mod text folosind aalib3 .
Ambele programe ment, ionate folosesc preponderent biblioteca libavcodec, parte a
proiectului FFmpeg. Pentru unele formate specifice Windows, se pot instala drivere
1

http://www.exaile.org
http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki
3
aalib foloses, te text pentru a reda imagini ct mai bine, deci poate fi folosit peste conexiuni text-only.
2

510

INTRODUCERE N SISTEME DE OPERARE

proprietare, numite generic w32codecs. Nu n ultimul rnd, ambele pachete sunt


portabile, deci pot fi rulate cu us, urint, a s, i pe Windows.

15.3

Scrierea unui CD/DVD n Linux

n mod clasic, scrierea de CD-uri/DVD-uri n Linux se realizeaza cu ajutorul utilitarului


cdrecord. n ultimele versiuni, aplicat, ia a fost denumita wodim. Aplicat, iile grafice
folosite uzual pentru scrierea de CD-uri (GnomeBaker, Brasero, K3b) folosesc n spate
utilitarul cdrecord.
Pentru a folosi wodim/cdrecord este nevoie de o imagine de CD (fis, ier .iso. Pentru a
obt, ine o astfel de imagine se foloses, te utilitarul genisoimage (fostul mkisofs):
1
2
3

razvan@valhalla:~/projects$ ls library/
eLiberatica_OReilly_books.odt eLiberatica_OReilly_lista_carti.gnumeric
eLiberatica_OReilly_carti.odt eLiberatica_OReilly_lista_carti.ods

4
5
6
7
8

razvan@valhalla:~/projects$ genisoimage -o library.iso library/


Using ELIBE000.ODT;1 for /eLiberatica_OReilly_carti.odt (
eLiberatica_OReilly_books.odt)
Total translation table size: 0
[...]

9
10
11

razvan@valhalla:~/projects$ file library.iso


library.iso: ISO 9660 CD-ROM filesystem data CDROM

Scrierea CD-ului se face cu o comanda ca cea de mai jos:


1

razvan@valhalla:~/projects$ cdrecord dev=/dev/hda speed=8 library.iso

Imaginea .iso poate fi montata s, i accesata n sistemul local de fis, iere, similar utilitarului
Daemon Tools1 din Windows:
1

razvan@valhalla:~/projects$ mkdir tmp_mount

2
3

razvan@valhalla:~/projects$ sudo mount -o loop -t iso9660 library.iso


tmp_mount/

4
5
6

razvan@valhalla:~/projects$ ls tmp_mount/
elibe000.odt eliberat.gnu eliberat.ods eliberat.odt

n urma obt, inerii imaginii, fis, ierele au fost redenumite n formatul 8.32 .
Se observa ca,
n GNOME, scrierea CD-urilor se poate realiza cu ajutorul utilitarului GnomeBaker.
Pentru scrierea unui CD, se pornes, te utilitarul, se selecteaza opt, iunea Data CD s, i apoi
se adauga directoarele de scris pe CD n arborescent, a din partea stnga jos, as, a cum

reiese din figura 15.4. n momentul n care toate fis, ierele au fost adaugate
se foloses, te
butonul Burn.
n KDE, scrierea CD-urile se realizeaza cu ajutorul utilitarului K3b (vezi figura 15.5).
Modul de utilizare este foarte apropiat de cel al GnomeBaker.
1
2

http://www.daemon-tools.cc/eng/home
http://en.wikipedia.org/wiki/8.3_filename

CAPITOLUL 15. VIAT, A N LINUX

511

Figura 15.4: Scrierea unui CD folosind GnomeBaker

Figura 15.5: Scrierea unui CD folosind K3b

15.4

Messenger n Linux

Pentru utilizatorii de Instant Messaging, Linux are, tradit, ional, o alternativa us, or diferita,

dar mult mai flexibila s, i mai utilizabila.


Acest program se numes, te Pidgin. Init, ial numit Gaim, Pidgin are avantajul de a fi
multi-protocol. Folosind aceeas, i interfat, a s, i o singura instant, a a programului, un
utilizator poate avea acces la conturile de Yahoo Messenger, MSN/Windows Live,
Google Talk, AIM etc. Mai mult, este posibila folosirea mai multor conturi din aceeas, i
a a fi nevoie de instalarea unui patch adit, ional.
ret, ea simultan, far
Central conceptului de conturi multiple din Pidgin este fereastra Accounts. Aceasta

poate fi accesata din meniul AccountsManage Accounts. Adaugarea


unui cont

512

INTRODUCERE N SISTEME DE OPERARE

ea nu necesta configurari
adit, ionale. Google Talk
de Yahoo este ct se poate de facila;

necesita specificarea unui domeniu, pentru ca se bazeaza pe un protocol descris numit

XMPP1 . Un exemplu de adaugare


a unui cont Google Talk este prezentat n figura 15.6.

Figura 15.6: Adaugarea


unui cont de Google Talk n Pidgin
pentru toate conturile active. Aceasta faciliteaza s, i
Lista de contacte este una singura,
gruparea mai multor contacte ntr-unul singur, pentru cazul n care aceeas, i persoana
este prezenta n lista de contacte pe mai multe conturi sau ret, ele.
Pidgin are inclusiv suport de chat multidirect, ional, cum ar fi conferint, e de Yahoo sau

protocolul IRC. Aceste chat rooms pot fi adaugate


n lista de contacte, astfel programul

are o interfat, a uniforma.


printre altele, s, i de
Nucleul Pidgin este biblioteca Purple. Aceasta mai este folosita,
ator

Finch, un program cu interfat, a text-mode, dar aseman


cu Pidgin. Cele doua

programe s, i biblioteca asociata sunt dezvoltate de echipe cu legaturi


foarte strnse s, i
au pornit din acelas, i cod.
Alternative la Pidgin sunt Kopete (parte a mediului KDE), Empathy (care va nlocui Pidgin
n unele distribut, ii), sau, cu interfat, a text, centerim.

15.5

BitTorrent n Linux

Pentru protocolul BitTorrent (protocol peer-to-perr de transfer de fis, iere) exista mai multe
aplicat, ii n Linux. Astfel, Ubuntu vine cu Transmission2 preinstalat. Simplu s, i us, or
configurabil, programul se remarca prin faptul ca utilizatorul nu trebuie sa seteze nicio
preferint, a init, ial nainte de rularea acestuia (existnd definite opt, iuni by-default pentru
ca toate lucrurile sa funct, ioneze perfect). Desigur, opt, iunile pot fi reconfigurate s, i acest
1
2

http://xmpp.org
http://www.transmissionbt.com/

CAPITOLUL 15. VIAT, A N LINUX

513

nefiind necesara o experient, a foarte vasta.

lucru se face foarte us, or din interfat, a grafica,


De asemenea, clientul Transmission are cel mai mic consum de memorie dintre toate
aplicat, iile ce folosesc protocolul BitTorrent.

Figura 15.7: Transmission


Pentru Kubuntu exista preinstalat Ktorrent1 . Ca s, i n cazul Transmission, folosirea
majoritatea configurarilor

acestui program este foarte facila,


realizndu-se prin interfat, a

grafica.

Figura 15.8: Ktorrent


Pentru cazul n care nu este disponibila o interfat, a text, exista posibilitatea folosirii
1

http://ktorrent.org/

514

INTRODUCERE N SISTEME DE OPERARE

rtorrent1 . Utiliznd ncurses2 , aceasta aplicat, ie este foarte us, or de folosit peste o
a interfat, a grafica.

conexiune ssh sau ntr-un mediu far


Nu n ultimul rnd, exista Limewire3 , o aplicat, ie cross-platform bazata pe Java,
, i reduse de BitTorrent. n plus, aplicat, ia foloses, te ret, eaua Gnutella4
suportnd facilitat

pentru a localiza fis, ierele cautate.

15.6

Imprimanta n Linux

n Linux, folosirea imprimantei este condit, ionata de instalarea s, i configurarea CUPS


(Commmon Unix Printing System). CUPS permite instalarea unui server care trimite

Poate fi astfel folosit pentru a servi solicitari


sosite din
solicitarile
catre
o imprimanta.
ret, ea. Pachetul asociat se numes, te cups.
n cadrul CUPS exista pachetul cups-pdf care permite instalarea unei imprimante
virtuale. Folosirea acestei imprimante virtuale conduce la obt, inerea unui fis, ier PDF5 . n
mod implicit, fis, ierele generate sunt stocate n directorul PDF din home-ul utilizatorului
curent.
Imprimantele (sau serviciul CUPS) pot fi configurate n doua moduri:

prin intermediul interfet, ei grafice, n Gnome (vezi figura 15.9) sau KDE (vezi
figura 15.10);
n
prin intermediul interfet, ei web (vezi figura 15.11); interfat, a web este accesata,
mod implicit, prin intermediul URL-ului http://localhost:631/.

Figura 15.9: Gestiunea imprimantei n GNOME


Configurarea imprimantei poate fi realizata numai de un utilizator privilegiat. Operat, iile

de
uzuale sunt adaugarea
imprimantei, s, tergerea imprimantei, modificarea configurarii

imprimanta.
CUPS are instalate majoritatea driverelor de imprimanta astfel nct
a operat, ii suplimentare. n caz de
majoritatea imprimantelor vor putea fi configurate far

probleme sau n cazul folosirii unor imprimante ale caror


drivere nu sunt prezente se
6
recomanda accesarea site-ului OpenPrinting .
1

http://libtorrent.rakshasa.no/
http://www.gnu.org/software/ncurses/ncurses.html
3
http://http://wiki.limewire.org/
4
http://en.wikipedia.org/wiki/Gnutella
5
http://en.wikipedia.org/wiki/Portable_Document_Format
6
http://www.linuxfoundation.org/collaborate/workgroups/openprinting
2

CAPITOLUL 15. VIAT, A N LINUX

515

Figura 15.10: Gestiunea imprimantei n KDE

Figura 15.11: Interfat, a web pentru CUPS

15.7

Jocuri n Linux

Datorita originilor s, i mediului caruia


i-a fost destinat pna nu demult, Linuxul nu a

reprezentat un segment de piat, a atractiv pentru producatorii


de jocuri. De aceea nu
exista foarte multe jocuri care pot rula pe acest sistem de operare.
n Windows, cele mai multe jocuri folosesc pentru desenarea obiectelor 3D API-ul
Direct3D de la Microsoft, parte a API-ului multimedia DirectX (DirectX a ajuns la
versiunea 10 odata cu aparit, ia Windows Vista). Pe lnga acest API (proprietar
Microsoft), exista s, i jocuri care folosesc un alt API, open source, numit OpenGL (Open
Graphics Library). OpenGL este o colect, ie de funct, ii gndite a fi cross-language s, i
cross-platform. Este printre put, inele API-uri standardizate folosite n Linux pentru
crearea obiectelor 3D s, i implicit a jocurilor 3D.
Dintre cele mai cunoscute jocuri pe Linux avem:

516

INTRODUCERE N SISTEME DE OPERARE

Battle for Wesnoth1 un joc de strategie fantasy


Nexuiz2 shooter, clona Quake
Armagetron Advanced3 un joc bazat pe un film SF din anii 80

Figura 15.12: Nexuiz

, i conectrate n jurul lor, exista s, i


n afara de aceste jocuri gratis, facute
de comunitat
jocuri cu suport pe Linux din partea unor firme mari. Dintre acestea probabil cea mai
bine cunoscuta este Id Software care ofera majoriatatea jocurilor produse s, i pe Linux.

Epic games, productatorul


seriei Unreal, ofera de asemenea pentru anumite jocuri s, i o
varianta pentru Linux.
Wine4 este o aplicat, ie ce permite rularea unor programe destinate platformelor Windows
pe un sistem Linux. Pentru a vedea daca o aplicat, ie ruleaza n wine s, i alte informat, ii
legate de rularea ei n wine putet, i consulta baza de date a proiectului5 . Winetricks6 este

un script facut
pentru instala mai us, or anumite aplicat, ii specifice Windows, cum ar fi
directx sau framework-ul .NET.

15.8

Dual-monitor n Linux

Odata cu trecerea de la monitoarele CRT la cele LCD s, i n acelas, i timp cu scaderea


pret, ului la hardware, posibilitatea de a conecta doua monitoare la sistemul fizic a devenit
Cres, terea productivitat
, ii s, i a confortului n utilizarea calculatorului ndeamna
accesibila.
din ce n ce mai mult, i utilizatori sa foloseasca o astfel de solut, ie.
1

http://www.wesnoth.org
http://www.alientrap.org/nexuiz
3
http://armagetronad.net
4
http://www.winehq.org/
5
http://appdb.winehq.org/
6
http://wiki.winehq.org/winetricks
2

CAPITOLUL 15. VIAT, A N LINUX

517

Atunci cnd sunt conectate doua monitoare la sistem (sau un monitor s, i un


videoproiector) acestea pot fi utilizate n doua configurat, ii:

mirror, n care amndoua monitoarele arata aceeas, i imagine

extended, n care imaginile aratate


de cele doua monitoare sunt diferite s, i alaturate
Configurat, ia mirror este utila numai n cazul n care se dores, te vizualizarea aceleias, i

informat, ii pe mai multe monitoare. n schimb, configurat, ia extinsa permite marirea


spat, iului de lucru, as, a cum se poate vedea n figura 15.13.

Figura 15.13: Alaturarea


a doua desktop-uri. Fiecare este redat pe un monitor separat
Pentru realizarea unei configurat, ii de acest gen se pot folosi utilitare grafice sau utilitare
n cazul GNOME, accesnd System -> Preferences ->
n linie de comanda.
Display se pot configura att parametrii pentru fiecare din monitoare (rezolut, ie, rata de
monitor (figura 15.14). n plus, intrefat, a
refresh) ct s, i activarea sau dezactivarea fiecarui
de configurare permite alegere modului n care sunt as, ezate cele doua desktop-uri: unul
a altul, unul deasupra altuia sau, spre exemplu, pe ce monitor se afis, eaza desktop-ul
lang
din stnga.
avansate, va trebui folosit
n cazul n care se dores, te realizarea unui set de configurari
utilitarul xrandr, descris n sect, iunea 13.4.1.
Un exemplu de comanda xrandr ce permite configurarea monitorului extern pentru un

laptop ca desktop extins este urmatoarea:


1

george@asgard:~$ xrandr --output VGA --mode 1920x1200 --rate 60 --pos 0x0


--output LVDS --mode 1280x800 --rate 60 --pos 0x1200

As, a cum se poate vedea, pentru fiecare din monitoare (LVDS ecranul laptop-ului s, i

VGA ies, irea video) se configureaza trei parametri:


rezolut, ia, prin parametrul --mode
rata de refresh, prin parametrul --rate (acest parametru poate lipsi, caz n care

sistemul de operare va alege automat cea mai buna varianta posibila)

pozit, ia desktop-ului, prin parametrul --pos

la fel ca majoritatea elementelor ce t, in de grafica pe


Pozit, ia desktop-ului se masoar
a,
calculator, ncepnd din colt, ul din stnga sus, avnd axa Ox orizontala s, i axa Oy

518

INTRODUCERE N SISTEME DE OPERARE

pentru desktop extins in GNOME


Figura 15.14: Configurari
orientata n jos. Astfel, n exemplul de mai sus, ies, irea VGA se va afla cu colt, ul din

stanga
sus n origine (X=0, Y=0), iar ies, irea LVDS se afla sub cea VGA, amndoua
aliniate la stnga (X=0, Y=1200).
Un alt exemplu de configurare a unui desktop multiplu, care a generat configurat, ia
prezenta n figura 15.14, este:
1

george@asgard:~$ xrandr --output VGA --mode 1280x1024 --pos 1280x0 -output LVDS --mode 1280x800 --pos 0x224

Ies, irea LVDS este plasata n stnga (X=0), cu 224 de pixeli mai jos ca originea (Y=224).
Ies, irea VGA este plasata n dreapta, la 1280 de pixeli departare de origine (X=1280) s, i
la acelas, i nivel cu aceasta (Y=0). Cei 224 de pixeli, calculat, i ca diferent, a dintre nalt, imea
celor doua ecrane (1024 s, i 800), au fost folosit, i pentru a aduce partea de jos a celor doua
ecrane la acelas, i nivel. Dupa cum se poate vedea s, i n figura 15.14, n patea de sus a
ecanului mai mic (LVDS) apare o banda neagra care nu va fi observata nsa pe niciunul
din monitoare.

15.9

Documente office n Linux

Des, i suita Microsoft Office nu este disponibila pentru Linux, interoperabilitate aproape
completa cu ea se poate obt, ine utiliznd OpenOffice.
OpenOffice are, similar cu produsul Microsoft, componente pentru editarea

documentelor, a foilor de calcul, gestiunea bazelor de date s, i realizarea prezentarilor,


numite Writer, Calc, Base, respectiv Impress. n plus, exista un corespondent al lui
Visio numit Draw s, i un editor de formule matematice numit Math.

CAPITOLUL 15. VIAT, A N LINUX

519

Versiunea 3.0 a OpenOffice are inclusiv suport pentru documente n format OOXML1 .
n schimb, n situat, ia n care nu este nevoie de compatibilitate cu
Este recomandata,
Microsoft Office, folosirea documentelor n format nativ. Standardul se numes, te ODF
(Open Document Format), este omologat ISO, s, i implementat de numeroase alte suite
similare.
Pentru distribut, ia documentelor read-only este recomandat formatul .pdf. Salvarea
unui document din Writer n acest format este o facilitate care vine cu OpenOffice, nefiind
nevoie de instalarea unui plugin.
dar sunt s, i multe
Desigur, exista alternative la OpenOffice; KOffice este o suita similara,
programe standalone, care pot edita un singur tip de fis, ier. Asemenea programe se
, i hardware mai reduse. Doua
disting prin viteza de operare superioara s, i necesitat
2
3
exemple cunoscute sunt AbiWord s, i Gnumeric .

Cuvinte cheie

Rhythmbox

K3b

Amarok

Pidgin

Banshee
codecuri

BitTorrent
Transmission

VLC
mplayer
wodim (cdrecord)

Ktorrent
CUPS

genisoimage

OpenOffice

GnomeBaker

ODF

ntrebari

a despre codec-urile audio s, i video


1. Care dintre urmatoarele
afirmat, ii este adevarat
n Linux?

q nu exista codec-uri audio/video pentru Linux

q un utilizator trebuie sa plateasc


a pentru codec-uri n Linux

q codec-urile sunt gratuite, dar trebuiesc compilate din surse


q majoritatea codec-urilor sunt instalate ca dependent, e ale player-elor

corespunzatoare

a cu procesul de scriere a unui


2. Care dintre urmatoarele
comenzi NU are legatur
CD sau DVD?
1

Formatul OOXML a fost introdus odata cu Microsoft Office 2007 s, i se distinge prin adaugarea
literei
x la extensia veche, de exemplu .docx
2
http://www.abisource.com/
3
http://projects.gnome.org/gnumeric/

520

INTRODUCERE N SISTEME DE OPERARE

q wodim
q cdrecord
q mplayer
q genisoimage
, i pentru IRC?
3. Ce program are s, i facilitat

q Pidgin
q Ktorrent
q centerim
q Audacious
4. CUPS este o suita de programe care se foloses, te la:

q printare
q scrierea unui CD/DVD
q editarea de documente Office
q CUPS este un joc

5. Pentru trimiterea unui document catre


un coleg pentru printare este recomandat
formatul:

q .doc
q .docx
q .pdf
q .odt

Anexa A

Raspunsuri
la ntrebari
Capitolul 1. Introducere
1. interpretor de comenzi trebuie sa se poata interpreta comenzi pentru
funct, ionarea sistemului de operare
2. BIOS BIOS-ul nu este una din resursele de care este nevoie n virtualizare
3. Larry Wall autorul limbajului Perl
4. c
autarea si eliminarea programelor virus - de aceste lucruri se
ocupa o aplicat, ie antivirus
5. OpenSolaris celelalte sunt sisteme de operare specializate pentru dispozitive
mobile
6. OpenVZ ruleaza doar sub Linux
7. un proiect care produce o component
a important
a a
aplicat, iilor ce ruleaz
a peste nucleul Linux - GNUs not Unix
8. Windows pentru ca viat, a e dura s, i marketing-ul e marketing
9. Symbian OS dar iPhone OS is catching up
10. Unix dezvoltat de un grup de la AT&T n anul 1969

de baza
Capitolul 2. Instalarea Linux. Configurari
1. 1 poate exista doar un root
2. configurarea unei partit, ii primare pentru ca se ruleaza ntr-un
mediu temporar
3. PalmOS
4. adev
arat, adev
arat
5. comanda a fost lansat
a de utilizatorul root se presupune ca
root are privilegii complete
6. swap swap este un tip de partit, ie, nu un tip de sistem de fis, iere
521

522

INTRODUCERE N SISTEME DE OPERARE

7. virtual
a toate celelalte sunt tipuri de partit, ii
8. Ubuntu
9. window manager window manager se refera la mediul grafic

10. adduser adduser este folosita pentru a adauga


utilizatori

Capitolul 3. Gestiunea pachetelor s, i utilizatorilor


1. useradd va crea un utilizator nou folosind configurat, ia implicita
2. Permisiunile asupra /etc/passwd nu asigur
a securitate
maxim
a. /etc/passwd poate fi citit de orice utilizator
3. apt este un wrapper peste dpkg
4. leg
aturi simbolice
5. grupurile din care face parte informat, iile despre grupuri sunt t, inute
n fis, ierul /etc/group
6. con
tine versiuni ale unor pachete diferite de ceea se
g
ases, te n repository-urile centrale programatorii folosesc
astfel de repository-uri pentru testarea de noi versiuni ale programelor

Capitolul 4. Sisteme de fis, iere


1. suportului pentru jurnalizare n cazul n care se ntrerupe curentul,

ultimele operat, ii pot fi refacute


pe baza jurnalului
2. /etc/fstab
3. 606 653 = rw-r-x-wx; a-x va elimina dreptul de execut, ie de la tot, i
(rw-r---w-); u+x va da drept de scriere owner-ului (nu se realizeaza

schimbari);
g-r va elimina drepturile de citire ale grupului (rw----w-); o+r va
da drepturi de citire altor utilizatori; drepturile n final vor fi rw----w- (606)
4. cat comanda cat poate fi aplicata doar fis, ierelor
5. interfat,
a de ret, ea de looback nu are corespondent n sistemul de
fis, iere
6. EXT3
7. tot, i utilizatorii 755 = rwx-r-xr-x
8. afis, area de mesaje despre arhivare conform man
9. mount
10. formatarea partit, iei cu sistemul de fis, iere dorit fiind data
o partit, ie, pentru a putea folosi spat, iul de pe aceasta, este necesara formatarea
acesteia cu un sistem de fis, iere

ANEXA A. RASPUNSURI
LA NTREBARI

523

Capitolul 5. Procese
1. init este primul proces pornit n sistem, cu PID-ul 1
2. nohup comanda este folosita pentru a rula un proces cu caracteristici de
daemon
3. 1 exista un singur proces init cu PID-ul 1
4. oricte nu exista limita pentru procesele bash din sistem
5. kill comanda doar trimite semnale proceselor
6. fals,fals un program poate fi rulat de mai multe ori astfel se vor crea mai
multe procese care au aceeas, i imagine; top afis, eaza pe prima coloana pid-ul
7. pkill comanda permite trimiterea de semnale

8. /proc un sistem de fis, iere virtual, n care se gasesc


informat, ii despre fiecare
proces n parte
, ile
9. adev
arat, fals toate PID-urile au valori pozitive; n mod normal, prioritat
au valori ntre -19 s, i +20
10. explorer - nice Explorer este un shell, nice este o comanda pentru
, ii unui proces
modificarea prioritat

Capitolul 6. Pornirea s, i init, ializarea sistemului


1. BIOS, GRUB, vmlinuz, init
2. un sector ce cont, ine semn
atura 0xAA55 (ultimii doi
octet, i) un sector este de tipul boot daca el cont, ine aces, ti ultimi doi ocetet, i,
astfel se poate face un sector care sa nu cont, ina un sistem de operare dar sa fie
bootabil avnd aces, ti ultimi doi octet, i
3. upstart
4. 4, 1, 1, oricte
5. POST/CMOS
6. stage2
7. /boot/grub/menu.lst
8. init, getty, login, bash
9. (hd1,2)
10. adev
arat/adev
arat

Capitolul 7. Analiza hardware a sistemului


, ii de
1. CPU CPU (Central Processing Unit) este procesorul, echivalentul unitat
, ii de execut, ie din modelul Von Neumann
comanda s, i a unitat

524

INTRODUCERE N SISTEME DE OPERARE

2. dd dd copiaza date raw de pe un dispozitiv


3. dd dd este utilitar de copiere de date, nu de informare
4. modinstall nu exista comanda modinstall
5. /dev/hda3 /dev/hda3 reprezinta un disc
6. /dev/ttyS0 /dev/ttyS0 este asociat unui dispozitiv serial
7. southbridge southbridge este unul din cele doua chipset-uri importante de
pe placa de baza
8. TGZ TGZ se refera la un tip de arhiva
9. placa grafic
a AGP (Advanced Graphics Port)
10. dimensiunea registrelor dimensiunea registrelor este cea care denota
tipul arhitecturii (arhitectura pe 32 de bit, i, pe 64 de bit, i)

de ret, ea
Capitolul 8. Configurari
1. Serverul web de la adresa cs.pub.ro este oprit stat, ia este
online (comanda ping reus, es, te); daca browser-ul nu reus, es, te nseamna ca
serverul web este oprit
2. Nu adresa este gres, ita (al treilea octet este 257; mai mare dect 255)
3. 172.16.150.0 se face operat, ia 172.16.150.200 S, I-LOGIC 255.255.255.0;
rezulta 172.16.150.0
4. Dorel a generat foarte mult trafic n timp scurt, lucru
specific virus, ilor opt, iunea -f a comenzii ping genereaza foarte multe
pachete (flood)
5. Asocia nume de domenii cu adrese IP conform definit, iei
6. 102.168.124.159, pentru c
a a fost ultima adres
a
configurat
a de root masca este configurata implicit daca nu se foloses, te
opt, iunea netmask
7. fals, adev
arat fis, ierul se cheama /etc/network/interfaces
8. adev
arat, false serverele pot fi accesate; DNS este necesar pentru a
asigura referirea acestora prin nume (n loc de adresa IP)
9. calea c
atre surs
a s, i destinat, ie conform definit, iei
10. ping localhost toate celelalte comenzi folosesc comanda ping catre un
server referit prin nume; referirea prin nume necesita un server DNS

Capitolul 9. Servicii de ret, ea


1. editarea unui nou mesaj editarea se face pe sistemul local; nu necesita
o conexiune client-server

ANEXA A. RASPUNSURI
LA NTREBARI

525

2. fals, fals telnet este protocol de nivel aplicat, ie care funct, ioneaza peste TCP
(nivel transport); comunicat, ia este bidirect, ionala
3. SSH SMTP s, i IMAP sunt protocoale de e-mail, HTTP este protocol web
a cu serviciul web
4. FTP FTP (File Transport Protocol) nu are nici o legatur
5. Postfix Firefox este browser, Outlook client de e-mail, Apache este server
web
6. pentru stabilirea conexiunii utilizatorul bestman trebuie
s
a existe pe test.com comunicat, ia FTP necesita autentificare pe
server; bestman este utilizatorul care trebuie sa se autentifice
7. adev
arat, fals din definit, ie
8. Thunderbird Thunderbird este client de e-mail
9. ssh wget s, i curl sunt client, i web, iar telnet permite conectarea s, i transmiterea

de comenzi s, i raspunsuri
HTTP
10. niciuna dintre variante comunicat, ia se realizeaza folosind SMTP

Capitolul 10. Elemente de securitate


1. filtrarea pachetelor de ret, ea
2. citire s, i execut, ie cu umask 022 fis, ierul va fi creat cu drepturi 644.
Dupa execut, ia comenzii chmod go+x test grupul va primi drept de execut, ie.
ntr-un final, grupul va avea drepturile r-x
formata cu cifre, litere s, i simboluri
3. _cOrN31[]sh+ este o parola complexa,
4. vrfuri de tensiune n ret, eaua electric
a
5. toate variantele
6. fals, fals virusul dintr-un e-mail trebuie nti activat; n funct, ie de tipul lui s, i
de clientul de e-mail, metoda de activare poate diferi; un sistem poate fi "gazda"
orictor virus, i, att timp ct nu este protejat
7. num
arul de client, i ai server-ului restul informat, iilor se pot extrage
direct din traficul monitorizat
8. ulimit
9. definirea unei politici de securitate
10. /etc/shadow

Capitolul 11. Compilare s, i linking


1. ajut
a ca aplicat, iile s
a fie mai simplu de ntret, inut

programatorii nu mai trebuie sa dezvolte s, i sa ntret, ina componente, utiliznd


componentele disponibile n biblioteci

526

INTRODUCERE N SISTEME DE OPERARE

2. -c
3. se numes, te portabilitate

4. make <target> fis, ierul Makefile trebuie sa se gaseasc


a n directorul
curent; pentru trimiterea unui fis, ier Makefile ca parametru se foloses, te
parametrul -f
5. fis, iere surs
a C f
ar
a directive de precompilare
6. static library codul dintr-o biblioteca statica este integrat la compilare n
executabil

7. adev
arat, fals apelurile de sistem pot fi executate s, i direct de catre
aplicat, ii
8. fis, ierul este executabil restul informat, iilor reies din ies, irea comenzii

file
9. fals, fals programele interpretate se depaneaza mai us, or dect cele
compilate deoarece procesul de dezvoltare nu mai presupune compilarea codului;
nu rezulta fis, iere n limbaj de asamblare (fis, ierele n limbaj de
n urma compilarii
asamblare nu se pot executa direct pe procesor)
10. strace <program>

Capitolul 12. Shell scripting


1. Flash Flash este un plug-in pentru web browser
2. grep este singura comanda dintre cele prezentate care poate primi ca
parametru o expresie regulata
3. << este operatorul pentru deschiderea unui here document
4. test a ==b [$a == $b] nu are operanzii separat, i de paranteze; celelalte
, ii
opt, iuni nu sunt folosite pentru testarea egalitat
5. Sorteaz
a liniile n format numeric
6. cut cut este folosit pentru extragerea de componente dintr-o linie de text
7. Viteza mare de execut, ie scripturile shell trebuie sa fie interpretate, motiv
pentru care au o viteza mica de execut, ie
8. Prezint
a calea c
atre utilitarul folosit pentru rularea

scriptului
9. repeat nu exista comanda repeat n Bash
10. find . -mindepth 2 -type f comanda afis, eaza recursiv doar fis, ierele
din subdirectoare

Capitolul 13. Mediul grafic


1. PNG PNG este un format bitmap cu suport pentru transparent, a (alpha channel)

ANEXA A. RASPUNSURI
LA NTREBARI

527

2. UTF-8 UTF-8 este un standard de codificare a caracterelor n fis, iere


3. permite unui utilizator s
a se autentifice n interfat, a
grafc
a conform definit, iei
4. Xorg s, i bitmap Xorg este o implementare de server X, bitmap este un tip
de imagini
5. Dorel nu are dreptul s
a porneasc
a serviciul kdm din prompt
se poate observa ca utilizatorul nu este autentificat ca root

6. Spotlight Spotlight este un serviciu de indexare s, i cautare


a fis, ierelor n Mac
OS X
7. KDE KDE este un Desktop Environment
8. System Information restul aplicat, iilor sunt folosite pentru a afla informat, ii
n linia de comanda
9. Adev
arat, Fals Un Window Manager controleaza cum arata ferestrele
aplicat, iilor prin intermediul componentei window decorator.
Clientul X nu
interact, ioneaza cu utilizatorul direct; server-ul X face acest lucru.
10. Xorg Xorg este o implementare de server X

Capitolul 14. Utilitare pentru dezvoltare


1. Vim gdb este un debugger, ctags este un program utilizat pentru a prelucra o
sursa s, i scoate un fis, ier cu indecs, i s, i astyle este un code beautifier
2. Valgrind git este un program de revision control, indent este un code
beautifier s, i Trac este un utilitar de management a proiectelor
a
3. boot checkout/clone aduc local o copie a repository-ului, commit adaug

modificarile
la repository s, i update aduce repository-ul local la cea mai noua
versiune
4. licent, ierea codului sub GPL o licent, a nu va influent, a frumuset, ea sau
lizibilitatea codului.

5. OpenOffice OpenOffice este Office Suite, nu ofera unelte necesare dezvoltarii


codului.
6. ctags splint este un utilitar de analiza statica a codului, indent este un
code beautifier s, i gdb este un utilitar de depanare

7. graphic n modul visual se intra apasnd


tasta v, n modul command se

intra apasnd
:, n modul insert se intra apasnd
tasta i
8. :w :q nchide editorul, :s va face replacei, :help lanseaza ntr-un tab fis, ierul de
help
9. git Vim este un editor, Eclipse este un IDE s, i ddd este un debugger
10. Trac GTK este un widget toolkit, ddd este un debugger s, i Waterfall este un
model de a dezvoltare software-ului

528

INTRODUCERE N SISTEME DE OPERARE

Capitolul 15. Viat, a n Linux


1. Majoritatea codec-urilor sunt instalate ca dependen
te ale
player-elor corespunz
atoare. pentru o utilizare mai us, oara (nu
trebuie instalare ulterior codecurile)
2. mplayer este un media player
3. Pidgin libpurple, biblioteca utilizata de Pidgin are suport s, i pentru IRC
4. printare Common Unix Printing System
5. .pdf celelalte formate nu sunt suportate integral pe toate sistemele

Bibliografie
[1] Tom Adelstein and Bill Lubanovic. Linux System Administration. OReilly Media,
March 2007.
[2] Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman. compilers: Principles, Techniques,
and Tools. Addison Wesley, January 1986.
[3] Ross J. Anderson. Security Engineering: A Guide to Building Dependable
Distributed Systems. Wiley, second edition, April 2008.
[4] Nitesh Dhanjani and Justin Clarke. Network Security Tools. OReilly Media, April
2005.
[5] Bruce Eckel. Thinking in Java. Prentice Hall PTR, fourth edition, February 2006.
[6] John Fusco. The Linux Programmers Toolbox. Prentice Hall, March 2007.
[7] Simson Garfinkel, Gene Spafford, and Alan Schwartz. Practical Unix and Internet
Security. OReilly Media, third edition, February 2003.
[8] Mark G. Graff and Kenneth R. Van Wyk. Secure Coding: Principles and Practices.
OReilly, July 2003.
[9] John L. Hennessy and David A. Patterson. Computer Architecture: A Quantitative
Approach. Morgan Kaufmann, fourth edition, September 2006.
[10] Michael Horton and Clinton Mugge. Hacknotes - Network Security Portable
Reference. McGraw-Hill Osborne Media, July 2003.
[11] Steve Hunger. Debian GNU/Linux Bible. Wiley, May 2001.
[12] Brian W. Kernighan and Rob Pike. The Practice of Programming. Addison-Wesley
Professional, February 1999.
[13] Brian W. Kernighan and Dennis M. Ritchie. The C Programming Language. Prentice
Hall, second edition, April 1988.
[14] Donald E. Knuth. Art of Computer Programming. Addison-Wesley Professional,
October 1998.
[15] John R. Levine. Linkers and Loaders. Morgan Kaufmann, October 1999.
[16] Robert Love. Linux Kernel Development. Novell Press, second edition, January
2005.
[17] Robert Love. Linux System Programming. OReilly Media, September 2007.
529

530

INTRODUCERE N SISTEME DE OPERARE

[18] Neil Matthew and Richard Stones. Beginning Linux Programming. Wrox, November
2007.
[19] David A. Patterson and John L. Hennessy. Computer Organization and Design: The
Hardware/Software Interface. Morgan Kaufmann, fourth edition, November 2008.
[20] Cyrus Peikari and Anton Chuvakin. Security Warrior. OReilly Media, January 2004.
[21] Eric S. Raymond. The Art of Unix Programming. Addison-Wesley Professional,
October 2003.

[22] Razvan
Rughinis, , Razvan
Deaconescu, Andrei Ciorba, and Bogdan Doinea. Ret, ele
locale. Printech, September 2008.

[23] Razvan
Rughinis, , Razvan
Deaconescu, George Milescu, and Mircea Bardac.
Utilizarea sistemelor de operare. Printech, September 2007.
[24] Joel Scambray, Mike Shema, and Caleb Sima. Web Applications (Hacking
Exposed). McGraw-Hill Osborne Media, second edition, June 2006.
[25] Bruce Schneier. Applied Cryptography. John Wiley & Sons, second edition, October
1996.
[26] Avi Silberschatz, Peter Baer Galvin, and Greg Gagne. Operating System Concepts.
John Wiley & Sons, seventh edition, December 2004.
[27] W. Richard Stevens.
Advanced Programming in the Unix Environment.
Addison-Wesley Professional, June 1992.
[28] W. Richard Stevens. TCP/IP Illustrated. Addison-Wesley Professional, January
1994.
[29] W. Richard Stevens. Unix Network Programming. Prentice Hall, second edition,
January 1998.
[30] Andrew S. Tanenbaum. Computer Networks. Prentice Hall, fourth edition, August
2002.
[31] Andrew S. Tanenbaum. Structured Computer Organization. Prentice Hall, fifth
edition, June 2005.
[32] Andrew S. Tanenbaum. Modern Operating Systems. Prentice Hall, third edition,
December 2007.
[33] Larry Wall, Tom Christiansen, and Jon Orwant. Programming Perl. OReilly Media,
third edition, July 2000.

Glosar
341
biblioteca,
342, 486
biblioteca partajata,
342
biblioteca statica,
342
biblioteci cu legare dinamica,
342
biblioteci cu legare statica,
BIOS (Basic Input Output System), 153
bitmap, 442
booting, 152
bootloader, 154
branch, 479
bug, 489, 497
bug-report, 497

-Wall, 326
-- help, 43
--help, 372
.vimrc, 477
/dev, 201
/etc/hostname, 236
/etc/hosts, 235
/etc/network/interfaces, 225
/etc/resolv.conf, 233
/proc/cpuinfo, 208
/proc/modules, 194
, uirea comenzilor, 382
nlant
ntrerupere, 204
__cplusplus, 361

C s, i C++, 357
, a pos, tala,
264
Casut
cache L1, 189
cache L2, 189
cachegrind, 492
72
cale absoluta,
72
cale relativa,
case (bash), 367, 394
cat, 378, 400
certificat digital, 311
chainloading, 159
checkout, 479
chmod, 291
chown, 291
chroot, 300
CLI (Command Line Interface), 38, 366
client, 254
cmdlets, 434
CMOS (Complementary Metal Oxide
Semiconductor ), 153
code folding, 473
coding style, 470
42
comanda,
commit, 479
compilare, 321, 328, 331
compilare din surse multiple, 327
compilator, 321, 324

ACL (Access Control List), 88


ACPI (Advanced Configuration and
Power Interface), 198
adresa IP, 219
adresa IPv6, 219
adresa MAC, 219
agile, 497
Anjuta, 469, 494
apel de sistem, 186
apeluri de sistem, 487
API
(Application
Programming
Interface), 7
2
aplicat, ii de baza,
apropos, 43, 372
arhitectura unui sistem de calcul, 188
arhivare, 82
asamblare, 328, 333
astyle, 472
autocompletion (bash), 369
AVFS (Anti-Virus Filesystem), 103
awk, 410
background, 130
bash, 366
bg, 132
531

532
configurare bash, 426
configurare prompt shell, 429
configurare vim, 477
configure, 484
40
consola,
consola GRUB, 164
controlul accesului, 281
controlul versiunii, 479
criptare, 310
csh, 366
ctags, 478, 482
CTRL-\, 139
CTRL-ALT-DEL, 142
CTRL-C, 139
CTRL-Z, 131, 139
cut, 403
Cygwin, 356
daemon, 133
darcs, 479
dd, 206
DDD (Data Display Debugger ), 489, 491
Debian, 25
debug, 489
debugger, 489
depanare, 489
depmod, 195
desktop environment, 447
dezasamblare, 334
dhclient, 225
DHCP (Dynamic Host Control Protocol),
251
director, 69, 74
display manager, 447
dispozitiv bloc, 203
dispozitiv caracter, 203
dispozitive de intrare/ies, ire, 187
distribut, ie Linux, 24
DLL (Dynamic-link library ), 342
DMA, 206
DNS (Domain Name System), 223, 251
documentat, ie html, 499
documentat, ie LaTeX, 499
DoS (Denial of Service), 281
Doxygen, 499
driver, 3, 193
echo, 377
Eclipse, 469, 494

INTRODUCERE N SISTEME DE OPERARE


ELF (Executable and Linking Format),
340
Emacs, 320
emulare, 17
emulator de terminal, 41
EncFS, 103
Ethernet, 252
ethtool, 239
exit, 377
export, 377
407
expresie regulata,
extern, 361
Extreme Programming, 497
feature creep, 282
fg, 132
fis, ier, 69, 74
fis, ier executabil, 339
fis, ier obiect, 333
find, 416
Firewall, 310
firewall, 310
for (bash), 367, 395
foreground, 130
fork bomb, 281
188
frecvent, a,
fsck, 212
FTP (File Transfer Protocol), 251
funct, ii bash, 424
FUSE, 103
gateway, 222
GCC (GNU Compiler Collection), 325
gcc n Windows, 356
GDB (GNU Debugger ), 489
GID (Group Identifier), 55
git, 479, 481
GNU, 23
GNU Autotools, 485
GNU CPP (GNU C preprocessor ), 331
GNU/Linux, 23
GParted, 49
grep, 405, 407
GRUB, 162
GUI, 7
GUI (Graphical User Interface), 39
GUI (grafical user interface), 366
hard-disk, 190
hardware, 186

GLOSAR
head, 402
helgrind, 492
here document, 380
here string, 382
hipervizor, 16
host, 234
hostname, 236
HTML (Hypertext Markup Language),
270
HTTP (Hypertext Transfer Protocol),
251, 270
hwinfo, 198
ICMP, 236
IDE (Integrated Development Environment),
320, 469, 494
IDS (Intrusion Detection System), 312
if (bash), 367, 391
ifconfig, 225
imagine de CD, 212
443
imagine vectoriala,
IMAP (Internet Mail Access Protocol),
251, 264
indent, 471
info, 43, 372
init, 117, 143
insmod, 195
instalarea din surse, 484
interfat, a de ret, ea, 225
interpretare, 321
interpretor, 321
IP, 218
ipconfig, 240
IRC (Internet Relay Chat), 501
istoric (bash), 369
Javadoc, 499
jeton hardware, 288
jobs, 132
jurnalizare, 93
kernel, 2, 185
kill, 137
killall, 138
kswapd, 143
LAN (Local Area Network ), 218
ld, 486
ldconfig, 486
ldd, 486
a simbolica,
74
legatur

533
libnotify, 460
limbaj asamblare, 332
limbaje de nivel nalt, 322

limbaje de nivel scazut,


322
limbaje de programare de nivel nalt, 322

limbaje de programare de nivel scazut,


322
link-editare, 328, 337
linker, 338
Linux, 23
Live CD, 31
locate, 415
loopback, 226
lsmod, 194
lspci, 197
lsusb, 196
16
mas, ina virtuala,
make, 345
man, 43, 372
MAN (Metropolitan Area Network ), 218
management proiecte software, 496
massif, 492
Master Boot Record, 31
MBR (Master Boot Record), 156, 211
medii integrate de dezvoltare, 494
memcheck, 492
memorie, 187
memorie cache, 189
285
memorie virtuala,
MinGW (Minimalist GNU for Windows),
356
modprobe, 195
module de kernel, 194
montarea unui sistem de fis, iere, 97
MSVC (Microsoft Visual C++), 469, 502
multi-core, 188
multiprogramare, 116
multitasking, 116
name-mangling, 360
nice, 146
nl, 400
nm, 335
nohup, 134
northbridge, 191
NTFS-3G, 103
NTLoader, 178
objdump, 334

534
one liner, 378
operatorul &, 130
operatorul $((...)), 420
operatorul >>, 380
operatorul <<<, 382
operatorul <<, 380
operatorul |, 140, 382
optimizare, 335
335
optimizarea compilarii,
pachet software, 58
pachete necesare pentru dezvoltarea
codului C, 324
pager, 77
paginator, 77
parametrii unui script shell, 421
31
partit, i logica,
partit, ie, 30
partit, ie de swap, 30
31
partit, ie extinsa,
31
partit, ie primara,
PATH, 74
pdflush, 143
peer to peer, 254
pgrep, 123
PID, 113
ping, 236
PKI (Public Key Infrastructure), 287
pkill, 138
191
placa de baza,
263
Pos, ta electronica,
poff, 245
pon, 245
POP3 (Post Office Protocol), 251, 264
port, 255
port I/O, 205
portabilitate, 354
POSIX (Portable Operating System
Interface), 356
POST (Power-on Self Test), 154
PPP, 243
PPPoE, 243
pppoeconf, 243
preprocesare, 328, 330
principiul celui mai mic privilegiu, 281
drepturilor, 281
principiul limitarii
printf, 377
proces, 112
proces de dezvoltare software, 496
procesor, 188

INTRODUCERE N SISTEME DE OPERARE


procfs, 114, 127
program, 112
prompt, 42
protocol, 249
ps, 117
RAM, 190
ramdisk, 32
raster, 442
ret, ea de calculatoare, 217
read, 378
readline, 368
Redmine, 497
registre, 188, 189
registre vim, 476
repository, 479, 497
resolvconf, 233
reverse search (bash), 369
rmmod, 195
roadmap, 497
root, 45
ruter, 219, 252
S.M.A.R.T., 200
scanarea porturilor, 307
scheduling, 115
schimbare de context, 116
sector de boot, 154
sed, 408
Semantic Web, 268
semnal, 135
semnale, 487
seq, 396
server, 254
set, 377
setgid, 299
setuid, 299
sfdisk, 211
shebang, 375
shell, 41, 365
shell script, 365
shift, 422
shutdown, 44
SIGKILL, 135
SIGSEGV, 135
SIGTERM, 135
simbolul $, 419
sistem de fis, iere, 70
sistem de operare, 1
sistem multi-core, 115

GLOSAR
sisteme centralizate de versionare, 479
sisteme distribuite de versionare, 479
sisteme multi-tasking, 5
sisteme multi-user, 5
smartmontools, 200
SMTP (Simple Mail Transfer Protocol),
251, 265
SNMP (Simple Network Management
Protocol), 251
SO (sistem de operare), 1
southbridge, 191
spat, iu kernel, 186
spat, iu utilizator, 186
spam, 267
splint, 482
sshfs, 103
starea unui proces, 115
stiva de protocoale, 249
strace, 488
su, 46
Subversion, 479, 480
sudo, 47, 301
SVN (Subversion), 479, 480
swap, 30, 213
swapping, 30, 141
switch, 252
syntax highlighting, 473
sysctl, 210
sysfs, 196
system tray, 460
tabela de partit, ii, 157
tac, 400
tag, 479
tail, 402
Task manager, 142
TCP (Transmission Control Protocol),
251
terminal virtual, 40
test (bash), 391
TFTP, 254
time, 126
top, 124
tr, 404
Trac, 497
traceroute, 237
troian, 306

535
trunchiere fis, ier, 382
TTL, 237
TUI (Text User Interface), 7, 39
Ubuntu, 25
udev, 201
UDP(User Datagram Protocol), 251
UID (User Identifier), 55
ulimit, 302
umask, 292
Unicode, 444
187
unitatea aritmetica s, i logica,
187
unitatea de comanda,
update, 479
Usenet, 501
utilizare biblioteci, 344
valgrind, 492
variabila $?, 392
variabila $@, 422
variabila $#, 421, 422
variabile make, 352
variabile speciale shell, 423
VBR (Volume Boot Record), 156
VCS (Version Control System), 479
vectorial, 443
vi, 320
vim, 320, 473
vimtutor, 474
virtualizare, 16
virus, 305
VNC (Virtual Network Computing), 462
WAN (Wide Area Network ), 218
waterfall, 497
wc, 405
webmail, 266
whereis, 372
while (bash), 367, 398
wiki, 497
window decorator, 447
window manager, 446
WLAN, 253
working copy, 479
worm, 306
X11, 444
XHTML, 271

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