Documente Academic
Documente Profesional
Documente Cultură
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
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.
aceast carte n momentele n care caut sprijin suplimentar pentru rezolvarea unei
probleme din domeniu.
Din punct de vedere tehnic,
preponderent
universului
Linux.
Am
considerat
contactul
cu
Linux
ca
pe
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.
Nicolae pus, , precum s, i colegilor nos, tri Vlad Dogaru, Mihai Maruseac, Daniel
Rosner s, i Andrei Buhaiu,
elaborarea acestei crt, i.
Voichit, a
Iancu,
Andrei
Dumitru,
Laura
Lucian Grijincu,
Gheorghe
pentru
Clin
revizuirea
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
Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.5.1 Interoperabilitatea sistemului de fis, iere ntre Linux s, i Windows . 48
2.5.2 GParted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
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
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
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 . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
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
Capitolul 1
Introducere
They have computers, and they may have other
weapons of mass destruction.
Janet Reno
1.1
problema.
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
1.1.1
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
1.1.2
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
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
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
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 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;
1.2
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
1.2.2
A doua generat, ie
1.2.3
A treia generat, ie
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.
n 1981 au aparut
primele calculatoare personale IBM, costnd 2880 USD, incluznd 64
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
aparut
o prima interfat, a grafica pentru sistemele Unix X Windows, urmata de versiuni
mai complexe.
1.3
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
10
1.3.1
T, innd cont ca un utilizator poate opta ntre mai multe sisteme de operare, apar ntrebari
arile
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
http://en.wikipedia.org/wiki/Usage_share_of_desktop_operating_systems
CAPITOLUL 1. INTRODUCERE
11
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.
1.3.3
Mac OS X
http://www.gnu.org/
12
1.3.4
Linux
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:
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
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
FreeBSD cel mai folosit sistem de operare derivat din BSD axat pe oferirea
unui sistem de operare stabil s, i utilizabil;
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
1.3.6
, i open source
Comunitat
Principala diferent, a dintre Linux s, i multe alte sisteme de operare actuale, mai mult sau
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)
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
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
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.
CAPITOLUL 1. INTRODUCERE
17
,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
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
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
este posibilitatea
Pentru utilizatorul obis, nuit, cel mai important avantaj al virtualizarii
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
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
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
q interpretor de comenzi
q client de email
q RAM
q hard-disk
q procesor
q BIOS
q Larry Wall
q Linus Torvalds
q William Henry Gates III
q Andrew S. Tanenbaum
q cautarea
s, i eliminarea programelor virus
ntre procese
q asigurarea comunicarii
q OpenSolaris
q iPhone OS
q Symbian OS
q Android
q VirtualBox
q VMware
q VirtualPC
q OpenVZ
7. Ce reprezinta termenul GNU din distribut, ie GNU/Linux?
CAPITOLUL 1. INTRODUCERE
21
q Windows
q Mac OS X
q Linux
q OpenSolaris
q Windows Mobile
q iPhone OS
q Android
q Symbian OS
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 este Linux
Distribut, ii GNU/Linux
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
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
facnd
2.1.1
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
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
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
25
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<
2.1.2
Debian. Ubuntu
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
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.
DE BAZA
2.1.3
27
s, i n octombrie (numarul
X.10) X reprezinta ultimele doua cifre din an (pentru 2009
9, 2010 10 etc.).
28
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:
2.2
Instalarea Linux
2.2.1
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:
cerint, e scazute
1
2
DE BAZA
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 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
(recomandari,
cerint, ele minime):
http://www.kubuntu.org/
https://help.ubuntu.com/community/Installation/SystemRequirements
30
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
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
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);
DE BAZA
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
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
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
32
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
33
34
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.
Pasul urmator
este reprezentat de alegerea felului n care sunt amplasate tastele pe
DE BAZA
35
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
Figura 2.8: Tabela de partit, ii init, ial discul nu are nicio partit, ie
DE BAZA
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).
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
2.3
2.3.1
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).
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
cnd se realizeaza aceasta configurare ntr-un GUI este mica, datorita numarului
mare
DE BAZA
39
40
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
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.
sau
terminalul cinci; numarul
de terminale accesibile poate fi s, ase (valoarea implicita)
zece (figura 2.17).
DE BAZA
41
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
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:~$
urmator:
1
george@asgard:~$
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
DE BAZA
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
george@asgard:~$ cp --help
Usage: cp [OPTION]... [-T] SOURCE DEST
or: cp [OPTION]... SOURCE... DIRECTORY
or: cp [OPTION]... -t DIRECTORY SOURCE...
5
6
7
8
9
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
44
afis, ata:
1
2
george@asgard:~$ man ls
Reformatting ls(1), please wait...
3
4
5
6
7
8
asirea
Autentificarea s, i par
sistemului
Autentificarea locala n sistemul de operare se poate realiza folosind un terminal virtual
2.3.3
Pentru a opri sau reporni un sistem de calcul se foloses, te comanda shutdown. Aceasta
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
2
3
4
5
6
7
DE BAZA
45
4
5
6
2
3
4
5
6
7
2
3
4
5
6
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
46
De aceea
n product, ie autentificarea ca root este dezactivata din motive de sigurant, a.
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
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
47
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
2.4.2
, ii la Internet
Asigurarea conectivitat
configurarilor
vor dura pna la urmatoarea
pornire a sistemului de operare sau pna la
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
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
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
2
3
2.4.4
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
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
DE BAZA
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
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
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
q Windows Vista
q Debian
q ubuntu Live CD
q PalmOS
DE BAZA
51
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 FAT32
q swap
q ext3
q NTFS
q extinsa
q logica
q primara
q virtuala
q Ubuntu
q Fedora
q Gentoo
q OpenSuSE
q comanda
q prompt
q terminal
q window manager
52
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
3.1
Gestiunea utilizatorilor
54
1
2
3
4
, 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
Utilizatorul privilegiat ntr-un sistem Unix este utilizatorul root cu uid-ul 0 s, i home-ul n
/root:
1
2
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
3
4
5
6
root@anaconda:~# su - andreir
andreir@anaconda:~$ su - razvan
Password:
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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
56
17
18
19
20
21
22
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
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
3
4
Done.
Stergerea
3
4
Done.
3.1.4
uso@asgard:~$ cd ~
2
3
4
5
uso@asgard:~$ pwd
/home/ uso
57
uso@asgard:~$ sudo su
7
8
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:~$
uso@asgard:~$ pwd
/home/usodir/
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
58
14
15
16
17
18
19
20
root@anaconda:~# id test
uid=1003(test) gid=1038(test) groups=1038(test)
21
22
23
24
25
26
2
3
4
root@anaconda:~# id test
uid=1116(test) gid=1116(test) groups=1116(test)
5
6
7
8
9
10
11
root@anaconda:~# id test
id: test: No such user
3.2
Gestiunea pachetelor
59
se numar
<none>
<none>
<none>
<none>
<none>
2.6.18+6etch3
cautarea
pachetului ce cont, ine un anumit fis, ier
1
2
1
http://kitenet.net/~joey/code/alien/
60
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
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:
cautarea
de pachete
1
2
3
4
61
3
4
5
6
7
8
9
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
62
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
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
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).
63
comanda reala.
Pentru a seta aceste link-uri, se va folosi comanda update-alternatives. Acest
sistem poate funct, iona n doua moduri:
prioritat
editor).
64
1
2
3
4
5
2
3
4
5
6
7
8
Selection
Alternative
----------------------------------------------1
/usr/bin/w3m
+
2
/usr/bin/elinks
*
9
10
--all
3.3
Studii de caz
3.3.1
Informat, iile despre grupuri s, i utilizatori sunt stocate n trei fis, iere text:
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)
65
Shell-ul folosit
Un exemplu de fis, ier /etc/passwd este:
1
2
3
4
5
6
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
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
Numarul
de zile care trec dupa expirarea parolei pna cnd contul va fi dezactivat
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
http://en.wikipedia.org/wiki/MD5
http://en.wikipedia.org/wiki/SHA-2
66
9
[...]
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
3.3.2
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;
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
root
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
q adduser
q useradd
q newuser
q finger
2. De ce nu sunt t, inute hash-urile parolelor n fis, ierul /etc/passwd?
q legaturi
simbolice
68
q legaturi
hard
Capitolul 4
Sisteme de fis, iere
The Unix file system. Sure it corrupts your data, but
look how fast it is!
Utilizarea cailor
relative s, i absolute
4.1
4.1.1
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
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
4.1.2
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
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.
/
/bin
/boot
/dev
/etc
/home
/media
/mnt
/opt
/proc
/root
/sbin
/tmp
/usr
/var
acin
a
directorul rad
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
71
72
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
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
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
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:
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
4.1.4
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
se gasesc
n oricare din caile
ele.
4.2
4.2.1
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.
legaturi
simbolice
Descriere
legatura
catre
un alt fis, ier
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
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
11
12
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
3
4
5
6
7
76
4.3
4.3.1
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:
77
4.3.2
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
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
2
3
4.3.3
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;
respectiv
dimensiunea
n
octet, i
este
nlocuita
cu
dimensiunea
n
, es, te un anumit ordin de marime.
Formatul utilizat la afis, area detaliata cont, ine mai multe informat, ii despre acel fis, ier:
78
1
2
ubuntu@ubuntu:~$ ls -l /home/myuser/myapp
-rwxr----- 1 myuser users 1176348 2007-03-03 20:28 /home/myuser/myapp
gasesc
n sect, iunea 4.5;
numarul
de link-uri catre
fis, ier 1;
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
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
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
Entitate
Legaturi
(link-uri)
Pipe-uri cu nume
sect, iunea 4.4). Pe scurt, ceea ce realizeaza comanda a 2-a este redirectarea ies, irii
2
3
4
5
6
7
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
ubuntu@ubuntu:~$ ls -al
-rw-r--r-- 1 root
root
3
4
5
6
7
ubuntu@ubuntu:~$ ls -al
-rw-r--r-- 1 root
root
4.3.5
Copiere/mutare/redenumire/s, tergere
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:
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
2
3
4
ubuntu@ubuntu:~$ ls
f1.txt
5
6
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
ubuntu@ubuntu:~$ pwd
/tmp/q
3
4
5
ubuntu@ubuntu:~$ ls
f1.txt f2.txt
6
7
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
ubuntu@ubuntu:~$ ls
f2.txt
3
4
5
6
7
ubuntu@ubuntu:~$ ls
f3.txt
4.3.6
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
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.
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
cu parametrii:
c creeaza arhiva;
unde:
x dezarhiveaza (eXtract);
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:
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
ubuntu@ubuntu:/tmp/q$ ls
f1.txt f2.txt f3.txt
3
4
5
6
7
8
9
10
11
12
13
14
15
ubuntu@ubuntu:/tmp/q$ ls
arhiva.tar.gz f1.txt f2.txt
f3.txt
16
17
18
19
20
21
ubuntu@ubuntu:/tmp/q$ ls
arhiva.tar.gz f1.txt f2.txt
f3.txt
22
23
24
25
26
27
28
29
ubuntu@ubuntu:/tmp/q$ ls
f1.txt f2.txt f3.txt
30
31
32
33
34
35
36
37
ubuntu@ubuntu:/tmp/q$ ls
f1.txt f2.txt f3.txt new.tar.gz
38
39
40
41
42
43
44
45
46
ubuntu@ubuntu:/tmp/q$ cd tmp/
47
48
49
50
51
52
53
4.3.7
85
Backup
tar+gzip/bzip2
dd
rsync1
rdiff-backup2
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
modificarile
ce s-au facut
de la ultimul backup pna n
prezent, indiferent de tipul backup-ului. n acest fel se
de comenzi
Redirectari
4.4
4.4.1
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
stderr (standard error ) fis, ier care reprezinta locul unde programul scrie mesajele
86
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
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)
catre
ies, irea standard (stdout), se foloses, te sintaxa &1.
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
n exemplul de mai jos se scrie lista de fis, iere s, i directoare din directorul curent n fis, ierul
listare.
87
2
3
4
Pentru a adauga
rezultatul comenzii date la sfrs, itul fis, ierului se foloses, te operatorul >>:
1
2
3
4
5
2
3
4
5
Pentru a adauga
noi mesaje de eroare la sfrs, itul fis, ierului se foloses, te operatorul 2>>:
1
2
3
4
5
6
7
8
Comanda de mai jos scrie s, i rezultatele s, i erorile generate de comanda ls n fis, ierul
specificat:
1
2
3
4
5
4.5
Drepturi de acces
88
./program 2>/dev/null
./program 2>&1 >/dev/null
> fout
f_out
cat /dev/null > f_out
Drept
citire
scriere
execut, ie
modificare
s, tergere
4.5.1
Exista doua metode mai ntlnite pentru definirea drepturilor de acces la fis, iere:
, i:
drepturi pentru urmatoarele
entitat
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;
89
NTFS are un sistem foarte avansat de drepturi de acces, bazat pe liste de acces
4.5.2
Sistemele de fis, iere din mediile Unix care au ca implementare standard drepturile de
4.5.3
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:
90
urmatoarele
3 caractere (rwx) reprezinta drepturile de acces pentru utilizatorul
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.
acces se gasesc
n sect, iunea 10.2.4.
4.6
4.6.1
Cautarea
fis, ierelor
Comanda find
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
91
Urmatoarea
comanda cauta toate fis, ierele care au permisiunile 644:
1
2
3
4
5
Pentru a cauta
fis, ierele cu dimensiunea mai mare de 500 KB se poate folosi una dintre
urmatoarele
comenzi:
1
2
3
4
5
6
7
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
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
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
4.6.4
Comanda which
linia de comanda.
comanda chmod se va folosi
comanda urmatoare:
1
2
4.6.5
Comanda type
ubuntu@ubuntu:~$ type cd
cd is a shell builtin
ubuntu@ubuntu:~$ type ls
ls is aliased to ls --color
4.7
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).
93
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
Tip
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.
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
n momentul n care trebuie ales un sistem de fis, iere, cele mai utilizate criterii de select, ie
sunt:
94
Tip
sistem
de
fis, iere
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
4.7.3
95
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
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
Aceasta sect, iune trateaza act, iunile cele mai cunoscute la nivelul unui sistem de fis, iere.
Act, iunile cele mai frecvente sunt:
96
Sistem
de
fis, iere
FAT32
nu
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
Pe lnga aceste act, iuni, folosind programe speciale, se pot efectua s, i alte operat, ii asupra
unui sistem de fis, iere, precum:
4.8.1
Dupa cum s-a ment, ionat anterior, majoritatea sistemelor de fis, iere au un suport fizic
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
Exemplu de utilizare:
1
urmatoarea:
1
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
4.8.2
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
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
Montarea manuala
Pentru a monta un sistem de fis, iere, ntr-un mediu Linux se utilizeaza comanda mount,
cu sintaxa:
1
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
Montarea unui sistem de fis, iere doar cu drepturi de citire (read-only ) se poate realiza
prin opt, iunea -r:
1
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
Cmpurile au urmatoarele
semnificat, ii:
, te
<dispozitiv> fis, ier care indica locul (de obicei un dispozitiv) unde se gases
sistemul 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.
root@ubuntu:~# mount -a
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
2
3
Pentru a demonta acest sistem de fis, iere se poate utiliza oricare din urmatoarele
doua
comenzi:
1
2
3
100
4.8.3
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.
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
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
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
101
4.8.5
Stergerea
s, tergerea logica
s, tergerea fizica
Stergerea
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
ubuntu@ubuntu:~$ df
Filesystem
1K-blocks
Used Available Use\% Mounted on
/dev/sda1
5859784 4449900
1409884 76\% /
/dev/sda2
15361340 10174596
5186744 67\% /home
ubuntu@ubuntu:~$ df -a
Filesystem
1K-blocks
/dev/sda1
5859784
/dev/sda2
15361340
/proc
0
/sys
0
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
ubuntu@ubuntu:~$ du -h -s /etc/network
64K
/etc/network
4.9
4.9.1
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.
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.
compatibilitate a implementarilor
ntre
Linux s, i Mac OS X
a:
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
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
4.10
Studii de caz
4.10.1
4.10.2
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
105
comanda
--help
cd
pwd
clear
cp
rm
ls
vim
exit
diff
comanda /?
cd
chdir
cls
copy
del
dir
edit
exit
fc
find
mkfs
(mke2fs)
free
find
format
mkdir
mv
mv
date
mkdir
move
ren
time
mem
4.10.3
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
urmator:
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
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
Comanda filtreaza liniile din /etc/group s, i afis, eaza pe ecran doar liniile care ncep
este urmatoarea:
1
spre deosebire de cazul anterior, au mai fost introduse doua opt, iuni:
Se observa ca,
4.10.5
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
Act, iune
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
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
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
http://www.ntfs-3g.org/
108
Cuvinte cheie
arhivare
montare
dezarhivare
demontare
backup
fsck
fis, ier
director
jurnalizare
cale relativa
cale absoluta,
ls, pwd, cd
ierarhie
cp, mv, rm
ntrebari
1. Sistemele de fis, iere din prezent ofera un grad mai mare de sigurant, a mpotriva
caderilor
de tensiune prin implementarea:
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
q 606
q 762
q 534
q 451
109
q file
q touch
q rm -r
q cat
q director al carui
nume ncepe cu .
a simbolica catre
q legatur
/bin
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
q mount
q umount
q mountfs
q fsck
110
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
5.1
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
Ce este un proces?
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
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
CAPITOLUL 5. PROCESE
113
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
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
fis, ierele deschise. Un proces ment, ine o tabela cu fis, ierele deschise. De obicei
http://http://en.wikipedia.org/wiki/Indirect_self-reference
114
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
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).
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
180465
180465
0
/usr/bin/vim.gnome
/usr/bin/vim.gnome
[heap]
178741
0
/lib/ld-2.3.6.so
[stack]
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
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
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:
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
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
n sistemele Unix (ca atare s, i n Linux), procesele sunt organizate ierarhic. Astfel, se
CAPITOLUL 5. PROCESE
117
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
5.2.1
Utilitarul ps
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
razvan@asgard:~$ ps -a
PID TTY
TIME CMD
3074 pts/1
00:00:00 vi
3094 pts/0
00:00:00 ps
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
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
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
120
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
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
--->
\-->
\-->
\--> bash-terminal (3034) --->
\-->
\-->
\-->
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
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
122
8
9
10
11
12
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).
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
Se poate afis, a inclusiv pid-ul proceselor din ierarhie prin intermediul opt, iunii -p:
1
2
3
4
5
6
7
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
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
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
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;
CAPITOLUL 5. PROCESE
125
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).
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);
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 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
se dores, te a fi ncheiata;
126
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.
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
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
CAPITOLUL 5. PROCESE
127
2
3
4
5
real
user
sys
4m19.309s
0m2.680s
0m5.550s
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
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.
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
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
accesat directorul 3066. Acest director cont, ine o serie de fis, iere, directoare s, i legaturi
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
6
7
8
numarul
de thread-uri etc:
1
2
3
4
5
6
7
8
9
10
11
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
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
[...]
informat, iile utile (folosite, de asemenea, de diverse utilitare din sistem), se gasesc
informat, ii despre:
130
5.3
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
5.3.1
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
3
4
5
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
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)
Utilizatorul a apasat
apoi CTRL-Z s, i a fort, at suspendarea procesului curent n
razvan@asgard:~$ vi out.txt
[3]+ Stopped
vi out.txt
3
4
razvan@asgard:~$
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
132
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
razvan@asgard:~$ fg
vi out.txt
Dupa rularea acestei comenzi, utilizatorul poate continua editarea fis, ierului out.txt.
5.3.4
Daemoni
daemon. Spre exemplu, procesul gedit (pid 3006) nu este un daemon n adevaratul
134
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.
Comanda nohup
Comanda nohup poate fi utilizata pentru a rula un proces cu caracteristici de daemon.
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
3
4
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
5.4
Semnale
de utilizator.
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;
mobila;
prin intermediul unor comenzi specifice: kill, killall; (vezi sect, iunea 5.4.2)
136
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
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
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;
SIGKILL (9) (signal kill): cel mai puternic semnal; termina n mod necondit, ionat
un proces
CAPITOLUL 5. PROCESE
137
5.4.2
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
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
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
2
3
4
5
138
Comanda killall
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
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
9
10
11
12
13
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
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-\: 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
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
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
2
3
4
5
6
7
8
9
10
11
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
n continuare vom sorta rezultatul obt, inut, dupa care vom ret, ine numai primele 3 intrari:
1
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
5.6
Swapping
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
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
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.
CAPITOLUL 5. PROCESE
143
maximul de
Se pot afis, a PID-ul procesului, memoria virtuala utilizata,
Columns.
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
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.
http://www.microsoft.com/technet/sysinternals/utilities/ProcessExplorer.mspx
144
CAPITOLUL 5. PROCESE
145
insuficienta;
svchost (Generic Host Process for Win32 Services): este procesul folosit pentru
gestiunea serviciilor din 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
http://www.neuber.com/taskmanager/process/
146
3
4
5
6
7
8
9
10
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.
Cuvinte cheie
proces
top
program
background
pid
foreground
procfs
operatorul &
bg, fg
context switch
cuanta de timp
terminal
multitasking
proces daemon
ierarhie de procese
nohup
init
semnal
ps
kill
pstree
killall, pkill
pgrep
148
operatorul |
Task manager
Services
init, kswapd, pdflush, getty
ntrebari
q ps
q SIGQUIT
q init
q lsass
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
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
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
Capitolul 6
Pornirea s, i init, ializarea sistemului
Press Ctrl-Alt-Del now for IQ test.
ncarcarea
nucleului Linux
6.1
Pornirea sistemului
Pornirea s, i init, ializarea sistemului se refera la mecanismele prin care sistemul de operare
152
6.1.1
6.1.2
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
153
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;
ncarcarea
nuclelui: presupune un set de init, ializari
nucleul (kernel-ul) sistemului de operare;
6.1.3
BIOS
CMOS
Des, i este un program mic s, i limitat la specificul hardware al sistemului, BIOS-ul ofera
scoasa,
BIOS-ului se pierd revenindu-se la configurarile
implicite.
1
2
154
6.1.4
POST
6.2
Bootloader
ce vor fi ncarcate,
selectnd astfel ntre mai multe sisteme de operare. De asemenea,
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
155
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
urmatoarele
operat, ii:
156
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;
6.2.2
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).
ncarcarea
sistemului de operare (cum este sectorul de boot al unui hard-disk).
controlul de catre
BIOS (bootloader );
157
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
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.
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
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).
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
Dupa cum s-a specificat, un bootloader este un program folosit pentru a ncarca
n RAM
partit, ii s, i de semnatura
de boot 0xAA55).
Ca atare bootloader -ele lucreaza n mod normal n doua etape (stages). Prima etapa
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
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
http://www.gnu.org/software/grub/
160
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
161
5
6
7
8
9
13
14
15
16
17
18
19
20
21
22
23
24
25
5a13
0575
01ff
8966
47fe
4420
0072
0000
ncarcat
a de faza 1.5 din /boot/grub/stage2, aceasta putnd accesa structura
sistemului de fis, iere.
162
5
6
7
8
9
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
## 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
[...]
163
## Razvans kernels
18
19
20
21
22
title
root
kernel
savedefault
title
root
kernel
savedefault
[...]
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
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.
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
atunci la urmatoarea
boot-are se va selecta, implicit, aceeas, i opt, iune.
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
Dispozitiv
165
/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
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
Comanda file indica un astfel de fis, ier ca fiind o imagine de nucleu Linux:
1
2
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
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
6.4.2
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
http://en.wikipedia.org/wiki/Embedded_system
http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch09.pdf
167
acin
a este montat read-only sau read ro/rw: specifica daca sistemul de fis, iere rad
write la boot-are;
6.5
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.
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
root@asgard:~# runlevel
N 2
3
4
5
razvan@asgard:~$ who -r
run-level 2 2009-09-23 17:57
last=
168
root@asgard:~# init 0
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
#
#
#
#
#
#
#
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
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
<id>:<runlevels>:<action>:<process>
unde:
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,
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
/etc/init.d/.
, ii scripturilor ce se gasesc
K numar nume
S numar nume
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
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.
permite adaugarea/eliminarea
facila a unui serviciu dintr-un runlevel.
adaugarea/elimitarea
acestora dintr-un runlevel printr-o simpla act, iune de
171
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
5:off
6:off
3
4
5
6
7
5:on
6:off
5:on
6:off
8
9
10
11
12
13
14
15
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 .
http://lwn.net/Articles/351013/
172
daemon-ul udevd este configurat sa trimita un eveniment de tipul block-deviceadded pentru fiecare dispozitiv nou conectat;
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
apasarea
CTRL-ALT-DEL, s, i anume repornirea sistemului:
1
2
3
4
5
6
7
start on control-alt-delete
8
9
la fel ca n
Scripturile rc* sunt aociate cu nivelurile de rulare. Dupa cum se observa,
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.
6.5.3
173
getty s, i login
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
174
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).
username:simbol_parola:uid:gid:extra_info:home_dir:interpretor
root@anaconda:~# ls -l /etc/shadow
-rw-r----- 1 root shadow 1084 2009-07-21 22:19 /etc/shadow
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).
175
n cazul unui interpretor bash (Bourne Again Shell), fis, ierele de configurare citite sunt n
ordine:
primul gasit;
drept urmare,
6.6
6.6.1
Studiu de caz
Grub 2
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
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
177
8
9
10
11
12
13
14
Linia
echo "Adding Custom Kernel & SystemRescue" >&2 nu este
6.6.2
178
NTLoader
La fel ca s, i n cazul Linux, sectorul de boot al hard-disk-ului (MBR) sau al unei partit, ii
Dupa ncarcarea
bootloader-ului, acesta consulta fis, ierul boot.ini pentru a localiza
informat, iile de pe partit, ia de sistem.
[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
select, ie (aseman
cu cel al GRUB).
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.
Dupa ncarcarea
nucleului n memorie, sunt pornite, n ordine, doua procese importante:
http://support.microsoft.com/default.aspx?scid=kb;en-us;833721
179
aici1 .
Mai multe detalii despre procesul de pornire a unui sistem Windows XP se pot gasi
6.6.3
Interoperabilitate Linux-Windows
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
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:
cautnd
unul din fis, ierele din /boot. Cel mai adesea este cautat
stage1:
1
2
http://technet.microsoft.com/en-us/library/bb457123.aspx
180
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
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:
obt, inerea unui fis, ier .xpm.gz care cont, ine imaginea de splash folosita pentru
GRUB:
1
2
3
4
5
6
7
1
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
181
8
9
100%[===================================>] 99,593
0.5s
209K/s
in
10
11
[...]
# 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
consola GRUB
booting/bootstrapping
imagine de nucleu
BIOS
init
POST
runlevel
CMOS
/etc/inittab
dispozitiv boot-abil
/etc/init.d, /etc/rcX.d
getty
MBR, VBR
login
tabela de partit, ii
/etc/passwd, /etc/shadow
bootloader
NTLDR
GRUB
boot.ini
smss, winlogon
/boot/grub/menu.lst
Recovery Console
ntrebari
1. Care este ordinea corecta a pornirii unui sistem?
182
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
q GRUB/NTLDR
q vmlinuz/ntoskrnl
q POST/CMOS
q getty/winlogon
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?
183
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
ncarcarea
s, i folosirea modulelor de kernel
7.1
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
7.2
Considerente hardware
187
7.2.1
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 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
188
7.2.2
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.
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.
189
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.
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,
190
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:
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:
viteza (masurat
a n RPM Rotations Per Minute): cu valori tipice de 5400 RPM,
7200 RPM, 10000 RPM;
191
, ita n sectoare
s, i de pe toate platanele, sunt grupate n cilindri. Fiecare pista este mpart
de cte 512 bit, i fiecare.
7.2.4
interconectarea componentelor
Placa de baza;
Procesorul
Memoria RAM
Placa video (prin PCI Express sau AGP)
Northbridge-ul dicteaza tipul de procesor, cantitatea, viteza s, i tipul de memorie RAM
192
Southbridge-ul mai este numit s, i I/O Controller Hub (ICH) s, i este folosit pentru
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
193
de baza
Figura 7.5: Diagrama bloc a placii
7.3
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
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,
7.3.1
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
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
Modulele
incluse
n
nucleul
distribut, iei
se
gasesc
n
/lib/modules/<versiune_kernel>/kernel.
n acest director ele sunt
195
organizate n funct, ie de categoria din care fac parte exista astfel directoarele arch
root@ubuntu:~# ls /lib/modules/2.6.18-4-686/kernel/
arch crypto drivers fs lib net sound
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
ncarcarea
manuala a unui modul se poate realiza folosind comanda insmod sau
utilizare este dat mai jos (se presupune ca modulul ce se dores, te a fi ncarcat
nu este
deja ncarcat).
1
2
3
4
O comanda echivalenta comenzii insmod utilizate mai sus dar care ncarca s, i
este modprobe <nume_modul>:
dependent, ele unui modul (daca exista)
1
7.3.3
Descarcarea
unui modul din kernel
Pentru descarcarea
unui modul din kernel se poate utiliza comanda rmmod sau
observat, ia ca,
modulelor de
care pcspkr depinde (daca exista s, i nu depind s, i alte module de ele).
1
2
3
196
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
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
7.4.2
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
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
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)
[...]
198
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,
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.
ACPI http://www.acpi.info/
lo
disk:
/dev/sda
[...]
199
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
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
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
V)
V)
V)
V)
200
scopul anticiparii
n pachet se gasesc
doua programe:
S.M.A.R.T. la un moment dat;
smartctl pentru analiza starii
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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.
4
5
6
7
8
9
201
13
14
4
5
6
7
8
9
10
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
/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,
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,
202
Nume
fd
hd
lp
sd
tty
ram
loop
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
S-a ment, ionat anterior ca udev se ocupa s, i de stabilirea permisiunilor pentru anumite
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
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:
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
204
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
/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
7.6.2
ntreruperi hardware
205
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
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
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:
206
/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
7.6.4
Adrese DMA
7.6.5
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, ia:
207
Fis, ierele pot fi att fis, iere normale ct s, i fis, iere care reprezinta dispozitive bloc sau
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
Exemplele urmatoare
ilustreaza utilizarea comenzii dd mpreuna cu parametrii precizat, i
anterior:
/dev/zero catre
/dev/null deci nu are niciun efect:
1
2
3
4
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
Fis, ier
/proc/cmdline
/proc/cpuinfo
/proc/devices
/proc/interrupts
/proc/meminfo
/proc/modules
/proc/partitions
/proc/swaps
/proc/uptime
/proc/version
7.7
7.7.1
Analiza sistemului
Informat, ii despre sistem
urmatoarele
informat, ii:
1
2
3
4
5
6
7
T7500
@ 2.20GHz
cpu MHz
cache size
fdiv_bug
[...]
209
: 2194.893
: 4096 KB
: no
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
Folosind urmatoarea
comanda se vor afis, a: versiunea kernelului Linux, a compilatorului
@ 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
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:
urmator:
1
2
3
4
5
6
7
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.
3
4
5
aseman
cu cea a structurilor din C/C++. Comanda a doua modifica un parametru
prin utilizarea opt, iunii --w (write).
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
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.
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).
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
Pentru a restaura schema de partit, ionare salvata anterior, sfdisk se utilizeaza astfel:
212
7.8.2
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
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
ator
213
7.8.4
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
n acest moment se poate crea un fis, ier de swap de dimensiunea dorita utiliznd
programul dd:
1
2
3
4
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
operare trebuie sa afle de prezent, a fis, ierului de swap printr-o operat, ie aseman
unui sistem de fis, iere:
montarii
1
Dupa execut, ia acestei comenzi sistemul foloses, te fis, ierul creat mai sus ca zona de swap.
Cuvinte cheie
kernel
kernel-space
von Neumann
user-space
CPU, procesor
214
RAM, DRAM
sensors
placa de baza
smartmontools
chipset
/dev
northbridge
udev
southbridge
hard-disk, HDD
PCI, AGP
magistrala,
dispozitiv
modul
pseudodispozitive
dd
driver
/proc
sysctl
/sys
/etc/sysctl.conf
lsusb, lspci
MBR
ntrebari
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
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
q modinstall
q insmod
q /dev/null
q /dev/zero
q /dev/hda3
q /dev/urandom
q /dev/sda1
q /dev/hda5
q /dev/sda
q /dev/ttyS0
q southbridge
q megabyte
q GPU
q cache
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.
Configurare DNS
, ii ntr-o ret, ea locala
Verificarea conectivitat
8.1
Concepte de ret, ea
218
8.1.1
, 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
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
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
220
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
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
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
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
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:
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):
222
mpart
(unicast/multicast/rezervat) s, i masca de ret, ea.
prezent, mas
, irea n cele cinci clase nu mai este ntnita dect n cazuri rare.
iar mpart
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
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
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.
8.2.3
DNS
gazduit
a acea pagina.
224
DE RET, EA
CAPITOLUL 8. CONFIGURARI
Configurare
temporara
Configurare
permanenta
225
/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
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
8.3.2
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
13
14
15
16
17
18
19
singura existenta.
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
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
2
3
4
5
6
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
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
root@asgard:/home/george# ifconfig
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
[...]
5
6
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
2
3
4
5
6
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
5
6
7
8
9
10
11
12
13
DE RET, EA
CAPITOLUL 8. CONFIGURARI
229
8.3.3
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
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
*
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.
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
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
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
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
4
5
6
7
8
9
10
11
12
13
14
15
16
17
foloses, te urmatoarea
comanda:
1
root@ubuntu:~# ifup -a
root@ubuntu:~# ifdown -a
DE RET, EA
CAPITOLUL 8. CONFIGURARI
231
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
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
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
Serviciul de ret, ea poate fi oprit folosind argumentul stop s, i pornit folosind argumentul
start:
232
2
3
8.4.2
8.4.3
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
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
8.4.4
cautat,
se va ncerca interogarea celorlalte.
Manualul de utilizare al fis, ierului /etc/resolv.conf se poate accesa folosind
comanda:
1
man resolv.conf
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
opt, iunea
-a
se
poate
modifica
fis, ierul
3
4
5
6
7
8
9
10
11
12
13
urmatoarea
comanda:
1
2
3
4
5
6
7
Pentru a obt, ine serverul de nume asociat cu acest domeniu se va folosi comanda:
1
2
3
Comanda urmatoare
va afis, a descrierea domeniului:
1
2
3
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
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
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
urmatoarele
comenzi se poate afla numele stat, iei:
1
ubuntu@ubuntu:~$ hostname
2
3
ubuntu@ubuntu:~$ uname -n
4
5
6
7
236
Numele stat, iei se poate modifica temporar folosind comanda hostname, ca n exemplul
urmator:
1
2
ubuntu@ubuntu:~$ hostname
ubuntu
3
4
5
6
7
ubuntu@ubuntu:~$ hostname
uso
rula urmatorul
script:
1
ubuntu@ubuntu:~$ /etc/init.d/hostname.sh
8.5
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
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.
REQUEST. Atunci cnd acest mesaj este recept, ionat, stat, ia destinat, ie va raspunde
cu
Far
destinat, ie, pna
cnd va fi ntrerupt:
1
2
3
4
5
6
7
8
DE RET, EA
CAPITOLUL 8. CONFIGURARI
237
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
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
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)
niciodata la destinat, ie. Pentru a preveni o asemenea situat, ie, n antetul fiecarui
pachet
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
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
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
8.5.3
DE RET, EA
CAPITOLUL 8. CONFIGURARI
239
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
trebuie configurat unul. Daca este configurat un server, trebuie testata legatura
cu acesta
cu ajutorul comenzii ping.
240
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
3
4
5
6
7
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
/all
:
:
:
:
:
:
Asgard
Mixed
No
No
lan
9
10
11
12
13
Connection:
Media disconnected
Broadcom 440x 10/100 Integrated Controller
00-40-F4-CC-C5-41
14
15
16
17
18
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
8.6.2
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
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
8.6.3
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
244
/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.
4
5
6
7
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
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
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
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
folosita indirect pentru conectarea la Internet: prin ea sunt trimise datele catre
modemm
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
ppp0
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
Ethernet
UTP
246
ruter
/etc/network/interfaces
/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
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
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
q fals, fals
q fals, adevarat
9. Cu ajutorul comenzii traceroute se poate testa:
, imea de banda a unei conexiuni
q Lat
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
9.1
9.1.1
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
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
alte protocoale:
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
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
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.
9.1.2
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.
253
Figura 9.4: Descrierea comunicat, iei ntre doua stat, ii aflate n ret, ele diferite
254
9.1.3
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
255
ntre client, i presupune ca orice pachet schimbat ntre cei doi client, i sa treaca prin server,
ct s, i o ncarcare
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
raspunsul.
O conexiune va fi descrisa prin precizarea parametrilor de nivel ret, ea s, i de
port destinat, ie s, i port sursa.
256
1
2
3
4
5
6
7
8
9
FTP (data)
HTTP
FTP (conexiune)
POP3
SSH
IMAP
telnet
SNMP
SMTP
HTTPS
DNS
IMAPS
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
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
257
9.2
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
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
258
Protocolul telnet a fost standardizat pentru a permite clientului de telnet init, ierea de
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
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
259
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,
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
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
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,
catre server nu va mai necesita transferul cheii publice, aceasta existnd deja stocata
pe client.
1
2
3
4
5
6
260
7
8
9
bogdand@server:~$
4
5
6
7
pwd"
8
9
rrazvan@apple:~$
este aseman
comenzii tradit, ionale cp:
1
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
4
5
razvan@kiwi:~$
1
http://en.wikipedia.org/wiki/Comparison_of_SSH_clients
00:10
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
Autentificarea cu chei
SSH, se poate folosi autentificarea cu chei publice
Pentru o securitate sporita a utilizarii
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
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
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
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
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,
care legatura
cu serverul se reface s, i resursa este din nou accesibila.
, i.
descarc
noi funct, ionalitat
de a descarca
pe client site-uri ntregi cu toate paginile s, i legaturile
dintre acestea.
Pentru a descarca
un fis, ier prin HTTP se poate folosi comanda:
1
2
3
--15:57:06--
http://ccnp.catc.ro/resources/CiscoTFTP.exe
263
=> CiscoTFTP.exe
4
5
6
7
8
9
10
11
100%[====================================>] 1,327,497
2.66M/s
12
13
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
2
3
4
razvan@kiwi:~$ ls
gnulog www.fsf.org
www.gnu.org
Descarcarea
tuturor legaturilor
de pe siteul www.yahoo.com cu o adncime de 1 se
face prin:
1
9.3
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
264
9.3.1
, 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.
265
Pentru a exemplifica modul n care componentele prezente mai sus interact, ioneaza,
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
266
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
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,
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
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
9.3.3
Cea mai ntlnita problema asociata cu pos, ta electronica o reprezinta primirea de spam
268
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
,i
cu adevarat
eficienta n prevenirea atacurilor bazate pe asumarea unui false identitat
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
de diversele comunitat
ceea ce Sir Tim
Berners Lee a denumit Semantic Web, adica o extensie a WWW-ului n care cont, inutul
9.4.1
269
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.
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
protocol://server:port/cale/catre/resursa
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;
270
autentificarea
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.
HTTP catre
google.ro:
1
2
3
4
5
6
7
8
9
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.
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
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
271
<body>
<h1>Antet</h1>
8
9
Text simplu
<strong>Text aldin</strong>
<em>Text cursiv</em>
10
11
12
</body>
13
14
</html>
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
272
9.4.2
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
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,
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
273
9.4.4
Client, ii Web
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
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
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
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
9.5.2
FTP
275
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
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,
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
276
4
5
6
7
8
9
10
11
ftp://ftp.lug.ro
a cont predefinit),
n cazul serverelor n care accesul nu se poate face anonim (far
ftp://user:parola@server:2555
Cuvinte cheie
client
SMB
curl
spam
FTP
HTML
stiva de protocoale
HTTP
IMAP
TCP
telnet
IP
LDA
POP3
UDP
URL
port
webmail
punct-la-punct
wget
scp
WWW
server
XHTML
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
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
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?
q va fi descarcat
fis, ierul /test.com/lista/admisi.txt
278
q adevarat,
adevarat
q adevarat,
fals
q fals, adevarat
q fals, fals
q Firefox
q Internet Explorer
q wget
q Thunderbird
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
10.1
, ii
Problematica securitat
cap
un interes deosebit n ultimele decenii. Des, i un concept discutat din cele mai
atat
http://www.internetworldstats.com/stats.htm
279
280
n ciuda faptului ca domeniul este unul vast, nivelul de cunoas, tere s, i nt, elegere a
, ii este destul de scazut.
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
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
http://nmap.org/images/matrix/
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)
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
, 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
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
sigura pot, i sa faci aplicat, ia mea? este Ct de sigura vrei sa fie?. Raspunsurile
Pot
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
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
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
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;
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;
284
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;
10.2
Securizarea sistemului
10.2.1
http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)
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:
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.
accesare a unor zone de memorie care nu se afla n spat, iul de adresa al procesului
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
10.2.2
Controlul accesului
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
subsolul cladirilor,
urmarindu-se
astfel s, i protect, ia mpotriva cutremurelor.
287
unor programe malit, ioase. ncepnd cu Windows Vista, acest lucru a fost combatut
prin
1
folosirea User Account Control .
10.2.3
Parole
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
http://en.wikipedia.org/wiki/User_Account_Control
http://en.wikipedia.org/wiki/Public_key_infrastructure
3
http://openwall.com/john/
2
288
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
289
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
, 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
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
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
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
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
3
4
5
6
7
8
9
root@valhalla:/tmp# ls -l battleship
-rw-r--r-- 1 alina razvan 0 Sep 19 18:01 battleship
10
11
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
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--
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 -;
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
7
8
9
10
root@kiwi:~# ls -l hello.c
-r-xr--r-x 1 razvan new 81 Oct
6 21:35 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
1
2
293
root@kiwi:~# umask
0022
3
4
5
6
7
root@kiwi:~# ls -l uso7_test1
-rw-r--r-- 1 razvan razvan 0 Nov 10 17:28 uso7_test1
8
9
10
11
12
13
14
ro0t@kiwi:~# ls -l uso7_test2
-rw-r----- 1 razvan razvan 0 Nov 10 17:28 uso7_test2
15
16
17
18
19
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--
777 & ~027 = 777 & 750 = 111 111 111 & 111 101 000 =
= 111 101 000 = 750 = rwx r-x ---
10.3
10.3.1
Monitorizarea sistemului
294
Comanda top (vezi sect, iunea 5.2.4) combina informat, iile oferite de comenzile uptime
s, i free.
1
2
3
4
5
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
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
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.
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
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.
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
3
4
5
Pentru a obt, ine dimensiunea unui director se poate folosi comanda du:
1
2
root@cursuri:/home/courses# du -sh rc
155M
rc
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
296
7
8
tcp
[..]
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
, 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
10.3.2
1 08:01:55 2009
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
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
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
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
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
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
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
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
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.
setgid.
root@kiwi:~# ls -l a.out
-rwxr-xr-x 1 razvan razvan 13564 Jul
9 20:49 a.out
3
4
5
6
7
root@kiwi:~# ls -l a.out
-rwxr-sr-x 1 razvan razvan 13564 Jul
9 20:49 a.out
8
9
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
300
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
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
root@kiwi:~# pwd
/root
3
4
5
6
7
8
9
10
11
12
13
14
15
301
19
20
21
22
23
24
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
razvan
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).
/etc/sudoers urmatoarea
linie:
1
302
1
2
Daca se ncearca rularea comenzii ping, fara a folosi sudo, se obt, ine din nou mesaj
de eroare:
1
2
rookie@kiwi:~$ sudo -l
User rookie may run the following commands on this host:
(ALL) /bin/ping
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
11
12
13
root@kiwi:~# ulimit -n
2048
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
303
simultane permise
avertisment. n plus se dores, te limitarea numarului
de autentificari
rookie
rookie
rookie
soft
hard
-
nproc
nproc
maxlogins
20
35
10
10.4
Atacuri de ret, ea
10.4.1
304
secunda;
un flood are
la nivelul unui ruter de acces (ce conecteaza o ret, ea locala)
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/
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
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
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,
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
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
http://www.metasploit.com
306
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
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.
http://en.wikipedia.org/wiki/AutoRun#Attack_vectors
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.
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
2
3
4
5
6
7
http://www.insecure.org/nmap
http://www.sourceforge.net/projects/nmapwin
308
8
9
10
11
12
13
14
15
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
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
309
17
18
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
2
3
4
5
6
7
8
9
10
11
12
13
nmap ofera s, i alte opt, iuni. Comanda de mai jos realizeaza scanarea porturilor cuprinse
2
3
4
5
6
7
8
9
10
11
12
10.5
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
310
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).
10.5.2
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
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
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
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
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
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.
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)
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
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
10.6
Studiu de caz
10.6.1
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.
http://www.wireshark.org/
http://www.winpcap.org/windump/install/
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
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
10.6.2
Recuperarea parolei
Editarea GRUB
Prima metoda de a parolei de root necesita editrea meniului de boot a GRUB. Din
316
Trebuie creat un nou director n care se va face montarea vechiului sistem de fis, iere:
1
2
3
Cuvinte cheie
du
controlul accesului
/etc/sudoers
autentificare
/etc/passwd, /etc/shadow
autorizare
/etc/security/limits.conf
criptare
atacuri
matrice de drepturi
chmod
firewall
chown
criptare, decriptare
chroot
df
DoS
a digitala,
certificat digital
semnatur
hacker
netstat
sudo
monitorizare
suid
nmap
syslog
parole
tcpdump
politica de securitate
top
quota
ulimit
securitatea fizica
umask
sniffer
virus, i
317
ntrebari
2. Fie urmatoarele
comenzi:
1
2
3
umask 022
echo "Acesta nu este un test" > test
chmod go+x 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?
318
q adevarat,
adevarat
q adevarat,
fals
q fals, adevarat
q fals, fals
7. Traficul catre
un server este monitorizat cu tcpdump. Care dintre urmatoarele
q numarul
de client, i ai server-ului
q ulimit
q quota
q nmap
q chroot
9. Care este primul pas n securizarea unei ret, ele?
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
Etapele compilarii
Optimizarea compilarii
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
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.
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
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,
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 .
http://www.softintegration.com/
322
raspndit
a este n limbaje de programare de nivel scazut
s, i limbaje de programare de
nivel nalt.
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
http://en.wikipedia.org/wiki/Categorical_list_of_programming_languages
323
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
3
4
5
6
7
8
9
10
mircea@cougar:~/carte-uso/cap-10$ ./a.out
Hello, World!
11.1.4
Pachete necesare
324
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
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
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
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!
11.2.1
Utilizare GCC
#include <stdio.h>
2
3
4
main()
{
printf("Hello, World!\n");
5
6
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
http://msdn.microsoft.com/en-us/library/ms235639(VS.80).aspx
http://en.wikipedia.org/wiki/Richard_Stallman
326
2
3
4
mircea@cougar:~/carte-uso/cap-10$ ./my_exec
Hello, World!
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
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
#include <stdio.h>
2
3
4
5
int main(void)
{
printf("Hello, World!\n");
return 0;
7
8
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
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
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
11.2.2
, 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
#ifndef FUNC_H_
#define FUNC_H_
3
4
5
6
7
#endif
#include "func.h"
328
3
4
5
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
#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
2
3
4
5
razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ ./a.out
Suma(10) = 55
Suma-alternanta(10) = -5
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:
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.
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
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
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
#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
#include "info.h"
2
3
4
5
6
8
9
10
11
12
13
return sum;
14
15
1
2
3
4
5
6
331
7
8
9
10
11
12
13
struct array_strunct {
int array[32];
int len;
};
# 2 "info.c" 2
14
15
16
17
18
19
20
21
22
23
24
25
return sum;
26
27
2
3
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
sistemului fizic.
opt, iunea -S.
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
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
Limbaje de asamblare
mov
al,
061h
333
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
movl
mov
$0x100,
eax,
%eax
100h
; sintaxa AT&T
; sintaxa Intel
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
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
7
1
http://en.wikipedia.org/wiki/X86_assembly_language
334
8
9
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
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
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
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.
3
4
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
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 gasesc
n alte module obiect sau n biblioteci. Rezolvarea acestor simboluri se va
11.3.4
Optimizarea compilarii
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.
336
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
2
3
4
5
real
user
sys
0m4.143s
0m3.624s
0m0.488s
6
7
8
9
10
11
real
user
sys
0m5.769s
0m5.288s
0m0.456s
12
13
14
15
16
17
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
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
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
337
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
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
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
Pentru obt, inerea unui fis, ier executabil s, i deci pentru rularea acestui cod este necesara:
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
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
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
2
3
4
5
6
7
8
9
10
mircea@cougar:~/carte-uso/cap-10$ ./exec
Suma (10): 55
1
http://en.wikipedia.org/wiki/GNU_linker
339
2
3
4
5
mircea@cougar:~/carte-uso/cap-10$ ./exec
Suma (10): 55
Suma alternanta (10): -5
11.3.6
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)
refera la fis, iere obiect, fis, iere executabile s, i la biblioteci cu legare dinamica.
http://en.wikipedia.org/wiki/Object_file
340
3
4
5
6
7
8
9
10
11
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
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
PROGBITS
NOTE
HASH
http://en.wikipedia.org/wiki/Executable_and_Linkable_Format
http://en.wikipedia.org/wiki/Relocation_(computer_science)
Off
Size
ES Flg Lk
0
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.
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
Din circa 25000 de pachete instalabile n cadrul distribut, iei Debian GNU/Linux
Testing/Squeeze1 , peste 5000 sunt biblioteci:
1
2
11.4.1
Tipuri de biblioteci
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
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/
343
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
11.4.2
file:
1
2
3
4
5
6
7
8
9
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
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
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
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
3
4
5
razvan@valhalla:~/carte-uso/cap-10$ ls -l getch
-rwxr-xr-x 1 razvan razvan 10734 Sep 21 23:25 getch
momentul lansarii
Modul n care se specifica
11.5
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
346
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.
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
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
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/
11.5.2
347
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).
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:
neactualizata;
348
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
349
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
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
3
4
5
6
350
7
8
9
10
11
11.5.4
Target-ul clean
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
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
11.5.5
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
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
.PHONY: clean
2
3
clean:
rm -f exec main.o sum.o sumalt.o
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
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
2
3
all: exec
4
5
6
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
352
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,
CC = gcc
CFLAGS = -Wall
3
4
5
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
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 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
353
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);
11.5.8
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
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
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
354
11.6
Portabilitate
problema importanta.
11.6.1
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
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
355
procesorului1 ramn
aspecte de care trebuie t, inut cont.
http://en.wikipedia.org/wiki/Word_(computing)
356
11.6.3
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:
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
11.7.2
357
atoare
Contextul
Vom considera un scenariu foarte simplu care include 6 fis, iere:
#include <stdio.h>
2
3
#include "c_print.h"
4
5
6
7
8
void c_print(void)
{
printf("C-style: Wassup!\n");
}
#include <iostream>
2
3
#include "cpp_print.h"
4
5
6
7
8
void cpp_print()
{
std::cout << "C++ style: True, true!" << std::endl;
}
#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
#ifndef CPP_PRINT_H_
#define CPP_PRINT_H_
3
4
void cpp_print();
5
6
#endif
#include "c_print.h"
//#include "cpp_print.h"
3
4
5
6
7
int main(void)
{
c_print();
//cpp_print();
return 0;
9
10
#include "cpp_print.h"
//#include "c_print.h"
3
4
5
6
7
int main()
{
cpp_print();
//c_print();
return 0;
9
10
razvan@valhalla:~/mix$ ls
c_main.c c_print.c c_print.h
cpp_main.cpp
cpp_print.cpp
cpp_print.h
3
4
5
6
7
8
9
10
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
359
Pentru
2
3
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
7
8
9
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
5
6
7
8
9
10
11
12
13
360
14
15
16
17
18
19
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
[...]
Solut, ia
compilatorul trebuie sa det, ina informat, ii
Pentru a rezolva aceasta problema,
2
3
razvan@valhalla:~/mix-new$ ./cpp_main-c_print
1
http://en.wikipedia.org/wiki/Name_mangling
361
C-style: Whassup?
5
6
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
#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
2
3
362
4
5
6
7
8
9
10
11
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
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 maresc
aplicat, iile deoarece sunt incluse n executabilele rezultate
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
364
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
q adevarat,
adevarat
q adevarat,
fals
q fals, adevarat
q fals, fals
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...
12.1
365
366
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,
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
http://www.gnu.org/software/bash/
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
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);
368
12.2
12.2.1
Editarea comenzilor
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
http://www.gnu.org/software/bash/manual/html_node/Readline-Interaction.html
369
12.2.2
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
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/
caracter introdus, shell-ul va afis, a prima comanda anteriora cea mai potrivita.
arii.
cea gasit
a;
cautare.
http://www.gnu.org/software/bash/manual/html_node/Readline-Init-File.html
370
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.
niciun efect. Totus, i, se pot vizualiza toate aceste combinat, ii prin apasarea
de doua ori a
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
ubuntu@ubuntu:~$ . /etc/bash_completion
371
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
ls cu /bin/ls
file cu /usr/bin/file
su cu /bin/su
ifconfig cu /sbin/ifconfig
Exemple de comenzi interne sunt:
http://www.caliban.org/bash/index.shtml
http://www.debian-administration.org/articles/316
372
. 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
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
5
6
373
, i n pagina de manual.
O lista completa a comenzilor interne Bash gasit
1
bash/info bash sau online )
12.2.4
(man
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
http://www.gnu.org/software/bash/manual/bashref.html#SEC55
374
12.3
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
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
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
12.3.1
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
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.
375
daca se ajunge la sfrs, itul programului. Astfel, scriptul nostru shell poate fi scris ntr-o
singura linie:
1
#! 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
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
376
3
4
5
# 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
12.3.2
# comentariu
echo "hello" # comentariu
# echo "hello" (comanda comentata)
12.3.3
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
377
echo
Comanda echo permite afis, area s, irului primit ca parametru la ies, irea standard a
terminalului:
1
2
-n: dezactiveaza afis, area implicita a unui caracter newline la sfrs, itul liniei:
1
2
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
%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
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
12.3.4
One liners
Redirectarea intrarii/ies
, irii unei comenzi
razvan@anaconda:~$ cat
mesaj1
mesaj1
mesaj2
mesaj2
1
2
379
3
4
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
4
5
6
7
n exemplul de mai sus, comanda cat a afis, at fis, ierul out.txt prin transmiterea
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
2
3
4
5
6
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
2
3
4
5
6
7
380
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
Operatorul >> Operatorul >> este utilizat pentru redirectarea ies, irii standard nsa cu
adaugarea
(append) a informat, iilor redirectate la sfrs, itul fis, ierului. Echivalent exista
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
3
4
5
6
cat <<END
mesaj simplu
... pentru un here document ...
7
8
9
10
11
12
https://wiki.ubuntu.com/DashAsBinSh
381
mesaj simplu
... pentru un here document ...
15
16
17
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
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
Se observa ca este incomoda folosirea comenzii echo. O solut, ie este utilizarea unui
here document:
1
2
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
online1 .
Informat, ii suplimentare despre here documents se pot gasi
Here strings; operatorul <<< Operatorul <<< permite folosirea de here strings, adica
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
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
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
Si
mai simplu, trunchierea se realizeaza folosind comanda de mai jos:
1
, 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
http://tldp.org/LDP/abs/html/here-docs.html
383
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
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
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)
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
384
6
7
8
9
10
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
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.
12.4
Programarea shell
12.4.1
Variabile
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
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
386
2
3
4
2
3
4
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
8
9
10
11
12
11
12
13
Adaugarea
unui utilizator n sistem n mod neinteractiv
1
2
1
presupunem ca nu se modifica procesele pe parcursul execut, iei script-ului, astfel nct ordinea lor sa
se pastreze
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
31
32
33
34
35
36
33
34
35
36
37
37
38
39
40
41
42
43
root@anaconda:/home/razvan/uso/scripting# ./my_add_user.sh
44
45
46
12.4.2
Shell-ul are un set de caractere rezervate, caractere ce au roluri bine definite ntr-un
script.
388
ubuntu@ubuntu:~$ ls -l mydir
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
Caracterul $ (dolar)
Unul dintre acestea este caracterul $ care poate fi folosit pentru expandarea unei
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
2
3
4
a folosirea
Expandare aritmetica se refera la executarea de calcule aritmetice. Far
operatorii aritmetici ar fi considerat, i caractere
operatorului de expandare aritmetica,
simple:
1
2
389
3
4
5
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
3
4
5
razvan@anaconda:~$ echo $a
$a
6
7
8
$ 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
Pentru afis, area unui caracter ghilimele putem folosi backslash sau apostrof :
1
2
3
4
5
390
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
razvan@anaconda:~$ echo \\
\
Caracterul (apostrof)
Caracterul are un rol similar cu cel al caracterului ". Este folosit pentru descrierea de
, i pastreze
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
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.
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
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
13
14
15
392
1
2
3
4
5
6
7
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
2
3
4
razvan@anaconda:~/uso/scripting$ echo $?
0
5
6
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
]:
2
3
4
razvan@anaconda:~/uso/scripting$ echo $?
0
5
6
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.
393
fi
11
12
13
14
15
16
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..
funct, ionalitat
Solut, ia este redirectarea ies, irii comenzii grep catre
/dev/null.
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
14
394
15
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,
12
13
14
case valoare_variabila in
sablon1) actiuni;;
sablon2) actiuni;;
...
5
6
esac
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.
Scriptul shell pentru calculul sumei primelor 10 numere naturale este urmatorul:
1
2
3
4
5
6
7
8
9
10
11
12
sau
1
2
3
4
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
, ii:
Acest lucru se poate extinde s, i la scriptul de mai sus cu pierderea part, iala a claritat
1
2
396
sau:
1
razvan@anaconda:~$ sum=0
2
3
4
5
6
7
8
fie s, ir de caractere:
Lista poate cont, ine orice fel de element, fie numar
1
2
3
4
Separatorul implicit pentru lista este caracterul blank (spat, iu). Daca un s, ir cont, ine blank,
acesta trebuie citat:
1
2
3
4
5
6
7
8
9
10
11
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
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
10
11
12
16
17
18
19
20
21
22
23
24
25
26
27
398
28
total 10
14
15
16
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
10
11
12
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.
14
15
16
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
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),
400
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
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$ 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
8
9
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
401
codrin
lucian
razvan
tavi
10
11
12
13
14
15
16
17
18
19
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
10
11
12
13
14
15
16
17
18
19
20
21
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
Opt, iuni utile sort Dintre opt, iunile utile ale comenzii sort amintim:
-t:
402
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
6
7
8
9
10
11
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
403
2
3
4
5
6
7
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
pe masur
1
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
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
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
baza sunt 1 s, i 6.
12.5.5
tr
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
6
7
8
9
10
11
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
1
2
405
3
4
5
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
s, i numarul
de cuvinte s, i caractere:
1
2
3
4
5
6
7
8
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
(00:07)
(00:18)
(00:23)
406
7
8
alexef:x:1032:1026:Alex Eftimie:/home/students/alexef:/bin/bash
andreic:x:1045:1026:Andrei Cibotaru:/home/students/andreic:/bin/bash
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
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
cautare):
1
2
3
4
5
6
7
8
9
10
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
407
Simbolul ?
408
12.5.8
sed
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
Sintaxa de rulare
Un exemplu obis, nuit de rulare a sed este nlocuirea unui text cu un altul:
1
2
3
4
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.
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
Exemple
cteva exemple de utilizare a comenzii sed:
Mai jos se pot regasi
sed s/.$//
410
sed s/$/\r/
sed 1,2800d
sed -n /regex/p
afis, area ntr-un fis, ier a liniilor care cont, in un anumit s, ir:
1
12.5.9
awk
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/
411
2
3
urmatoarea
comanda:
1
2
3
4
5
6
7
8
9
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
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
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
#!/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
#!/usr/bin/awk -f
1
2
3
4
5
6
7
8
BEGIN {
printf "+---------------+-------------------------+\n";
}
/\/home/ {
printf "|%-15s|%-25s|\n", $1, $6;
}
END {
printf "+---------------+-------------------------+\n";
}
5
6
7
8
9
10
11
413
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";
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
3
4
5
6
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
12.6
12.6.1
xargs
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
sau
1
La fel, daca se dores, te generarea unei liste a utilizatorilor n sistem se poate utiliza
comanda:
1
2
sau
1
2
1
2
415
3
4
5
razvan@anaconda:~/uso/scripting$ ls tmp*
tmp1.txt tmp2.txt tmp3.txt
6
7
8
5
6
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
este echivalenta cu
1
2
3
4
5
12.6.2
locate
416
1
2
3
4
5
6
7
8
9
10
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
3
4
12.6.3
find
urmatorul
exemplu:
1
2
3
4
5
6
7
417
/usr/include/termio.h
/usr/include/termios.h
[...]
caror
nume corespunde expresiei regulate *term*.h s, i se afis, eaza acele fis, iere
(-print).
Astfel, sintaxa find este
1
unde:
caut
permisiuni etc.);
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
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
418
4
5
6
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
det, inatorul
fis, ierului cu ajutorul opt, iunii -user;
afis, area fis, ierului se face folosind -print; aceasta act, iune este implicita;
s, tergerea fis, ierului cu ajutorul -delete; exemplu: s, tergerea fis, ierelor temporare
din ierarhia utilizatorului local:
1
execut, ia unei comenzi precizate de utilizator cu ajutorul opt, iunii -exec; s, irul {}
gasite
adaugarea
dreptului de execut, ie pentru toate directoarele:
1
419
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
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
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
4
5
420
Numele variabilei poate fi ncadrat ntre acolade. Acestea sunt opt, iunale dar sunt utile
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
3
4
5
$(comanda)
sau
1
comanda
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
12.7.2
421
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);
[ ...
ubuntu@ubuntu:~$ ls *.c
afis, area tuturor fis, ierelor de tip png, jpg sau gif:
1
ubuntu@ubuntu:~$ ls *.{png,jpg,gif}
ubuntu@ubuntu:~$ ls [0-9][0-9][0-9]*
12.8
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
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
422
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
423
done
12.8.2
Parametri speciali
Dupa cum a fost prezentat anterior, exista variabile speciale folosite de shell pentru
$# reprezinta numarul
de argumente din linia de comanda;
12.8.3
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
7
8
9
10
11
12
13
424
5
6
7
8
./service_ip.bash
./while_cat.bash
./rss.bash
[...]
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
, 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
Prezentam
exemplu, n care se poate s, terge sau adauga
un utilizator n sistem:
1
#!/bin/bash
2
3
4
5
6
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
29
30
31
32
425
esac
3
4
Done.
5
6
7
8
9
10
11
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
definita:
1
2
3
4
function testare ()
{
...
}
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
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
#!/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"
Se observa ca argumentele unei funct, ii se obt, in tot folosind parametri pozit, ionali ($1,
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 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:
Fis, ierele de pornire sunt interpretate de sesiunile de shell interactive n modul urmator:
427
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
razvan@anaconda:~/uso/scripting$ env
SSH_AGENT_PID=7985
TERM=xterm
SHELL=/bin/bash
[...]
adaugarea
directorului ~/bin la variabila de mediu, se foloses, te comanda:
1
2
3
4
5
6
7
428
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
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.
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;
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
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
3
4
5
6
7
8
9
10
11
12
430
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
http://tldp.org/HOWTO/Bash-Prompt-HOWTO/bash-prompt-escape-sequences.html
12.11.3
431
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
4
5
AT
ATTRIB
BREAK
CACLS
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
2
3
4
5
6
ERASE
LABEL
7
8
9
432
10
[...]
Variabile
Ca s, i n Bash, variabilele nu au un tip. Definirea acestora se realizeaza cu ajutorul
comenzii set:
1
2
3
4
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
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
4
5
6
7
8
9
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
C:\DOCUME~1\RAZVAN~1.RAG>set a=3
2
3
4
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
http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx
434
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
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
Pentru afis, area proceselor din sistem n forma tabelara se poate folosi comanda
1
2
3
4
5
6
7
8
PS C:\> $b = 3.1415926
2
3
4
PS C:\> $b
3.1415926
5
6
PS C:\> $b.GetType().Name
435
Cuvinte cheie
shell
operatorul de comunicat, ie |
bash
variabile shell
script shell
readline
), , , &, |, ;, [, ], ?, blank
editarea comenzilor
istoricul comenzilor
reverse search
autocompletion
comenzi externe
shebang
expandarea
echo
printf
set
shell:
variabilei,
substitut, ia
expandare aritmetica
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>, &>, >>
batch scripting
sed
ntrebari
q Bash
q PowerShell
q Command Prompt
1
http://sed.sourceforge.net/grabbag/tutorials/
expandarea
comenzii,
436
q Flash
q tr
q grep
q cut
q sort
q >
q |
q &>
q <<
q set $a == $b
q [$a == $b]
q test $a == $b
q { $a == $b }
5. Care este efectul comenzii sort -n file.txt?
q vim
q cut
q sed
q tr
q for
q while
q until
q repeat
q ls
q for i in *; do echo $i; done
q find .
q ls *
-mindepth 2 -type f
437
438
-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
-e fisier
-f fisier
sir1 != sir2
-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
439
cd
dir
cd
mkdir, md
rmdir, rm
del, erase
copy
move
type
echo
more
comp
fc
ftype
findstr
shift
sort
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)
(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
441
442
13.1
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.
pe ecran un punct dintr-o imagine raster este descris prin 3 valori reprezentnd
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
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.
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
444
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
13.2.1
X Window System
X a fost creat n 1984 la MIT5 . Versiunea curenta a protocolului este X11 s, i a aparut
n
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
13.2.2
445
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
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
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
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
13.3
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:
449
Folosind startx
startx este un front-end pentru xinit care ofera utilizatorului o interfat, a mai
complexa:
1
2
3
ator.
450
O alta metoda de oprire a interfet, ei grafice este oprirea serviciului kdm (sau gdm) folosind
paramerul stop:
1
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
13.4
Configurarea serverului X
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
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
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 unei anumite rezolut, ii (se poate preciza opt, ional s, i rata de refresh
pentru 75 Hz se foloses, te parametrul --rate 75)
1
13.4.2
Configurarea tastaturii
romnes, ti pe tastatura,
specificat, ii (pe scurt):
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)
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
mircea@acorn:~$ setxkbmap ro
13.5
13.5.1
System Settings
13.5.2
453
13.5.3
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
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
13.5.5
13.5.6
Managementul utilizatorilor
455
de
Act, iune
F1
Alt+F2
13.5.7
456
(figura 13.17). Daca se dores, te, lista de procese poate fi afis, ata sub forma de arbore.
caror
valori pot fi grupate n tab-uri personalizate, precum se poate observa n
figura 13.18.
457
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.
cautarea
de pachete dupa nume, instalarea de pachete noi, dezinstalarea de pachete
s, i actualizarea tuturor pachetelor din sistem.
458
Figura 13.18: System Monitor senzori care pot fi folosit, i n tab-uri personalizate
13.6
Servicii desktop
13.6.1
KDE versiunea 4 a introdus n KDE un nou serviciu de pornire a aplicat, iilor. El nlocuies, te
atoare
459
13.6.2
Cautarea
fis, ierelor n sistem
Serviciile de cautare
din sistemele de operare pe cele mai cunoscute sunt urmatoarele:
460
13.6.3
Notificari
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
13.8
Studii de caz
13.8.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
Aplicat, ie
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
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
13.8.2
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.
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
3
4
5
[...]
10/09/2007 22:48:59 *** Trying ":0" in 4 seconds.
6
7
8
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
acasa:0
464
13.8.3
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
465
aplicat, ii grafice
RDC
client X
server X
servicii desktop
diacritice
Unicode
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
ntrebari
q PDF
q True Type font
q PNG
q SVG
467
q True Type
q Unicode
q UTF-8
q RGB
3. Un Display Manager are rolul de a:
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,
q X peste SSH
q VNC
q Spotlight
q Remote Desktop Connection
q KDE
q Compiz
q Kwin
q Metacity
468
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
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
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
470
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
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
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
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.
Opt, iunea -o este folosita pentru a specifica fis, ierul de ies, ire. n absent, a acesteia se
#include<stdio.h>
2
3
4
5
6
7
8
9
10
11
12
13
14
#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
#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--;
}
2
3
4
5
http://astyle.sourceforge.net/
14.3
473
Editorul Vim
Sect, iunea
Unul dintre cele doua editoare protagoniste, tradit, ional, ale razboiului
editoarelor1 este
recomandam,
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.
http://en.wikipedia.org/wiki/Editor_war
Vi iMproved http://www.vim.org/
3
lista nu este exhaustiva
2
474
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
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.
k
h j l
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
475
w cuvntul urmator
(word);
fx urmatoarea
aparit, ie a caracterului x pe linia curenta (find);
<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
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 .
dw s, terge urmatorul
cuvnt (comanda compusa);
pna la finalul fis, ierului (comanda compusa);
:h motion.txt
:h repeat.txt
476
compusa);
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
"Rc
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
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
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
:syntax on
478
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
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
O alta facilitate pentru lucrul cu fis, iere lungi este folding. Aceasta este, n esent, a,
http://ctags.sourceforge.net/
popping the tag stack
3
http://cscope.sourceforge.net
4
http://www.vim.org/scripts/index.php
2
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
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,
Daca,
facute
s, i determina mai simplu sursa erorii.
automata a schimbarilor
asupra aceluias, i fis, ier, acolo unde acest lucru este posibil.
Cteva elemente cheie n jargonul VCS sunt:
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;
branch o istorie distincta a sursei. Conceptul este folosit tradit, ional pentru
dar sistemele distribuite redefinesc acest
experimente asupra codului sursa,
concept.
480
Sisteme centralizate.
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
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
Adaugarea
unui nou fis, ier la repository se face folosind svn add. Transferul catre
dect la urmatorul
tipares
dar s, i al celor care nu sunt
Practic,
crearea unui branch este o copiere a surselor ntr-un nou subdirector al
branches;
http://subversion.tigris.org/
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
2
3
4
5
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
2
3
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.
14.5
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,
http://git-scm.com/
482
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
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
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
:set tags+=/usr/include/tags
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
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
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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Dupa cum reiese din exemplul de mai sus, cteva dintre probleme de codare,
neraportate implicit de compilator, sunt:
http://www.splint.org/
484
14.6
Automatizarea compilarii
14.6.1
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
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
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
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:
485
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
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;
14.7
14.7.1
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
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
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
14.7.2
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
http://en.wikipedia.org/wiki/Memory_leak
487
5
6
7
8
Informat, iile despre bibliotecile partajate aflate n sistem sunt colectate (manual sau
configureaza legaturi
simbolice corecte n directoarele cu biblioteci (pentru a oferi
denumiri standard biblitecilor, din punct de vedere al formatului)
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
14.7.3
488
strace
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
Se poate observa:
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
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
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).
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
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
15
16
17
18
19
20
21
22
23
24
25
26
27
28
mihai@keldon:~/tmp$ ./a.out
Segmentation fault
7
8
9
10
11
12
13
14
15
16
17
491
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
display, disp permite afis, area unei variabile pe parcursul procesului de depanare;
programului, ies, irea din gdb.
quit, q terminarea depanarii
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
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
14.8.2
valgrind
fiecare dintre acestea realizeaza un tip aparte de depanare sau profiling. Dintre aceste
componente, cele mai importante sunt:
2
3
comanda:
1
http://en.wikipedia.org/wiki/Valgrind
493
citire invalida
1
2
3
4
5
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)
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.
5
6
7
8
9
494
14.9
, 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
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
495
496
14.10
, ile de
O componenta importanta n dezvoltarea aplicat, iilor software o reprezinta activitat
gestiune, monitorizare s, i control a acestora. Managementul proiectelor software este
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
, 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
497
14.10.2
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;
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
14.10.3
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
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:
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
14.11.2
499
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
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
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
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,
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
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 .
14.12
Studiu de caz
14.12.1
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
coding style
subversion
indent, astyle
git
editor
ctags
vim
analiza statica
controlul versiunii
splint
503
504
GNU Autotools
Eclipse
strace
Anjuta
waterfall
stiva
model iterativ
heap
Trac
apeluri de sistem
Redmine
ldd
man
depanare
info
GDB
Doxygen
ddd
Javadoc
Valgrind
memory leak
Usenet
IDE
ntrebari
q Vim
q astyle
q ctags
q gdb
q Valgrind
q Trac
q indent
q git
q commit
q update
q checkout/clone
q boot
505
q Anjuta
q Eclipse
q Microsoft Visual Studio
q OpenOffice
q ctags
q splint
q indent
q gdb
q visual
q command
q insert
q graphic
q :w
q :q
q :s
q :help
q Git
q Vim
q Eclipse
q ddd
q Trac
q GTK
506
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
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
http://banshee-project.org/
http://www.listen-project.org/
3
http://audacious-media-player.org
2
509
15.2
Filme n Linux
Vizualizarea de filme este deseori mai facila n Linux dect n Windows, pentru ca
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
15.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
9
10
11
Imaginea .iso poate fi montata s, i accesata n sistemul local de fis, iere, similar utilitarului
Daemon Tools1 din Windows:
1
2
3
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
511
15.4
Messenger n Linux
Pentru utilizatorii de Instant Messaging, Linux are, tradit, ional, o alternativa us, or diferita,
512
ea nu necesta configurari
adit, ionale. Google Talk
de Yahoo este ct se poate de facila;
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/
513
grafica.
http://ktorrent.org/
514
rtorrent1 . Utiliznd ncurses2 , aceasta aplicat, ie este foarte us, or de folosit peste o
a interfat, a grafica.
15.6
Imprimanta n Linux
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/.
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
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
515
15.7
Jocuri n Linux
516
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
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
517
As, a cum se poate vedea, pentru fiecare din monitoare (LVDS ecranul laptop-ului s, i
518
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
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
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
corespunzatoare
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
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
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
7. virtual
a toate celelalte sunt tipuri de partit, ii
8. Ubuntu
9. window manager window manager se refera la mediul grafic
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
524
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
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
526
2. -c
3. se numes, te portabilitate
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>
scriptului
9. repeat nu exista comanda repeat n Bash
10. find . -mindepth 2 -type f comanda afis, eaza recursiv doar fis, ierele
din subdirectoare
ANEXA A. RASPUNSURI
LA NTREBARI
527
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.
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
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
[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
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
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
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
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