Sunteți pe pagina 1din 549

Cuvnt nainte

Not , iunea de sistem de operare reprezint, probabil, unul dintre termenii cei mai des ntlnit , i n domeniul calculatoarelor, s , i nu numai. De la formele greoaie dezvoltate n anii '60, cunoscute doar profesionis , tilor, corelat cu sistemele dezvoltarea de operare au de cunoscut calcul s ,i o a transformare continu, strns sistemelor

tehnologiilor asociate. n ziua de astzi, sistemele de operare ofer o interfat , facil s , i prietenoas att utilizatorilor obis , nuit , i ai serviciilor Internet, ct s , i utilizatorilor comerciali ai aplicat , iilor dedicate, celor ce folosesc facilitt , ile multimedia s , i jocuri, sau celor profesionis , ti care dezvolt aplicat , ii sau ntret , in sisteme de calcul s , i ret , ele de calculatoare. Evolut , ia tehnologic a dus la dezvoltarea sistemelor de operare pentru un numr tot mai mare de dispozitive, de la sisteme server, desktop s , i laptop la PDA-uri s , i smartphone-uri. Cartea de fat , s , i propune familiarizarea cititorului cu lumea sistemelor de operare s , i, n particular, cu latura preponderent tehnic a acestora. Am creat aceast lucrare avnd n permanent , n vedere cunos , tint , ele de baz s , i cadrul conceptual necesare unui student la o facultate de calculatoare. n aceast structur, cartea este ns construit pentru a  util oricrui cititor care caut un prim contact cu domeniul sistemelor de operare. Sperm ca parcurgerea sa s ofere s , i un set de deprinderi s , i abordri n solut , ionarea problemelor care deps , esc sfera sistemelor de operare. Diversitatea subiectelor abordate a reprezentat o dicultate n crearea unei succesiuni clare de capitole. Strategia aleas este una straticat, ecare capitol bazndu-se pe cele studiate anterior. Totus , i, au existat momente n care a trebuit s utilizm anumite not , iuni nainte de a  denit cadrul conceptual, sau la cteva capitole distant , de prezentarea lor. n astfel de situat , ii cititorului i sunt oferite referint , e ctre capitolele n care sunt claricate not , iunile invocate. Cartea urmres , te prezentarea s , i discutarea not , iunilor de baz necesare unui student n primii ani de facultate, n domeniul calculatoarelor. Diversitatea subiectelor s , i nivelul de detaliu recomand o asimilare n profunzime a informat , iilor, dincolo de durata unui semestru sau a unui an. probleme din domeniu. Din punct de vedere tehnic, preponderent universului materialul de fat ofer o perspectiv ce apart , , ine Am considerat contactul cu Linux ca pe o Sperm ca studentul dornic de aprofundare s rsfoiasc aceast carte n momentele n care caut sprijin suplimentar pentru rezolvarea unei

Linux.

oportunitate aparte pentru o majoritate a utilizatorilor ce provin din mediul Windows, n care deseori alternativele n domeniul sistemelor de operare nu reprezint o opt , iune luat n considerare. Dorint , a noastr este ca utilizarea unui nou sistem de operare, cu o rspndire s , i o evolut , ie tot mai intense, s ofere o nou perspectiv asupra lumii calculatoarelor n general s , i a sistemelor de operare n particular. Des , i cartea este

focalizat pe Linux, ecare capitol include sect , iuni de studii de caz n care sunt prezentate mecanismele similare dintr-un sistem Windows. Structura crt , ii este conceput pentru a oferi att o prezentare a cadrului conceptual, ct s , i o parte aplicativ construit prin exemple. Fiecare capitol este prefat , at de o mic sect , iune Ce se nvat , n acest capitol?, util pentru reperarea principalelor not , iuni. Capitolele se ncheie cu o sect , iune de Cuvinte cheie s , i apoi de ntrebri, pentru a permite cititorului o autoevaluare a cunos , tint , elor dobndite. Unele sect , iuni sunt marcate cu simboluri grace cu o semnicat , ie special: important, not, OZN (pentru tehnologiile recente de tipul bleeding edge) s , i atom (pentru aspecte tehnice avansate). Recomandm parcurgerea secvent , ial a crt , ii, dar cititorul avansat poate sri direct la un capitol de interes particular. Dat ind cont este util , inutul practic detaliat, folosirea calculatorului pentru rularea comenzilor prezentate s pentru explorarea ,i opt , iunilor existente, n paralel cu parcurgerea not , iunilor teoretice. Mult , umim tuturor celor care au contribuit la realizarea crt , ii. Modul de organizare s ,i prezentare, ca s , i diversitatea informat , iilor prezentate se bazeaz pe efortul continuu s ,i pasiunea unei echipe entuziaste. Rosner s Andrei Buhaiu, ,i elaborarea acestei crt , i. Iorgulescu, Voichit ,a n primul rnd, i mult , umim domnului profesor Nicolae pus precum s Mihai Maruseac, Daniel ,, , i colegilor nos , tri Vlad Dogaru, a cror implicare a constituit un beneciu direct n s colegilor Alex Juncu, ,i Dumitru, Laura Lucian Grijincu, pentru Clin Mult , umim, de asemenea, colegilor Alex Eftimie s , i Andrei Andrei Gheorghe revizuirea

Faur pentru contribut adus, , ia Iancu,

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

Autorii

ii

Cuprins
1 Introducere 1.1 Ce este un sistem de operare? . . . . . . . . . . . . . . . . . 1.1.1 Funct . . . . . . . . . . . , iile unui sistem de operare 1.1.2 Tipuri de sisteme de operare . . . . . . . . . . . . . 1.1.3 Funct . . . . . . . . . , ionarea sistemelor de operare 1.2 Scurt istoric al sistemelor de operare . . . . . . . . . . . . . 1.2.1 Prima generat . . . . . . . . . . . . . . . . . . . . , ie 1.2.2 A doua generat ie . . . . . . . . . . . . . . . . . . . , 1.2.3 A treia generat , ie . . . . . . . . . . . . . . . . . . . . 1.2.4 A patra generat . . . . . . . . . . . . . . . . . . . , ie 1.3 Sisteme de operare moderne . . . . . . . . . . . . . . . . . . 1.3.1 Sisteme de operare desktop s . . . . . . . . , i server 1.3.2 Familia Windows . . . . . . . . . . . . . . . . . . . . 1.3.3 Mac OS X . . . . . . . . . . . . . . . . . . . . . . . 1.3.4 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.5 Alte Unix-uri . . . . . . . . . . . . . . . . . . . . . . , i open source . . . . . . . . . . . . . . . . 1.3.6 Comunitat 1.3.7 Sisteme de operare pentru dispozitive mobile . . . . 1.4 Studiu de caz . . . . . . . . . . . . . . . . . . . . . . . . . . virtuala 1.4.1 Virtualizare. Rularea unui SO dintr-o mas , ina de baza Instalarea Linux. Congurari 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 . . . . . . . . . . . . . . . . (CLI) . . . . . . . . . . 2.3.2 Interfat , a n linie de comanda 2.3.3 Oprirea sistemului de calcul . . . . . . . . . . . . . . de baza ale SO . . . . . . . . . . . . . . . . . . . 2.4 Congurari 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 iii 1 1 3 4 5 7 7 8 8 9 9 10 11 11 12 13 14 15 16 16 23 23 24 25 27 28 28 29 31 32 38 38 40 44 45 45 47 47 48

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

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

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

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

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

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

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

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

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

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

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

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

iv 2.5

INTRODUCERE N SISTEME DE OPERARE Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 2.5.1 Interoperabilitatea sistemului de s 48 , iere ntre Linux s , i Windows . 2.5.2 GParted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 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

Gestiunea pachetelor s , i utilizatorilor 3.1 Gestiunea utilizatorilor . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 UID, GID . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 Adaugarea s . . . . . . . . . . . ,i s , tergerea utilizatorilor 3.1.3 Adaugarea s . . . . . ,i s , tergerea unui grup de utilizatori 3.1.4 Modicarea 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 s , iere 4.1 Not . . . . . . . . . . . . . . . . . . . . . . , iuni introductive 4.1.1 Ce este un sistem de s , iere . . . . . . . . . . . . . 4.1.2 Ierarhia sistemului de s . . . . . . . . . . . . , iere relative s absolute . . . . . . . . . . . . . . 4.1.3 Cai , i cai 4.1.4 Variabila de mediu PATH . . . . . . . . . . . . . . 4.2 Tipuri de s . . . . . . . . . . . . . . . . . . . . . . . . , iere 4.2.1 Terminologie . . . . . . . . . . . . . . . . . . . . . 4.2.2 Detect , ia tipului s , ierelor . . . . . . . . . . . . . . . 4.3 Operat , ii uzuale asupra s , ierelor s , i directoarelor . . . . . . . 4.3.1 As area s i schimbarea directorului curent . . . . . , , 4.3.2 As , area cont , inutului s , ierelor . . . . . . . . . . . . 4.3.3 Listarea cont , inutului unui director . . . . . . . . . . 4.3.4 Crearea s ierelor/directoarelor . . . . . . . . . . . , 4.3.5 Copiere/mutare/redenumire/s , tergere . . . . . . . . 4.3.6 Arhivarea s ierelor s i dezarhivarea . . . . . . . . . , , 4.3.7 Backup . . . . . . . . . . . . . . . . . . . . . . . . de comenzi . . . . . . . . . . . . . . . . . . . . 4.4 Redirectari 4.4.1 Descriptorii de s , 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 Clasicarea drepturilor de acces . . . . . . . . . . 4.5.3 Vizualizarea drepturilor de acces . . . . . . . . . . 4.6 Cautarea s . . . . . . . . . . . . . . . . . . . . . . , ierelor 4.6.1 Comanda nd . . . . . . . . . . . . . . . . . . . . 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 s , iere . . . . . . . . . . . . . . . . . . 4.7.1 Integritatea datelor . . . . . . . . . . . . . . . . . . 4.7.2 Alegerea unui sistem de s , iere . . . . . . . . . . . 4.7.3 Adresarea ntr-un sistem de s , iere . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

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

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

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

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

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

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

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

CUPRINS 4.8 Lucrul cu sistemele de s , iere . . . . . . . . . . . . . . . . . . . . . . . 4.8.1 Crearea unui sistem de s . . . . . . . . . . . . . . . . . , iere 4.8.2 Montarea unui sistem de s iere . . . . . . . . . . . . . . . . . , 4.8.3 Repararea unui sistem de s , iere . . . . . . . . . . . . . . . . 4.8.4 Crearea unei imagini pentru un sistem de s , iere . . . . . . . . 4.8.5 Stergerea unui sistem de s iere . . . . . . . . . . . . . . . . , discului . . . . . . . . . . . . . . . . . 4.8.6 Monitorizarea utilizarii 4.9 Tendint , e n sistemele de s , iere . . . . . . . . . . . . . . . . . . . . . . 4.9.1 Sisteme de s iere n userspace . . . . . . . . . . . . . . . . . , 4.9.2 ZFS, ext4, btrfs . . . . . . . . . . . . . . . . . . . . . . . . . 4.10 Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.1 Comenzi pentru lucrul cu s , iere n Windows . . . . . . . . . . a comenzilor pe s 4.10.2 Utilizarea n sigurant . . . . . . . . . ,a , iere 4.10.3 Montarea unui sistem de s , iere FAT32 astfel nct tot , i utilizatorii aiba drept de scriere pe el . . . . . . . . . . . . . . . . . . sa 4.10.4 Montarea unui sistem de s , iere FAT32 astfel nct utilizatorii dintr-un anumit grup sa aiba drept de scriere pe acesta . . . . 4.10.5 Sistem de s , iere ntr-un s , ier . . . . . . . . . . . . . . . . . . 4.10.6 ntfs-3g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Procese 5.1 Not . . . . . . . . . . . . . . . . . . . . . . . . , iuni introductive 5.1.1 Ce este un proces? . . . . . . . . . . . . . . . . . . . 5.1.2 Deosebirea dintre un proces s . . . . . . , i un program 5.1.3 Structura unui proces . . . . . . . . . . . . . . . . . . 5.1.4 Starile unui proces. Multiprogramare s , i multiprocesare 5.2 Ierarhia de procese n Unix. Vizualizarea proceselor sistemului 5.2.1 Utilitarul ps . . . . . . . . . . . . . . . . . . . . . . . . 5.2.2 Utilitarul pstree . . . . . . . . . . . . . . . . . . . . . . 5.2.3 Utilitarul pgrep . . . . . . . . . . . . . . . . . . . . . . 5.2.4 Utilitarul top . . . . . . . . . . . . . . . . . . . . . . . 5.2.5 Timpul de execut , ie al unui proces. Comanda time . . . 5.2.6 Sistemul de s , 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

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

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

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

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

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

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

vi 6

INTRODUCERE N SISTEME DE OPERARE Pornirea s , i init , ializarea sistemului 6.1 Pornirea sistemului . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Problematica pornirii sistemului bootstrapping . . . . . . 6.1.2 Etapele pornirii sistemului . . . . . . . . . . . . . . . . . . 6.1.3 BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.4 POST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 Dispozitive boot-abile . . . . . . . . . . . . . . . . . . . . 6.2.2 Structura sectorului de boot pentru un dispozitiv boot-abil . 6.2.3 Mecanismul de funct . . . . . . . , ionare a unui bootloader 6.2.4 GRUB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Congurarea GRUB . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4 ncarcarea nucleului . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.1 Imaginea de nucleu . . . . . . . . . . . . . . . . . . . . . 6.4.2 Opt . . . . . . . . . . . . . , iuni de boot-are pentru nucleu 6.5 Init , ializarea sistemului . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.1 init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.2 upstart . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.3 getty s , i login . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.4 Sesiune de shell . . . . . . . . . . . . . . . . . . . . . . . 6.6 Studiu de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6.1 Grub 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6.2 Pornirea sistemului de operare Windows XP . . . . . . . . 6.6.3 Interoperabilitate Linux-Windows . . . . . . . . . . . . . . 6.6.4 Personalizarea ecranului GRUB . . . . . . . . . . . . . . 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

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

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

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

Analiza hardware a sistemului 7.1 Structura unui sistem de operare . . . . . . . . . . . . . . . . . . . . . 7.2 Considerente hardware . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.1 Structura unui sistem de calcul . . . . . . . . . . . . . . . . . 7.2.2 Procesorul . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.3 Ierarhia de memorie . . . . . . . . . . . . . . . . . . . . . . . interconectarea componentelor . . . . . . . . 7.2.4 Placa de baza; 7.2.5 Dispozitive periferice; magistrale . . . . . . . . . . . . . . . . 7.3 Suportul pentru dispozitive la nivelul kernel-ului . . . . . . . . . . . . . 7.3.1 Listarea modulelor ncarcate la un moment dat n sistem . . . 7.3.2 ncarcarea unui modul . . . . . . . . . . . . . . . . . . . . . . 7.3.3 Descarcarea unui modul din kernel . . . . . . . . . . . . . . . 7.4 Analiza hardware a unui sistem (magistrale, chipset, CPU, memorie, dispozitive) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.1 Lista hardware /sys . . . . . . . . . . . . . . . . . . . . . . 7.4.2 Comenzi pentru as , 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 . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

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

vii 206 208 208 210 211 211 212 212

7.7

7.8

. 213 217 217 218 219 219 220 220 222 223 225

de ret Congurari , ea 8.1 Concepte de ret . . . . . . . . . . . . . . . . . . . . . . . . . . . . , ea . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.1 Not iuni de baz a , 8.1.2 IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.3 Moduri de adresare: adresare unicast, multicast, broadcast . 8.2 Parametri de ret . . . . . . . . . . . . . . . . . . . . . . . . . . . . , ea IP s de ret 8.2.1 Adresa . . . . . . . . . . . . . . . . . . , i masca , ea 8.2.2 Ruter implicit (default gateway) . . . . . . . . . . . . . . . . . 8.2.3 DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . temporare . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3 Congurari permanente s 8.3.1 Interfet Congurari , e de ret , ea. , i congurari temporare . . . . . . . . . . . . . . . . . . . . . . . . . . . . statica a unei adrese IP pe o interfat 8.3.2 Congurarea temporara ,a , ii la Internet. Congurarea temporara 8.3.3 Asigurarea conectivitat a unei rute implicite . . . . . . . . . . . . . . . . . . . statica permanente . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4 Congurari a unei interfet 8.4.1 Congurarea permanenta . . . . . . , e de ret , ea statica a unei rute implicite . . . . . 8.4.2 Congurarea permanenta 8.4.3 DHCP. Congurarea unei interfet . . . . . . , e n mod automat 8.4.4 DNS. Congurarea serverelor de DNS . . . . . . . . . . . . . 8.4.5 Aliasuri. /etc/hosts . . . . . . . . . . . . . . . . . . . . . . . . 8.4.6 Congurarea numelui stat , iei curente . . . . . . . . . . . . . . 8.5 Testarea congurat iilor de ret ea . . . . . . . . . . . . . . . . . . . . . , , 8.5.1 Ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5.2 Traceroute . . . . . . . . . . . . . . . . . . . . . . . . . . . . problemele uzuale n cazul congurarilor 8.5.3 Cum se depisteaza de ret . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , ea 8.6 Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a parametrilor de ret 8.6.1 Vericarea n linie de comanda , ea n Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . de ret 8.6.2 Congurari , ea n Windows Vista . . . . . . . . . . . . . 8.6.3 Congurarea PPPoE n Linux . . . . . . . . . . . . . . . . . . Servicii de ret , ea 9.1 Concepte specice aplicat . . . . , iilor de ret , ea 9.1.1 Stiva TCP/IP . . . . . . . . . . . . . . a stivei TCP/IP 9.1.2 Implementarea part , iala 9.1.3 Modelul client-server . . . . . . . . . 9.1.4 Porturi . . . . . . . . . . . . . . . . .

. . . . . . . . .

. 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 9.2

INTRODUCERE N SISTEME DE OPERARE . . . . . Execut , ia comenzilor la distant ,a 9.2.1 Telnet . . . . . . . . . . . . . . 9.2.2 SSH . . . . . . . . . . . . . . 9.2.3 Utilitarul wget . . . . . . . . . . . . . . . . . Email Pos , ta electronica s 9.3.1 Arhitectura . . . , i funct , ionare 9.3.2 Client . . . . . . . . , i de email 9.3.3 Securitatea serviciului de email WWW . . . . . . . . . . . . . . . . . . ale WWW 9.4.1 Tehnologiile de baza 9.4.2 Funct , ionarea serviciului . . . . 9.4.3 Servere Web . . . . . . . . . . 9.4.4 Client . . . . . . . . . . , ii Web Studii de caz . . . . . . . . . . . . . . . 9.5.1 Utilitarul cURL . . . . . . . . . 9.5.2 FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 257 258 262 263 264 266 267 268 269 272 272 273 273 273 274 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

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 s . , 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 s . . . , iere n NTFS 10.6.2 Recuperarea parolei . . . . . . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

CUPRINS 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 Makele . . . . . . . . . . . . . . . . . 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 Makele . . . . . . . . . . . . . . . . . . . Makele . . . . . . . . . . . . . . . . . . . . . 11.5.7 Sintaxa 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++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ix 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

11.3

11.4

11.5

11.6

11.7

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 . . . . . . . . . . . . . . . . . . . . . . .

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

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

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

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

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

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

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

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

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

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

INTRODUCERE N SISTEME DE OPERARE 12.5.1 cat, tac, nl . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.2 sort, uniq . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.3 head, tail . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.4 cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.5 tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.6 wc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.7 grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.8 sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.9 awk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.6 Comenzi de lucru cu s , iere . . . . . . . . . . . . . . . . . . . . . . 12.6.1 xargs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.6.2 locate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.6.3 nd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.7 Expandarea n shell . . . . . . . . . . . . . . . . . . . . . . . . . . 12.7.1 Simbolul $ . . . . . . . . . . . . . . . . . . . . . . . . . . 12.7.2 Expresii regulate n shell . . . . . . . . . . . . . . . . . . 12.8 Parametrii unui script shell . . . . . . . . . . . . . . . . . . . . . . 12.8.1 Comanda shift . . . . . . . . . . . . . . . . . . . . . . . . 12.8.2 Parametri speciali . . . . . . . . . . . . . . . . . . . . . . 12.8.3 Exemplu de utilizare a parametrilor . . . . . . . . . . . . . 12.9 Funct , ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.9.1 Sintaxa unei funct . . . . . . . . . . . . . . . . . . . . . , ii 12.9.2 Parametrii unei funct , ii . . . . . . . . . . . . . . . . . . . . 12.10 Scripturile de pornire Bash . . . . . . . . . . . . . . . . . . . . . . 12.10.1 Variabile de mediu . . . . . . . . . . . . . . . . . . . . . . 12.11 Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.11.1 Contorizarea numarului de utilizatori autenticat , i n sistem 12.11.2 Schimbarea promptului shell . . . . . . . . . . . . . . . . 12.11.3 Batch scripting n Windows . . . . . . . . . . . . . . . . . 12.11.4 PowerShell pe Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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

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

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

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

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

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

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

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

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

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

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

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

CUPRINS 13.5.7 Monitorizarea sistemului s , i managementul proceselor 13.5.8 Gestiunea pachetelor . . . . . . . . . . . . . . . . . 13.6 Servicii desktop . . . . . . . . . . . . . . . . . . . . . . . . . a aplicat 13.6.1 Pornirea facila . . . . . . . . . . . . . . , iilor 13.6.2 Cautarea s ierelor n sistem . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . 13.6.3 Noticari 13.7 Aplicat . . . . . . . . . . . . . . . . . . . , ii KDE vs. GNOME 13.8 Studii de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.8.1 Congurarea X peste SSH . . . . . . . . . . . . . . 13.8.2 Instalarea s , i congurarea 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

14 Utilitare pentru dezvoltare 14.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2 Coding style (indent, astyle) . . . . . . . . . . . . . . . . . . . . 14.3 Editorul Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4 Sisteme de control al versiunii . . . . . . . . . . . . . . . . . . . 14.4.1 Principii . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4.2 Subversion . . . . . . . . . . . . . . . . . . . . . . . . . 14.4.3 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.5 Analiza s , i parcurgerea codului . . . . . . . . . . . . . . . . . . . 14.5.1 ctags . . . . . . . . . . . . . . . . . . . . . . . . . . . . a codului splint . . . . . . . . . . . . . 14.5.2 Analiza statica 14.6 Automatizarea compilarii . . . . . . . . . . . . . . . . . . . . . . 14.6.1 Compilarea unei aplicat , ii din surse . . . . . . . . . . . . 14.7 Execut ia unui program . . . . . . . . . . . . . . . . . . . . . . . , 14.7.1 Zonele de memorie ale unui executabil s . . . . , i proces 14.7.2 Utilizarea bibliotecilor partajate . . . . . . . . . . . . . . 14.7.3 Analiza apelurilor de sistem s , i a semnalelor . . . . . . . 14.8 Depanarea unui program . . . . . . . . . . . . . . . . . . . . . . 14.8.1 gdb, ddd . . . . . . . . . . . . . . . . . . . . . . . . . . 14.8.2 valgrind . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.9 Medii integrate de dezvoltare . . . . . . . . . . . . . . . . . . . . 14.9.1 Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.9.2 Anjuta . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.10 Managementul proiectelor software . . . . . . . . . . . . . . . . 14.10.1 Procese de dezvoltare software . . . . . . . . . . . . . . 14.10.2 Aplicat , ii web pentru managementul proiectelor software 14.10.3 Resurse online pentru dezvoltarea proiectelor . . . . . . 14.11 Resurse de documentare pentru dezvoltator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.11.1 Documentat , ie ociala 14.11.2 Documentarea programelor proprii . . . . . . . . . . . . ,i s 14.11.3 Cart . . . . . . . . . . . . . . . . . . . . . . , i tutoriale 14.11.4 Documentat , ie din Internet . . . . . . . . . . . . . . . . . 14.12 Studiu de caz . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.12.1 Microsoft Visual Studio . . . . . . . . . . . . . . . . . .

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

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

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

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

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

xii 15.3 15.4 15.5 15.6 15.7 15.8 15.9 A Scrierea unui CD/DVD n Linux Messenger n Linux . . . . . . BitTorrent n Linux . . . . . . . Imprimanta n Linux . . . . . . Jocuri n Linux . . . . . . . . . Dual-monitor n Linux . . . . . Documente ofce n Linux . .

INTRODUCERE N SISTEME DE OPERARE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 511 512 514 515 516 518 521 529 531

Raspunsuri la ntrebari

Bibliograe Glosar

Abrevieri
ACL Access Control List ACPI Advanced Conguration 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 Conguration 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 Identier GNU GNUs Not Unix GNU CPP GNU C preprocessor GUI Graphical User Interface HDD hard disk drive HTML Hypertext Markup Language HTTP Hypertext Transfer Protocol ICH I/O Controller Hub ICMP Internet Control Message Protocol IDE Integrated Development Environment IDS Intrusion Detection System IMAP Internet Mail Access Protocol IP Internet Protocol IRC Internet Relay Chat IRQ interrupt request ISP Internet Service Provider xiii

xiv

INTRODUCERE N SISTEME DE OPERARE

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

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

din acest capitol? Ce se nvat ,a

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

1.1

Ce este un sistem de operare?

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

INTRODUCERE N SISTEME DE OPERARE

asigure stabilitate s Scopul unui SO este sa , i exibilitate n funct , ionarea calculatorului. Sistemele de operare permit, n general, interact , iunea cu mai mult , i utilizatori, rularea mai multor aplicat ii, s i modicarea strategiilor de r aspuns ale calculatorului la o anumita , , problema.

Figura 1.1: Rolul unui sistem de operare n gura 1.1 este prezentat rolul de mediere al sistemului de operare ntre utilizatori s ,i hardware. Sistemul de operare va avea acces direct la resursele hardware, n vreme ce prin intermediul bibliotecilor sau utilizatorii folosesc cel mai adesea aplicat , ii ce apeleaza direct funct , ii ale sistemului de operare. a sistemului de operare o reprezinta nucleul sau kernelul. Componenta esent , iala Acesta are rolul de gestiune a resurselor zice s , i de oferire a unei interfet , e comune aplicat iilor. Nucleul nu este o aplicat ie n sine, ci este un mediu n cadrul caruia pot , , rula alte aplicat , ii. sunt aplicat Programele de baza , iile fundamentale ale unui sistem de operare care permit interact iunea cu nucleul s i , , cu sistemul zic. Astfel de aplicat , ii sunt interpretoarele de comenzi, utilitare de gestiune a utilizatorilor s ,i a sistemului de s iere, biblioteci etc. n general nu este bine conturat a denit ia de aplicat , , , ie se considera ca o aplicat atunci cnd ofera servicii de baza; , ie este o aplicat , ie de baza parte din celelalte componente ale sistemului. pentru o buna 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. sunt acele aplicat Programele de baza ii ce permit utilizatorului interact iunea cu resursele , , relat hardware ale sistemului, aceasta ie ind ilustrat a n gura 1.1. , Comparativ, un calculator poate privit ca un aeroport, iar sistemul de operare ca turnul tracul. Resursele aeroportului sunt reprezentate de de control care coordoneaza a un turn de control care sa pistele s Far , i avioanele pe care le pune la dispozit , ie. asigure gestiunea s i organizarea acestor resurse, pe un aeroport nu s-ar putea evita ,

CAPITOLUL 1. INTRODUCERE

ntrzierile s , i coliziunile. n cazul calculatoarelor, rolul unui sistem de operare este de a coordona tracul s , i accesul la resurse, ntocmai precum turnul de control al unui aeroport.

1.1.1

Funct , iile unui sistem de operare

funct n administrarea resurselor O prima , ie a unui sistem de operare consta hardware ale sistemului. n cazul unui calculator, este vorba mai ales despre accesul la procesor, memorie, hard-disk, comunicarea n ret , ea, precum s , i cu alte dispozitivele de intrare/ies Aceste resurse pot solicitate de aplicat , ire. , ii multiple s , i de utilizatori multipli. o aplicat resurse (s Sistemul de operare este la rndul sau , ie, care necesita , i, implicit, accesul la acestea) pentru a funct iona. Prin urmare, acesta trebuie s a s i asigure accesul , , ment controlul asupra calculatorului s privilegiat la resurse. Un SO trebuie sa , ina , i sa posibila utilizarea sa predictibila s faca i ct mai ecient a. , o abstractizare a resurselor hardware. Practic SO este o Sistemul de operare ofera simplicata folosita pentru medierea extensie a sistemului zic, oferind o inferfat ,a accesului utilizatorilor s , i aplicat , iilor la resursele hardware. Sistemul de operare este responsabil cu oferirea unui set limitat de informat , ii s , i funct , ii a ceea ce se ntmpla n hardware. de lucru cu hardware-ul, n loc de descrierea exacta dispozitivelor s instant utilizatorilor) o Practic, SO ofera , i aplicat , iilor (s , i, n ultima , a, transparent a fat a de modul de funct ionare a hardware-ului . , , , n ceea ce prives , te comunicarea dintre hardware s , i aplicat , ii, sistemul de operare trebuie creeze o identitate calculatorului, care sa ramn relativ stabila n dialogul acestuia cu sa a au loc upgrade-uri de hardware. Sistemul de operare are deci aplicat , ii diverse, chiar daca , ii s , ii sistemului de calcul. Sistemul de operare rolul de asigurare a securitat , i integritat va controla accesul utilizatorilor s i proceselor la resursele hardware ale sistemului s , , i va preveni execut , ia de instruct , iuni invalide, malit , ioase sau privilegiate. ruleze pe sisteme zice Sistemul de operare este s , i cel care permite unei aplicat , ii sa raspunsurile accesul diferite, deoarece uniformizeaza date de calculator s , i intermediaza poata interact la resurse. Sistemele de operare trebuie prin urmare sa iona cu arhitecturi , accesul aplicat hardware s , i cu periferice foarte diverse, el ind cel care faciliteaza , iilor funct la oferirea la resursele hardware. Aceasta , ie se numes , te portabilitate s , i se refera unei interfet e unice pentru utilizator, indiferent de diferent ele hardware dintre arhitecturi. , , Un SO foloses , te drivere pentru comunicarea cu dispozitivele periferice. Driverele sunt programe care traduc comenzile sistemului de operare n comenzi inteligibile echipamentelor, precum s ies acestora n mesaje accesibile ,i , irea sistemului. Rolul SO a fost extins prin punerea la dispozit , ia aplicat , iilor a unei colect , ii de biblioteci (funct , ii) pe care programele le pot folosi pentru a rezolva probleme specice legate de interact , iunea cu componentele calculatorului. Sistemul de operare va include utilitare de diagnosticare s , i monitorizare a funct , ionarii diferitelor componente att hardware ct s i software. Un sistem de operare poate, ,

INTRODUCERE N SISTEME DE OPERARE

es desigur, sa , ueze n realizarea funct , iilor sale. De exemplu, un tip foarte frecvent de eroare consta n blocarea funct , ionarii calculatorului. Un astfel de crash poate cauzat de unele imperfect iuni ale sistemului, dar poate favorizat s , , i de funct , ionarea la necorespunzatoare a anumitor aplicat , ii. Un al doilea tip frecvent de eroare se refera problemele de securitate, care pot permite intruziunea unui utilizator sau a unei aplicat , ii nu reus sa malit , ioase. De asemenea, este posibil ca un sistem de operare sa , easca interact , ioneze corect cu anumite periferice sau echipamente. n principal, funct , ionarea a unui sistem de operare poate pastrat prin realizarea metodica a unui corecta a limitat de operat numar , ii:

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

1.1.2

Tipuri de sisteme de operare

diverse criterii de clasicare a sistemelor de operare. Clasicarea de mai jos este Exista t s realizata , innd cont de sistemele zice pe care ruleaza , i domeniul de utilizare. Sistemele de operare de pe smart carduri sunt cele mai simple, servind deseori funct , ii , ilor de debit) s reduse (precum n cazul cart , i administrnd resurse foarte limitate. Totus , i, un management de baza al acestor resurse, inclusiv a spat ele ofera 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 specice funct , ionalitat de la sisteme dedicate unui singur scop, operare pentru dispozitivele embedded variaza o interfat de interact la sisteme multitasking care nu ofera ,a , iune utilizatorului, pna multe dintre (precum n cazul sistemelor de operare pentru PDA) care ofera , 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 , ice, industriale s , i de precizie. Scopul principal al acestora este sa asigure predictibilitatea optimizeze utilizarea resurselor echipamentelor s sa ,i funct ion arii lor, dat ind c a es ecurile n coordonarea subcomponentelor pot avea , , consecint , e dezastruoase. esent deoarece anumite sarcini trebuie realizate ntr-un Timpul este o variabila , iala, interval precis pentru a se putea coordona cu alte sarcini. Astfel de sisteme de operare permita comunicarea cu utilizatorul, dat ind ca nu este nu sunt n general menite sa e modicate, ele ind concepute strict pentru executarea anumitor procese necesar sa tehnologice. , ite n sisteme n timp real hard, prevalente n procesele industriale, n RTOS pot 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 funct ionalit at i specice sistemelor de operare n timp real soft. , ,

CAPITOLUL 1. INTRODUCERE

numeroase sisteme de operare de timp real. Exemple sunt RTLinux1 , VxWorks2 , Exista 4 TRON3 s , i QNX . Majoritatea sistemelor de operare de timp real sunt folosite n cadrul o linie de demarcat ntre sisteme de operare dispozitivelor embedded. Nu exista , ie clara embedded s Sistemele de operare moderne sunt , i sisteme de operare n timp real. sisteme multi-tasking (permit execut ia simultan a a mai multor sarcini) s , , i multi-user (mai mult , i utilizatori pot folosi n acelas , i timp resursele sistemului). Sistemele multi-user optimizeze funct urmaresc n principal sa , ionarea calculatorului prin echilibrarea sisteme de operare cerint elor utilizatorilor s i izolarea problemelor acestora. Exista , , specializate pentru situat , iile de conectare a calculatoarelor n ret , ea, precum s , i sisteme de operare specializate pentru aplicat iile care ruleaz a pe un server, des i aceste granit , , ,e se estompeze. tind sa categorie sunt incluse sistemele de operare precum cele din familiile Microsoft n aceasta Windows, Unix s , i Apple Mac OS X, ce au ca scop optimizarea folosirii resurselor atunci concomitent mai multe aplicat cnd un utilizator ruleaza , ii sau cnd mai mult , i utilizatori interact ioneaz a cu un calculator n acelas i timp. Aceste sisteme de operare sunt cele , , mai cunoscute de utilizatorii de PC-uri. uzuala pentru obt O practica , inerea unei puteri sporite de procesare o reprezinta instalarea de procesoare multiple ntr-un singur sistem. Pentru managementul ecient exista al acestora s , i pentru a se putea folosi ntreaga putere de procesare disponibila, sisteme de operare pentru arhitecturi multiprocesor special concepute pentru (simultana). Acestea pot variante modicate ale sistemelor de procesarea paralela a operat operare pentru servere, optimizate pentru gestiunea paralela , iilor pe care le executa. cu proliferarea sistemelor de operare multi-core, majoritatea sistemelor de O data operare contemporane pot folosite att pe arhitecturi monoprocesor, ct s , i pe cele multiprocesor. Sisteme de operare precum Windows Vista, Windows 7, distribut , iile suport pentru sisteme multiprocesor. Linux bazate pe kernel 2.6 s , i Mac OS X ofera

1.1.3

Funct , ionarea sistemelor de operare

Un sistem de operare este responsabil de realizarea mai multor sarcini. , ile principale sunt: Responsabilitat

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

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

INTRODUCERE N SISTEME DE OPERARE

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

init, ializarea s , i oprirea proceselor, inclusiv comunicarea ntre procese; organizarea aplicat, iilor disponibile pe calculator; organizarea s , ierelor n directoare; vizualizarea s , i editarea s , ierelor, precum s , i redenumirea, copierea sau s , tergerea
s , ierelor.

Administrarea procesorului optimizarea accesului diferitelor unitat , i software la Administrarea procesorului vizeaza resursele procesorului; practic, acest lucru se traduce n alocarea de cuante de timp pentru rularea unei aplicat , ii pe un procesor. des Este important de observat ca, , i sistemele de operare multi-tasking permit prin funct ionarea simultan a a mai multor aplicat , , ii, aceasta este de fapt simulata de la o aplicat doar facilitat ,i comutarea foarte rapida , ie la alta a unui procesor care ofera single-tasking. Execut , ia simultana n adevaratul sens al cuvntului are loc numai pe arhitecturi multiprocesor, unde ecare procesor la un moment dat executa un proces. e capabil de a raspunde Prin urmare, este esent la , ial ca sistemul de operare sa solicitarile diferitelor aplicat ii. De asemenea, sistemul de operare trebuie s a minimizeze , proport , ia de timp n care procesorul este utilizat pentru execut , ia sarcinilor de ntret , inere, etc, n favoarea timpului alocat cerint de comunicare interna , elor directe ale utilizatorului. cu care lucreaza un sistem de operare (mai exact, elementele care Elementele de baza folosesc procesorul) nu sunt aplicat , iile, ci procesele s , i rele de execut , ie (threads). o act Un proces (vezi capitolul 5) este un program care executa , iune s , i este controlat de , i un utilizator, de o aplicat , ie sau de sistemul de operare. O aplicat , ie poate ea nsas proces dar poate s , i init , iatoarea altor procese pentru a comunica cu alte calculatoare numeroase procese pentru a sau cu alte aplicat ii. Sistemele de operare init , , iaza administra resursele calculatorului, n majoritatea cazurilor, utilizatorii nu sunt cons , tient ,i de acest lucru.

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

CAPITOLUL 1. INTRODUCERE Administrarea perifericelor

prin intermediul driverelor. Administrarea perifericelor s , i a echipamentelor este realizata Acestea sunt programe relativ autonome de sistemul de operare, ind deseori furnizate de producatorul echipamentelor s , i instalate separat. Ele permit sistemului de operare comunice cu echipamente noi far a sa e modicat. Comunicarea cu mediul este sa de spat intermediata , ii tampon (buffere), n care datele de intrare sunt acumulate urmnd e transmise procesorului n ritmul accesibil acestuia, evitnd congestia atunci cnd sa multitudinii de aplicat apare o aglomerare datorita , ii.

Interfat , a cu utilizatorul s , i aplicat , iile Graphical User Interface subcomponente: Funct , ia de mediere a sistemului de operare are doua

interfat, a cu aplicat, iile (API Application Programming Interface) permite aplicat, iilor
acceseze facil resursele hardware ale sistemului far a a controla toate detaliile sa tehnice ale aplicat iilor; , sa comunice cu calculatorul, e interfat, a cu utilizatorul permite acestuia din urma graca (GUI prin comenzi text (TUI Text User Interface) sau printr-o interfat ,a Graphical User Interface).

1.2

Scurt istoric al sistemelor de operare

Sistemele de operare pentru PC-urile actuale sunt nu numai rezultatul unei evolut , ii graduale, ci s , i al unei schimbari conceptuale. Daca n urma cu 30 de ani sistemele de , i limitate, n zilele noastre sistemul de operare este operare dispuneau de funct , ionalitat s acompaniat de interfat , a graca , i de aplicat , ii diverse cu scopul de a 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 distinse patru mari n legatur a strnsa cu perioade, denumite s Aceste generat , i generat , ii. , ii se aa dezvoltarea sistemelor zice s i a limbajelor de programare. ,

1.2.1

Prima generat , ie

care s-a desfas , urat n mare ntre anii 1945 s prima n prima perioada, , i 1955, se dezvolta tehnologia tuburilor vidate. O inovat generat , ie de calculatoare, avnd la baza , ie majora este introducerea cartelelor perforate, ca modalitate de stocare a informat iei. n aceast a , nu exista niciun sistem de operare s etapa limbaje de programare; utilizatorul , i nici macar cu hardware-ul. nal este responsabil pentru interact , iunea directa

INTRODUCERE N SISTEME DE OPERARE

1.2.2

A doua generat , ie

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

1.2.3

A treia generat , ie

pe circuitele integrate, apare n perioada 1965A treia generat , ie de calculatoare, bazata 1980. Unul dintre cele mai importante inovat , ii al acestei perioada este principiul utilizarii n comun a timpului de procesor (timesharing). Conform acestui principiu, mai mult ,i utilizatori pot folosi simultan terminale conectate la acelas , i calculator. n care n timesharing ecare utilizator primes , te alternativ o fract , iune de timp, perioada instruct ecient timpii mort procesorul executa , iunile acestuia. Astfel se valorica , i datorat ,i de cea a procesorului, reducnd substant vitezei scazute de act , iune a oamenilor fat ,a , 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 n folosirea limajului de ansamblare. de caracteristicile hardware, inerenta Unix a fost primul sistem de operare scris ntr-un limbaj de nivel superior, devenind astfel nevoii de standardizare a multiplelor portabil de la un tip de calculator la altul. Datorita IEEE variante de sisteme Unix care au aparut apoi independent pe baza codului sursa, a elaborat standardul POSIX. Ulterior, Linus Torvalds a scris Linux. rma Intel, specializata n microprocesoare. CP/M (Control n 1968 a fost creata 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

1980, pna n prezent, se poate vorbi despre a patra generat Dupa , ie de calculatoare, reprezentate de aparit ia s i expansiunea extraordinar a a calculatoarelor personale. , , tehnologia microprocesoarelor. Product , ia acestora are la baza Bill Gates a cumparat sistemul de operare DOS (Disk Operating System) s , i l-a adaptat pe piat datorita cerint , elor IBM crend MS-DOS. Sistemul a cs , tigat o pozit , ie dominanta ,a deciziei lui Gates de a-l direct companiile producatoare de hardware, n special , iona catre IBM. n 1981 au aparut primele calculatoare personale IBM, costnd 2880 USD, incluznd 64 KB de memorie s i un oppy disk. Piat s , , a a crescut rapid, n scurt timp aparnd , i alte dat ind ca IBM a decis sa o faca publica. modele care foloseau aceeas , i arhitectura, Vasta majoritate a acestor calculatoare rulau sub MS-DOS. pentru utilizatori GUI, care a fost apoi Doug Engelbart a realizat interfat , a graca n echipamentele construite de Xerox PARC. Steve Jobs, co-inventatorul ncoporata calculatorului Apple, a transformat GUI ntr-un succes comercial remarcabil prin lansarea Apple Macintosh n 1984 (dotat cu mouse) s , i direct , ionarea acestuia catre utilizatorii cu cunos , tint , e sau aptitudini tehnice minimale. Succesul lui Macintosh a inspirat Microsoft n elaborarea Windows, conceput init , ial ca o graca peste MS-DOS. n 1995 a aparut de Windows, interfat prima versiune autonoma ,a de Windows, s-a impus urmnd apoi Windows 98. Windows NT, o versiune complet noua ,i treptat pe piat , a utilizatorilor corporativi, ind orientat spre servere s , i oferind posibilitat avansate de administrare. A fost urmat de Windows 2000 s , i Windows 2003 Server. n 2001 arhitectura NT a migrat catre utilizatorii individuali prin lansarea lui Windows XP. Prin Windows Vista, s acestor orientari , i actualmente Windows 7, se dores , te pastrarea simultane att spre partea de server ct s i spre partea de utilizator. , anii 90, sistemele Unix (n special Linux) ncep sa cs Dupa , tige teren, preponderent pe piat , a sistemelor server, iar apoi piat , a sistemelor desktop. La sfrs , itul anilor 80, la MIT a interfat de versiuni aparut o prima a grac a pentru sistemele Unix X Windows, urmata , mai complexe.

1.3

Sisteme de operare moderne

mai multe criterii de clasicare, doar anumite tipuri de sisteme de operare vor Des , i exista pentru utilizator obis avea relevant ,a , nuit al unui calculator, e el s , i unul cu prol tehnic. Un criteriu pragmatic, care t sistemelor de operare actuale, conduce , ine cont de raspndirea la clasicarea sistemelor de operare n:

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


s , i laptop-urilor;

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


Internet pentru a oferi servicii;

sisteme de operare pentru dispozitive mobile, destinate telefoanelor mobile,


smartphone-urilor sau dispozitivelor de tip PDA sau Palm.

10

INTRODUCERE N SISTEME DE OPERARE

1.3.1

Sisteme de operare desktop s , i server

n ultimele decenii de sistemele de Piat , a sistemelor de operare desktop este dominata de circa 93% operare din familia Windows1 . n prezent, familia Windows det , ine o cota din piat , a sistemelor desktop. Mac OS X det , ine circa 4.5%-5%, iar Linux n jur de 1%. n principal pe arhitecturi PC (x86 sau x86_64). Toate aceste sisteme de operare ruleaza Des i cu o cot a pe piat a foarte mic a raportat cu familia Windows, Mac OS X s , , , i Linux au cs , tigat procente importante pe piat , a. un utilizator poate opta ntre mai multe sisteme de operare, apar ntrebari T , innd cont ca arile res s , ti legate de aseman , i deosebirile dintre ele, care sunt punctele tari s , i punctele instant care dintre ele este cel mai bun. n realitate slabe ale ecaruia s , i, n ultima , a, a compara aceste cele trei clase de sisteme este un lucru foarte dicil, date ind nsa, unul diferent , ele fundamentale de concept s , i realizare, iar mai mult, a trage concluzia ca dintre sisteme este implicit mai bun sau mai slab decat celalalt este imposibil. performant Toate cele trei familii de sisteme de operare ofera , e avansate, un mediu stabil de operare s , i au un domeniu foarte bogat de aplicat , ii disponibile s , i concepute special lozoile din spatele manierei n care sistemele au fost pentru acestea. Dar pentru ca depinde n mare masur a de scopul proiectate s , i au evoluat sunt diferite, concluzia nala n care sistemul va folosit, gradul de pregatire al utilizatorilor, congurat ia hardware s , ,i mult , i alt , i factori subiectivi. variante att pentru Sistemele de operare din familia Windows s , i Unix/Linux ofera sisteme desktop ct s i pentru sisteme server. Astfel, Windows XP, Windows Vista, , Windows 7 sunt versiuni desktop ale sistemului de operare de la Microsoft, n vreme ce Windows Server 2003, Windows Server 2008 sunt versiuni dedicate pentru sisteme un sistem putnd congurat server. n lunea Unix/Linux diferent , a este mai put , in clara, pentru a funct , iona att ca server ct s , i ca desktop. Anumite distribut , ii Linux sunt, nsa dedicate pentru sisteme desktop (Ubuntu, Fedora, openSUSE, Mint, PCLinuxOS) sau pentru sisteme server (Ubuntu Server, RedHat Enterprise Linux, SUSE Linux Enterprise). Alte sisteme de operare din familia Unix (OpenSolaris, FreeBSD, NetBSD, Mac OS OpenBSD) pot folosite s , i ca sistem desktop s , i ca sistem server. Apple ofera X ca sistem desktop s , i Mac OS X Server ca sistem server.

Windows vs. Linux Un subiect care strnes , te mult interes s , i dezbateri este diferent , a dintre Windows s ,i diferent este una de ordin semantic. Linux. De multe ori aceasta ,a un produs bine delimitat, avnd asociate nis Microsoft Windows desemneaza , te specicat ii, pe baza c arora exist a un pret pe piat a. , , , parte, Linux nu reprezinta un produs bine denit, termenul avnd mai multe De cealalta nt elesuri. Tehnic vorbind, Linux este numele nucleului (kernel-ului) sistemului de , nregistrata a lui Linus Torvalds, init operare. Ca fapt divers, Linux este o marca , iatorului proiectului nucleul Linux. n prezent, proiectul este nca sub coordonarea lui Linus Torvalds. Nucleul nu depinde de restul sistemului, as , a cum nici restul pachetelor care compun sistemul nu depind n mod necesar de kernel, cu unele except , ii notabile.
1

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

CAPITOLUL 1. INTRODUCERE

11

e construite pe serie comuna Cu toate acestea, majoritatea sistemelor au ajuns sa 1 de pachete, bazata pe proiectul GNU , ntreg sistemul ind pus laolalta n ceea ce se o distribut cu nucleul Linux, de ntret cheama , ie: o colect , ie de pachete, mpreuna , inerea o anumita organizat s , i actualizarea careia se ocupa , ie sau comunitate. Astfel, printr-un abuz de limbaj unanim acceptat, aceste clase de sisteme de operare ind legatura cu nucleul sunt denumite distribut puternica , ii Linux (sau GNU/Linux), data s ntruct Linux este numele nucleului , i pachetele de baza construite peste acesta. 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 ntr us un mediu grac interactiv, care sa , ureze munca utilizatorului de a lucra cu sistemul. larga au fost Windows 3.0 s Primele versiuni folosite pe scara , i Windows 3.1. Un punct important l-a constituit lansarea Windows 95 n 1995. Cu o interfat , a intuitiva suita bogata de aplicat s , i prietenoasa, , ii preinstalate, suportul tehnic dedicat, Microsoft pentru sistemul a promovat Windows 95 s i edit iile ulterioare ca ind alegerea ideala , , desktop de uz personal sau pentru birou. Acest atu a fost pastrat s progrese , i la edit , iile ulterioare de Windows, unde s-au facut semnicative n direct un , ia performant , elor: sistemul s-a desprins de MS-DOS, capatnd a devenit kernel modern, cu suport de multitasking s , i mai mult , i utilizatori, interfat , a graca s mai bogata i mai atr ag atoare s i, nu n ultimul rnd, necesitatea de cunos tinte tehnice , , , din partea utilizatorilor s-a diminuat de la edit , ie la edit , ie. Edit , iile actuale de Windows sunt construite pe tehnologia NT. Din familia NT fac parte Windows NT, Windows 2000, Windows XP, Windows Vista, Windows 7 s , i versiunile server lansate de Microsoft. Tehnologia NT a nsemnat rescrierea nucleului sistemului , i de integritate de operare s , i obt , inerea unui sistem de operare modern cu funct , ionalitat s , i securitate bine denite. , i, ultima versiune desktop este Windows Vista, iar n momentul scrierii acestei cart ultima versiune server este Windows Server 2008. Pe data de 22 octombrie 2009 este lansarea Windows 7. planicata impresionanta pe piat Cu o cota , a sistemelor de operare, Windows are rolul unui sistem pe sistemele de operare universal. Cea mai mare parte a aplicat , iilor existente ruleaza Windows. Cota mare de piat a a f acut Windows t inta a numeroase atacuri de securitate, , , , ii sistemului la rezultnd n cres , terea eforturilor Microsoft pentru asigurarea integritat ultimele versiuni de Windows.

1.3.3

Mac OS X

o familie de sisteme de operare concepute special pentru Mac OS X reprezinta calculatoarele Macintosh (Mac-uri) produse de rma Apple. Introduse init , ial n 1984,
1

http://www.gnu.org/

12

INTRODUCERE N SISTEME DE OPERARE

pna n sistemele de operare pentru Macintosh au cunoscut o evolut , ie spectaculoasa prezent, ment drept concurent pentru Microsoft Windows att prin , inndu-se performant ele sistemului propriu-zis ct s , , i prin versatilitatea s , i utilitatea aplicat , iilor pe care le det , in. hardware de tip Calculatoarele Macintosh au implementat, de la lansare, o arhitectura Intel, moment n care sistemele de Power PC, migrnd mai apoi catre o arhitectura reprezinte o concurent pentru Windows. operare pentru Mac-uri au nceput sa ,a Sistemul de operare a fost radical schimbat la lansarea versiunii 10.0, prin rescrierea schimbare este reectata s nucleului. Aceasta , i n modicarea denumirii sistemului de trecerea de la operare din Mac OS n Mac OS X. Adaugarea literei X subliniaza din Unix. tehnologia Mac OS nanokernel, la tehnologie derivata de Mac OS X este 10.6, lansata la data de 28 august 2009. n prezent, varianta curenta Prin sistemul de operare s , i prin aplicat , iile care pot rula pe acesta, Mac OS X exceleaza graca s media, aducnd n acelas la capitolul interfat ,a , i n domeniul prelucrarii , i timp inovat , ii orientate spre nevoile utilizatorului individual.

1.3.4

Linux

intrat n lumea sistemelor Una dintre principalele confuzii pentru un utilizator proaspat de denumirile Linux s de operare este cea provocata i Unix. n general, Unix reprezinta , face parte din o familie de sisteme de operare. Un sistem de operare este Unix (adica respecta standardul Single Unix Specication1 . n afara de Linux familia Unix) daca sisteme compatibile cu Single Unix (sau mai bine spus GNU/Linux), alte Unix-uri (adica Specication) sunt Solaris, sistemele de familia BSD (FreeBSD, OpenBSD, NetBSD) s ,i Mac OS X. Sistemul de operare Unix a aparut la nceputul anilor 70, n laboratoarele Bell ale AT&T. Folosirea limbajului C pentru scrierea sistemului de operare a condus la portarea rapida a acestuia s sa n mediul acadamic. Versiunile System V (de la AT&T) s , i raspndirea ,i BSD 4.3 au marcat o serie de avansuri importante n anii 80. de Unix. O clona Unix este un sistem de operare care Linux este de fapt o clona Single Unix Specication, dar care nu cont respecta , ine componente din sursele init , ialte Unix. BSD-urile sau Solaris sunt direct derivate din codul Unix s i pot denumite , Unix-uri veritabile. s-a consolidat Linux a fost scris de la zero de Linus Torvalds n 1991. Treptat, n jurul sau de dezvoltatori, Linux ajungnd n acest moment unul dintre cele o comunitate entuziasta , 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: crearea unui kernel; dezvoltatorii proiectului GNU nu reus , isera libera au cei care urmareau dezvoltarea viitoarelor sisteme BSD sub o licent ,a pierdut ct , iva ani n procese cu cei de la AT&T legate de licent , ierea codului. daca 386BSD ar fost disponibil la acea vreme, probabil ca nu Linus Torvalds a spus ca ar creat Linux.
1

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

CAPITOLUL 1. INTRODUCERE

13

aparit acest Dupa , ia nucleului Linux, o multitudine de proiecte software avnd la baza kernel au fost nint , ate, cu numarul s , i important , a acestora crescnd de la an la an. Spre deosebire de cazul Windows-ului, software-ul pe Linux nu a fost scris neaparat avnd n minte us , urint , a de utilizare s , i accesibilitatea, des , i aceasta este tendint , a din prezent. Un nucleu este doar un mediator ntre aplicat , ii s , i resursele hardware este inutil de , i sau unul singur. Pentru a obt ine un sistem de operare complet, diverse comunitat , companii au combinat utilitarele GNU s Au aparut astfel distribut , i nucleul Linux. , iile GNU/Linux (Ubuntu, Fedora, Gentoo, Debian, Slackware, OpenSuSE, RedHat etc.), utilizatorului funct , i complete pentru operarea sistemului. Din punct care ofera , ionalitat este instalarea unei distribut de vedere strict tehnic, expresia corecta Linux , ii (GNU/Linux), nu instalarea Linux. T innd cont de prevalent a formei distribut ie Linux , nu , , , (vezi vom insista asupra acestui lucru pe parcursul acesi cart , i pe justet , ea exprimarii sect iunea 2.1). , Fiind vorba ndeosebi de mediul academic, majoritatea utilizatorilor aveau cunos , tint ,e avansate de IT s , i apreciau la un sistem stabilitatea, exibilitatea s , i performant , a, mai dect o interfat degraba a simpl a s i intuitiv a. Datorit a acestor puternice avantaje, Linux , , (ca majoritatea sistemelor Unix, de altfel) a avut un succes exploziv pe servere, s ,i a a mult mai mica pe desktop, unde supremat cs , tigat teren ntr-o masur , ia este nca det inut a de c atre sistemele de operare de la Microsoft. n momentul de fat a, o bun a , , pe sisteme rulnd Linux. parte din infrastructura Internet-ului se bazeaza

1.3.5

Alte Unix-uri

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

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

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


1 2

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

14

INTRODUCERE N SISTEME DE OPERARE

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


pentru portarea altor sisteme de operare pe noi arhitecturi.

1.3.6

, i open source Comunitat

dintre Linux s Principala diferent ,a , i multe alte sisteme de operare actuale, mai mult sau att nucleul Linux ct s mai put este faptul ca , in raspndite, , i componentele unui sistem GNU/Linux sunt gratuite. Mai mult dect att, sunt free/open-source. Acest lucru ca o comunitate vasta de utilizatori s nseamna , i ingineri software au acces la ele, at , iri. Acesta practica nu este noua, ci pentru a le utiliza sau a le aduce noi mbunat de la nceputurile Unix la MIT labs, cnd echipele init dateaza , iale de hackeri lucrau n comun pentru dezvoltarea de aplicat , ii Unix. sub care funct Linux, alaturi Conceptul de licent de aplicat ,a , ioneaza , iile sale, a primit oricui dreptul de acces, denumirea de copyleft care, contrar copyright-ului, ofera aceleas distribut ie s i modicare a unei creat ii, atta timp ct p astreaz a , , , , i caracteristici ale copyleft-ului. La polul opus, majoritatea sistemelor de operare ce nu apart , in familiei cele comerciale, se supun n continuare legii copyright-ului Linux s , i, cu preponderent ,a (closed source). s i mpiedic a intervent ia utilizatorilor asupra codului sursa , , , ile open source sunt foarte dinamice, iar, n acest moment, distribut Comunitat , iile de din plin de acest lucru. Pna acum ct Linux beneciaza iva ani, sistemele Linux , necesitau cunos , tint , e avansate de operare, din motive legate de instrumente grace de administrare limitate sau lipsa driverelor din partea producatorilor de hardware. Mai mult, accesul limitat la Internet priva utilizatorul obis nuit de accesul la documentat , , ie n mare parte online), esent pentru ncurajarea utilizatorilor de a (des , i vasta, , iala experimenta cu un nou sistem de operare, n contextul n care nu existau campanii de marketing ca n cazul produselor comerciale. se schimbe ntr-un mod radical n momentul n care Lucrurile au nceput totus , i sa din ce n ce mai accesibila s Internet-ul a devenit o resursa , i o serie de companii au remarcat potent , ialul pe care Linux l avea s ,i s , i-au orientat domeniul de activitate catre acesta. Interesul crescut a ncurajat comunitat , ile sa depuna un efort mai mare pentru a face aplicat iile mai accesibile. , bogata s Robustet , ea s , i performant , ele superioare au fost mbinate cu o interfat ,a ,i o experient a vizual a comparabil a (dac a nu superioar a vezi proiectele Compiz s i Beryl) , , cu cea de pe Windows. Suportul din partea producatorilor de hardware a crescut la cu implicari foarte puternice din partea unor nume ca Novell, Canonical, sau rndul sau, atoare, Dell. Astfel, desktop-ul Linux devine o opt anii urmatori anunt , iune atrag , ndu-se Open Source n mediul desktop. extrem de promit pentru ascensiunea mis , atori , carii totus Exista, programelor open-source din , i, reticent , e cu privire la ncurajarea raspndirii moment ce o astfel de libertate a tuturor utilizatorilor este dicil de controlat s , i poate unicarea pe care o ofera sistemele crea probleme de interoperabilitate. ntr-adevar, compact, impune s de operare comerciale, concepute global s , i, totodata, , i uniformizarea 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. parte, comunitatea de utilizatori ai programelor open-source este n continua Pe de alta

CAPITOLUL 1. INTRODUCERE

15

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

1.3.7

Sisteme de operare pentru dispozitive mobile

cu dezvoltarea hardware-ului s din ce n ce mai mare O data , i a Internet-ului, un numar de dispozitive mobile inteligente s aparit As , i-au facut , ia n posesia utilizatorilor. ,a 4 sisteme de operare cu facilitat , i avansate de numitele smartphone-uri poseda conectare la Internet, navigare pe Web, citire/scriere de e-mail-uri, folosirea unei tastaturi virtuale etc. Exemple de astfel de dispozitive sunt iPhone5 de la Apple, BlackBerry6 , Nokia E717 , HTC8 etc. Cel mai raspndit sistem de operare folosit pe dispozitive mobile n general, s , i pe smartphone-uri n particular este Symbian OS de la Symbian Ltd. Acesta det , ine aproape 50% din piat a sistemelor de operare pentru smartphone-uri. Sistemul cont , , ine o kernel-ul s , i o serie de aplicat , ii utile n lucrul cu telefonul mobil. Symbian OS ofera de dezvoltare (SDK) n C++ pentru scrierea de noi aplicat n 2008, interfat ,a , ii. nint , ata Fundat ia Symbian are ca scop folosirea unei licent e libere pentru ntreg codul , , platformei Symbian. Windows Mobile este sistemul de opearare s , i suita de aplicat , ii pentru dispozitive arate simiar interfet mobile de la Microsoft. Este proiectat sa , ei Windows s , i este folosit n cadrul dispozitivelor Pocket PC. Cota de piat a Windows Mobile a cu preponderent ,a ,a la o valoare circa 9%. scazut constant n ultimii ani pna 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 , , un numar impresionant de aplicat act iPhone OS ofera , ionarea unui eveniment. , ii. 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 cu mari companii de Open Handset Alliance, un consort , iu nint , at de Google mpreuna producatoare de hardware s , i software precum HTC, Intel, Motorala, LG etc. Dezvoltarea n cadrul unei licent acestuia se realizeaza , e libere (cu unele except , ii), lucru care permite de noi aplicat de dezvoltarea relativ facila n aceste momente, Android are o cota , ii.
1 2

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/nd-products/devices/nokia-e71 8 http://www.htc.com/www/product/dream/overview.html

16

INTRODUCERE N SISTEME DE OPERARE

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

1.4
1.4.1

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

un mediu de execut virtuala este o aplicat O mas , ie ce creeaza , ie pentru rularea , ina unui nou sistem de operare, folosind resursele gestionate de sistemul de operare prin intermediul mecanismelor oferite de mas gazda, , ina virtuala. particulara a mas O caracteristica , inii virtuale este capacitatea acesteia de a izola sistemul de operare din interiorul sau de cele ale sistemului de procesele ce ruleaza operare gazda. n cadrul caruia mas se cheama Sistemul de baza, (sau peste care) ruleaza , ina virtuala (host ). Mas sistem gazda ina virtual a 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.

virtuala Figura 1.2: Mas , ina

CAPITOLUL 1. INTRODUCERE

17

aloca part , i din resursele sistemului zic pentru mas n general, sistemul gazda , ina virtuala: un procentaj dedicat din memoria RAM, un spat , iu zic de stocare de pe (alocat n prealabil sau n timp real) pe care mas hard-disk-ul calculatorului gazda , ina l va folosi ca pe un hard-disk propriu, accesul la diferite dispozitive periferice. virtuala Accesul celui de-al doilea sistem de operare la procesor se face prin intermediul ,i proceselor mas de celelalte aplicat , inii virtuale, care vor rula alaturi , ii s , i vor mpart cu cea de emulare1 . aceleas , i resurse. Not , iunea de virtualizare nu trebuie confundata Un emulator traduce ecare instruct , iune din sistemul oaspete n instruct , iuni specice Prin folosirea unui emulator este astfel posibila rularea unui program sistemului gazda. diferita de cea a sistemului gazda. Un sistem virtualizat va folosi n pentru o arhitectura din motive de ecient Rolul hipervizorului proport , ie ct mai mare sistemul zic gazda, , a. este de a intermedia unele operat , ii privilegiate care nu se pot executa direct peste sistemul zic gazda. s Not , iunea de virtualizare este extinsa , i la nivelul aplicat , iilor. Programele Java ruleaza 2 Java este un mediu independent de n cadrul mas , inii virtuale Java . Mas , ina virtuala care permite execut platforma ia n acelas i context a aplicat , , , iilor. Un alt exemplu este 3 folosita de .NET Framework 4 . Valgrind Common Language Runtime , mas , ina virtuala (vezi sect , iunea 14.8.2), folosit pentru depanarea programelor, este, de asemenea, o virtuala la nivelul aplicat mas , ina , iilor.

De ce virtualizare? din anii 70, mas e folosite intens odata cu Dezvoltate nca , inile virtuale au nceput sa dezvoltarea sistemelor hardware. Cres terea capacit at ii de calcul (procesoare , , , ii de stocare (hard-disk-uri) a condus la aparit multi-core, memorie) s , i a capacitat , ia solut , iilor de virtualizare care sa foloseasca ecient resursele hardware puse la 5 dispozit de suport hardware pentru arhitecturile x86 s , ie. Adaugarea , i x86_64 (AMD-V 6 s , i Intel VT ) a condus la accelerarea folosirii solut , iilor de virtualizare att pentru utilizatorul obis nuit ct, mai ales, n mediul business. , Unul din principalele motive pentru folosirea virtualizarii, mai ales n mediul comercial, arii sistemelor zice. n locul folosirii a patru sisteme zice, este consolidarea ncarc ruleze patru mas se poate folosi un singur sistem zic n cadrul caruia sa , ini virtuale, cu efect n diminuarea costurilor de achizit , ie s , i administrare. securizarea aplicat virtuala Un al avantaj importat n reprezinta , ina , iilor. Fiecare mas este un mediu izolat s i sigur (sandbox). O problem a care apare pe o mas in a virtual a , , rapid folosind sistemul gazda. nu va afecta niciun alt sistem s , i va putea diagnosticata 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 e folosite impuse. Se pot congura procentaje de resurse care sa execut , ie cu limitari de mas ina virtualizat a. Se asigur a astfel un control n pentru gestiunea resurselor. ,
1 2

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/

18

INTRODUCERE N SISTEME DE OPERARE

este posibilitatea Pentru utilizatorul obis , nuit, cel mai important avantaj al virtualizarii rularii mai multor sisteme de operare. Sisteme de operare diferite, versiune de sisteme operare diferite, pot rula simultan pe acelas , i sistem. Pornirea s , i repornirea unui la interact a a sistem de operare oaspete se rezuma , iunea cu solut , ia de virtualizare far implica act iuni asupra sistemului zic. , virtuala reprezinta un mediu ideal pentru dezvoltare s Pentru un dezvoltator, o mas , ina , i a aplicat va afecta doar sistemul testare. Orice problema a , iei pe care o dezvolta/testeaz de operare oaspete. Dezvoltarea la nivelul nucleului (kernel programming) se realizeaza, n general, folosind mas , ini virtuale. Scenarii complexe de monitorizare a performant , ei sau depanare pot implementate pe o mas in a virtual a f ar a pierderea productivit at ii. , , virtuala Un avantaj al folosirii mas , inilor virtuale este mobilitatea acestora. O mas , ina a ca un set de s este, de obicei, vazut , iere. Mutarea acestora pe un alt sistem de calcul este echivalent cu migrarea mas inii virtuale pe acel sistem. Sistemul de operare din , migrarea cadrul mas , inii virtuale va rula n acelas , i mod pe un nou sistem. Este posibila 1 unei mas , ini virtuale n timp ce aceasta ruleaza, tehnica denumita Live Migration .

Exemple de mas , ini virtuale cu proliferarea tehnologiilor de virtualizare, ultimul deceniu a nsemnat aparit O data , ia mai multor companii s i solut ii. Printre cele mai cunoscute solut ii de virtualizare actuale , , , sunt VMware, VirtualBox, VirtualPC, Xen, KVM, OpenVZ. Aceste solut , ii de virtualizare ruleaza, n general, pe arhitecturi x86 sau x86_64. care produce mai multe aplicat VMware, Inc.2 este o companie americana , ii de virtualizare. Cele mai cunoscute sunt VMware Workstation, VMware Player, VMware Server s , i VMware ESX. VMware Workstation, Player s , i Server sunt aplicat , ii care ntr-un sistem de operare gazda (Windows sau Linux). VMware Fusion este ruleaza versiunea pentru Mac OS X. VMware ESX, versiunea enterprise, este un sistem de instant operare complet peste care se instaleaza , e de mas , ini virtuale. de Sun Microsystems. Similar cu VirtualBox3 este o solut , ie de virtualizare dezvoltata VMware Workstation, este o aplicat , ie care ruleaza peste un sistem de operare gazda (Windows, Linux, Mac OS X, Solaris) s pot instalate alte sisteme de , i n cadrul carei sub licent GNU. operare. VirtualBox Open Source Edition este disponibila ,a Microsoft Virtual PC4 este un sistem de virtualizare pentru sisteme de operare din suport familia Windows. Similar VirtualBox s , i VMware Workstation, Virtual PC ofera pentru sisteme oaspete doar din familia Windows. Se pot rula s , i sisteme de operare Linux, dar cu pas i suplimentari de congurare. , Xen5 este un hipervizor (virtual machine monitor) creat la Universitatea din Cambridge GNU. Xen s , i dezvoltat actualmente de comunitatea Xen ca software liber, sub licent ,a este similar VMware ESX. Are suport n nucleul sistemului de operare Linux, NetBSD s ,i pot instalate alte sisteme de operare oaspete. Xen Solaris. Peste sistemul de baza
1 2

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/

CAPITOLUL 1. INTRODUCERE

19

paravirtualizare care permite performant foloses , te o forma de virtualizare denumita ,a ridica. Paravirtualizarea necesita nsa modicarea sistemului de operare oaspete pentru sistemul de baza ofera suport de virtualizare hardware, a putea rula peste Xen. Daca modicarea sistemului de operare; efectul este posibilitatea atunci nu mai este necesara unui sistem Windows nemodicat peste Xen. rularii de virtualizare a nucleului KVM1 (Kernel-based Virtual Machine) este o infrastructura suport pentru virtualizarea hardware (Intel VT s Linux. KVM ofera , i AMD-V). KVM este inclus n nucleul Linux ncepnd cu versiunea 2.6.20. O parte din utilitarele necesare sunt furnizate de QEMU2 . pe Linux. Licent OpenVZ3 este o tehnologie la nivelul sistemului de operare bazata , iat GPL, OpenVZ constituie baza pentru Parallels Virtuozzo Containers, o aplicat , ie 4 furnizata de Parallels, Inc. OpenVZ este mai degraba un container dect o proprietara mas in a virtual a. OpenVZ nu virtualizeaz a ntreg sistemul de operare. Nucleul , este folosit de toate mas sistemului de operare gazda , inile virtuale (denumite s ,i containere sau medii virtuale). Procesele din cadrul ecarui container sunt izolate, dar totus se foloses te acelas i nucleu. Prezent a aceluias i nucleu nseamn a, , , , , , i, overhead s ridicate. redus pentru lucrul cu diversele containere rezultnd n viteza , i performant ,a

Cuvinte cheie programe de baza

open-source smartphone virtualizare hipervizor VMware VirtualBox VirtualPC Xen KVM OpenVZ

sistem de operare nucleu (kernel) portabilitate API biblioteci Windows Mac OS X Linux Unix

ntrebari ca o componenta a sistemului de 1. Care dintre urmatoarele aplicat , ii poate privita operare?

K procesor de text K player pentru s , iere video


1 2

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/

20

INTRODUCERE N SISTEME DE OPERARE

K interpretor de comenzi K client de email


o resursa partajata n cazul virtualizarii? 2. Care dintre urmatoarele NU reprezinta

K RAM K hard-disk K procesor K BIOS


3. Care dintre urmatorii este autorul unui limbaj de programare?

K Larry Wall K Linus Torvalds K William Henry Gates III K Andrew S. Tanenbaum
4. Care dintre urmatoarele NU este o funct , ie a sistemului de operare?

K controlul accesului la memorie


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

K organizarea s , ierelor n directoare


5. Care din urmatoarele sisteme de operare NU este folosit pentru dispozitive mobile?

K OpenSolaris K iPhone OS K Symbian OS K Android


NUMAI pe un sistem Linux? 6. Care din urmatoarele tehnologii de virtualizare ruleaza

K VirtualBox K VMware K VirtualPC K OpenVZ


termenul GNU din distribut 7. Ce reprezinta , ie GNU/Linux ? din Africa K o antilopa a cuvntului gun (arma) K o anagrama importanta a aplicat K un proiect care produce o componenta , iilor ce ruleaza peste nucleul Linux de dezvoltarea nucleului Linux K compania care se ocupa

CAPITOLUL 1. INTRODUCERE

21

pe piat 8. Care din urmatoarele sisteme de operare are cea mai mare cota ,a sistemelor desktop?

K Windows K Mac OS X K Linux K OpenSolaris


pe piat 9. Care din urmatoarele sisteme de operare are cea mai mare cota ,a dispozitivelor mobile inteligente?

K Windows Mobile K iPhone OS K Android K Symbian OS


10. Care din urmatoarele sisteme de operare este cel mai vechi?

K DOS K Unix K Linux K OpenBSD

Capitolul 2 de baza Instalarea Linux. Congurari


Unix is the answer, but only if you phrase the question very carefully.

din acest capitol? Ce se nvat ,a

Ce este Linux Distribut, ii GNU/Linux


Partit, ionarea discului; pregatirea pentru instalare

Instalarea Kubuntu
Interfat, a cu utilizatorul; interfat, a n linia de comanda

Autenticarea n sistem
de baza ntr-un sistem Linux Congurari

Interoperabilitate Linux/Windows

2.1

Linux. Distribut , ii Linux

clasa de sisteme Termenul Linux este deseori folosit pentru a reprezenta o ntreaga 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 2 pe utilitarele din proiectul GNU ind numite sisteme de operare GNU/Linux . Ulterior, e folosit pentru a referi att nucleul Linux ct s termenul a ajuns sa , i programele care cu acesta. funct , ioneaza O mare parte din utilitarele folosite n Linux sunt dezvoltate ca proiecte open source colaborativa, sunt produse (vezi capitolul 14) s , i, des , i sunt dezvoltate ntr-o maniera independent unele de altele. Licent , ele sub care se aa aceste proiecte permit
1 2

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

23

24

INTRODUCERE N SISTEME DE OPERARE

facnd aparit redistribuirea codului sursa, astfel posibila , ia unor noi proiecte mai mari, le faca disponibile la un care sa adune la un loc programe dezvoltate independent s , i sa loc sub forma unei distribut , ii. astfel o colect O distribut , ie de programe, unele din ele modicate , ie Linux reprezinta special pentru acea distribut ie, care sunt combinate cu o versiune de kernel, de multe , pentru acea distribut ori s , i aceasta modicata , ie, pentru a crea un sistem de operare. atat Distribut de-a lungul timpului cele mai variate forme s , iile Linux au cap , i destinat , ii. pe Unele au ca scop principal utilizarea lor pe servere, altele sunt destinate utilizarii Ssisteme desktop, iar altele sunt optimizate pentru a ocupa ct mai put , ine resurse putnd astfel folosite n sistemele embedded.

2.1.1

Principalele distribut , ii Linux

exista peste 300 de distribut n momentul de fat ,a , ii active (care sunt dezvoltate n larga, ind utilizate continuare). Dintre ele doar put in peste 10 sunt cunoscute la scara , pentru scopuri generale. de la zero, punctul de plecare De cele mai multe ori o distribut , ie nu este dezvoltata constituindu-l un anumit stadiu al unei alte distribut , ii. Noua distribut , ie poate mos , teni de diverse elemente, cum ar modul n care se instaleaza la cea din care este dezvoltata aplicat ii noi, locul n care se g asesc diverse s iere de congurare, felul n care arat a , , aceste s , iere etc. a pe pagina web http://distrowatch.com. Aici Popularitatea distribut , iilor poate urmarit zilnice ale este realizat un clasament al distribut de accesari , iilor pe baza numarului Acest clasament nu ia n considerare informat , iilor despre distribut , ie pe pagina amintita. n mare masur a interesul efortul depus pentru ment inerea distribut iei, dar arata , , manifestat de utilizatori. Cele mai accesate 16 distribut , ii n ultimul an (la data de 19.09.2009) sunt prezentate numarul n tabelul 2.1 (coloana Accese prezinta mediu de accese zilnice pe perioada 1 ultimul an; Distribut ia SLS este descris a online ). , distribut Pe lnga , iile de uz general (pentru servere sau pentru calculatoare personale) 2 s exista i distribut , , ii dedicate unui scop precis (one purpuse ) spre exemplu Musix , producerii de material multimedia, SystemRescueCD3 , distribut distribut , ie dedicata , ie n repararea unui calculator pe care sistemul Live CD (vezi sect , iunea 2.2.3) specializata 4 de operare nu se mai init ializeaz a din motive ce t , , in de software, sau BackTrack , utilitarele necesare atacarii unei ret distribut , ie Live CD care ofera , ele de calculatoare. aparte de distribut cele care au ca t ocuparea a ct mai put O clasa , ii o reprezinta , inta , in distribut , te acest lucru este spat Cea mai cunoscuta ce urmares , iu. , ie 5 includa n doar 50MB o distribut DamnSmallLinux , distribut , ie care reus , es , te sa , ie cu interfat completa a grac a s i cu toate aplicat iile uzuale. , , ,
1 2

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/

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI Tabelul 2.1: Cele mai accesate distribut , ii pe distrowatch.com (ultimul an) din Poz. Nume Anul aparit Derivata Accese , iei 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Ubuntu openSUSE Fedora Mint Debian Mandriva PCLinuxOS Puppy Sabayon CentOS Arch MEPIS Slackware FreeBSD Kubuntu Damn Small 2004 1994 2003 2006 1993 1998 2003 2005 2006 2003 2002 2003 1993 1993 2005 2003 Debian Slackware Red Hat Ubuntu Red Hat Mandriva (Mandrake) Gentoo Red Hat Debian SLS 386BSD Ubuntu Knoppix 2221< 1454= 1441> 1401< 1074< 970= 853< 718> 667> 626< 617> 586= 561> 491> 427< 423<

25

acestea, comunitat , ile au dezvoltat distribut Pe lnga , ii caracteristice unor anumite zone 1 utilizatorilor din Romnia. geograce Kiwi Linux este o distribut , ie adaptata evolut Pe Internet sunt disponibile mai multe diagrame care prezinta , ia distribut , iilor s ,i cautare felul n care au derivat una din alta. O simpla as irului de caractere linux distro , timeline pe Google Images2 va oferi cteva zeci de variante ale acestei diagrame. O n gura 2.1. versiune care cont , ine doar principalele distribut , ii este prezentata

2.1.2

Debian. Ubuntu

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

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

26

INTRODUCERE N SISTEME DE OPERARE

Figura 2.1: Evolut , ia principalelor distribut , ii Linux

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

cu distribuirea Nivelul de adopt , ie al acestui sistem de operare a crescut us , or odata n acest sens a avut-o unul dintre acestuia preinstalat pe calculatoare. Prima init , iativa va scoate cel mai mari producatori de echipamente IT care, n mai 2007, a anunt , at ca pe piat a calculatoare desktop s i laptop-uri care au preinstalat Ubuntu. n prezent, un , , de computere desktop, laptop dar s mare numar , i de tip netbook sunt vndute cu Linux preinstalat.

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

27

2.1.3

Tipuri de distribut , ii Linux

doua concepte importante legate de stabilitatea, sigurant n IT exista ,a s , i gradul de noutate al aplicat iilor (s i nu numai): versiunile stabile ( stable ) s i cele cu un grad de , , , concepte reprezinta doua extreme ale noutate ridicat (bleeding edge). Aceste doua o aplicat modului n care este dezvoltata ie. , versiuni ale programelor care au fost testate un Versiunile stabile (stable) reprezinta probleme de timp ndelungat, ale caror bug-uri au fost rezolvate, care nu prezinta ridicat. ntr-o versiune stabila este incompatibilitate s , i care au un grad de sigurant ,a apara bres destul de improbabil sa , e de securitate. Aceste versiuni apar rar deoarece este nevoie de timp pentru a crea stabilitatea necesara. aplicat niciun grad de Dezavantajul versiunilor stabile este acela ca , iile nu prezinta dureze ani pna cnd o noua versiune a unei aplicat e noutate. De multe ori pot sa , ii sa ntr-o versiune stabila a unei distribut introdusa , ii Linux. gradului de stabilitate s Versiunile stabile sunt folosite n special pentru severe datorita ,i oferit. sigurant ,a versiuni recente Versiunile cu un grad de noutate ridicat (bleeding edge) reprezinta at , iri s ale programelor, versiuni care includ ultimele mbunat Aceste versiuni , i inovat , ii. a inuent de marimea apar destul de des, frecvent , a lor de aparit , ie ind n mare masur , at ,a , ii ce dezvolta aplicat comunitat ia s i de mbun at at irile aduse. , , , prezinta un grad de Dezavantajul versiunilor cu grad de noutate ridicat este acela ca stabilitate s i de sigurant a incert, de multe ori sc azut. Datorit a test arii slabe a aplicat , , , iilor de timp), acestea prezinta deseori gauri (din lipsa de securitate sau probleme de stabilitate. aiba cele Versiunile cu grad de noutate ridicat sunt recomandate celor care doresc sa mai noi tehnologii implementate cu orice cost. Ele nu sunt recomandate pentru servere, ci pentru calculatoare unde stabilitatea s , i sigurant , a nu sunt elemente cheie. tipuri de aplicat numeroase niveluri de compromis. ntre cele doua , i prezentate exista Alegerea unui astfel de nivel pentru un sistem de operare (mai aproape de stabilitate a t sau mai aproape de cele mai noi tehnologii) trebuie facut , innd cont de scopul calculatorului pe care va instalat s i de gradul de securitate s i de stabilitate pe care , , l prezinte acesta. trebuie sa Distribut , iile au moduri diferite de tratare a conceptelor stable s , i bleeding-edge. n 3 versiuni: Spre exemplu, distribut , ia Debian poate instalata cu aplicat stable versiune stabila, , ii testate mult timp o perioada de timp devine versiunea stable testing versiune de testare, dupa programele n versiunile lor bleeding-edge, unstable versiune care incorporeaza o perioada devine versiunea testing dupa release cycle ciclu de lansare). Ubuntu are un ciclu de dezvoltare de 6 luni (n engleza Acest lucru presupune dezvoltarea distribut , iei timp de 6 luni s , i lansarea unei noi versiuni aceasta perioada. n prezent, Ubuntu lanseaza distribut dupa X.04) , ii n aprilie (numarul ultimele doua cifre din an (pentru 2009 s X.10) X reprezinta , i n octombrie (numarul 9, 2010 10 etc.).

28

INTRODUCERE N SISTEME DE OPERARE

aceste versiuni, Ubuntu are s Pe lnga , 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 ecare versiune de Ubuntu/Kubuntu, cele mai utilizate trei variante de instalare sunt: de Debian s Instalarea server este mai apropiata , i de stabilitatea acestuia. Este pentru calculatoare care trebuie sa ofere stabilitate s recomandata , i sigurant , a. permite utilizatorului sa instaleze varianta Instalarea desktop (cea mai uzuala) desktop a sistemului de operare folosind un asistent n mod grac. Pentru o buna utilizarea unui sistem cu cel putin 384MB de RAM. funct , ionare, se recomanda instaleze varianta desktop, nsa Instalarea alternate permite utilizatorului sa asistentul de instalare nu va mai unul n mod grac ci unul n mod text, bazat pe asistentul de instalare al distribut Din acest motiv varianta alternate , iei Debian. s poate instalata i pe sisteme cu mai put in de 384 MB de RAM. Un alt avantaj al , , permitea realizarea unei partit avansate a variantei alternate este acela ca , ionari hard-disk-ului, oferind suport pentru utilizarea RAID1 sau LVM2 (ambele tehnologii permit realizarea de partit , ii care includ spat , iul de pe mai multe hard-disk-uri). aceste versiune mai exista s Pe lnga , i versiunea Netbook Remix (pentru calculatoare de tip netbook ).

2.2
2.2.1

Instalarea Linux
Alegerea distribut , iei Linux

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

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


cum a fost ment stabilitate, dupa , ionat anterior) distribut suportul oferit de comunitate (sau de compania care dezvolta , ia)

familiaritatea cu anumite componente ale sistemului, n principal sistemul de


un criteriu foarte important pentru noii utilizatori) pachete (acesta nu reprezinta

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


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

resursele disponibile pe calculator n cazul n care resursele calculatorului pe


cautarea care va instala Linux sunt scazute, se recomanda unei distribut , ii cu cerint , e scazute
1 2

Redundant Array of Inexpensive Disks Logical Volume Manager

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

29

, te utilizarea Linux destinat, ia sistemului de operare n cazul n care se urmares activitate/sarcina se recomanda instalarea unei distribut pentru o anumita , ii special (vezi sect concepute (n cazul n care exista) iunea 2.1.1). , ca suport pentru aceasta carte este Kubuntu 9.10 Desktop1 , distribut Distribut , ia aleasa , ie din Ubuntu, care: derivata un nivel acceptabil de stabilitate raportat la nivelul de noutate al pachetelor ofera formata din tot are o comunitate foarte larga, , i utilizatorii de Ubuntu s , i derivate ale acestuia suport facil pentru hardware proprietar, hardware care nu are driver-e open ofera source disponibile implicit n distribut , iile Linux; majoritatea dispozitivelor comune sunt suportate

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

2.2.2

Pregatirea sistemului

Vericarea cerint , elor sistemului. Spat , iul de swap Fiecare sistem de operare (s , i implicit distribut , ie Linux) este nsot , it de o serie de cerint ,e care, n cazul n care sunt ndeplinite, minime hardware. Acestea sunt recomandari buna funct asigura , ionare a sistemului de operare. n anumite situat , ii, programele care se ocupa de instalarea sistemului de operare vor detecta nendeplinirea cerint , elor minime hardware s , i vor refuza contiuarea procesului de instalare. n aceasta carte (Kubuntu 9.10) are urmatoarele Distribut cerint , ia aleasa , e hardware n paranteza se regasesc (recomandari, cerint ele minime): ,

procesor x86 700 MHz (min: 300 MHz)


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

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


video capabila sa as placa , eze rezolut , ia 1024x768 (min: 640x480)

pentru instalare s , i actualizare a sistemului conexiune la Internet (min: CD-ROM


de ret sau placa , ea) a unui sistem de operare o Printre principalele probleme ce t , in de utilizarea facila lipsa memoriei RAM. Sistemul de operare foloses reprezinta , te pentru stocarea datelor temporare memoria RAM. Aceasta are avantajul unui timp de raspuns s , i al unei viteze este limitata din punctul de vedere al capacitat , ii (sistemele de citire foarte mari, nsa actuale nu au, n mod normal, mai mult de 2GB de memorie RAM). cu date, exista doua solut Atunci cnd ntreaga memorie RAM este umpluta , ii n nealocarea de memorie RAM pentru programele alternative. Prima din ele consta
1 2

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

30

INTRODUCERE N SISTEME DE OPERARE

care cer acest lucru. Ca urmare programul respectiv nu va putea funct , iona s , i va genera erori. Atunci cnd programul n cauza este unul vital pentru funct , ionarea sistemului de operare, funct ionarea ntregului sistem de operare poate deveni instabil a. , este aceea n care datele care ar trebui stocate n memoria RAM sunt A doua varianta stocate ntr-o alta memorie (pe hard-disk sau pe o memorie pe USB). Deoarece memorie din sistem, utilizarea unui alt tip de memoria RAM este cea mai rapida de performant Aceasta solut memorie va atrage dupa sine penalizari , a. , ie se numes , te modului n care funct swapping datorita ioneaz a: dac a memoria RAM este plin a s i apar , , cereri pentru alocarea de noi zone de memorie, o parte din datele aate deja n memoria RAM sunt mutate pe un alt tip de memorie, n acest fel eliberndu-se memorie RAM. n momentul n care datele mutate anterior pe un alt tip de memorie sunt cerute de programe, ele sunt mutate napoi n RAM (daca nu este sucient loc n acel moment se va elibera o parte din RAM copiind alte date din RAM pe suportul de memorie). s solut pentru swap este hard-disk-ul (vezi Cea mai uzuala , i ieftina , ie de memorie folosita dedicata pe sect iunea 5.6). Sistemele de operare de tip Linux folosesc n general o zona , partit partit hard-disk numita , ie are n general dimensiuni apropiate , ie de swap. Aceasta de cele ale memoriei RAM (de ordinul 1-2 GB). Windows-ul s , i sistemul de operare Mac OS X folosesc pentru swap s iere a c aror dimensiune se poate extinde sau mics , , ora n , i. funct , ie de necesitat

Partit , ionare o diviziune logica a unui hard-disk. Prin partit O partit , ionare un hard, ie reprezinta , it n mai multe partit disk este mpart ii. Pe un hard-disk poate exista s , , i o singura partit , ie. nicio partit Un hard-disk este nepartit , ie. , ionat atunci cnd pe el nu exista aiba aceeas Partit , ionarea unui hard-disk l face pe acesta sa , i comportare ca mai multe n faptul hard-disk-uri independente. Diferent a ntre partit ii s i hard-disk-uri reale consta , , , partit ca , 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 redimensionate dup a ce au fost create, n schimb , discurile au o dimensiune xa. ntr-o partit , ie se poate crea un sistem de s , iere pentru stocarea s , ierelor sau partit , ia n scopuri speciale, cum sunt de exemplu partit poate utilizata iile de swap. Partit iile de , , swap nu folosesc un sistem de s , iere ca NTFS, FAT32 sau ext3. Sistemul de operare are metode proprii de a organiza datele n ele s , i de a le face us , or de accesat (vezi capitolul 4). de partit Avantajele utilizarii , ii sunt urmatoarele: mai multor sisteme de operare pe acelas posibilitatea instalarii , i hard-disk se poate alege ulterior, la pornirea sistemului de calcul, care din ele va folosit (vezi sect , iunea 6.2);

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


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

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

31

partit alta sistemul de operare nu mai poate pornit s , ie, , i este necesara reinstalarea lui, datele nu vor 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 numele Master Boot Record (MBR) Primul sector zic de pe un hard-disk poarta (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.
1 acest sector este s Daca , ters sau suprascris toate informat , iile de pe hard-disk se pierd.

n cadrul MBR se gasesc informat Aceste , ii despre ecare partit , ie de pe hard-disk. de partit informat Prin , ii sunt stocate ntr-o tabela , ii primare care are doar patru intrari. urmare MBR-ul poate ret ine informat ii pentru doar patru partit ii primare. Una dintre , , , aceste patru partit ii va marcat a ca activ a s i de pe ea se va ncerca pornirea sistemului , , de operare. poate cont O partit Pentru a elimina , ine doar un singur sistem de s , iere. , ie primara MBR-ul (de a putea ret limitarea pe care o prezinta , ine doar patru partit , ii primare) a fost partit tot o intrare n tabela de partit . Acest tip de partit creata , ie ocupa , ii din , ia extinsa poate cont MBR nsa ine la rndul s au mai multe partit ii logice , ecare partit ie avnd , , , este asociat un sistem de s de partit , iere. Numarul , ii logice incluse ntr-o partit , ie extinsa limitat doar de dimensiunile partit iei extinse s i de structura de date folosit a pentru a ret , , , ine informat , iile despre partit , iile logice. e instalate pe partit Unele sisteme de operare trebuie sa , ii primare pentru a putea porni. categorie intra MS-DOS s n aceasta i toate versiunile de Windows care depind de el , (Windows 3.x, Windows 95, Windows 98, Windows Millenium), precum s , i BSD.

2.2.3

Live CD

de instalare este Pentru Ubuntu 9.10 (s , i derivatele precum Kubuntu) varianta graca sub forma unui Live CD. disponibila 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 pornit direct (boot-abil), far sau de prezent , a acestuia. s Exista , i Live USB-uri, dispozitive USB boot-abile cu sisteme de operare care au, de s multe ori, adaugat a , i posibilitatea scrierii informat , iilor pe USB (comparativ cu Live CD/DVD-urile unde informat , iile se ret , in implicit doar n memorie).
1 informat chiar daca , iile din MBR se pierd, folosind utilitare specializate se pot recupera datele de pe hard-disk prin recunoas , terea tiparelor caracteristice sistemelor de s , iere

32

INTRODUCERE N SISTEME DE OPERARE

pe un singur disc se gasesc Termenul Live vine de la faptul ca toate s , ierele necesare funct , ionarii unui sistem de operare, fara a necesara copierea unui s , ier pe hard-disk naintea pornirii sistemului de operare. n niciun fel sistemul de operare instalat pe hard-disk, Astfel un Live CD nu modica except ie f acnd 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 s , iere etc. Pentru a rezolva problema lucrului cu s , iere, n condit , iile n care n mod implicit nu se cu un hard-disk, un Live CD foloses lucreaza , te un ramdisk (o port , iune din memoria RAM) precum un hard-disk. perioada n care sistemul Toate datele care se scriu n ramdisk sunt accesibile pe toata Atunci cnd acesta este oprit, datele din RAM se pierd s de operare ruleaza. , i, implicit, tot cont , inutul ramdisk -ului este s , ters. De aceea, la oprirea unui sistem pornit de pe Live pornirii. CD, sistemul de calcul revine la starea anterioara avantajul unui timp Utilizarea unei port , iuni din memoria RAM pe post de hard-disk ofera de acces s , i a unei rate de transfer mai bune dect n cazul unui disk. Dezavantajul este aplicat o cantitate mai mica de RAM. Pentru a putea rula acela ca , iile vor avea disponibila n condit , ii normale un Live CD are nevoie de 512MB de memorie RAM, minimul necesar ind 256MB. posibilitatea testarii s unui sistem de operare n As , adar un Live CD ofera , i utilizarii sigurant pentru software-ul instalat pe sistemul de calcul. De multe condit , ii de deplina ,a ori, Live CD-urile sunt folosite pentru recuperarea datelor aate pe o partit , ie ce nu mai din sistemul de operare instalat pe hard-disk (spre exemplu atunci poate accesata cnd sistemul de operare nu mai porneste).

2.2.4

Instalare Kubuntu

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

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

33

Figura 2.2: Alegerea modului n care va folosit Live CD-ul va porni Kubuntu folosind congurarile Prima opt implicite. Din mediul grac , iune din lista pornit se poate alege ulterior pornirea instalarii. A doua opt , iune (Install Kubuntu ) va porni direct instalarea. Check disc for defects este util pentru vericarea CD-ului. Memory test va porni un test al memoriei RAM, util pentru depanarea problemelor hardware atunci ca ar defecta. cnd memoria RAM este suspectata ce este aleasa prima opt Dupa , iune sistemul de operare va init , ializat. Desktp-ul implicit din Kubuntu este prezentat n gura 2.3.

Figura 2.3: Desktop-ul implicit al Live CD-ului Kubuntu n acest moment Kubuntu poate folosit ca Live CD. Pentru a l instala pe hard-disk, se va accesa pictograma Install Kubuntu 9.10 de pe desktop. Rezultatul va pornirea unui asistent de instalare (gura 2.4).

34

INTRODUCERE N SISTEME DE OPERARE

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

utilizatorul Figura 2.5: Alegerea locului n care se aa Pasul urmator este reprezentat de alegerea felului n care sunt amplasate tastele pe ce se realizeaza aceasta congurare tastatura (keyboard layout ) (gura 2.6). Dupa pasul cel mai important din cadrul instalarii: urmeaza partit , ionarea hard-disk-ului (vezi gura 2.7) Discul poate s , ters integral, caz n care datele deja existente vor s , terse, sau poate partit n continuare va , ionat manual, alegnd dimensiunea partit , iilor s , i tipul lor. partit prezentata ionarea manual a. ,

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

35

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

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

36

INTRODUCERE N SISTEME DE OPERARE

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

Figura 2.9: Crearea unei partit , ii

Figura 2.10: Crearea unei partit , ii swap are 197 MB s la nceputul Partit , ia de swap (gura 2.10) este tot primara, , i este creata printr-un director, ci va folosita de spat Ea nu va putea accesata , iului liber ramas. sistemul de operare n mod transparent. schema de partit Dupa crearea celor doua Aceasta , ionare este pur demonstrativa. ca n gura 2.11. partit , ii, tabela de partit , ii arata crearea partit Dupa , iilor, trebuie datele personale ale utilizatorului: numele lui, numele de utilizator dorit, parola s , i numele stat , iei (hostname ). Asistentul de instalare mai permite directorul cu datele utilizatorului s i alegerea modului de autenticare n sistem s , , i daca

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

37

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

Figura 2.12: Congurarea datelor personale ale utilizatorului n pasul urmator (ultimul pas al instalarii) pot revizuite congurarile realizate. Apasnd pe butonul Advanced... se poate congura unde va instalat bootloader -ul (vezi sect , iunea 6.2) bootloader/GRUB (vezi gura 2.13). butonul Install. La terminarea Pentru a ncepe copierea s , ierelor pe hard-disk se apara instalarii va as , at mesajul din gura 2.14. nchiderea asistentului de instalare sistemul de operare va rula n continuare ca Dupa instalat, calculatorul trebuie Live CD. Pentru a porni sistemul de operare proaspat repornit.

38

INTRODUCERE N SISTEME DE OPERARE

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

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

2.3
2.3.1

Interact , iunea cu sistemul de operare


Interfet , ele cu utilizatorul

Primele interfet , e cu utilizatorul au fost, din motive tehnice, create pe monitoare care , ile acestor interfet as De aceea, posibilitat , au doar caractere text. , e de a crea categorie (interfet doar componente grace au fost limitate. n aceasta e care utilizeaz a , CLI (Command Line Interface) s caractere n mod text) intra , i TUI (Text User Interface ). n timp, att monitoarele ct s i pl acile video au avansat tehnologic s astfel , , i au aparut as s , ajele grace (cu rezolut , ii mai mari dect cele text). n acest fel a aparut , i o noua GUI (Graphical User Interface). clasa de interfet , e cu utilizatorul numita pe comenzi scrise de la n CLI, interact , iunea cu sistemul de operare se bazeaza Exemple de CLI pot vazute tastatura. n gura 2.17 s , i n gura 2.18. pot invocate comenzi complexe utiliznd Avantajul acestei metode este acela ca secvent , e scurte de caractere. Pentru a realiza sarcini echivalente ntr-un GUI poate uneori nevoie s Un alt avantaj al CLI este , i de cteva zeci de click-uri de mouse. n utilizare, dupa ce comenzile au fost ret rapiditatea dobndita , inute (n special daca este folosit istoricul de comenzi: prin apasarea tastei S ageat aSus pot reexecutate comenzile date anterior). Lund ca exemplu congurarea unei adrese IP (vezi de ret ntre prima s sect , iunea 8.2.1) pe o interfat ,a , ea, diferent , a de viteza , i a zecea oara aceasta congurare ntr-un GUI este mica, datorita numarului cnd se realizeaza mare

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

39

de click-uri necesar. n cazul unui CLI, folosind s , i istoricul de comenzi, diferent , a de viteza este extrem de mare. de nvat , are, utilizatorul obis Dezavantajul principal al CLI este curba abrupta , nuindu-se dect cu ret un buton. mai greu cu o comanda , inerea locului n care se aa Des metoda de control al , i de la aparit , ia sa a fost concurat de TUI s , i GUI, CLI ramne de utilizatorii avansat ecient sistemului de operare preferata , i datorita , ei n utilizare. prin intermediul ferestrelor, n TUI, interact , iunea cu sistemul de operare se realizeaza meniurilor, butoanelor s , i mouse-ului. Pentru desenarea interfet , ei sunt utilizate caractere disponibile pe orice terminal text (gura 2.15).

Figura 2.15: Text User Interface se apropie de modul n care arata o interfat graca nsa, datorita Acest tip de interfat ,a ,a foloses faptului ca , te caractere text, rezolut , ia ecranului este mai mica. GUI este un sistem de interact , iune cu utilizatorul de tipul WIMP (window, icon, menu, pointing device) (gura 2.16).

Figura 2.16: Graphical User Interface

40

INTRODUCERE N SISTEME DE OPERARE

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

2.3.2

(CLI) Interfat , a n linie de comanda

Consola este un tip de echipament care permite introducerea s O consola , i as , area de text folosit n administrarea s , i utilizarea sistemului de operare. o tastatura) Init , ial consolele erau formate dintr-un terminal (un monitor ce avea atas , ata Acest tip de console care se conecta la sistemul de calcul printr-o conexiune seriala. este foarte rar ntlnit n ziua de astazi. cu tastatura au acelas Pe un calculator obis , nuit, monitorul mpreuna , i rol ca un terminal. tipuri de console: terminalele virtuale (console n Ele permit, n Linux, accesarea a doua mod text) s , i emulatoarele de terminale (console n mod grac). (n general 25 de linii cu 80 de caractere pe Terminalele virtuale au o rezolut , ie mica graca cu ajutorul tastelor CTRL+ALT+Fx, unde linie). Ele pot accesate din interfat ,a tastele F1 pna la F6 (n mod implicit). Din aceste terminale virtuale se Fx reprezinta cu ajutorul combinat poate reveni n interfat a grac a , , iei de taste (CTRL+)ALT+F7. Trecerea dintr-un terminal virtual n altul poate realiza prin trei combinat , ii de taste. sunt: CTRL+ALT+Fx s Primele doua i ALT+Fx (unde x este num arul terminalului n , care se va trece). A treia combinat a Stnga sau , ie de taste este ALT+Sageat ALT+Sageat a Dreapta s , i permite trecerea dintr-un terminal n cel precedent, respectiv n cel urmator. De exemplu trecerea din terminalul 4 n terminalul 3 se poate realiza cu CTRL+ALT+F3 sau ALT+F3 sau ALT+Sageat a Stnga. Valorile tastelor F prezentate sunt cele implicite pe majoritatea distribut , iilor. Aceste valori poate plasata pe terminalul trei sau pe pot schimbate. De exemplu, interfat , a graca sau terminalul cinci; numarul de terminale accesibile poate s ase (valoarea implicita) , zece (gura 2.17).

Figura 2.17: Terminal virtual (CLI)

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

41

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

(CLI) Figura 2.18: Emulator consola un terminal virtual el trebuie sa se autentice folosind Atunci cnd un utilizator acceseaza La pornirea unui emulator de terminal utilizatorul nu un nume de utilizator s , i o parola. se autentice, deoarece autenticarea s-a produs nainte de pornirea mai trebuie sa interfet , ei grace. De asemenea, la pornirea unui emulator de terminal utilizatorul curent va cel care este autenticat n interfat , a graca. a sistemului de operare Linux este din n ultimii ani, ndepartarea de linia de comanda n detrimentul utilizarii interfet ce n ce mai accentuata , ei grace, mai intuitive s , i cu , i mult mai avansate. Cu toate acestea, interfat facilitat a n linia de comand a r amne o , esent n congurarea rapida a unui sistem s de la componenta , iala , i a administrarii Interfat permite toate operat distant , a. , a n linia de comanda , iile care pot realizate s , i din interfat a grac a. ,

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

42

INTRODUCERE N SISTEME DE OPERARE

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

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

username@localhost:~$

numele La acest prompt, utilizatorul poate introduce comenzi. username reprezinta utilizatorului, iar localhost este numele stat Simbolul ~ indica , iei (hostname ). terminarea directorul curent, home-ul utilizatorului george1 . Simbolul "$" marcheaza prompt-ului s De exemplu, n cazul , i nceperea zonei de introducere a comenzilor. urmator:
1

george@asgard:~$

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


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

Comenzi (s Comenzile sunt cuvinte cheie care se introduc la consola , i interpretate de interpretorul de comenzi), folosite pentru a congura sistemul de operare sau pentru a obt , ine informat , ii de la acesta. simpla este o comanda Comenzile pot simple sau pot avea parametri. O comanda care cont ine un singur cuvnt cheie sucient pentru a executa o act iune. Majoritatea , , comenzi compuse s comenzilor sunt nsa , i pot primi unul sau mai mult , i parametri care pot afecta rezultatul comenzii. Separarea ntre numele comenzii s , i parametru sau ntre prin intermediul caracterului spat doi parametri se realizeaza iu. De multe ori, primul , parametru (sau s , i alt , i parametri, n funct , ie de caz) este marcat prin caracterul -. simpla s cu Mai jos este prezentat un exemplu de comanda , i apoi aceeas , i comanda parametri. Comenzile au de obicei rezultate, rezultate care sunt as , ate de catre interpretorul de comenzi (shell) pe consola utilizatorului. n exemplul nostru, ecare are un rezultat care este as comanda , at.
1 2 3 4 5 6 7 8 9 10 11

george@asgard:~$ ps PID TTY TIME CMD 13391 pts/0 00:00:00 bash 13666 pts/0 00:00:00 ps george@asgard:~$ ps -o uid,pid,cmd UID PID CMD 1000 13391 -bash 1000 13669 ps -o uid,pid,cmd george@asgard:~$
1

detalii despre ierarhia sistemului de s n sect , iere se gasesc , iunea 4.1.2

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

43

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

Cautarea de ajutor a cu o comanda (parametri, date de Daca se dores de informat , te cautarea , ii n legatur ies , ire, funct , ionalitate etc.) distribut , iile de Linux pun la dispozit , ie mai multe opt , iuni:

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


parametrilor posibili ai acelei comenzi. De exemplu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

george@asgard:~$ cp --help Usage: cp [OPTION]... [-T] SOURCE DEST or: cp [OPTION]... SOURCE... DIRECTORY or: cp [OPTION]... -t DIRECTORY SOURCE... Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

Mandatory arguments to long options are mandatory for short options too. -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

pentru a as descriere a unei comenzi: Comanda whatis este folosita , a o scurta


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.

comenzile care au legatur a cu cuvntul transmis ca Comanda apropos as , eaza parametru:


1 2 3 4 5 6 7

george@asgard:~$ apropos zip bunzip2 (1) - a block-sorting file compressor, v1.0.3 bzcmp (1) - compare bzip2 compressed files bzdiff (1) - compare bzip2 compressed files bzegrep (1) - search possibly bzip2 compressed files for a regular expression bzfgrep (1) - search possibly bzip2 compressed files for a regular expression [...]

44

INTRODUCERE N SISTEME DE OPERARE

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


complete asociate unei comenzi dorite. Aceste pagini cont , in informat , ii detaliate despre opt iunile posibile ale comenzilor s i utiliz arile acestora. Comenzile man s , , ,i info primesc ca argument numele comenzii a carei documentat , ie se dores , te a as at a: ,
1 2 3 4 5 6 7 8

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

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

2.3.3

Oprirea sistemului de calcul

Pentru a opri sau reporni un sistem de calcul se foloses , te comanda shutdown. Aceasta poate utilizata doar de catre comanda un utilizator cu drepturi administrative (vezi sect , iunea 2.4.1). Sintaxa comenzii este:
1

shutdown [OPTION]... TIME [MESSAGE]

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

root@asgard:/home/george# shutdown -h now Broadcast message from george@asgard (/dev/pts/0) at 18:28 ...

The system is going down for halt NOW!

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI comanda: Pentru a reporni stat , ia imediat, se ruleaza
1 2 3 4 5 6

45

root@asgard:/home/george# shutdown -r now Broadcast message from george@asgard (/dev/pts/4) at 11:04 ...

The system is going down for reboot NOW!

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


1 2 3 4 5 6 7

root@asgard:/home/george# shutdown -r 20:00 Broadcast message from george@asgard (/dev/pts/4) at 11:03 ...

The system is going down for reboot in 537 minutes!

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


1 2 3 4 5 6

root@asgard:/home/george# shutdown -r +10 Broadcast message from george@asgard (/dev/pts/0) at 18:33 ... The system is going down for reboot in 10 minutes!

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

2.4
2.4.1

de baza ale SO Congurari


Administrarea sistemului Linux

la Windows XP (inclusiv), n timpul procesului de n sistemele de operare Windows pna instalare se crea un utilizator cu drept de administrare. De cele mai multe ori, sistemul era folosit cu acest utilizator, situat , ie care putea crea probleme de securitate datorita drepturilor extinse de care benecia utilizatorul (vezi sect , iunea 10.2). n sistemele de operare Linux se face o distinct ie implicit a ntre drepturile de administrare s , , i drepturile de utilizare a sistemului. n Linux, un singur utilizator are drepturi de administrare depline. Acesta este un utilizator special numit root. Utilizatorul root poate realiza congurari, poate modica modul n care pornes , te sistemul de operare, poate acorda drepturi part iale altor utilizatori etc. , sau act Pentru a putea realiza congurari , iuni pe care doar utilizatorul root le poate , i. realiza, un utilizator are trei posibilitat Prima posibilitate o reprezinta autenticare n sistemul de operare folosind numele de acestuia. n cele mai multe sisteme de operare folosite utilizator root s , i parola asociata

46

INTRODUCERE N SISTEME DE OPERARE

din motive de sigurant De aceea n product , ie autenticarea ca root este dezactivata , a. aceasta metoda poate sa nu funct , ioneze.

Schimbarea ntre utilizatori (su) posibilitatea schimbarii n cazul n care utilizatorul este deja autenticat n sistem, exista utilizatorulu (a doua posibilitate de obt Din shell , inere a drepturilor administrative). , 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 autentice 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 autenticarea ca alt utilizator se face cu comanda poate primi ca parametru numele ajutorul comenzii su (switch user ). Aceasta utilizatorului n contul caruia se va face autenticarea:
1 2 3 4 5 6 7

george@asgard:~$ su uso Password: uso@asgard:/home/george$ exit exit george@asgard:~$

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

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

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

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI Execut , ia comenzilor cu drepturi administrative (sudo)

47

autenticarea ca root, a treia posibilitate de obt n cazul n care este dezactivata , inere utilizarea comenzii sudo. Aceasta comanda a drepturilor administrative o reprezinta permite executarea unui program ca alt utilizator. Spre deosebire de su, care cerea parola utilizatorului al carui cont va utilizat, sudo cere parola utilizatorului curent1 . Din parola utilizatorului curent, acest motiv comanda sudo su va avea succes (este ceruta care comanda su este executata ca root): nu cea a utilizatorului root, dupa
1 2 3 4

george@asgard:~$ sudo su Password: root@asgard:/home/george#

Atunci cnd utilizatorul root foloses , te comanda sudo pentru a porni un shell n care se autentice ca alt utilizator, nu i se va cere nicio parola. sa

2.4.2

, ii la Internet Asigurarea conectivitat

ce trebuie realizata pe sistemul de operare instalat este Una dintre primele congurari , ii la Internet. Kubuntu este o distribut asigurarea conectivitat , ie de Linux care se bazeaza o conexiune la Internet pentru a putea copia s pe pachete s , i necesita , i instala versiuni mai recente ale acestora, realiznd n acest fel actualizarea ntregului sistem de operare. , ii la Internet exista mai multe alternative. Cea mai simpla Pentru asigurarea conectivitat este aceea n care tot IP, varianta , i parametrii de ret , ea (vezi sect , iunea 8.2) (adresa 2 de ret masca ea, gateway, server DNS) sunt congurat i n mod automat folosind DHCP . , , metoda este cea ncercata implicit de catre aceasta Aceasta sistemul de operare. Daca reus es te, utilizatorul are acces la Internet, nemaiind necesar a o alt a congurare. , , ncercarea de congurare folosind DHCP es utilizatorul va trebui sa Daca , ueaza, congureze manual parametrii de ret , ea. Acest lucru se poate realiza temporar (efectele la urmatoarea la congurarilor vor dura pna pornire a sistemului de operare sau pna congurare) sau permanent (efectele congurarilor o noua se vor pastra s , i dupa repornirea sistemului de operare). Congurarile temporare pentru adresa IP, masca de ret , ea s , i gateway se realizeaza folosind comenzile ifconfig s Pentru a putea folosi aceste comenzi , i route. obt utilizatorul trebuie sa in a drept de administrare. Pentru mai multe informat , , ii legate de congurarea ret , elei consultat , i capitolul 8.

2.4.3

Actualizarea sistemului s , i a pachetelor

instalarea unui sistem de operare Printre primele act , iuni care se realizeaza imediat dupa , te actualizarea acestuia. ntr-un sistem bazat pe Debian (precum Ubuntu s se regases ,i Kubuntu), acest lucru se face prin execut comenzi ca root: , ia urmatoarelor
acest comportament este dependent de distribut , ie n Ubuntu s , i n distribut , iile derivate, comanda sudo cere parola utilizatorului curent 2 Dynamic Host Conguration Protocol
1

48

INTRODUCERE N SISTEME DE OPERARE

1 2 3

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

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

2.4.4

Administrarea utilizatorilor s , i a grupurilor de utilizatori

Majoritatea programelor de instalare a distribut , iilor Linux permit celui care realizeaza adauge direct utilizatori non-root n sistem, far a a nevoie de procesul de instalare sa ulterioare. congurari n cazul n care mai trebuie adaugat , i utilizatori sau grupuri, administratorul are la dispozit ie comenzile adduser s i addgroup pe sisteme Debian (s implicit , , ,i Ubuntu/Kubuntu). adduser permite adaugarea n mod interactiv de utilizatori. se dores Daca , te lucrul mai avansat cu utilizatori s , i grupuri (precum s , tergerea, modicarea utilizatorilor/grupurilor) consultat i sect iunea 3.1. , ,

2.5
2.5.1

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

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

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

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

49

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

2.5.2

GParted

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

Cuvinte cheie

CLI
consola

mediu grac partit, ie swap shell shutdown su sudo TUI

distribut, ie Linux gestionare utilizatori GUI Kubuntu Live CD MBR instalare


1 2

http://www.fs-driver.org/ http://www.ntfs-3g.org/ 3 Gnome este un Desktop Environment pentru mediul grac din Linux mai multe informat , ii se pot gasi n sect , iunea 13.7 4 http://gparted.sourceforge.net/livecd.php

50

INTRODUCERE N SISTEME DE OPERARE

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

K niciunul K 1 K 2 K orict, i
pentru a rula un sistem de operare de 2. Care dintre urmatoarele NU este necesara pe Live CD:

K congurarea unei partit, ii primare K BIOS K RAM K procesor


din TUI? 3. Din ce sisteme de operare NU se pot realiza congurarii

K Windows Vista K Debian K ubuntu Live CD K PalmOS

DE BAZA CAPITOLUL 2. INSTALAREA LINUX. CONFIGURARI

51

doar de utilizatorul privilegiat. n 4. Operat , ia de repornire a sistemului poate init , iata urma repornirii sistemului tot cont , inutul memoriei RAM este golit. K adevarat, adevarat K adevarat, fals K fals, adevarat

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

su rrazvan

a a se solicita autenticare: se obt , ine un prompt de shell far de utilizatorul root K comanda a fost lansata de utilizatorul rrazvan K comanda a fost lansata din directorul /etc K comanda a fost lansata din directorul /root K comanda a fost lansata un sistem de s 6. Care din urmatoarele NU reprezinta , iere?

K FAT32 K swap K ext3 K NTFS


7. Care din urmatoarele NU este un tip de partit , ie? K extinsa K logica K primara K virtuala din Debian? 8. Care din urmatoarele distribut , ii este derivata

K Ubuntu K Fedora K Gentoo K OpenSuSE


la CLI? 9. Care din urmatoarele NU se refera K comanda

K prompt K terminal K window manager

52

INTRODUCERE N SISTEME DE OPERARE

de ajutor pe un sistem Linux? 10. Care din urmatoarele comenzi NU este o comanda

K man K info K apropos K 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 x their computer after theyve just pressed a key that broke it. Expert Users: people who break other peoples computers. The Jargon File

din acest capitol? Ce se nvat ,a

Gestiunea utilizatorilor s , i grupurilor n Linux Fis , iere folosite pentru gestiunea utilizatorilor Ce este un pachet
asupra unui pachet n Linux Care sunt operat, iile de baza

Gestiunea pachetelor n Debian/Ubuntu: utilitarele apt s , i dpkg Personal Package Archive (PPA)

3.1

Gestiunea utilizatorilor

la adaugarea Gestiunea utilizatorilor se refera de noi utilizatori, s , tergerea unui utilizator existent, modicarea informat , iilor despre un utilizator s , i as , area diverselor informat , ii. n sistemele Unix, informat , iile despre utilizatori sunt ret , inute n s , ierul /etc/passwd. home-ul, Fiecare linie din acest s , ier cont , ine numele utilizatorului, identicatorului sau, s shell-ul rulat n momentul autenticarii i alte informat ii de descriere: , , 53

54

INTRODUCERE N SISTEME DE OPERARE

1 2 3 4

root@anaconda:~# cat /etc/passwd andreir:x:1114:1026:Andrei Rizoiu:/home/students/andreir:/bin/bash alexn:x:1115:1026:Alex Negrea:/home/students/alexn:/bin/bash [...]

, te n s Din motive de securitate, hash-ul asociat parolei nu se gases , ierul /etc/passwd, ci n s , ierul /etc/shadow care nu poate 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 aa informat , ii despre un utilizator al sistemului se pot folosi comenzile id sau finger:
1 2 3 4 5 6 7 8 9

root@anaconda:~# id andreir uid=1114(andreir) gid=1026(students) groups=1026(students),1037(rl) root@anaconda:~# finger alexn Login: alexn Directory: /home/students/alexn Never logged in. No mail. No Plan.

Name: Alex Negrea Shell: /bin/bash

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

root@anaconda:~# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash

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

root@anaconda:~# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash root@anaconda:~# su - andreir andreir@anaconda:~$ su - razvan Password:

de obicei, utilizatorul root s folosirea Sistemele Ubuntu dezactiveaza, , i recomanda comenzii sudo. De obicei, un utilizator neprivilegiat care are drept de sudo va rula comanda sudo bash pentru a obt un shell cu drepturi privilegiate (vezi , ine sect , iunea 10.3.3). cu ajutorul comenzii passwd. Schimbarea parolei unui utilizator se realizeaza Utilizatorul privilegiat poate schimba parola oricarui utilizator. Un utilizator neprivilegiat s i poate schimba parola doar sies i: , ,
1 2 3 4

anaconda:~# passwd guest Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully

CAPITOLUL 3. GESTIUNEA PACHETELOR S , I UTILIZATORILOR

55

3.1.1

UID, GID

Fiecarui utilizator din sistem i este asociat un identicator numit UID (User Identier). ntreg ce poate lua valori ntre 0 s UID este un numar , i 32767 sau 65535, funct , ie de pentru utilizatorul root. distribut , ie. Valoarea 0 este rezervata identitatea unui utilizator sistemul de operare foloses Pentru a gasi , te UID, s , i nu numele n s utilizatorului. De aceea, daca , 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 organizat , i n grupuri. n acest fel se pot administrative mai us realiza diverse congurari , or, aplicndu-se politici la nivelul ntregului grup s Un grup poate cont Un , i nu per utilizator. , ine mai mult , i utilizatori. utilizator poate face parte din mai multe grupuri. un identicator, numit GID (Group Pentru ecare grup sistemul de operare asociaza ntreg ce poate lua valori ntre 0 s Identier). Acest identicator este un numar , i 32767 poate sa difere n funct (limita superioara , 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 identica un anumit grup s i nu numele grupului. ,

3.1.2

Adaugarea s , i s , tergerea utilizatorilor

doar de root, n doua moduri. Primul dintre Adaugarea unui utilizator poate realizata ele este utilizarea comenzii useradd. Utilizarea acestei comenzi este greoaie, motiv n mod uzual cu ajutorul comenzii pentru care adaugarea unui utilizator se realizeaza la rndul lui useradd. adduser. adduser este un script care apeleaza Apelarea adduser se poate realiza cu urmatorii parametri:
1

adduser [options] [--home DIR] [--shell|-s SHELL] [--no-create-home ] [--uid ID] [--firstuid ID] [--lastuid ID] [--ingroup GROUP | --gid ID] [--disabled-password] [--disabled-login] [--gecos GECOS] [-add_extra_groups] user

adduser este apelat doar cu numele utilizatorului ce va creat, el va porni un Daca contului: asistent care va cere toate datele necesare crearii
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

root@asgard:/home/george# adduser uso Adding user uso ... Adding new group uso (1001) ... Adding new user uso (1001) with group uso ... Creating home directory /home/uso ... Copying files from /etc/skel ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for uso Enter the new value, or press ENTER for the default

56
17 18 19 20 21 22 23 24

INTRODUCERE N SISTEME DE OPERARE

Full Name []: uso Room Number []: EG306 Work Phone []: Home Phone []: Other []: Is the information correct? [y/N] y root@asgard:/home/george#

Din motive de securitate caracterele tastate n dreptul parolei nu vor as , ate. La crearea unui utilizator este creat s , i un grup cu acelas , i nume la care este adaugat utilizatorul creat. Stergerea unui utilizator se poate realiza cu userdel sau cu deluser (deluser este la rndul lui userdel): un script care apeleaza
1 2 3 4

root@asgard:/home/george# deluser uso Removing user uso ... 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 la rndul lui cu ajutorul comenzii addgroup. addgroup este un script care apeleaza groupadd.
1 2 3 4

root@asgard:/home/george# addgroup usogroup Adding group usogroup (GID 1002) ... Done.

tot prin doua comenzi, groupdel s Stergerea unui grup de utilizatori se realizeaza ,i groupdel). delgroup (delgroup este un script care apeleaza
1 2 3 4

root@asgard:/home/george# delgroup usogroup Removing group usogroup ... Done.

3.1.4

Modicarea datelor unui utilizator

cu ajutorul comenzii usermod. Aceasta Modicarea datelor unui utilizator se realizeaza permite modicarea grupului din care face parte un utilizator, a directorului de baza (home), a numelui de utilizator, a parolei etc. al utilizatorului george se foloses De exemplu, pentru modica directorul de baza , te opt iunea -d : ,
1 2 3 4 5

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

CAPITOLUL 3. GESTIUNEA PACHETELOR S , I UTILIZATORILOR


6 7 8 9 10 11 12 13 14 15 16 17 18 19

57

uso@asgard:~$ sudo su root@asgard:/home/uso# usermod -d /home/usodir/ uso root@asgard:/home/uso# exit exit uso@asgard:~$ exit uso@asgard:~$ pwd /home/uso uso@asgard:~$

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

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

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


1 2 3 4

root@asgard:/home/uso# passwd uso Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully

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

3.1.5

Adaugarea s , i s , tergerea utilizatorilor

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

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

58
14 15 16 17 18 19 20 21 22 23 24 25 26

INTRODUCERE N SISTEME DE OPERARE

Work Phone []: Home Phone []: Other []: Is the information correct? [y/N] y root@anaconda:~# id test uid=1003(test) gid=1038(test) groups=1038(test) root@anaconda:~# deluser --remove-home test Looking for files to backup/remove ... Removing files ... Removing user test ... Done.

Avantajul s n acelas timp, dezavantajul folosirii comenzii adduser este , i, ,i interactivitatea. Automatizarea sarcinilor presupune comenzi non-interactive. Pentru aceasta, se pot folosi comenzile useradd, userdel s useradd, , i usermod. respectiv userdel sunt folosite de scripturile adduser s , i deluser.
1 2 3 4 5 6 7 8 9 10 11

root@anaconda:~# useradd -m -d /home/test test root@anaconda:~# id test uid=1116(test) gid=1116(test) groups=1116(test) root@anaconda:~# usermod -s /bin/sh test root@anaconda:~# userdel -r test root@anaconda:~# id test id: test: No such user

3.2

Gestiunea pachetelor

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

CAPITOLUL 3. GESTIUNEA PACHETELOR S , I UTILIZATORILOR

59

Aplicat s , ii front-end peste PMS pot interoga depozitele s , i pot descarca , i instala noi pachete. diverse formate de pachete, cele mai cunoscute ind formatul DEB, n lumea Linux exista specic distribut , iilor Debian-based s , i formatul RPM folosit de Fedora/RedHat, Mandriva, SuSE, etc. Fiecare format are propriul PMS. Utilitarul alien1 permite conversia ntre diverse formate de pachete.

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

listarea cont, inutului unui pachet


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

root@anaconda:/tmp# dpkg -L coreutils /. /bin /bin/mkdir /bin/mv /bin/true /bin/mknod /bin/sleep /bin/touch /bin/chgrp /bin/uname /bin/echo /bin/sync [...]

as nume se potrives , area pachetelor al caror , te cu o expresie regulata


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

root@anaconda:/tmp# dpkg -l linux* Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Installed/Config-files/Unpacked/Failed-config/Halfinstalled |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) ||/ Name Version Description +++-==============-==============-=================================== un linux un linux-doc-2.6. un linux-gnu un linux-image un linux-image-2. ii linux-image-2. Cele [...] <none> <none> <none> <none> <none> 2.6.18+6etch3 (no description available) (no description available) (no description available) (no description available) (no description available) Linux kernel 2.6 image on Ppro/

cautarea pachetului ce cont , ine un anumit s , ier


1 2
1

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

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

60

INTRODUCERE N SISTEME DE OPERARE

cea mai mare parte a acestor act n mod obis , nuit, nsa, , iuni vor realizate prin intermediul utilitarului APT (Advanced Packaging Tool ). APT este un front-end peste dpkg s , i permite interogarea depozitelor de pachete congurate, vericarea dependent elor, desc arcarea , a pachetelor din repository, actualizarea acestora, upgrade-ul unei distribut automata , ii etc. Fis , ierul de congurare a unui depozit DEB pentru folosirea cu APT este /etc/apt/sources.list:
1 2 3 4

root@anaconda:/tmp# cat /etc/apt/sources.list [...] deb http://ftp.lug.ro/debian etch main contrib non-free deb-src http://ftp.lug.ro/debian etch main contrib non-free

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

actualizarea listei de pachete


1 2 3 4 5 6 7 8 9 10 11

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

cautarea de pachete
1 2 3 4

root@anaconda:/tmp# apt-cache search hevea hevea - translates from LaTeX to HTML, info, or text lyx - High Level Word Processor hevea-doc - HeVeA documentation

as , area de informat , ii despre un s , ier


1 2 3 4 5 6 7 8

root@anaconda:/tmp# apt-cache show hevea Package: hevea Priority: optional Section: tex Installed-Size: 2125 Maintainer: Debian OCaml Maintainers <debian-ocaml-maint@lists. debian.org> Architecture: all Version: 1.09-3

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


1 2 3 4 5 6 7 8

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

CAPITOLUL 3. GESTIUNEA PACHETELOR S , I UTILIZATORILOR


9 10 11

61

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

dezinstalarea unui pachet


1 2 3 4 5

anaconda:/tmp# apt-get remove --purge apt-file Reading package lists... Done Building dependency tree... Done The following packages will be REMOVED apt-file*

, area cache-ului local de pachete curat


1 2 3 4 5 6 7 8 9

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

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

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

listarea repository-urilor din care face parte un pachet, versiunea disponibila, versiunile candidate etc.
1 2 3 4 5 6 7 8 9 10 11

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

62 PPA

INTRODUCERE N SISTEME DE OPERARE

s Exista conceptul de Personal Package Archives, un sistem ce-i permite ,i , i ncarce pachetele proprii pentru a incluse n update-urile programatorului sa-s ulterioare de pachete, ind astfel mai us utilizatorii nali. Astfel, , or distribuite catre acesta va putea instala programul scris de altcineva ca pe un pachet normal. Totus oarecum. , i, pentru a preveni problemele de securitate, acest lucru nu poate facut n continuare vom enumera pas , ii necesari pentru a putea instala programe dintr-un PPA, a unor compilatoare. numit someone561 necesar pentru a instala o versiune mai recenta 1. Vom crea un s , ier nou cu un cont , inut s , i o locat , ie ca mai jos pentru a oferi detalii cu privire la adresa de unde se vor descarca pachetele
1 2 3

mihai@keldon:/tmp# cat /etc/apt/sources.list.d/haskell.list deb http://ppa.launchpad.net/someone561/ppa/ubuntu jaunty main deb-src http://ppa.launchpad.net/someone561/ppa/ubuntu jaunty main

(se va schimba jaunty cu numele versiunii distribut , iei folosite) n autenticarea acestui PPA. Des a s 2. Pasul urmator consta , i poate facut , i prin editarea unui s ier sau este opt ional a, acest lucru nu este recomandat. Se prefer a , , folosirea urmatoarei comenzi:
1

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

un cod unic de autenticare al posesorului unde ultimul argument reprezinta nu dorim sa realizam autenticarea vom avea mereu mesaje de PPA-ului. Daca unor pachete din aceste repository-uri. avertisment n cazul instalarii 3. Ultimul pas va consta n reactualizarea cache-ului local de pachete s , i instalarea pachetelor din acest PPA
1 2 3 4

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

update-alternatives Linux, este un caz obis existe mai multe programe avnd n timpul rularii , nuit sa 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. problema este accentuata de faptul ca exista multe programe ce vor apela alte Aceasta un nume de exemplu, multe programe permit utilizatorilor sa editeze programe dupa a a ele nsele un editor. Ar trebui deci rulat un alt editor din sistem, dar care un s , ier, far din ele? Un exemplu ar managementul taskurilor utiliznd cron. de aplicat de alte programe, este Prin urmare, pentru o clasa , ii care pot folosi o suita simpla ar nevoie de o modalitate de a congura variante alternative. O varianta folosirea unor variabile de mediu (EDITOR de exemplu).

CAPITOLUL 3. GESTIUNEA PACHETELOR S , I UTILIZATORILOR

63

de Debian este de a avea un set de comenzi standard, precum Varianta propusa editor, www-browser, view etc. De fapt, toate acestea sunt link-uri simbolice spre comanda reala. Pentru a seta aceste link-uri, se va folosi comanda update-alternatives. Acest moduri: sistem poate funct , iona n doua automatic mode sistemul decide singur catre ce program vor indica link-urile

manual mode administratorul sistemului va decide acest lucru


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

listarea informat, iilor despre un grup


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

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

listarea tuturor t, intelor din grup

64

INTRODUCERE N SISTEME DE OPERARE

1 2 3 4 5

mihai@keldon:~# update-alternatives --list editor /usr/bin/vim.tiny /bin/ed /bin/nano /usr/bin/vim.gnome

a unei opt schimbarea interactiva , iuni


1 2 3 4 5 6 7 8 9 10

root@keldon:/home/mihai# update-alternatives --config www-browser There are 2 alternatives which provide www-browser. Selection Alternative ----------------------------------------------1 /usr/bin/w3m + 2 /usr/bin/elinks * Press enter to keep the default[*], or type selection number:

schimbarea unui link simbolic (neinteractiv)


1 2

root@keldon:/home/mihai# update-alternatives --set www-browser /usr/ bin/elinks Using /usr/bin/elinks to provide www-browser.

Pentru congurarea tuturor alternativelor se foloses update-alternatives , te

--all

3.3
3.3.1

Studii de caz
Fis , ierele n care sunt stocate informat , ii despre utilizatori

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

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

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

UID GID Informat, ii legate de utilizator (Nume, Adresa, Telefon)


(directorul home) Directorul de baza

CAPITOLUL 3. GESTIUNEA PACHETELOR S , I UTILIZATORILOR

65

Shell -ul folosit


Un exemplu de s , ier /etc/passwd este:
1 2 3 4 5 6

root@asgard:/home/george# cat /etc/passwd [...] sync:x:4:65534:sync:/bin:/bin/sync george:x:1000:1000:George,,,:/home/george:/bin/bash uso:x:1001:1001:uso,EG306,,:/home/uso:/bin/bash [...]

a ce atacurile Init , ial, tot n s , 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 s , ier cu permisiuni 600 numit /etc/shadow. Fis , ierul /etc/shadow cont , ine s , i el cte o linie pentru ecare utilizator. Pe ecare linie , ite prin caracterul :. Cmpurile sunt (n ordinea n care se gasesc opt cmpuri despart apar n s ier): ,

Numele de utilizator
n loc de parola se aa un caracter !, utilizatorul Parola n format criptat. Daca respectiv nu se poate autentica n sistem ultima schimbare de parola (data este notata n Data la care a fost realizata numarul de zile trecute de la 1 ianuarie 1970) schimbari de parola Numarul minim de zile care pot trece ntre doua Numarul maxim de zile pentru care parola este activa s Cu cte zile nainte de expirarea parolei este anunt, at utilizatorul sa , i shimbe parola expirarea parolei pna cnd contul va dezactivat Numarul de zile care trec dupa n numarul Data la care contul va expira (data este notata de zile trecute de la 1 ianuarie 1970)
1 Criptarea parolei se face folosind o funct , ie de hash, n general MD5 , dar, de preferat, SHA-22 . Aceste funct , ii sunt one-way, deci nu se poate aa parola simplu nici macar de utilizator este folosind /etc/shadow. La ecare autenticare, parola introdusa prin algoritmul de hash s cu valoarea din /etc/shadow. trecuta , i comparata

Mai multe detalii despre criptarea parolei se poat aa din pagina de manual a comenzii crypt. Un exemplu de s , ier /etc/shadow este:
1 2 3 4 5 6 7 8

root@asgard:/home/georgedir/# cat /etc/shadow root:!:13774:0:99999:7::: daemon:*:13620:0:99999:7::: bin:*:13620:0:99999:7::: sys:*:13620:0:99999:7::: sync:*:13620:0:99999:7::: george:$1$LBNk03w4$4O2R/uMfCs/R9LOmH6zDG0:13774:0:99999:7::: uso:$1$IPSj/ETo$1Uqe1Nrqm0r4LYdMihh6x1:13775:0:99999:7:::
1 2

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

66
9

INTRODUCERE N SISTEME DE OPERARE

[...]

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

Numele grupului Parola (cmp ce nu mai este folosit) GID


de utilizatorul care are acelas Numele utilizatorilor ce fac parte din grup, n afara ,i nume cu numele grupului Un exemplu de s , ier /etc/group este:
1 2 3 4 5 6 7

root@asgard:/home/georgedir/# cat /etc/group root:x:0: lp:x:7:cupsys scanner:x:104:cupsys,hplip,george george:x:1000: uso:x:1001: [...]

3.3.2

Actualizarea unui sistem Debian sau Ubuntu

posibilitatea de a actualiza toate pachetele instalate pe un sistem Utilitarul apt ofera care foloses , te pachete de tip .deb. lista locala de pachete este actualizata. Primul pas n acest sens este asigurarea ca aceasta operat Acest lucru se face folosind apt-get update. Dupa , ie, utilizatorul are alternative pentru instalarea celor mai noi pachete disponibile: doua toate pachetele care pot actualizate far a a apt-get upgrade actualizeaza instala sau dezinstala alte pachete. Este, din acest motiv, alternativa mai pentru ca nu introduce dependent conservativa, adit s nici nu ,e , ionale, ,i programe potent dezinstaleaza , ial utilizate; sau dezinstaleaza apt-get dist-upgrade este mai agresiv s , i instaleaza cum dependent pachete dupa De asemenea, aceasta , ele versiunilor noi cer. 1 comanda solut ntr-un mod inteligent, adica, n , ioneaza eventualele conicte mai important. cazul unui conict, va actualiza pachetul pe care l considera o comanda utila dupa un upgrade este apt-get autoremove. n cele din urma, Aceasta va dezinstala pachetele care nu au fost instalate explicit de utilizator, dar nici nu mai sunt necesare niciunui pachet actual.

Cuvinte cheie

utilizator grup

uid gid

1 pachete cer explicit versiuni diferite dintr-un al treilea, ori cnd unul cere Un conict apare cnd doua instalarea, iar celalalt dezinstalarea.

CAPITOLUL 3. GESTIUNEA PACHETELOR S , I UTILIZATORILOR

67

root id nger /etc/passwd /etc/shadow /etc/group passwd su adduser, deluser useradd, userdel pachet

Package Mangement System DEB, RPM /etc/apt/sources.list depozit (repository ) apt dpkg
dependent, a

instalare, dezinstalare actualizare (update) upgrade

ntrebari pentru adaugarea a unui utilizator n 1. Care este comanda folosita non-interactiva sistem?

K adduser K useradd K newuser K finger


2. De ce nu sunt t , inute hash-urile parolelor n s , ierul /etc/passwd? K /etc/passwd se poate aa pe o partit, ie nesigura. securitate maxima. K permisiunile asupra /etc/passwd nu asigura K ntrebarea este o capcana, /etc/passwd. n hash-urile parolelor chiar se aa

K /etc/passwd nu poate modicat cu ajutorul comenzii passwd, de aceea


este nevoie de un s , ier cu permisiuni speciale. a despre sistemele de pachete? 3. Care dintre urmatoarele armat , ii este adevarat

K rpm este bazat pe apt K dpkg este un wrapper peste apt K apt este un wrapper peste dpkg K sistemele Red Hat folosesc dpkg
programele 4. Care este mecanismul prin care update-alternatives schimba folosite pentru anumite task-uri? K legaturi simbolice

68 K legaturi hard

INTRODUCERE N SISTEME DE OPERARE

K instalare s , i dezinstalare on-demand a pachetelor


cnd programul este K script-uri wrapper care citesc congurat, ia de ecare data alternativa corespunzatoare rulat s , i lanseaza n /etc/passwd? 5. Care dintre urmatoarele informat , ii NU este ret , inuta

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

K poate nlocui n ntregime repository-urile centrale K este inerent nesigur s , i nu poate protejat K poate folosit de orice distribut, ie

Capitolul 4 Sisteme de s , iere


The Unix le system. Sure it corrupts your data, but look how fast it is!

din acest capitol? Ce se nvat ,a sistemele de s Ce sunt s , i cum se utilizeaza , iere

Tipuri de sisteme de s , iere


Utilizarea cailor relative s , i absolute

Lucrul cu s , iere (creare, copiere, mutare etc.) Descriptori de s , iere Redirectarea comenzilor n s , iere Arhivarea s , i dezarhivarea Drepturi de acces la s , iere
Cititorii familiarizat , i cu not , iunile de s , ier, sisteme de s , iere s , i cu terminologia asociata pot porni direct de la sect iunea 4.3, continund apoi cu analiza detaliat a a sistemelor de , s , iere.

4.1
4.1.1

Not , iuni introductive


Ce este un sistem de s , iere

a unei informat Fis , ii sub forma unei ns , iruiri de , ierul (le ) este reprezentarea logica octet i. Fis ierul poate considerat ca ind versiunea electronic a a documentului scris. , ,

69

70

INTRODUCERE N SISTEME DE OPERARE

s Directorul (directory ) este o entitate n care se pot regasi , iere s , i/sau alte a dosarului. directoare. Acesta poate considerat versiunea electronica n interfet , ele grace, directorul este de obicei denumit folder. informat Fis Mediile de stocare pot , ierele organizeaza , iile pe mediile de stocare. mai multe s considerate spat , ii continue de octet , i. n aceste spat , ii, se pot regasi , iere, de dimensiuni variabile. modul de organizare a s Sistemul de s , ierelor pe un mediu de , iere reprezinta stocare pentru a le face mai us , or accesibile. Organizarea include att partea logica (modul n care sunt adresate s ierele) ct s i partea zic a (modul n care sunt stocate , , s , ierele ca ns , iruire de octet , i). a sistemului de operare, sistemul de s Fiind o componenta , iere ment , ine numele s ,i atributele s ierelor s i permite stocarea lor ntr-o ierarhie de directoare numit a s i arbore , , , de directoare. poata avea acces la s o interfat Pentru ca utilizatorii sa , iere, sistemul de operare ofera ,a pentru lucrul cu sistemul de s iere. Aceast a interfat a poate una textual a n mod text , , cum este interpretorul de comenzi, sau o interfat a grac a. , se Orice mediu de stocare poate utilizat pentru scrierea s , i citirea de s , iere daca cunoas , te sistemul de s , iere utilizat pentru organizare. aceste Sistemele de operare folosesc s , ierele pentru a organiza date, indiferent daca date sunt ale utilizatorului sau sunt generate pe moment de sistem. , te ntr-un s Spre exemplu, n Linux s , i n Mac OS X, orice informat , ie se gases , ier: datele se regasesc n s , iere; directoarele sunt s , i ele s , iere, dar cu atributul de director; ecare dispozitiv poate accesat printr-un s ier, inclusiv mouse-ul, memoria s , , i placa video. aseman atoare Intern, Windows foloses structurii de s , te o schema , iere s , i directoare structura nu se suprapune peste structura pentru a denumi dispozitivele, dar aceasta de s iere precum n Linux s i n Mac OS. , ,

4.1.2

Ierarhia sistemului de s , iere

organizeze datele ntr-un mod accesibil. Sistemele de s , iere permit utilizatorului sa pentru organizarea s Structura cel mai des ntlnita , ierelor este arborele. Tabelele de structura ierarhica din sistemele de operare cele mai cunoscute. mai jos prezinta , te o reprezentare graca part pentru o ierarhie dintr-un sistem n Tabela 4.1 se gases , iala acin a (/) se regasesc de s directoarele home, bin, usr . . ., n , iere n Linux. n rad home se regasesc directoarele ubuntu s i myuser s , , .a.m.d. pentru directoarele Comparativ cu Linux, structura n Windows este mult mai simpla acin a. n schimb, o mare parte din directoarele importante se ascund aate imediat n rad n directorul Windows.

CAPITOLUL 4. SISTEME DE FIS , IERE Tabelul 4.1: Ierarhia ntr-un sistem de s , iere din mediul Unix Director Cont , inut

71

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

/var

acin a directorul rad comenzi esent necesare boot-arii, ntret s , iale , inerii ,i sistemului depanarii precum imaginea kernel-ului s iere necesare boot-arii, , s speciale utilizate pentru accesul direct la , iere dispozitivele hardware sau logice ale sistemului s , iere pentru congurarea sistemului, precum inittab, fstab s , i hosts s ecarui utilizator din sistem datele unui , ierele utilizator se gasesc n /home/username unitat , ile optice, oppy subdirectoare n care se monteaza etc. alte sisteme de s subdirectoare n care se monteaza , iere pachete de aplicat , ii de dimensiuni mari, accesibile tuturor utilizatorilor sistem virtual de s , iere din care se obt , in informat , ii despre la un moment dat sistem s , i aplicat , iile care ruleaza directorul home al utilizatorului root accesibile numai utilizatorului root comenzi de baza s , iere temporare aplicat , ii pentru uzul normal al sistemului de operare /usr/local cont, ine aplicat, iile instalate/compilate de utilizator foarte des, precum s cont , iere al caror , inut se schimba log-uri, s iere temporare, cache (date reutilizabile), spool , (date neprocesate)

Figura 4.1: Ierarhia sistemului de s , iere n Linux

72

INTRODUCERE N SISTEME DE OPERARE Tabelul 4.2: Ierarhia ntr-un sistem de s , iere din mediul Windows XP Director Cont , inut

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

acin a directorul rad Windows-ul s , i s , ierele aferente congurarile utilizatorilor s date ,i specice acestora Aplicat , ii drivere s s de congurare ,i , iere Windows datele unui utilizator (aceasta este ea poate modicata) calea implicita,

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

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


oppy disk-uri); exista mai multe partit litere n C: partit, ie de pe hard disk; daca , ii se asociaza ordine pentru ecare dintre ele; disponibila dupa ce s-au asociat litere D: CD-ROM/DVD-ROM (urmatoarea litera partit , iilor de pe hard disk(uri)). cum s-a precizat anterior, pe o partit Dupa , ie poate exista un singur sistem de s , iere la un moment dat. De obicei, sistemele de s iere cu suport zic se g asesc pe o singur a , Windows aloca literele dupa partit sistemul partit , ie. Trebuie ment , ionat faptul ca , ii, nu dupa de s iere. Astfel, dac a sistemul de s iere de pe o partit ie se schimb a, acesta va avea , , , tot litera C:. asociata o analogie ntre caile importante din sistemele de operare majore Tabelul 4.3 prezinta existente n prezent.

4.1.3

relative s absolute Cai , i cai

doua moduri prin care se poate accesa un s Exista , ier sau un director: folosind o cale sau o cale relativa. absoluta este calea care ncepe cu directorul rad acin a al sistemului de s Calea absoluta , iere n cazul Linux/Mac OS X este /; n cazul Windows este C:, D: etc. este acea cale care indica spre un s Calea relativa , ier pornind de la directorul curent. directoare speciale: Fiecare director cont , ine doua spre acelas . (punct) indica , i director (directorul curent); spre directorul parinte. .. (punct, punct) indica

CAPITOLUL 4. SISTEME DE FIS , IERE sistemelor de operare Tabelul 4.3: Comparat , ie ntre caile Windows Linux Mac OS X

73

Descriere radacina director home

C: C:\Documents and Settings\ username


(WinXP),

/ / /home/username /Users/ username

aplicat , ii

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

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


directoare specice ecarei aplicat , ii, aate n home-ul utilizatorului; /etc

congurari sistemului

ale

Windows Registry

/Users/ username/ Library; /etc

se dores Astfel, daca care indica , te urcarea n ierarhia de s , iere, se foloses , te .. , 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: directorul curent; comanda pwd (print working directory ) as , eaza

comanda

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

cd ../../..

1 2 3 4 5 6 7

ubuntu@ubuntu:~/cs/uso$ pwd /home/ubuntu/cs/uso ubuntu@ubuntu:~/cs/uso$ cd ../../.. 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 aate n directorul curent. s Spre exemplu, comanda de mai jos executa , ierul poata executat de program_din_directorul_curent acest s , ier trebuie sa utilizatorul curent.
1

ubuntu@ubuntu:~$ ./program_din_directorul_curent

74

INTRODUCERE N SISTEME DE OPERARE

Pentru mai multe exemple de utilizare a cailor relative s , i absolute se poate consulta sect , iunea 4.4.

4.1.4

Variabila de mediu PATH

specicarea caii n mod normal, pentru execut , ia programelor uzuale, nu este necesara variabile de complete sau schimbarea directorului. Sistemele de operare utilizeaza mediu (environment variables) pentru a stoca diferite informat , ii. PATH este o variabila de mediu care cont uzuale unde se gasesc programe. Programele care , ine lista cailor din PATH pot executate far a a preciza calea catre se gasesc n oricare din caile ele. Mai multe informat n , ii despre variabile de mediu s , i modicarea acestora se regasesc sect iunea 12.10.1. , Pentru a as , a variabila de mediu PATH ntr-un mediu Linux/Mac OS X se utilizeaza comanda:
1 2

ubuntu@ubuntu:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

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

C:> echo %PATH% C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem

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

4.2
4.2.1

Tipuri de s , iere
Terminologie

Sistemele de s , iere pun la dispozit , ie utilizatorilor diferite forme logice de organizare s ,i de s acces la date, binent , eles sub forma , iere. de directoare s n afara , i s , iere, sistemul de s , iere pune la dispozit , ia utilizatorului s ,i legaturi (link-uri). posibilitatea utilizarii mai multor tipuri de Astfel, sistemele de s , iere moderne ofera s , iere, prezentate n tabelul 4.4. Tabelul 4.4: Tipuri de s , iere Denumire tip n engleza regular les directories/folders symbolic links

Tipuri s , ier s , iere normale directoare legaturi simbolice

Descriere

de acces la date unitate logica s organizeaza iere s , , i alte directoare legatura catre un alt s , ier

posibilitatea de a crea legaturi Exista att pentru s , iere ct s , i pentru directoare n , i sunt s la fond, ambele entitat iere (dar cu atribute diferite). Leg aturile se utilizeaza ,

CAPITOLUL 4. SISTEME DE FIS , IERE

75

cu sistemul de s scriere/citire la fel s , ierele normale. Sistemul de operare mpreuna , iere se ocupa transparent de traducerea acestora n s , iere normale pentru aplicat , ii. exemple de Link-urile sunt create cu ajutorul comenzii ln. Mai jos sunt prezentate doua un link al s folosire. n primul exemplu se creeaza , ierului /etc/apt/sources.list, iar apoi la un s ier local precizndu-se un nou nume pentru link. ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

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

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

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

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

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

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

4.2.2

Detect , ia tipului s , ierelor

pe vericarea extensiei. n Pe sistemele Windows, detect , ia tipului s , ierelor se bazeaza pentru a funct ie de aceasta, sistemul de operare determin a care aplicat , , ie este potrivita deschide un s , ier. prin intermediul comenzii Pe sistemele Linux, detect , ia tipului s , ierelor este realizata un s file. Aceasta utilizeaza , ier special de congurare n care sunt nscrise secvent ,e independent de de octet n diferite tipuri de s , i care se regasesc , iere. file lucreaza extensia s ierului, precum este dovedit n exemplele urm atoare: ,
1 2 3 4 5 6 7

ubuntu@ubuntu:~$ file photo.jpg photo.jpg: JPEG image data, JFIF standard 1.01 ubuntu@ubuntu:~$ mv photo.jpg fisier.txt ubuntu@ubuntu:~$ file fisier.txt photo.txt: JPEG image data, JFIF standard 1.01

76

INTRODUCERE N SISTEME DE OPERARE

4.3
4.3.1

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


As , area s , i schimbarea directorului curent

calea absoluta catre Comanda pwd as directorul curent. De asemenea, prompt-ul , eaza bash cont , ine implicit directorul curent. Pentru a schimba directorul curent se foloses , te e o cale absoluta sau relativa. comanda cd <cale>. Calea poate sa , te un exemplu de folosire a comenzilor pwd s la Mai jos se gases , i cd a se observa ca s ecare schimbare de director se modica i prompt-ul bash. Ierarhia de directoare prin , este cea prezentata anterior. care se navigheaza
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

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

Observat , ii: directorul n directorul parinte; cd .. schimba

CAPITOLUL 4. SISTEME DE FIS , IERE la directorul curent, deci cd . nu modica directorul; . (punct) este o referint, a

77

~ este echivalentul directorului home pentru utilizatorul curent (cd ~);


a parametri schimba directorul n directorul home; cd apelat far directorul n directorul anterior. cd - schimba

4.3.2

As , area cont , inutului s , ierelor

Cont , inutul unui s , ier poate as , at pe ecran prin intermediul comenzii cat. Sintaxa acestei comenzi este cat <nume fis , ier>. Un exemplu de utilizare este:
1 2 3 4

ubuntu@ubuntu:~$ cat /etc/resolv.conf # Generated by dhcpcd for interface eth0 search localdomain nameserver 192.168.0.1

comanda as tot s acesta este mai mare de un ecran. Aceasta , eaza , ierul, inclusiv daca Pentru a putea naviga prin output-ul unei comenzi (n cazul acesta, al comenzii cat), se pot folosi comenzile more sau less. direct more permite navigarea doar intr-o singura sfrs , ie (de la nceput catre , itul s ierului) s i cte un ecran odat a, pe cnd less permite navigarea n ambele direct , , , ii, numele de paginatoare (pagere). cte o linie, la fel ca un editor. more s , i less poarta atoare Interfat cu cea a editorului Vim (vezi sect , a less este foarte aseman , iunea 14.3).
1 2 3

ubuntu@ubuntu:~$ cat /etc/X11/xorg.conf | more ubuntu@ubuntu:~$ cat /etc/X11/xorg.conf | less

4.3.3

Listarea cont , inutului unui director

operat asupra directoarelor este listarea. Comanda Cea mai frecventa , ie care se executa este ls. n aceasta sect utilizata , iune, prin s , ier nt , elegem orice tip de s , 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 listarea cont lipses , te calea, se realizeaza , inutului directorului curent. sunt: Opt , iunile cele mai des folosite cu aceasta comanda informat -l as , eaza , ii detaliate despre ecare s , ier/director (data modicare, dimensiune, utilizator, grup, drepturi de acces); s -a as , eaza , i s , ierele care ncep cu . (caracterul punct); n Unix, aceste s , iere sunt considerate de majoritatea interfet , elor cu utilizatorul ca ind s , iere ascunse; dimensiunea s -h as n format human-readable, , eaza , ierelor respectiv dimensiunea n octet i este nlocuit a cu dimensiunea n , depas , es Kilooctet , i/Megaoctet , i/Gigaoctet , i daca , te un anumit ordin de marime.

cont Formatul utilizat la as , area detaliata , ine mai multe informat , ii despre acel s , ier:

78

INTRODUCERE N SISTEME DE OPERARE

1 2

ubuntu@ubuntu:~$ ls -l /home/myuser/myapp -rwxr----- 1 myuser users 1176348 2007-03-03 20:28 /home/myuser/myapp

Semnicat , ia coloanelor as , ate este: tipul s primul caracter reprezinta , ierului: - = s , ier normal d = director p = pipe b = dispozitiv bloc c = dispozitiv caracter a simbolica l = legatur 3 grupuri de cte 3 caractere (rwx) care reprezinta drepturile de acces urmeaza pentru utilizatorul myuser (care este det in atorul s ierului), drepturile de acces , , pentru utilizatorii care fac parte din grupul users (care det , ine s , ierul), drepturile de acces pentru ceilat , i utilizatori; mai multe detalii despre drepturile de acces se gasesc n sect , iunea 4.5; numarul de link-uri catre s , ier 1;

utilizatorul ce det, ine s , ierul - myuser; grupul de care apart, ine s , ierul users; dimensiunea s , ierului 1176348; data s , ierului 2007-03-03; ora s , ierului 20:28; numele s , ierului /home/myuser/myapp.
cteva utilizari mai ntlnite pentru comanda ls care Exemplele urmatoare prezinta parametrii prezentat combina i anterior: ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

ubuntu@ubuntu:~$ ls Desktop ubuntu@ubuntu:~$ ls ~ Desktop ubuntu@ubuntu:~$ ls -l ~ total 0 drwxr-xr-x 2 ubuntu ubuntu 100 2007-09-03 13:15 Desktop ubuntu@ubuntu:~$ ls total 56 drwxr-xr-x 7 ubuntu drwxr-xr-x 3 root -rw------- 1 ubuntu -rw-r--r-- 1 ubuntu drwxr-xr-x 2 ubuntu -rw-r--r-- 1 ubuntu -rw------- 1 ubuntu -al ubuntu 580 2007-09-03 19:58 . root 60 2007-09-03 06:14 .. ubuntu 34 2007-09-03 19:58 .bash_history ubuntu 2346 2007-09-03 06:14 .bashrc ubuntu 100 2007-09-03 13:15 Desktop ubuntu 566 2007-09-03 06:14 .profile ubuntu 9524 2007-09-03 17:40 .xsession-errors

CAPITOLUL 4. SISTEME DE FIS , IERE


20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

79

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

ubuntu@ubuntu:~$ ls ../../ bin dev initrd media boot etc initrd.img mnt cdrom home lib opt ubuntu@ubuntu:~$ ls . boot etc .. cdrom home bin dev initrd -a / initrd.img lib media

proc rofs root

sbin srv sys

tmp usr var

vmlinuz

mnt opt proc

rofs root sbin

srv sys tmp

usr var vmlinuz

Observat , ii: se dores scrierea daca , te as , area cont , inutului directorului curent, nu este necesara ca parametru pentru comanda ls; caii lista detaliata a s ls -al as , eaza , ierelor din directorul home al utilizatorului ca s curent, inclusiv s , ierele ascunse (a se observa ,i . s , i .. sunt as , ate; lista detaliata a s ls -alh as , eaza , ierelor din directorul home al utilizatorului curent, utiliznd formatul human-readable pentru as , area dimensiunii s , ierelor (a se observa dimensiunea s ierului .xsession-errors ); , utilizarea lui ls cu parametru dat sub forma de cale relativa ls ../.. prezinta (directorul as at este / ); , s ca s ls -a / prezinta , ierele ascunse ale directorului / se observa , i acest director cont , ine directoarele standard . s , i ... acin a Folosind opt , iunea -R se poate as , a arborele de directoare s , i s , iere care are ca rad directorul specicat ca argument:
1 2 3 4 5

ubuntu@ubuntu:~$ ls -R dir1 dir1: dir2 fisier1 fisier2 dir1/dir2: fisier3 fisier4

Pentru mai multe opt , iuni se poate consulta ls --help sau man ls.

4.3.4

Crearea s , ierelor/directoarelor

o serie de comenzi, Pentru a crea orice entitate pe un sistem de s , iere, se utilizeaza prezentate n tabelul 4.5. Primul mod de creare a unui s A doua , ier este utiliznd comand comanda touch. se bazeaza pe o funct metoda ionalitate bash numit a redirectare n s iere (vezi , ,

80

INTRODUCERE N SISTEME DE OPERARE Tabelul 4.5: Comenzi pentru crearea s , ierelor Comanda

Entitate Fis , ier normal Director Legaturi (link-uri) Pipe-uri cu nume

touch <nume_fis , ier>, > <nume_fis , ier> mkdir <nume_director> ln -s <destinatie> [<nume_leg atur a>] mkfifo <nume_pipe>

comanda a 2-a este redirectarea ies sect Pe scurt, ceea ce realizeaza , iunea 4.4). , irii unei comenzi (nule) catre un s , ier, crendu-se astfel un s , ier gol.
1 2 3 4 5 6 7 8 9 10 11 12 13 14

ubuntu@ubuntu:~$ touch fisier1 ubuntu@ubuntu:~$ > fisier2 ubuntu@ubuntu:~$ mkdir dir1 ubuntu@ubuntu:~$ mkfifo fifo1 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

ntrebuint datei ultimei modicari s O alta , are a comenzii touch este aceea a actualizarii ,i Folosind opt a datei ultimei accesari. iunea -m se va actualiza doar data ultimei modic ari , Folosind comanda iar folosind opt , iunea -a se va actualiza doar data ultimei accesari. a aceste opt touch far iuni va duce la modicarea ambelor date. Optiunea -r poate , pentru a prelua informat folosita , iile legate de timp de la alt s , ier. modicarea timpului de acces al s n exemplul de mai jos, se observa , ierului de la valoarea 17:03 la 17:11.
1 2 3 4 5 6 7

ubuntu@ubuntu:~$ ls -al -rw-r--r-- 1 root root ubuntu@ubuntu:~$ touch fisier1 ubuntu@ubuntu:~$ ls -al -rw-r--r-- 1 root root

15 2009-08-21 17:03 fisier1

15 2009-08-21 17:11 fisier1

Exemple privind crearea de link-uri sunt prezentate n sect , iunea 4.2.1.

4.3.5

Copiere/mutare/redenumire/s , tergere

2 parametri: Copierea s , i mutarea sunt operat , ii care necesita de unde se copiaza/mut sursa a; destinat, ia unde se copiaza/mut a.

CAPITOLUL 4. SISTEME DE FIS , IERE Copierea

81

cu ajutorul comenzii cp. Sintaxa comenzii Copierea unui s , ier sau director se realizeaza este cp [opt iuni] <sursa> <destinatie> . Opt , , iunile cele mai folosite pentru copiere sunt: (copiaza s exista as -R copiere recursiva , i copiii directoarelor, presupunnd ca ,a ceva n sursa); -p copiere cu pastrare a tuturor atributelor (permisiuni, data); doar daca s este mai nou dect s -u copiaza , ierul sursa , ierul destinat , ie sau s daca , ierul destinat , ie lipses , te.
1 2 3 4 5 6 7 8 9

ubuntu@ubuntu:~$ touch f1.txt ubuntu@ubuntu:~$ ls f1.txt ubuntu@ubuntu:~$ cp f1.txt f2.txt ubuntu@ubuntu:~$ ls f1.txt f2.txt

Mutarea cu ajutorul comenzii mv. Sintaxa comenzii Mutarea unui s , ier sau director se realizeaza s este mv [opt iuni] <sursa> <destinatie> . Implicit, mutarea este recursiva , ,i atributele s pastreaz a pe aceeas , ierelor. n cazul n care sursa s , i destinat , ia se gasesc ,i partit ie, la o mutare, se schimb a doar p arintele s ierului sau directorului care se mut a. , , O operat ie de mutare este, astfel, mai put in costisitoare dect o operat , , , ie de copiere.
1 2 3 4 5 6 7 8 9 10 11 12 13

ubuntu@ubuntu:~$ pwd /tmp/q ubuntu@ubuntu:~$ ls f1.txt f2.txt ubuntu@ubuntu:~$ mv f1.txt /tmp/r ubuntu@ubuntu:~$ ls f2.txt ubuntu@ubuntu:~$ ls /tmp/r/ f1.txt

Redenumirea cu ajutorul comenzii mv, n Redenumirea este, de fapt, o mutare s , i se realizeaza urmatoarele conditii: n cazul n care sursa este un s , i destinat , ia este un s , ier s , ier, se realizeaza copierea/mutarea s , ierului cu schimbarea numelui sursei;

82

INTRODUCERE N SISTEME DE OPERARE ca director, se n cazul n care sursa este un director s , i destinat , ia nu exista realizeaza copierea/mutarea directorului cu schimbarea numelui.

1 2 3 4 5 6 7

ubuntu@ubuntu:~$ ls f2.txt ubuntu@ubuntu:~$ mv f2.txt f3.txt ubuntu@ubuntu:~$ ls f3.txt

Stergerea s , ierelor/directoarelor n Linux, comanda cea mai utilizata pentru s , tergerea s , ierelor s , i directoarelor este rm. Sintaxa comenzii este rm [opt , iuni] <cale>. pentru a s Una dintre cele mai folosite opt , iuni este -r/-R, utilizata , terge recursiv un cu atent director. Aceasta opt , iune trebuie folosita , ie pentru ca poate avea rezultate directorul care este s este negative daca ters cont ine informat , , , ii utile. O eroare celebra utilizarea comenzii rm -rf /, care s , terge recursiv totul ncepnd cu directorul acin a, fort opt rad , nd s , tergerile (datorita , iunii -f). Pentru s , tergerea directoarelor goale se poate folosi s , i rmdir.

4.3.6

Arhivarea s , ierelor s , i dezarhivarea

Arhivarea este procedeul prin care mai multe s , iere s , i directoare sunt adunate la un loc (ntr-un singur s ier), realiznd eventual s i o reducere a dimensiunii prin , , s eliminarea datelor care se repeta , i nlocuirea lor cu o serie de codicari. un dict n general, n cadrul procesului de arhivare se creeaza , ionar cu secvent , e de octet i frecvente s i o codicare a lor mai scurt a (pe mai put ini octet i). Arhiva cont ine att , , , , , dict , ionarul ct s , i cont , inutul s , ierelor dar, n loc de secvent , ele frecvente lungi, se regasesc referint e c atre dict ionar. Dac a s ierele cont in multe date care se repeta, , , , , dimensiunea unei arhive scade considerabil. cum se poate identica s exista doua etape mai Dupa , i din descrierea anterioara, importante n ceea ce prives te manevrarea s ierelor: , , se poata extrage concatenarea (lipirea) s , ierelor ntr-un s , ier mai mare, din care sa toate s , ierele s , i informat , iile despre ele; se reduca dimensiunea lui dar far a a se compresia s , ierului mare, astfel nct sa pierde din informat , ii. utilitare de arhivare care se ocupa ori de una dintre etape ori de ambele n Linux exista etape. de prima etapa. Numele utilitarului este o abreviere a tape Comanda tar se ocupa sale, rezultatul comenzii era transferat pe benzi archive, ntruct, la nceputul utilizarii magnetice.

CAPITOLUL 4. SISTEME DE FIS , IERE

83

cu informat Un s , ier .tar cont , ine s , iere necomprimate mpreuna , ii despre modul de extragere al acestora (spre exemplu: de unde pna unde se gases , te un s , ier n cadrul arhivei). Din acest motiv, un s ier .tar este de obicei mai mare dect suma tuturor , dimensiunilor s , ierelor ce sunt incluse n el. comanda: Pentru a crea o arhiva .tar, se utilizeaza
1

ubuntu@ubuntu:~$ tar cvf nume_arhiva.tar <cale>

cu parametrii: arhiva; c creeaza ce anume se arhiveaza; v as , eaza numele arhivei; f nume_arhiva.tar specica directorul/directoarele/s <cale> precizeaza , iere care vor arhivate. .tar, se utilizeaza: Pentru a dezarhiva o arhiva
1

ubuntu@ubuntu:~$ tar xvf nume_arhiva.tar [-C <cale_destinatie>]

unde: (eXtract ); x dezarhiveaza ce anume se dezarhiveaza; v as , eaza numele arhivei care se dezarhiveaza; f nume_arhiva.tar precizeaza opt -C <cale_destinatie> specica, locul unde se realizeaza , ional, dezarhivarea. un singur parametru; din acest motiv, de ecare fs , i nume_arhiva.tar se considera cnd se foloses aceasta trebuie sa data , te opt , iunea f pentru a indica un s , ier arhiva, ultima n lista de opt apara , iuni, ind urmat imediat de numele s , ierului arhiva. utilitare sunt folosite preponderent n lumea Pentru a realiza compresia unui s , ier, doua Unix: de compresie mai mica; gzip, mai rapid dar cu o rata de compresie mai mare. bzip2, mai lent dar cu o rata Comanda tar poate utiliza direct unul dintre programele de comprimare ment , ionate anterior folosind parametrul z pentru gzip sau parametrul j pentru bzip2, ca n tabelul 4.7 Tabelul 4.6: Comprimarea s , i decomprimarea folosind gzip s , i bzip2 Comprimare Decomprimare gzip bzip2

tar czvf fisier.tar.gz dir/ tar cjvf fisier.tar.bz2 dir/

tar xzvf fisier.tar.gz tar xjvf fisier.tar.bz2

opt Pe lnga , iunile de compresie/arhivare se mai pot folosi s , i alte opt , iuni. Printre cele mai a opt utile se numar drepturilor de acces n , iunea --preserve, care impune pastrarea momentul arhivarii/dezarhiv arii.

84

INTRODUCERE N SISTEME DE OPERARE

Cteva exemple de utilizare a comenzii tar pentru comprimare s , i decomprimare, n conjunct , ie cu bzip2 s , i gzip sunt prezentate mai jos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

ubuntu@ubuntu:/tmp/q$ ls f1.txt f2.txt f3.txt ubuntu@ubuntu:/tmp/q$ tar cvf arhiva.tar f*.txt f1.txt f2.txt f3.txt ubuntu@ubuntu:/tmp/q$ file arhiva.tar arhiva.tar: POSIX tar archive (GNU) ubuntu@ubuntu:/tmp/q$ gzip arhiva.tar ubuntu@ubuntu:/tmp/q$ ls arhiva.tar.gz f1.txt f2.txt

f3.txt

ubuntu@ubuntu:/tmp/q$ file arhiva.tar.gz arhiva.tar.gz: gzip compressed data, was "arhiva.tar", from Unix, last modified: Thu Sep 20 11:37:30 2007 ubuntu@ubuntu:/tmp/q$ ls arhiva.tar.gz f1.txt f2.txt

f3.txt

ubuntu@ubuntu:/tmp/q$ mv arhiva.tar.gz fisier.txt ubuntu@ubuntu:/tmp/q$ file fisier.txt fisier.txt: gzip compressed data, was "arhiva.tar", from Unix, last modified: Thu Sep 20 11:37:30 2007 ubuntu@ubuntu:/tmp/q$ ls f1.txt f2.txt f3.txt ubuntu@ubuntu:/tmp/q$ tar czvf new.tar.gz f* f1.txt f2.txt f3.txt ubuntu@ubuntu:/tmp/q$ ls f1.txt f2.txt f3.txt new.tar.gz ubuntu@ubuntu:/tmp/q$ file new.tar.gz new.tar.gz: gzip compressed data, from Unix, last modified: Thu Sep 20 11:40:02 2007 ubuntu@ubuntu:/tmp/q$ mkdir tmp ubuntu@ubuntu:/tmp/q$ mv new.tar.gz tmp/ ubuntu@ubuntu:/tmp/q$ cd tmp/ ubuntu@ubuntu:/tmp/q/tmp$ tar xvf new.tar.gz f1.txt f2.txt f3.txt ubuntu@ubuntu:/tmp/q/tmp$ ls f1.txt f2.txt f3.txt new.tar.gz

CAPITOLUL 4. SISTEME DE FIS , IERE

85

4.3.7

Backup

Backup-ul este utilizat pentru a pastra ntr-un loc separat o copie a datelor. Aceasta pentru a reface datele n cazul n care suportul original nu mai poate copie se utilizeaza folosit din orice motiv. Este una dintre cele mai utile act , iuni asupra datelor pe care toata ar bine sa o faca dar nu o face. Cteva metode de backup au fost deja lumea s , tie ca cteva metode de backup s prezentate. Tabelul urmator prezinta , i situat , iile cnd sunt ele potrivite. Tabelul 4.7: Comprimarea s , i decomprimarea folosind gzip s , i bzip2 Metoda Descriere

tar+gzip/bzip2

dd

rsync1

rdiff-backup2

foarte simplu de aplicat. Devine greu de folosit Metoda pentru dimensiuni mari de date. Permite comprimarea datelor. de sistemul de Metoda simplu de folosit s , i independenta a structurii sistemului de s intacta , iere. Permite pastrarea cnd vine vorba de recuperarea datelor. s , iere. Inexibila pentru cantitat , i mari de date. Utila atoare E aseman comenzii cp dar la care s-a adaugat suport de sincronizare intre mai multe sisteme de calcul. Permite replicarea structurii de s , iere (inclusiv permisiuni) ntre 2 sisteme de calcul. suport pentru Este un wrapper peste rsync. Adauga backup-uri incrementale. La un moment dat se realizeaza ator un backup complet pentru un director (aseman doar rsync-ului). Backup-urile incrementale salveaza n modicarile ce s-au facut de la ultimul backup pna prezent, indiferent de tipul backup-ului. n acest fel se poate reveni la orice stare anterioara, n masura n care s-a realizat cel put , in un backup incremental la acea stare.

4.4
4.4.1

de comenzi Redirectari
Descriptorii de s , ier

3 s Fiecare program n execut , ie utilizeaza , iere speciale pentru a interact , iona cu utilizatorul: locul de unde programul s stdin (standard input ) s , ier care reprezinta , i cites , te datele de intrare (de obicei tastatura); locul unde programul scrie datele stdout (standard output ) s , ier care reprezinta de ies , ire (de obicei acesta este consola curenta); locul unde programul scrie mesajele stderr (standard error ) s , ier care reprezinta de eroare (de obicei acesta este consola curenta).

86

INTRODUCERE N SISTEME DE OPERARE

3 variabile de tipul FILE * cu numele stdin, stdout s n C/C++, exista , i stderr care sunt init , ializate s , i disponibile n orice moment. Ele ndeplinesc rolurile descrise anterior s i pot folosite ca pe orice alta variabila de tipul FILE *. , Fiecare s , ier deschis de o aplicat , ie Linux are asociat un indice. Acest indice se numes , te descriptor de s ier. Fis ierele descrise anterior au descriptorii de s ier urm atori: , , ,

stdin 0 stdout 1 stderr 2


Orice s , ier deschis de aplicat , ie va avea un descriptor mai mare sau egal cu 3.

4.4.2

Redirectari

situat modice intrarea sau ies Exista , ii cnd, pentru o aplicat , ie, utilizatorul dores , te sa , irea se faca ntr-un s spre exemplu, utilizatorul dores , te ca ies , irea unui program sa , ier s , i nu sau intrarea unui program sa e un s n consola curenta, , ier s , i nu tastatura. Acest lucru se poate face doar lucrnd la nivelul descriptorilor. Cazurile ntlnite sunt prezentate n Tabela 4.8. Tabelul 4.8: Comenzi de redirectare destinat exemplu comanda , ie s , ier s , ier s , ier ies , ire (stdout) s , ier

sursa intrare (stdin) ies , ire (stdout) eroare (stderr) eroare (stderr) eroare s , i ies , ire

./program ./program ./program ./program ./program ./program

< f_in > f_out 2> f_err 2>&1 2>&1 > f_out_err &> f_out_err

sau

ca pentru a redirecta ies Se observa , irea/intrarea se folosesc semnele > (mai mare ) pentru ies exteriorul programului) s program). , ire (catre , i < (mai mic ) pentru intrare (catre Pentru redirectarea ies irii de erori se indic a descriptorul de s ier 2 . Pentru a redirecta , , catre ies , irea standard (stdout ), se foloses , te sintaxa &1. nti Pentru redirectarea ies un s , irii de erori s , i iesirii standard catre , ier, se redirecteaza ies irea de erori c atre ies irea standard folosind 2>&1 dupa care se redirecteaz a ies , , , irea o sintaxa standard catre un s Bash ofera , ier_iesire_s , i_erori. , ier >fis n cadrul operatorului &>. simplicata n comanda anterioara se trimite cont Ca exemplu de redirectare a intrarii, , inutul s , ierului continut_mail ca intrare pentru comanda mail. Se va trimite un mesaj utilizatorului user1 cu informat, iile din s , ier.
1

ubuntu@ubuntu:~$ mail user1 < continut_mail

n exemplul de mai jos se scrie lista de s , iere s , i directoare din directorul curent n s , ierul

listare.

CAPITOLUL 4. SISTEME DE FIS , IERE

87

1 2 3 4

ubuntu@ubuntu:~$ ls > listare ubuntu@ubuntu:~$ cat listare fisier1

Pentru a adauga rezultatul comenzii date la sfrs , itul s , ierului se foloses , te operatorul >>:
1 2 3 4 5

ubuntu@ubuntu:~$ date >> listare ubuntu@ubuntu:~$ cat listare fisier1 Sat Aug 22 16:07:50 EEST 2009

copierea unui s a specicarea destinat n listingul de mai jos se ncearca , ier far , iei. comanda genereaza o eroare care este scrisa n s Aceasta ierul erori : ,
1 2 3 4 5

ubuntu@ubuntu:~$ cp fisier1 2> erori ubuntu@ubuntu:~$ cat erori cp: missing destination file operand after fisier1 Try cp --help for more information.

Pentru a adauga noi mesaje de eroare la sfrs , itul s , ierului se foloses , te operatorul 2>>:
1 2 3 4 5 6 7 8

ubuntu@ubuntu:~$ cp fisier4 2>> erori ubuntu@ubuntu:~$ cat erori cp: missing destination file operand after fisier1 Try cp --help for more information. cp: missing destination file operand after fisier4 Try cp --help for more information.

Comanda de mai jos scrie s , i rezultatele s , i erorile generate de comanda ls n s , ierul specicat:
1

ubuntu@ubuntu:~$ ls fisier1 fisier4 2>&1 > rezultate

sau mai simplu:


1 2 3 4 5

ubuntu@ubuntu:~$ ls fisier1 fisier4 >& rezultate ubuntu@ubuntu:~$ cat rezultate ls: cannot access fisier4: No such file or directory fisier1

cteva exemple de redirectari folosind s Tabelul 4.9 prezinta , iere speciale:

4.5

Drepturi de acces

masur a de protect drepturile de acces la s O prima , ie a datelor o reprezinta , iere. Att timp ct un utilizator nu are drepturi de administrator pe un anumit computer, acel utilizator se supune drepturilor de acces la s , iere. drepturi ce pot congurate pentru un s a a particulariza la Tabelul 4.10 prezinta , ier, far un anumit tip de sistem de s iere. ,

88

INTRODUCERE N SISTEME DE OPERARE Tabelul 4.9: Comenzi de redirectare care folosesc s , iere speciale Comanda Efect

./program 2>/dev/null ./program 2>&1 >/dev/null > fout cat /dev/null > f_out

mesajele de la ies , irea de erori nu sunt as , ate niciun mesaj nu este as , at un s creeaza ier gol cu numele ,

f_out
un s creeaza cu acelas , ier ,i cont inut ca /dev/null , adic a un , s , ier gol

Drept citire scriere execut , ie modicare s , tergere

Tabelul 4.10: Drepturi de acces Descriere dreptul de a deschide s , i citi cont , inutul unui s , ier dreptul de a scrie ntr-un s ier , dreptul de a executa un s , ier (aplicat , ie) sau, pentru directoare, dreptul de a intra ntr-un director dreptul de a modica datele dintr-un s , ier existent dreptul de a sterge un s , ier

4.5.1

Utilizatori s , i grupuri de utilizatori vs. liste de acces

doua metode mai ntlnite pentru denirea drepturilor de acces la s Exista , iere:

drepturi de acces la nivel de utilizator/grup. liste de acces Access Control Lists (ACL).
n denirea unor Prima metoda (drepturi de acces la nivel de utilizator/grup) consta , i: drepturi pentru urmatoarele entitat

posesorul unui s , ier (user ); grupul care det, ine s , ierul (group ); tot, i ceilalt, i utilizatori (others).
metoda Un utilizator se poate aa n mai multe grupuri (vezi sect , iunea 3.1). Aceasta cale pentru denirea drepturilor de acces. Metoda ofera un nivel este cea mai folosita de protect un spat , ie sucient pentru majoritatea situat , iilor, ocupand , iu limitat. n cadrul sistemului bazat pe liste de acces, unui s , ier i se pot asocia mai mult , i utilizatori s i/sau grupuri de utilizatori. Pentru ecare dintre aceste entit at i pot congurate mai , , varianta poate privita ca o extindere a sistemului cu multe tipuri de drepturi. Aceasta e destul drepturi de acces prezentat anterior. Complexitatea poate face ca sistemul sa de greu de ntret , inut. un set de drepturi ce pot modicate pentru ecare s Fiecare sistem de s , iere ofera , ier n parte. Ca diferent e notabile ntre sistemele de s iere se pot aminti urm atoarele: , , suport pentru drepturi de acces la s doar posibilitatea FAT32 nu ofera , iere; exista schimbe acest drept; de a marca un s , ier ca read-only; orice utilizator poate sa

CAPITOLUL 4. SISTEME DE FIS , IERE

89

majoritatea sistemelor de s , iere n mediile Unix (inclusiv Mac OS X) au suport


pentru drepturi de acces bazat pe utilizator/grup s , i, folosind o extensie, pot extinse cu liste de acces;

NTFS are un sistem foarte avansat de drepturi de acces, bazat pe liste de acces
n lista unui anumit s (vezi sect a , iunea 10.6.1); pentru ecare entitate adaugat , ier pot congurate mai multe drepturi.

4.5.2

Clasicarea drepturilor de acces

Sistemele de s , iere din mediile Unix care au ca implementare standard drepturile de acces la nivel user/grup au la baza urmatorul set de drepturi de acces:

citire (read ) deschidere s , i citire de s , iere; scriere (write) creare s , i scriere de s , iere; execut , ie s , iere/intrare n directoare. , ie (execute ) execut
, i pentru care poate stabilita orice combinat n aceste sisteme de s , iere exista 3 entitat , ie a drepturilor denite mai sus:

utilizator (user ) posesorul s , ierului; grup (group) grupul de care apart, ine s , ierul; alt , ierului s , i nici nu sunt , ii (others ) utilizatorii care nu fac parte din grupul s
posesori.

4.5.3

Vizualizarea drepturilor de acces

utilizarea Pentru a vedea drepturile de acces pentru un anumit s , ier este sucienta comenzii ls cu parametrul -l. Spre exemplu, pentru a vedea drepturile de acces asupra unui s , ier, transmitem ca parametru comenzii ls direct numele s , 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: tipul s primul caracter reprezinta , ierului: - = s , ier obis , nuit d = director p = pipe b = dispozitiv bloc c = dispozitiv caracter a l = legatur

90

INTRODUCERE N SISTEME DE OPERARE drepturile de acces pentru utilizatorul urmatoarele 3 caractere (rwx) reprezinta ca utilizatorul are toate ubuntu, care este det, inatorul s , ierului; se observa drepturile (scriere/citire/execut , ie); drepturile de acces pentru utilizatorii care urmatoarele 3 caractere (r--) reprezinta ca este prezent dreptul de citire dar lipsesc fac parte din grupul users; se observa drepturile de scriere s , i execut , ie; drepturile de acces pentru utilizatorii care urmatoarele 3 caractere (---) reprezinta nu sunt ubuntu s , i nici nu fac parte din grupul users; acest utilizatori nu au niciun drept.

doua moduri de reprezentare a drepturilor: Exista numerica n baza 8 care descrie : pentru ecare entitate exista o cifra n forma drepturile, cte un bit pentru ecare drept; literala : drepturile sunt referite direct prin init n forma , iala lor, pentru ecare tip de entitate. Astfel, pentru exemplul de mai sus, avem drepturile:

rwxr----- n forma listing;


111100000 n forma binara; 740 n forma octala; u=rwx,g=r n forma literala. Mai multe informat , ii despre securitatea s , ierelor s , i modul de schimbare a drepturilor de acces se gasesc n sect , iunea 10.2.4.

4.6
4.6.1

Cautarea s , ierelor
Comanda nd

Comanda find foloses s n , te abordarea brute-force pentru gasirea , ierelor cautand arborele de directoare. Comanda pune la dispozit , ie un set extins de criterii de cautare, cum ar numele s ierului, utilizator, grup, tip, permisiuni, dimensiune, dat a, s i altele. , , Exemple de criterii de cautare sunt prezentate n continuare specicnd opt , iunea corespunzatoare a comenzii find: numele s -name cautare dupa , ierelor permisiunile s -perm cautare dupa , ierelor dimensiunea s -size cautare dupa , ierelor toate s Comanda urmatoare cauta , ierele care au numele stat, n mod recursiv n directorul /usr:
1 2 3

ubuntu@ubuntu:~$ find /usr -name stat /usr/src/linux-headers-2.6.24-19-generic/include/config/cpu/freq/stat /usr/bin/stat

CAPITOLUL 4. SISTEME DE FIS , IERE cauta toate s Urmatoarea comanda , ierele care au permisiunile 644:
1 2 3 4 5

91

ubuntu@ubuntu:~$ find /usr -perm 644 /usr/local/include/glib-2.0/glib.h /usr/local/include/glib-2.0/gobject/gsourceclosure.h /usr/local/include/glib-2.0/gobject/gtypeplugin.h [...]

Pentru a cauta s , ierele cu dimensiunea mai mare de 500 KB se poate folosi una dintre urmatoarele comenzi:
1 2 3 4 5 6 7

ubuntu@ubuntu:~$ find /usr -size +500000 ubuntu@ubuntu:~$ find /usr -size +500k /usr/local/lib/libgio-2.0.so.0.1800.4 /usr/local/lib/libgobject-2.0.so.0.1800.4 /usr/local/lib/libglib-2.0.so.0.1800.4 [...]

4.6.2

Comanda locate

n care sunt indexate toate s Comanda locate foloseste o baza de date locala , ierele. Comanda locate este mai rapida dect comanda find, dar pune la dispozit , ie un baza de singur criteriu de cautare: numele s , ierului. Un alt dezavantaj este faptul ca periodic pentru a cont date trebuie reactualizata ine informat ii despre s ierele noi create , , , cu ajutorul comenzii updatedb. n sistem. Actualizarea se realizeaza cu toate s Comanda ntoarce o lista nume cont , ierele ale carui , ine s , irul de caractere toate s precizat ca argument. n exemplul urmator se cauta , ierele care cont , in pwd:
1 2 3 4 5 6 7

ubuntu@ubuntu:~$ locate pwd /bin/pwd /etc/.pwd.lock /sbin/unix_chkpwd /usr/bin/pwdx /usr/include/pwd.h [...]

Unele distribut , ii Linux folosesc comanda slocate n locul comenzii locate. Avantajul nu permite as comenzii slocate este acela ca , area s , ierelor din directoarele n care utilizatorul nu are drepturi de acces.

4.6.3

Comanda whereis

comanda poate folosita pentru a cauta Aceasta ntr-un set restrns de locat , ii din sistem, de exemplu directoarele cu s directoarele cu biblioteci sau , iere binare, pentru a directoarele cu pagini de manual. Comanda whereis nu poate folosita cauta n directoarele utilizatorului. Comanda va cauta toate s , ierele care ncep cu s , irul de caractere precizat ca argument. De exemplu, pentru a localiza comanda ls folosim urmatoarea comanda:
1 2

ubuntu@ubuntu:~$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz

92

INTRODUCERE N SISTEME DE OPERARE

Comanda va as executabil dar s pagina de manual a comenzii , a calea catre , i calea catre ls.

4.6.4

Comanda which

Folosind comanda which se poate obt executabilele care pot rulate din , ine calea catre De exemplu, pentru a aa calea catre linia de comanda. comanda chmod se va folosi comanda urmatoare:
1 2

ubuntu@ubuntu:~$ which chmod /bin/chmod

doar prima potrivire gasita, n mod implicit, comanda which returneaza iar pentru a as a lista completa a potrivirilor se va folosi opt iunea -a . , ,

4.6.5

Comanda type

comanda poate folosita pentru a determina modul de interpretare a unei Aceasta integrata n shell, comanda externa sau alias. comenzi, de exemplu comanda integrata in shell este: Un exemplu de comanda
1 2

ubuntu@ubuntu:~$ type cd cd is a shell builtin

externa rezultatul comenzii type este calea catre Pentru o comanda executabil:
1 2

ubuntu@ubuntu:~$ type cat cat is /bin/cat

comanda echivalenta: n cazul unui alias este as , ata


1 2

ubuntu@ubuntu:~$ type ls ls is aliased to ls --color

4.7

Tipuri de sisteme de s , iere

n timp au aparut mai multe tipuri de sisteme de s , iere. n mediul open-source s-au dezvoltat s i nc a se dezvolt a cele mai multe dintre ele. Cteva dintre cele mai , importante sisteme de s , iere utilizate n prezent sunt ment , ionate n tabelul 4.11, cu sistemele de operare n care se ntlnesc. mpreuna suportul este oferit prin drivere ce nsot Prin nativ se nt , elege ca , esc sistemul de operare (n cazul Linux nsot , esc kernel-ul). locul unde se gasesc Sistemele de s datele. Tabelul 4.12 , iere se pot clasica s , i dupa succint aceasta clasicare. prezinta

CAPITOLUL 4. SISTEME DE FIS , IERE Tabelul 4.11: Sisteme de operare s , i sisteme de s , iere suportate Sistem de s Windows Linux Mac OS X , iere FAT32 NTFS ext2/ext3 ReiserFS HFS+ ISO9660 UDF nativ WinNT) nativ (dupa 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

93

Tip

suportul datelor Tabelul 4.12: Clasicarea sistemeleor de s , iere dupa Exemplu Descriere FAT32, NTFS, Ext3, ReiserFS, HFS+ procfs, devfs, SSHFS se regasesc de obicei pe un mediu de stocare cont , in s , iere/date generate de SO (informat , ii despre sistem) sau de componenta software (alte o alta surse) utilizate pentru accesul la s , iere aate n ret , ea

sisteme de s , iere cu suport zic sisteme de s , iere virtuale

sisteme de pentru ret , ea

s , iere

NFS, SMB

4.7.1

Integritatea datelor

asigure integritatea datelor inclusiv s Un sistem de s , iere trebuie sa , i n cazul unei funct prin caderi (failure). De cele mai multe ori, aceasta , ionalitate este implementata jurnalizare. un jurnal cu toate modicarile Jurnalizarea este activitatea prin care se realizeaza asupra efectuate asupra unui sistem de s , iere. Fiecare operat , ie care se executa sistemului de s iere este nti scris a n jurnal. Operat ia poate presupune modic ari , , n mai multe locuri din sistemul de s , iere. la un anumit interval de timp operat Driver-ul sistemului de s , iere executa , iile din jurnal ce toate pentru a actualiza starea discului. O operat ie se s terge din jurnal doar dup a , , modicarile 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 r amas , prezente n jurnal s neexecutate (operat , iile ncepute s , i care au fost ntrerupte sunt nca ,i vor reexecutate n ntregime).

4.7.2

Alegerea unui sistem de s , iere

n momentul n care trebuie ales un sistem de s , iere, cele mai utilizate criterii de select , ie sunt: se poate folosi sistemul respectiv de s disponibilitatea daca , iere n sistemul de operare ales (sau n mai multe sisteme de operare);

94

INTRODUCERE N SISTEME DE OPERARE majoritatea sistemelor de s gradul de sigurant , iere existente n prezent au ,a jurnalizare;

restrict , iere; de , ii speciale date de modul de organizare a datelor n sistemul de s


exemplu, la FAT32 se folosesc doar 32 bit , i pentru a stoca dimensiunea unui s , ier, a unui s deci dimensiunea maxima ier este 4GB (mai put in dect o imagine de , , DVD, fapt ce l face nepractic pentru o parte din aplicat , iile multimedia); de performant , realizate spre exemplu n funct optimizari , ie de tipul suportului ,a de stocare, n funct , ie de dimensiunea s , ierelor etc. o analiza sumara a caracteristicilor sistemelor de s Tabelul 4.13 realizeaza , iere. Tabelul 4.13: Caracteristici ale sistemelor de s , iere mai cunoscute Sisteme de Dimensiune Jurnalizare Observat , ii operare maxima s ier , Windows / Linux / Mac OS X 4 GB nu cel mai folosit sistem de s , iere ntlnit n mod special pe USB a drepturi de acces; stick-uri, far la creare Windows-ul limiteaza dimensiunea unei partit , ii la 32GB, dar poate citi partit ii mai mari , realizate s , i formatate cu aplicat , ii third-party folosit pentru a asigura compatibilitatea cu dispozitive sau sisteme mai vechi singurul sistem de s , iere pentru Windows recomandat de Microsoft; singurul sistem de s , iere pentru Windows cu securitate sistemul de s , iere considerat cel unei istorii de mai stabil datorita dezvoltare foarte lungi; ext3 e compatibil cu versiunea anterioara de ext2 ext2, aduce jurnalizare fat ,a mai mare cunoscut pentru o viteza dect ext3-ul la lucrul cu multe s , iere de dimensiune mica sistem de s , iere utilizat n principal pe CD-uri, organizare interna pentru ca datele sa e conceputa citibile us or , sistem de s , iere utilizat n principal pe mediile optice, cu suport att pentru scriere ct s , i pentru citire

Tip sistem de s , iere FAT32

NTFS

Windows / Linux / Mac OS X /

16TiB

da

ext2/ext3 Linux Windows1

16GiB 64TiB

ext2-nu; ext3-da

ReiserFS Linux

8 TiB

da

HFS+ ISO9660

Mac OS X / Linux Windows / Linux / Mac OS X Windows / Linux / Mac OS X

16 EiB

da2

UDF

n nu funct ie , de implementare 16 EiB da

CAPITOLUL 4. SISTEME DE FIS , IERE

95

4.7.3

Adresarea ntr-un sistem de s , iere

pe dispozitivul de stocare un spat Din punct de vedere zic, s , ierele ocupa , iu bine denit. direct cu dispozitivul de stocare s Utilizatorul nu lucreaza , i nu poate adresa un s , ier dupa pozit ia zic a a acestuia pe dispozitivul de stocare. S-a introdus astfel adresarea s ierelor , , o serie de restrict folosind nume. n funct , ie de tipul sistemului de s , iere, exista , ii asupra acestor nume. Majoritatea s Aceasta extensie se , ierelor au s , i ceea ce se numes , te extensie. , te dupa numele s pentru identicarea tipului acestora regases , ierelor s , i este utilizata extensie are 3 caractere. (exemplu format nume.ext. n majoritatea cazurilor aceasta extensia pentru a asocia un tip de s Sistemele de operare de tip Windows utilizeaza , ier aplicat cu o anumita , ie care poate deschide acel tip de s , ier. n mediile Unix, extensia n general pe baza de obicei lipses te. Identicarea tipului s ierelor se realizeaz a , , cont , inutului s , ierelor. pentru a descoperi tipul s n Unix, comanda utilizata , ierelor este file:
1 2

ubuntu@ubuntu:~$ file /boot/kernel26.img /boot/kernel26.img: gzip compressed data, from Unix, last modified: Sat Mar 3 20:28:37 2007, max compression

Numele s , ierelor poate scris cu un anumit set de caractere. n prezent, majoritatea sistemelor de s , iere folosesc standardul Unicode (de obicei UTF-8 sau UTF-16) pentru codicarea caracterelor. n tabelul 4.14 sunt prezentate cteva sisteme de s , iere s ,i restrict , iile de nume asociate lor. pentru o Dupa cum s-a ment , ionat s , i la nceputul acestui capitol, directoarele se utilizeaza organizare a s mai buna ierelor. ntr-un sistem de s iere modern, s ierele s i directoarele , , , , ierarhica sub forma unui arbore. Acest arbore are un se regasesc ntr-o structura director parinte din care se poate ajunge n orice loc n sistemul de s , iere. dintr-o ns Calea catre un s , ier este formata , iruire de directoare, separate de caractere speciale. n mediile Unix separatorul este caracterul / (slash). n mediile Windows, separatorul este caracterul \ (backslash).

4.8

Lucrul cu sistemele de s , iere

sect act Aceasta , iune trateaza , iunile cele mai cunoscute la nivelul unui sistem de s , iere. Act iunile cele mai frecvente sunt: ,

crearea unui sistem de s , iere; montarea unui sistem de s , iere; repararea unui sistem de s , iere.
Printre act , iunile rare dar care pot prezenta interes trebuie ment , ionate:

crearea unei imagini pentru un sistem de s , iere; s , tergerea unui sistem de s , iere (din diferite motive).

96

INTRODUCERE N SISTEME DE OPERARE Tabelul 4.14: Restrict , ii asupra numelor s , ierelor Case Lungime Lungime Observat , ii sensitive nume cale nu

Sistem de s , iere FAT32

8.3 sau 255


caractere cu LFN1

nedenit

NTFS

da2

254 caractere +.

32767 octet ,i

ext3

da

255 octet ,i

nedenit

ReiserFS da

HFS+

nu3

ISO9660

nu

4,032 octet , i / 255 caractere 255 caractere UTF-16 8.3 sau Joliet: 128 octet i , 255 octet ,i

nedenit

nedenit

initial limitat la 8 caractere numele s , ierului s , i 3 caractere extensia; FAT32 a capatat suport pentru nume lungi (LFN) pentru un s , ier; FAT32 ret , ine att numele lung ct s ,i versiunea scurta n format 8.3 orice caracter Unicode poate folosit, mai put , in caracterele: NULL, ", /, \, *, ?, <, >, |, : (utilizate n general pentru adresarea s , ierelor) orice byte mai put NULL , in poate folosit n numele s , ierului orice octet mai put , in NULL poate folosit n numele s , ierului orice caracter Unicode este permis mai multe niveluri pentru exista standard, ecare cu restrict , iile lui orice octet mai putin NULL poate folosit n numele s , ierului

UDF

da

adncime maxima a caii: 8 niveluri 1023 octet ,i

aceste act Pe lnga , iuni, folosind programe speciale, se pot efectua s , i alte operat , ii asupra unui sistem de s , iere, precum:

redimensionarea unei partit, ii duce implicit la o redimensionare a sistemului de


partit s , iere (n cazul n care acest lucru nu se ntmpla, trebuie reformatata , ia);

convertirea unui sistem de s , iere dintr-un tip n altul; mutarea unei partit, ii de obicei nu are efecte asupra sistemului de s , iere aat pe
aceasta.

4.8.1

Crearea unui sistem de s , iere

cum s-a ment Dupa , ionat anterior, majoritatea sistemelor de s , iere au un suport zic asociat unde se regasesc efectiv datele. Suportul unui sistem de s , iere se numes , te

CAPITOLUL 4. SISTEME DE FIS , IERE

97

n partit , ie. O partit , ie poate avea un singur sistem de s , iere. Partit , ionarea a fost descrisa sect , iunea 2.2.2. Sistemul de s , iere este plasat pe o partit , ie prin formatare. Formatarea este procesul prin care pe partit , ie sunt scrise structuri de date specice sistemului de s , iere. Aceste structuri sunt utilizate de driver-ul asociat sistemului de s iere pentru a identica s , , i utiliza datelor scrise pe partit , ie. prin intermediul utilitarului mkfs cu ntr-un sistem Linux, formatarea se realizeaza sintaxa:
1

root@ubuntu:~# mkfs -t \textless{}tip_sistem_de_fisiere> \textless{} dispozitiv>

Exemplu de utilizare:
1

root@ubuntu:~# mkfs -t ext3 /dev/sda2

partit Comanda prezentata anterior formateaza , ia a 2-a de pe primul disc utiliznd un program pentru sistemul de s iere ext3. Pentru ecare tip de sistem de s , , iere exista formatare. Aceste programe au numele de forma mkfs.<fstype> s , i pot apelate exemplului anterior este direct pentru a formata o partit Comanda echivalenta , ie. urmatoarea:
1

root@ubuntu:~# mkfs.ext3 /dev/sda2

formatarii este vericarea sectoarelor din cadrul partit O operat , ie suplimentara , iei. Daca un sector este defect, se va marca s i nu va folosit pentru stocarea datelor. Urm atoarea , va determina vericarea sectoarelor s comanda , i formatarea partit , iei /dev/sda2:
1

root@ubuntu:~# mkfs.ext3 -c /dev/sda2

partit Pentru a crea un sistem de s , iere MS-DOS pe o anumita , ie se poate folosi comanda mkdosfs care este un front-end pentru comenzile mkfs.vfat s , i mkfs.msdos. Cu optiunea -F se poate specica tipul tabelei FAT care poate sa e pe 12, 16 sau 32 bit , i. va crea un sistem de s Urmatoarea comanda iere FAT 32 pe partit ia specicat a: , ,
1

root@ubuntu:~# mkdosfs -F 32 /dev/sda2

4.8.2

Montarea unui sistem de s , iere

acces uniform la datele din toate tipurile de sisteme de s Sistemele de operare ofera , iere prin intermediul ierarhiei de s iere. , e vizibil sistemului de operare el trebuie nti sa e Pentru ca un sistem de s , iere sa montat (mount ) ntr-un director, numit director de montare (mount point ). Operat , ia se numes te montarea unui sistem de s iere . , , operat de cele mai multe ori n mod automat de sistemul de Aceasta , ie este executata operare:

n Windows, sistemele de s , iere primesc automat litere diferite; pot ulterior modicate, cu anumite restrict folosind Control Panel > , ii, Administrative Tools > Computer Management > Storage > Disk Management;

98

INTRODUCERE N SISTEME DE OPERARE

n Linux, sistemele de s , iere sunt montate att n locuri bine denite (denite de
utilizator la instalare) ct s ,i n locuri special create (de exemplu /media/<nume>/) pentru a gazdui sistemele de s , iere de pe medii externe, precum USB stick-uri, CD/DVD-ROM-uri etc. n Mac OS X, sistemele de s , iere sunt montate automat n /Volumes/<nume>.

Montarea manuala comanda mount, Pentru a monta un sistem de s , iere, ntr-un mediu Linux se utilizeaza cu sintaxa:
1

root@ubuntu:~# mount -t <tip_sistem_fisiere> [-o <optiuni>] <dispozitiv> <director_montare>

n exemplul de mai jos se foloses , te mount pentru a monta partit , ia a 2-a de pe primul disc, cu sistemul de s iere ext3, n directorul /mnt/data (directorul /mnt/data , existe anterior execut trebuie sa , iei comenzii).
1

root@ubuntu:~# mount -t ext3 /dev/sda2 /mnt/data

Montarea unui sistem de s , iere doar cu drepturi de citire (read-only ) se poate realiza prin opt iunea -r : ,
1

root@ubuntu:~# mount -r -t ext3 /dev/sda2 /mnt/data

Alte exemple de utilizare a opt n sect , iunilor de montare se gasesc , iunea 4.10.

Montarea automata ntr-un sistem Linux, s , ierul /etc/fstab descrie sistemele de s , iere care vor montate automat la pornirea sistemului de operare. Fis ierul cont ine cte o linie pentru , , ecare sistem de s , iere. Comentariile ncep cu #. Sintaxa unei linii este:
1

<dispozitiv> <director montare> <tip sistem fisiere> <optiuni> <dump> < pas>

Cmpurile au urmatoarele semnicat , ii: , te <dispozitiv> s , ier care indica locul (de obicei un dispozitiv) unde se gases sistemul de s , iere;

<director montare> director existent n structura de directoare unde se va


putea accesa cont , inutul sistemului de s , iere montat;

<tip sistem fis , iere> tipul sistemului de s , iere;


de la un sistem <opt , iuni> opt , iuni pentru montarea sistemului de s , iere - difera de s , iere la altul; daca sa se realizeze automat backup al partit <dump> indica , iei utiliznd preferndu-se alte metode programul dump; opt , iunea este n prezent rar folosita, de backup; acest parametru are n mod obis , nuit are valoarea 0;

CAPITOLUL 4. SISTEME DE FIS , IERE

99

ordinea n care fsck va verica sistemele de s <pas> indica , iere (0 = fsck nu va verica sistemul de s , 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 s , iere a backup s a vericari. ReiserFS cu opt , iuni implicite, far , i far efectuarea unei modicari n /etc/fstab, comanda Dupa
1

root@ubuntu:~# mount -a

va monta toate partit , iile ment , ionate. a niciun argument, mount as lista sistemelor de s Far , eaza , iere montate la un moment dat.
1 2 3 4 5 6 7 8

ubuntu@ubuntu:~$ mount /dev/sda1 on / type reiserfs (rw) none on /proc type proc (rw) none on /sys type sysfs (rw) usbfs on /proc/bus/usb type usbfs (rw) none on /dev/pts type devpts (rw) none on /dev/shm type tmpfs (rw) tmpfs on /tmp type tmpfs (rw)

ca n lista nu apar doar sistemele de s Se observa , iere montate manual sau cele s montate automat (descrise n /etc/fstab). Exista , i sisteme de s , iere care sunt create s , i montate automat de sistem n ierarhia de s , iere pentru a oferi informat , ii despre starea sistemului (precum /proc vezi sect , iunea 5.1.3). de asemenea s Lista sistemelor de s , iere montate la un moment dat se poate regasi , i n s ierul /etc/mtab . , montarii unui sistem de s Operat , ia inversa , iere se numes , te demontare. Pentru a realiza comanda umount, cu doua sintaxe posibile: demontarea se utilizeaza
1 2 3

root@ubuntu:~# umount <dispozitiv> root@ubuntu:~# umount <director_de_montare>

tipul partit Folosind mount s , i grep se aa , iei /dev/sda2:


1 2

root@ubuntu:~# mount | grep /dev/sda2 /dev/sda2 on /home type reiserfs (rw)

Pentru a demonta acest sistem de s doua , iere se poate utiliza oricare din urmatoarele comenzi:
1 2 3

root@ubuntu:~# umount /dev/sda2 root@ubuntu:~# umount /home

100

INTRODUCERE N SISTEME DE OPERARE

4.8.3

Repararea unui sistem de s , iere

cum s-a ment Dupa , ionat s , i la nceputul acestui capitol, sistemele de s , 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. o vericare a integritat , ii sistemelor de La repornire, sistemul de operare efectueaza vericare, se executa comanda fsck pentru ecare sistem de s La aceasta , iere. pentru ecare sistem de s s iere. Aceasta comanda este particularizat a , , iere cu numele fsck.<tip_sistem_de_fisiere>, precum comanda mkfs. cu urmatoarea Pentru a verica un sistem de s sintaxa: , iere comanda fsck se apeleaza
1

root@ubuntu:~# fsck -t <tip_sistem_fisiere> <dispozitiv>

se dores Daca , te vericarea celei de-a doua partit , ii de pe primul disc, cunoscndu-se ca se gaseasc un sistem de s ar trebui sa a iere ext3 pe aceasta, se utilizeaz a comanda: ,
1

root@ubuntu:~# fsck -t ext3 /dev/sda2

n funct , ie de opt , iunile care se folosesc la execut , ia comenzii, fsck poate repara erorile pe care le ntlnes , te.

4.8.4

Crearea unei imagini pentru un sistem de s , iere

copia dela ntr-un s Imaginea unui sistem de s octet care , iere reprezinta , ier a ecarui descrie sistemul de s iere (inclusiv datele din acesta). Aceast a imagine poate ulterior , pe o alta partit pentru o eventuala recuperare a datelor daca copiata , ie sau arhivata este distrusa accidental. O utilizare foarte frecventa a imaginilor se partit , ia sursa ntlnes te n copierea cont inutul CD/DVD-urilor pe alte medii de stocare. , , comanda dd (vezi Pentru a realiza o imagine a unui sistem de s , iere se utilizeaza sect iunea 7.6.5. n exemplul de mai jos se copiaz a cont inutul primei partit , , , ii (sistemul de s , iere) de pe discul al 2-lea n s , ierul /mnt/data/partitie1.img.
1

root@ubuntu:~# dd if=/dev/sdb1 of=/mnt/data/partitie1.img

comanda este independenta de sistemul de s Aceasta i se face imaginea. , iere caruia direct la nivelul octet Lucreaza sistemul de s a , ilor care alcatuiesc , iere s , i pastreaz interna a acestuia. ntreaga structura comenzii pe sisteme de s timpul de n cazul utilizarii , iere foarte mari, se va observa ca execut ie este destul de mare. Motivul pentru care se ntmpl a acest lucru este faptul , n mod implicit, comanda dd lucreaza cu blocuri de date de 512 octet ca, , i, ceea ce ca pentru ecare 512 octet o citire s nseamna , i comanda executa , i o scriere. n prezent, buffer-ele discurilor au valori dimensiuni mult mai mari s i pot lucra cu blocuri mai mari de , 512 octet , i. parametrul Pentru a modica dimensiunea blocului citit/scris de dd se utilizeaza e xKB, xMB etc. bs=<dimensiune>, unde <dimensiune> poate sa Spre exemplu:
1

root@ubuntu:~# dd bs=2MB if=/dev/sdb1 of=/mnt/data/partitie1.img

CAPITOLUL 4. SISTEME DE FIS , IERE va executa aceeas , i operat , ie dar citind blocuri de 2MB.

101

s unor blocuri de date mai mari. n anumite condit Exista , i un dezavantaj al utilizarii , ii, nu se va putea face copierea unui bloc ntreg, din diferite motive precum un defect hardware al suprafet , ei magnetice, sau ultimul bloc nu are dimensiunea de 2MB nu este multiplu de 2MB). De cele mai multe ori se (deoarece dimensiunea totala dores , te recuperarea ct mai multor date de pe disc, de preferat toate. n aceste condit , ii trebuie determinat daca o viteza mai mare (dimensiune mai mare a blocului) este o decizie acceptabila s , tiind ca se pot pierde date mai multe la citire. Pentru recuperarea datelor de pe discuri cu defecte hardware, se poate folosi programul atoare ddrescue1 . ddrescue este o aplicat, ie aseman dd dar care este specializata n recuperarea ct mai multor date de pe discuri.

4.8.5

Stergerea unui sistem de s , iere

tipuri de s Exista doua , tergere a unui sistem de s , iere: s , tergerea logica s , tergerea zica se obt Stergerea logica sistemului de s , ine prin s , tergerea partit , iei corespunzatoare , iere din tabela de partit ii (descris n sect iunea 2.2.2). Din moment ce nu mai exist a partit , , , ie ncapsuleze sistemul de s care sa , iere, acesta se poate considera s , ters. Practic, datele mai rezida pe disc, pna la o suprascriere cu alte date. lui nca pune probleme oamenilor Faptul ca datele nu sunt s , terse zic de pe disc a pus s , i nca ce sunt s ramn s care doresc ca datele odata a , terse sa , terse pentru eternitate. Din acest motiv, pentru a elimina orice posibilitate de a recupera un sistem de s , iere sau datele s Stergerea este realizata dintr-un sistem de s zica , iere, se utilizeaza , tergerea zica. de fapt prin suprascrierea blocurilor de pe suportul zic (unde era nainte sistemul de s , iere) cu date aleatoare sau cu zerouri. cel mai rapid tot programul dd prezentat anterior dar, Pentru suprascriere se utilizeaza e folosita ca sursa, ea este folosita ca destinat n loc ca partit , ia sa , ie pentru un set de date aleatoare (sau zerouri). Pentru a suprascrie cu zerouri o partit , ie, se poate folosi comanda:
1

root@ubuntu:~# dd if=/dev/zero of=/dev/sda1

Pentru a suprascrie o partit , ie cu date aleatoare, se foloses , te comanda:


1

root@ubuntu:~# dd if=/dev/urandom of=/dev/sda1

4.8.6

discului Monitorizarea utilizarii

care nu poate neglijata este umplerea hardisk-ului. Pentru a evita acest O problema as lucru, se folosesc comenzi care sa , eze ct spat , iu este consumat, de exemplu comenzile df s , i du.
1

http://www.gnu.org/software/ddrescue/ddrescue.html

102

INTRODUCERE N SISTEME DE OPERARE

informat spat Comanda df ofera , ii despre dimensiunea totala, , iul utilizat, spat , iul liber s ,i procentul de folosire al ecarei partit , ii.
1 2 3 4

ubuntu@ubuntu:~$ df Filesystem 1K-blocks Used Available Use\% Mounted on /dev/sda1 5859784 4449900 1409884 76\% / /dev/sda2 15361340 10174596 5186744 67\% /home

curat , area partit Atunci cnd procentul de folosire depas , es , te 80% se recomanda , iei. Se poate folosi opt , iunea -a pentru a include s , i pseudo sistemele de s , iere care sunt as , ate cu dimensiunea 0, de exemplu /proc, /sys:
1 2 3 4 5 6

ubuntu@ubuntu:~$ df -a Filesystem 1K-blocks /dev/sda1 5859784 /dev/sda2 15361340 /proc 0 /sys 0

Used Available Use\% Mounted on 4449900 1409884 76\% / 10174596 5186744 67\% /home 0 0 - /proc 0 0 - /sys

n mod recursiv n directoarele specicate pentru a as Comanda du cauta , a ct spat , iu ecare director. n exemplul de mai jos se as spat consuma , eaza , iul ocupat de directorul /etc/network:
1 2 3 4 5 6

ubuntu@ubuntu:~$ du /etc/network 8 /etc/network/if-down.d 12 /etc/network/if-post-down.d 12 /etc/network/if-pre-up.d 24 /etc/network/if-up.d 64 /etc/network

Pentru as , 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

s Pentru a opri cautarea recursiva , i a as , a doar spat , iul ocupat de directorul transmis ca argument se foloses , te opt , iunea -s:
1 2

ubuntu@ubuntu:~$ du -h -s /etc/network 64K /etc/network

4.9
4.9.1

Tendint , e n sistemele de s , iere


Sisteme de s , iere n userspace

exista driver-e Sistemele de s , iere pot citite/scrise de sistemele de operare doar daca le implementeze. Implementarea unui driver pentru un sistem de s care sa , iere nu este tocmai us oar a. Acesta este s i principalul motiv pentru care exista destul de put , , , ine implementeze un set de funct , i acceptabil. Majoritatea sisteme de s , iere care sa , ionalitat sistemelor de s iere prezente n sistemele de operare au mult i , , ani de dezvoltare.

CAPITOLUL 4. SISTEME DE FIS , IERE

103

cum s-a prezentat anterior, exista situat Dupa , ii n care s-a putut foarte us , or abstractiza accesul la o serie de date prin intermediul s , ierelor (precum informat , ii despre sistem, n /proc). Practic, aproape orice informat ie poate prezentat a sub forma de s , , ier. care a mpiedicat mult timp aceasta trecere catre Singura problemaa reprezentarea de date folosind s iere a fost dicultatea scrierii unui driver adecvat. , a luat amploare utilizarea de drivere pentru diferite sisteme de s n ultima perioada , iere n kernel-space. n user-space, spre deosebire de driverele clasice care funct , ioneaza pe faptul ca exista un driver n kernel care se ocupa Driverele din userspace se bazeaza de translatarea apelurilor la date ntre kernel s , i sistemul de s , iere din userspace. Acest suport pentru sisteme de s , iere n userspace este prezent n kernel-ul Linux cu numele FUSE1 (Filesystem n USErspace) iar n Mac OS X cu numele MacFUSE2 . avantajele s Tabelul 4.15 prezinta , i dezavantajele sistemelor de s , iere n user-space:

Tabelul 4.15: Avantaje/dezavantaje sisteme de s , iere n user-space Avantaje Dezavantaje suport pentru scrierea de driver-e n numeroase limbaje de programare; att dezvoltare mult mai rapida datorita limbajelor de nivel nalt ct s i datorit a , , ii de testare mult mai rapida posibilitat (+ debugging); nu blocheaza sistemul n cazul unei proaste funct , ionari; compatibilitate a implementarilor ntre Linux s i Mac OS X , mai lente dect sistemele de s , iere n normale; au o exibilitate mai mica ceea ce prives , te nivelul de acces la hardware, comparativ cu un driver de kernel (de obicei nu este o limitare dat ind scopul foarte importanta, sistemelor de s , iere de acest tip)

a: Printre cele mai folosite sisteme de s , iere n userspace se numar suport read/write pentru NTFS; NTFS-3G sistem de s , iere care ofera acces la s mas prin sshfs sistem de s , iere care ofera , ierele de pe alta , ina intermediul SSH ca s , i cum ar parte din sistemul de s , iere local; automat s EncFS Encrypted Filesystem sistem de s , iere care cripteaza , ierele din directorul pe care l foloses , te ca suport; scanarea pentru AVFS Anti-Virus Filesystem sistem de s , iere care realizeaza un acces la s virus , i n momentul n care se realizeaza , iere; este implementat ca sistem de s , iere intermediar pentru accesul protejat la alt sistem de s , iere. ntr-un mod diferit, datorita modului Fiecare dintre aceste sisteme de s , iere se monteaza lucreze cu datele: unele au nevoie de un nume de utilizator s n care au fost gndite sa ,i altele au nevoie de calea catre o parola, un alt sistem de s , iere etc. Mai multe informat , ii pe paginile web ale ecarui se pot gasi proiect.
1 2

http://fuse.sourceforge.net/ http://code.google.com/p/macfuse/

104

INTRODUCERE N SISTEME DE OPERARE

4.9.2

ZFS, ext4, btrfs

ZFS (Zettabyte File System) este un sistem de s , iere pe 128 de bit ,i s , i logical volume multe facilitat manager care prezinta i avansate cum ar clone copy-on-write, , a integritat , ii datelor, backup s snapshot-uri, dynamic stripping, vericare continua ,i restaurare rapida, compresie incorporata, scalabilitate. ZFS a fost dezvoltat de Sun Microsystems ca software open-source s , i este sub licent , a CCDL. at , ire a lui ext3. ext4 aduce ext4 este un sistem de s , iere jurnalizat dezvoltat ca mbunat nou suport pentru sisteme de s iere foarte mari (pn a la 1 exabyte = 1024 petabytes), , extents (posibilitatea de a mapa blocuri mari contigue pentru un singur s , ier), compatibilitate napoi/nainte. Compatibilitatea napoi este data de faptul ca un sistem deoarece ext3 poate montat ca un sistem ext4. Compatibilitatea nainte este posibila un sistem ext4 poate montat ca un sistem ext3. ext4 a fost inclus n kernel-ul Linux , i el este marcat ca ncepnd cu versiunea 2.6.19 dar la momentul scrierii acestei cart ind n dezvoltare. btrfs (Better File System) este un sistem de s , iere de tipul copy-on-write dezvoltat pentru Linux. La fel ca s O caracteristica , i ext4, btrfs contine suport pentru extents. a acestui sistem de s unor operat principala , iere este posibilitatea efectuarii , ii critice n timpul funct ion arii, de exemplu defragmentarea, modicarea dimensiunii partit , , iei s ,i multe alte caracteristici printre care efectuarea de vericarea consistent , ei. btrfs prezinta snapshot-uri s Oracle, btrfs este , i de backup-uri incrementale. Init , ial dezvoltat de catre licent iat GPL. ,

4.10
4.10.1

Studii de caz
Comenzi pentru lucrul cu s , iere n Windows

echivalent Windows s Tabelul 4.16 prezinta , a comenzilor de baza , i Linux pentru prelucrarea s ierelor. ,

4.10.2

a comenzilor pe s Utilizarea n sigurant ,a , iere

Exista o serie de opt , iuni pentru comenzile cp, mv s , i rm care fac utilizarea acestora sa din punct de vedere al pierderii datelor n mod accidental. e mult mai sigura are printre opt comanda sa ceara o Fiecare comanda , iuni -i, o opt , iune care determina conrmare pentru ecare s ier s ters/suprascris. Pentru a anula efectul acestui , , parametru poate folosit parametrul -f. recunoas as Fiecare comanda , te opt , iunea -v, opt , iune care determina , area s , ierelor opt buna procesate la momentul respectiv. Aceasta iune poate reprezenta o metod a , n spatele comenzii, mai ales daca se executa pentru a vizualiza ce anume se ntmpla comanda pentru un set mare de s iere. , opt cu toate execut Aceste doua , iuni (-iv) pot fort , ate odata , iile realizate de utilizator se realizeaza alias-uri. Alias-urile sunt descrise de obicei pentru aceste comenzi daca

CAPITOLUL 4. SISTEME DE FIS , IERE Tabelul 4.16: Comenzi pentru lucrul cu s , iere n Windows Comanda Linux Comanda Descriere Windows

105

comanda --help cd pwd clear cp rm ls vim exit diff find mkfs (mke2fs) free mkdir mv mv date

comanda /? cd chdir cls copy del dir edit exit fc find format mem mkdir move ren time

informat as , eaza , ii despre comanda directorul curent schimba directorul curent as , eaza s , terge ecranul consolei curente un s copiaza , ier s , terge un s , ier cont as , eaza , inutul directorului curent editeaza un s , ier text nchide shell-ul curent doua s diferent compara , iere s , i as , eaza , ele ntre ele s cauta , iere un disc formateaza informat s as , eaza , ii despre memoria libera ,i cea ocupata un nou director creeaza un s muta , ier redenumes , te un s , ier ora sistemului as , eaza

ntr-un s la pornirea shell-ului (precum ~/.bashrc) (vezi , ier care este ncarcat sect , iunea 12.10):
1 2 3

alias cp="cp -iv" alias mv="mv -iv" alias rm="rm -iv"

Astfel, la execut dintre aceste comenzi, automat se vor lua n considerare s , ia oricarei ,i aceste opt iuni. ,

4.10.3

Montarea unui sistem de s , iere FAT32 astfel nct tot ,i aiba drept de scriere pe el utilizatorii sa

opt Pentru a realiza acest lucru se utilizeaza , iunile de montare a sistemelor de s , ierelor. Pentru a fort a la montare drepturile s ierelor se utilizeaz a m as ti ( mask ). Masca este o , , , sunt 1 semnica un drept care lipses ns , iruire de bit , i care daca , te. , ti: Exista mai multe tipuri de mas aplicata tuturor s umask masca , ierelor noi (vezi sect , iunea 10.2.4); aplicata tuturor s fmask masca , ierelor; aplicata tuturor directoarelor; dmask masca

106

INTRODUCERE N SISTEME DE OPERARE

, ti se denesc opt Folosind aceste mas , iuni pentru montarea unei partit , ii FAT32 n felul urmator:
1

root@ubuntu:~# mount -t vfat -o dmask=000,fmask=111 /dev/sda2 /mnt/media

faptul ca pentru tot Parametrul -o dmask=000,fmask=111 specica , i utilizatorii apara cu drepturi read/write iar directoarele cu toate s , ierele normale trebuie sa se gaseasc drepturile. Trebuie ment ionat c a pe o partit a , , ie FAT32 nu ar trebui sa situat aplicat , ii/script-uri ce pot executate din Linux. Pentru a preveni aceasta , ie, tuturor s dreptul de execut , ierelor le este ndepartat , ie, prin masca 111. Comanda de mai sus se poate transforma foarte us , or ntr-o linie n /etc/fstab:
1

/dev/sda2

/mnt/media

vfat

defaults,dmask=000,fmask=111

aceasta activeaza alte opt S-a pastrat opt , iunea defaults pentru ca , iuni utile la montarea automata.

4.10.4

Montarea unui sistem de s , iere FAT32 astfel nct utilizatorii aiba drept de scriere pe acesta dintr-un anumit grup sa

aiba acces la o partit Exista situat , ii cnd se dores , te ca doar un grup de utilizatori sa , ie. n aceste condit ii, posesorul s ierelor trebuie modicat n root iar grupul n grupul , , aiba toate drepturile. n primul rnd trebuie determinat dorit. Grupul trebuie sa identicatorul grupului (gid, group id ). care se dores , te a avea drepturi asupra s va as , ierelor. Cunoscndu-se numele grupului, comanda urmatoare , a identicatorul grupului.
1 2

ubuntu@ubuntu:~$ cat /etc/group | grep numegrupnumegrup:x:100:

liniile din /etc/group s pe ecran doar liniile care ncep Comanda ltreaza , i as , eaza , te ntre caracterele : este identicatorul cu numele grupului dorit. Numarul ce se gases grupului. un sistem de s Comanda care monteaza , iere FAT32 cu restrict , iile ment , ionate mai sus este urmatoarea:
1

root@ubuntu:~# mount -t vfat -o dmask=007,fmask=117,gid=100,uid=0 /dev/ sda2 /mnt/media

ca, spre deosebire de cazul anterior, au mai fost introduse doua opt Se observa , iuni:

gid=100 identicatorul grupului care va avea drepturi asupra s , ierelor; uid=0 identicatorul utilizatorului; utilizatorul root are uid=0.
, tile au fost schimbate pentru a nu permite niciun fel de drept altor utilizatori n afara Mas grupului s , i utilizatorului root (au 7 pe ultima pozit , ie).

4.10.5

Sistem de s , iere ntr-un s , ier

cum s-a prezentat s Dupa , i n subcapitolele anterioare, n Linux se poate accesa (aproape) tot printr-un s ier. n particular, ecare dispozitiv are asociat un s , , ier. Spre

CAPITOLUL 4. SISTEME DE FIS , IERE

107

exemplu, prima partit , ie de pe primul HDD are asociat (de obicei) s , ierul /dev/sda1. n mod similar cu utilizarea s , ierului /dev/sda1, orice alt s , ier poate folosit ca suport pentru un sistem de s iere. Dou a dintre motivele cele mai folosite pentru a , realiza acest lucru sunt: a a repartit experimentarea unor noi sisteme de s , iere, far , iona discul;

ncapsularea datelor ntr-un sistem de s , iere (eventual criptat).


n tabelul 4.17 este prezentat modul n care se poate realiza un sistem de s , iere stocat ntr-un s , ier. Sunt prezentate comenzile att pentru sistemul de s , iere aat ntr-o partit , ie ct s i pentru sistemul de s iere aat ntr-un s ier. , , , Tabelul 4.17: Sisteme de s , iere peste partit , ii sau peste s , iere Sistem de s iere , ntr-o partitie ntr-un s , ier discul; se se partit , ioneaza obt , ine partit , ia /dev/sda1

Act , iune alocare spat , iu

dd if=/dev/zero of=~/date astfel bs=1MB count=20 se creaza


un s , ier cu 20 blocuri, ecare 1MB, se obt , ine echivalentul unei partit , ii de 20MB

formatare vericare montare

/sbin/mkfs -t vfat /dev/sda1

/sbin/mkfs -t vfat ~/date file ~/date mount -t vfat -o loop /date dir/ umount dir/

mount -t vfat /dev/sda1 dir/ demontare umount dir/

sistemului de operare ca partit , te pe un Opt , iunea -o loop specica , ia nu se gases dispozitiv zic ci ntr-un s ier. ,

4.10.6

ntfs-3g

suport read-write pentru partit nfts-3g1 este proiectul care ofera , ii NTFS sub Linux. Pentru instalarea ntfs-3g se foloses , te comanda:
1

root@ubuntu:~# apt-get install ntfs-3g

Pentru a identica partit , ia NTFS se poate utiliza comanda:


1

root@ubuntu:~# fdisk -l | grep NTFS

doar liniile care cont care as , eaza , in NTFS din ies , irea comenzii fdisk -l, Pentru a monta sistemul de s , iere n mod automat, n /etc/fstab se adauga o linie de forma:
1

<dispozitiv> <director montare> ntfs-3g defaults,locale=en_US.utf8 0 0

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

108 Cuvinte cheie

INTRODUCERE N SISTEME DE OPERARE

sistem de s , iere montare demontare fsck s , ier director jurnalizare


cale relativa cale absoluta,

arhivare dezarhivare backup descriptor de s , ier redirectare drept de acces ls, pwd, cd cp, mv, rm

ierarhie

copiere, mutare, s , tergere, redenumire mkdir, rmdir, touch


ntrebari un grad mai mare de sigurant mpotriva 1. Sistemele de s , iere din prezent ofera ,a caderilor de tensiune prin implementarea:

K drepturilor de acces la nivel de utilizator s , i grup K drepturilor de acces prin liste de acces
K suportului pentru legaturi hard

K suportului pentru jurnalizare


a unui sistem de s 2. Care este s , ierul folosit pentru montarea automata , iere n Linux?

K /etc/resolv.conf K /etc/fsck K /mnt/hda5 K /etc/fstab


comanda: 3. Un s , ier are drepturile 653. Utilizatorul ce det , ine s , ierul ruleaza
1

chmod a-x,u+w,g-r,o+r

Care sunt noile drepturi ale s , ierului?

K 606 K 762 K 534 K 451

CAPITOLUL 4. SISTEME DE FIS , IERE asupra unui director? 4. Care din urmatoarele comenzi NU poate aplicata

109

K file K touch K rm -r K cat


n sistemul de s 5. Care din urmatoarele NU este o intrare valida , iere?

K s , ier executabil
K director al carui nume ncepe cu . a simbolica catre K legatur /bin de ret K interfat, a , ea de looback 6. Care din urmatoarele sisteme de s , iere este un sistem nativ Linux?

K HPFS K FAT32 K EXT3 K UFS


un s 7. Un utilizator congureaza , ier cu drepturile 755. Ce utilizator are dreptul de execut , ie pe s , ier?

K root K utilizatorul care det, ine s , ierul K niciun utilizator K tot, i utilizatorii
litera v din comanda de mai jos? 8. Ce reprezinta
1

ubuntu@ubuntu:~$ tar czvf a.tgz dir1

K crearea unei arhive K dezarhivarea unei arhive K crearea unei arhive GZIP K as , area de mesaje despre arhivare
este folosita pentru montarea unui sistem de s 9. Care comanda , iere n Linux?

K mount K umount K mountfs K fsck

110

INTRODUCERE N SISTEME DE OPERARE

prima act 10. Pentru a putea utiliza un sistem de s , iere pe o partit , ie data, , iune absolut necesara care trebuie executata este:

K s , tergerea sistemului de s , iere existent anterior


K montarea sistemului de s , iere de pe partit , ia respectiva

K formatarea partit, iei cu sistemul de s , iere dorit


partit K schimbarea drepturilor de acces pentru directorul n care este montata , ia

Capitolul 5 Procese
Its a well-known fact that computing devices such as the abacus were invented thousands of years ago. But its not well known that the rst 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

din acest capitol? Ce se nvat ,a

Denit, ia unui proces; diferent, a ntre un program s , i un proces Not, iunea de multitasking Ierarhia de procese ntr-un sistem de operare Comenzi de vizualizare a proceselor (ps, pstree, top) Daemoni; rularea proceselor n background/foreground Not, iunea de semnal; administrarea proceselor prin intermediul semnalelor Comunicarea ntre procese; operatorul | (pipe) de comunicare ntre procese Administrarea proceselor/serviciilor n Windows

5.1

Not , iuni introductive

doua concepte fundamentale: n lumea sistemelor de operare Unix (s , i nu numai) exista s ierul s i procesul . Fis ierul este folosit pentru a abstractiza informat , , , ia s , i modul de , parte, procesul este stocare s , i utilizare a acesteia n sistemul de operare. Pe de alta folosit pentru a abstractiza executarea sarcinilor sistemului de operare. 111

112

INTRODUCERE N SISTEME DE OPERARE

5.1.1

Ce este un proces?

un proces este un program aat n execut n denit , ia sa cea mai simpla, , ie. Daca un proces este considerat o entitate un program este considerat o entitate pasiva, activa. simplica semnicat Denit , ia anterioara , ia pe care o are un proces, ncadrndu-se n gradul de detaliu pe care l atinge capitolul curent. a sistemului de operare folosita pentru a ndeplini Procesul este unitatea de baza sarcinile indicate de utilizator. Orice solicitare a utilizatorului se traduce n crearea unui Un proces este, as proces s , i rezolvarea acelei solicitari. , adar, o entitate de execut , ie.

5.1.2

Deosebirea dintre un proces s , i un program

pe disc. Se spune ca un astfel de Un program este doar un s , ier executabil care se aa s ier este imaginea din care se va realiza un proces. Un program este, as adar, o entitate , , care nu are asociate not pasiva, , iuni de utilizare a memoriei s , i procesorului (elemente de ntr-un sistem de calcul). Fis baza ierele /bin/ls , /usr/bin/vi sunt exemple de , programe:
1 2 3 4 5 6 7 8 9 10 11

razvan@anaconda:~$ ls -l /bin/ls -rwxr-xr-x 1 root root 96216 2008-06-27 03:31 /bin/ls razvan@anaconda:~$ ls -l /usr/bin/vi lrwxrwxrwx 1 root root 20 2009-02-27 15:43 /usr/bin/vi -> /etc/ alternatives/vi razvan@anaconda:~$ ls -l /etc/alternatives/vi lrwxrwxrwx 1 root root 18 2009-04-24 09:59 /etc/alternatives/vi -> /usr/ bin/vim.basic razvan@anaconda:~$ ls -l /usr/bin/vim.basic -rwxr-xr-x 1 root root 1644100 2009-03-19 17:32 /usr/bin/vim.basic

componente (sect Un program cont n cadrul s doua , ine, , ierului executabil, , 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;
parte, un proces pornes Pe de alta n acel , te n momentul execut , iei unui program. o structura (o entitate, o abstract moment, sistemul de operare creeaza , ie) denumita proces. Dincolo de informat iile cont inute n imagine (s ierul executabil de pe disc), , , , procesului o zona de memorie unde s sistemul de operare asociaza , i va ment , ine datele timp de s , i unde se va aa codul de executat. De asemenea, procesului i se asociaza rulare a codului pe procesor s i alte informat ii utile pentru interact iunea cu alte procese , , , mpreuna sau componente ale sistemului de operare. Toate aceste elemente formeaza contextul procesului. Mai multe informat ii se g asesc n sect iunea sect iunea 14.7.1. , , , Exemple de procese sunt rularea comenzii ls sau rularea editorului vi. n momentul comenzii ls, sistemul de operare foloses un rularii , te imaginea /bin/ls s , i creeaza

CAPITOLUL 5. PROCESE

113

proces. Acest proces este raspunz ator pentru utilizarea resurselor sistemului (memorie, as procesor) pentru a oferi rezultatul rularii comenzii (n cazul de fat ,a , area cont , inutului directorului curent):
1 2 3 4 5 6 7 8 9 10 11

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

razvan@anaconda:~$ ls -l /bin/ls -rwxr-xr-x 1 root root 96216 2008-06-27 03:31 /bin/ls razvan@anaconda:~$ file /usr/bin/file /usr/bin/file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

are ca argument executabilul folosit pentru n exemplul de mai sus, a doua comanda Pot considerate exemple triviale de crearea procesului. La fel s , i a treia comanda. 1 self-reference . un proces este o instant de execut Se poate observa ca ,a , ie a unui program. Un program mai multe instant poate avea nsa , e de execut , ie asociate (instant , e care pot rula simultan as sau succesiv). Exista, adar, o asociere many to one (mai multe la unul) ntre procese , s , i programe.

5.1.3

Structura unui proces

de date. Un Un proces este denit, la nivelul sistemului de operare, ca o structura ,i s proces are proprietat , i dispune de resurse, cele mai importante ind: ntreg care identicatorul unui proces, numit s , i PID (process id ). Este un numar unic n cadrul sistemului de operare procesul respectv; identica de programul din care ia nas imaginea procesului, reprezentata , tere procesul. Imaginea procesului cont , ine codul s , i datele necesare pentru execut , ie;

starea procesului. Un proces se poate aa n starea de rulare (n momentul n


pe procesor) sau n as care codul asociat se executa , teptare (un alt proces se aa n rulare); regiunile de memorie folosite de zonele de memorie utilizate, ce reprezinta proces pentru a ment , ine codul s , i datele; cu s s , ine o tabela , ierele deschise. De obicei , ierele deschise. Un proces ment astfel nct s dimensiunea tabelei este limitata de s , i numarul , ierele pe care le limita este stabilita implicit poate deschide un proces este limitat. (n Linux aceasta la 1024).
1

http://http://en.wikipedia.org/wiki/Indirect_self-reference

114

INTRODUCERE N SISTEME DE OPERARE

Vizualizarea structurii unui proces utiliznd procfs mai multe metode de a obt n Linux exista , ine informat , ii despre structura unui proces. Una din aceste metode este analiza procfs. Acesta este un sistem de s , iere virtual care acces la informat ofera , ii din sistemul de operare. Pentru a analiza un anumit proces va ce identica procesul (process trebui accesat directorul /proc/pid. pid este numarul id ). n exemplul de mai jos a fost accesat directorul procesului cu pid-ul 6740:
1 2 3 4 5

razvan@asgard:~$ cd /proc/6740/ razvan@asgard:/proc/6740$ ls auxv cwd exe maps mounts wchan cmdline environ fd mem mountstats

oom_adj oom_score

root smaps

stat statm

status task

din acest director ofera informat Diversele intrari , ii legate de proces:

pid-ul este dat de numele directorului: 6740;


de legatura exe: imaginea procesului este data simbolica
1 2

razvan@asgard:/proc/6740$ ls -l exe lrwxrwxrwx 1 razvan razvan 0 2009-07-19 19:38 exe -> /usr/bin/vim. gnome

cum se vede, procesul de fat este o instant a vim n mediu grac Dupa ,a ,a (GNOME). utilizata pentru crearea procesului: linia de comanda
1 2

razvan@asgard:/proc/6740$ cat cmdline vi 1.txt

ca s-a rulat comanda vi 1.txt. Se observa 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

ca directorul curent al comenzii este /home/razvan/tmp/fd_test. Rezulta

zonele de memorie ale procesului sunt date de s , ierul maps:


1 2 3 4 5 6 7

razvan@asgard:/proc/6740$ cat maps 08048000-081ce000 r-xp 00000000 03:03 081ce000-081db000 rw-p 00186000 03:03 081db000-08287000 rw-p 081db000 00:00 [...] b7fdc000-b7fde000 rw-p 00014000 03:03 bfc7a000-bfc8f000 rw-p bfc7a000 00:00

180465 180465 0 178741 0

/usr/bin/vim.gnome /usr/bin/vim.gnome [heap] /lib/ld-2.3.6.so [stack]

, esc aria de cuprindere a capitolului Nu vom insista pe aceste regiuni ntruct depas de fat a. ,

s , ierele deschise de proces pot vizualizate prin accesarea subdirectorului fd:

CAPITOLUL 5. PROCESE

115

1 2 3 4 5 6 7 8 9 10 11

razvan@asgard:/proc/6740$ cd fd razvan@asgard:/proc/6740/fd$ ls 0 1 2 3 5 7 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

s Nu vom insista pe descrierea tuturor intrarilor, dar se poate observa ca , ierul cu a numarul 7 este o legatur simbolica catre /home/razvan/tmp/fd_test/.1.txt.swp. Acest s , ier este copia de lucru a editorului vim pentru s , ierul 1.txt. Informat , ii detaliate despre procfs sunt descrise n sect , iunea 5.1.3. Sistemul de s , iere informat procfs este folosit drept suport de comenzile care ofera , ii despre procese. Astfel de comenzi sunt ps, pstree, pgrep sau top, despre care vom discuta n sect , iunile urmatoare.

5.1.4

Starile unui proces. Multiprogramare s , i multiprocesare

simultan, mai multe procese. Totus ntr-un sistem de operare ruleaza, , i un singur proces se poate executa la un moment dat pe un procesor single-core (sau, cu alte cuvinte, un procesor single-core poate executa codul asociat unui singur proces). Pe un sistem multi-core1 vor putea rula mai multe procese n acelas acestora ind egal , i timp, numarul 2 cu numarul de nuclee de procesare ale sistemului hardware . o stare de activitate. n mod obis mai multe stari n Orice proces are asociata , nuit exista un proces, dar noi ne vom referi doar la doua: care se poate gasi n acel moment pe unul din procesoarele rulare (running ): procesul ruleaza sistemului; eliberarea procesorului pentru a putea rula as , teapta , teptare (waiting ): procesul as pe acesta. as este nevoie de un algoritm care sa ofere ecarui Se observa, proces ocazia , adar, ca de a executat pe unul din procesoarele sistemului. numele Mecanismul de alocare a proceselor pe procesoarele sistemului poarta de alocare se de planicare (scheduling ). Subsistemul nucleului care se ocupa numes , te planicator de procese (scheduler ). ruleze pe un procesor s Rolul planicatorului este de a alege un proces care sa , i, la suspende execut ndeplinirea unei condit , ii date, sa , ia procesului pentru a l nlocui cu un
http://en.wikipedia.org/wiki/Multi-core_(computing) Sistemul hardware poate avea un procesor cu mai multe nuclee sau mai multe procesoare, ecare cu mai multe nuclee
2 1

116

INTRODUCERE N SISTEME DE OPERARE

altul. nlocuirea unui proces cu un alt proces se numes , te schimbare de context (context switch). un utilizator dorea rularea unui La nceputul istoriei sistemelor de operare, daca program, el ncarca pe un suport cont , inutul programului s , i as , tepta rularea acestuia (n contextul unui proces). Cnd procesul era planicat pe procesor, acesta rula complet la ncheierea absoluta a execut are dezavantajul lipsei pna , iei. Abordarea prezentata un proces ruleaza foarte mult sau daca trebuie sa comunice des de interactivitate: daca ruleze vor trebui sa cu dispozitive periferice lente, atunci alte procese care doresc sa as , tepte un timp ndelungat. Urmatorul pas n evolut , ia sistemelor de operare a fost introducerea not , iunii de diferent multiprogramare. nainte de a intra n detalii, trebuie amintita , a de viteza dintre un proces acceseaza hard procesor/memorie s Astfel, daca , i dispozitivele periferice. as disk-ul, va trebui sa tepte foarte mult timp pentru ca informat ia s a e disponibil a , , (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, un dispozitiv periferic lent, va trebui operare. n momentul n care un proces acceseaza as sa tepte furnizarea informat iei dorite; drept urmare, procesul respectiv este , , pe procesor (context suspendat temporar, s , i un alt proces este planicat n locul sau , te interactivitatea sistemului. Daca un proces se switch). n acest fel se mares n comunicat blocheaza , 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 mult timp pe procesor far a a executa o act nu va lasa alte procese ruleaza , iune blocanta 1 ruleze. Acest lucru nseamna pierderea interactivitat , ii . Solut sa , ia este asocierea, cu de rulare pe procesor (o cuanta de timp). La ecare proces, a unui timp limita ncheierea cuantei de timp, procesul va automat suspendat temporar s , i nlocuit cu un altul. n abordarea multitasking, schimbarea de context se va produce cnd procesul pe procesor executa o act sau cnd s care ruleaza , iune blocanta , i ncheie cuanta de timp. Toate sistemele de operare moderne sunt sisteme multiprocesare (multitasking).

5.2

Ierarhia de procese n Unix. Vizualizarea proceselor sistemului

n sistemele Unix (ca atare s , i n Linux), procesele sunt organizate ierarhic. Astfel, se este procesul parinte poate spune despre un proces ca al unui alt proces; viceversa, se un proces este procesul u pentru un altul. Un lucru de ret spune ca , inut este faptul ca un proces are un singur proces parinte, dar poate avea mai multe procese u. Modelul ierarhiei de procese n Unix este prezentat n gura urmatoare:
1

este starvation Denumirea tehnica

CAPITOLUL 5. PROCESE

117

Figura 5.1: Ierarhia de procese n Unix un proces este creat prin intermediul unui alt Ierarhia apare ca urmare a faptului ca o copie a procesului parinte proces. La crearea (nas terea) unui proces se realizeaza , Astfel, la rularea s cu cea dorita. , i se nlocuies , te imaginea de program a parintelui o copie a procesului shell, s comenzii ls din shell (n imagine /bin/bash), se creeaza ,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 nu are parinte. alte procese, care la rndul proces special pentru ca Din init se creeaza lor vor crea alte procese, completndu-se astfel ierarhia de procese ale sistemului.

5.2.1

Utilitarul ps

de vizualizare a proceselor sistemului. Comanda ps este principala comanda Informat , iile prezentate de ps sunt obt , inute analiznd informat , iile din procfs. La o rulare (far a argumente), ps as simpla eaz a informat ii despre procesele pornite de utilizatorul , , curent pe terminalul activ:
1 2 3 4

razvan@asgard:~$ ps PID TTY TIME CMD 3036 pts/0 00:00:00 bash 3079 pts/0 00:00:00 ps

pentru ecare Rularea comenzii presupune as , area unui cap de tabel s , i a unei intrari (far a argumente) se vor as proces. La o rulare simpla a identicatorul de proces (PID), ,

118

INTRODUCERE N SISTEME DE OPERARE

terminalul utilizat (TTY), timpul de rulare a procesului (TIME) s , i numele programului ce sta la baza acestuia (CMD). n exemplul de mai sus, utilizatorul a deschis un terminal cu ca un proces un interpretor de comenzi (bash) s , i apoi a rulat comanda ps. Se observa s ps se as , eaza , i pe sine. diferite tipuri de opt Comanda ps accepta , iuni care pot uneori conictuale. n continuare sunt precedate de semnul minus vom insista pe opt , iuni UNIX, caracterizate prin faptul ca (-). Pentru detalii complete legate modul de utilizarea al comenzii s , i de efectul opt , iunilor pagina de manual asociata (man ps). trebuie consultata De exemplu, pentru as , area proceselor pornite de utilizatorul curent, indiferent de terminalul utilizat, se foloses , te opt , iunea -a.
1 2 3 4

razvan@asgard:~$ ps -a PID TTY TIME CMD 3074 pts/1 00:00:00 vi 3094 pts/0 00:00:00 ps

ca, n aceasta situat procesele ce ruleaza pe terminalul Se observa , ie, se as , eaza pe pts/0 far a a se mai preciza procesele tip shell de pe pts/1 s , i cele ce ruleaza aceste terminale. impresionant de argumente care pot controla cont Comanda ps are un numar , inutul s ,i formatul as arii informat iilor despre procese. Vom prezenta cele dou a clase importante , , de opt , iuni: opt , iuni de select , ie s , i opt , iuni de formatare.

Opt , iuni de select , ie Opt , iunile de select , ie presupun selectarea anumitor procese din sistem n funct , ie de diverse criterii. Sunt prezentate, n continuare, cteva opt iuni utile: , folosind argumentul -e sau Selectarea tuturor proceselor din sistem: se realizeaza -A:
1 2 3 4 5 6 7 8 9 10

razvan@asgard:~$ ps -e PID TTY TIME 1 ? 00:00:00 2 ? 00:00:00 3 ? 00:00:00 [...] 3057 pts/1 00:00:00 3074 pts/1 00:00:00 3109 pts/2 00:00:00 3131 pts/0 00:00:00

CMD init ksoftirqd/0 events/0 bash vi bash ps

terminal, utilizator; o anumita componenta : pid, comanda, Select , ia proceselor dupa select prin utilizarea unui argument specic (de exemplu -C, -p aceasta , ie se realizeaza far a spat sau -u) urmat de lista de select , ie (elementele listei sunt separate prin virgula, , ii 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

119

3109 pts/2 3180 pts/3

00:00:00 bash 00:00:00 bash

n exemplul de mai sus au fost selectate procesele al caror executabil (-C) a fost bash, vi sau gnome-terminal.
1 2 3 4 5

razvan@asgard:~$ ps -p 1,3026,3074 PID TTY TIME CMD 1 ? 00:00:00 init 3026 ? 00:00:42 gedit 3074 pts/1 00:00:00 vi

Cu comanda de mai sus s-au selectat procesele cu pid-ul (-p) 1, 3026 sau 3074.
1 2 3 4 5

razvan@asgard:~$ ps -u www-data PID TTY TIME CMD 2787 ? 00:00:00 apache2 2788 ? 00:00:00 apache2 2790 ? 00:00:00 apache2

n exemplul anterior s-au selectat procesele ce apart , in utilizatorului (-u) www-data. des utilizator, numele acestuia nu apare n rezultatul Observat select , i ca , i s-a facut , ia dupa comenzii. Pentru aceasta vor trebui folosite opt , iunile de formatare ps pentru as , area altor cmpuri n afara celor implicite. procesele Opt , iunile de select , ie pot combinate. n exemplul de mai jos se selecteaza bash sau vi, cele care au pid-ul 2968 sau 2972 s i cele care apart in utilizatorului , , haldaemon:
1 2 3 4 5 6 7 8 9 10 11

razvan@asgard:~$ ps -C bash,vi -p 2968,2972 -u haldaemon PID TTY TIME CMD 2583 ? 00:00:02 hald 2590 ? 00:00:00 hald-addon-acpi 2968 ? 00:00:04 metacity 2972 ? 00:00:00 nautilus 3036 pts/0 00:00:00 bash 3057 pts/1 00:00:00 bash 3074 pts/1 00:00:00 vi 3109 pts/2 00:00:00 bash 3180 pts/3 00:00:00 bash

far a spat Argumentele listei de select , ie pentru opt , iunile ps sunt separate prin virgula, , ii. se dores Se pot nega opt , iunile de select , ie cu ajutorul argumentului -N. Astfel, daca , te select , ia proceselor care nu apart , in utilizatorului privilegiat (root) s , i nici utilizatorului razvan, s , i care nu au ca executabil apache2, se va folosi comanda urmatoare:
1 2 3 4 5 6 7 8 9 10 11

razvan@asgard:~$ ps -N -u root,razvan -C apache2 PID TTY TIME CMD 2283 ? 00:00:00 portmap 2575 ? 00:00:00 dbus-daemon 2583 ? 00:00:03 hald 2590 ? 00:00:00 hald-addon-acpi 2655 ? 00:00:00 exim4 2663 ? 00:00:00 fbguard 2664 ? 00:00:00 fbserver 2741 ? 00:00:00 rpc.statd 2756 ? 00:00:00 atd

120 Opt , iuni de formatare

INTRODUCERE N SISTEME DE OPERARE

coloanele care sunt as Opt , iunile de formatare pentru comanda ps controleaza , ate ca un cap de tabel cu elementele PID, rezultat al rularii. Implicit, rularea comenzii ofera a proceselor. Aceste elemente pot schimbate prin TTY, TIME s , i CMD, urmat de o lista intermediul opt iunilor de formatare. , As , area tuturor opt , iunilor frecvente pentru ps:
1 2 3 4

razvan@asgard:~$ ps -F UID PID PPID C razvan 3036 3034 0 razvan 3248 3036 0

SZ 1574 964

RSS PSR STIME TTY 3352 0 12:09 pts/0 940 0 13:02 pts/0

TIME CMD 00:00:00 bash 00:00:00 ps -F

ca s-a modicat capul de tabel. Sunt prezentate mai mult opt Se observa , 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 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 u al init (are PPID = 1). Urmatoarele trei procese sunt procesele u ale acestuia. De asemenea, procesul cu pid-ul 3034 (gnome-terminal) este tot un proces u al init, iar cele patru procese bash sunt procesele u ale acestuia. La fel, procesul ps (pid 3257) este procesul u al a celor zece procese de mai primului proces bash (pid 3036). O reprezentare ierarhica sus este urmatoarea:
1 2 3 4 5 6 7

init (1) ---> apache2 (2786)

---> \--> \--> \--> bash-terminal (3034) ---> \--> \--> \-->

apache2 (2787) apache2 (2788) apache2 (2790) bash (3036) bash (3057) bash (3109) bash (3180)

---> ps (3257)

As , area de opt , iuni specice pentru procese

CAPITOLUL 5. PROCESE

121

cu ajutorul argumentului -o, Specicarea opt , iunilor de as , are pentru ps se realizeaza far a spat urmat de argumentele de formatare dorite (separate prin virgula, , ii). 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 As , area pid-ului (pid), utilizatorului (user), a starii (pmem): argumente (cmd), timpul de procesor (cputime) s , i memoria folosita
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 bash 00:00:00 ps -e -o pid,user,stat,cmd, 00:00:00 1.4 2.3 0.4 0.6 0.1

a a insista pe semnicat proceselor, se observa ca procesul ps (pid 3260) Far , iile starii este n starea de rulare (R running), iar celelalte sunt n starea de as , teptare (S sleeping). Sistemul de test dispune de un singur procesor s , i ca atare un singur proces poate rula la un moment dat. As , i timpului de , area pid-ului, argumentelor, timpului de procesor, memoriei utilizate s pornire a comenzilor pentru procesele ce apart in utilizatorului www-data s , , i pentru procesele care au numele comenzii bash:
1 2 3 4 5 6 7 8 9

razvan@asgard:~$ ps -C bash -u www-data -o pid,args,cputime,rss,start PID COMMAND TIME RSS STARTED 2787 /usr/sbin/apache2 -k start 00:00:00 1948 11:29:03 2788 /usr/sbin/apache2 -k start 00:00:00 2452 11:29:03 2790 /usr/sbin/apache2 -k start 00:00:00 2456 11:29:03 3036 bash 00:00:00 3372 12:09:16 3057 bash 00:00:00 3348 12:10:20 3109 bash 00:00:00 3356 12:23:31 3180 bash 00:00:00 3340 12:44:33

Spat n kilooctet , iul de memorie utilizat (rss resident set size), este masurat , i (KB). comenzii ps se realizeaza cu ajutorul opt Sortarea rezultatului rularii , iunii --sort de lista de criterii de sortare. Semnul + (implicit) sau - n fat urmata , a unui criteriu de sortare n ordine crescatoare sortare nseamna sau descrescatoare:
1 2 3 4 5 6 7

razvan@asgard:~$ ps -e -o pid,cmd,cputime,pmem,rss --sort -rss PID CMD TIME %MEM RSS 3247 evince /home/razvan/school/ 00:00:37 10.7 206556 402 evolution 00:01:28 7.5 146268 5121 /usr/bin/x-www-browser 00:01:03 5.5 107444 7709 pidgin 00:00:05 2.9 56104 3334 /usr/bin/X :0 -audit 0 -aut 00:02:39 2.8 54960

122
8 9 10 11 12

INTRODUCERE N SISTEME DE OPERARE


00:00:26 00:00:02 00:00:01 00:00:15 1.8 1.6 1.4 1.4 36324 31252 28844 27616

4391 nautilus --no-default-windo 4595 mono /usr/lib/tomboy/Tomboy 410 /usr/lib/evolution/evolutio 4389 gnome-panel --sm-client-id [...]

o sortare a proceselor din sistem dupa memoria Exemplul de mai sus realizeaza Se observa ca procesele cele mai mari consumatoare de memorie sunt ocupata. evince (un viewer de documente), evolution (un client de mail) s ,i x-www-browser (un browser web).

Alte opt , iuni arborescenta. Acest lucru se Utilitarul ps permite as , area ierarhiei de procese n forma cu ajutorul opt realizeaza , iunii -H:
1 2 3 4 5 6 7 8 9 10 11 12

razvan@asgard:~$ ps -C init,apache2,gnome-terminal,bash -o pid,user,comm, cputime,pmem --sort pid -H PID USER COMMAND TIME %MEM 1 root init 00:00:00 0.1 2786 root apache2 00:00:00 0.5 2787 www-data apache2 00:00:00 0.3 2788 www-data apache2 00:00:00 0.4 2790 www-data apache2 00:00:00 0.4 3034 razvan gnome-termina 00:00:05 2.9 3036 razvan bash 00:00:00 0.6 3057 razvan bash 00:00:00 0.6 3109 razvan bash 00:00:00 0.6 3180 razvan bash 00:00:00 0.6

caractere spat de procesul n acest caz procesele u sunt indentate cu doua , iu fat ,a parinte.

5.2.2

Utilitarul pstree

ierarhia de procese a sistemului. n cazul unei utilizari simple Utilitarul pstree as , eaza a niciun argument), comanda as (far eaz a ierarhia de procese ncepnd de la init: ,
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

este dorita as Daca , area ierarhiei de procese ncepnd de la un anumit proces, va trebui transmis ca parametru pid-ul acelui proces:
1 2 3 4 5 6 7

razvan@asgard:~$ pstree 3034 gnome-terminal-+-bash |-bash---vi |-bash---man---pager |-bash---pstree |-gnome-pty-helpe -{gnome-terminal}

Se poate as , a inclusiv pid-ul proceselor din ierarhie prin intermediul opt , iunii -p:
1 2 3 4 5 6 7

razvan@asgard:~$ pstree -p 3034 gnome-terminal(3034)-+-bash(3036) |-bash(3057)---vi(3074) |-bash(3109)---man(3295)---pager(3302) |-bash(3180)---pstree(3343) |-gnome-pty-helpe(3035) -{gnome-terminal}(3037)

procfs pentru obt Ca s , i n cazul comenzii ps, pstree utilizeaza , 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 folosita pentru a as , a doar procesele din sistem care ndeplinesc o condit , ie. O funct , ionalitate pgrep poate obt cu ajutorul comenzii ps s echivalenta , inuta , i al argumentelor specice comanda, -u pentru acesteia: -p pentru select ia dup a pid, -C pentru select ia dup a , , utilizator etc. select , ia dupa pgrep pentru select n continuare sunt prezentate exemple ale rularii , ia proceselor care doar pid-urile proceselor. Daca au ca parinte procesul init (pid 1). Implicit se selecteaza se dores , te s , i as , area numelor proceselor, se foloses , te opt , iunea -l:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

razvan@asgard:~$ pgrep -P 1 2 3 4 5 1021 2284 [...] 3025 3027 3052 razvan@asgard:~$ pgrep -P 1 -l 2 ksoftirqd/0 3 events/0 4 khelper 5 kthread 1021 udevd 2284 portmap [...] 3025 gnome-screensav

124
22 23

INTRODUCERE N SISTEME DE OPERARE

3027 gnome-terminal 3052 soffice

5.2.4

Utilitarul top

Utilitarul top este utilizat pentru a as , a informat , ii n mod dinamic (n timp real) despre a acesteia este monitorizarea procesele existente n sistem. O utilizare frecventa sistemului (vezi sect , iunea 10.3.1). a argumente, top va as La o rulare far , a un ecran cu informat , ii despre sistem s ,i procesele care ruleaza. n mod implicit, acest ecran este actualizat la ecare 3 secunde. Un exemplu de ecran as , at prin rularea comenzii top este prezentat mai jos:

Figura 5.2: Ecran de rulare top Ecranul as zone: , at de top cuprinde urmatoarele

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 linii). Gradul de ncarcare ocupat (ultimele doua a sistemului este o masura a arii procesorului s ncarc i poate determinat s i cu ajutorul comenzii uptime . , , (prompt line): aici utilizatorul poate introduce comenzi specice zona de comanda de interact iune cu utilitarul top; , antetul de tabel pentru informat antetul de tabel (columns header ): as , eaza , iile as , ate despre procese; informat zona de procese (task area): as , eaza , ii despre procese.

CAPITOLUL 5. PROCESE top Interfat , a interactiva

125

cu utilizatorul care i permite acestuia alterarea formatului top are o interfat, a interactiva pentru lucrul interactiv cu top este cea de as de as are. Comanda cea mai utila , , are a ecranului de ajutor (tasta h). as unei Majoritatea comenzilor top sunt de tipul toggle, adica , area sau oprirea as , arii anumite componente din ecranul de as are. n continuare vor prezentate cteva din , comenzile top cele mai utile n funct , ie de zona ecranului de as , are n care au efect. Detalii suplimentare se pot aa prin consultarea paginii de ajutor (prin apasarea tastei h) sau a paginii de manual (man top).

Comenzi pentru zona de sumarizare. Comenzile folosite pentru lucrul cu zona de sumarizare sunt comenzi de tipul toggle: pentru a activa/dezactiva as tasta l este folosita , area de informat , ii despre ncarcarea sistemului (prima linie din zona de sumarizare); pentru a activa/dezactiva as tasta t este folosita , area de informat , ii despre numarul de procese s , i utilizarea procesorului (liniile 2 s , i 3 din zona de sumarizare); pentru a activa/dezactiva as tasta m este folosita , area de informat , ii despre linii din zona de sumarizare). utilizarea memoriei sistemului (ultimele doua

zona de as Comenzi pentru zona de procese. Dintre comenzile care afecteaza , are pentru procese amintim: pentru a as nu doar numele procesului; tasta c este folosita , a comanda completa, pentru a adauga/elimina tasta f este folosita coloane utilizate pentru as , area de informat , ii despre procese; pentru a schimba ordinea coloanelor din tabel; dupa apasarea tasta o este folosita tastei f sau o, utilizatorului i este prezentat un ecran de congurare, n care poate ordine (tot prin intermediul unor taste); specica noi coloane sau o noua pentru sortare ascendenta sau descendenta; tasta R (de tip toggle) este folosita care se face tasta F sau tasta O sunt folosite pentru a congura coloana dupa sortarea proceselor din zona de procese. n mod implicit sortarea se realizeaza timpul de procesor, astfel nct procesele care ntr-un interval dat de timp dupa tastele < s au utilizat cel mai mult procesorul vor aparea primele n lista; , i > pot care se relizeaza sortarea, selectnd folosite pentru schimbarea coloanei dupa coloana din stnga sau din dreapta.

s Aceste comenzi folosesc zona de comanda Comenzi n zona de comanda ,i de obicei, procesele sau zona de procese: afecteaza, promptul tasta k permite terminarea unui proces. Apasarea acestei taste ofera PID to kill: unde utilizatorul va introduce pid-ul procesului a carui execut , ie se dores , te a ncheiata;

126

INTRODUCERE N SISTEME DE OPERARE

tasta n permite precizarea numarului de procese care vor as , ate n zona de procese; apasarea acestei taste conduce la aparit , ia unui prompt unde utilizatorul numarul precizeaza de procese pe care dores te s a le vizualizeze/monitorizeze; ,

tasta u permite precizarea unui utilizator, ind apoi as , ate numai procesele care as promptul Which user (blank apart , in acestuia. Zona de comanda , eaza for all): unde se cere introducerea unui nume de utilizator.

top Interfat , a neinteractiva

top poate utilizat s , i n mod neinteractiv prin folosirea argumentului -b n linie de Pornirea neinteractiva este folosita de obicei mpreuna cu argumentul -n, comanda.
numarul care precizeaza de iterat , ii de as , are. Se obt , ine astfel un rezultat ce poate redirectat ntr-un s ier pentru analiz a ulterioar a: ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

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 PID 5124 8232 11446 1 2 3 4 5 6 7 8 11 [...] USER george george george root root root root root root root root root PR 20 20 20 20 15 RT 15 RT 15 15 15 15 NI 0 0 0 0 -5 -5 -5 -5 -5 -5 -5 -5 VIRT RES SHR S %CPU %MEM 155m 2656 2324 S 2.0 0.3 553m 134m 20m S 2.0 13.5 2444 1096 824 R 2.0 0.1 3084 540 488 S 0.0 0.1 0 0 0 S 0.0 0.0 0 0 0 S 0.0 0.0 0 0 0 S 0.0 0.0 0 0 0 S 0.0 0.0 0 0 0 S 0.0 0.0 0 0 0 S 0.0 0.0 0 0 0 S 0.0 0.0 0 0 0 S 0.0 0.0 TIME+ 6:23.52 38:13.04 0:00.01 0:00.79 0:00.00 0:00.00 0:00.07 0:00.00 0:00.41 0:00.00 0:00.00 0:00.00 COMMAND pulseaudio firefox top init kthreadd migration/0 ksoftirqd/0 watchdog/0 events/0 cpuset khelper netns

5.2.5

Timpul de execut , ie al unui proces. Comanda time

la durata sa de execut Timpul de execut , ie al unui proces se refera , ie n sistem, din s n momentul terminarii acestuia. momentul crearii , i pna pentru masurarea Comanda time este utilizata timpului de rulare a unui proces s ,i a implicite a comenzii time ofera 3 timpi: resurselor utilizate de acesta. Rezultatul rularii la real timpul efectiv de execut, ie, masurat de la crearea procesului s , i pna terminarea acestuia;

user timpul petrecut n spat, iul utilizator; sys timpul petrecut rulnd apeluri de sistem (n spat, iul kernel).

CAPITOLUL 5. PROCESE

127

time primes durata de execut , te ca argument numele unui program a carui , ie va Un exemplu de rulare este prezentat mai jos: masurat a.
1 2 3 4 5

root@asgard:/home/razvan# time updatedb real user sys 4m19.309s 0m2.680s 0m5.550s

ca rularea comenzii updatedb a durat 4 minute s Se observa , i 19 secunde. Totus , i timpul adunnd timpul petrecut n spat real de rulare a procesului se masoar a iul utilizator (2.68 , secunde) s , i timpul petrecut n spat , iul kernel (5.55 secunde). Cu alte cuvinte, din timpul ct a durat rularea comenzii, procesul a consumat doar 8.23 secunde pentru a executat de catre procesor. Restul timpului a fost ocupat cu rularea altor procese sau schimbarea contextului ntre procese. Schimbarea contextului are loc n momentul n care procesului cuanta de timp sau acceseaza dispozitive periferice lente. i expira

5.2.6

Sistemul de s , iere procfs

cum s-a prezentat, sistemul de s Dupa , iere procfs este utilizat de comenzile ce obt , in informat ps, pstree, pgrep sau top. Pachetul , ii despre procesele din sistem: Debian/Ubuntu utilizat pentru instalarea acestor utilitare se numes , te procps pentru a procfs este utilizat pentru obt indica faptul ca , inerea de informat , ii despre procese. datele nu se gasesc procfs este un sistem de s pe un suport zic , iere virtual (adica permanent precum un hard disk sau CD-ROM). n cazul procfs, ecare s , ier este de zic n RAM) care ofera informat fapt o regiune de memorie (stocata ii despre sistem. , informat procfs ofera , ii att despre procesele din sistem ct s , i alte informat , ii specice: dispozitivele conectate, ocuparea ntreruperilor etc, permit , nd totodata s , i congurarea anumitor componente ale sistemului. procfs este montat n /proc:
1 2 3 4 5

razvan@asgard:~$ cat /etc/mtab /dev/hda3 / ext3 rw,errors=remount-ro 0 0 tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0 proc /proc proc rw,noexec,nosuid,nodev 0 0 [...]

de s Din punctul de vedere al utilizatorului, procfs este vizibil ca o suita , iere s , i directoare cu informat , ii despre sistem:
1 2 3 4 5 6 7 8 9

razvan@asgard:~$ cd /proc/ 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 Informat , ii despre procese

INTRODUCERE N SISTEME DE OPERARE

Informat despre procesele din sistem sunt oferite de procfs prin intermediul , ii Acest numar reprezinta pid-ul procesului directoarelor al caror nume este un numar. despre care se dores , te aarea 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 OpenOfce, numele executabilului din care a fost generat procesul este soffice.bin:
1 2 3 4 5 6 7 8 9 10

razvan@asgard:/proc$ ps -C soffice.bin PID TTY TIME CMD 3066 ? 00:01:02 soffice.bin razvan@asgard:/proc$ cd 3066/ 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

procesul asociat OpenOfce are pid-ul 3066 s Se poate observa ca , i ca atare va accesat directorul 3066. Acest director cont ine o serie de s iere, directoare s , , , i legaturi informat exe ofera simbolice care ofera Astfel, legatura simbolica , ii despre proces. informat ii despre executabilul utilizat pentru crearea procesului; s ierul cmdline s , , ,i linia de comanda folosita s s environ precizeaza mediul de creare , ierul ,i (environment):
1 2 3 4 5 6 7 8

razvan@asgard:/proc/3066$ ls -l exe lrwxrwxrwx 1 razvan razvan 0 2007-08-04 12:01 exe -> /usr/lib/openoffice/ program/soffice.bin razvan@asgard:/proc/3066$ cat cmdline /usr/lib/openoffice/program/soffice.bin-writer-splash-pipe=5 razvan@asgard:/proc/3066$ cat environ SSH_AGENT_PID=2950SHELL=/bin/bashGTK_RC_FILES=/etc/gtk/gtkrc:/home/razvan /.gtkrc-1.2-gnome2OLDPWD=/usr/lib/openofficeUSER= razvanOPENOFFICE_MOZILLA_FIVE_HOME=/usr/lib/openoffice/ programLD_LIBRARY_PATH=/usr/lib/openoffice/program [...]

printre altele, informat Fis , ierul status ofera, , ii referitoare la utilizatorul ce det , ine s , ierul executabil (uid 1000), starea procesului (S sleep), cantitatea de memorie ocupate, numarul de thread-uri etc:
1 2 3 4 5 6 7 8 9 10 11

razvan@asgard:/proc/3066$ cat status Name: soffice.bin State: S (sleeping) SleepAVG: 98% [...] Uid: 1000 1000 1000 1000 Gid: 1000 1000 1000 1000 [...] VmPeak: 205720 kB VmSize: 202392 kB VmLck: 0 kB

CAPITOLUL 5. PROCESE
12 13 14 15 16

129

VmHWM: VmRSS: [...] Threads: [...]

84040 kB 80968 kB 6

informat pe Directorul task/ ofera , ii despre thread-urile acestui proces. Nu insistam not iunea de thread, deoarece dep as es te aria de cuprindere a acestui capitol. , , ,
1 2 3 4

razvan@asgard:/proc/3066$ cd task/ razvan@asgard:/proc/3066/task$ ls 3066 3067 3068 3069 3070 3071

Directorul fd/ det simbolice catre s , ine legaturi , iere deschise de procesul curent. Se printre s observa, , iere deschise, s , i s , ierul cu extensia .doc care este editat (Raport.doc):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

razvan@asgard:/proc/3066$ cd fd/ 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

razvan@asgard:/proc/3066/fd$ ls -l total 38 lr-x------ 1 razvan razvan 64 2009-08-04 l-wx------ 1 razvan razvan 64 2009-08-04 l-wx------ 1 razvan razvan 64 2009-08-04 [...] lr-x------ 1 razvan razvan 64 2009-08-04 [...] lrwx------ 1 razvan razvan 64 2009-08-04 doc [...]

13:31 0 -> /dev/null 13:31 1 -> pipe:[8770] 13:31 10 -> pipe:[9795] 13:31 22 -> /dev/urandom 13:31 34 -> /home/razvan/Raport.

Alte informat , ii utile s n afara informat , iilor despre procese, procfs ofera , i alte informat , ii utile despre sistem. Acestea pot aate tot prin accesarea unor s iere s i directoare din /proc. Printre , , informat , iile utile (folosite, de asemenea, de diverse utilitare din sistem), se gasesc informat , ii despre:

procesor: prin accesarea /proc/cpuinfo; memoria sistemului: prin accesarea /proc/meminfo; partit, ii: prin accesarea /proc/partitions; timpul de rulare a sistemului: prin accesarea /proc/uptime;
informat n plus, accesarea directoarelor de forma /proc/fs/, /proc/net/, ofera , ii suplimentare, permit nd totodat a congurarea unor parametri ai sistemului. Astfel , de citire a informat procfs nu este numai o interfat ,a , iilor despre sistem, ci este s , i una de congurare a unor parametri ai sistemului.

130

INTRODUCERE N SISTEME DE OPERARE

5.3

Rularea proceselor n background. Daemoni

Job-uri.

de obicei n as Rularea unui proces din interpretorul de comenzi (shell) rezulta , area unui se dores rezultat s , i terminarea procesului. Spre exemplu, daca , te as , area cont , inutului comanda ls. Acest lucru duce la crearea unui proces directorului curent se ruleaza cu u din shell, ncarcarea executabilului /bin/ls s , i execut , ia noului proces ncheiata terminarea procesului, utilizatorul poate rula un nou proces terminarea acestuia. Dupa prin introducerea comenzii corespunzatoare la promptul interpretorului. conform scenariului de mai sus se spune ca ruleaza n Un proces care ruleaza n foreground are acces la foreground (n prim plan). Un proces care ruleaza n foreground pot citi de la intrarea terminalul curent. Altfel spus, procesele care ruleaza standard (standard input) s , i pot as , a informat , ii la ies , irea standard (standard output). un proces poate rula n background (n fundal). Un proces care De partea cealalta, n fundal pierde posibilitatea de a citi de la intrarea standard, dar s ruleaza , i continua rularea.

5.3.1

Rularea unui proces n background

cu ajutorul operatorului & dupa comanda. Rularea unui proces n fundal se realizeaza 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 comanda. De obicei catre utilizator, n felul acesta utilizatorul putnd introduce o noua cnd comanda de executat dureaza mult timp, ca de exemplu acest lucru se realizeaza cautarea unui s ier, actualizarea bazei de date de c autare (updatedb), rularea unui , graca etc. Procesele care ruleaza n fundal sunt denumite job-uri. proces cu interfat ,a comenzile de deschidere a editorului XEmacs s n exemplul de mai jos, se ruleaza ,i a calculatorului din mediul grac GNOME. Ambele programe sunt pornite n fundal:
1 2 3 4 5 6 7

razvan@asgard:~$ xemacs & [1] 3418 razvan@asgard:~$ gnome-calculator & [2] 3420 razvan@asgard:~$

rularea unei comenzi n fundal se observa ca apare un mesaj specic de forma Dupa n [N] M. n acest format N este indicele job-ului (indicele procesului care ruleaza fundal), iar M este identicatorul de proces (pid-ul) pentru job-ul din fundal. Avantajul acestor procese n fundal, as rularii , a cum a fost precizat s , i mai sus, este faptul ca napoi promptul utilizatorului permit interpretorul de comenzi ofera , ndu-i astfel rularea de noi comenzi.

CAPITOLUL 5. PROCESE

131

5.3.2

Suspendarea unui proces

n foreground poate fort intre n background (s Un proces care ruleaza , at sa , i implicit intre n starea suspendat nu ruleaza) prin intermediul combinat sa , iei de taste CTRL-Z (control t inut ap asat, dup a care se apas a z). Ap asarea acestei combinat , , ii de taste este de sistemul de operare s interceptata , i procesul activ (aat n foreground ) este fort , at sa e suspendat. n exemplul de mai jos, utilizatorul a dorit editarea s , ierului out.txt folosind vi. init Procesul creat prin execut , ia comenzii vi out.txt ruleaza , ial n foreground. Utilizatorul a apasat apoi CTRL-Z s i a fort at suspendarea procesului curent n , , background s utilizator: , i oferirea promptului catre
1 2 3 4

razvan@asgard:~$ vi out.txt [3]+ Stopped razvan@asgard:~$

vi out.txt

ca procesul a fost suspendat (stopped ) s Se observa 3. , i s-a creat jobul cu numarul ator Un scenariu aseman este prezentat s De data aceasta , i n exemplul de mai jos. utilizatorul foloses , te utilitarul du pentru a vedea spat , iul ocupat de s , ierele s , i directoarele din directorul curent:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

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 [4]+ Stopped du -hs *

razvan@asgard:~$

5.3.3

Controlul job-urilor

sau sunt suspendate Termenul de job a fost introdus referitor la procesele care ruleaza n fundal. Interpretorul de comenzi (shell-ul) bash pune la dispozit , ia utilizatorului mai multe comenzi prin intermediul carora se poate interact , iona cu procesele din fundal. Mai multe informat ii despre aceste comenzi pot g asite prin consultarea paginii de manual , (man bash, sect , iunea JOB CONTROL) sau pagina info (info bash, sect , iunea JOB CONTROL. Trebuie instalat pachetul bash-doc).

132 Comanda jobs

INTRODUCERE N SISTEME DE OPERARE

job-urile pentru terminalul curent: Comanda jobs as , eaza


1 2 3 4 5 6 7

razvan@asgard:~$ jobs [1] Running [2] Running [3]- Stopped [4]+ Stopped razvan@asgard:~$

xemacs & gnome-calculator & vi out.txt du -hs *

sunt patru job-uri dintre care doua sunt n rulare (Running ) iar Se poate observa ca sunt suspendate (Stopped ). Semnul + este folosit pentru job-ul curent celelalte doua (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 (e au fost pornite n fundal, e 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 6 7 8 9 10 11 12 13 14 15 16

razvan@asgard:~$ bg %4 [4]+ du -hs * & 1.2G school 2.5M shared-projects 1.7G vmware razvan@asgard:~$ jobs [1] Running [2] Running [3]+ Stopped [4]- Done razvan@asgard:~$ jobs [1] Running [2]- Running [3]+ Stopped

xemacs & gnome-calculator & vi out.txt du -hs *

xemacs & gnome-calculator &

s-a continuat rularea job-ului [4] n background dupa care procesul Se poate observa ca asociat s-a terminat. unor job-uri. Spre exemplu, daca vom Mesajul Done este as , at la ncheierea rularii nchide din mediul grac gnome-calculator s xemacs, mesajele as vor ,i , ate atoare aseman cu cele de mai jos:
1 2 3

razvan@asgard:~$ [1] Done [2]- Done

xemacs gnome-calculator

CAPITOLUL 5. PROCESE
4 5 6

133

razvan@asgard:~$ jobs [3]+ Stopped

vi out.txt

terminarea celor doua job-uri, mai ramne Dupa n background doar job-ul 3 (cel asociat este singurul proces ramas, editorului vi). Avnd n vedere ca vi poate adus n foreground utiliznd comanda fg sau fg %3:
1 2

razvan@asgard:~$ fg vi out.txt

rularea acestei comenzi, utilizatorul poate continua editarea s Dupa , ierului out.txt.

5.3.4

Daemoni

n fundal. Fat de Un daemon este un tip particular de proces care ruleaza ,a n fundal (pornite prin intermediul operatorului &) sau care procesele care ruleaza sunt suspendate n fundal (prin intermediul combinat , iei CTRL-Z), un daemon se detas eaz a de terminalul de control. , Astfel, un daemon nu va putea comunica direct cu utilizatorul prin intermediul s terminalului: nu va accepta comenzi de control de la tastatura , i nu va as , a rezultate la terminal. Comunicarea cu un daemon se face prin mecanisme mai complicate (ca de exemplu semnale vezi sect , iunea 5.4). a o Init Ulterior a fost gasit , ial denumirea de daemon nu a avut nicio semnicat , ie. abreviere pentru aceasta (backronym) de la Disk And Execution MONitor. De obicei, procesele care sunt daemoni au numele terminat n d: hald, udevd, sshd, a a nsa o regula). inetd etc. (far Pentru selectarea proceselor care nu au atas , ate niciun terminal (s , i ca atare pot terminal) urmat de daemoni), se foloses , te ps cu argumentul -t (pentru select , ia dupa opt iunea (semnul minus nseamn a procesele care nu au atas ate niciun terminal). , ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

razvan@asgard:~$ ps -t PID TTY TIME CMD 1 ? 00:00:00 init 2 ? 00:00:00 ksoftirqd/0 3 ? 00:00:00 events/0 [..] 2657 ? 00:00:00 exim4 2665 ? 00:00:00 fbguard 2666 ? 00:00:00 fbserver 2676 ? 00:00:00 inetd 2689 ? 00:00:00 sshd 2695 ? 00:00:00 vsftpd [...] 3006 ? 00:00:02 gedit 3009 ? 00:00:00 gnome-screensav 3016 ? 00:00:00 gnome-terminal 3017 ? 00:00:00 gnome-pty-helper

ca nu toate procesele care nu au atas Se observa , ate un terminal sunt procese daemon. Spre exemplu, procesul gedit (pid 3006) nu este un daemon n adevaratul

134

INTRODUCERE N SISTEME DE OPERARE

sens al cuvntului. Des , i nu are atas , at niciun terminal de control, se poate comunica de a nu avea asociat niciun terminal, un prin intermediul mediului grac. n plus fat ,a directe proces daemon va rula n background, eliminnd posibilitatea comunicarii (tastatura/mouse) cu utilizatorul.

Interact , iunea cu procesele daemon ntrebarea cum poate utilizatorul sa interact Se pune nsa , ioneze cu procesele daemon, s n masura n care nu o poate face prin intermediul intrarii , i ies , irii standard. Cele doua mecanisme care permit acest lucru sunt s , ierul/s , ierele de congurare s , i semnalele. n general, procesele daemon au unul sau mai multe s , iere de congurare. De exemplu:

server-ul web apache2 foloses , te /etc/apache2/apache2.conf; server-ul SSH openssh foloses , te /etc/ssh/sshd_config; server-ul X (mediul grac) foloses , te /etc/X11/xorg.conf;
procesului daemon s Aceste s , iere de congurare sunt citite n momentul crearii , i permit acestuia. De exemplu, n cazul server-ului openssh, s controlul funct , ionarii , ierul de sau prin chei publice), congurare permite controlul tipului de autenticare (cu parola daca serverul permite X forwarding etc. portul pe care serverul asculta, se dores s Daca se editeaza , te alterarea comportamentului server-ului, , ierul de salvarea s congurare. Dupa , ierului, trebuie repornit procesul daemon, acesta va citi s , ierul de congurare s , i va stabili noul comportament conform congurat , iei din s , ier. Oprirea, suspendarea s , i repornirea unui proces, n general, s , i a unui daemon, n cu ajutorul semnalelor. Daca n cazul unui proces care nu este particular, se realizeaza daemon, acesta poate oprit sau suspendat s , i prin intermediul terminalului (prin combinat , ii de taste), un proces daemon poate oprit/suspendat/repornit doar cu ajutorul semnalelor. Despre semnale se va discuta n sect , iunea 5.4.

Comanda nohup pentru a rula un proces cu caracteristici de daemon. Comanda nohup poate utilizata ignorarea de catre Utilizarea acestei comenzi determina proces a semnalului SIGHUP (acest semnal este trimis de un terminal catre procesele sale copil atunci cnd este par aseasc nchis). nohup este folosit, de obicei, atunci cnd utilizatorul va dori sa a e rulata n continuare. Comanda nohup este urmata de terminalul dar comanda sa pentru pornirea procesului s comanda ce va rulata , i de caracterul &. Un exemplu este prezentat n continuare:
1 2 3 4 5 6 7 8 9

asgard:/home/razvan# nohup updatedb & [1] 3116 asgard:/home/razvan# nohup: appending output to nohup.out 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

135
find sort frcode ps

3125 3126 3127 3129

pts/1 pts/1 pts/1 pts/1

00:00:00 00:00:00 00:00:00 00:00:00

ca procesul creat (updatedb) nu pierde controlul terminalului curent, nsa Se observa nu se poate comunica cu acesta prin intermediul semnalelor de suspendare/repornire cum reiese s comenzii, ies sau intrarii/ies , irii standard. Dupa , i din rezultatul rularii , irea acesteia este redirect ionat a n s ierul nohup.out . , ,

5.4

Semnale

care sunt utilizate pentru a Semnalele sunt mecanisme de noticare asincrona transmite o condit ie special a unui proces. , Semnalele sunt asincrone n raport cu uxul de rulare al procesului. Astfel, un semnal nu este corelat direct cu instruct , iunile executate de proces, putnd transmis/primit la un moment de timp nes tiut de proces. , moduri: Semnalele sunt transmise n doua care solicita de nucleu (kernel) pentru a indica o condit, ie neobis , nuita oprirea/suspendarea sau doar noticarea procesului;

de utilizator.
Semnale care sunt transmise uzual de nucleu sunt urmatoarele (aceste semnale se pot trimite s utilizator, dar cel mai adesea tunt trimise de catre nucleu): , i de catre invalide a unei zone SIGSEGV (signal segment violation): n momentul accesarii de memorie;

SIGBUS n momentul unei erori pe magistrala sistemului;


SIGFPE (signal oating point error ): n momentul aparit, iei unei erori de virgula mobila;

SIGTERM (signal termination): pentru oprirea unui proces;


a unui proces. SIGKILL (signal kill ): pentru oprirea necondit, ionata Semnale care sunt transmise uzual de utilizator sunt:

SIGINT (signal interrupt ): ntrerupe procesul curent;


oprirea procesului curent; SIGQUIT (signal quit ): semnaleaza

SIGSTOP (signal stop): suspenda procesul curent; SIGCONT (signal continue): repornes , te procesul suspendat.
Nu vom insista pe modul s , i condit , iile n care nucleul transmite semnale unui proces, ci pe modul n care utilizatorul le transmite. Utilizatorul poate transmite unui proces semnale moduri: n doua

prin intermediul unor comenzi specice: kill, killall; (vezi sect, iunea 5.4.2)

136

INTRODUCERE N SISTEME DE OPERARE

prin intermediul unor combinat, ii de taste specice. (vezi sect, iunea 5.4.3)
Informat , ii detaliate despre semnale se pot aa prin consultarea paginii de manual (man 7 signal).

5.4.1

Semnale importante UNIX

nainte de a discuta despre modul de interact , iune a utilizatorului cu procesele prin intermediul semnalelor, trebuiesc amintite cteva semnale importante (unele cu semnalele pe care le ofera sistemul de ment Lista completa , ionate s , i anterior). folosind comanda kill cu opt operare poate vizualizata iunea -l ( list ): ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

razvan@asgard:~$ kill -l 1) SIGHUP 2) SIGINT 5) SIGTRAP 6) SIGABRT 9) SIGKILL 10) SIGUSR1 13) SIGPIPE 14) SIGALRM 17) SIGCHLD 18) SIGCONT 21) SIGTTIN 22) SIGTTOU 25) SIGXFSZ 26) SIGVTALRM 29) SIGIO 30) SIGPWR 35) SIGRTMIN+1 36) SIGRTMIN+2 39) SIGRTMIN+5 40) SIGRTMIN+6 43) SIGRTMIN+9 44) SIGRTMIN+10 47) SIGRTMIN+13 48) SIGRTMIN+14 51) SIGRTMAX-13 52) SIGRTMAX-12 55) SIGRTMAX-9 56) SIGRTMAX-8 59) SIGRTMAX-5 60) SIGRTMAX-4 63) SIGRTMAX-1 64) SIGRTMAX

3) 7) 11) 15) 19) 23) 27) 31) 37) 41) 45) 49) 53) 57) 61)

SIGQUIT SIGBUS SIGSEGV SIGTERM SIGSTOP SIGURG SIGPROF SIGSYS SIGRTMIN+3 SIGRTMIN+7 SIGRTMIN+11 SIGRTMIN+15 SIGRTMAX-11 SIGRTMAX-7 SIGRTMAX-3

4) 8) 12) 16) 20) 24) 28) 34) 38) 42) 46) 50) 54) 58) 62)

SIGILL SIGFPE SIGUSR2 SIGSTKFLT SIGTSTP SIGXCPU SIGWINCH SIGRTMIN SIGRTMIN+4 SIGRTMIN+8 SIGRTMIN+12 SIGRTMAX-14 SIGRTMAX-10 SIGRTMAX-6 SIGRTMAX-2

ca un semnal are un numar de identicare s indicat Se observa , i un nume care ofera , ii asupra proceselor. Semnalele relevante sunt cele pna la 31 despre efectul sau (SIGSYS). Celelalte (SIGRTMIN, SIGRTMAX) sunt semnale de timp real (SIGnal Real Vom prezenta cteva dintre Time) s , i nu sunt relevante pentru prezentarea curenta. semnalele cele mai importante:

SIGHUP (1) (signal hang up): este folosit pentru repornirea unui proces; acest
semnal este de obicei transmis proceselor daemon pentru repornirea acestora s ,i recitirea s , ierului/s , ierelor de congurare;

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 terminate cu SIGQUIT dar nu cu SIGINT;
o instruct SIGILL (4) (signal illegal ): procesul executa , iune invalida; n mod necondit SIGKILL (9) (signal kill ): cel mai puternic semnal; termina , ionat un proces

SIGSEGV (11) (signal segment violation): semnal transmis n momentul accesului


de obicei, n terminarea procesului s invalid la o zona de memorie; rezulta, , i la aparit ia mesajului Segmentation fault; ,

CAPITOLUL 5. PROCESE

137

un proces; n mod tipic nucleul SIGTERM (15) (signal termination): termina va terminat; procesul transmite nti SIGTERM unui proces pentru a-l anunt , a ca operat , are (cleanup), dupa care kernel-ul transmite SIGKILL realizeaza , ii de curat s , i procesul este terminat; procesul curent; SIGSTOP (19) (signal stop): suspenda

SIGCONT (18) (signal continue): reia execut, ia unui proces suspendat.

5.4.2

Comenzile kill, killall s , i pkill

Comenzile kill, killall s , i pkill sunt utilizate pentru a transmite un semnal unui proces sau unui set de procese.

Comanda kill Comanda kill transmite un semnal unui proces. Comanda primes , te ca argument se transmita pid-ul procesului (sau pid-urile proceselor) catre care se dores , te sa semnalul. n mod implicit comanda transmite semnalul SIGTERM:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

razvan@asgard:~$ xcalc & [1] 3590 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

razvan@asgard:~$ kill 3590 razvan@asgard:~$ [1]+ Terminated razvan@asgard:~$ ps PID TTY TIME CMD 3092 pts/1 00:00:00 bash 3592 pts/1 00:00:00 ps

xcalc

pentru a transmite s de SIGTERM. Comanda poate congurata , i alt semnal n afara se dores Astfel, daca procesele cu pid-urile , te transmiterea semnalului SIGSTOP catre 1234 s i 5678, se poate utiliza una din alternativele: ,
1 2 3 4 5

razvan@asgard:~$ kill -SIGSTOP 1234 5678 razvan@asgard:~$ kill -STOP 1234 5678 razvan@asgard:~$ kill -19 1234 5678

ca semnalul poate transmis ca parametru e n forma literala (SIGSTOP, Se observa numerica (19). STOP), e n forma

138 Comanda killall

INTRODUCERE N SISTEME DE OPERARE

pentru transmiterea unui semnal catre Comanda killall este folosita un proces sau catre un set de procese atunci cnd se cunoas te numele procesului. Un exemplu de , utilizare este prezentat mai jos:
1 2 3 4 5 6 7 8 9 10 11

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 root@asgard:/home/razvan# killall -KILL apache2 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. este opt O opt , iune care poate utila , iunea --user care permite transmiterea unui semnal catre toate procesele unui anumit utilizator. Pentru a putea utiliza aceasta killall trebuie sa e root: opt , iune, utilizatorul care apeleaza
1 2 3 4 5 6 7 8 9 10 11 12 13

root@asgard:/home/razvan# ps -o pid,comm,user -u guest PID COMMAND USER 3761 su guest 3762 bash guest 3802 su guest 3803 bash guest 3822 top guest 3825 bc guest asgard:/home/razvan# killall --user guest asgard:/home/razvan# ps -o pid,comm,user -u guest PID COMMAND USER

n situat toate procesele , ia de mai sus s-a transmis semnalul implicit (SIGTERM) catre utilizatorului guest, rezultnd n terminarea acelor procese.

Comanda pkill cu comanda pgrep. n timp ce comanda pgrep Comanda pkill poate comparata oferea informat , ii despre procesele care ndeplineau anumite criterii, comanda pkill transmite un semnal proceselor pe baza unor criterii de select , ie a acestora. pid-ul procesului parinte, La fel ca n cazul pgrep, select dupa , ia se poate realiza dupa id-ul utilizatorului sau al grupului. Argumentul semnal se terminalul utilizat, dupa transmite la fel ca n cazul comenzilor kill s , i killall.

CAPITOLUL 5. PROCESE

139

5.4.3

Transmiterea de semnale prin combinat , ii de taste

n afara comenzilor de mai sus, un utilizator poate transmite anumite semnale procesului n acel moment n terminal) prin intermediul unor combinat curent (cel care ruleaza , ii de taste specice. Astfel de combinat , ii sunt: CTRL-Z: transmite semnalul SIGSTOP catre procesul curent, care are drept suspendarea acestuia. O situat este atunci cnd se ruleaza consecint ,a , ie utila editorul vi s i se dores te rularea altei comenzi. Se foloses te CTRL-Z pentru , , , suspendarea procesului vi s , i revenirea la promptul terminalului, unde poate noua comanda. Dupa introducerea comenzii se foloses introdusa , te comanda fg pentru a reactiva procesul vi. CTRL-C: transmite semnalul SIGINT catre procesul curent, care, n general, va omor procesul. De obicei, combinat , ia de taste se foloses , te n cazul n care un proces este blocat.

CTRL-\: transmite semnalul SIGQUIT. Acesta are acelas , i rol ca s , i CTRL-C, doar
este mai puternic. ca nu toate aceste combinat Trebuie precizat ca , ii de taste au efect pentru toate procesele, ntruct unele procese pot ignora semnalele transmise (pot avea un comportament non-standard la primirea unui semnal).

5.5

Comunicat , ia ntre procese

pentru a ndeplini La fel cum n cadrul unui departament mai mult , i oameni conlucreaza o sarcina, s , i n cadrul unui sistem de operare procesele acestuia interact , ioneaza. numele de comunicat Interact , iunea proceselor ntr-un sistem de operare poarta , 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 Spre , ie un alt proces. alte exemplu, n cazul utilitarului top, acesta culege informat , ii pe care i le furnizeaza procese prin intermediul nucleului sistemului de operare s i al sistemului de s , , iere procfs. situat as termine o sarcina n alta , ie, un proces A trebuie sa , tepte ca un alt proces B sa poata continua. Aceasta forma de comunicat pentru ca A sa ie ntre A s i B se numes te , , , as sincronizare: un proces trebuie sa , tepte un alt proces. n diverse moduri: cu ajutorul unui s Comunicat , ia ntre procese este intermediata , ier, a unui socket, a unei zone de memorie sau a unui canal de comunicat ie (pipe). , Intermedierea printr-un s ier este destul de simpl a: un proces scrie o informat , , ie ntr-un s , 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 capitol. Vom discuta, nsa, , ia prin intermediul unui canal de comunicat ie (pipe). ,

140

INTRODUCERE N SISTEME DE OPERARE

5.5.1

Operatorul | (pipe)

procese rulate Operatorul | (pipe) este folosit pentru a asigura comunicat , ia ntre doua folosind un canal de comunicat din linia de comanda, ie numit pipe . , at , ire a comunicat Comunicat , ia prin intermediul unui pipe este o mbunat , iei prin intermediul unui s ier. Astfel, n cazul comunicat iei prin intermediul unui s , , , ier, un proces scrie datele de ies , ire ntr-un s , ier iar un alt proces foloses , te acel s , ier ca intrare. n cazul comunicat iei prin pipe, ies irea primului proces este folosit a direct ca , , a a mai nevoie de un s intrare pentru al doilea, far , ier pe disc. un cuvnt n cadrul unui Vom folosi pentru exemplicare comanda grep, care cauta spre exemplu, dorim aarea de informat s , ier. Daca, , ii despre procesele bash din sistem faza, sa redirectam ies folosind grep, ar trebui, n prima , irea comenzii ps ntr-un s , ier, folosim grep pe acel s iar apoi sa ier, ca n exemplul de mai jos: ,
1 2 3 4 5 6 7 8 9 10 11

razvan@asgard:~$ ps -e > ps.out razvan@asgard:~$ grep bash ps.out 3029 pts/0 00:00:00 bash 3092 pts/1 00:00:00 bash 3299 pts/2 00:00:00 bash 3317 pts/2 00:00:00 bash 3740 pts/3 00:00:00 bash 3758 pts/3 00:00:00 bash 3781 pts/4 00:00:00 bash 3799 pts/4 00:00:00 bash

realizat prin intermediul operatorului |, far a a Acelas , i rezultat ca mai sus poate nsa mai nevoie de intermedierea printr-un s , ier:
1 2 3 4 5 6 7 8 9

razvan@asgard:~$ ps -e | grep bash 3029 pts/0 00:00:00 bash 3092 pts/1 00:00:00 bash 3299 pts/2 00:00:00 bash 3317 pts/2 00:00:00 bash 3740 pts/3 00:00:00 bash 3758 pts/3 00:00:00 bash 3781 pts/4 00:00:00 bash 3799 pts/4 00:00:00 bash

Pentru a exemplica puterea acestui operator vom considera urmatoarea problema: aam primii 3 utilizatori din sistem care au directorul de baza n /home, dorim sa ordonat i n ordinea alfabetic a a numelui de utilizator. , Informat n /etc/passwd. Vom folosi grep , ii despre utilizatorii din sistem se gasesc n /home: pentru a extrage utilizatorii care au directorul de baza
1 2 3 4 5

razvan@asgard:~$ cat /etc/passwd | grep /home razvan:x:1000:1000:razvan,,,:/home/razvan:/bin/bash haldaemon:x:105:106:Hardware abstraction layer,,,:/home/haldaemon:/bin/ false guest:x:1001:1001:Guest Account,,,:/home/guest:/bin/bash ftp:x:107:65534::/home/ftp:/bin/false

care vom ret n continuare vom sorta rezultatul obt , inut, dupa , ine numai primele 3 intrari:
1

razvan@asgard:~$ cat /etc/passwd | grep /home | sort

CAPITOLUL 5. PROCESE
2 3 4 5 6 7 8 9 10

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 razvan@asgard:~$ cat /etc/passwd | grep /home | sort | head -3 ftp:x:107:65534::/home/ftp:/bin/false guest:x:1001:1001:Guest Account,,,:/home/guest:/bin/bash haldaemon:x:105:106:Hardware abstraction layer,,,:/home/haldaemon:/bin/ false

5.6

Swapping

Un concept important n studiul sistemelor de operare s , i al proceselor acestora este a compensare a cantitat , ii insuciente conceptul de swapping. Swapping este o masur de memorie RAM de care dispune un sistem la un moment dat. Pentru compensare, sistemul de operare va folosi o port , iune din disc pentru stocarea datelor din RAM. n cazul unui sistem ncarcat (cu multe procese), memoria RAM se poate dovedi pentru a satisface toate procesele. n aceasta situat insucienta , ie o parte din paginile de memorie din RAM sunt evacuate (swapped ) pe disc pentru a face loc pentru paginile n momentul n care paginile evacuate sunt din de memorie utile n momentul de fat , a. nou necesare, se vor evacua alte pagini pentru a se aduce la loc cele curente. Principiul swapping-ului este prezentat n gura de mai jos:

Figura 5.3: Swaping Pe sistemele Linux swapping-ul este realizat n general pe partit , ii dedicate (partit , ia de swap vezi sect iunea 2.2.2), care sunt folosite n cazul n care memoria din sistem este , n cazul Windows, spat insucienta. , iul de swap alocat din partit , iile sistemului, ind utilizate n acest scop s iere. Pentru a aa informat ii despre spat iul de swap utilizat n , , , Linux se poate folosi comanda free (aceste informat s , ii se gasesc , i n zona de sumarizare din ecranul top):
1 2 3 4 5

razvan@asgard:~$ free total Mem: 514748 -/+ buffers/cache: Swap: 497972

used 336876 131784 0

free 177872 382964 497972

shared 0

buffers 19892

cached 185200

142

INTRODUCERE N SISTEME DE OPERARE

ca sistemul beneciaza de 512 MB de memorie RAM s Se observa , i nu este folosit spat , iul de swap.

5.7
5.7.1

Studii de caz
Managementul proceselor/serviciilor pe Windows

atoare n Windows, un proces are caracteristici aseman cu procesele din Linux. Totus , i, o ierarhie de procese s des , i un proces este creat prin intermediul altui proces, nu exista ,i nici not iunea direct a de proces p arinte s i proces u. La fel ca n Linux, un proces este , , identicat printr-un PID, are asociate zone de memorie s , i s , iere deschise etc.

Task manager de Task Interfat , a de vizualizare s , i gestiune a proceselor n Windows este asigurata Manager. Pentru pornirea acestuia se foloses , te combinat , ia de taste CTRL-ALT-DEL sau CTRL-SHIFT-ESC sau click dreapta pe bara de task-uri s , i selectarea opt , iunii Task Manager din meniu.

Figura 5.4: Windows Task Manager informat Task Manager poate comparat cu utilitarul top. As , eaza , ii despre procese s ,i despre sistem s poate congurat pentru personalizarea as sau pentru ,i , arii interact , iunea cu procesele din sistem. numele programului care a generat procesul, n mod implicit, Task Manager as , eaza utilizatorul care a creat procesul, procentajul de procesor folosit s , i memoria utilizata. se dores Daca te as area altor cmpuri se poate accesa meniul View->Select , ,

CAPITOLUL 5. PROCESE

143

utilizata, maximul de Se pot as , a PID-ul procesului, memoria virtuala memorie utilizat, numarul de s , iere deschise, numarul de thread-uri etc.

Columns.

proceselor din sistem, Task Manager mai ofera urmatoarele n afara vizualizarii servicii:

permite crearea unui nou proces prin introducerea imaginii de executabil asociate (File->New Task (Run...)); permite monitorizarea s , i analiza performant , ei sistemului, prin accesarea tab-ului atoare Performance; informat, iile de aici sunt aseman cu cele oferite de top n
zona de sumarizare;

permite deconectarea unui utilizator, sau oprirea, repornirea sau suspendarea sistemului (meniul Shut Down);
procesul dorit s butonul permite terminarea unui proces; se selecteaza , i se apasa End Process. Windows Task Manager ofera cea mai mare parte din facilitat , ile Se poate observa ca furnizate de comenzile Unix de interact iune cu procese sistemului. Un utilitar puternic , 1 de vizualizare s , i control a proceselor pe Windows este ProcessExplorer .

Services numele de servicii. Ca s n Windows, procesele daemon poarta , i n Linux, serviciile sunt n background s procese care ruleaza , i sunt folosite pentru monitorizarea s , i ntret , inerea sistemului. n Windows XP, prin Fereastra de interact , iune cu serviciile Windows este as , ata, accesarea Start->Control Panel->Administrative Tools->Services sau click dreapta pe My Computer->Manage->Services. toate serviciile sistemului. Coloanale as numele Ecranul as , at prezinta , ate indica descriere, starea lui (oprit sau pornit), modul de pornire a serviciului serviciului, o scurta (dezactivat, manual sau automat s Pentru pornirea, , i, la Windows Vista, ntarziat). oprirea sau repornirea serviciului, ca s , i pentru schimbarea modului de pornire, se meniul contextual al serviciului (click dreapta) s opt acceseaza , i se selecteaza , iunea Properties:

5.7.2

Procese importante

Orice sistem de operare det , ine un set de procese cu rol important n rularea s ,i ntret inerea sistemului de operare. ,

Procese importante Linux Procese importante n Linux sunt:


1

http://www.microsoft.com/technet/sysinternals/utilities/ProcessExplorer.mspx

144

INTRODUCERE N SISTEME DE OPERARE

Figura 5.5: Windows Services

Figura 5.6: Interfat , a de control a serviciului Windows de DNS init: este procesul cu pid-ul 1 n sistemele Unix s tuturor , i este parintele nu se limiteaza doar la a porni celelalte procese importante proceselor; rolul sau

CAPITOLUL 5. PROCESE n sistem ci s pentru procesele ramase orfane; , i de a deveni procesul parinte

145

kswapd (kernel swap daemon): este responsabil cu alegerea paginilor de


memorie care vor evacuate pe disc n momentul n care memoria este insucienta;

pdflush (page daemon): este responsabil cu asigurarea consistent, ei buffer-elor


folosite de sitemul de s , iere;

getty: este procesul resposabil cu autenticarea n sistem n terminalele virtuale;


promptul login : utilizatorului; getty ofera

Xorg: este procesul resposabil cu pornirea interfet, ei grace s , i are asociat terminalul virtual tty7 (ce poate accesat prin combinat , ia ALT+CTRL-F7).

Procese importante Windows n Windows procese importante sunt: validitatea autenticarii lsass (Local Security and Authentication Server ): verica corecte genereaza un jeton folosit pentru utilizatorilor; n cazul unei autenticari deschiderea unei prime sesiuni shell pe sistem; lsass este s , i numele unui virus;

svchost (Generic Host Process for Win32 Services): este procesul folosit pentru
gestiunea serviciilor din Windows;

csrss (Client/Server Run-time Subsystem): este responsabil pentru crearea


s ferestrelor de consola , i gestiunea thread-urilor; esent a subsistemului de autenticare n winlogon: este o componenta , iala Windows; cu interfat graca. explorer: este este shell-ul unui sistem Windows, nsa ,a , i la1 . Mai multe informat , ii despre procesele importante Windows gasit

5.7.3

Prioritatea unui proces

o prioritate. Aceasta n sistemele de operare moderne, procesele au asociata inuent eaz a probababilitatea ca un proces s a e planicat pe procesor: cu ct un , e urmatorul proces are o prioritate mai mare, cu att probabilitatea ca el sa proces des (denumite planicat pentru execut , ie cres , te. De obicei procesele care se blocheaza I/O intensive) au asociate o prioritate mai mare, n timp ce procesele care utilizeaza intens procesorul (CPU intensive), au o prioritate mai mica. Sistemul de operare poate modica prioritatea Prioritatea proceselor nu este xa. s proceselor pentru a asigura echitatea planicarii. Totodata, , i utilizatorul poate modica dores prioritatea unui proces daca , te acest lucru.
1

http://www.neuber.com/taskmanager/process/

146

INTRODUCERE N SISTEME DE OPERARE

, ii unui proces n Linux Schimbarea prioritat numele de niceness (ct de echitabil se n Linux, prioritatea unui proces poarta un proces raportat la celelalte). Un proces are o prioritate mai mare cu ct comporta Valorea nice pentru un proces se ncadreaza n limitele valoarea sa nice este mai mica. un proces maxim prioritar, n timp ce 19 nseamna un proces [-20, 19]. -20 nseamna minim prioritar. folosind ps s Prioritatea unui proces ntr-un sistem Linux se aa , i opt , iunea nice:
1 2 3 4 5 6 7 8 9 10 11 12 13

razvan@asgard:~$ ps -e -o pid,tty,comm,nice --sort nice PID TT COMMAND NI 3 ? events/0 -5 4 ? khelper -5 5 ? kthread -5 8 ? kblockd/0 -5 9 ? kacpid -5 [...] 1 ? init 0 [...] 3799 pts/4 bash 0 4009 pts/1 ps 0 2 ? ksoftirqd/0 19

Majoritatea proceselor pornesc cu prioritatea 0. Pentru a modica prioritatea de start a unui proces se foloses , te comanda nice, folosind argumentul -n:
1 2 3 4 5 6 7 8 9 10

razvan@asgard:~$ nice -n -10 ps -e -o pid,tty,comm,ni nice: cannot set niceness: Permission denied razvan@asgard:~$ nice -n 15 ps -C ps -o pid,tty,comm,ni PID TT COMMAND NI 4051 pts/1 ps 15 asgard:/home/razvan# nice -n -10 ps -C ps -o pid,tty,comm,ni PID TT COMMAND NI 4048 pts/2 ps -10

un utilizator neprivilegiat nu poate stabili o prioritate negativa Se poate observa ca dar poate stabili una pozitiva (mai slaba). Utilizatorul root poate modica (puternica), prioritarea unui proces n orice direct ie. , , ii unui proces se poate realizeaza prin intermediul Schimbarea n timp real a prioritat ofera promptul PID top. n ecranul top se foloses , te tasta r (renice ). Zona de comanda to renice: n care se introduce pid-ul procesului a carui prioritate va schimbata. aceasta se va cere introducerea unei valori nice asociata procesului. Un utilizator Dupa neprivilegiat poate doar incrementa valoarea nice a unui proces (l va face mai put , in prioritar).

, ii unui proces n Windows Schimbarea prioritat n Windows, utilizatorul poate stabili prioritatea unui proces la nis , te valori cu granularitate mai mare: High, Very High, Normal etc. Pentru aceasta se foloses , te tot interfat , a pusa la dispozit ie de Task Manager . Pentru alterarea prioritat ii unui proces, se realizeaz a , ,

CAPITOLUL 5. PROCESE

147

procesului, se alege opt click dreapta pe intrarea asociata , iunea Set priority s , i apoi se stabiles , te prioritatea dorita. Un exemplu se poate gasi n gura de mai jos:

, ii unui proces n Windows Figura 5.7: Stabilirea prioritat

Cuvinte cheie

proces program pid procfs interactivitatea unui proces context switch


de timp cuanta

top background foreground operatorul & bg, fg suspendarea unui proces terminal proces daemon nohup semnal kill killall, pkill CTRL-Z, CTRL-C, CTRL- CTRL-X

multitasking ierarhie de procese init ps pstree pgrep

148

INTRODUCERE N SISTEME DE OPERARE

operatorul | Task manager Services init, kswapd, pdush, getty

lsass, svchost, csrss prioritatea unui proces nice

ntrebari 1. Care din urmatoarele este un proces important Unix?

K ps K SIGQUIT K init K lsass


2. Care utilitar NU poate folosit pentru a transmite semnale catre un proces?

K kill K top K nohup K killall


3. Cte procese init pot exista la un moment dat ntr-un sistem Linux?

K 1 K cte unul per procesor K niciunul K oricte


4. Cte procese bash pot exista la un moment dat ntr-un sistem Linux?

K 1 K cte unul per procesor K niciunul K oricte


PID-ul unui proces? 5. Care din urmatoarele comenzi NU as , eaza

K ps K pgrep K kill K top


6. n Linux orice program poate imaginea unui singur proces. Comanda top NU PID-urilor proceselor din sistem. as , eaza

CAPITOLUL 5. PROCESE K adevarat, adevarat K adevarat, fals K fals, adevarat

149

K fals, fals
poate produce aceleas 7. Care comanda combinat , i efecte ca apasarea , iei de taste CTRL-Z?

K pkill K ps K operatorul & K fg


informat 8. Ce director din sistemul de s , iere ofera , ii despre procese?

K /sys K /proc K /home K /


,i 9. n Linux procesele NU au pid-uri negative. n Linux procesele NU au prioritat negative. K adevarat, adevarat K adevarat, fals K fals, adevarat

K fals, fals
10. Care asociere NU este valida?

K Task Manager top K serviciu daemon K explorer nice K lsass getty

Capitolul 6 Pornirea s , i init , ializarea sistemului


Press Ctrl-Alt-Del now for IQ test.

din acest capitol? Ce se nvat ,a

Pornirea sistemului; conceptul de bootstrapping Not, iunea de multitasking Fazele pornirii sistemului BIOS (POST, CMOS) Dispozitive boot-abile, sector bootabil (MBR/VBR) Rolul unui bootloader GRUB: rulare s , i congurare
ncarcarea nucleului Linux

Init, ializarea unui sistem Linux: init/upstart s , i pornirea serviciilor Pornirea s , i init , ializarea Windows Not, iuni de interoperabilitate Linux-Windows

6.1

Pornirea sistemului

la mecanismele prin care sistemul de operare Pornirea s , i init , ializarea sistemului se refera s i aplicat iile de baz a ajung s a e nc arcate s , , , i folosite de utilizator. de obicei, prin apasarea Pornirea sistemului se realizeaza, unui buton specic de pe n sens mai larg, ne vom referi la pornirea sistemului ca ind o act unitatea centrala. , iune ce cuprinde att init compusa ializarea hardware ct s i cea software. , , 151

152

INTRODUCERE N SISTEME DE OPERARE

Init , i congurarea componentelor hardware. , ializarea hardware presupune vericarea s Aceasta se executa n doua situat , ii: atunci cnd sistemul trece din starea oprit n starea pornit (power on) s i atunci cnd sistemul este reinit , , ializat (reset, reboot ). la activarea sistemului din momentul n care acesta era Act , iunea de power on se refera oprit, de cele mai multe ori prin intermediul butonului de pornire1 . Repornirea sistemului la reactivarea sistemului: din starea pornit, eventual rulnd o instant a unui se refera ,a sistem de operare, sistemul este repornit (e prin intermediul butonului Reset, e printr-o data sistemului de operare). comanda Init sistemului de operare. Nu vom considera , ializarea software presupune ncarcarea rularea anumitor aplicat parte din init , ii peste sistemul de operare ca facnd , ializarea software. un set de etape care vor precizate n continuare. Pornirea sistemului prezinta

6.1.1

Problematica pornirii sistemului bootstrapping

numele de Pornirea sistemului zic s sistemului de operare poarta , i ncarcarea booting sau de bootstrapping. Denumirea de bootstrapping s , i are originea n Baronul de Mnchhausen. ntr-o poveste se salveze de la nec tragndu-se a acestuia, el reus de baierele cizmelor (boot , es , te sa strap = baiera). Analogia cu aceasta poveste se reecta n faptul ca sistemul = cizma, a existent de operare trebuie ncarcat far , a unui alt sistem de operare. Un procesor poate executa numai cod aat n memoria ROM2 sau n memoria RAM. sistemul de operare muta codul acesteia n Atunci cnd o aplicat , ie trebuie executata, memoria RAM s , i procesorul ncepe execut , ia aplicat , iei. n memorie sistemul de operare, daca nu exista Apare astfel ntrebarea: cum se ncarca l ncarce ? Aparent, trebuie sa ne tragem de baierele un alt sistem de operare care sa Vom vedea, nsa, ca exista un set de etape care cizmelor pentru a ne scoate din apa. la ncarcarea se vor parcurge succesiv pentru ncarcarea diverselor componente pna a sistemului de operare. completa

6.1.2

Etapele pornirii sistemului

la Pornirea sistemului presupune ncarcarea n memorie a diverselor componente pna a sistemului de operare. As ncarcarea completa , a cum se poate vedea s , i n gura 6.1, etapele importante ale pornirii sistemului sunt: ncarcarea BIOS-ului: presupune ncarcarea unui program de mici dimensiuni, de pe placa de baza, s aat ntr-o memorie dedicata , i care este utilizat pentru init , ializarea componentelor hardware;
de apasarea folosind Alternativ fat butonului de pornire, un sistem poate pornit s ,a , i de la distant ,a WOL http://en.wikipedia.org/wiki/Wake-on-LAN 2 http://en.wikipedia.org/wiki/Read-only_memory
1

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI

153

Figura 6.1: Etapele pornirii sistemului rularea POST: presupune realizarea unui set de teste hardware ce verica a componentelor principale; funct , ionalitatea de baza ncarcarea bootloader-ului: presupune ncarcarea unui program de mici din RAM de unde sa dimensiuni destinat copierii codului kernelului ntr-o zona executat de procesor; poata nucleul (kernel-ul) sistemului de operare;

de baza pe care le realizeaza ncarcarea nuclelui: presupune un set de init , ializari

init , ializarea sistemului de operare: presupune pornirea principalelor procese


care asigura utilizarea sistemului de operare. este rulata s Etapele prezentate sunt ordonate cronologic: o etapa , i, la nalul ei, este pentru rularea etapei ulterioare. Vor descrise n cadrul acestui capitol responsabila ecare din fazele prezentate s , i interact , iunea ntre acestea.

6.1.3

BIOS

BIOS-ul (Basic Input Output System) este primul program ncarcat n momentul pornirii sistemului. BIOS-ul este responsabil cu vericarea s i init ializarea componentelor , , hardware. software BIOS-ul este un exemplu de rmware. Firmware-ul este o componenta sub forma binara pe un suport de memorie nevolatila. n cazul de fat distribuita , a, 1 . La power on BIOS-ul este stocat pe un chip de memorie ROM de pe placa de baza BIOS-ul sau la reboot BIOS-ul este rulat automat din chip-ul de pe placa de baza. cunoas te specicul hardware al sistemului s i devine responsabil cu init , , , ializarea componentelor zice ale acestuia.

CMOS Des , i este un program mic s , i limitat la specicul hardware al sistemului, BIOS-ul ofera optiuni de congurare. Congurarile BIOS-ului sunt pastrate ntr-un chip separat de alimentata prin intermediul unei baterii. Aceast chip de memorie RAM nevolatila 2 memorie se numes te CMOS Complementary Metal-Oxide Semiconductor. Att , n momentul n care bateria este chip-ul ct s pe placa de baza. , i bateria se gasesc congurarile scoasa, BIOS-ului se pierd revenindu-se la congurarile implicite.
1 2

Memoria este de tip EPROM http://en.wikipedia.org/wiki/EPROM http://en.wikipedia.org/wiki/Cmos

154

INTRODUCERE N SISTEME DE OPERARE

Figura 6.2: Ecran de congurare CMOS prin intermediul unui ecran de congurare. Congurarea BIOS-ului se realizeaza Opt iunile disponibile includ stabilirea unei parole pe BIOS, selectarea dispozitivului de , care boot (vezi sect , iunea 6.2.1), alterarea frecvent , ei procesorului s , i alte congurari s depind de placa de baza i de componentele hardware existente n sistem. ,

6.1.4

POST

Etapa de vericare s , i de init , ializarea componentelor hardware ale sistemului (procesor, video) poarta numele de POST (Power-on Self Test ). Daca una dintre memorie, placa erori s corespunzator, componente prezinta atunci BIOS-ul va , i nu poate init , ializata emite un set de sunete specice s i nu se va continua init ializarea sistemului. , , vericarea s Dupa , i init , ializarea componentelor, BIOS-ul este responsabil cu ncarcarea bootloader-ului.

6.2

Bootloader

n principal pentru ncarcarea Bootloader -ul este componenta utilizata imaginii de kernel din memori RAM, de unde sa poata executata de catre ntr-o zona procesor. Cele aleaga ntre mai multe versiuni de kernel mai multe bootloader -e permit utilizatorului sa ce vor ncarcate, selectnd astfel ntre mai multe sisteme de operare. De asemenea, bootloader -ul permite s a nucleului sistemului de , i transmiterea unor opt , iuni de ncarcare operare. Bootloader -ul este ncarcat n memorie de BIOS. , te pe primul sector al unui dispozitiv bootabil, denumit s Bootloader -ul se regases ,i sectorul de boot. Aceasta limitare de dimensiune apare deoarece BIOS-ul poate ncarca n memorie un singur sector (512 octet , i). Se poate ntmpla ca bootloader -ul e prea mare s sa i s a nu ncap a n primul sector al dispozitivului boot-abil. n acest caz ,

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI

155

Figura 6.3: BIOS POST (Power-On Self Test) componente. Prima componenta ncape n sectorul bootloader -ul se mparte n doua pe un spat de boot. A doua, second stage, rezidenta iu mai mare de pe hard-disk s , , i este de catre ncarcat a prima. Un astfel de multiple-stage bootloader este GRUB, bootloader-ul implicit pe majoritatea distribut , iilor Linux.

6.2.1

Dispozitive boot-abile

Un dispozitiv boot-abil este un dispozitiv al carui prim sector este un sector boot-abil. prin faptul ca ultimii doi octet Sectorul boot-abil se caracterizeaza , i sunt 0xAA55 (din cei 512). Exemple de dispozitive ce pot boot-abile sunt CD-ROM-uri, hard-disk-uri, oppy primul sector are structura disk-uri, USB ash etc. n cazul acestor dispozitive, daca unui sector boot-abil atunci poate folosit pentru ncarcarea specica altor informat , ii existente. rularea POST, BIOS-ul consulta CMOS s ordinea de boot-are de acolo. Dupa , i urmeaza CMOS-ul a fost congurat ca n imaginea de mai sus, BIOS-ul va efectua Astfel, daca urmatoarele operat , ii: HDD-ul are un prim sector bootabil, se va ncarca daca s , i se va executa cont , inutul sectorului; aici se va aa, de obicei, bootloader-ul; n urma execut , iei se va ncarca sistemul de operare; HDD-ul nu are un prin sector boot-abil, se trece la investigat daca , ia CD-ROM-ului din sistem; acesta exista, se va se va verica existent, a unui CD n unitatea de CD-ROM; daca verica existent , a sectorului de boot;

156

INTRODUCERE N SISTEME DE OPERARE

Figura 6.4: Alegerea dispozitivului de boot CD-ul are un prim sector bootabil, atunci se va ncarca daca s , i se va executa cont , inutul sectorului de boot; exemple de CD boot-abil sunt CD-ul de instalare a unui sistem de operare sau un LiveCD; nici CD-ROM-ul nu are un prim sector bootabil atunci se trece la urmatorul daca dispozitiv boot-abil (al doilea HDD), care va analizat asemenea celor aterioare; nu exista niciun dispozitiv boot-abil, nu se poate ncarca daca niciun sistem de a a executa nimic. operare; BIOS-ul va as , a un mesaj specic far

6.2.2

Structura sectorului de boot pentru un dispozitiv boot-abil

denumirea de MBR Primul sector (primii 512 octet , i) al unui dispozitiv boot-abil poarta (Master Boot Record ). Primul sector al unei partit , ii al unui dispozitiv boot-abil partit , ionat numele de VBR (Volume Boot Record ). Dupa cum a fost specicat anterior, un poarta MBR-ul acestuia este un sector boot-abil (are ultimii doi dispozitiv este boot-abil daca sectorul cont octet i 0xAA55 , pentru a semnica faptul ca , , ine secvent , e de cod executabile). Sectorul de boot poate cont unei secvent , ine instruct , iuni pentru ncarcarea , e mai mari de cod (cum este sectorul de boot al unui CD), sau poate cont ine un bootloader pentru , ncarcarea sistemului de operare (cum este sectorul de boot al unui hard-disk). aceasta, BIOS-ul Cont n memorie de BIOS. Dupa , inutul sectorului de boot este ncarcat transmite controlul programului rezident n sectorul de boot (bootloader ). structura MBR. n gura 6.5 este prezentata cum se observa, exista urmatoarele Dupa zone importante: zona de cod executabil; aceasta cont, ine programul caruia i este transmis controlul de catre BIOS (bootloader );

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI

157

Figura 6.5: Structura MBR (Master Boot Record) tabela de partit partit , ine informat , ii despre partit , iile din sistem; ecarei , ii i , ii cont corespunde o intrare de 16 octet , i; semnatura de sector boot-abil (0xAA55). ncarcarea Zona de cod executabil cont MBR-ului n , ine programul care va rulat dupa memorie de BIOS. De obicei, acest program este bootloader -ul, responsabil cu descoperirea partit primului sector (VBR) de pe aceasta. n cazul , iei active s , i ncarcarea existent ei mai multor sisteme de operare, bootloader -ul poate permite utilizatorului sa , partit opteze pentru ncarcarea unui sistem de operare aat pe alta , ie dect cea de boot.

Tabela de partit , ii n MBR s 64 de octet Tabela de partit , ii rezida , i ocupa , i. Un hard-disk poate cont , ine doar patru partit , ii (as , a numitele partit , i pentru descrierea , ii primare), rezultnd 16 octet ecarei partit ii. , pe lnga adresa de start (exprimata n Cei 16 octet partit , i ai ecarei , ii ofera, 1 sau cylinder-head-sector ) s O partit , i dimensiunea s , i tipul partit , iei. , ie poate activa O partit non-activa. ie activ a este aleas a de bootloader -ul aat n zona MBR (sau de , acesta este n doua stagii) pentru a continua catre o parte a bootloader -ului, daca ncarcarea sistemului. De pe o partit ie activ a se va nc arca primul sector (VBR) al , acesteia. clasicare a partit O alta , iilor este clasicarea n partit , ii primare s , i partit , ii extinse. Numarul de 4 partit ii primare care pot descrise n tabela de partit ii din MBR este, de multe ori, , , . Pe insucient. Pentru a rezolva acest neajuns, a aparut not , iunea de partit , ie extinsa partit astfel ca putem avea e maxim 4 partit un sistem poate exista o singura , ie extinsa , ii primare, e o partit ie extins a s i maxim 3 primare. , ,
1

http://en.wikipedia.org/wiki/Cylinder-head-sector

158

INTRODUCERE N SISTEME DE OPERARE

Partit astfel numarul de partit , iile extinse pot cont , ine mai multe partit , ii , ii logice, marind 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 s iere pe o partit , , , ie, acea partit , ie va trebui formatata (vezi sect , iunea 4.8.1).

Salvarea sectorului de boot (backup) Uneori se dores , te salvarea sectorului de boot al unui disc sau al unei partit , ii pentru situat , ia n care acesta devine corupt s , i trebuie reparat. n Linux, acest lucru se poate realiza foarte us or prin intermediul comenzii dd (vezi sect, iunea 7.6.5) s , , i a dispozitivelor de tip bloc (vezi sect , iunea 7.6.1) se dores Astfel, daca , te realizarea unei copii locale a MBR, se poate folosi utilitarul dd s , i dispozitivul asociat hard-disk-ului (n cazul nostru /dev/hda). Vor trebui copiat , i 512 octet , i (un sector), deci contorul de sectoare va 1:
1 2 3 4 5 6 7

root@asgard:~# dd if=/dev/hda of=mbr.out count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.035273 seconds, 14.5 kB/s root@asgard:~# ls -l mbr.out -rw-r--r-- 1 root root 512 2009-08-07 23:28 mbr.out

6.2.3

Mecanismul de funct , ionare a unui bootloader

cum s-a specicat, un bootloader este un program folosit pentru a ncarca Dupa n RAM imaginea sistemului de operare, sau alte componente care vor ncarca (la rndul lor) acea imagine. Codul bootloader -ului este supus unor constrngeri destul de rigide, ntruct trebuie sa n MBR. Mai exact, este limitat la 446 de octet ncapa , i (restul ind ocupat , i de tabela de partit de boot 0xAA55). , ii s , i de semnatura n mod normal n doua etape (stages). Prima etapa Ca atare bootloader -ele lucreaza n MBR. Aceasta are rolul de a ncarca este cea care rezida de pe hard-disk a doua care este sucient de complexa pentru a putea ncepe ncarcarea a etapa efectiva poate oferit un ecran de kernelului sistemului de operare. n cea de-a doua etapa doua sisteme de operare pe acelas select , ie pentru situat , ia n care coexista , i sistem zic. intermediara 1.5 Unele bootloader -e (spre exemplu GRUB versiunea 1) au o faza limita. pentru a permitea citirea de informat , ii de pe hard-disk dincolo de o anumita acest pas bootloader-ul va ncarca Dupa nucleului sistemului de operare (sau o parte a acestuia) s acesta. , i va transmite controlul catre Exemple de bootloader-e sunt:

GRUB (GRand Unied Bootloader ):


distribut , iilor Linux;

bootloader -ul implicit pe majoritatea

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI

159

LILO (Linux Loader ): bootloader -ul implicit pe distribut, iile Linux nainte de
supremat , ia GRUB;

NTLDR (NT Loader ): bootloader -ul folosit de Windows NT, 2000, XP, 2003; winload.exe: bootloader -ul folosit de Windows Vista;
de bootloader -e destinate diverselor medii de boot. SYSLINUX: o suita

Chainloading Modul cel mai des ntlnit prin care un sistem de operare este init , ializat este prin a imaginii nucleului catre specicarea directa bootloader. boot-area indirecta a sistemului de operare. Acest lucru Alternativa o reprezinta ncarce un presupune ca bootloader -ul aat n MBR, n loc de imaginea unui kernel, sa imaginea de kernel a sistemului de alt bootloader care va ncarca la rndul sau operare. Acest mod de ncarcare a unui sistem de operare se numes , te chainloading. sistemele Windows Bootloader -ele specice Linux (precum GRUB sau LILO) ncarca dupa ncarcarea folosind chainloading. Spre exemplu, daca bootloader -ului GRUB se pentru boot-area Windows, atunci se va incarca opteaza bootloader -ul Windows (NTLDR) care va init ializa la rndul s au sistemul de operare. ,

6.2.4

GRUB

GRUB (GRand Unied 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 mai multe sisteme de operare). Aceasta sect (cnd pe sistemul de calcul coexista , iune simplu GRUB. Versiunea 2, va prezenta detalii despre versiunea 1 a GRUB, denumita GRUB 2, care a nceput sa e utilizata recent, este prezentata n cadrul unui denumita studiu de caz (vezi sect , iunea 6.6.1). exista o faza intermediara 1.5 pentru situat Specic GRUB este faptul ca , ia n care exista de vizibilitate a hard-disk-ului. o limita (cea care rezida n MBR) are rolul de a Ca s , i n cazul altor bootloader -e, prima faza este nevoie, faza 1.5. Datorita dimensiunii reduse, prima ncarca faza a doua sau, daca nu det faza , ine informat , ii despre sistemul de s , iere. n schimb, faza 1.5 det , ine informat , ii despre acesta s n mod corespunzator faza a doua. , i poate localiza s , i ncarca cu citirea s Faza a doua este responsabila , ierului principal de congurare (/boot/grub/menu.lst), as nucleului , area ecranului de opt , iuni s , i ncarcarea sistemului de operare. localizarea diferitelor faze ale GRUB pe hard-disk. n gura 6.6 este prezentata ca prima etapa (grub stage 1) se gases , te n zona de cod executabil din Se observa , te n zona de compatibilitate a hard-disk-ului MBR. Faza 1.5 (grub stage 1.5 ) se gases etapa recunoas etapa (primii 32 KB). Aceasta , te tipul sistemului de s , iere pe care se aa
1

http://www.gnu.org/software/grub/

160

INTRODUCERE N SISTEME DE OPERARE

Figura 6.6: Structura GRUB pentru ncarcarea n partit a doua s acesteia. Etapa a doua rezida , i este utilizata , ia de boot. Fis pe un sistem Debian/Ubuntu, n /boot/grub, as , ierele asociate GRUB se gasesc ,a cum este prezentat mai jos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

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 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

stage2 xfs_stage1_5

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

ca prima faza se gases , te n s Se observa , ierul stage1 care are exact dimensiunea specializata pentru ecare sistem de unui sector (512 octet i). Faza 1.5 are o form a , s , iere (e2fs_stage1_5, reiserfs_stage1_5 etc.). Spat , iul ocupat este n jur de a probleme n zona de compatibilitate de 32 KB a hard-disk-ului. 7-8 KB, deci ncape far de s Faza a doua este descrisa , ierul stage2 cu dimensiune mai mare dect a pentru citirea s celorlalte (circa 100 KB). Faza a doua este resposabila , ierului de congurare menu.lst s i nc arcarea ulterioar a a nucleului. ,

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI Vizualizare stage1 s , i stage1.5 pe hard-disk

161

Pentru a verica prezent , a primei faze s , i a fazei 1.5 pe hard-disk vom folosi utilitarele dd s i hexdump . , faza va realizata o copie a primului sector de pe hard-disk n s ntr-o prima , ierul first_sector s 10 sectoare n s , i apoi a urmatoarelor , ierul next_sectors.
1 2 3 4 5 6 7 8 9

root@asgard:/boot/grub# dd if=/dev/hda of=first_sector count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 8.91e-05 seconds, 5.7 MB/s root@asgard:/boot/grub# dd if=/dev/hda of=next_sectors count=10 skip=1 10+0 records in 10+0 records out 5120 bytes (5.1 kB) copied, 0.000137291 seconds, 37.3 MB/s

n first_sector s informat , i next_sector se gasesc , iile binare cont , inute n primele sectoare ale hard-disk-ului. Ele vor comparate cu s , ierele imagine din /boot/grub folosind utilitarul hexdump. De exemplu, pentru stage1:
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

razvan@asgard:/boot/grub$ hexdump first_sector [...] 0000070 34e8 f601 80c2 5474 41b4 aabb cd55 5a13 0000080 7252 8149 55fb 75aa a043 7c41 c084 0575 0000090 e183 7401 6637 4c8b be10 7c05 44c6 01ff 00000a0 8b66 441e c77c 1004 c700 0244 0001 8966 [...] 0000170 be06 7d94 30e8 be00 7d99 2ae8 eb00 47fe 0000180 5552 2042 4700 6f65 006d 6148 6472 4420 0000190 7369 006b 6552 6461 2000 7245 6f72 0072 00001a0 01bb b400 cd0e ac10 003c f475 00c3 0000 [...] razvan@asgard:/boot/grub$ hexdump stage1 [...] 0000070 34e8 f601 80c2 5474 41b4 aabb cd55 0000080 7252 8149 55fb 75aa a043 7c41 c084 0000090 e183 7401 6637 4c8b be10 7c05 44c6 00000a0 8b66 441e c77c 1004 c700 0244 0001 [...] 0000170 be06 7d94 30e8 be00 7d99 2ae8 eb00 0000180 5552 2042 4700 6f65 006d 6148 6472 0000190 7369 006b 6552 6461 2000 7245 6f72 00001a0 01bb b400 cd0e ac10 003c f475 00c3 [...]

5a13 0575 01ff 8966 47fe 4420 0072 0000

cum se observa, n primul sector al hard-disk-ului se gases , te imaginea primei Dupa apar deosebiri etape a GRUB, iar n urmatoarele sectoare imaginea etapei 1.5. Daca n sectoarele discului s ntre imaginea aata , i cea din /boot/grub, acestea sunt din considerente de adaptare la geometria discului. Imaginea celei de-a doua faze este de faza 1.5 din /boot/grub/stage2, aceasta putnd accesa structura ncarcat a sistemului de s , iere.

162 Creare unei dischete de boot GRUB

INTRODUCERE N SISTEME DE OPERARE

n ziua de azi mai mult Des , i dischetele sunt dispozitive pe cale de disparit , ie (s , i costa de dect un CD), vom descrie n scop didactic modul n care se poate crea o discheta boot GRUB. cont imaginea pentru prima s (nu este Discheta va trebui sa , ina , i cea de-a doua faza nevoie de faza 1.5 ntruct nu avem limitare n cest caz). Pentru aceasta se poate folosi folosi utilitarul cat:
1

root@anaconda:/boot/grub# cat stage1 stage2 > /dev/fd0

sau utilitarul dd:


1 2 3 4 5 6 7 8 9

root@anaconda:/boot/grub# dd if=stage1 of=/dev/fd0 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.0426716 seconds, 12.0 kB/s root@anaconda:/boot/grub# dd if=stage2 of=/dev/fd0 skip=1 210+1 records in 210+1 records out 107656 bytes (108 kB) copied, 0.020834 seconds, 5.2 MB/s

se congureaza BIOS-ul pentru a boot-a de pe discheta, utilizatorului i va oferita Daca consola GRUB de congurare (vezi sect iunea 6.3). ,

6.3

Congurarea GRUB

prin intermediul s Congurarea GRUB se realizeaza , ierului /boot/grub/menu.lst. n acest s ier sunt precizate opt iunile de boot prezente n meniul GRUB, cu alte cuvinte , , sistemele de operare care pot ncarcate cu ajutorul GRUB. Etapa a doua cites , te acest utilizatorului ecranul de opt s , ier de congurare s , i ofera , iuni: o parte dintr-un s n continuare este prezentata , ier de congurare /boot/grub/menu.lst s , i sunt descrise elementele de congurare prezente n acesta:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

## 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 ## timeout sec # Set a timeout, in SEC seconds, before automatically booting the default entry # (normally the first entry defined). timeout 5

# Pretty colours color cyan/blue white/blue [...]

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI

163

Figura 6.7: Ecran opt , iuni GRUB


16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

## Razvans kernels title root kernel savedefault title root kernel savedefault [...] Debian GNU/Linux, kernel 2.6.18-12fast (hd0,2) /boot/vmlinuz-2.6.18-12fast root=/dev/hda3 ro

Debian GNU/Linux, kernel 2.6.18-12fast (single-user mode) (hd0,2) /boot/vmlinuz-2.6.16-12fast root=/dev/hda3 ro single

# This entry automatically added by the Debian installer for a non-linux OS # on /dev/hda1 title Microsoft Windows XP Professional root (hd0,0) savedefault makeactive chainloader +1

opt din meniu folosita pentru boot-are. Opt , iunea default precizeaza , iunea implicita pentru diferite sisteme de operare. Fis , ierul de congurare cont , ine mai multe intrari dupa opt sistemul de operare care va Numarul care urmeaza , iunea default indica boot-at implicit n cazul n care utilizatorul nu intervine n momentul as , arii meniului de n gura 6.7, nu ar exista alte opt , iuni. Numerotarea pornes , te de la 0. Presupunnd ca, opt iuni de sisteme de operare, boot-area implicit a pe Windows XP Professional este , de prezent condit , ionata , a opt , iunii default 4. timpul de as aleaga una din Opt , iunea timeout indica , teptare pentru ca utilizatorul sa

164

INTRODUCERE N SISTEME DE OPERARE

acest timp expira, se va ncarca opt sistemul de , iunile as , ate n meniul de boot. Daca operare indicat de opt , iunea default. colorat meniul GRUB. Opt , iunea colors as , eaza

Opt , iunea de sistem de operare Ceea ce apare, n continuare, n exemplul de s , ier de congurare de mai sus sunt ca intrarile asociate pentru sistemele de operare care pot boot-ate. Se observa ecare intrare cont , ine un set de directive de congurare. Acestea sunt: as title: este un s , ir de caractere reprezentnd numele intrarii , a cum va aparea nicio limitare de nume, se ea n ecranul de opt , iuni GRUB. Des , i nu exista ca titlul sa e un nume reprezentativ; recomanda partit imaginea de nucleu a sistemului de root: reprezinta , ia pe care se aa cu partit operare; aceasta poate sau nu coincida , ia unde este montat sistemul de s iere r ad acin a ( / ); , calea catre kernel: reprezinta imaginia de nucleu n cadrul partit , iei de mai sus; partit acin a (/); subdirectiva root precizeaza ia asociat a sistemului de s iere rad , , faptul ca sistemul de s opt , iunea ro precizeaza , iere va montat read-only; se observa ca n cazul Windows nu exista opt , iunea kernel, deorece GRUB nu poate boot-a direct nucleul Windows ci va apela NTLDR (bootloader -ul de Windows), lucru indicat prin opt , iunea chainloader+1; opt , iunea +1 semnica citirea primului sector din partit ia (hd0,0) ; , opt, iunea makeactive stabiles , te partit , ia ca ind partit , ia activa; directiva default este folosita n forma opt, iunea savedefault: daca la boot-are are opt default saved s , i opt , iunea folosita , iunea savedefault, atunci la urmatoarea boot-are se va selecta, implicit, aceeas , i opt , iune.

Convent , ia de denumire GRUB n Linux, primul hard-disk este accesibil sub numele /dev/hda, iar prima partit Daca , ie convent a acestuia sub numele /dev/hda1, GRUB foloses , te o alta , ie pentru denumirea discurilor din sistem s i a partit iilor acestora. Astfel, pentru a referi primul disc , , din sistem, GRUB foloses , te denumirea (hd0). Numerotarea discurilor ncepe de la 0. Spre deosebire de Linux, GRUB nu face distinct , ie ntre tipul de controller folosit de discurile din sistem: IDE sau SCSI. Astfel, primul disc este denumit ntotdeauna (hd0). Pentru referirea primei partit, ii din primul disc, GRUB foloses , te denumirea (hd0,0). de n ton cu cele de mai sus, a 3-a partit , ie de pe al doilea disc al sistemului este referita GRUB sub forma (hd1,2). Tabelul 6.1 de mai sus ofera o analogie ntre denumirea GRUB s , i Linux pentru discuri s , i partit , ii.

Consola GRUB n afara s , ierului de congurare, GRUB poate congurat s , i prin intermediul unei n doua moduri: dintr-un sistem Linux consolei asociate. Aceasta poate accesata

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI Tabelul 6.1: Denumirea discurilor n Linux/GRUB Denumire Linux Denumire GRUB

165

Dispozitiv

Primul disc IDE Al doilea disc IDE Al treilea disc SCSI Prima unitate oppy Prima partitie de pe al doilea disc IDE A doua partitie de pe al treilea disc SCSI

/dev/hda /dev/hdb /dev/sdc /dev/fd0 /dev/hdb1 /dev/sdc2

(hd0) (hd1) (hd2) (fd0) (hd1,0) (hd2,1)

folosind comanda grub, sau din intermediul meniului de boot al GRUB. n ambele cazuri utilizatorului i este oferit un prompt grub> unde poate introduce comenzi specice. la situat Utilizarea consolei GRUB este limitata , 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 n sect descrisa , iunea 6.6.3. s Accesarea consolei GRUB poate necesara , i n momentul n care se dores , te alterarea unei opt , iuni de boot-are. Spre exemplu, n ecranul de meniul de boot GRUB, opt apasarea tastei e peste o anumita , iune conduce la aparit , ia consolei GRUB cu acelei opt posibilitatea editarii , iuni de bootare. Acest lucru este util n cazul unei erori (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 o consola de root (prin folosirea opt porneasca init=/bin/bash (vezi , iunii sect , iunea 10.6.2).

6.4

ncarcarea nucleului

ce este ncarcat Dupa n RAM s , i rulat, bootloader -ul este responsabil cu ncarcarea nucleului sistemului de operare s acesta. Ca s , i transmiterea controlului catre , i faza a ntr-un s doua a GRUB, nucleul rezida ier din sistemul de s iere, denumit imaginea , , ca parametru n cadrul de nucleu. n cazul GRUB, locat , ia acestui s , ier este transmisa directivei kernel din /boot/grub/menu.lst.

6.4.1

Imaginea de nucleu

Imaginea de nucleu este un s , ier executabil cont , innd codul s , i datele necesare pentru rularea nucleului sistemului de operare. n Windows, imaginea nucleului se numes , te n C:\Windows\system32\ntoskrnl.exe. n ntoskrnl.exe s , i este localizata imagine rezida, de obicei, n /boot, s sistemele Linux, aceasta , i are denumirea n forma vmlinuz-versiune_kernel (spre exemplu, vmlinuz-2.6.29.1 sau vmlinuz2.6.31-020631-generic).

166

INTRODUCERE N SISTEME DE OPERARE

un astfel de s Comanda file indica , ier ca ind o imagine de nucleu Linux:


1 2

root@asgard:/boot# file vmlinuz-2.6.31-020631-generic vmlinuz-2.6.31-020631-generic: Linux kernel x86 boot executable RO-rootFS , root_dev 0x6801, swap_dev 0x3, Normal VGA

n jur de 3-4 MB. Poate nsa constrnsa la n mod obis , nuit imaginea de kernel ocupa dimensiuni mai mici prin eliminarea anumitor componente, atunci cnd este cazul (spre denumirea imaginii se termina n z exemplu n cazul sistemelor embedded 1 ). Faptul ca o imagine de kernel comprimata. (vmlinuz) indica cont s O imagine de kernel comprimata , ine la nceputul ei o sect , iune direct executabila, ,i aceasta sect , te zona efectiv comprimata. dupa , iune, se gases ncarcarea Dupa imaginii de nucleu, bootloader -ul transmite controlul execut , iei catre e catre ntr-o prima kernel (e catre imaginea necomprimata, zona necomprimata). nucleul init s dispozitivele hardware s faza Toate , ializeaza , i congureaza , i memoria. dispozitivele init ializate de BIOS vor reinit ializate pentru a asigura robustet , , , ea s ,i initializarea. independent , a de modul n care BIOS-ul realizeaza decomprimarea imaginii de nucleu. Dupa aceasta se Urmatorul pas l reprezinta sistemul de s monteaza iere r ad acin a precizat prin parametrul root=/dev/... al , a ce nucleul init directivei kernel din s , ierul de congurare GRUB. Pe masur , ializeaza alte subsisteme, pe ecran sunt as ate mesaje de status. , a nucleului se ncheie cu crearea procesului init (ce are pid-ul ncarcarea completa imagine pe baza careia se 1) din imaginea /sbin/init. Se poate alege o alta sa creeze procesul init, prin specicarea opt iunii init=/path/to/new/exec la , boot-area nucleului. Un caz tipic pentru aceasta este recuperarea parolei de root (vezi sect , iunea 10.6.2).

6.4.2

Opt , iuni de boot-are pentru nucleu

modice Nucleul Linux poate congurat pentru boot-are cu diverse argumente care sa-i funct , ionalitatea. Acestea sunt transmise ca parametri de boot-are n directiva kernel a e prin s GRUB. Congurarea acestor argumente poate realizata , ierul de congurare (/boot/grub/menu.lst), e prin accesarea consolei GRUB (apasarea tastei e n ecranul de opt , iuni GRUB). completa cu opt a online2 . Cele mai importante O lista , iunile de boot-are poate gasit dintre aceste opt , iuni sunt: mesaje suplimentare la ncarcarea debug: as nucleului; , eaza as quiet: dezactiveaza nucleului; , area de mesaje la ncarcarea

resume=suspend_device (util pentru laptop-uri n cazul nct, iei de hibernare):


discul unde se aa imaginea suspendata a nucleului; specica partit sistemul de s acin a; root=device: precizeaza , ia unde se aa , iere rad
1 2

http://en.wikipedia.org/wiki/Embedded_system http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch09.pdf

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI

167

daca sistemul de s acin a este montat read-only sau read ro/rw: specica , iere rad write la boot-are; executabilul care va ncarcat init=lename: specica la crearea procesului init (implicit acest executabil este /sbin/init); pornirea lui init n mod single-user. S sau single: specica

6.5

Init , ializarea sistemului

ncarcarea nucleului se ncheie cu pornirea init, procesul cu pid-ul 1, parintele vom presupune ca procesul init a fost celorlalte procese din sistem. n cele ce urmeaza creat n mod obis nuit din imaginea /sbin/init . ,

init este responsabil cu pornirea celorlalte procese importante ale sistemului, a accesul utilizatorului la sistem (getty s daemonilor s , i a proceselor care asigura ,i
mediul grac).

6.5.1

init

init este resposabil cu crearea celorlalte procese importante din sistem s , i, astfel, de
realizarea unui sistem funct Pentru precizarea proceselor care , ional s , i interactiv. trebuiesc pornite s i a opt iunilor primite de c atre acestea, init foloses , , , te un set de s , iere de congurare decrise n continuare.

Niveluri de rulare (runlevels) init, trebuie descrisa not nainte de a prezenta modul n care se congureaza , iunea de la un context de utilizare a unui nivel de rulare (runlevel ). Un nivel de rulare se refera la ce servicii ofera sistemul utilizatorului. Un sistem de operare. Altfel spus, se refera de un altul prin dispozitivele montate s runlevel difera , i prin serviciilor pornite. Sunt denite 7 niveluri de rulare, numerotate de la 0 la 6. Acestea pot folosite diferit de 3 dintre ele au tot timpul aceeas diversele distribut , ii Linux, nsa , i semnicat , ie:

Runlevel 0 Halt : este folosit pentru oprirea sistemului; Runlevel 1 Single: este folosit pentru un sistem single-user; Runlevel 6 Reboot: este folosit pentru repornirea sistemului.
Pentru as , area runlevel -ului curent se foloses , te comanda runlevel (ca root) sau who -r (ca utilizator obisnuit):
1 2 3 4 5

root@asgard:~# runlevel N 2 razvan@asgard:~$ who -r run-level 2 2009-09-23 17:57

last=

168

INTRODUCERE N SISTEME DE OPERARE

prin rularea comenzii init urmata de numarul Schimbarea runlevel-ului se realizeaza runlevel-ului. Astfel rularea comenzii
1

root@asgard:~# init 0

cu rularea comenzii: este echivalenta


1

root@asgard:~# shutdown -h

sau
1

root@asgard:~# halt

Congurarea init n Fis , ierul principal de congurare pentru init este /etc/inittab. Este prezentata, continuare, o parte a unui s , ier de congurare /etc/inittab pentru a descrie modul comportamentul init: n care acesta afecteaza
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

[...] # The default runlevel. id:2:initdefault: [...] # # # # # # # /etc/init.d executes the S and K scripts upon change of runlevel. Runlevel 0 is Runlevel 1 is Runlevels 2-5 Runlevel 6 is halt. single-user. are multi-user. reboot.

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 # What to do when CTRL-ALT-DEL is pressed. ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now [...] # /sbin/getty invocations for the runlevels. # # The "id" field MUST be the same as the last # characters of the device (after "tty"). # # Format: # <id>:<runlevels>:<action>:<process> # # Note that on most Debian systems tty7 is used by the X Window System, # so if you want to add more gettys go ahead but skip tty7 if you run X. # 1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI


40 41 42 43

169

3:23:respawn:/sbin/getty 4:23:respawn:/sbin/getty 5:23:respawn:/sbin/getty 6:23:respawn:/sbin/getty

38400 38400 38400 38400

tty3 tty4 tty5 tty6

cum se poate observa intrarile Dupa din /etc/inittab au urmatorul format:


1

<id>:<runlevels>:<action>:<process>

unde:

id este un identicator unic al regulii din inittab;


nivelurile de rulare asupra carora regula; runlevels reprezinta se aplica

action este act, iunea pe care o va executa init;


process este comanda care va executata. a regulilor posibile pentru inittab se gases , te n pagina de O descriere completa manual (man inittab). Vor prezentate, n continuare, regulile din exemplul de mai sus. Linia 3 din captura de mai sus stabiles , te runlevel -ul implicit, care este 2. la l6 de pe liniile 14-20 prezinta reguli pentru scripturile de Identicatorii l0 pna cum se observa, init Dupa , ializare a serviciilor sistemului conform cu runlevel -ul. pentru ecare runlevel n parte este /etc/init.d/rc urmata de comanda executata numarul nivelului de rulare. Prin intermediul acestei comenzi se vor porni serviciile cum se va vedea n continuare. specice sistemului, dupa ca se executa o repornire a sistemului n Linia cu identicatorul ca (linia 25) precizeaza CTRL-ALT-DEL. Pentru aceasta repornire se ruleaza comanda cazul n care se apasa shutdown. la 6 (liniile 38-43) sunt folosite pentru a porni procesul Regulile cu identicatorii 1 pna cum se observa s getty pe terminalele virtuale ale sistemului. Dupa , i din comentariu, terminalul virtual 7 este asociat mediului grac s , i nu poate folosit pentru a porni getty. procesului, init l va recrea. Act iunea respawn semnic a faptul c a, n cazul terminarii ,

Pornirea daemonilor de sistem cum s-a observat din s Dupa , ierul de congurare /etc/inittab, pornirea serviciilor cu ajutorul scriptului /etc/init.d/rc. sistemului n funct , ie de runlevel se realizeaza scripturile aate Acest script primes runlevel -ului s , te ca argument numarul , i executa ntr-un director specializat: /etc/rcX.d/, unde X este numarul runlevel -ului. Astfel, runlevel -ul este 3, se vor executa script-urile din /etc/rc3.d/. daca Cont , inutul directorului /etc/rc3.d/ este:
1 2 3 4 5

razvan@asgard:~$ ls -l /etc/rc3.d/ total 4 lrwxrwxrwx 1 root root 18 2009-06-10 22:56 K08vmware -> /etc/init.d/ vmware lrwxrwxrwx 1 root root 20 2009-07-22 14:17 K77ntp-server -> ../init. d/ntp-server [...]

170
6 7 8 9 10 11 12 13

INTRODUCERE N SISTEME DE OPERARE


15 2009-01-17 11:54 S20exim4 -> ../init.d/ 19 2009-06-01 12:51 S20firebird2 -> ../init.d

lrwxrwxrwx 1 razvan razvan exim4 lrwxrwxrwx 1 razvan razvan /firebird2 [...] lrwxrwxrwx 1 root root vmware lrwxrwxrwx 1 razvan razvan apache2 lrwxrwxrwx 1 razvan razvan rc.local lrwxrwxrwx 1 razvan razvan /rmnologin lrwxrwxrwx 1 razvan razvan init.d/stop-bootlogd

18 2009-06-10 22:56 S90vmware -> /etc/init.d/ 17 2009-02-24 00:05 S91apache2 -> ../init.d/ 18 2009-01-17 11:47 S99rc.local -> ../init.d/ 19 2009-01-17 11:47 S99rmnologin -> ../init.d 23 2009-01-17 11:47 S99stop-bootlogd -> ../

ca s Se observa sunt un set de legaturi simbolice catre intrari din , ierele Directorul /etc/init.d/ cont, ine scripturile de pornire/oprire/repornire a serviciilor din sistem. Astfel, pentru oprirea, pornirea sau repornirea serviciului apache, se folosesc comenzile:

/etc/init.d/.

root@asgard:~# /etc/init.d/apache start|stop|restart

, ii scripturilor ce se gasesc Argumentele start / stop / restart sunt comune majoritat n /etc/init.d. De asemenea, se poate observa s , i un format al numelor s , ierelor din /etc/rcX.d:
1 2

K numar nume S numar nume

kill, iar S nseamna start. Astfel, existent K nseamna K08vmware nseamna , a legaturii serviciul vmware va oprit (prin intermediul comenzii /etc/init.d/vmware ca cu intrarea n nivelul de rulare 3. La fel, existent stop) odata S20exim4 , a legaturii ca serviciul exim va pornit (prin intermediul comenzii nseamna cu intrarea n nivelul de rulare 3. /etc/init.d/exim start) odata ordinea de Numarul asociat unui din formatul numelor de s reprezinta , iere pornire/oprire a serviciilor. Astfel, serviciul S91apache va pornit naintea S99rmnologin, iar serviciul K77ntp-server va oprit naintea K08vmware (la oprire ordinea este descrescatoare).

sysv-rc-conf Avantajul schemei init de pornire a serviciilor este exibilitatea, iar dezavantajul s mare de s se dores complexitatea crescuta , i un numar , iere de congurare. Daca , te o legatur a eliminarea sau adaugarea unui serviciu la un runlevel, va trebui creata catre simbolica scriptul de pornire/oprire s i denumit a folosind schema specic a. , Procesul poate anevoios n cazul n care se dores , te o congurare mai avansata. Pentru a elimina acest decient, se poate folosi utilitarul sysv-rc-conf. Acesta a unui serviciu dintr-un runlevel. permite adaugarea/eliminarea facila doua interfet sysv-rc-conf ofera una n linia de , e de congurare a serviciilor: s comanda , i una text. Interfat , a text permite parcurgerea serviciilor existente n sistem s ,i act adaugarea/elimitarea acestora dintr-un runlevel printr-o simpla iune de ,

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI

171

permite check /uncheck (folosind tasta SPACE). Interfat n linia de comanda ,a adaugarea/eliminarea unui serviciu prin precizarea nivelului/nivelurilor de rulare dorite, a numelui serviciului s n exemplul de mai jos, serviciul , i a act , iunii (on sau off ). postfix a fost adaugat la nivelurile de rulare 4 s ,i 5 s , i serviciul apache a fost eliminat din nivelurile de rulare 2 s i 5. ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

root@anaconda:/boot/grub# sysv-rc-conf --list postfix postfix 0:off 1:off 2:on 3:off 4:off

5:off

6:off

root@anaconda:/boot/grub# sysv-rc-conf --level 45 postfix on root@anaconda:/boot/grub# sysv-rc-conf --list postfix postfix 0:off 1:off 2:on 3:off 4:on root@anaconda:/boot/grub# sysv-rc-conf --list apache apache 0:off 1:off 2:on 3:on 4:on

5:on

6:off

5:on

6:off

root@anaconda:/boot/grub# sysv-rc-conf --level 25 apache off root@anaconda:/boot/grub# sysv-rc-conf --list apache apache 0:off 1:off 2:off 3:on 4:on

5:off

6:off

6.5.2

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 congurare asincrona, Spre deosebire de alte alternative pentru init, upstart este compatibil cu acesta s ,i poate folosi scripturile init nemodicate (spre exemplu cele din /etc/init.d). upstart este, de fapt, un daemon init modicat. Ca orice sistem Linux, upstart este pornit prin rularea /sbin/init. va n septembrie 2009 echipa de dezvoltare a distribut , iei Debian a anunt , at faptul ca 1 renunt , a la init n favoarea upstart . hardware-ului. Daca pna de curnd se putea Upstart a aparut ca urmare a dezvoltarii s ti din momentul pornirii sistemului ce dispozitive exist a n sistem sau unde se poate , monta sistemul de s , iere, dezvoltarea de noi dispozitive hot-plug (care pot conectate sau deconectate n timp real n calculator) a impus folosirea unui nou sistem de detect , ie s i congurare a acestora. , upstart este as , adar un daemon init bazat pe evenimente (event-based init daemon ). crearea de noi sarcini pentru sistemul de operare n doua Funct ionarea sa nseamna , moduri:

rularea de scripturi sau executabile n momentul producerii unui eveniment; oprirea sau pornirea unui serviciu n momentul producerii unui eveniment.
Un exemplu este montarea unui sistem de s , iere (spre exemplu de pe un USB ash conectarea dispozitivului USB, sunt: drive). Pas , ii urmat , i, dupa

un eveniment de tip startup pornes , te daemon-ul udevd;


1

http://lwn.net/Articles/351013/

172

INTRODUCERE N SISTEME DE OPERARE

trimita un eveniment de tipul block-device daemon-ul udevd este congurat sa added pentru ecare dispozitiv nou conectat; vericarea dispozitivului s evenimentul block-device-added determina , i montarea este listat n /etc/fstab; acestuia daca montarea sistemelor de s dupa , iere din /etc/fstab se transmite evenimentul fhs-lesystem.

Congurare upstart upstart este congurat prin intermediul directorului /etc/event.d/ care se dores , te a un nlocuitor pentru scripturile /etc/inittab, /etc/init.d/* s , i /etc/rcX.d. Fiecare s , 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

act la Spre exemplu, s control-alt-delete prezinta ntreprinsa , ierul , iunea apasarea CTRL-ALT-DEL, s i anume repornirea sistemului: ,
1 2 3 4 5 6 7 8 9

root@ubuntui:/etc/event.d# cat control-alt-delete # control-alt-delete - emergency keypress handling # # This task is run whenever the Control-Alt-Delete key combination is # pressed. Usually used to shut down the machine. start on control-alt-delete exec /sbin/shutdown -r now "Control-Alt-Delete pressed"

cum se observa, la fel ca n Scripturile rc* sunt aociate cu nivelurile de rulare. Dupa /etc/init.d/rc cu argument numarul /etc/inittab, se apeleaza nivelului de rulare:
1 2 3 4 5 6 7 8

root@ubuntui:/etc/event.d# cat rc2 [..] start on runlevel 2 stop on runlevel [!2] script [...] exec /etc/init.d/rc 2 end script

modul de pornire a getty pentru diversele terminale virtuale (la Scripturile tty* prezinta fel ca n /etc/inittab). ncepnd cu Ubuntu 7.04 (Feisty Fawn), upstart a nlocuit cteva procese daemon importante cum sunt cron, atd, anacron s , i inetd.

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI

173

6.5.3

getty s , i login

pornirea daemonilor sistemului, init este responsabil cu pornirea proceselor Dupa autenticarea utilizatorului n sistemul de calcul. Dupa cum s-a vazut care asigura n cadrul s , ierului de congurare /etc/inittab, init pornes , te cte un proces getty pentru ecare 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 grac (n cazul n care acesta este instalat). Autenticarea nu se realizeaza de catre n mediul grac (prin introducerea unui utilizator/parola) getty, a sistemului de ferestre. ci de display manager (vezi sect , iunea 13.2.2), o componenta virtuale sunt accesate prin intermediul combinat de taste , iei CTRL-ALT-Fn, unde n este numarul terminalului. Combinat , ia CTRL-ALT-F7 este pentru accesarea mediului grac. folosita getty este responsabil cu crearea unei interfet , e de autenticare a utilizatorului s , i este responsabil att pentru autenticarea prin terminale virtuale ct s , i pentru conexiunea pe alte terminale precum interfet ele seriale. , init prompt-ul Login: catre Dupa utilizator pe , ializarea terminalului, getty ofera introduca numele de utilizator s apese terminalul virtual. Utilizatorul va trebui sa , i sa introducerea numelui de utilizator, getty invoca /bin/login. Astfel, ENTER. Dupa cu imaginea /bin/login s procesul login. imaginea sa este nlocuita i se creeaz a , parola utilizatorului (ale carei n continuare este ceruta caractere nu vor as , ate pe lor din motive de sigurant ecran n momentul tastarii a). n acest moment, login poate , se autentice. Daca utilizatorul a introdus verica validitatea utilizatorului care a dorit sa corecta atunci, n mod tipic, i se va deschide o o pereche nume de utilizator/parola un interval sesiune de shell pe terminalul curent. Altfel, procesul login moare, s , i, dupa din nou promptul de autenticare utilizatorului. de as , teptare, getty este repornit s , i ofera reus Schema de autenticare s , i pornire a sesiunii de shell (n cazul unei autenticari , ite), n gura 6.8: este prezentata Terminalele

Figura 6.8: Autenticarea ntr-un sistem Linux ca se ruleaza getty pe toate terminalele. n momentul n care utilizatorul Se observa

174

INTRODUCERE N SISTEME DE OPERARE

procesul login care cere parola utilizatorului. introduce numele de utilizator, getty creaza O data cu introducerea s , i validarea parolei, utilizatorului i este permis accesul n sistem cum se observa n gura 6.8, s i se deschide, n mod tipic, o sesiune shell. Dupa , shell-ul Bash (/bin/bash). utilizatorul dan ruleaza La ncheierea sesiunii de shell curente, procesul getty este reponit as , a cum este congurat n /etc/inittab (respawn).

Fis , ierele /etc/passwd s , i /etc/shadow Fis /etc/passwd s /etc/shadow sunt utilizate pentru autenticarea , ierele ,i cum se poate utilizatorilor n sistem s i stocarea de informat Dupa , , ii despre aces , tia. simpla a s observa dintr-o analiza , ierului /etc/passwd:
1 2

razvan@asgard:~$ cat /etc/passwd | grep guest guest:x:1001:1001:Guest Account,,,:/home/guest:/bin/bash

O intrare din acest s , ier este de forma:


1

username:simbol_parola:uid:gid:extra_info:home_dir:interpretor

dintre elementele prezentate sunt folosite de login pentru autenticarea Doua utilizatorilor: simbol_parola s , i interpretor. ce comanda va executata n momentul n care un Cmpul interpretor specica comanda este un utilizator a fost autenticat cu succes n sistem. De obicei aceasta interpretor de comenzi (n exemplul de mai sus /bin/bash), dar poate congurata comanda. n gura 6.8 utilizatorul dan foloses se va orice alta , te /bin/bash. Daca cu /usr/bin/vim, atunci orice autenticare pe un terminal completa intrarea asociata virtual va rezulta n deschiderea editorului vim pe acel terminal. Al doilea cmp dintr-o intrare n /etc/passwd (denumit aici simbol_parola) era folosit init , ial pentru a stoca parola ntr-un format criptat. n felul acesta, oricine avea s acces la s , ier avea acces la parola criptata , i putea folosi divers , i algoritmi pentru a o sparge. O solut ie ar fost restrict ionarea accesului la s ier. Totus , , , , i, acesta cont , ine a fost crearea unui nou s s , i alte informat , ii necesare altor comenzi. Solut , ia aleasa , ier, /etc/shadow, care poate accesat doar de utilizatorul privilegiat.
1 2

root@anaconda:~# ls -l /etc/shadow -rw-r----- 1 root shadow 1084 2009-07-21 22:19 /etc/shadow

Pentru mai multe detalii Fis , ierul shadow cont , ine numele de utilizator s , i parola criptata. consultat paginile de manual (man 5 passwd, man 5 shadow) sau ,i sect , iunea 10.2.3.

6.5.4

Sesiune de shell

rularea init s n Dupa , i autenticarea utilizatorului n sistem, acestuia i este oferita, mod tipic, o sesiune de shell (conform congurat , iei din s , ierul /etc/passwd). naintea oferirii promptului catre utilizator, procesul shell nou creat cites , te un set de s Acestea sunt folosite pentru a stabili formatul promptului, , iere de congurare. umask-ul curent, aliasurile de comenzi, variabilele de mediu.

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI

175

n cazul unui interpretor bash (Bourne Again Shell ), s , ierele de congurare citite sunt n ordine:

/etc/profile: acesta este s , ierul global de congurare pentru sesiunile de


shell; ~/.bash_profile sau ~/.bash_login sau ~/.profile: se executa primul gasit; ~/.bashrc este s obis de congurare locala; , ierul , nuit ~/.bash_profile cont, ine linia
1

drept urmare,

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

pentru a interpreta acest s , ier. interpretarea s Dupa , ierelor de congurare, se stabiles , te mediul curent de lucru s ,i utilizatorului i este oferit promptul unde poate introduce comenzi.

6.6
6.6.1

Studiu de caz
Grub 2

nu a oferit nici o mbunatat , ire majora n ultimii ani, GRUB a ramas n ciuda faptului ca cel mai utilizat bootloader n cadrul distribut iilor GNU/Linux. Aceasta datorit a faptului ca , bootloader -ul este una din cele mai delicate componente ale sistemului, o actualizare a sa ducnd la nefunct gres , ita , ionarea sistemului de operare. , iri aduse GRUB este s Unul din elementele care au contribuit la lipsa de mbunatat ,i versiune de arhitectura veche s n 2002 a nceput lucrul la o noua , i greu de extins. schimbari destul de mari. GRUB (GRUB2), versiune care a adus aduca GRUB212 a fost rescris de la zero pentru a asigura o portabilitate s , i o modularitate versiunii anterioare. Printre avantajele pe care le ofera se numar a: superioara

suport pentru scripturi; portabilitate pe mai multe arhitecturi; suport pentru i18n3 ; un nou sistem de denumire a partit, iilor.

Fis , iere de congurare ntr-un mod diferit fat de GRUB. n primul rnd numele GRUB2 se congureaza ,a s de congurare s-a schimbat din /boot/grub/menu.lst n , ierului /boot/grub/grub.cfg. Spre deosebire de GRUB, noul s , ier de congurare nu mai este editat direct de catre utilizator, ci este generat automat:
1 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

176

INTRODUCERE N SISTEME DE OPERARE

1 2 3 4 5 6 7 8

root@ant:~# cat /boot/grub/grub.cfg # # DO NOT EDIT THIS FILE # # It is automatically generated by /usr/sbin/grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # [...]

din trei locuri: Congurarea GRUB2 se realizeza legate n s , ierul /etc/default/grub: cont , ine un set general de congurari, principal de diverse opt , iuni ale meniului de boot; imaginile de directorul /etc/grub.d: cont, ine un set de scripturi care descopera grub.cfg; kernel instalate n sistem s , i genereaza

directorul /boot/grub: cont, ine bootloader -ul s , i diversele module pe care acesta
le foloses , te. editarea unuia din s Dupa , ierele din /etc/grub.d sau a /etc/default/grub va comanda update-grub2 pentru ca s trebui rulata , ierul /boot/grub/grub.cfg sa e regenerat.

Editarea opt , iunilor meniului ale meniului de boot. Spre exemplu Fis , ierul /etc/default/grub cont , ine congurari opt n mod implicit, iar GRUB_DEFAULT specica din meniu selectata , iunea timeout -ul dupa care opt va utilizata pentru GRUB_TIMEOUT specica iunea implicit a , bootare.
1 2 3 4 5 6 7 8 9 10

root@ant:~# cat /etc/default/grub # If you change this file, run update-grub afterwards to update # /boot/grub/grub.cfg. 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 directorul

/etc/grub.d:
informat 00_header: ncarca , iile din /etc/default/grub; fundaluri, culori s 05_debian_theme: congureaza , i teme; imagini de kernel pe disc s 10_linux: cauta , i le introduce n meniu;

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI

177

20_memtest86+: introduce n meniu imaginea /boot/memtest86+.bin,


aceasta exista; daca alte imagini de sisteme de operare s 30_os-prober: cauta , i le include n meniu; introduca intrari statice n meniu. 40_custom: permite utilizatorului sa de ordinea numelor s Ordinea n care apar opt , iunile n meniu este data , ierelor. Astfel, imaginile de kernel de ntotdeauna memtest86+ (20_memtest86+) va aparea dupa pe disc (10_linux). opt doua posibilitat , i: se editeaza s Pentru a adauga o noua , iune exista , ierul 40_custom sau se poate crea un s ier nou, caz n care numele s ierului nou creat va deni pozit , , , ia n meniu. intrarii care se foloses Un exemplu de sintaxa de noi opt , te pentru adaugarea , iuni este:
1 2 3 4 5 6 7 8 9 10 11 12 13 14

echo "Adding Custom Kernel \& SystemRescue" >\&2 cat << EOF menuentry "Ubuntu, linux 2.6.31-11-custom" { set root=(hd0,9) linux /boot/vmlinuz-2.6.31-11-custom root=UUID=c6829e27-2350-4e84 -bdbb-91b83f018f98 ro initrd /boot/initrd.img-2.6.28-11-generic } menuentry "Boot SystemRescue CD from hard drive" { set root=(hd1,10) linux /sysrcd/rescuecd subdir=sysrcd setkmap=us initrd /sysrcd/initram.igz } EOF

Linia echo "Adding Custom Kernel & SystemRescue" >&2 nu este Daca este inclusa, atunci textul Adding... va as neaparat necesara. , at n timpul execut , iei comenzii update-grub2. Celelalte opt , iuni sunt similare cu cele din GRUB. schema de Unul din elementele de noutate pe care le-a introdus GRUB2 este o noua denumire a partit , iilor. Astfel, discurile sunt denumite n forma hdX, unde X este un numar ce ncepe de la 0 (spre exemplu, primul disc SATA, este denumit hd0, al doilea disc SDB este hd1 etc.), similar cu GRUB. n schimb, partit , iile se denumesc de forma sdaY, cu Y ncepnd de la 1 (de exemplu a treia partit ie de pe sda este sda3). ,

6.6.2

Pornirea sistemului de operare Windows XP

, te aceeas Pornirea sistemului de operare Windows XP urmares , i pas , i ca n cazul pornirii Linux: pornirea sistemului, ncarcarea BIOS, ncarcarea bootloader -ului, ncarcarea nucleului, pornirea serviciilor. la ncarcarea Pas bootloader-ului sunt independent , ii pna , i de sistemul de operare s , i, deci, identici cu cei pentru Linux. Bootloader-ul pentru Windows NT (NT, 2000, XP, 2003) este NT Loader (NTLDR).

178 NTLoader

INTRODUCERE N SISTEME DE OPERARE

La fel ca s , i n cazul Linux, sectorul de boot al hard-disk-ului (MBR) sau al unei partit , ii n (VBR) este limitat s NTLDR. Imaginea acestuia rezida , i este folosit pentru ncarcarea C:\Windows\ntldr. ncarcarea s Dupa bootloader-ului, acesta consulta , ierul boot.ini pentru a localiza informat , iile de pe partit , ia de sistem.

Congurare NTLoader (boot.ini) pe partit Fis , ierul boot.ini se aa , ia de sistem (C:). Pentru vizualizarea s , i accesarea vizualizarea s acestuia trebuie permisa ierelor de sistem ( Tools->Folder Options , ->View->Hide protected operating system files). Un exemplu de cont , inut al boot.ini este prezentat n continuare:
1 2 3 4 5

[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

n cazul existent , ei mai multor sisteme Windows, utilizatorului i va as , at un ecran de ator select cu cel al GRUB). , ie (aseman timpul de as Variabila timeout specica sistemul de , teptare nainte de a ncarca operare dat de opt iunea implicit a. ,
1 Lista cu opt , iunile posibile de boot-are a nucleului Windows XP se poate consulta aici .

ncarcarea nucleului rularea bootloader -ului, acesta ncarca n memorie imaginea de nucleu a Dupa Windows, ntoskrnl.exe, s , i hall.dll (Hardware Abstraction Layer ), controlul ind apoi oferit nuclelului. faze: n prima faza se init dispozitivele Nucleul este ncarcat n memorie n doua , ializeaza se ncarca device driver-ele de sistem sistemului (procesor, memorie), iar n a doua faza necesare.

Pornirea proceselor importante ncarcarea procese importante: Dupa nucleului n memorie, sunt pornite, n ordine, doua dispozitivele din sistem, smss (Session Manager Subsystem): acesta monteaza variabilele de mediu s creeaza , i pornes , te winlogon (Windows Logon Manager );
1

http://support.microsoft.com/default.aspx?scid=kb;en-us;833721

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI

179

winlogon (Windows Logon Manager ):

de este procesul care se ocupa autenticarea utilizatorilor n sistem; n urma unei autenticari reus , ite sunt pornite shell-ul Windows (explorer) s i alte procese ale utilizatorului. ,

aici1 . Mai multe detalii despre procesul de pornire a unui sistem Windows XP se pot gasi

6.6.3

Interoperabilitate Linux-Windows

se suprascrie MBR-ul n cazul sistemelor dual-boot Linux-Windows se poate ntampla sa s i s a se piard a astfel opt iunea direct a de boot-are a unuia dintre sistemele de operare. , , Pentru a recupera bootloader -ul pierdut, trebuie rescris MBR-ul.

Reinstalarea GRUB ce necesita o reinstalare GRUB este aceea n care se Situat , ia cea mai frecventa Windows pe un sistem pe care exista instalata s reinstaleaza , 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 un boot-abila. n cazul unei dischete boot-abile utilizatorului i este LiveCD sau o discheta deschida o oferit direct prompt-ul de grub. n cazul unui LiveCD, utilizatorul va trebui sa s acceseze de acolo consola de GRUB: consola , i sa
1 2 3 4 5 6 7 8 9 10 11

root@asgard:~# grub Probing devices to guess BIOS drives. This may take a long time. GNU GRUB version 0.97 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename. ] grub>

se dores Presupunnd ca , te instalarea GRUB pe primul hard-disk din sistem, vor trebui urmat i pas ii de mai jos: , ,

specicarea partit, iei care cont, ine imaginea stage2 de GRUB:


1

grub> root (hd0,2)

nu se s imaginile se poate folosi comanda find, daca , tie pe ce partit , ie se aa cautnd unul din s stage1: , ierele din /boot. Cel mai adesea este cautat
1 2

grub> find /boot/grub/stage1 (hd0,2)

descoperirea partit pasul 1, apoi se instaleaza imaginea de dupa , iei se realizeaza GRUB n MBR:
1
1

grub> setup (hd0)

http://technet.microsoft.com/en-us/library/bb457123.aspx

180

INTRODUCERE N SISTEME DE OPERARE

s imaginea de GRUB poate instalata , i n sectorul de boot al unei partit , ii (VBR):


1

grub> setup (hd0,0)

n acest caz, GRUB va trebui sa e pornit (chainloaded ) cu un alt bootloader. nsa, repornirea Comanda quit se foloses , te pentru ies , irea din consola GRUB. Dupa sistemului, acesta va as a ecranul de opt iuni GRUB pentru select ia sistemului de , , , operare dorit.

Reinstalarea NTLoader n cazul n care se instaleaza o distribut a Reinstalarea NTLDR este necesara , ie Linux far a se instala s , i un bootloader (spre exemplu GRUB), sau n cazul unui MBR corupt. consola de recuperare Windows XP (Recovery Pentru repararea MBR, trebuie folosita Console). Pentru accesarea acesteia se foloses , te CD-ul de instalare Windows s , i dupa R pentru rularea Emergency bootare se alege opt , iunea Repair. n continuare se apasa Repair Process s i se alege Fast sau Manual Repair . Fast Repair este recomandata , , ii utilizatorilor, iar Manual Repair administratorilor s majoritat , i utilizatorilor avansat , i. , i online1 . Mai multe detalii gasit

6.6.4

Personalizarea ecranului GRUB

Ecranul de opt , iuni prezentat de GRUB poate anost. Pentru a rezolva acest neajuns se imagine de fundal, denumita GRUB splashimage. Exista numeroase poate folosi o alta 234 astfel de imagini ). Imaginile sunt imagini .xpm arhivate (de exemplu site-uri care ofera hubble.xpm.gz). Pentru folosirea unei imagini splash de GRUB trebuie editat s , ierul principal de congurare a GRUB (/boot/grub/menu.lst). Pas ii ce trebuiesc urmat , , i sunt prezentat , i mai jos: a s crearea unei copii de sigurant, a , ierului de congurare GRUB:
1

root@asgard:/boot/grub# cp menu.lst menu.lst.old

pentru obt, inerea unui s , ier .xpm.gz care cont , ine imaginea de splash folosita GRUB:
1 2 3 4 5 6 7
1 2

root@asgard:/boot/grub# wget http://schragehome.de/splash/hubble.xpm .gz --2009-09-26 06:23:27-- http://schragehome.de/splash/hubble.xpm.gz Resolving schragehome.de... 82.165.105.215 Connecting to schragehome.de|82.165.105.215|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 99593 (97K) [image/x-xpixmap] Saving to: hubble.xpm.gz

http://www.ntfs.com/missing-corrupted-system-les.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

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI


8 9 10 11

181

100%[===================================>] 99,593 0.5s

209K/s

in

2009-09-26 06:23:27 (209 KB/s) - hubble.xpm.gz saved [99593/99593]

editarea s , ierului de congurare:


1 2 3 4 5

[...] # Pretty colours #color cyan/blue white/blue splashimage=(hd0,2)/boot/grub/hubble.xpm.gz [...]

imaginea de GRUB este a treia partit n exemplul de mai sus partit , ia unde se aa , ie de pe primul disc (hd0,2). editarea s Dupa , i salvarea s , ierului se repornes , te sistemul. Noul ecran de opt , iuni GRUB va folosi ca imagine de fundal hubble.xpm.gz.

Cuvinte cheie

pornirea/repornirea unui sistem booting/bootstrapping fazele pornirii unui sistem de operare BIOS POST CMOS dispozitiv boot-abil sector de boot/sector bootabil MBR, VBR
de partit tabela , ii

consola GRUB imagine de nucleu


opt, iuni de ncarcare a nucleului

init runlevel /etc/inittab /etc/init.d, /etc/rcX.d getty login /etc/passwd, /etc/shadow /etc/prole, ~/.bash_prole, ~/.bashrc NTLDR boot.ini smss, winlogon Recovery Console

bootloader fazele unui bootloader (stages) GRUB stage1, *_stage1_5, stage2 /boot/grub/menu.lst

ntrebari a pornirii unui sistem? 1. Care este ordinea corecta

K vmlinuz, init, GRUB, BIOS K GRUB, BIOS, init, vmlinuz

182

INTRODUCERE N SISTEME DE OPERARE

K BIOS, GRUB, vmlinuz, init K init, vmlinuz, BIOS, GRUB


2. Ce este un sector de boot?

K primul sector al primei partit, ii K primul sector al unei partit, ii sau al unui hard-disk
K un sector ce cont, ine semnatura 0xAA55 (ultimii doi octet , i) , te faza a doua a GRUB (stage2) K un sector pe care se gases 3. Care din urmatoarele este un nlocuitor al init?

K upstart K downstart K slowstart K faststart


4. Cte partit , ii primare, active, extinse, logice se pot aa pe un hard-disk?

K oricte, 1, 2, 4 K 1, oricte, oricte, 4 K 4, 1, 1, oricte K 1, oricte, 2, oricte


5. Care din urmatoarele asocieri NU este valida?

K GRUB/NTLDR K vmlinuz/ntoskrnl K POST/CMOS K getty/winlogon


a GRUB este resposabila cu ncarcarea 6. Care faza imaginii de nucleu Linux?

K stage1 K stage1.5 K stage2 K stage3


7. Care este s , ierul principal de congurare GRUB pe un sistem Debian/Ubuntu?

K /etc/main.cf K /etc/grub.conf K /boot/grub.conf K /boot/grub/menu.lst


de pornire a unei sesiuni shell? 8. Care este ordinea corecta

CAPITOLUL 6. PORNIREA S , I INIT , IALIZAREA SISTEMULUI

183

K login, init, getty, bash K getty,bash, login, init K init, getty, login, bash K init, login, bash, getty
n notat 9. Cum se reprezinta, , ia GRUB, a 3-a partit , ie de pe al doilea disc?

K /dev/hdb3 K /dev/hda2 K (hd1,2) K (hd2,3)


10. Fis , ierul /etc/shadow cont , ine parolele criptate ale utilizatorilor sistemului. Poate accesat numai de utilizatori privilegiat , i ai sistemului. K adevarat, adevarat K adevarat, fals K fals, adevarat

K 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

din acest capitol? Ce se nvat ,a

Principalele componente hardware ale unui sistem de calcul Mecanismele de accesare s , i interogare a dispozitivelor hardware
ncarcarea s , i folosirea modulelor de kernel

Utilitare de interact, iune cu dispozitivele: lspci, lsusb, smartmontools Lucrul cu dispozitivele sistemului; comanda dd Interact, iunea cu sistemul: /proc, sysctl
pentru MBR Cum se poate realiza o copie de sigurant, a

7.1

Structura unui sistem de operare

de managementul resurselor hardware s Sistemul de operare este cel care se ocupa ,i software prezente n computer. SO are mai multe componente, ecare cu un rol bine modul n care este structurat accesul la hardware. denit. Diagrama 7.1 prezinta Sistemul de operare este compus din: de comunicat cu kernel: nucleul sistemului de operare se ocupa , ia directa un sistem de management al resurselor pentru aplicat hardware-ul s , i ofera , iile din sistem;

biblioteci de funct pun la dispozit aplicat un API (Application , ie , iilor , ii


Programming Interface) comun pentru accesul la resursele oferite de kernel;

aplicat , ii cele care vin cu un sistem de operare sunt de obicei utilizate pentru
congurarea sistemului, modicarea datelor din sistem etc. Aceste aplicat , ii pot sa utilizeze biblioteci de funct ii sau pot comunica direct cu kernel-ul. , 185

186

INTRODUCERE N SISTEME DE OPERARE

Figura 7.1: Accesul la hardware spat programe n Sistemul de operare face distinct , ia ntre doua , ii n care se pot gasi execut , ie: spat , iul utilizator (user-space ) s , i spat , iul kernel (kernel-space ). Prin spat , iu se nt , elege att spat , iu de memorie ct s , i mediu de execut , ie. Fiecare spat , iu are alte condit , ii de lucru. kernel-ul. Cont Spat , iul n care ruleaza , ine doar kernel-ul s ,i , iul kernel este spat componentele sale (precum driver-ele ncarcate la un moment dat). Tot ceea ce , te n spat se gases , iul kernel are acces direct la hardware. Spat aplicat , iul n care se gasesc , iile s , i bibliotecile de funct , ii , iul utilizator este spat , te n spat utilizate de acestea la un moment dat. Tot ceea ce se gases , iul utilizator nu are acces direct la hardware. treaca prin kernel. Comunicat Toate act , iunile aplicat , iilor din spat , iul utilizator trebuie sa , ia dintre spat iul utilizator s i spat iul kernel se realizeaz a prin apeluri de sistem. , , , Apelul de sistem este un mecanism prin care programele sau bibliotecile din spat , iul resursele puse la dispozit utilizator acceseaza ie de kernel. , Practic, apelurile de sistem sunt funct , ii implementate n kernel pe care aplicat , iile din spat iul utilizator le acceseaz a direct sau prin intermediul bibliotecilor de funct ii. , , Acest capitol va analiza modul de lucru intern pentru un sistem Linux.

7.2

Considerente hardware

denumirea generica de hardware. Pentru Componentele zice ale sistemului poarta folosirea acestora, utilizatorul dispune de un sistem de operare s Acestea , i aplicat , ii. nivelul de software de peste hardware. Fiecare componenta este esent s reprezinta , iala ,i nu poate funct iona n lipsa celeilalte. , sunt cele care asigura interfat Sistemul de operare s , i aplicat , iile de baza , a cu hardware-ul directe a hardware-ului. Din punctul de pentru a preveni, astfel, dicultatea programarii

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

187

la un set de apeluri catre vedere al utilizatorului, interfat , a cu hardware-ul este limitata sistemul de operare s , i aplicat , iile de baza.

7.2.1

Structura unui sistem de calcul

Din punct de vedere structural, un sistem de calcul este un set de componente cu roluri pentru ndeplinirea unei sarcini. Sistemele de calcul din ziua bine denite care comunica mai jos. Aceasta este folosita pentru de azi urmeaza structura von Neumann prezentata ntr-un sistem de calcul s a deni setul de componente care exista , i interact , iunea dintre acestea.

Figura 7.2: Interact , iunea componentelor hardware ale unui sistem de calcul cum se observa, arhitectura von Neumann precizeaza 5 componente ale unui Dupa sistem de calcul: cu comandarea sau unitatea de control este responsabila unitatea de comanda unitatea de comanda va interpreta modului n care celelalte componente lucreaza; codul unui program (va decodica instruct iunile) s i va cere unit at ii aritmetice s , , , ,i logice execut , ia sarcinilor necesare; s se mai numes unitatea aritmetica , te unitatea de execut , i logica , ie; rolul acesteia unitatea aritmetica este de a executa codul transmis de la unitatea de comanda; a informat are un set de registre pentru stocarea locala iei s i un acumulator pentru , , , ii aritmetice s efectuarea de operat , ii; rolul unitat , i logice este ndeplinit de procesor; codul programului de executat memoria este componenta n care se stocheaza de unitatea de execut s , i datele acestuia; memoria este folosita , ie s , i de comanda; cites unitatea de comanda te din memorie instruct iunile s i le decodic a, pe cnd , , , diverse unitatea de execut ie cites te s i scrie n memorie datele cu care efectueaza , , , calcule; dispozitivele de intrare/ies (periferice) sunt cele care intermediaza , ire comunicat , ia sistemului cu exteriorul; informat , iile de la aceste dispozitive sunt s copiate n memorie s i folosite ulterior de unitatea de comanda , , i unitatea de execut , ie; exemple de dispozitive periferice sunt monitorul, tastatura, mouse-ul, hard disk-ul etc.

188

INTRODUCERE N SISTEME DE OPERARE

7.2.2

Procesorul

de prelucrare (CPU Central Processing Unit ) este Procesorul sau unitatea centrala , ii de comanda s creierul sistemului. Este echivalentul unitat , i a celei de execut , ie din arhitectura von Neumann. Procesorul este cel care va interpreta codul unui program a execut s , i va efectua operat , ii cu datele acestuia s , i este componenta de baza , iei unui proces. arhitectura unui sistem de calcul. Procesorul este cel care determina Astfel, procesoarele Intel sau AMD fac parte din arhitectura x86. Majoritatea procesoarelor la mai noi fac parte din arhitectura x86_64. Arhitectura unui sistem de calcul se refera setul de instruct iuni pe care procesorul le ofer a utilizatorului. , denumite Procesorul dispune de un set de locat , ii de stocare de foarte mare viteza 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 Dimensiunea registrelor este , i. 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 instruct procesare este un circuit electronic care executa , iuni. Un procesor cu o singura sau mai multe unitate de procesare se numes , te single-core, iar un procesor cu doua , i de procesare aate pe acelas unitat i circuit integrat se numes te multi-core . Performant , , ,a prin folosirea mai multor unitat obt , inuta , i de procesare depinde de existent , a relor de execut , ie multiple n cadrul aplicat , iilor s , i de suportul sistemului de operare. n Hz. Caracteristica vitezei unui procesor este, de obicei, frecvent a , a acestuia, masurat n zilele noastre, frecvent , a de lucru a unui procesor este de ordinul GHz. Calculatoarele i386, precum: Intel Pentium, Intel Xeon, persoanele folosesc procesoare cu arhitectura AMD Athlon, AMD Opteron etc. un numar nsemnat de arhitecturi menite sa adreseze de la constrngeri specice: Exista spre exemplu cele pentru platforme integrate (embedded systems): ARM, MIPS, sau alte platforme de calcul intensiv: Alpha, PowerPC etc. Pentru arhitecturi diferite poate varia numarul de bit , i pe care sunt efectuate operat , iile de registre aate la dispozit sau numarul ia procesorului. Astfel nu putem compara viteza , unui procesor i386 cu un procesor PowerPC folosind frecvent , a.

7.2.3

Ierarhia de memorie

n mod ierarhic. Fiecare n arhitectura unui calculator modern, memoria este organizata , ime de banda mai mare, dimensiune mai mica s mai nivel din ierarhie are o lat , i latent ,a a dect nivelul inferior. Dupa cum se observa n gura 7.3 cele 4 niveluri principale scazut sunt: registrele procesorului, memoria cache, memoria RAM s , i hard disk-ul.

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

189

Figura 7.3: Ierarhia de memorie Registrele procesorului registrele procesorului care au cea mai mare viteza n vrful ierarhiei de memorii se aa de acces, de obicei un ciclu de CPU, dar dimensiunea de cteva sute de bytes. Ele sunt folosite pentru a stoca datele care sunt prelucrate de catre procesor la momentul curent.

Memoria cache ntre memoria RAM s Din cauza diferent , ei mari de viteza , i procesor, se foloses , te un dar mai scumpa s nivel intermediar de memorie: mai rapida , i de dimensiunea mai Aceasta memorie poarta numele de memorie cache s pentru mica. , i este folosita ret inerea anumitor informat ii din memoria RAM. , , s Memoria cache foloses Aceasta , te conceptul de localizare temporala , i spat , iala. ca n momentul n care procesorul dores acceseze o zona de memorie, nseamna , te sa mai nti va compara adresa acesteia cu adresele zonelor de memorie care au fost n acel moment. Daca descopera ca aceasta zona exista n copiate deja n cache pna direct de acolo. n caz contrar, zona de memorie dorita va cache, ea va accesata n cache pentru a putea refolosita n momentele apropiate. Cnd cache-ul se copiata 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. trei tipuri de memorie cache: L1, L2 s Exista , i L3. n procesor, de Memoria cache L1, sau de nivel 1, este o memorie ncorporata dar foarte rapida, ind folosita pentru a accesa date importante dimensiune foarte mica n ctiva cicli de CPU s s procesor. Poate accesata , i frecvent folosite de catre , i are dimensiunea de zeci de KB. Memoria cache L1 este de obicei de tipul SRAM (Static ca nu necesita refresh pentru a ment RAM), ceea ce nseamna , ine datele. s pentru a stoca date Memoria cache L2 mai este numita , i cache secundar, ind folosita procesorului dar se tinde spre ncorporarea ei n folosite recent. De obicei este externa

190

INTRODUCERE N SISTEME DE OPERARE

ca buffer pentru datele s a preluate procesor. Poate folosita , i instruct , iunile ce urmeaza 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. care coopereaza cu memoria cache L1 Memoria cache L3 este o memorie specializata at , i performant s , i L2 pentru a mbunat , ele sistemului. Are dimensiunea mai mare dect este mai mare dect memoriile L1 s i L2, ind de ordinul MB. Des , , i latent , a introdusa dect n cazul memoriei RAM. pentru L1 s , i L2, accesarea ei este mai rapida

Memoria RAM Cnd ne referim la memoria unui sistem de calcul ne vom referi, de obicei, la memoria pentru a stoca datele s RAM (Random Access Memory ). Aceasta este folosita , i codul unui proces. n momentul n care se dores , te efectuarea unui calcul sau decodicarea unei instruct iuni, se face un apel la memorie pentru citirea acelei informat , , ii. este de tipul DRAM (Dynamic RAM). Tipul cel n zilele noastre, memoria RAM folosita mai recent este DDR3. Caracteristicile importante ale unui modul de memorie RAM sunt:

frecvent, a de lucru: de ordinul MHz timpul de acces: de ordinul nanosecundelor


n GB/s rata de transfer: masurat a

capacitatea: actualmente de ordinul GB

Hard disk-ul Probabil cel mai important dispozitiv periferic al sistemului este hard-disk-ul (HDD hard disk drive). Acesta este folosit, de obicei, ca suport zic pentru sistemele de s , iere. dispozitive de stocare permanenta (nepersistenta) a datelor. Hard-disk-urile reprezinta un hard-disk sunt: Parametrii important , i care caracterizeaza

capacitatea acestuia: n ziua de azi de ordinul sutelor de GB sau ordinul TB;


n RPM Rotations Per Minute): cu valori tipice de 5400 RPM, viteza (masurat a 7200 RPM, 10000 RPM; dimensiunea buffer-ului (un cache folosit pentru marirea vitezei): cu valori de ordinul MB. un set de interfet Exista ,e s , i magistrale prin care un hard-disk poate accesat. Dintre acestea amintim ATA, Serial ATA, SCSI, SAS etc. Fiecare dintre aceste magistrale ofera distincta de conectare a hard-disk-ului la placa de baza s o interfat ,a , i un alt protocol de comunicare cu hard-disk-ul pentru accesarea informat , iilor de pe acesta. Un hard disk cont , ine unul sau mai multe discuri neexibile de metal numite platane. n , ita n piste care sunt cercuri concentrice pe cazul unui disc formatat, suprafat , a este mpart ecare parte a platanelor. Pistele egal distantat , e de ax de pe ecare parte a platanului

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

191

este mpart , ita n sectoare s , i de pe toate platanele, sunt grupate n cilindri. Fiecare pista de cte 512 bit , i ecare.

Figura 7.4: Structura unui hard-disk

7.2.4

interconectarea componentelor Placa de baza;

al carei (mainboard, motherboard ) este componenta zica Placa de baza rol este , ii celorlalte componente zice. n mod tipic, o placa de baza asigurarea conectivitat are locuri (sloturi, socket-uri ) pentru celelalte componente: procesor, memorie, placa video etc. cum se observa s cont nuclee de Dupa , i n gura 7.5, placa de baza , ine doua interconectare denumite chipset-uri. Acestea sunt northbridge s As , i southbridge. ,a s cum rezulta i din denumirea lor, northbridge -ul se a a n partea de sus a pl acii de baz a , o conexiune a northbridge cu southbridge-ul. iar southbridge-ul n partea de jos. Exista Northbridge-ul mai este numit s , i Memory Controller Hub (MCH) s , i este folosit pentru a conecta componentele rapide ale unui sistem de calcul:

Procesorul Memoria RAM Placa video (prin PCI Express sau AGP)
tipul de procesor, cantitatea, viteza s Northbridge-ul dicteaza , i tipul de memorie RAM care poate folosita.

192

INTRODUCERE N SISTEME DE OPERARE

Southbridge-ul mai este numit s , i I/O Controller Hub (ICH) s , i este folosit pentru interconectarea componentelor mai lente ale sistemului. Cont urmatoarele , ine componente s , i magistrale: PCI pentru legatura Magistrala cu placile PCI LPC pentru legatura mouse, port paralel, port Magistrala cu Super I/O (tastatura, serial, controler de oppy) SPI pentru legatura Magistrala cu dispozitive de stocare de tip ash SM pentru legatura Magistrala cu alte dispozitive de pe placa de baza (senzori de s temperatura , i ventilator)

Controler DMA Controler de ntreruperi Dispozitivele de stocare (IDE, SATA) Real Time Clock (RTC) USB Ethernet (Interfat, a de ret, ea) Interfat, a audio Memorie BIOS

7.2.5

Dispozitive periferice; magistrale

comunicat Dispozitivele periferice ale sistemului asigura , ia acestuia cu exteriorul. prin intermediul unor conectori Conectarea acestor dispozitive periferice se realizeaza Aces (n cazul unor n placa de baza. ti conectori sunt oferit i e direct de placa de baza , , incorporate), e de o placa specializata conectata pe placa de baza (placa video, placi placa de ret ea etc.) , n placa de baza se realizeaza prin intermediul unor sloturi Conexiunea diverselor placi s , i a unor magistrale dedicate: PCI, AGP, USB etc. Magistrale importante ale sistemului sunt: procesorul de northbridge FSB Front Side Bus: conecteaza memoria cache de procesor Back Side Bus conecteaza

PCI Peripheral Component Interconnection AGP Advanced Graphics Port PCI Express USB Universal Serial Bus

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

193

de baza Figura 7.5: Diagrama bloc a placii

7.3

Suportul pentru dispozitive la nivelul kernel-ului

accesul aplicat Nucleul sistemului de operare este cel care intermediaza , iilor la hardware. poata utilizat, nucleul trebuie sa s comunice cu Pentru ca hardware-ul sa tie cum sa , suport de comunicat acesta. Nucleul ofera , ie cu dispozitivele sistemului prin intermediul driver-elor.

194

INTRODUCERE N SISTEME DE OPERARE

un set de rutine care se executa la nivelul nucleului s Driver-ul reprezinta , i care permit accesul la un anumit dispozitiv. Dispozitivele pe care le poate utiliza o aplicat , ie pot dispozitive zice reale sau pot comportamentul unui dispozitiv hardware). n Linux, dispozitive virtuale (care simuleaza suportul pentru dispozitive poate inclus n kernel (n momentul compilarii) sau poate disponibil prin intermediul modulelor, module care pot ncarcate la cerere de catre sistem. n prezent, majoritatea distribut , iilor cont , in kernel-uri compilate cu suport generic pentru unele dispozitive mai des ntlnite, iar suportul pentru anumite dispozitive este disponibil dispozitivele aferente sunt prezente. prin module. Modulele sunt ncarcate doar daca

7.3.1

Listarea modulelor ncarcate la un moment dat n sistem

comanda lsmod: Pentru a lista modulele ncarcate la un moment dat se utilizeaza


1 2 3 4 5 6 7 8 9 10 11

ubuntu@ubuntu:~$ lsmod Module rfcomm l2cap bluetooth lp cpufreq_userspace cpufreq_powersave cpufreq_ondemand freq_table [...]

Size 40856 25728 55908 12452 5408 2688 9228 5792

Used by 0 5 rfcomm 4 rfcomm,l2cap 0 0 0 0 2 cpufreq_stats,cpufreq_ondemand

pentru ecare modul n parte, pe coloane: Comanda as , eaza

numele; spat, iul de memorie ocupat de acel modul;


numarul s , i numele modulele care depind de el. Acelas , i lucru se poate aa prin intermediul sistemului de s , iere virtual /proc. Fis , ierul /proc/modules cont, ine lista modulelor ncarcate la un moment dat.
1 2 3 4 5 6 7 8 9 10 11

ubuntu@ubuntu:~$ cat /proc/modules rfcomm 40856 0 - Live 0xe0bbb000 l2cap 25728 5 rfcomm, Live 0xe0b47000 bluetooth 55908 4 rfcomm,l2cap, Live 0xe0b51000 lp 12452 0 - Live 0xe0b39000 cpufreq_userspace 5408 0 - Live 0xe0b31000 cpufreq_stats 7360 0 - Live 0xe0b2e000 cpufreq_powersave 2688 0 - Live 0xe0859000 cpufreq_ondemand 9228 0 - Live 0xe0aee000 freq_table 5792 2 cpufreq_stats,cpufreq_ondemand, Live 0xe0b27000 [...]

Modulele disponibile n sistem se gasesc n /lib/modules/<versiune_kernel>. Modulele incluse n nucleul distribut se gasesc n , iei /lib/modules/<versiune_kernel>/kernel. n acest director ele sunt

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

195

astfel directoarele arch organizate n funct , ie de categoria din care fac parte exista (module pentru arhitectura curenta), crypto (criptograe), drivers (driver-e diferite funct dispozitive), fs (sisteme de s , iere), lib (module care implementeaza , ii n kernel), net (ret , ea), security (securitate), sound (sunet):
1 2

root@ubuntu:~# ls /lib/modules/2.6.18-4-686/kernel/ arch crypto drivers fs lib net sound

utiliznd comanda: Versiunea de kernel poate aata


1 2

ubuntu@ubuntu:~$ uname -r 2.6.20-15-generic

cum s-a observat s dependent Dupa , i din ies , irea comenzii lsmod, ntre module exista , e. Aceste dependent , e sunt descrise n /lib/modules/<versiune_kernel>/modules.dep acest s , ier este generat automat la rularea comenzii depmod.

7.3.2

ncarcarea unui modul

nainte de a prezenta modul n care un modul este ncarcat n nucleu, trebuie ment , ionat n distribut automat n funct ca , iile moderne Linux modulele se ncarca , ie de dispozitivele hardware prezente n sistem. a unui modul se poate realiza folosind comanda insmod sau ncarcarea manuala comanda modprobe. Comanda insmod primes s , te ca argument calea catre , ierul , te modulul. Acest lucru o face destul de dicila de folosit. Un exemplu de unde se gases utilizare este dat mai jos (se presupune ca modulul ce se dores nu este , te a ncarcat deja ncarcat).
1 2 3 4

root@ubuntu:~# insmod ./drivers/input/misc/pcspkr.ko root@ubuntu:~# lsmod | grep pcsp pcspkr 4224 0

echivalenta comenzii insmod utilizate mai sus dar care ncarca s O comanda ,i exista) este modprobe <nume_modul>: dependent , ele unui modul (daca
1

root@ubuntu:~# modprobe pcspkr

Pentru a congura modprobe se poate utiliza s , ierul /etc/modprobe.conf sau directorul /etc/modprobe.d.

7.3.3

Descarcarea unui modul din kernel

Pentru descarcarea unui modul din kernel se poate utiliza comanda rmmod sau modulul pcspkr, cu comanda modprobe -r. Comenzile urmatoare descarca la utilizarea lui modprobe, se ncearca s observat modulelor de , ia ca, , i descarcarea exista s care pcspkr depinde (daca , i nu depind s , i alte module de ele).
1 2 3

root@ubuntu:~# rmmod pcspkr root@ubuntu:~# modprobe -r pcspkr

196

INTRODUCERE N SISTEME DE OPERARE Tabelul 7.1: Ierarhia din /sys

Director

Cont , inut modul zic de conectare Subdirectoarele care reecta 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 rmware Informat , ii despre sistemele de s , iere Informat , ii despre kernel Subdirectoare pentru ecare modul n parte Informat , ii despre consumul de curent

/sys/devices /sys/bus /sys/class /sys/block /sys/firmware /sys/fs /sys/kernel /sys/module /sys/power

7.4

Analiza hardware a unui sistem (magistrale, chipset, CPU, memorie, dispozitive)


Lista hardware /sys

7.4.1

Folosind sistemul de s , iere virtual (sysfs) montat de kernel n /sys, se pot obt , ine informat , ii despre dispozitivele hardware aate n system. /sys este populat de kernel cu informat la un moment dat. Dispozitivele hardware , ii provenite de la driver-ele ncarcate as , ate n acest director sunt cele care au fost detectate de kernel s , i care sunt utilizabile cont de acesta. Tabelul 7.1 prezinta , inutul directoarelor din /sys.

7.4.2

Comenzi pentru as , area dispozitivelor

Informat , ii despre dispozitivele din sistem s , i starea acestora pot aate 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 comanda Pentru a as , a magistralele s , i dispozitivele USB prezente n sistem se utilizeaza lsusb:
1 2 3

ubuntu@ubuntu:~$ lsusb Bus 002 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000

Informat s , ii despre magistrala USB se regasesc , i n /sys/bus/usb/. Subdirectorul dispozitivele sub forma de legaturi devices prezinta simbolice catre directoare din /sys/devices. Subdirectorul drivers din /sys/bus/usb/ cont, ine informat, ii despre driver-ele utilizate.

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

197

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

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 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

ubuntu@ubuntu:~$ ls -lR /sys/bus/usb/drivers/ | grep module lrwxrwxrwx 1 root root 0 module -> ../../../../module/usbcore lrwxrwxrwx 1 root root 0 module -> ../../../../module/usbcore lrwxrwxrwx 1 root root 0 module -> ../../../../module/usbcore

listeaza recursiv directoarele din /sys/bus/usb/drivers, cautnd Ultima comanda liniile care cont in referint e la s iere cu numele module. Se observ a astfel c a modulul , , , utilizat este usbcore (datele s , i orele s , ierelor au fost eliminate din ies , irea comenzii).

Dispozitive PCI Dispozitivele de pe magistrala PCI se pot aa utiliznd comanda lspci:


1 2 3 4 5 6 7 8 9 10 11

ubuntu@ubuntu:~$ lspci 00:00.0 Host bridge: Intel Corporation 82865G/PE/P DRAM Controller/HostHub Interface (rev 02) 00:01.0 PCI bridge: Intel Corporation 82865G/PE/P PCI to AGP Controller (rev 02) 00:1d.0 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1 (rev 02) 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev c2) 00:1f.0 ISA bridge: Intel Corporation 82801EB/ER (ICH5/ICH5R) LPC Interface Bridge (rev 02) [...]

Similar magistralei USB, se pot determina s directoarele din /sys asociate ,i modul n care se pot aa modulele dispozitivelor PCI. Comanda urmatoare prezinta ca n cazul dispozitivelor USB utilizate de dispozitivele PCI, folosind aceeas , i procedura (datele s i orele s ierelor au fost eliminate din ies irea comenzii). , , ,
1 2 3 4 5 6

ubuntu@ubuntu:~$ ls -lR /sys/bus/pci/drivers/ | grep module lrwxrwxrwx 1 root root 0 module -> ../../../../module/snd_intel8x0 lrwxrwxrwx 1 root root 0 module -> ../../../../module/intel_agp lrwxrwxrwx 1 root root 0 module -> ../../../../module/ata_generic lrwxrwxrwx 1 root root 0 module -> ../../../../module/ata_piix [...]

198 Sistemul ACPI

INTRODUCERE N SISTEME DE OPERARE

Sistemele moderne au implementat sistemul ACPI1 (Advanced Conguration and Power Interface) pentru congurarea unor dispozitive s , i managementul consumului de curent. n /proc/acpi. Fis , ierele virtuale ale acestui sistem se aa printre altele, informat Spre exemplu, sistemul ACPI ofera, , ii despre:

procesoarele din sistem /proc/acpi/processor ventilatoarele din sistem /proc/acpi/fan bateriile din sistem /proc/acpi/battery
/proc/acpi/thermal_zone senzorii de temperatura

hwinfo n hwinfo este o aplicat, ie pentru detect, ia hardware-ului. Comanda hwinfo as , eaza mod implicit toate informat , iile despre dispozitivele detectate la un nivel foarte detaliat. se foloses Pentru o listare mai succinta comanda: , te urmatoarea
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

ubuntu@ubuntu:~$ hwinfo --short cpu: Intel(R) Pentium(R) Dual CPU T2390 @ 1.86GHz, 800 MHz Intel(R) Pentium(R) Dual CPU T2390 @ 1.86GHz, 1600 MHz keyboard: /dev/input/event4 AT Translated Set 2 keyboard mouse: /dev/input/mice Macintosh mouse button emulation /dev/input/mice SynPS/2 Synaptics TouchPad printer: /dev/usb/lp0 Samsung ML-1640 Series graphics card: Intel Mobile GM965/GL960 Integrated Graphics Controller Intel 965 GM sound: Intel 82801H (ICH8 Family) HD Audio Controller storage: Intel 82801HBM/HEM (ICH8M/ICH8M-E) SATA IDE Controller Intel 82801HBM/HEM (ICH8M/ICH8M-E) IDE Controller network: wlan0 Intel PRO/Wireless 3945ABG Network Connection eth0 Realtek RTL8101E PCI Express Fast Ethernet controller network interface: pan0 Ethernet network interface wlan0 WLAN network interface wmaster0 Network Interface eth0 Ethernet network interface
1

ACPI http://www.acpi.info/

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI


33 34 35 36

199

lo disk: /dev/sda [...]

Loopback network interface WDC WD2500BEVS-2

componenta, se foloses Pentru a obt detalii despre o anumita numele , ine , te componentei ca argument al comenzii. De exemplu, pentru procesor se foloses , te urmatoarea comanda:
1 2 3 4 5 6 7 8 9 10

11 12 13 14 15

ubuntu@ubuntu:~$ hwinfo --cpu 01: None 00.0: 10103 CPU [Created at cpu.304] Unique ID: rdCR.j8NaKXDZtZ6 Hardware Class: cpu Arch: Intel Vendor: "GenuineIntel" Model: 6.15.13 "Intel(R) Pentium(R) Dual CPU T2390 @ 1.86GHz" Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36, clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,nx,lm,constant_tsc, arch_perfmon,pebs,bts,pni,dtes64,monitor,ds_cpl,est,tm2,ssse3,cx16,xtpr, pdcm,lahf_lm Clock: 1866 MHz BogoMips: 3724.63 Cache: 1024 kb Units/Processor: 2 Config Status: cfg=new, avail=yes, need=no, active=unknown

7.4.3
Senzori

dispozitivelor hardware Monitorizarea starii

sursa de informat O alta , ii despre hardware-ul prezent ntr-un sistem o reprezinta senzorii. Aces , ti senzori pot oferi informat , ii despre viteza ventilatoarelor, voltaje s ,i ind folosite pentru a monitoriza starea sistemului. temperatura, informat Pachetul lm-sensors include programul sensors care as , eaza , ii citite de la aces , tia. instalarea pachetului trebuie rulata comanda sensors-detect care va detecta Dupa ce congurarea senzorii prezent Dupa , i n sistem s , i va indica ce module trebuie ncarcate. cu succes, poate utilizata comanda sensors. se realizeaza
1 2 3 4 5 6 7 8 9 10 11 12

ubuntu@ubuntu:~$ sensors smsc47m192-i2c-0-2d Adapter: SMBus I801 adapter +2.5V: +2.60 V (min = VCore: +1.42 V (min = +3.3V: +3.13 V (min = +5V: +5.16 V (min = [...] smsc47m1-isa-0800 Adapter: ISA adapter fan1: 2792 RPM (min = fan2: 2118 RPM (min =

at 1400 +0.00 V, +0.00 V, +0.00 V, +0.00 V,

max max max max

= = = =

+3.32 +2.99 +4.38 +6.64

V) V) V) V)

640 RPM, div = 8) 640 RPM, div = 8)

200 Pachetul de utilitare smartmontools

INTRODUCERE N SISTEME DE OPERARE

Pachetul smartmontools pune la dispozit programe pentru monitorizarea , ie hard-disk-urilor utiliznd tehnologia S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology). n unele sisteme, trebuie activat suportul congurare n setul de opt S.M.A.R.T. n BIOS (unele BIOS-uri au aceasta , iuni avansate). Tehnologia permite monitorizarea indicatorilor de stare a hard-disk-urilor n posibilelor caderi. scopul anticiparii programe: n pachet se gasesc doua S.M.A.R.T. la un moment dat; smartctl pentru analiza starii smartd un daemon pentru monitorizarea permanenta. Pentru a verica starea la un moment dat pentru primul hard-disk, se poate utiliza comanda:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

root@ubuntu:~# smartctl --all /dev/sda smartctl version 5.37 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF INFORMATION SECTION === Model Family: Seagate Barracuda 7200.7 and 7200.7 Plus family Device Model: ST3120827AS Serial Number: 4MS03F43 Firmware Version: 3.42 User Capacity: 120,033,041,920 bytes [...] SMART Attributes Data Structure revision number: 10 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 062 049 006 16 3 Spin_Up_Time 0x0003 098 096 000 0 4 Start_Stop_Count 0x0032 100 100 020 659 [...]

TYPE Pre-fail Pre-fail Old_age

UPDATED Always Always Always

teste lungi s SMART are s Exista , i suport pentru execut , ia de teste asupra discului. ,i teste scurte. Execut ia unui test poate urm arit a n timp real dar poate s i programat a. , , Rezultatele testului se pot aa n ies , irea comenzii smartctl -all /dev/sda. Un test scurt poate programat utiliznd comanda:
1 2 3 4 5 6 7 8 9

root@ubuntu:~# smartctl --test=short /dev/sda smartctl version 5.37 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION === Sending command: "Execute SMART Short self-test routine immediately in off-line mode". Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI


10 11 12 13 14

201

Testing has begun. Please wait 1 minutes for test to complete. Test will complete after Thu Sep 13 10:34:15 2007 Use smartctl -X to abort test.

rulare a comenzii smartctl -all /dev/sda ca apar la Se poate observa la o noua s-a terminat), precum n exemplul de mai jos. ies , ire s , i rezultatele testului (daca
1 2 3 4 5 6 7 8 9 10

root@ubuntu:~# smartctl --all /dev/sda smartctl version 5.37 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF INFORMATION SECTION === [...] === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED [...]

testul scurt mai exista s Pe lnga , i alte teste (spre exemplu un test lung s , i un test ofine). Mai multe exemple de folosire a lui smartctl se pot aa din man smartctl s ,i din smartctl -h. hard-disk-urile s acestora Daemon-ul smartd monitorizeaza , i permite nregistrarea starii discurile la s prin intermediul syslog. n mod implicit verica , i a defectelor aparute ecare 30 minute. Daemon-ul se poate congura prin intermediul s , ierului /etc/smartd.conf. Pentru lucrul cu daemoni se poate consulta capitolul 5.

7.5

Interfat , a cu dispozitivele din userspace udev s ,i

/dev
cte un s n Linux exista , ier pentru ecare 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 suport pentru arbitrare la aparit ia sau la disparit ia dispozitivelor din sistem. udev ofera , , ca poate congurat sa nume persistente pentru dispozitive, ceea ce nseamna ntotdeauna acelas foloseasca , i nume pentru s , ierul asociat unui anumit dispozitiv (n implementarile mai vechi pentru /dev, la reintroducerea n sistem a unor dispozitive, acestea puteau primi nume diferite comparativ cu introducerea anterioara). de la kernel atunci cnd apar sau dispar dispozitive. Astfel, spre udev primes , te noticari udev ca a aparut exemplu, la conectarea unui USB stick n calculator, kernel-ul notica udev poate, spre un nou dispozitiv de stocare. n funct , ie de schema de nume utilizata, aleaga drept nume de dispozitiv urmatorul numele exemplu, sa nume disponibil dupa dispozitivul asociat hard-disk-ului este hard-disk-ul prezent n sistem (presupunnd ca ce este ales un nume de dispozitiv, /dev/sda, udev alege ca nume /dev/sdb). Dupa monteze sistemul de s se poate executa un program care, n cazul prezentat aici, sa , iere anumite de pe USB stick ntr-un subdirector din /media. Tot n funct , ie de congurari, aiba s dispozitive pot sa ierele asociate puse ntr-un subdirector separat din /dev. ,

202

INTRODUCERE N SISTEME DE OPERARE Tabelul 7.2: Convent , ia de nume pentru dispozitive n Linux Dispozitiv Floppy-disk Hard-disk IDE Imprimanta Hard-disk SATA (SCSI) Terminal zic memoria RAM Dispozitiv care reprezinta Dispozitiv utilizat pentru montarea s , ierelor precum dispozitivele reale

Nume

fd hd lp sd tty ram loop

execut Pe lnga , ia de programe, udev mai permite modicarea permisiunilor pentru s Astfel se poate congura, spre exemplu, ca pentru orice , ierele din /dev create. apart grupului cu numele scanner. n scanner introdus n sistem, s , ierul creat sa , ina acest fel, numai utilizatorii care fac parte din acest grup vor putea lucra cu acest s , ier s ,i un utilizator poate sa e membru al mai implicit cu scanner-ul. Trebuie amintit faptul ca multor grupuri. Congurarile pentru udev se gasesc n /etc/udev/rules.d. Acest director cont , ine s iere care descriu modul n care, n funct ie de dispozitiv, se formeaz a numele , , programe. De obicei acest dispozitivelor, se dau permisiuni s , ierelor sau se executa editarea director cont ine congur ari aplicabile n orice situat ie s , , , i nu se recomanda s , ierelor din el.

7.6

Lucrul cu dispozitive (/dev)

udev se ocupa s S-a ment , ionat anterior ca , i de stabilirea permisiunilor pentru anumite se gaseasc n grupul din care face s dispozitive. Un utilizator trebuie sa a , ierul dispozitivului pentru a putea utiliza dispozitivul (prin intermediul s , ierului, binent , eles). cteva nume asociate n mod normal cu dispozitivele ntr-un mediu Tabelul 7.2 prezinta de obicei numele sunt urmate de un numar sau o litera, Linux. Trebuie ment , ionat ca al ctelea dispozitiv de acel tip este n sistem. Spre exemplu, doua unitat ,i care indica vor numite /dev/fd0 s hard-disk-uri vor numite de discheta , i /dev/fd1, iar doua /dev/sda s , i /dev/sdb. cont Comanda urmatoare prezinta , inutul tipic pentru /dev:
1 2 3 4 5 6 7 8 9 10 11 12 13

ubuntu@ubuntu:~$ ls -l total 0 lrwxrwxrwx 1 root root lrwxrwxrwx 1 root root lrwxrwxrwx 1 root root drwxr-xr-x 3 root root drwxr-xr-x 2 root root lrwxrwxrwx 1 root root lrwxrwxrwx 1 root root [...] drwxr-xr-x 2 root root lrwxrwxrwx 1 root root lrwxrwxrwx 1 root root

/dev/ 10 12 11 0 0 17 17 2007-08-31 2007-08-31 2007-08-31 2007-08-31 2007-08-31 2007-08-31 2007-08-31 14:48 14:48 14:48 14:48 14:48 14:48 14:48 adsp -> sound/adsp agpgart -> misc/agpgart audio -> sound/audio bus cd cdrom -> /dev/cd/cdrom-sr0 cdrom0-> /dev/cd/cdrom-sr0

0 2007-08-31 14:48 loop 6 2007-08-31 14:48 loop0 -> loop/0 6 2007-08-31 14:48 loop1 -> loop/1

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI


14 15 16 17 18 19 20 21 22 23

203

crw-r----lrwxrwxrwx crw-rw-rw[...] crw-rw-rwbrw-rw---brw-rw---brw-rw---brw-rw---[...]

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

7.6.1

Tipuri de dispozitive

, ile ei: n Linux, dispozitivele se mpart n 2 categorii, ecare categorie avnd particularitat

dispozitive caracter dispozitive bloc


litera care apare pe prima coloana n ies Dispozitivele pot diferent , iate dupa , irea care indica tipul s comenzii ls -l, coloana ierului. n lista de mai sus s ierele care au , , dispozitive de tip caracter iar s dispozitive de tip tipul c indica , ierele cu tipul b indica bloc. Cteva dispozitive sunt generate de kernel s Aceste , i au un comportament aparte. 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 uxuri de date, precum:

terminalul /dev/tty0, /dev/tty1 porturile seriale /dev/ttyS0, /dev/ttyS1 dispozitivele audio /dev/sequencer, /dev/mixer, /dev/midi

Dispozitivele bloc cu datele la nivel de bloc Dispozitivele bloc corespund dispozitivelor care lucreaza (scriu, citesc, s terg blocuri de date). , n acest fel sunt dispozitivele de stocare: Dispozitivele care funct , ioneaza , i CD-ROM/DVD-ROM etc.) /dev/sda, /dev/sda1, zice (hard disk-uri, unitat /dev/hda

virtuale (dispozitivele loop) /dev/loop0

204

INTRODUCERE N SISTEME DE OPERARE

asociate zonelor de memorie /dev/ram0

Pseudo-dispozitive o serie de dispozitive prezente n /dev care nu corespund unor componente Exista hardware. Acestea sunt echivalente unor dispozitive virtuale care implementeaza comportamentul dispozitivelor normale de tip caracter. Cele mai cunoscute sunt:

/dev/null s , ier n care se poate scrie orice s , i totul este pierdut de obicei ies irile standard sau de eroare ale programelor sunt redirectate catre /dev/null ,
pentru a suprima as mesaj; , area oricarui

/dev/zero s , ier din care se poate citi la innit octetul cu valoarea 0 de


obicei este folosit pentru a suprascrie zone de memorie/disc cu zerouri sau pentru a umple s , iere;

/dev/urandom s , ier din care se pot citi la innit octet , i cu valori aleatoare
utilizat de obicei pentru a scrie s , iere sau zone de pe disc cu date aleatoare. Cteva exemple de utilizare sunt prezentate mai jos. Suprimarea ies , irii standard pentru un program:
1

ubuntu@ubuntu:~$ ./program > /dev/null

Suprimarea ies , irii de eroare pentru un program (mesajele de eroare se pierd):


1

ubuntu@ubuntu:~$ ./program 2>/dev/null

Suprimarea ambelor ies , iri (standard s , i eroare) pentru un program:


1

ubuntu@ubuntu:~$ ./program 2>&1 >/dev/null

Suprascrierea primei partit , ii de pe primul hard-disk cu zerouri:


1

root@ubuntu:~# dd if=/dev/zero of=/dev/sda1

Suprascrierea primului hard-disk cu date aleatoare:


1

root@ubuntu:~# dd if=/dev/urandom of=/dev/sda

7.6.2

ntreruperi hardware

O ntrerupere (IRQ interrupt request ) este un semnal trimis de un dispozitiv catre trebuie sa-s , i opreasca activitatea pentru a procesa un procesor pentru a-l anunt , a ca eveniment extern, cum ar apasarea unei taste. Pe platforma x86 sunt 16 IRQ-uri numerotate de la 0 la 15. Pe calculatoarele moderne pot exista mai mult de 16 ntreruperi. Unele ntreruperi sunt rezervate pentru dispozitive ntreruperile specice, cum ar tastatura, iar altele pot reasignate. n tabelul 7.3 se aa s i semnicat ia lor pentru platforma x86: , ,

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI Tabelul 7.3: Semnicat , ia ntreruperilor Semnicat , ie 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

205

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

n cadrul sistemului de operare Linux, semnicat , ia ntreruperilor poate vizualizata folosind urmatoarea comanda:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

ubuntu@ubuntu:~$ CPU0 0: 130 1: 277 6: 5 7: 0 8: 3 9: 0 12: 1485 14: 0 15: 13885 16: 4426 17: 43084 NMI: 0 LOC: 254957 ERR: 0 MIS: 0

cat /proc/interrupts IO-APIC-edge IO-APIC-edge IO-APIC-edge IO-APIC-edge IO-APIC-edge IO-APIC-fasteoi IO-APIC-edge IO-APIC-edge IO-APIC-edge IO-APIC-fasteoi IO-APIC-fasteoi timer i8042 floppy parport0 rtc acpi i8042 libata libata eth1 ioc0

pentru ecare ntrerupere este as n comanda anterioara, , at driver-ul care o foloses , te.

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 n tabelul 7.4 se poate , i diversele dispozitive zice. observa corespondent a ntre denumirea dispozitivului pe Linux s , , i pe Windows s , i adresa I/O asociata: n Linux se pot verica adresele I/O folosind urmatoarea comanda:

206

INTRODUCERE N SISTEME DE OPERARE Tabelul 7.4: Adresele I/O ale dispozitivelor Denumire Linux Denumire Windows IRQ asociat Adresa I/O

/dev/ttyS0 /dev/ttyS1 /dev/ttyS2 /dev/ttyS3 /dev/lp0 /dev/lp1

COM1 COM2 COM3 COM4 LPT1 LPT2

4 3 4 3 7 5

0x03f8 0x02f8 0x03e8 0x02e8 0x0378-0x037f 0x0278-0x027f

1 2 3 4 5 6 7 8 9 10 11

ubuntu@ubuntu:~$ cat /proc/ioports 0000-001f : dma1 0020-0021 : pic1 0040-0043 : timer0 0050-0053 : timer1 0060-006f : keyboard 0070-0077 : rtc 0080-008f : dma page reg 00a0-00a1 : pic2 00c0-00df : dma2 00f0-00ff : fpu

7.6.4

Adrese DMA

la adresarea directa a memoriei s DMA (Direct Memory Access) se refera , i este o la adresele I/O. DMA face posibil transferul datelor ntre dispozitive s alternativa ,i a ajutorul procesorului. Acest lucru duce la mbunat at , irea performant memorie far elor , sistemului deoarece procesorul nu mai este ocupat cu operat ii I/O. , acest concept folosind canale DMA, cte unul pentru Arhitectura x86 implementeaza va as ecare dispozitiv. Urmatoarea comanda , a ce canale DMA sunt folosite de sistem:
1 2 3

ubuntu@ubuntu:~$ cat /proc/dma 2: floppy 4: cascade

7.6.5

Manipularea datelor la nivel scazut (comanda dd)

Pentru a lucra cu datele la nivel de octet sistemele de operare de tip Unix pun la comanda poate utilizata pentru a manevra date de dispozit , ie comanda dd. Aceasta pe faptul ca datele sunt transferate de la o sursa la o orice dimensiune. Se bazeaza destinat , ie, eventual cu simple transformari. Comanda primes , te sursa s , i destinat , ia sub forma a doi parametri: lipses sursa: if=<fis , ier_intrare> (daca , te acest parametru se presupune sursa este intrarea standard) ca

destinat , ia:

lipses of=<fis (daca acest parametru se , ier_ies , ire> , te destinat presupune ca ia este ies irea standard) , ,

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

207

dispozitive bloc sau Fis , ierele pot att s , iere normale ct s , i s , iere care reprezinta dispozitive caracter. Astfel, o utilizare foarte simpla a comenzii dd este urmatoarea:
1

ubuntu@ubuntu:~$ dd if=/dev/zero of="myfile"

de la intrare la ies cnd apare o eroare, din Comanda de mai sus copiaza , ire octet , i pna nicio limita. n aceste condit doar moment ce nu a fost specicata , ii, comanda se termina s e limitat sau s daca , ierul sursa , ierul destinat , ie e limitat. n cazul de mai sus, sursa are iar destinat dimensiune innita ia e limitat a doar de dimensiunea spat , , iului liber disponibil pe partit , ia unde se scrie s , ierul. se utilizeaza o combinat Pentru a specica dimensiunea care se dores , te a copiata , ie a urmatorilor parametri: acest parametru numarul de blocuri: count=<num ar_blocuri> daca lipses , te copierea se opres , te doar n condit , iile prezentate mai sus

dimensiunea unui bloc: bs=<dimensiune_n_octet , i> (block size ) pot folosit ,i s , i multiplii, spre exemplu: bs=1048576, bs=1024K, bs=1M sunt toate
lipses dimensiunea implicita a echivalente; daca , te acest parametru se utilizeaza unui bloc de 512 octet , i (dimensiunile blocurilor citite s , i dimensiunile blocurilor scrise pot ajustate individual prin utilizarea parametrilor ibs s , i obs; ele sunt modicate simultan prin utilizarea parametrului bs) utilizarea comenzii dd mpreuna cu parametrii precizat Exemplele urmatoare ilustreaza ,i anterior:

copierea de 10 MB de date din 10 blocuri de 1 MB (1024K); copierea se face din /dev/zero catre /dev/null deci nu are niciun efect:
1 2 3 4

ubuntu@ubuntu:~$ dd if=/dev/zero of=/dev/null bs=1024K count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.00490124 seconds, 2.1 GB/s

se precizeaza M n loc de K: acelas , i efect ca mai sus doar ca


1 2 3 4

ubuntu@ubuntu:~$ dd if=/dev/zero of=/dev/null bs=1M count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.00509437 seconds, 2.1 GB/s

copierea de 10MB de date n blocuri de 1M la intrare s , i 128K la ies , ire:


1 2 3 4

ubuntu@ubuntu:~$ dd if=/dev/zero of=/dev/null count=10 ibs=1M obs =128K 10+0 records in 80+0 records out 10485760 bytes (10 MB) copied, 0.00622419 seconds, 1.7 GB/s

Comanda dd permite s , i pozit , ionarea n s , ierele utilizate pentru intrare s , i ies , ire:

intrare: skip=<num ar_blocuri> sare <num ar_blocuri> din s , ierul de intrare, echivalentul a <num ar_blocuri> * ibs octet, i; ies ar_blocuri> sare <num ar_blocuri> din s , ire: seek=<num , ierul de ies ire, echivalentul a <num a r_blocuri> obs octet i. , , *

208

INTRODUCERE N SISTEME DE OPERARE Tabelul 7.5: Informat , ii expuse prin intermediul lui /proc Cont , inut la init Linia care este folosita , ializarea kernel-ului, inclusiv parametrii trimis , i acestuia Informat , ii despre procesorul/procesoarele din sistem Lista dispozitivelor caracter s , i a celor bloc Statistici despre numarul de ntreruperi s ,i dispozitivele asociate ntreruperilor Informat , ii despre utilizarea memoriei Lista modulelor ncarcate la un moment dat n sistem cont comanda lsmod prezinta s , inutul , ierului ntr-un mod user-friendly Lista partit , iilor Lista dispozitivelor pe care se face swap Timpul trecut de la ultima pornire a sistemului, n cont secunde comanda uptime prezinta , inutul s , ierului ntr-un mod user-friendly la un moment dat Versiunea kernel-ului care ruleaza

Fis , ier

/proc/cmdline /proc/cpuinfo /proc/devices /proc/interrupts /proc/meminfo /proc/modules

/proc/partitions /proc/swaps /proc/uptime

/proc/version

n cazul n care se dores se Pozit , ionarea este utila , te ca de pe dispozitivul de intrare sa o anumita zona, precum un anumit sector de pe hard disk. Exemplul urmator citeasca acest lucru se sare peste primul sector s sectoare de pe hard ilustreaza , i se citesc doua disk (trebuie ment ionat c a dimensiunea unui sector pe HDD este 512 octet , , i, valoarea pentru parametrul bs): implicita
1 2 3 4

root@ubuntu:~# dd if=/dev/sda of=/dev/null skip=1 count=2 2+0 records in 2+0 records out 1024 bytes (1.0 kB) copied, 0.043731 seconds, 23.4 kB/s

7.7
7.7.1

Analiza sistemului
Informat , ii despre sistem

Prin intermediul directorului /proc, kernel-ul expune s , i o serie de informat , ii legate de s sistem. Tabelul 7.5 urmator prezinta , ierele mai importante din /proc s , i cont , inutul acestora. Cont , inutul pentru oricare din s , ierele prezentate mai sus se poate aa folosind comanda cat. De exemplu, folosind comanda cat cu argumentul /proc/cpuinfo se vor as ,a urmatoarele informat ii: ,
1 2 3 4 5 6 7

ubuntu@ubuntu:~$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 15 model name : Intel(R) Core(TM)2 Duo CPU stepping : 8

T7500

@ 2.20GHz

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI


8 9 10 11

209

cpu MHz cache size fdiv_bug [...]

: 2194.893 : 4096 KB : no

s-au obt Folosind comanda anterioara urmatoarele informat processor , inut , ii: identicatorul procesorului prezentat (pe sistemele cu un singur procesor, va reprezinta un numar care se aparea doar procesorul cu identicatorul 0), cpu family reprezinta va apenda la numarul 86 pentru a obt ine numele familiei de procesoare (n exemplul de , 686), model name reprezinta denumirea procesorului, cpu MHz reprezinta fat ,a frecvent , a procesorului iar cache size este dimensiunea memoriei cache L2. de sistem, se va as Pentru a obt , ine informat , ii despre memoria utilizata , a cont , inutul s ierului /proc/meminfo : ,
1 2 3 4 5 6 7 8 9 10 11

ubuntu@ubuntu:~$ cat /proc/meminfo MemTotal: 255676 kB MemFree: 9684 kB Buffers: 10668 kB Cached: 84448 kB SwapCached: 3004 kB Active: 179812 kB Inactive: 43268 kB SwapTotal: 401400 kB SwapFree: 360748 kB [...]

s-au as Folosind comanda anterioara informat MemTotal este , at urmatoarele , ii: de RAM, MemFree este cantitatea de RAM care nu este utilizata de cantitatea totala de buffere, Cached este cantitatea sistem, Buffers este cantitatea de RAM folosita ca memorie cache, SwapCached este cantitatea de memorie swap de RAM folosita ca memorie cache, Active este cantitatea de buffere sau memorie cache care folosita este n curs de utilizare, Inactive este cantitatea de buffere sau memorie cache care SwapTotal este cantitatea totala de swap disponibila s este libera, , i SwapFree este cantitatea de swap libera. se vor as Folosind urmatoarea comanda , a: versiunea kernelului Linux, a compilatorului

gcc s , i a distribut , iei de Linux folosite:


1 2 3

ubuntu@ubuntu:~$ cat /proc/version Linux version 2.6.24-24-generic (buildd@rothera) (gcc version 4.2.4 ( Ubuntu 4.2.4-1ubuntu3)) #1 SMP Tue Aug 18 17:04:53 UTC 2009

la un moment dat, o informat Oricare dintre aceste s , iere poate folosit pentru a gasi, , ie despre sistem. Spre exemplu, daca se dores , te aarea tipului procesorului/procesoarelor din sistem se poate utiliza comanda urmatoare:
1 2

ubuntu@ubuntu:~$ cat /proc/cpuinfo | grep "model name" model name : Intel(R) Core(TM)2 Duo CPU T7500

@ 2.20GHz

/proc expune informat Este important de ret , inut ca , ii care sunt accesibile s , i prin intermediul unor comenzi. Aceste informat ii, e c a sunt citite direct din /proc , e ca , sunt citite prin intermediul comenzilor, pot ltrate pentru a se extrage date utile pentru utilizator.

210

INTRODUCERE N SISTEME DE OPERARE

7.7.2

Kernel tunables

care permite congurarea unor parametri din kernel n timpul sysctl este o interfat, a feluri: execut , iei acestuia. Parametrii pot modicat , i n doua a s prin modicarea directa , ierelor din /proc/sys;

prin utilizarea comenzii sysctl.


precum n exemplul Primul caz presupune scrierea s , i citirea parametrilor din anumite cai, urmator:
1 2 3 4 5 6 7

root@ubuntu:~# cat /proc/sys/net/ipv4/ip_forward 0 root@ubuntu:~# echo "1" > /proc/sys/net/ipv4/ip_forward root@ubuntu:~# cat /proc/sys/net/ipv4/ip_forward 1

Comenzile de mai sus au activat rutarea pachetelor de ret , ea la nivelul kernel-ului, scriind facilitate este utila daca se 1 n /proc/sys/net/ipv4/ip_forward. Aceasta dores te ca un sistem care are acces la Internet s a permit a accesul unei ntregi subret , , ele. Folosind comanda sysctl, acelas , i lucru se obt , ine n felul urmator:
1 2 3 4 5

root@ubuntu:~# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 0 root@ubuntu:~# sysctl -w net.ipv4.ip_forward="1" net.ipv4.ip_forward = 1

ca pentru a as Se observa , a starea unui parametru se foloses , te o adresare atoare un parametru aseman cu cea a structurilor din C/C++. Comanda a doua modica prin utilizarea opt iunii --w (write). , temporare, ele ind pierdute n cazul n Modicarile prezentate anterior sunt modicari permanente, acestea se scriu care se repornes te sistemul. Pentru a efectua congurari , se dores n s /etc/sysctl.conf. Presupunnd ca dezactivarea , ierul , te (liniile care ncep cu # din s forwarding-ului, sintaxa n s , ier este destul de simpla , ier sunt comentarii):
1 2 3 4 5

ubuntu@ubuntu:~$ cat /etc/sysctl.conf [...] # Controls IP packet forwarding net.ipv4.ip_forward = 1 [...]

Fis , ierul de congurare este citit la ecare pornire a sistemului. Pentru a fort , a citirea s , ierului de congurare, se poate utiliza comanda sysctl -p:
1 2

root@ubuntu:~# sysctl -p net.ipv4.ip_forward = 1

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

211

7.8
7.8.1

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 aate 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 Linux-ul devine inaccesibil (bootloader-ul Windows-ului nu cunoas se va observa ca , te nimic despre Linux). n aceste condit , ii, pentru a prentmpina acest lucru, se realizarea unui back-up pentru MBR. Mai multe detalii despre MBR gasit , i n recomanda sect , iunea 6.2.2. cu urmatoarea Backup-ul MBR-ului de pe primul HDD se realizeaza comanda:
1 2 3 4

root@ubuntu:~# dd if=/dev/sda of=mbr.img bs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 4.8004e-05 seconds, 10.7 MB/s

s n urma execut , iei comenzii se realizeaza , ierul mbr.img de 512 octet , i cu MBR-ul. Acest s ier poate plasat ntr-un loc sigur s i accesibil n cazul n care discul devine , , inaccesibil (pe un USB stick sau CD-ROM spre exemplu). operat Pentru a restaura MBR-ul, se efectueaza , ia inversa:
1 2 3 4

root@ubuntu:~# dd if=mbr.img of=/dev/null bs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 4.622e-05 seconds, 11.1 MB/s

e partit n partit pot n MBR se poate stabili ca una dintre partit , ii sa , ie extinsa. , ia extinsa create mai multe partit ii logice, pentru o mai bun a organizare a discului. Informat , , iile despre partit , iile logice nu sunt t , inute n MBR, deoarece nu ncap n cei 512 octet , i. de lista nlant , uita n afara MBR-ului. Partit , iile logice sunt ret , inute sub forma cu schema de partit n momentul n care se lucreaza , ii de pe un hard disk, se recomanda realizarea unui backup nainte. Modicarea schemei de partit , ii nu s , terge datele de pe hard disk, doar schimba descrierea partit , iilor (locul unde se gasesc acestea). n situat , ia n care se s terge o partit ie important a (e ea logic a sau primar a), este util s a existe un , , backup al acestor informat , ii pentru recuperare. Modul de backup pentru MBR a fost descris anterior. programul Pentru a realiza backup-ul congurat , iei tuturor partit , iilor se utilizeaza la sfdisk. Acesta analizeaza att partit, iile primare ct s , i pe cele logice, dar nu se uita informat , iile din MBR care nu sunt legate de partit , ionare (precum bootloader). El este un metoda amintita mai sus de a face backup la MBR. bun complement pe lnga de partit Comanda urmatoare face backup pentru ntreaga schema , ionare folosind sfdisk s , ierul de backup este /usbstick/partitions.backup:
1

root@ubuntu:~# sfdisk -d /dev/sda > /usbstick/partitions.backup

anterior, sfdisk se utilizeaza astfel: Pentru a restaura schema de partit , ionare salvata

212

INTRODUCERE N SISTEME DE OPERARE

root@ubuntu:~# sfdisk /dev/sda < /usbstick/partitions.backup

7.8.2

Salvarea cont , inutului unui disc cu sectoare inaccesibile

situat o perioada mai lunga de utilizare, un hard disk ncepe Exista , ii cnd, de obicei dupa nu mai funct acest lucru din erorile pe care sistemul de sa , ioneze corect. Se observa operare le as eaz a cnd vrea s a citeasc a date de pe disc. n asemenea situat , , ii, cea mai metoda de backup este copierea s rapida , ierelor pe un alt disc. Acesta este cazul favorabil, cnd datele mai pot identicate s , i sistemul de operare mai funct ioneaz a. n cazul n care defectul hard disk-ului apare n zona n care este , o probabilitate destul de mare ca datele sa nu mai descris sistemul de s , iere, exista salvate prin simpla copiere a s poata ierelor. n aceast a situat ie se poate opta pentru , , repararea sistemului de s , iere utiliznd aplicat , ia fsck, dar nu se dores , te ca aceasta aiba loc pe hard disk-ul defect. nti se realizeaza o copie a tuturor datelor reparare sa imagine. de pe primul hard disk pe un alt hard disk, copie numita pentru a realiza aceasta imagine este dd, mpreuna cu parametrul Comanda utilizata nu se opreasca atunci cnd conv=noerror, parametru care i spune dd-ului sa un bloc inaccesibil. detecteaza
1

root@ubuntu:~# dd if=/dev/sda of=/dev/sdb conv=noerror

numarului Execut mare de , ia acestei comenzi poate dura foarte mult timp, datorita blocuri care trebuie citite s i scrise. Pentru a accelera execut ia comenzii, se poate mari , , dimensiunea blocului citit/scris prin intermediul parametrului bs (block size), prezentat anterior. Utilizarea unui bloc mai mare dect dimensiunea unui sector de hard disc (512 caci nu se poate octet , i) poate duce la pierderea ultimelor sectoare de pe discul sursa, realiza un bloc cu ele.

7.8.3

Crearea unei imagini de CD; montarea unei imagini

n mod aseman ator unei imagini de hard disk. O imagine de CD se creeaza crearii
1

root@ubuntu:~# dd if=/dev/hda of=cd.iso

comanda va citi CD-ul introdus n unitatea /dev/hda sector cu sector s Aceasta , i va scrie imaginea lui n s ierul cd.iso . , ntr-un director precum orice Pentru a putea utiliza imaginea, aceasta trebuie montata alt sistem de s , iere, dar cu urmatoarele observat , ii:

tipul sistemului de s , iere de pe un CD este iso9660;


s deoarece s , ierul nu este un dispozitiv real, trebuie utilizata , i opt , iunea loop.
1

root@ubuntu:~# mount -t iso9660 -o loop cd.iso /mnt/cd

comanda: Pentru a demonta imaginea, se utilizeaza


1

root@ubuntu:~# umount /mnt/cd

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

213

n acest fel pot pastrate pe disc imagini ale CD-urilor utilizate des s , i/sau pot testate imagini de CD create de diferite utilitare. se poate aplica aceeas s Trebuie ment , ionat ca , i procedura , i pentru DVD-uri, atta timp ct sistemul de s , iere este corect precizat n comanda mount (DVD-urile pot scrise n formatul UDF).

7.8.4

Utilizarea unui s , ier de pe o partit , ie FAT32 ca s , ier de swap pentru un LiveCD Linux

de multe ori ca LiveCD-urile funct greu pe sisteme care nu au multa Se observa , ioneaza ntr-un sistem instalat, memoria RAM poate ajutata s memorie RAM disponibila. , i de nicio partit prezent , a spat , iului de swap de pe hard disk. ntr-un sistem n care nu exista , ie niciun astfel de spat de swap, un LiveCD nu activeaza iu. O posibilitate o reprezint a , n sistem. S-a utilizat pentru utilizarea unui s , ier de swap, pe o partit , ie deja existenta exemplicare o partit ie FAT32, dar se poate utiliza orice tip de partit , , ie pe care Linux-ul poate scrie. sistemul de s Pentru nceput, se monteaza , iere (partit , ia a doua, primul hard disk) unde se dores , te crearea s , ierului de swap:
1

root@ubuntu:~# mount -t vfat /dev/sda2 /mnt/temp

utiliznd n acest moment se poate crea un s , ier de swap de dimensiunea dorita programul dd:
1 2 3 4

root@ubuntu:~# dd if=/dev/zero of=/mnt/temp/fisier.swap bs=1M count=256 256+0 records in 256+0 records out 268435456 bytes (268 MB) copied, 6.41171 seconds, 41.9 MB/s

S-a creat un s , ier de 256 MB (plin cu zerouri) pentru a folosit ca s , ier de swap. n de swap, printr-un proces aseman ator acest moment trebuie transformat s , ierul n zona partit formatarii iilor: ,
1

root@ubuntu:~# mkswap /mnt/temp/fisier.swap

pentru a folosit ca zona de swap. Sistemul de n acest moment, s , ierul este pregatit ae de prezent atoare operare trebuie sa , a s , ierului de swap printr-o operat , ie aseman unui sistem de s montarii iere: ,
1

root@ubuntu:~# swapon /mnt/temp/fisier.swap

execut de swap. Dupa , ia acestei comenzi sistemul foloses , te s , ierul creat mai sus ca zona

Cuvinte cheie

kernel kernel-space user-space

virtuala mas , ina

von Neumann CPU, procesor

214

INTRODUCERE N SISTEME DE OPERARE

RAM, DRAM
de baza placa

sensors smartmontools /dev udev dispozitive de tip bloc dispozitive de tip caracter pseudodispozitive dd /proc sysctl /etc/sysctl.conf MBR

chipset northbridge southbridge hard-disk, HDD


PCI, AGP magistrala,

dispozitiv modul driver lsmod, insmod, modprobe, rmmod /sys lsusb, lspci

ntrebari a arhitecturii von Neumann? 1. Care dintre urmatoarele NU este o componenta

K CPU
K unitatea de comanda

K memoria K dispozitivele de intrare ies , ire


2. Care utilitar poate folosit pentru efectuarea unui backup la MBR?

K lspci K lsusb K sysctl K dd


direct informat 3. Care din urmatoarele NU ofera , ii despre sistem?

K /sys K /proc K dd K lsusb


NU este folosita pentru interact 4. Care comanda , iunea cu modulele din kernel?

K lsmod K modprobe

CAPITOLUL 7. ANALIZA HARDWARE A SISTEMULUI

215

K modinstall K insmod
5. Care din urmatoarele NU este un exemplu de pseudodispozitiv?

K /dev/null K /dev/zero K /dev/hda3 K /dev/urandom


6. Care din urmatoarele dispozitive NU este asociat unui hard-disk?

K /dev/sda1 K /dev/hda5 K /dev/sda K /dev/ttyS0


n mod direct la placa de baza? 7. Care din urmatoarele se refera

K southbridge K megabyte K GPU K cache


8. Care din urmatoarele acronime NU este corelat direct cu dispozitive zice?

K SCSI K USB K ACPI K TGZ


acronimul AGP? 9. La care dispozitiv se refera

K procesor K placa de ret, ea


K placa graca

K hard-disk
n general not pe N bit 10. La ce se refera , iunea de arhitectura , i?

K dimensiunea registrelor K dimensiunea magistralei de date K dimensiunea memoriei cache L1


a southbridge-ului K viteza maxima

Capitolul 8 de ret Congurari , ea


You know its love when you memorize her IP address to skip DNS overhead.

din acest capitol? Ce se nvat ,a

Not, iunea de ret, ea de calculatoare Topologia unei ret, ele de calculatoare Adresarea IP
IP, masca de ret Parametrii unei ret, ele de calculatoare: adresa , ea, gateway Congurarea unei interfet, e de ret, ea n Linux; adaugarea de rute n Linux congurare permanenta; congurare statica; congurare Congurare temporara; dinamica

Congurare DNS
, ii ntr-o ret Vericarea conectivitat , ea locala

Congurarea ret, elei n Windows Congurarea PPPoE n Linux

8.1

Concepte de ret , ea

Aparit , ia s , i evolut , ia calculatoarelor au dus la dorint , a de a facilita comunicat , ia ntre ele Des pentru a partaja date mai us or sau pentru a putea ndeplini o sarcin a comun a. , ,i implementarea lor a cunoscut o dezvoltarea ret , elelor de calculatoare a fost init , ial lenta, 1990, odata cu explozia numarului cres de calculatoare legate la Internet. , tere mare dupa init Daca , ial ret , elele de calculatoare au fost create pentru a facilita schimbul de informat , ie ele se adreseaza n mare masur a utilizatorilor n mediul academic, n momentul de fat ,a privat i s i mediului comercial. , , 217

218

INTRODUCERE N SISTEME DE OPERARE

e conectat la o ret conexiuni: o Pentru ca un calculator sa , ea trebuie realizate doua conexiune zica s , i o conexiune logica. este utilizata pentru a codica informat de semnale Conexiunea zica , ia sub forma prin cablu UTP), electrice (n cazul cel mai uzual ntlnit conexiunea se realizeaza semnale optice (pentru legaturile prin bra optica) sau semnale electromagnetice a r). n primele doua cazuri ea se realizeaza printr-un cablu care (pentru legaturile far calculatorul de un echipament de ret leaga , ea. cuprinde un set de mecanisme de adresare complexe (ce asigura Conexiunea logica comunicat ia ntre calculatoarele conectate la ret ea), cuprinde controlul uxului de date , , garant , ii datelor. Cel mai cunoscut mecanism de adresare prezent n s , i ofera , ia integritat identicarea unica s cadrul conexiunii logice este IP (Internet Protocol). Acesta asigura ,i comunicarea calculatoarelor att n ret , elele locale, ct s , i n Internet.

8.1.1

Not , iuni de baza

, ite Ret , elele de calculatoare, din punctul de vedere al standardelor folosite, sunt mpart n trei mari categorii: ret , ele locale de calculatoare (Local Area Network LAN), ret , ele metropolitane de calculatoare (Metropolitan Area Network MAN) s i ret ele de , , aceasta calculatoare pe arii extinse (Wide Area Network WAN). n momentul de fat ,a 100%, ret clasicare nu se mai pastreaz a elele MAN disp arnd aproape complet s i ind , , nlocuite cu ret , ele LAN.

Figura 8.1: Schema unei ret , ele locale de calculatoare de calculatoare este formata cel mai adesea din mai multe stat O ret , ea locala , ii legate ntre ele. O stat , ie poate un calculator, un laptop, un PDA, un Tablet PC, un server, un router etc.

DE RET CAPITOLUL 8. CONFIGURARI , EA

219

printr-un echipament de ret Conectarea stat , ilor se realizeaza , ea numit switch. Acesta transfera informat , ia ntre calculatoare bazndu-se pe adresa MAC. cu o lungime de 48 de bit n mod unic Adresa MAC este un numar , i care identica de ret ecare interfat ,a , ea Ethernet. interfet MAC. Prin urmare nu pot exista doua , e de ret , ea Ethernet cu aceeas , i adresa din fabrica ntr-o memorie ROM de pe placa s Adresa MAC este nscrisa , i ea nu poate schimbata. faptului ca protocolul DHCP de congurare automata a adreselor IP utilizeaza Datorita IP unui calculator, este uzuala practica frecvent adresa MAC pentru a aloca o adresa de ret de a modica adresa MAC a unei placi ea. Acest lucru nu nseamn a rescrierea , o memoriei ROM, ci specicarea unei alte adrese pe care sistemul de operare sa foloseasca n locul celei init , iale. Pentru Switch-ul permite comunicat , ia ntre calculatoare aate n aceeas , i ret , ea locala. a putea accesa s , i alte calculatoare (cel mai adesea pentru a putea accesa Internetul) aiba o a doua legatur a la o alta ret trebuie ca unul din echipamentele din ret , ea sa , ea. e o stat Acest echipament poate sa , 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 pe adresa IP. mai departe nspre Internet se bazeaza cu o lungime de 32 de bit Adresa IP este un numar , i folosit pentru identicarea ecarei interfat e de ret ea n Internet. , , pentru ecare O stat , ie poate avea mai multe adrese IP, n mod uzual cte o adresa Este posibil nsa ca pe o interfat sa e congurate mai multe adrese IP. interfat , a. ,a

8.1.2

IPv6

acum am folosit not Pna , iunea IP pentru a ne referi la Internet Protocol version 4 (IPv4). Internet Protocol version 6 (IPv6) este urmatoarea generat , ie de protocol de ret , ea, dezvoltat pentru a nlocui treptat IPv4. cu o lungime de 128 de bit Adresa IPv6 este un numar , i folosit pentru identicarea ecarei 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 21 28 adrese, fat de IPv4 care din cauza lungimii adreselor. Spat , iul de adrese IPv6 ofera ,a 3 are doar 2 2 adrese.

8.1.3

Moduri de adresare: adresare unicast, multicast, broadcast

, ite n trei categorii, n funct de Comunicat , iile ntre echipamente pot mpart , ie de numarul destinatari:

220

INTRODUCERE N SISTEME DE OPERARE

s comunicat, ii unicast: au o sursa , i un destinatar; s comunicat, ii multicast: au o sursa , i mai mult , i destinatari ce fac parte dintr-un grup specic; s comunicat, ii broadcast: au o sursa , 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 n faptul ca mesajele de tip broadcast se destinatari simultan. Diferent a dintre ele consta , tuturor stat doar unora adreseaza , iilor dintr-o ret , ea, pe cnd cele multicast se adreseaza din aceste stat , ii.

8.2
8.2.1

Parametri de ret , ea
IP s de ret Adresa , i masca , ea

n perioada 80, cnd nu se preconiza cres Adresa IP pe 32 de bit , i a fost introdusa , terea a Internetului. Dupa 1990, datorita dezvoltarii ret spectaculoasa , elelor, cerint , ele pentru se epuizeze. adrese IP au crescut, astfel nct nu peste mult timp adresele au nceput sa reduca numarul de adrese IP Din acest motiv au aparut mai multe mecanisme menite sa utilizate, printre care adresele IP private s , i translatarea de adrese IP (Network Address s Translation NAT). n paralel a fost dezvoltata , i o solut , ie pe termen lung: protocolul IPv6, a carui utilizare va cres n cadrul acestui protocol adresa IP are , te n anii urmatori. 128 de bit i. , Pentru a us , ura utilizarea adreselor IP, cei 32 de bit , i sunt separat , i n patru grupuri a cte n mod uzual 8 bit i, ecare grup ind scris n form a zecimal a. Astfel adresa IP utilizata , din patru numere zecimale ntre 0 s , ite prin puncte: este compusa , i 255 despart
1 2 3

01011001110101110001111010000111 - cei 32 de biti ai unei adrese IP 01011001.11010111.00011110.10000111 - patru grupuri a cate 8 biti 89.215.30.135 - fiecare grup este transformat in format zecimal

de ret o adresa IP, adresa are doua Atunci cnd o interfat ,a , ea are congurata adresa ret componente: o parte din cei 32 de bit , i reprezinta , elei din care face parte stat ia s i cealalt a parte a bit ilor reprezint a adresa stat iei n cadrul ret , , , , , elei. Sistemul este cifre similar cu cel utilizat pentru codul pos , tal: n cadrul codului 014288, primele doua pot reprezenta oras pot pot reprezenta judet doua , ul, urmatoarele , ul, iar ultimele doua reprezenta strada. Astfel destinat ia este localizat a n arii din ce n ce mai restrnse. , adresa ret Pentru a putea spune care dintre cei 32 de bit , i reprezinta , elei s , i care reprezinta adresa calculatorului n cadrul ret elei, este utilizat a o masc a de ret ea. Aceasta este tot , , de 32 de bit speciala: este compusa, pornind de la stnga un numar , i cu o caracteristica la dreapta, dintr-un bloc compact de 1 urmat de un bloc compact de 0. Pentru utilizarea a mas , tii de ret aceeas mai us , oara , ea este folosita , i notat , ie ca s , i n cadrul adresei IP:
1 2 3

11111111000000000000000000000000 - cei 32 de biti ai unei masti 11111111.00000000.00000000.00000000 - patru grupuri a cate 8 biti 255.0.0.0 - fiecare grup este tranformat in format zecimal

n cadrul mas , tii de ret Daca din adresa , ea un bit este egal cu 1, atunci bitul corespunzator este egal cu 0, bitul corespunzator IP face parte din adresa ret din adresa , elei, iar daca IP face parte din adresa calculatorului (stat iei) n cadrul ret elei : , ,

DE RET CAPITOLUL 8. CONFIGURARI , EA

221

1 2 3 4 5

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

IP, se face SI Pentru a putea aa din ce ret logic pe bit , ea face parte o adresa , i ntre realizarea operat adresa IP s logic se obt , i masca de ret , ea. Dupa , iei de SI , ine o adresa IP care are tot i bit ii din partea de adres a a ret elei egali cu adresa ret elei din care face parte , , , , stat , ia, s , i tot , i bit , ii din partea de adresa a stat , iei n cadrul ret , elei egali cu 0:
1 2 3 4 5 6

01011001.11010111.00011110.10000111 11111111.00000000.00000000.00000000 ----------------------------------01011001.00000000.00000000.00000000 <-A.R.-> <-------A. C.------------> 01011001.11111111.11111111.11111111

= = =

89.215.30.135 - adresa IP 255.0.0.0 - masca de retea SI logic pe biti 89.0.0.0 - adresa retelei

= 89.255.255.255 - adr. broadcast

a stat Adresa IP n care tot , i bit , ii din partea de adresa , iei sunt egali cu 0 se numes , te au adrese adresa ret , ia. Toate stat , iile dintr-o ret , ea locala , elei din care face parte stat a ret corespondent IP care au aceeas , i adresa , elei. n felul acesta se realizeaza , a ntre la ret conexiunea zica ea s i cea logic a. , , a stat Adresa IP n care tot , i bit , ii din partea de adresa , iei n cadrul ret , elei sunt egali cu 1 se numes te adresa de broadcast a ret elei. Dac a un pachet este trimis catre aceasta , , atunci el va procesat de toate calculatoarele din ret adresa, , ea.

Clase de adrese IP Conceptul de clase de adrese IP este important pentru nt , elegerea modului n care o ret , it n cinci funct Spat , ioneaza , ea de calculatoare. , iul de adrese IP este mpart categorii, denumite clase de adrese. n funct ie de intervalul din care face parte primul , zecimal din notat octet al adresei IP (sau, echivalent, primul numar , ia cu punct), se stabiles te clasa respectivei adrese IP: ,

ntre 0 s , i 127, adresa IP face parte din clasa A, ntre 128 s , i 191, adresa IP face parte din clasa B, ntre 192 s , i 223, adresa IP face parte din clasa C, ntre 224 s , i 239, adresa IP face parte din clasa D, ntre 240 s , i 255, adresa IP face parte din clasa E.
mpart , ire a claselor de adrese a fost aleasa din considerente de performant Aceasta , a: pentru a determina clasa unei adrese IP oarecare, un dispozitiv hardware de ret , ea inspecteze maximum primii patru bit trebuie sa i ai adresei IP (valoarea bit ilor notat i cu , , , nu este importanta):

0 - - -. - - - -, adresa IP face parte din clasa A, 10 - -. - - - -, adresa IP face parte din clasa B, 110 -. - - - -, adresa IP face parte din clasa C,

222

INTRODUCERE N SISTEME DE OPERARE

1110. - - - -, adresa IP face parte din clasa D, 1111. - - - -, adresa IP face parte din clasa E.
, irea pe clase determina doua caracteristici importante ale unei adrese: tipul rutarii mpart (unicast/multicast/rezervat) s i masca de ret ea. , ,

Clasa A: 0.0.0.0 127.255.255.255 masca 255.0.0.0 unicast Clasa B: 128.0.0.0 191.255.255.255 masca 255.255.0.0 unicast Clasa C: 192.0.0.0 223.255.255.255 masca 255.255.255.0 unicast Clasa D: 224.0.0.0 239.255.255.255 multicast Clasa E: 240.0.0.0 255.255.255.255 rezervat
a fost utilizat ntr-o faza incipienta Modul acesta de clasicare a spat , iului de adresa a Internetului. Din motive care t , in de ecient , a modului de utilizare a adreselor IP, n , tile de ret prezent, mas ea nu au doar aceste trei lungimi xe, ci pot avea lungime variabila, , , irea n cele cinci clase nu mai este ntnita dect n cazuri rare. iar mpart

Adrese IP publice s , i adrese IP private scada simt n momentul n care numarul de adrese IP ramase libere a nceput sa , itor, la rezolve part problema. nceputul anilor 90, au aparut mecanisme menite sa , ial aceasta a s Printre mecanismele aparute se numar i spat iul de adrese private. , , de adrese a fost rezervat un spat Din ecare clasa , iu de adrese care nu pot accesate direct din afara ret elei locale. Practic stat iile care au congurate adrese IP private sunt , , invizibile din afara ret , elei lor, s , i implicit din Internet. De aceea pot exista mai multe stat , ii, n felul acesta se facnd parte din ret , ele diferite, care au aceeas , i adresa IP privata. o economie mare de adrese IP. realizeaza Spat , iile de adrese private sunt:
1 2 3

10.0.0.0 -- 10.255.255.255 din clasa A 170.16.0.0 -- 172.31.255.255 din clasa B 192.168.0.0 -- 192.168.255.255 din clasa C

o adresa IP privata sa poata accesa stat Pentru ca o stat , ie ce are congurata , ii care nu n aceeas se aa i ret ea cu ea este necesar a utilizarea mecanismelor de NAT (Network , , Address Translation). De cele mai multe ori, prin NAT, toate stat , iile dintr-o ret , ea cu IP publica. adrese IP private vor recunoscute n afara ret , elei ca avnd aceeas , i adresa

8.2.2

Ruter implicit (default gateway)

Pentru a putea accesa calculatoare aate n alte ret , ele, este necesar ca unul dintre conectata la o alta ret echipamentele conectate n ret ea s a aib a o a doua interfat , ,a , ea. Din cea de-a doua ret Internet. Acest , ea se poate realiza mai departe accesul catre echipament se numes te gateway . , comunice cu o stat Atunci cnd o stat , ie A dores , te sa , ie B, primul pas pe care l face este verice daca adresa IP a lui B este n aceeas sa i ret , , ea cu adresa lui A. n cazul n care

DE RET CAPITOLUL 8. CONFIGURARI , EA

223

stat B nu cele doua B. Daca , ii sunt n aceeas , i ret , ea, informat , iile sunt trimise direct catre se aa n aceeas , i ret , ea cu A, atunci informat , iile sunt trimise catre gateway, urmnd ca gaseasc o ruta catre acesta sa a B. comunice cu A3, ind amandoua n aceeas i De exemplu cnd A1 vrea sa , i ret , ea locala, va trimite informat iile direct. Calea pachetelor este reprezentat a n gura 8.2. ,

Figura 8.2: Comunicarea n ret , eaua locala comunice cu B2, va trimite informat n cazul n care A1 vrea sa R1 care este , iile catre ret sau daca gateway-ul. R1 va verica daca , eaua destinat , ie este direct conectata cunoas te calea c atre ea. Schema din gura 8.3 reprezint a calea pachetelor de la A1 la , B2:

Figura 8.3: Comunicarea n afara ret , elei locale cunoasca adresa gateway-ului Prin urmare este necesar ca ecare stat , ie din ret , ea sa este pentru a putea avea acces n afara ret elei s i masca de ret ea pentru a vedea daca , , , foloseasca gateway-ul sau nu. cazul sa

8.2.3

DNS

n mod normal un numar mare de servicii de ret Un utilizator acceseaza , ea, cele mai de multe ind oferite de diverse servere. Accesarea ecarui serviciu este condit , ionata cunoas terea adresei IP a serverului care ofer a serviciul respectiv. Spre exemplu, pentru , web este necesara cunoas a accesa o pagina , terea adresei IP a serverului pe care este acea pagina. gazduit a

224

INTRODUCERE N SISTEME DE OPERARE

memorarea unui numar mare de adrese IP nu este un lucru comod, a aparut Pentru ca serviciul numit Sistemul numelor de domenii (Domain Name System DNS). n cadrul corespondent IP. De acestui serviciu se realizeaza , a ntre un s , ir de caractere s , i o adresa se cunoas aceea DNS-ul poate privit ca o carte de telefon de unde, daca , te numele unui server, i se poate aa adresa IP.

Figura 8.4: Rolul unui server DNS , i despart , ite Un nume de domeniu (asociat unui calculator) este compus din mai multe part se numes prin puncte: de exemplu curs.cs.pub.ro. Cea din extremitatea dreapta te Top , (.ro pentru Romnia, .us pentru Level Domain TLD s , i poate cont , ine indicativul unei t , ari SUA, .jp pentru Japonia etc.) sau poate reprezenta un anumit tip de organizat , ie (de exemplu .com pentru organizat iile comerciale, .org pentru organizat iile non-prot, .mil , , pentru armata SUA etc). n stnga Top Level Domain se gasesc subdomenii. n exemplul de mai sus , ii Politehnica Bucures subdomeniul pub este asociat Universitat , ti, cs este asociat , ii de Automatica s Facultat , i Calculatoare, Catedra de Calculatoare. Serviciile de DNS sunt oferite de servere specializate. Pentru a putea accesa un astfel cunoas de server, este necesara , terea adresei lui IP. Exista servere publice care ofera de cele mai multe ori este de preferat ca n cadrul ret servicii de DNS, nsa , elei locale sa existe un server de DNS din motive ce t in de timpul de r aspuns. , serverul de DNS este plasat n ret DNS-ul ramne Chiar daca cel mai lent , eaua locala, serviciu de ret ea s i componenta cu cel mai mare timp de r aspuns n mecanismul de , , You know its love when you memorize her comunicat , ie n ret , ea. De aceea se spune ca IP address to skip DNS overhead . unei stat e dinamica. Aceasta nseamna Este posibil uneori ca adresa IP asociata , ii sa din timp n timp stat va primi o alta adresa IP. Pentru a putea accesa ca , ia respectiva stat ia f ar a s a i se cunoasc a adresa IP existent a la un moment dat se foloses , , te sistemul

DE RET CAPITOLUL 8. CONFIGURARI , EA Tabelul 8.1: Congurarea ret , elei Congurare statica Congurare dinamica ifconfig dhclient, dhcpcd

225

Congurare temporara Congurare permanenta

/etc/network/interfaces /etc/network/interfaces

numit DynDNS (Dynamic DNS ). n cadrul acestui sistem stat un server , ia va trimite catre DNS specializat informat ii actualizate legate de adresa ei IP. ,

8.3
8.3.1

temporare Congurari
Interfet , e de ret , ea. temporare permanente s Congurari , i congurari

de ret Din punct de vedere logic, ecarei placi , ea i corespunde n cadrul sistemului de o adresa IP s de operare o interfat , a. Pe aceasta interfat , a se congureaza , i o masca ret , ea. componente. Prima parte n Linux interfet , ele de ret , ea cont , in n denumirea lor doua tipul interfet reprezinta ei (de exemplu eth pentru Ethernet, wlan pentru placile de ret, ea , a r etc) s ei (eth0 reprezinta prima interfat de Ethernet, wlan1 reprezinta far , i numarul ,a a doua interfat , a fara r etc). moduri: temporara sau Congurarea unei adrese IP se poate realiza n doua Fiecare din cele doua se poate realiza la rndul ei static (parametrii sunt permanenta. n mod introdus i manual de administrator) sau dinamic (parametrii se congureaza , automat). statica se realizeaza cu ajutorul comenzii ifconfig (a carei Congurarea temporara este imediat denumire vine de la interface conguration). Efectul acestei congurari ce comanda este data) nsa odata cu repornirea (parametrii se aplica imediat dupa sistemului de operare, congurarile se pierd. dinamica se realizeaza cu ajutorul unui client DHCP, de exemplu Congurarea temporara dhclient sau dhcpcd. statica sau dinamica se realizeaza cu ajutorul s Congurarea permanenta , ierului /etc/network/interfaces. Efectul acestei comenzi nu este imediat (congurarile odata cu salvarea s nu se aplica ierului), ns a congur arile se p astreaz a s i dup a , , repornirea sistemului de operare. Acest lucru se petrece deoarece s , ierul n care sunt trecute congurarile este citit s , i interpretat de sistemul de operare la init , ializare, congurarile din s ier ind din nou aplicate. , Si congurarea unui gateway se poate realiza n mod temporar cu ajutorul comenzii route sau n mod permanent prin s , ierul de congurare /etc/network/interfaces. metode (permanent vs. Fiecare din cele doua temporar) are avantajele sale. Congurarile temporare au efect imediat s i se aplic a us Cele permanente se pot , , or.

226

INTRODUCERE N SISTEME DE OPERARE

aplica automat la ecare init , ializare a sistemului de operare.

8.3.2

statica a unei adrese IP pe o interfat Congurarea temporara ,a

de ret Pentru a congura o interfat ,a , ea n mod temporar se foloses , te comanda ifconfig. Modul de utilizare al comenzii este urmatorul:
1 2

root@ubuntu:~# ifconfig [-v] [-a] [-s] [interface] root@ubuntu:~# ifconfig [-v] interface [aftype] options | address ...

a niciun parametru se pot aa informat Prin utilizarea comenzii far , ii despre interfet , ele de ret , ea active:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

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 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:5777 errors:0 dropped:0 overruns:0 frame:0 TX packets:5777 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:360919 (352.4 KiB) TX bytes:360919 (352.4 KiB)

interfet s Pe lnga placilor de ret , ele corespunzatoare , ea exista , i interfat , a lo. Numele acestei interfet e vine de la loopback . Orice informat ie transmis a pe loopback se va , , ntoarce napoi tot pe loopback. virtuala (far a un corespondent zic) care este Interfat , a de loopback este o interfat ,a n scopuri de testare. Ea are, deobicei, asociata o adresa IP standard: folosita un calculator nu are nicio placa de ret 127.0.0.1. Daca , ea, interfat , a de loopback va singura existenta. Parametrii uzuali ai comenzii ifconfig sunt urmatorii: informat -v as , eaza , ii detaliate n cazul erorilor; informat sunt active sau -a as , eaza , ii despre toate interfet , ele existente, e ca inactive.
1 2 3 4 5 6 7 8

root@asgard:/home/george# ifconfig eth0 Link encap:Ethernet HWaddr 00:14:D1:38:73:A6 inet addr:10.1.1.2 Bcast:10.1.1.255 Mask:255.255.255.0 [...] lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 [...]

DE RET CAPITOLUL 8. CONFIGURARI , EA


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 [...]

statistici legate de interfet -s as , eaza , 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

numele interfet interface reprezinta , ei despre care se doresc informat , ii sau De exemplu, pentru a as numele interfet , ei care va congurata. , a informat , ii despre interfat , a de ret , ea eth0 se foloses , te comanda
1 2 3 4

root@asgard:/home/george# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:14:D1:38:73:A6 inet addr:10.1.1.2 Bcast:10.1.1.255 Mask:255.255.255.0 [...]

adresa IP care va congurata pe interfat De exemplu, address reprezinta , a. pentru a congura adresa IP 10.1.1.3 pe interfat , a eth0:
1 2 3 4 5 6

root@asgard:/home/george# ifconfig eth0 10.1.1.3 root@asgard:/home/george# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:14:D1:38:73:A6 inet addr:10.1.1.3 Bcast:10.255.255.255 Mask:255.0.0.0 [...]

opt options reprezinta , iuni avansate ce pot congurate Opt , iunile cele mai des folosite sunt urmatoarele: o interfat Odata dezactivata, interfat down dezactiveaza , a. , a nu va mai trimite s , i nu va mai primi niciun pachet
1 2 3 4 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 [...] root@asgard:/home/george# ifconfig eth0 down root@asgard:/home/george# ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 [...]

228

INTRODUCERE N SISTEME DE OPERARE dupa ce interfat ea nu mai apare Se poate observa faptul ca, , a a fost dezactivata, n lista de interfet , e active. Pentru a as , a toate interfet , ele existente se foloses , te parametrul -a.

pentru a activa o interfat n cazul n care este specicata o up este utilizata , a. IP pentru a congurata pe interfat opt implicit. adresa , a, , iunea up este considerata
1 2 3 4 5 6 7 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 [...] root@asgard:/home/george# ifconfig eth0 up 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 [...]

masca de ret netmask addr specica n cazul n care , ea asociata interfet , ei. opt se va considera masca implicita clasei IP-uri aceasta , iune nu este prezenta din care face parte adresa IP a interfet , ei Se poate observa din exemplele nespecicnd masca de ret anterioare faptul ca, , ea, aceasta a fost considerata implicit 255.0.0.0, care este valoarea pentru clasa A de adrese IP din care s , tii ca opt face parte 10.1.1.3. n cazul n care se specica , i valoarea mas , iune, rezultatul va :
1 2 3 4 5 6

root@asgard:/home/george# ifconfig eth0 10.1.1.3 netmask 255.255.255.0 root@asgard:/home/george# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:14:D1:38:73:A6 inet addr:10.1.1.3 Bcast:10.1.1.255 Mask:255.255.255.0 [...]

utilizarea unei alte adrese MAC s hw class addr specica , i nu cea din memoria de ret de ret suport pentru ROM a placii , ea, n cazul n care driverul placii , ea ofera naintea acest lucru. Este foarte important ca interfat a de ret ea s a e dezactivat a , , unei noi adrese MAC: congurarii
1 2 3 4 5 6 7 8 9 10 11 12 13

root@asgard:/home/george# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:14:D1:38:73:A6 inet addr:10.1.1.3 Bcast:10.1.1.255 Mask:255.255.255.0 [...] root@asgard:/home/george# ifconfig eth0 down root@asgard:/home/george# ifconfig eth0 hw ether 01:02:03:04:05:06 up root@asgard:/home/george# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 01:02:03:04:05:06 inet addr:10.1.1.3 Bcast:10.1.1.255 Mask:255.255.255.0 [...]

DE RET CAPITOLUL 8. CONFIGURARI , EA

229

de cea a placii de ret Utilitatea folosirii unei adrese MAC diferita , ea apare datorita faptului ca protocolul DHCP de congurare automata a adreselor IP utilizeaza IP unui calculator. Pentru a obt frecvent adresa MAC pentru a aloca o adresa , ine o adresa IP, trebuie folosita adresa MAC asociata n cadrul serverului anumita DHCP cu adresa IP dorita.

8.3.3

, ii la Internet. Congurarea temporara Asigurarea conectivitat a unei rute implicite statica

Pentru a Comanda ifconfig permite doar congurarea unei adrese IP pe o interfat , a. e specicata adresa unui gateway. putea accesa Internetul este nevoie sa a unui gateway se realizeaza cu ajutorul unei rute. O ruta Specicarea temporara calea pe care o urmeaza pachetele n drumul lor catre reprezinta destinat Rutele , ie. sunt ret inute n cadrul unui structuri numite tabel a de rutare . Aceasta cont ine practic , , informat , ii despre toate destinat , iile accesibile la un moment dat. se numar a: adresa destinat Printre informat , iile ret , inute pentru ecare ruta , iei (poate s adresa unei stat , ii sau adresa unei ntregi ret , ele), masca de ret , ea asociata , i adresa echipamentului de ret care se trimit informat , ea catre , iile pentru a ajunge la destinat , ie. cu ajutorul comenzii route. Aceasta permite Congurarea tabelei de rutare se realizeaza adaugarea, modicarea s ,i s , tergerea de rute. Pentru a vedea care sunt rutele existente la un moment dat (ca atare pentru a vedea cont , inutul tabelei de rutare) se utilizeaza a parametri: comanda route far
1 2 3 4

root@asgard:/home/george# route Kernel IP routing table Destination Gateway Genmask localnet 255.255.255.0 *

Flags Metric Ref U 0 0

Use Iface 0 eth0

singura ruta existenta este cea asociata ret n rezultatul de mai sus se vede faptul ca , elei ruta (care este practic asociata cu ret locale (localnet) .Aceasta eaua local a direct , este introdusa n tabela de rutare dupa ce interfat ret conectata) a de ret , , ea asociata , elei este congurata. Formatul comenzii utilizat pentru adaugarea unei rute implicite este urmatorul:
1

root@@ubuntu:~# route add default gateway addr

astfel: Congurarea unei rute implicite se realizeaza


1 2 3 4 5 6 7

root@asgard:/home/george# route add default gateway 10.1.1.1 root@asgard:/home/george# route Kernel IP routing table Destination Gateway Genmask localnet 255.255.255.0 * default 10.1.1.1 0.0.0.0

Flags Metric Ref U 0 0 UG 0 0

Use Iface 0 eth0 0 eth0

Unul dintre parametrii utili ai comenzii route este -n (numeric ) Folosind acest parametru se as adresele din tabela de rutare vor as , at n format numeric n loc sa , eze numele serverelor sau stat , iilor. Este folosit atunci cnd se dores , te interogarea unui server DNS (de exemplu atunci cnd nu este congurat un astfel de server).

230

INTRODUCERE N SISTEME DE OPERARE

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

Flags Metric Ref U 0 0 UG 0 0

Use Iface 0 eth0 0 eth0

8.4
8.4.1

permanente Congurari
a unei interfet Congurarea permanenta , e de ret , ea

n cadrul s Congurarile de ret , ea permanente se realizeaza , ierului /etc/network/ interfaces. Manualul de utilizare al acestui s , ier se poate accesa cu comanda:
1

man interfaces

Un exemplu de s , ier de congurare este urmatorul:


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

root@asgard:/home/george# cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo eth0 iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet static address 10.1.1.2 netmask 255.255.255.0 network 10.1.1.0 broadcast 10.1.1.255 gateway 10.1.1.1 dns-nameservers 10.1.1.1

ale interfet Fis , ierul /etc/network/interfaces cont , ine diverse congurari , elor de ret ea, congur ari care sunt interpretate de utilitarele ifup s i ifdown . ifup este un , , utilitar ce permite activarea unei interfet , e de ret , ea. El este similar opt , iunii up a comenzii o interfat ifconfig. ifdown dezactiveaza a de ret ea, ind similar cu opt , , , iunea down a comenzii ifconfig. Pentru a activa toate interfet , ele denite cu auto n /etc/network/interfaces se foloses te urm atoarea comand a: ,
1

root@ubuntu:~# ifup -a

interfat se precizeaza numele acesteia, de exemplu: Pentru a activa o anumita ,a


1

root@ubuntu:~# ifup eth0

Pentru a dezactiva toate interfet comanda: , ele active se foloses , te urmatoarea


1

root@ubuntu:~# ifdown -a

DE RET CAPITOLUL 8. CONFIGURARI , EA

231

n cadrul s mai multe declarat , ierului interfaces se gasesc , ii de tipul iface, auto sau allow. ce interfet Declarat , iile auto specica , e sunt activate atunci cnd ifup este folosit cu parametrul -a. Un astfel de apel (ifup -a) este folosit la pornirea mpreuna n sistemului de operare. Pornirea unei interfet , e marcate ca auto este realizata momentul n care udev (vezi sect , iunea 7.5) a creat mecanismele necesare funct , ionarii interfet ei. , interfet Declarat diverse , iile allow specica , ele care sunt activate automat de catre dupa ce udev a detectat placa de subsisteme. Astfel activarea nu mai este realizata ret ea, ci n momentul n care aceasta devine disponibil a. , Pentru specicarea unei interfet linie: , e de loopback se foloses , te urmatoarea
1

iface lo inet loopback

declarat numele interfet Dupa , ia iface urmeaza , ei, apoi tipul de adrese pe care interfat ,a adresare IP, inet6 reprezinta adresare IPv6). Pentru a l foloses , te (inet reprezinta marca o interfat a ca loopback, se foloses te parametrul loopback . , , atoare s orice alta interfat existenta. O linie aseman este folosita , i pentru a specica ,a Spre exemplu, pentru congurarea interfet ei eth0 : ,
1

iface eth0 inet static

declarat numele interfet Dupa , ia iface urmeaza , ei apoi tipul de adrese pe care l faptul foloses te interfat a, iar la nal, prin includerea parametrului static se specica , , interfat manual de administrator, ramnnd pna la ca este congurata xa ,a O alta metoda de congurare este cea n care se urmatoarea schimbare manuala. foloses interfet , te DHCP, prin care stat , ia cere congurarile , ei de la un server DHCP. parametrul static a fost precizat n declarat aceasta Daca , ia iface, atunci dupa declarat ie trebuie s a urmeze parametrii cu care va congurat a interfat a de ret ea: , , ,
1 2 3 4 5 6 7

iface eth0 inet static address 10.1.1.2 netmask 255.255.255.0 network 10.1.1.0 broadcast 10.1.1.255 gateway 10.1.1.1 dns-nameservers 10.1.1.1

adresa IP a interfet address specica , ei (parametru obligatoriu), netmask specica (parametru obligatoriu), network specica adresa masca de ret , ea care va folosita ret , elei din care face parte interfat , a (parametru obligatoriu doar pentru kernelul 2.0.x, ce se poate obt adresa ine f acnd SI logic pe bit , , i ntre adresa IP s , i masca de ret , ea, adresa de broadcast a ret broadcast specica , elei din care face parte interfat ,a (parametru opt ional). , modicarea s restartarea Dupa , ierului /etc/network/interfaces este necesara serviciului de ret , ea pentru a citi noua congurat , ie:
1

root@ubuntu:~# /etc/init.d/networking restart

Serviciul de ret , ea poate oprit folosind argumentul stop s , i pornit folosind argumentul start:

232

INTRODUCERE N SISTEME DE OPERARE

1 2 3

root@ubuntu:~# /etc/init.d/networking stop root@ubuntu:~# /etc/init.d/networking start

8.4.2

statica a unei rute implicite Congurarea permanenta

O a doua modalitate de specicare a rutei implicite este folosirea s , ierului n paragraful /etc/network/ interfaces. Structura acestuia a fost descrisa anterior. declarat s Printre parametrii care se pot congura dupa , ia iface se aa , i gateway-ul astfel: implicit. Specicarea acestuia se realizeaza
1 2 3

iface eth0 inet static [...] gateway 10.1.1.1

unde 10.1.1.1 este adresa IP a gateway-ului.

8.4.3

DHCP. Congurarea unei interfet , e n mod automat

Congurarea parametrilor unei interfet , e de ret , ea se poate realiza static sau dinamic. n cazul congurarilor statice tot , i parametrii trebuie introdus , i manual pe ecare stat , ie din ret ea. n cazul n care se schimb a gateway-ul, de exemplu, pe ecare stat ie din ret , , , ea aceasta schimbare. trebuie realizata a parametrilor de ret Congurarile dinamice permit atribuirea automata , ea, printre care adresa IP, masca de ret , ea, gateway-ul, serverul de DNS. (automata) este DHCP (Dynamic Host Cel mai utilizat protocol de congurare dinamica funct Conguration Protocol ). Pentru ca acest protocol sa , ioneze este necesar ca n sa se gaseasc un server de DHCP. Serverului i sunt specicate plaja de ret a , eaua locala adrese IP pe care le poate atribui calculatoarelor s de ret , i restul congurarilor , ea. obt o adresa IP, va trimite un mesaj catre ret Atunci cnd o stat toata , ie dores , te sa , ina , eaua sa determine daca exista un server de DHCP. Daca acest (broadcast) prin care ncearca atunci el va trimite congurat server exista, stat , iile catre , ie. Congurarea parametrilor interfet , ei de ret , ea folosind DHCP se poate realiza n mod temporar sau permanent. se pornes Pentru a realiza o congurare temporara , te clientul de DHCP, de exemplu cu ajutorul comenzii dhclient:
1 2 3 4 5 6 7 8

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/ Listening on LPF/eth0/00:40:f4:cc:c5:41 Sending on LPF/eth0/00:40:f4:cc:c5:41

DE RET CAPITOLUL 8. CONFIGURARI , EA


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.

pna la urmatoarea Interfat astfel congurata repornire a stat , a va ramne , iei sau pna cnd congurarile vor schimbate. prin DHCP se foloses Pentru a realiza o congurare permanenta , te de asemenea s , ierul interfat /etc/network/interfaces. Linia care congureaza a eth0 arat a astfel: ,
1

iface eth0 inet dhcp

8.4.4

DNS. Congurarea serverelor de DNS

Fis , iere de congurare congura adresele serverelor de DNS se foloses s , te , ierul /etc/resolv.conf. n cadrul acestui s , ier se pot specica adresele mai multor servere de DNS. n cazul n care unul din ele nu cont , ine informat , ii despre domeniul cautat, se va ncerca interogarea celorlalte. Manualul de utilizare al s , ierului /etc/resolv.conf se poate accesa folosind comanda:
1

Pentru

man resolv.conf

Un exemplu de s , ier /etc/resolv.conf este urmatorul:


1 2 3 4

search localdomain nameserver 10.1.1.1 nameserver 217.115.138.24 nameserver 128.107.241.185

declarat n cadrul s Ea , ierului cea mai importanta , ie este declarat , ia nameserver. denes , te adresa unui server de DNS. Fis , ierul poate cont , ine mai multe declarat , ii de acest tip. imediat deoarece s Aplicarea congurarilor se realizeaza , ierul resolv.conf este interogat de ecare proces atunci cnd dores te rezolvarea unui nume de domeniu. , Des , i nu este uzual, serverele de DNS se pot congura s , i din cadrul s , ierului /etc/

network/interfaces.
este congurata automat prin DHCP, De cele mai multe ori, atunci cnd o interfat ,a pe lnga adresa IP s serverul de DHCP ofera i adresa unui server DNS, care va , automat n /etc/resolv.conf. salvata

Utilitarul resolvconf Folosind utilitarul resolvconf se pot as , a informat , ii despre serverele de nume congurate n sistem s i se poate modica congurat din s , , ia , ierul

234

INTRODUCERE N SISTEME DE OPERARE Folosind opt , iunea

/etc/resolv.conf. /etc/resolv.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13

-a

se

poate

modica

s , ierul

ubuntu@ubuntu:~$ cat /etc/resolv.conf nameserver 192.168.2.1 ubuntu@ubuntu:~$ echo "nameserver 192.168.2.100" | resolvconf -a eth0 ubuntu@ubuntu:~$ echo "nameserver 192.168.2.101" | resolvconf -a eth1 ubuntu@ubuntu:~$ cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 192.168.2.100 nameserver 192.168.2.101

ntre congurarea cu resolvconf s a s O diferent ,a , i modicarea directa , ierului /etc/ resolv.conf este specicarea interfet, ei pentru care se face aceasta cu o anumita interfat se foloses congurat , ie. Pentru a s , terge congurat , ia asociata ,a , te urmatoarea comanda:
1 2 3 4 5 6 7

ubuntu@ubuntu:~$ resolvconf -d eth0 ubuntu@ubuntu:~$ cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 192.168.2.101

Interogarea serverelor de nume Folosind comanda host se pot obt , ine informat , ii despre un anumit domeniu, cum ar serverul de nume al domeniului, serverul de mail, descrierea, alias-ul adresa IP asociata, etc. se poate aa folosind urmatoarea De exemplu, adresa IP asociata comanda:
1 2

ubuntu@ubuntu:~$ host -t A cs.pub.ro cs.pub.ro has address 141.85.37.5

Pentru a obt , ine serverul de nume asociat cu acest domeniu se va folosi comanda:
1 2 3

ubuntu@ubuntu:~$ host -t NS cs.pub.ro cs.pub.ro name server ns.cs.pub.ro. cs.pub.ro name server pub.pub.ro.

Serverul de mail se poate obt , ine folosind comanda urmatoare:


1 2

ubuntu@ubuntu:~$ host -t MX cs.pub.ro cs.pub.ro mail is handled by 5 mail.cs.pub.ro.

Comanda urmatoare va as , a descrierea domeniului:


1 2 3

ubuntu@ubuntu:~$ host -t TXT cs.pub.ro cs.pub.ro descriptive text "Politehnica University of Bucharest, Computer Science Departament"

DE RET CAPITOLUL 8. CONFIGURARI , EA

235

8.4.5

Aliasuri. /etc/hosts

etichete care sunt asociate unor adrese de IP. Sistemul de aliasuri Aliasurile reprezinta ator funct ioneaz a asem an cu cel de DNS: de exemplu, atunci cnd o stat , , ie dores , te sa gaseasc adresa IP a acceseze serverul numit my-print-server, ea va ncerca sa a serverului respectiv. nsa doua deosebiri majore fat de DNS. Prima consta n faptul ca etichetele Exista ,a respecte convent asociate unor adrese IP nu trebuie sa , iile numelor de domenii DNS (de se termine cu un Top Level Domain). A doua deosebire consta n exemplu nu trebuie sa a adresa IP asociata unei etichete. Daca n cazul DNS se folosesc felul n care este gasit servere dedicate, n cazul aliasurilor este interogat s , ierul /etc/hosts. n acest s , ier sunt trecute corespondent ele ntre etichete s i adrese IP. , , Un exemplu de s , ier hosts este urmatorul:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

root@asgard:/home/george# cat /etc/hosts 127.0.0.1 localhost asgard 127.0.1.1 asgard #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 # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts

Fis , ierul hosts cont , ine mai multe linii de forma:


1

adresa_IP numele_statiei [eticheta] [eticheta] ...

apoi numele principal al stat Cmpul cel mai din stnga este adresa de IP. Urmeaza , iei, cu aceasta adresa, despart , ite prin spat s , i etichetele care se asociaza , iu. De obicei, atunci cnd sunt congurate s , i servere de DNS s , i aliasuri, aliasurile au prioritate s i vor vericate primele. ,

8.4.6

Congurarea numelui stat , iei curente


Folosind oricare dintre

se poate congura un nume local. Pentru stat , ia curenta urmatoarele comenzi se poate aa numele stat , iei:
1 2 3 4 5 6 7

ubuntu@ubuntu:~$ hostname ubuntu@ubuntu:~$ uname -n ubuntu@ubuntu:~$ cat /proc/sys/kernel/hostname ubuntu@ubuntu:~$ sysctl kernel.hostname

236

INTRODUCERE N SISTEME DE OPERARE

Numele stat , iei se poate modica temporar folosind comanda hostname, ca n exemplul urmator:
1 2 3 4 5 6 7

ubuntu@ubuntu:~$ hostname ubuntu ubuntu@ubuntu:~$ hostname uso ubuntu@ubuntu:~$ hostname uso

se va modica s Pentru a realiza o congurare permanenta , ierul /etc/hostname care cont , ine numele stat , iei. Pentru a determina recitirea congurat , iei din acest s , ier se va rula urmatorul script:
1

ubuntu@ubuntu:~$ /etc/init.d/hostname.sh

8.5

Testarea congurat , iilor de ret , ea

ce s-au realizat congurat Odata , iile de ret , ea, acestea trebuie testate. Pentru testarea utilitare: ping s lor sunt folosite n mod uzual doua Aceste utilitare , i traceroute. sunt folosite s i pentru a depista problemele uzuale care pot ap area n funct , , ionarea unei ret , ele.

8.5.1

Ping

stat Utilitarul ping este folosit pentru a verica conectivitatea ntre doua , ii. El testeaza conexiunea zica s , i parte din cea logica, folosindu-se de protocoalele IP s , i ICMP (Internet Control Message Protocol ) pentru a trimite s i pentru a primi mesaje. , Ping primes aceasta un mesaj ECHO , te adresa IP a stat , iei destinat , ie s , i va trimite catre REQUEST. Atunci cnd acest mesaj este recept, ionat, stat, ia destinat, ie va raspunde cu raspunsul un mesaj similar, ECHO REPLY. Daca destinat , iei ajunge napoi la sursa, n caz contrar exista probleme care mpiedica cele conexiunea dintre ele funct , ioneaza. stat doua ii c a comunice. , Principalii parametri ai comenzii ping sunt urmatorii:
1

ping [-f] [-c count] [-i interval] [-I interface] destination

a nicio opt nelimitat de mesaje catre Far destinat , iune, ping va trimite un numar , ie, pna cnd va ntrerupt:
1 2 3 4 5 6 7 8

root@asgard:/home/george# ping 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=255 time=0.395 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=255 time=0.359 ms [CTRL+C] --- 10.1.1.1 ping statistics --2 packets transmitted, 2 received, 0\% packet loss, time 8998ms rtt min/avg/max/mdev = 0.341/0.400/0.707/0.106 ms

DE RET CAPITOLUL 8. CONFIGURARI , EA

237

numarul de pachete trimise, iar opt intervalul n Opt , iunea -c specica , iunea -i specica secunde ntre doua pachete trimise:
1 2 3 4 5 6 7 8

root@asgard:/home/george# ping 10.1.1.1 -c 3 -i 1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=255 time=0.326 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=255 time=0.459 ms 64 bytes from 10.1.1.1: icmp_seq=3 ttl=255 time=0.361 ms --- 10.1.1.1 ping statistics --3 packets transmitted, 3 received, 0\% packet loss, time 1998ms rtt min/avg/max/mdev = 0.326/0.382/0.459/0.056 ms

pe ce interfat se vor trimite pachetele: Opt , iunea -I specica ,a


1 2 3 4 5 6 7 8 9

root@asgard:/home/george# ping 10.1.1.1 -I eth0 -c 3 PING 10.1.1.1 (10.1.1.1) from 10.1.1.2 eth0: 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=255 time=0.331 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=255 time=0.326 ms 64 bytes from 10.1.1.1: icmp_seq=3 ttl=255 time=0.367 ms --- 10.1.1.1 ping statistics --3 packets transmitted, 3 received, 0\% packet loss, time 1998ms rtt min/avg/max/mdev = 0.326/0.341/0.367/0.023 ms

nelimitat de pachete ECHO REQUEST, Opt , iunea -f permite transmiterea unui numar a sa se as (ood) far ECHO REPLY. n acest fel destinat, ia este inundata , tepte raspunsul potent opt n atacuri de mesaje. Datorita , ialului pe care l are aceasta , iune de a folosita DoS (vezi sect iunea 10.4.1), parametrul -f poate folosit doar de c atre root : ,
1 2 3 4 5 6 7 8 9

root@asgard:/home/george# ping -f 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. ................................................... ................................................. CTRL+C --- 10.1.1.1 ping statistics --100 packets transmitted, 3 received, 97% packet loss, time 8148ms rtt min/avg/max/mdev = 0.240/0.389/2.291/0.450 ms, ipg/ewma 12.053/0.364 ms

8.5.2

Traceroute

pachetele Utilitarul traceroute este folosit pentru a testa calea pe care o urmeaza s ntre sursa i destinat ie. El va as a cte un mesaj pentru ecare , , , 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 ) o ret prezent n antetul ecarui pachet. Din motive ce t in de felul n care funct , , ioneaza , ea s apara bucle. Daca un pachet intra este posibil ca n drumul ntre sursa , i destinat , ie sa el va trimis la innit ntre stat ntr-o astfel de bucla, iile ce apart in buclei s i nu va ajunge , , , la destinat niciodata ie. Pentru a preveni o asemenea situat ie, n antetul ec arui pachet , , a fost introdus cmpul TTL. Acest cmp cont maxim de echipamente de , ine numarul ret ea prin care poate trece un pachet nainte de a aruncat. , un pachet are cmpul TTL cu valoarea init (atunci cnd pleaca de la sursa) Daca , iala cu 10, atunci el poate trece prin maxim 10 echipamente de ret egala ea. Al zecelea ,

238

INTRODUCERE N SISTEME DE OPERARE

echipament va arunca pachetul s , i va trimite un mesaj ICMP sursei prin care o va ns , tiint ,a de acest lucru. Trimit , nd acest mesaj, al zecelea echipament s , i va anunt , a identitatea catre sursa pachetului. funct Pe acest sistem se bazeaza , ionarea utilitarului traceroute. Se trimit pachete ce au cmpul TTL congurat la o valoare din ce n ce mai mare. Atunci cnd valoarea TTL a aruncat este 1, va raspunde primul echipament de ret , ea de pe cale s , i va spune ca pachetul trimis. Atunci cnd valoarea TTL este 2, va raspunde al doilea echipament de a aruncat pachetul trimis. n felul aceasta toate echipamentele de pe cale s , i va spune ca pe parcurs vor identicate unul cte unul. Parametrii uzuali ai comenzii traceroute sunt urmatorii:
1

traceroute [-f first_ttl] [-m max_ttl] host

destinat la care se dores host reprezinta , ia pna , te aarea rutei:


1 2 3 4 5 6 7 8

george@asgard:~$ traceroute rol.ro traceroute to rol.ro (195.95.229.171), 30 hops max, 40 byte packets 1 10.1.1.1 (10.1.1.1) 0.429 ms 0.332 ms 0.248 ms 2 10.100.0.1 (10.100.0.1) 0.809 ms 0.657 ms 0.527 ms 3 backbone.hertza.ro (89.165.146.177) 6.286 ms 1.765 ms 2.493 ms 4 84.234.111.41 (84.234.111.41) 6.738 ms 7.507 ms 11.869 ms 5 84.234.107.154 (84.234.107.154) 4.406 ms 1.603 ms 1.625 ms 6 195.95.229.171 (195.95.229.171) 2.715 ms 1.676 ms 1.230 ms

adresa lui s Pentru ecare echipament de pe parcurs este as , ata , i timpul de raspuns succesive. n cazul n care pentru un mesaj trimis nu este primit pentru trei ncercari raspuns, se va as , a caracterul *. Parametrul -f permite congurarea 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 ecare mesaj.
1 2 3 4 5

george@asgard:~$ traceroute -f 4 rol.ro traceroute to rol.ro (195.95.229.171), 30 hops max, 40 byte packets 4 84.234.111.41 (84.234.111.41) 2.008 ms 8.286 ms 10.525 ms 5 84.234.107.154 (84.234.107.154) 3.399 ms 4.614 ms 5.497 ms 6 195.95.229.171 (195.95.229.171) 4.458 ms 2.901 ms 2.947 ms

valoarea maxima a cmpului TTL care va ncercata n Parametrul -m congureaza cazul n care destinat ia nu a fost atins a. Dac a paramerul nu este specicat, se vor testa , cu lungimi de pna la 30 de echipamente. implicit cai
1 2 3 4 5

george@asgard:~$ traceroute -m 3 rol.ro traceroute to rol.ro (195.95.229.171), 4 hops max, 40 byte packets 1 10.1.1.1 (10.1.1.1) 0.404 ms 0.402 ms 0.326 ms 2 10.100.0.1 (10.100.0.1) 0.623 ms 8.407 ms 2.069 ms 3 backbone.hertza.ro (89.165.146.177) 9.707 ms 6.819 ms 7.895 ms

8.5.3

problemele uzuale n cazul congurarilor Cum se depisteaza de ret , ea

doua Atunci cnd apar probleme n congurarile de ret , ea, pentru depistarea lor exista de sus n jos (top-down) s abordari: i de jos n sus ( bottom-up ). Partea de sus ( top ) a unei , la partea de aplicat la conexiunile ret , ele se refera , ii, iar partea de jos (bottom ) se refera zice ntre echipamente.

DE RET CAPITOLUL 8. CONFIGURARI , EA

239

abordarea de jos n sus, deoarece majoritatea problemelor n continuare va analizata dintr-o ret , ea sunt cauzate de conexiunile zice ntre echipamente. presupunem ca nu poate accesata pagina web www.google.ro. n cazul acestei Sa primul lucru care trebuie vericat este faptul ca exista legatur a zica ntre stat abordari , ie a r. n cazul legaturilor s la Ethernet (realizate prin , i switch sau punctul de acces far cablu UTP) conectivitatea se poate verica examinnd led-ul de link de pe placa de led-ul este aprins, exista conexiune ntre stat led-ul este ret , ea. Daca , ie s , i switch. Daca stins, trebuie vericat cablul de ret ea sau funct ionarea switch-ului. , , metoda folosita pentru a verica starea link-ului pentru o interfat de ret n O alta ,a , ea, utila acces zic la stat special atunci cnd nu exista , ie, este utilizarea unui program de genul informat a zica ethtool. Printre altele, acesta ofera , ii detaliate despre tipul de legatur s avnd existenta , i starea ei. Pentru a vedea starea unei interfet , e utilitarul se apeleaza ca parametru numele interfet , ei:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

root@asgard:/home/george# ethtool eth0 Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: MII PHYAD: 32 Transceiver: internal Auto-negotiation: on Supports Wake-on: pumbg Wake-on: d Current message level: 0x00000007 (7) Link detected: yes

conexiune ntre stat n cazul n care Link detected are valoarea yes, exista , ie s ,i are valoarea no, trebuie vericat cablul de ret switch. Daca ea sau funct ionarea , , switch-ului. Urmatorul pas este vericarea existent , ei unui gateway s , i a conexiunii cu acesta. Pentru un gateway a fost congurat trebuie analizat s a verica faptul ca , ierul /etc/network/ interfaces sau rezultatul comenzii route, funct, ie de niciun gateway nu este congurat, trebuie congurat unul. Daca congurat Daca , ie. legatura gateway-ul este congurat, trebuie vericata catre acesta cu ajutorul comenzii ping. vericarea gateway-ului, trebuie vericat DNS-ul. Pentru aceasta trebuie analizat Dupa s ierul /etc/resolv.conf. n cazul n care nu este congurat niciun server DNS, , este congurat un server, trebuie testata legatura trebuie congurat unul. Daca cu acesta cu ajutorul comenzii ping. , ii cu un alt server din Internet. Se poate Pasul urmator este vericarea conectivitat ncerca accesarea unei alte pagini web, se poate testa conectivitatea cu un alt server catre cu ajutorul comenzii ping sau se poate ncerca vericarea caii google.ro cu

240

INTRODUCERE N SISTEME DE OPERARE

avantajul depistarii ajutorul comenzii traceroute. Folosirea traceroute ofera echipamentului de ret , ea n care se opresc pachetele.

8.6
8.6.1

Studii de caz
a parametrilor de ret Vericarea n linie de comanda , ea n Windows

metoda de a verica parametrii de ret Cea mai us , oara , ea n Windows este folosirea din linie de comanda. Pentru a porni utilitarului ipconfig. Acesta se apeleaza interpretorul de comenzi din Windows XP, se merge la StartRun, unde n cmpul pe OK. Open se introduce cmd s , i se apasa Informat , ii despre modul de utilizare al comenzii ipconfig, precum s , i despre parametrii disponibili, se pot obt , ine utiliznd parametrul /?:
1

C:\Documents and Settings\George >ipconfig /?

a niciun parametru va as Apelarea comenzii ipconfig far , a parte din parametrii de ret ea: ,
1 2 3 4 5 6 7 8 9 10 11 12

C:\Documents and Settings\George>ipconfig Windows IP Configuration Ethernet adapter Local Area Connection: Media State . . . . . . . . . . . : Media disconnected Ethernet adapter Wireless Network Connection 2: 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 9 10 11 12 13 14 15 16 17 18

C:\Documents and Settings\George>ipconfig Windows IP Configuration Host Name . . . . . . . . . . . . Primary Dns Suffix . . . . . . . Node Type . . . . . . . . . . . . IP Routing Enabled. . . . . . . . WINS Proxy Enabled. . . . . . . . DNS Suffix Search List. . . . . . Ethernet adapter Local Area Media State . . . : Description . . . : Physical Address. :

/all : : : : : : Asgard Mixed No No lan

Connection: Media disconnected Broadcom 440x 10/100 Integrated Controller 00-40-F4-CC-C5-41

Ethernet adapter Wireless Network Connection 2: Connection-specific DNS Suffix . : lan Description . . . . : Atheros AR5006X Wireless Network Adapter Physical Address. . . . . . . . . : 00-19-7E-0B-7E-65

DE RET CAPITOLUL 8. CONFIGURARI , EA


19 20 21 22 23 24 25 26 27

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

Dhcp Enabled. . . Autoconfiguration IP Address. . . . Subnet Mask . . . Default Gateway . DHCP Server . . . DNS Servers . . . Lease Obtained. . Lease Expires . .

. . . . Enabled . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

n Windows este mai dicil de Congurarea parametrilor de ret , ea din line de comanda realizat dect n Linux. Pentru a putea face acest lucru se foloses , te utilitarul netsh. Informat , ii despre modul de utilizare al acestuia se pot obt , ine folosind parametrul /?:
1

C:\Documents and Settings\George >netsh /?

8.6.2

de ret Congurari , ea n Windows Vista

ator Modul de congurare al unei interfet cu cel , e de ret , ea n Windows Vista este aseman din Windows XP. Diferent a important a ntre ele este dat a de modul n care se acceseaz a , fereastra de congurare a parametrilor. Din meniul Control Panel se alege Network and Internet (gura 8.5).

Figura 8.5: Selectarea Network and Internet din Control Panel Network Sharing Center (gura 8.6). Apoi se selecteaza

Figura 8.6: Selectarea Network Sharing Center se alege Manage Network Connections (gura 8.7). Din noua fereastra e as o lista cu interfet Urmnd ca apoi sa , ata , ele de ret , ea disponibile. Prin efectuarea unui click dreapta pe simbolul asociat unei interfet e va aparea un meniu contextual , ator aseman cu cel din Windows XP (gura 8.8). fereastra de congurare Prin selectarea opt , iunii Properties din acest meniu va as , ata a parametrilor interfet , ei (gura 8.9). Pentru a congura adresa IP a interfet , ei, gateway-ul s , i serverul DNS, se alege itemul Internet Protocol Version 4. celei din Windows XP (gura 8.10). Fereastra de congurare a parametrilor este identica

242

INTRODUCERE N SISTEME DE OPERARE

Figura 8.7: Selectarea Manage Network Connections

Figura 8.8: Meniul contextual corespunzator unei interfet , e de ret , ea

, ile unei interfet Figura 8.9: Proprietat , e de ret , ea

opt n cazul n care este aleasa , iunea Obtain an IP address automatically, adresa IP prin DHCP. Pentru a specica manual parametrii interfet a interfet , ei va congurata , ei opt trebuie aleasa iunea Use the following IP address . ,

DE RET CAPITOLUL 8. CONFIGURARI , EA

243

Figura 8.10: Congurarea parametrilor de ret , ea

8.6.3

Congurarea PPPoE n Linux

PPP (Point to Point Protocol ) este un protocol utilizat pentru comunicat , ia punct-la-punct (comunicat ia dintre dou a noduri conectate direct ntre ele). PPP permite realizarea de , optica. legaturi peste conexiuni zice seriale, linii telefonice, conexiuni radio sau bra 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 trimise printr-o placa de ret ea obis nuit a (ce foloses te cablu UTP). , , , PPPoE este folosit uzual n cadrul serviciilor de tip ADSL sau Internet prin cablu TV. Daca legatura zica dintre calculator s , i modem se realizeaza prin cablu UTP, atunci este foarte dintre calculator s foloseasca PPPoE. Pentru a probabil ca legatura logica , i modem sa acceseze Internetul, utilizatorul trebuie mai nti sa stabileasca o conexiune putea sa PPP cu modemul. de cele mai mule ori, autenticarea utilizatorului. Stabilirea unei conexiuni PPP necesita, pe baza unui nume de utilizator s Aceasta se realizeaza , i a unei parole furnizate de catre ISP (Internet Service Provider furnizorul de servicii de Internet). Pentru congurarea parametrilor conexiunii PPP, inclusiv a parametrilor necesari metoda este folosirea utilitarului pppoeconf. Instalarea autenticarii, cea mai us , oara 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, cu pppoeconf se vor instala s odata i toate dependint , , ele sale. parte, odata congurata conexiunea PPP cu ajutorul pppoeconf, acesta se va Pe de alta ocupa de realizarea tuturor s unui script , ierelor de congurare, inclusiv de adaugarea care la pornirea sistemului de operare va realiza conectarea prin PPP. Pentru congurarea PPPoE sunt necesare urmatoarele s , iere (ele sunt create sau actualizate automat de catre pppoeconf):

244

INTRODUCERE N SISTEME DE OPERARE

/etc/network/interfaces /etc/ppp/pap-secrets /etc/ppp/peers/dslprovider


trebuie Ultimul dintre s , iere poate avea orice nume s , i se poate aa n orice loc, nsa specicat n cadrul s , ierului /etc/network/interfaces. Un exemplu de /etc/network/interfaces este urmatorul:
1 2 3 4 5 6 7 8 9 10 11 12 13 14

# The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet manual auto dsl-provider iface dsl-provider inet ppp pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf provider dsl-provider auto eth0

folosind protocoale specializate. Un Autenticarea conexiunii PPP se realizeaza exemplu de s /etc/ppp/pap-secrets, n care sunt trecute informat, iile , ier este urmatorul: necesare autenticarii,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

[...] # INBOUND connections # Every regular user can use PPP and has to use passwords from /etc/passwd * hostname "" * # UserIDs that cannot # other accounts that guest hostname "*" master hostname "*" root hostname "*" support hostname "*" stats hostname "*" # OUTBOUND connections # 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 "student" * "usorules" use PPP at all. Check your /etc/passwd and add any should not be able to use pppd! -

DE RET CAPITOLUL 8. CONFIGURARI , EA

245

n s /etc/ppp/peers/dslprovider sunt trecute informat, ii legate de , ierul parametrii conexiunii PPP, alt , ii dect cei de autenticare:
1 2 3 4 5 6 7 8 9 10 11 12 13 14

# Minimalistic default options file for DSL/PPPoE connections noipdefault defaultroute replacedefaultroute hide-password noauth persist #mtu 1492 #persist #holdoff 20 plugin rp-pppoe.so eth0 user "student" usepeerdns

cu Pentru a activa o conexiune PPP se foloses , te comanda pon. Ea este echivalenta parametrul up al comenzii ifconfig. Pentru a dezactiva o conexiune PPP se foloses , te cu parametrul down al comenzii ifconfig. comanda poff, echivalenta pentru a funct de Un amanunt important de precizat este ca, , iona prin PPPoE, o interfat ,a congurarea unei adrese IP. Interfat ret , ea Ethernet nu necesita , a de ret , ea Ethernet este indirect pentru conectarea la Internet: prin ea sunt trimise datele catre folosita modemm acesta asigurnd mai departe legatura catre Internet. cu o interfat numita ppp0: n acest caz adresa IP este asociata , a virtuala
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

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 [...] lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 [...] Link encap:Point-to-Point Protocol inet addr:192.168.10.3 P-t-P:10.0.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1 RX packets:176 errors:0 dropped:0 overruns:0 frame:0 TX packets:180 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:105255 (102.7 KiB) TX bytes:13991 (13.6 KiB)

ppp0

cum se poate observa, interfat adresa IP. n schimb Dupa , a eth0 nu are congurata conexiunii PPP, este cea care fost congurata cu adresa IP interfat , a ppp0, asociata 192.168.10.3.

Cuvinte cheie

ret, ea de calculatoare LAN, MAN, WAN


IP protocolul IP; adresa

MAC adresa

Ethernet UTP

246

INTRODUCERE N SISTEME DE OPERARE

ruter unicast, multicast, broadcast


de (sub)ret adresa , ea

/etc/network/interfaces /etc/resolv.conf /etc/hosts route DHCP dhclient ping traceroute ipcong PPPoE

default gateway DNS switch Access Point DHCP


congurare temporara/permanent a; congurare statica/dinamic a

ifcong

ntrebari sa testeze conectivitatea catre 1. Un utilizator ncearca cs.pub.ro cu ajutorul utilizatorul comenzii ping: ping cs.pub.ro s Totus , i testul reus , es , te. , i, daca n bara de adrese a browser-ului cs.pub.ro, pagina web respectiva nu tasteaza Care poate motivul pentru care cele doua teste au rezultate poate accesata. diferite?

K serverul web de la adresa cs.pub.ro este oprit


K utilizarea comenzii ping este gres , ita

K comanda ping a oprit serverul web


informat K utilitarul ping nu ofera , ii despre conexiunea cu cs.pub.ro 2. Se poate congura adresa 10.138.257.134 pe interfat , a de ret , ea eth0?

K da, oricnd
este singura interfat K da, doar daca , a a sistemului

K da, doar n situat, ia n care este congurat un server DNS K nu


adresa IP 172.16.150.200 s 3. Dndu-se o stat , ie care are congurata , i masca de ret , ea 255.255.255.0, care este adresa ret , elei din care face parte stat , ia?

K 172.0.0.0 K 172.16.0.0 K 172.16.150.0 K 172.16.150.200


testeze 4. Des legatura la Internet funct utilizatorul Dorel a dorit sa ,i , iona, conectivitatea cu gateway-ul cu ajutorul comenzii ping -f 192.168.10.1.

DE RET CAPITOLUL 8. CONFIGURARI , EA

247

s La scurt timp el a fost contactat de administratorul de ret , ea care l-a rugat sa ,i verice calculatorul mpotriva virus , ilor. Acest lucru s-a petrecut deoarece:

K Dorel foloseste Linux s , i nu Windows, la fel ca majoritatea celorlalt , i utilizatori. K Dorel nu a repornit calculatorul de mult timp. K Dorel a generat foarte mult trac n timp scurt, lucru specic virus , ilor.
cripteze email-urile trimise. K Dorel nu obisnuies , te sa 5. Rolul serviciului DNS este de a:

K asocia nume de domenii cu adrese MAC K asocia nume de domenii cu adrese IP K asocia adrese IP cu adrese MAC K asocia adresa IP cu numele utilizatorului
, te urmatoarea 6. n s linie: , ierul /etc/network/interfaces se gases
1

iface eth0 inet dhcp

este data urmatoarea n linia de comanda comanda:


1

ifconfig eth0 192.168.124.150

care stat Care va adresa IP a interfet dupa , ia este repornita. , ei eth0 imediat dupa repornirea stat , iei? a fost ultima adresa congurata de root. K 192.168.124.150, pentru ca aceasta este adresa furnizata stat K 192.168.124.150 daca , iei de serverul DHCP IP pentru ca s-a creat un conict prin K interfat, a nu va avea nicio adresa moduri congurarea adresei IP n doua IP pentru ca nu a fost dat parametrul K interfat, a nu va avea nicio adresa netmask comenzii ifconfig cu ajutorul s 7. Congurarile permanente se realizeaza , ierului /etc/network/ip. Congurarile temporare s i pierd efectul o dat a cu repornirea sistemului. , K adevarat, fals K adevarat, adevarat

K fals, fals
K fals, adevarat pentru a identica adresa ret 8. Masca de ret , ea este utilizata , elei din cadrul unei adrese IP. Pentru a putea accesa serverele din Internet este necesara congurarea unui server DNS. K adevarat, fals K adevarat, adevarat

248

INTRODUCERE N SISTEME DE OPERARE

K fals, fals
K fals, adevarat 9. Cu ajutorul comenzii traceroute se poate testa: , imea de banda a unei conexiuni K Lat s K Calea dintre sursa , i destinat , ie

K Funct, ionarea serverului web de pe stat, ia destinat, ie


s K Existent, a unui ruter ntre sursa , i destinat , ie un server DNS nu este specicat, care dintre urmatoarele 10. Daca comenzi este funct probabil sa ioneze: ,

K ping www.google.ro K ping cs.pub.ro K ping localhost K ping dns.localdomain.ro

Capitolul 9 Servicii de ret , ea


When I took ofce, 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

din acest capitol? Ce se nvat ,a de protocoale Conceptul de protocol s , i stiva

Modelul client-server Folosirea porturilor


telnet, ssh, wget, curl Execut, ia comenzilor la distant, a: electronica (email) Funct, ionarea serviciului de pos , ta

Funct, ionarea serviciului de web


, i de partajare a s Modalitat , ierelor: SMB, FTP

9.1
9.1.1

Concepte specice aplicat , iilor de ret , ea


Stiva TCP/IP

e dezvoltate odata cu sfrs Sistemele de calcul au nceput sa , itul celui de al doilea razboi comunicat mondial. Cu toate acestea, problematica asigurarii , iei ntre sisteme aate n locat ii la mare distant a a fost formulat a abia spre nceputul anilor 70, de catre US DoD , , arii Nat (US Department of Defense Ministerul Apar , ionale al Statelor Unite). Proiectul 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 ). modul n care doua dispozitive Un protocol este un set de reguli care guverneaza informat schimba ie ntr-o ret ea s i asigur a coerent a comunicat iei. , , , , ,

249

250

INTRODUCERE N SISTEME DE OPERARE

un set de protocoale ce comunica ntre ele prin de protocoale reprezinta O stiva funct ii (numite primitive) clar denite. , de protocoale este n general privita ca o succesiune de niveluri. Fiecare dintre O stiva niveluri este descris de:

un set de funct, ii pe care le ndeplines , te;


de la nivelul inferior; un set de parametri pe care i as , teapta nivelului imediat superior. serviciile pe care le ofera nu vor putea comunica ntre ele direct dect daca se aa pe Protocoalele dintr-o stiva niveluri adiacente. n Descrierea unei solut , ii de comunicare prin prisma unei stive de protocoale ofera , ii procesului de standardizare. Astfel, schimbarea (sau primul rnd avantajul exibilitat poate facut a far a a solicita modicari n simpla optimizare) unui protocol din stiva restul protocoalelor. nceputurile ret , elelor de date au fost marcate de existent , a mai multor protocoale de des comunicat , ie, dezvoltate n paralel, de vendori diferit , i. Problema consta n faptul ca, ,i protocoale, de la doi vendori diferit foarte bine specicat doua , i, descriau amndoua , iile comunice unul cu celalalt. propriilor dispozitive, nu puteau sa Astfel, pentru a face intercomunicarea ntre echipamentele de ret posibila , ea produse de vendori diferit , i, s-a ce un protocol este acceptat introdus conceptul de standardizare a unui protocol. Odata ca standard, el devine dintr-un set de reguli, un set comun de reguli, ind recunoscut din punct de vedere procedural s , i funct , ional de tot , i vendorii. Pentru a descrie prelucrarile efectuate asupra datelor trimise de la utilizator spre mediul patru niveluri, prezentate n gura 9.1: de transmisie, stiva TCP/IP identica Aplicat ie , Transport , Ret ea (sau Internet) s , , , i Acces la mediu.

Figura 9.1: Stiva TCP/IP

CAPITOLUL 9. SERVICII DE RET , EA Nivelul aplicat , ie

251

acestuia modalitatea de Nivelul aplicat , i ofera , ie este cel mai apropiat de utilizator s accesare a serviciului de ret ea. Un serviciu de ret ea poate 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 grupate n:

serviciul de transfer al s , ierelor, ce poate implementat folosind FTP (File Transfer


Protocol ), HTTP (HyperText Transfer Protocol ) etc. electronica, ce se bazeaza pe urmatoarele serviciul de pos protocoale: SMTP , ta (Simple Mail Transfer Protocol ), POP3 (Post Ofce Protocol 3 ), IMAP (Internet Mail Access Protocol ) telnet, ssh, rlogin serviciul de executarea comenzilor la distant, a:

alte protocoale:

DNS (Domain Name System), DHCP (Dynamic Host Conguration Protocol ), SNMP (Simple Network Management Protocol )

Nivelul transport control al uxului Nivelul transport este responsabil cu probleme legate de sigurant , a, multiplexarea comunicat s , i corect , ie de erori. Tot la nivelul transport este realizata , iei prin s specicarea porturilor sursa , i destinat , ie. Cele mai importante protocoale de nivel transport sunt TCP (Transmission Control Protocol ) s , i UDP (User Datagram Protocol ). nainte de a trimite datele va negocia TCP este un protocol orientat conexiune, adica parametrii de comunicat ie ntre entit at ile participante la comunicat , , , ie, iar apoi pe tot la destinat parcursul va asigura reordonarea pachetelor ajunse n ordine gres , ita , 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. prin convorbiri telefonice, se stabiles te ntre sursa s i destinatie o conexiune dedicat a , , faptul ca ret Deasemenea acest exemplu releva , ea, nainte de nceperea comunicarii. ntr-un protocol orientat pe conexiune, destinat , ia este mereu contactata nainte de nceperea transmisiei propriu-zise (n analogia cu soneria telefonului). UDP este un protocol neorientat conexiune. Astfel, UDP nu se va preocupa de init , ierea sau terminarea conexiunii, de pierderea pachetelor sau doar a succesiunii a a verica macar destinat va acestora. UDP va ncepe transmisia far daca , ia nala accepta respectivul trac. Des , i 95% din tracul Internet foloses , te protocolul TCP, pentru ret , elele locale numeroase pe UDP: DNS, SNMP, TFTP. Motivul principal l reprezinta gradul servicii se bazeaza redus al erorilor n ret elele locale (spre deosebire de WAN). UDP este mai simplu de , adaugat implementat, dar s a , i mai ecient dect TCP: antetul (informat , ia suplimentara de ecare protocol) UDP este doar de 8 octet i, fat a de 20 de octet i ct are TCP. , , ,

252 Nivelul ret , ea

INTRODUCERE N SISTEME DE OPERARE

cu transmiterea pachetelor de la o sursa la o destinat Nivelul ret , ie , ea (Internet) se ocupa indiferent n ce ret precizata, ea se a a aceasta. Alegerea c aii pachetului prin ret elele , , intermediare, comutarea lui dintr-o o ret , ea n alta s , i optimizarea traseelor alese sunt responsabilitatea protocolului de ret , ea.

Nivelul acces la mediu cu toate problemele legate de transmiterea efectiva a Nivelul acces la mediu se ocupa a zica, incluznd s unui pachet pe o legatur , i aspectele legate de tehnologii s , i de medii de transmisie.

9.1.2

a stivei TCP/IP Implementarea part , iala

transferul ct mai rapid al datelor n general pe Dispozitivele de interconectare asigura baza unor algoritmi de decizie. Un dispozitiv de interconectare poate n acelas , i timp tipuri de ret asigura conversia ntre doua ea (dou a protocoale) diferite. , Criteriul principal de evaluare a ecient , ei unui dispozitiv de interconectare este numarul . n funct de pachete comutate pe secunda ie de complexitatea deciziei de comutare , numarul de pachete prelucrate scade. Pentru echipamentele de ret , ea ce folosesc un redus de criterii pentru decizie, se renunt la implementarea nivelurilor superioare numar ,a din stiva de protocoale TCP/IP. clasa de dispozitive de interconectare s deciziile de comutare doar O prima , i bazeaza categorie intra switchpe informat iile protocoalelor de nivel acces la mediu. n aceast a , urile, dar s , i AP-urile (access point ). de dispozitive va analiza att informat A doua clasa , iile de nivel acces la mediu, ct s , i pe cele de nivel ret , ea, procesul de decizie ind 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 nteleaga cont exemplu un ruter nu trebuie sa , inutul unui pachet de date pentru a putea Astfel, ruterul are nevoie doar de informat lua decizia de trimitere pe calea optima. , iile de niveluri ale stivei nivel acces la mediu s , i nivel ret , ea s , i va implementa doar primele doua TCP/IP.

stat Figura 9.2: Comunicat , ia ntre doua , ii aate n ret , ele diferite prezetata n gura 9.2, n care un client de web aat Considernd o topologie simpla, stat n ret pe stat , ia B acceseaza un server aat pe stat , ia A. Cele doua , ii se aa , 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 r pentru stat conectivitate fara ia B. ,

CAPITOLUL 9. SERVICII DE RET , EA

253

Modelul de comunicat , ie poate descris generic folosind stiva de protocoale TCP/IP precum n gura 9.3.

a comunicat Figura 9.3: Descrierea generica , iei n gura 9.2, la nivelul aplicat Pentru topologia considerata , ie se foloses , te serviciul de web bazat pe protocolul HTTP. La nivelul transport s i nivelul ret ea se foloses , , , te TCP, diversitate de respectiv IP. Spre deosebire de nivelul aplicat , ie, unde putem avea o larga protocoale folosite, la nivelurile transport s , i ret , ea peste 95% din trac-ul n Internet este trac TCP/IP. doua tehnologii dominante: Pentru nivelul acces la mediu n ret , elele locale exista Ethernet (IEEE 802.3) s , i WLAN (Wireless LAN, IEEE 802.11). Conectivitatea ntre cele standarde poate realizata e de ruter (cu o interfat 802.11 s doua ,a , i una Ethernet), e de un AP (acces point ). interpreteze informat la nivelul ret Un AP nu are nevoie sa , ia aata , ea pentru a realiza a r. comutarea ntre ret , eaua Ethernet s , i ret , eaua far dispozitive de interconectare (ruterul s Cele doua , i AP-ul) au fost gurate ca avnd cte o stiva part ial a de protocoale pe ecare dintre interfet , , ele de ret , ea. Stiva interfet , ei de pentru a lua decizia de comutare a pachetului (alegerea interfet intrare va folosita , ei de interfet ies , ire), un echipament de interconectare putnd avea mai mult de doua , e. Dupa determinarea interfet ei de ies ire se va folosi stiva acesteia (parametrii specici acestei , , interfet , e) pentru eventuala reformatare a pachetului. Pentru exemplul considerat, uxul de date ntre stat , ia A s , i stat , ia B, va solicita funct , ii din mai multe protocoale, acestea ind prezentate n gura 9.4.

stat Figura 9.4: Descrierea comunicat , iei ntre doua , ii aate n ret , ele diferite

254

INTRODUCERE N SISTEME DE OPERARE

9.1.3

Modelul client-server

este bazata Pentru implementarea accesului la serviciile de ret , ea, arhitectura folosita pe denirea a doua componente: cea de pe modelul client-server. Acesta se bazeaza 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 de la alte entitat ea, oferind acestora un serviciu. , mecanismul de interogare a unui server s Un client este un program ce ofera ,i eventual de formatare a raspunsului primit de la acesta. Un exemplu de model client server este serviciul de web. Acest serviciu presupune rularea unui server HTTP (ex: Apache, Microsoft IIS etc). Aplicat , ia client poate orice navigator (broswer ). aplicat Chiar pentru exemplul serviciului de web se poate observa ca , ia client integreaza n realitate mai multe aplicat ii client: pentru HTTP, dar s i pentru FTP, TFTP. , , centralizarea serviciilor s Modelul client-server ofera , i a fost n primul rnd promovat ca de reducere a costurilor totale a unui ret o metoda costului , ele. Ca urmare a scaderii motivat resurselor hardware, principala ie a centraliz arii serviciilor a devenit monitorizarea , s , i securizarea ret , elei.

Figura 9.5: Modelul client-server s , i modelul peer-to-peer Not , iunea de server s-a extins s , i pentru sistemele de calcul, specicat , iile hardware ale unui server depinznd de serviciul pe care l ndeplines Spre exemplu, un server , te. de stocare va avea un procesor relativ modest, dar un spat , iu impresionant de stocare, precum s i mecanisme de redundant a a discurilor. , , Modelul punct-la-punct (peer to peer ) este de fapt un model client-server ascuns, as ,a cum se poate vedea s i din gura 9.5. Fiecare entitate ce particip a la comunicat ie poate , , juca att rol de client ct s , i rol de server. Spre deosebire de modelul client-server, modelul punct-la-punct este un model descentralizat. acest model pentru a nu folosi un Multe din programele de partajare de s , iere utilizeaza intermedieze comunicat server care sa ia. Un model client-server de partajare a s , , ierelor

CAPITOLUL 9. SERVICII DE RET , EA

255

treaca prin server, ntre client , i presupune ca orice pachet schimbat ntre cei doi client , i sa ceea ce aduce att o latent , a, ct s , i o ncarcare a ret , elei s , i a serverului. serviciilor este faptul ca serverul va un punct Principalul dezavantaj al centralizarii serviciul este ntrerupt. critic n ret , ea: n momentul n care serverul nu funct , ioneaza, ntr-o ret ea punct-la-punct acest dezavantaj este evitat. ,

9.1.4

Porturi

n scopul reducerii costurilor unei ret , ele, mai multe servicii pot oferite de aceeas ,i Spre exemplu, pentru o ret serverele de DHCP, s mas , ina. , ea locala, , i DNS pot integrate stat pe o singura ie, deoarece resursele solicitate de ecare serviciu sunt relativ reduse. , diferent Cum va putea totus , i un astfel de server sa , 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 identicare a serviciilor (a protocolului de nivel aplicat , ie) denumit port. reprezentat pe 16 bit la nivelul transport (n Portul este un numar , i, ce identica de protocoalele TCP sau UDP) un serviciu specic. informat a , ia adaugat a mai multor servicii, ct s Mecanismul de porturi permite att oferirea simultana ,i diferent ierea ntre cereri de r aspuns venite din conexiuni diferite, adic a folosirea mai , multor servicii simultan. Astfel, n antetul de nivel transport vom preciza att un port serviciul apelat, ct s pe care este as destinat , ie, ce identica , i un port sursa, , teptat prin precizarea parametrilor de nivel ret raspunsul. O conexiune va descrisa ea s , , i de port destinat nivel transport: adresa IP destinat , ie, adresa IP sursa, , ie s , i port sursa. de pe aceeas sesiuni de SSH catre Daca acelas , i stat , ie sunt lansate doua , i server, se doua conexiuni diferite avnd aceleas s creeaza , i adrese IP (sursa , i destinat , ie), acelas ,i diferit. port destinat , ie, dar portul sursa Porturile sunt numere reprezentate pe 16 bit , i, valorile denite pentru porturi ind la 1023 sunt rezervate pentru cele mai cuprinse n intervalul [1, 65535]. Porturile pna importante protocoale ale Internet-ului, ind denumite porturi rezervate (known ports). Porturile rezervate sunt asociate unui protocol pe care serverul l foloses , te n oferirea unui serviciu. Rezumnd: ecare serviciu de ret , ea este oferit folosind un protocol de nivel aplicat , ie, asociat un port, n unele cazuri doua sau mai multe. ecare protocol are la rndul sau n tabelul 9.1 sunt prezentate cteva dintre protocoalele importante s , i porturile folosite. serviciul de FTP are rezervate doua porturi: 21 (pentru Putem observa spre exemplu ca stabilirea conexiunii) s , i 20 (pentru transferul efectiv de s , iere). va trebui sa as lista porturilor Pentru a determina serviciile oferite pe stat , ia locala , am deschise (aate n stare LISTEN). Pentru aceasta putem folosi utilitarul netsat (vezi sect , iunea 10.3.1):

256

INTRODUCERE N SISTEME DE OPERARE Tabelul 9.1: Asocieri port-serviciu pentru cteva servicii raspndite Port Serviciu 20 80 21 110 22 143 23 161 25 443 53 993 FTP (data) HTTP FTP (conexiune) POP3 SSH IMAP telnet SNMP SMTP HTTPS DNS IMAPS

1 2 3 4 5 6 7 8 9

root@kiwi~# netstat --tcp --listening Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address tcp 0 0 *:sunrpc tcp 0 0 *:www tcp 0 0 *:webcache tcp 0 0 *:auth tcp 0 0 *:ftp tcp 0 0 *:smtp

Foreign Address *:* *:* *:* *:* *:* *:*

State LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN

portul ftp (adica portul 21) este Din rezultatul comenzii de mai sus se poate deduce ca o aplicat deschis. Altfel spus, exista , ie ce foloses , te acest port pentru a accepta conexiuni. n general, serviciile sunt rulate pe porturile rezervate, dar prin congurarea serviciilor putem schimba portul pe care se vor accepta conexiunile. Pentru a obt , ine mai multe pe portul 21 putem folosi clientul de telnet ce va informat , ii despre aplicat , ia ce ruleaza deschide o conexiune pe acest port:
1 2 3 4 5

razvan@kiwi:~$ telnet kiwi.cs.pub.ro 21 Trying 141.85.99.5... Connected to kiwi.cs.pub.ro. Escape character is ^]. 220 Welcome to Kiwi FTP service. vsFTPd 2.0.3 is in service

oprim serviciul de FTP s serverul de SSH sa primeasca cereri pe Daca , i reconguram portul 21, rezultatul comenzii telnet va :
1 2 3 4 5

razvan@kiwi:~$ telnet kiwi.cs.pub.ro 21 Trying 141.85.99.5... Connected to kiwi.cs.pub.ro. Escape character is ^]. SSH-2.0-OpenSSH_3.8.1p1 Debian-8.sarge.4

nu as Din motive de securitate serverele pot congurate sa , eze informat , ii referitoare as la versiunea serviciului, sau sa eze informat ii false. , , init n cazul n care se ncearca , ierea unei sesiuni de telnet pe un port ce nu este deschis va ntors mesajul de conexiune refuzata:

CAPITOLUL 9. SERVICII DE RET , EA


1 2 3

257

razvan@kiwi:~$ telnet kiwi.cs.pub.ro 29 Trying 141.85.99.5... telnet: Unable to connect to remote host: Connection refused

9.2

Execut , ia comenzilor la distant ,a

(remote connection) este oferit de mai Serviciul de execut , ie al comenzilor la distant ,a multe protocoale, cele mai importante ind: telnet, rlogin, RSH, SSH. pe realizarea unei conexiuni necriptate (n Protocoalele telnet, rlogin s , i RSH se bazeaza text clar). Spre deosebire de acestea, protocolul SSH stabiles , te o conexiune criptata, att pentru lansarea comenzilor la distant ct s conexiune folosita , a, , i pentru transferul de s , iere.

9.2.1

Telnet

granit dintre serviciu de ret n practica, ,a , ea s , i protocol de nivel aplicat , ie este, deseori, una greu de evident iat. Astfel, putem spune c a serviciul de execut ie al comenzilor la , , este oferit de protocolul telnet, dar la fel de corect se poate vorbi de serviciul distant ,a peste telnet. Prin serviciul telnet se nt , elege posibilitatea execut , iei comenzilor la distant ,a (necriptata). o conexiune nesigura denumirea unui protocol de nivel aplicat Pe lnga , ie, s , i a unui serviciu de ret , ea, telnet protocolul (a procesului care din punctul este s , i denumirea aplicat , iei ce implementeaza serviciul de ret de vedere al sistemului de operare ofera , ea). Aplicat telnet este o aplicat, ie client-server: procesul server se numes , ia , te telenetd, iar clientul se numes te telnet . Serverul de telnet este responsabil cu , acceptarea sesiunilor init , iate de client , i. O sesiune de telnet pune la dispozit , ia aplicat , iei autenticare) un interpretor de comenzi ce ruleaza pe server. n mod client (dupa diferent unui implicit, nu exista e ntre resursele disponibile unui utilizator n urma rularii , interpretor de comenzi local, s , i resursele accesibile printr-o sesiune de telnet de catre acelas , i utilizator.
1 2 3 4 5 6 7 8 9

rookie@apple~$ telnet 141.85.99.5 Trying 141.85.99.5... Connected to 141.85.99.5. Escape character is ^]. Fedora release 7 (Moonshine) Kernel 2.6.21-1.3194.fc7 on an i686 login: manager Password: manager@kiwi~$

o sesiune telnet catre n exemplul de mai sus utilizatorul rookie init serverul cu , iaza as adresa 141.85.99.5. Dupa , area mesajelor de ntmpinare (denumite MotD Message of the Day ) este as at prompt-ul de login. Este folosit numele de utilizator , acestui cont. Dupa autenticare va aparea manager s prompt-ul , i parola asociata interpretorului de comenzi.

258

INTRODUCERE N SISTEME DE OPERARE

Protocolul telnet a fost standardizat pentru a permite clientului de telnet init , ierea de conexiuni la distant ,a s , i catre alte servere. Majoritatea implementarilor serverelor permit init ierea unei conexiuni prin clientul de telnet (cu unele except , , ii notabile, precum client , ii RDS, carora le este blocat portul 25 al serviciului SMTP). pe stat Pentru a init , ia o conexiune pe serverul de HTTP ce ruleaza , ia cu adresa IP aplicat 141.85.99.5 trebuie rulata ia client telnet cu precizarea destinat , , iei s , i a portului serviciu (implicit 80). Dupa stabilirea sesiunii se pot executa inclusiv pe care ruleaza sintaxa protocolului HTTP, spre exemplu pentru a obt comenzi ce respecta , ine o pagina de pagina ce se dores se foloses , te comanda HTTP GET, urmata , te as , ata.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

razvan@kiwi:~$ telnet 141.85.99.5 80 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is ^]. GET /~razvan/test.html HTTP/1.0 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 <br />Pagina de test pentru cursul USO - Servicii de Retea <br /> Connection closed by foreign host.

pentru terminarea unei sesiuni de telnet se poate folosi Este important de ret , inut ca 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. dupa modelul client-server. Pentru a init Protocolul funct , ioneaza , ia o conexiune, clientul dupa autenticarea de SSH trimite o cerere catre serverul de SSH, iar acesta din urma, clientului, permite transferul de date. implementare a protocolului SSH 2.0 este varianta open-source numita Cea mai ntalnita OpenSSH. dar poate Protocolul este adesea folosit pentru executarea comenzilor la distant , a, deasemenea utilizat s , i pentru transfer securizat de s , iere sau tunelarea altor protocoale multe alte protocoale de nivel aplicat mai nesigure (FTP). Exista , ie, mai vechi, cu care se pot obt Toate aceste , ine aceleas , i efecte precum cu SSH: FTP, rlogin, rsh, telnet. n comun aceeas protocoale au nsa folosesc metode de autenticare slabe, , i slabiciune: ce presupun trimiterea parolelor pe ret ea n format text clar (clear text ). Formatul text clar , un risc maxim de securitate, capturarea parolelor facndu-se reprezinta relativ simplu de cu intent o persoana ii malit ioase. , ,

CAPITOLUL 9. SERVICII DE RET , EA

259

, ii, SSH foloses Pentru asigurarea securitat , te algoritmul RSA de generare de chei publice chei, cheia privata trebuie pastrat s a , i numele celor doua , i private. Dupa cum denota s iar cea publica poate cunoscuta de oricine. Exista o strnsa ntotdeauna secreta, ntre cele doua chei, care face imposibila derivarea cheii private din relat , ie matematica dar care permite decriptarea unui mesaj criptat cu una dintre chei, folosind cea publica, cheie. Daca se dores cealalta destinatarul X, tot , te trimiterea unui mesaj privat catre a destinatarului (ind publica, ce trebuie facut este criptarea mesajului cu cheia publica lumea are acces la aceasta cheie). Odata criptat, acest mesaj poate decriptat toata el este singurul care det corespunzatoare doar de destinatarul X, caci , ine cheia privata cheii publice cu care s-a facut criptarea.

la distant Utilizarea SSH pentru efectuarea conectarii ,a Comanda de conectare la un server SSH are doi parametri important numele , i: 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 IP. Daca se dores pe care serviciul de DNS l va traduce ntr-o adresa , te conectarea la DNS, se poate introduce direct IP-ul un server dar nu se cunoas , te numele sau se serverului. Cnd un client init iaz a o conexiune ssh pe un server, trebuie sa , conecteze folosind un utilizator existent pe acel server pentru a putea avea acces la utilizatorul n contul caruia interpretorul de comenzi. Parametrul bogdand specica se stabilirea conexiunii. va intra dupa
1 2 3 4 5 6

razvan@kiwi:~$ ssh bogdand@securessh.pub.ro Password: Last login: Wed Sep 19 14:37:29 2007 from 86.121.138.243 Welcome to the dark side.. weve got cookies! bogdand@securessh:~$

n rezultatul comenzii de mai sus se poate observa faptul ca s-au mai facut conexiuni att ora s anterioare pe acel server de SSH, ind oferita , i data ultimei conexiuni, ct s ,i adresa IP de la care s-a realizat conexiunea. pentru prima data o conexiune catre Cnd un client de ssh init un server nou, , iaza va trebui sa se autentice catre acesta din urma client. Fiecare server de SSH are un n comunicat identicator unic (host key ) cu care se autentica Acest , ia cu client , ii. identicator este implementat prin chei publice s La primirea unei , i chei private. cheia sa publica, facnd conexiuni de la un client, serverul ofera astfel posibila aceasta cheie autenticarea. La acceptarea cheii publice de la server, clientul adauga n s conexiune pe care acest client o va face , ierul known_hosts. Astfel, urmatoarea catre server nu va mai necesita transferul cheii publice, aceasta existnd deja stocata pe client.
1 2 3 4 5 6

razvan@kiwi:~$ ssh bogdand@82.77.5.245 The authenticity of host 82.77.5.245 (82.77.5.245) cant be established . RSA key fingerprint is 11:94:89:c3:e5:fe:c3:6c:2e:ab:f6:e2:bd:6d:bb:e7. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 82.77.5.245 (RSA) to the list of known hosts . Password:

260
7 8 9

INTRODUCERE N SISTEME DE OPERARE

Have a lot of fun... bogdand@server:~$

la un Un utilitar pentru sistemele Windows ce permite conectarea n linie de comanda server de SSH este aplicat , ia PuTTY. PuTTY este disponibil gratuit s , i este un client pentru protocolul SSH, telnet, rlogin, dar poate folosit s i n comunicat iile TCP raw. O privire de , , a online1 . ansamblu asupra opt , iunilor oferite de client , ii important , i de SSH poate gasit

Utilizarea SSH pentru rularea de comenzi la distant ,a a utilitarul ssh permite precizarea unei liste de parametri, a Sintaxa completa dupa utilizatorului s i a adresei destinat , , ie, precum s , i a unei comenzi ce va rulata nu este precizata o comanda se va rula un interpretor de stabilirea sesiunii SSH. Daca comenzi (cel mai adesea /bin/bash). comenzi separate prin ;. Apoi se ruleaza n exemplul de mai jos sunt rulate local doua aceleas , i comenzi (de data aceasta protejate ntre ghilimele), rezultatul as , at ind cel lor pe stat al executarii ia destinat ie, dup a autenticarea cu utilizatorul bogdand . Se , , din exemplu ca autenticarea se realizeaza far a a interoga utilizatorul, aceasta observa pe baza de chei (vezi sect ind rezultatul unei autenticari , iunea 10.5.2):
1 2 3 4 5 6 7 8 9

rrazvan@apple:~$ hostname; pwd apple /home/rrazvan rrazvan@apple:~$ ssh bogdand@141.85.99.5 "hostname; kiwi /home/users/bogdand rrazvan@apple:~$ pwd"

Copierea s , ierelor la distant ,a Efectuarea transferului de date se poate face prin utilitarul scp, ce face parte din pachetul ssh. Ideea din spatele scp este de a folosi canalul securizat oferit de ssh pentru a face transfer de date n format text sau binar ntre client s , i server. Sintaxa scp atoare este aseman comenzii tradit , ionale cp:
1

scp sursa destinatie

se dores e un Daca , te transferul mai multor s , iere sau directoare, destinat , ia trebuie sa director existent. Pentru a efectua o copiere de s , 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:~$ scp CiscoTFTP.exe bogdand@82.77.5.245:~/work Password: CiscoTFTP.exe 100% 1296KB 129.6KB/s razvan@kiwi:~$
1

00:10

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

CAPITOLUL 9. SERVICII DE RET , EA

261

pentru partajarea Pentru platforma Windows o aplicat , ie open source ce poate folosita graca pentru de s , iere peste o conexiune SSH este WinSCP. Aceasta ofera o interfat ,a transferul de s , 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 n /etc/ssh/sshd_config, s congurare pentru serverul de SSH se aa , i cont , ine conexiuni SSH sau opt directive standard precum: portul pe care se accepta iunea de a , de SSH. putea rula aplicat , ii X peste conexiunea criptata
1 2 3 4 5

razvan@kiwi:/etc/ssh$ cat sshd_config [...] Port 22 X11Forwarding yes [...]

Autenticarea cu chei a utilizarii SSH, se poate folosi autenticarea cu chei publice Pentru o securitate sporita o asociere s a , i chei private. n cazul standard al folosirii SSH, ecare stat , ie pastreaz bazata ntre utilizator s i parol a n mod automat. Dac a se dores te ns a utilizarea cript arii , , asociere manual. Pentru a pe chei, devine obligat , ia utilizatorului de a crea aceasta cu genera o pereche de chei se poate folosi utilitarul ssh-keygen instalat odata pachetul OpenSSH.
1 2 3 4 5 6 7 8 9 10 11

razvan@kiwi:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/waters/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/waters/.ssh/id_rsa. Your public key has been saved in /home/waters/.ssh/id_rsa.pub. The key fingerprint is: c1:45:40:92:b6:f6:e5:0b:72:23:73:ff:88:58:27:d0 waters@waters-laptop razvan@kiwi:~$

generate, cele doua chei sunt stocate n mod implicit n doua s Odata , iere: id_rsa s ajunga pe (cheia privata) i id_rsa.pub (cheia public a). Cheia public a trebuie sa , serverul de SSH, iar cheia privata va ramne stat local pe stat , ia unde se aa , ia unde au fost generate cheile. cheilor, utilizatorului i se va cere un s n momentul crearii , ir de caractere (passphrase ) care este asociat cu perechea de chei, s , i care va cerut ulterior, n locul parolei. Acest s ir poate vid, caz n care nu se va mai cere intervent , , ia utilizatorului n cazul utilizarii cheilor pentru autenticare. Folosirea unui passphrase vid devine deosebit de utila pentru automatizarea unor act iuni (prin scripturi). , pe stat la distant se poate folosi un utilitar dedicat, Pentru a copia cheia publica , ia aata ,a ssh-copy-id, specicnd ca parametru adresa serverului SSH.

262

INTRODUCERE N SISTEME DE OPERARE

razvan@kiwi:~$ ssh-copy-id bogdand@82.77.5.245

va cerea La urmatoarea ncercare de conectare prin SSH, singura diferent ,a a fost introdus la generarea cheilor) n locul unei parole de cont, passphrase-ul (daca din punct de vedere al securitat , ii, utilizarea serviciului va mai sigura. nsa,

9.2.3

Utilitarul wget

wget este un utilitar gratuit (din suita GNU Project), creat pentru a facilita o descarcare s a resurselor de pe Web. Aceste resurse pot obt simpla , i ecienta , inute cu wget prin
dintre cele mai folosite protocoale din Internet: HTTP s doua , i FTP. Numele utilitarului a World Wide Web (W) s este obt semantica , inut de fapt printr-o alaturare , i a metodei HTTP GET. executa o descarcare a Principalul avantaj al wget este faptul ca neinteractiva s ierelor. ntr-o aplicat ie din mediul grac (Firefox, Filezilla), o desc arcarea uzual a , , prezent e logat necesita , a pe sistem a utilizatorului. Cu alte cuvinte, acesta trebuie sa pentru a se putea efectua operat sau pentru a avea posibilitatea de a , ia de descarcare, de catre reactiva o descarcarea ntrerupta server. se autentice pe sistem, sa porneasca n contrast, folosind wget, utilizatorul poate sa descarcarea, s i s a se deautentice, wget continund s a ruleze pn a la terminarea , conexiunea catre utilitarul sarcinilor nencheiate. Mai mult, daca server este ntrerupta, n acel moment pe hard-disc, va salva parametrii va stoca s pna , ierele descarcate sesiunii s i adresa serverului s i va putea continua sarcina de descarcare n momentul n , , care legatura cu serverul se reface s , i resursa este din nou accesibila. de client Prezentnd un astfel de avantaj evident fat din mediul grac, ,a , ii de descarcare wget a fost rapid adoptat de marea majoritate a utilizatorilor care aveau o conexiune la Internet s nceata , i care nu puteau petrece autenticat , i pe sistem timpul necesar unei ari interactive. Pe masur a ce Web-ul a evoluat wget adaugat , i. descarc noi funct , ionalitat Un avantaj notabil al utilitarului wget este capabilitatea de descarcare s pe , i de pastrare descarcarea client a structurii de directoare de pe server, ind de asemenea posibila la care sa e descarcat structura de unui site cu indicarea nivelului de adncime pna a directoare. la posibilitatea , a fost extins pna Acest tip de descarcare, numit descarcare recursiva de a descarca pe client site-uri ntregi cu toate paginile s dintre acestea. , i legaturile Considernd situat ia unei ret ele locale, desc arcarea unui site pe mas , , , ina server din accesarea acelui site ret , ea (proces numit s , i oglindirea site-ului), ar face implicit posibila n mod ofine de catre tot , i client , ii din ret , eaua locala.

Modul de apelare al utilitarului n linia de comanda Pentru a descarca un s , ier prin HTTP se poate folosi comanda:
1 2 3

razvan@kiwi:~$ wget -c http://ccnp.catc.ro/resources/CiscoTFTP.exe \& --15:57:06-http://ccnp.catc.ro/resources/CiscoTFTP.exe

CAPITOLUL 9. SERVICII DE RET , EA


4 5 6 7 8 9 10 11 12 13

263

=> CiscoTFTP.exe Resolving ccnp.catc.ro... 141.85.37.2 Connecting to ccnp.catc.ro|141.85.37.2|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 1,327,497 (1.3M) [application/x-msdos-program] 100%[====================================>] 1,327,497 2.66M/s

15:57:07 (2.66 MB/s) - CiscoTFTP.exe saved [1327497/1327497]

continuarea descarc arii n cazul ntreruperii conexiunii cu serverul, Opt , iunea -c asigura rularea utilitarului n background. iar simbolul & specica accesarea sa ofine este Descarcarea unui site pe discul local pentru a face posibila prin comanda urmatoare: exemplicata
1 2 3 4

razvan@kiwi:~$ wget --convert-links -r http://www.gnu.org/ -o gnulog razvan@kiwi:~$ ls gnulog www.fsf.org

www.gnu.org

legaturile Parametrul --convert-links transforma (linkurile) din site pentru ca site-ul poata vizionat ofine. sa Descarcarea tuturor legaturilor de pe siteul www.yahoo.com cu o adncime de 1 se face prin:
1

razvan@kiwi:~$ wget -r -l1 www.yahoo.com

9.3

Email Pos , ta electronica

(electronic mail), abreviat e-mail sau email, este o metoda Pos , ta electronica de compunere, transmitere s , i recept , ie a mesajelor peste sisteme de comunicat , ie electronica. dateaza din anul 1971, cnd Ray Tomlinson dezvolta Ideea de mesagerie electronica din doua programe: prima aplicat , ie de email pentru ARPANET. Aceasta era formata SNDMSG, utilizat pentru a transmite mesaje, respectiv READMAIL, folosit pentru citirea mesajelor. n anul 1972, comenzile MAIL s programului FTP. , i MLFL au fost adaugate la Aceasta a fost modalitatea de transmitere a mesajelor n ret , eaua ARPANET pna nceputul anilor 80, cnd a fost dezvoltat protocolul SMTP. n scurt timp, serviciul de a acestuia. email a crescut popularitatea ARPANET-ului s , i a devenit aplicat , ia principala Serviciul de email a oferit la nceput doar transferul de mesaje text ntre utilizatori aat ,i n ret ele diferite. Ulterior serviciul a fost extins s i la transmiterea de s iere binare. , , , Standardul de codicare a informat , iei binare ntr-un mesaj e-mail se numes , te MIME (Multipurpose Internet Mail Extensions).

264

INTRODUCERE N SISTEME DE OPERARE

9.3.1

s Arhitectura , i funct , ionare

att Pentru livrarea mesajelor se foloses , te un mecanism de adresare ce apeleaza ierarhia de nume din Internet (serviciul de DNS) pentru a preciza serverul, ct s ,i informat ii relevante local, precum numele utilizatorului. , de email cont tipuri de informat O adresa , ine doua , ii separate prin simbolul @ (citit la sau at sau a-round ):

numele utilizatorului care dores , te transmiterea sau recept , ia mesajului;


mesajul. numele (DNS) al server-ului care transmite/recept, ioneaza electronica livreaza mesajele de Pe baza adresei de email destinat , ie serviciul de pos , ta , a pos asociata cu adresa la client casut , ii de email, folosind servere de email, catre , tala de email destinat ie. , pentru stocarea ,a pos este o intrare n sistemul local de s Casut , iere utilizata , tala electronica corespunzatoare mesajelor de pos unui utilizator. , ta a serviciului de pos electronica o reprezinta protocolul SMTP Componenta esent , iala , ta mecanisme pentru preluarea (Simple Mail Transfer Protocol ). Acest protocol ofera mesajelor de la client , i de email s , i livrarea lor pe serverele de email destinat , ie (ca atare pentru trimiterea mesajelor). cu dezvoltarea sistemelor de operare pentru calculatoarele personale, a aparut Odata s ,i noilor mesaje din casut , a pos pe stat nevoia preluarii , tala , ia utilizatorului. Acest lucru este ridicarea email-ului s , ei realizat printr-un nou serviciu ce asigura , i sincronizarea casut pos , tale de pe server cu cea de pe stat , ia de lucru. Pentru ridicarea mesajelor de pe serverul de email cele mai folosite protocoale sunt IMAP (Internet Message Access Protocol ) s , i POP3 (Post Ofce Protocol version 3 ). Pentru oferirea acestui serviciu va trebui pornit un daemon de IMAP sau POP3, n plus de serverul de SMTP. fat ,a pe lnga componenta de client SMTP Marea majoritate a client , ilor de email integreaza pentru transmiterea mesajelor) s (folosita , i componente de client IMAP s , i POP3 pentru , ei pos interogarea casut , tale de pe serverul de email. a IMAP fat de POP3 o reprezinta extinderea posibilitat , ilor de O deosebire importanta ,a , a pos oferite de protocolul IMAP. Folosind IMAP prelucrare a mesajelor din casut , tala s mesajele nu sunt descarcate de pe server dect la vizualizarea lor, existnd totodata ,i opt iunea desc arc arii doar a unei p art i din mesaj. , , casut ,a Spre deosebire de POP3, unde toate mesajele se gasesc pe server ntr-o singura (inbox ), iar directoarele nu se pot crea dect n aplicat pos , tala , ia client, protocolul IMAP permite crearea de directoaret pe server direc. Utiliznd comenzi IMAP, aplicat , ia client a sa e nevoie poate folosi ltre pentru mutarea mesajelor dintr-un director n altul, far e situate pe acelas macar ca mailbox -urile sa i server. , componente principale: un Rezumnd, arhitectura serviciului de email include doua serviciu pentru primirea s , i trimiterea mesajelor s , i un serviciu pentru ridicarea mesajelor de pe serverul de email.

CAPITOLUL 9. SERVICII DE RET , EA Trimiterea unui mesaj

265

Pentru a exemplica modul n care componentele prezente mai sus interact , ioneaza, vom considera urmatoarea situat ie: Dan are adresa de mail dan@a.org s i dores te s a-i , , , un mesaj lui Bogdan care are adresa de mail bogdan@b.org. transmita , a pos asociata contului bogdan@b.org, pas Pentru livrarea unui mesaj n casut , tala , ii sunt prezentat , i n gura 9.6.

Figura 9.6: Livrarea unui mesaj Dan va deschide un client de email n care va edita mesajul. Cnd Dan va da comanda de trimitere a mesajului, clientul de email va init serverul , ia o conexiune SMTP catre de mail local. Pentru stabilirea conexiunii, serverul va cere autenticarea utilizatorului Dan. n general, clientul de mail va salva numele de utilizator s , i parola s , i va realiza autenticare, autenticarea conexiunii SMTP n mod transparent pentru utilizator. Dupa clientul de email va formata mesajul conform protocolului SMTP s i l va trimite catre , server. Serverul de mail local va analiza apoi adresa de email destinat va , ie, pe baza careia 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 determinarea serverului de mail pentru b.org, serverul local va trimite exchanger ). Dupa mesajul folosind protocolul SMTP. , a pos a utilizatorului bogdan. La nivelul Serverul b.org va stoca mesajul n casut , tala generic acestui pas se poate interpune o aplicat ie de distribut , , ie a mesajelor denumita LDA (Local Delivery Agent ). O astfel de aplicat , ie poate realiza ltrarea mesajelor, livrarea anumitor mesaje n alte directoare, oprirea spamurilor etc. n Linux cea mai aplicat de pachetul procmail. folosita , ie de distribut , ie a mesajelor este oferita

Ridicarea mesajelor , a pos vor urmat Pentru a ridica mesajul din casut , tala , i pas , ii din gura 9.7:

Figura 9.7: Ridicarea mesajelor de pe server

266

INTRODUCERE N SISTEME DE OPERARE

Bogdan va deschide clientul de mail, iar acesta va init serverul , ia o sesiune de IMAP catre de mail. Dupa autenticare, serverul va deschide casut , a pos , tala a utilizatorului Bogdan. , a pos Mesajele ridicate din casut tal a n sesiunile anterioare de IMAP au fost marcate, , astfel serverul va selecta doar noile mesaje (ce nu sunt marcate) s , i le va transmite prin sesiunea de IMAP catre clientul de email. nainte de a ncheia sesiunea, clientul de email , a pos aata pe va informa serverul asupra listei mesajelor ce au fost s , terse din casut , tala sincronizeze cont , ei pos stat , ia utilizatorului, permit , nd astfel serverului sa , inutul casut , tale pe stat locale cu cea aata ie. , ridicarea mesajelor de pe server, casut , a pos poate consultata inclusiv ofine, Dupa , tala folosind clientul de email.

Folosirea webmail pentru citirea s , i transmiterea mesajelor metoda disponibila utilizatorilor pentru citirea s O alta , i trimiterea mesajelor este folosirea unui server de web pentru interfat a cu serverul de SMTP, serviciu rezultat ind denumit , webmail. , a pos a Folosind exemplul anterior, mesajul livrat prin SMTP a fost stocat n casut , tala utilizatorului Bogdan. Utilizatorul va lansa un client web (un broswer) s , i va init , ia o pe acelas conexiune HTTP catre serverul de web ce ruleaza , i sistem cu serverul de SMTP, responsabil cu primirea mesajelor pentru domeniul b.org. Serverul de web va ce permite operat , a pos aata pe server: oferi o interfat ,a , ii direct pe casut , tala s , tergerea/mutarea mesajelor, marcarea lor, crearea de directoare etc.

Figura 9.8: Citirea mesajelor folosind webmail

9.3.2

Client , i de email

As , a cum s-a prezentat mai sus, client , ii de email sunt utilitare care permit descarcarea doua de mesaje de pe un server de email s n mod real, exista , i stocarea lor local. situat ii n care este necesar a folosirea lor: atunci cnd contul de email nu poate , de tip web, sau atunci cnd conexiunea la Internet este slaba vizualizat printr-o interfat ,a s sau instabila, i este de preferat salvarea corespondent ei pe computerul personal , , s mai mult pentru a us , or accesata , i ulterior. Exista , i client , i de email, cei mai important ,i n distribut ind Microsoft Outlook (varianta inclusa , ia de Windows se numes , te Outlook Express) s i Mozilla Thunderbird. , a mesajelor primite pe conturi Un avantaj al client , ilor de email este stocarea centralizata ne vom concentra asupra Mozilla Thunderbird, de email diferite. n cele ce urmeaza,

CAPITOLUL 9. SERVICII DE RET , EA

267

deoarece este gratuit s , i disponibil pentru toate sistemele majore de operare (Windows, Linux, Mac OS). Congurarea unui client de email presupune n primul rnd crearea unui cont pentru de email ce se dores ecare adresa , 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 de ecare data cnd ntr-un s ier de congurare, sau pentru introducerea ei manuala , se va stabili o conexiune la unul dintre serverele de mail. n cazul n care doar unul servere este setat corespunzator, dintre cele doua se vor putea doar descarca (n cazul POP3) sau trimite mesaje (respectiv SMTP). Unul dintre avantajele Thunderbird este integrarea cu serviciul de email oferit de Google, numit Gmail. Pentru setarea unui cont de Gmail, trebuie parcurs pas , i urmatorii , i: se pe site-ul Gmail opt activeaza , iunea de a folosi un server de POP3, apoi din Thunderbird un nou cont, se alege Gmail account s se creeaza , i se introduce adresa de email. Restul automat. setarilor se efectueaza se foloses ce Pentru a trimite/primi corespondent , a, , te butonul Get Mail, comanda sincronizeaza baza de date locala cu cea de pe server. n consecint , a, un email care este scris poate trimis instantaneu sau poate stocat local s i trimis mai trziu, cnd , n mod automat cu va exista conectivitate la Internet. Thunderbird se sincronizeaza serverul la intervale regulate de timp. o gama de servicii standard: memorarea adreselor de email, sortarea Thunderbird ofera data primirii, subiect, numele expeditorului, important (crescator emailurilor dupa, sau ,a descrescator). Emailurile pot grupate pe threaduri (toate mesajele care fac parte din aceeas , i discut , ie), facilitate deosebit de folositoare n cazul mesajelor primite de la o de discut un motor de lista ii. De asemenea pentru localizarea unui mesaj clientul ofera , adresa destinat cautare ce poate folosii criterii ce vor analiza: adresa sursa, , ie, subiectul mesajului sau cont , inutul sau. de directoare Pentru o mai buna organizare a corespondent , ei, se poate crea o structura a tuturor s , i gruparea mesajelor n mod logic, n opozit , ie cu stocarea tradit , ionala , a pos (inbox ). Aplicarea de ltre permite selectarea emailurilor email-urilor n casut , tala de criterii avansate (ce includ adresa, nume expeditor, subiect, cont pe baza , inut) s ,i efectuarea de act , iuni asupra lor (mutarea n diferite directoare, s , tergerea lor, marcarea n cazul unui numar mare de mesaje zilnice. lor), facilitate extrem de utila O limitare n folosirea unui solut , ii mixte bazate pe Thunderbird s , i Gmail o reprezinta mesajelor citite ntre cele doua aplicat nesincronizarea marcarii , ii.

9.3.3

Securitatea serviciului de email

problema asociata cu pos o reprezinta primirea de spam Cea mai ntlnita , ta electronica , it 90% din tracul SMTP n (mesaje nesolicitate). Din pacate, tracul de spam a depas Internet. nu Pentru a reduce tracul de spam n primul rnd trebui ca serverul de email (SMTP) sa trimita mesaje de la orice client SMTP din Internet. Majoritatea destinat accepte sa , iilor

268

INTRODUCERE N SISTEME DE OPERARE

nu a fost trimis folosind un server SMTP de mail vor verica pentru ecare mesaj daca mesaje pentru orice client), caz n de tip open mail relay (server ce accepta sa trimita care vor considera respectivul mesaj drept spam. Tracul de spam poate controlat s , i pe serverul destinat , ie nainte de a preluat de a prin aplicat ia client. Reducerea tracului de spam pe serverul de SMTP poate facut , implementarea a trei tipuri de liste: sunt Liste albe mesajele trimise de un server cont, inut ntr-o astfel de lista considerate automat mesaje legitime Liste gri mesajele primite de la servere necunoscute sunt, pentru o perioada serverul sursa ncerca retransmiterea mesajului s de timp, respinse. Daca , i dupa metoda se expirarea acestei perioade, mesajul va considerat legitim. Aceasta pe faptul ca serverele de spam nu vor ncerca retransmiterea mesajelor. bazeaza

Liste negre mesajele primite de la un astfel de server sunt etichetate ca spam


clasa de aplicat O alta , ii de ltrare a tracului de spam sunt integrate n LDA (Local Delivery Agent ). Aceste aplicat , ii n general folosesc un set extins de criterii pentru a e spam. calcula probabilitatea ca un mail sa inclusiv de clientul de mail. Cu toate Filtrarea tracului de spam poate realizata acestea, chiar s i n cazul folosirii simultane a tuturor metodelor de control al tracului , nedorit, mesajele de spam nu pot total eliminate. problema importanta a serviciului de email este absent O alta , a unui mecanism de extensii ale protocolului SMTP ce rezolva autenticare a expeditorului. Exista problema, dar care nu se bucura de o popularitate nsemnata. Singura solut aceasta , ie n prevenirea atacurilor bazate pe asumarea unui false identitat ,i cu adevarat ecienta (numite atacuri phising) este instruirea utilizatorilor asupra limitarilor protocolului SMTP.

9.4

WWW

World Wide Web sau WWW este, probabil, cel mai cunoscut s , i utilizat serviciu din ca un set de resurse interconectate prin intermediul de Internet. WWW-ul se prezinta legaturi (hyperlink -uri). Aceste resurse sunt denumite pagini web s , i cont , in hypertext, imagini, lme. Hypertext -ul este n esent a text simplu, la care s-a ad augat o formatare , ce specica utilizarea de hyperlink -uri. Accesul la resurse se realizeaza standardizata, web va cont prin intermediul unui navigator (browser ). O pagina , ine, de obicei, legaturi (hyperlink -uri) catre alte pagini (resurse), justicnd denumirea de Web. World Wide Web-ul este invent una din , ia lui Sir Tim Berners-Lee din 1989, , ile marcante n dezvoltarea Internet-ului. personalitat Sir Tim Berners-Lee este directorul World Wide Web Consortium (W3C), organizat care coordoneaza , ia dezvoltarea WWW. ajungndu-se la n ultimii ani, WWW-ul a cunoscut o dezvoltare mult mai ampla generat folosirea expresiei Web 2.0 pentru a simboliza serviciile web de noua , ie oferite , i web. n acelas de diversele comunitat i timp, WWW-ul evolueaz a c atre ceea ce Sir Tim , o extensie a WWW-ului n care cont Berners Lee a denumit Semantic Web, adica , inutul poate exprimat n limbaj natural s i utilizat de agent i specici de analiz a. , ,

CAPITOLUL 9. SERVICII DE RET , EA

269

9.4.1

ale WWW Tehnologiile de baza

existent celor trei tehnologii utilizate de Sir Tim Berners-Lee. WWW-ul s , i datoreaza ,a Acestea sunt URL, HTTP s , i HTML s , i sunt prezentate n continuare.

URL Uniform Resource Locator s bine precizata URL nseamna , i este un nume ntr-o sintaxa pentru a identica resursele din Internet. URL este de fapt un sinonim pentru URI (Uniform Resource Identier ). 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 decodica URL-ul s , i va accesa resursa dorita. URL-ul http://www.example.com se face o cerere HTTP catre server-ul parte, URI-ul mailto:bogdan@example.com va example.com. Pe de alta nsemna deschiderea unui client de e-mail pentru compunerea unui mesaj catre bogdan@example.com. bine specicata folosita pentru identicarea stat Un URL are o sintaxa , 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 folosita IP. Sirul pentru translatarea numelui ntr-o adresa http:// este folosit pentru acesta este serviciul de Web care foloses identicarea serviciului; n cazul de fat ,a , te protocolul HTTP s i portul implicit 80 . Resursa cerut a de pe server este /page.html . , Drept urmare, n urma introducerii URL-ui n bara de adrese a navigatorului, acesta va de numele www.example.com pentru face o cerere HTTP catre stat , ia identicata apoi clientului (n interiorul pagina /page.html de pe server. Aceasta va as , ata browser -ului). pentru Exemplul de URL prezentat mai sus este unul simplicat. Astfel, sintaxa completa un URL este:
1

protocol://server:port/cale/catre/resursa

evident, protocolul folosit pentru comunicat cmpul protocol specica, , ie. Acesta poate ftp, http, scp etc.; daca acest cmp lipses , te, un browser va folosi implicit http; numele sau adresa IP a stat cmpul server reprezinta , 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; calea catre pe server; /cale/catre/resursa reprezinta resursa aata cale pentru a oferi respectiva resursa clientului; de acesta va folosit aceasta obicei, resursa este o intrare n sistemul de s , iere al server-ului. Astfel, un URL tip ftp poate asigura inclusiv Sintaxa URL-ului poate complicata. autenticarea pe server. Folosirea URL-ului ftp://bogdan:p4r0l48un4@example.com/ sources.tgz nseamna

270 autenticarea

INTRODUCERE N SISTEME DE OPERARE serverul

utilizatorului bogdan cu parola p4r0l48un4 pe example.com, folosind ftp pentru descarcarea s , ierului sources.tgz.

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. ca sistem Similar celorlalte servicii din Internet, serviciul Web (HTTP) funct , ioneaza client-server. Clientul Web este navigatorul (browser-ul) folosit pentru cererea unei resurse prin intermediul unui URL. Portul implicit utilizat de HTTP este 80. Protocolul HTTP este un protocol de tip ntrebare raspuns (request response). Clientul care acesta i trimite un raspuns Web (navigatorul) face o cerere catre un server, dupa n exemplul de mai jos, telnet este utilizat pentru a efectua o cerere s , i resursa ceruta. HTTP catre google.ro:
1 2 3 4 5 6 7 8 9

razvan@anaconda:~$ telnet google.ro 80 Trying 72.14.221.104... Connected to google.ro. Escape character is ^]. GET / HTTP/1.0 HTTP/1.0 302 Found Location: http://www.google.ro/ Cache-Control: private [...]

realizarea conexiunii pe portul 80, clientul trimite cererea GET / HTTP/1.0. Dupa citirea directorului rad acin a al serverului folosind HTTP versiunea Aceasta nseamna 1.0. Raspunsul server-ului este HTTP/1.0 302 Found urmat de pagina efectiva. pagina dorita nu se aa pe server, raspunsul Daca server-ului va Error 402 Page nsa ca serverul nu funct caz n not Found. Acest raspuns nu nseamna , ioneaza, care mesajul as , at de client ar Server not Found. caracteristica importanta a protocolului HTTP este faptul ca este un protocol O alta ca dupa ce clientul trimite o neorientat pe conexiune (stateless). Acest lucru nseamna resursa trebuie cerere s i i soses te r aspunsul conexiunea este ncheiat a. Pentru o nou a , , o alta conexiune. Opus este protocolul FTP care este un protocol cu realizata Petru ca este nevoie ca anumite informat e persistente conexiune persistenta. , ii sa diverse solut de-a lungul mai multor conexiuni s-au gasit , ii: cookie-uri pe client, sesiuni pe server, variabile HTTP etc. Un alt neajuns al HTTP este lipsa unui suport puternic de securitate. Acest lucru este corectat prin folosirea protocolului HTTPS care foloses comunicat criptata. , te , ie Majoritatea sistemelor de webmail de astazi folosesc HTTPS pentru a asigura condent , ialitatea datelor.

HTML HTML (Hypertext Markup Language) este un limbaj folosit pentru a descrie cont , inutul unei pagini Web. HTML foloses te marcaje (tag-uri) pentru a deni modul n care un ,

CAPITOLUL 9. SERVICII DE RET , EA Web este as element dintr-o pagina , at de un browser. simpla Web descrisa n format HTML este urmatoarea: O pagina
1 2 3 4 5 6 7 8 9 10 11 12 13 14

271

razvan@anaconda:~/public_html$ cat main.html <html> <head> <title>Pagina mea</title> </head> <body> <h1>Antet</h1> Text simplu <strong>Text aldin</strong> <em>Text cursiv</em> </body> </html>

de obicei un text. La nceput, marcajul este <nume_marcaj> s Un marcaj ncadreaza ,i pagina sunt: se ncheie cu </nume_marcaj>. Marcajele prezente n aceasta

html, pentru denirea documentului HTML


informat spre exemplu titlul (marcajul title) head prezinta , ii despre pagina,

h1 denes , te un antet de nivel 1 strong denes , te un text aldin (bold) em denes , te un text cursiv (italic)
HTML s Un client Web va interpreta o pagina , i o va as , a utilizatorui conform marcajelor existente.

XHTML XHTML (Extensible Hypertext Markup Language) este un standard s , i un limbaj de marcare care are aceleas i posibilitat i de exprimare ca s i HTML ns a se conformeaza , , , mult mai stricta, un document sintaxei mult mai stricte a XML. Urmnd o sintaxa XHTML este mult mai us or de interpretat, spre deosebire de un document HTML care , un parser complex. necesita XHTML o reprezinta cres Motivat de dispozitive care nu au , ia utilizarii , terea numarului a XHTML capacitatea de procesare a unui document HTML complex. Sintaxa stricta a unei pagini Web de catre permite o prelucrare mult mai rapida client. ntr-un ritm inegal datorita lipsei de implementare n Adoptarea XHTML se realizeaza navigatoare a caracteristicilor noi pe care standardul le aduce. de XHTML este 1.1. Versiunea 2.0 a standardului este nca n Versiunea curenta dezvoltare.

272

INTRODUCERE N SISTEME DE OPERARE

9.4.2

Funct , ionarea serviciului

cum s-a precizat, serviciul de Web funct n sistem client-server s Dupa , ioneaza ,i foloses te protocolul HTTP pentru comunicare. Funct ionarea serviciului este , , n gura 9.9, n care sunt prezentat sistematizata , i un set de pas , i urmat , i tipic n obt inerea de c atre client, a unei resurse aate pe un server Web (de obicei o pagina , Web).

Figura 9.9: Funct , ionarea serviciului de Web faza utilizatorul va folosi un client Web (navigator) s n prima , i va introduce n bara de resursa dorita. adrese a acestuia un URL care identica din URL sistemul unde trebuie sa se conecteze s Navigatorul identica , i resursa ceruta. De obicei se va genera s i o cerere DNS pentru a aa adresa IP asociat a serverului. , la server s o cerere Navigatorul se conecteaza , i, n cazul protocolului HTTP, formuleaza de forma GET /cale/resursa HTTP/1.0. ofere clientului resursa ceruta. Cererea ajunge la serverul Web. Acesta trebuie sa web, imagine, lm etc.). Resursa este, de obicei, o intrare n sistemul de s , iere (pagina localizeze resursa. Orice server web are Drept urmare serverul Web va trebui sa acin a specializat, denumit s este congurat un director rad Orice resursa , i webroot. obt Drept urmare, calea completa n sistemul de s , inuta din acest director. , iere este obt inut a prin concatenarea c aii din cererea HTTP la webroot , rezultnd intrarea , /webroot/cale/ resursa. ce obt serverul va trebui sa o transmita clientului. Pentru Dupa , ine resursa obt , inuta, resursa. aceasta el emite un raspuns HTTP 200 OK s , i atas , eaza este vorba de o pagina Web, interpreteaza Clientul primes , te resursa de la server s , i, daca rezultatul utilizatorului. Conexiunea se nchide. codul (X)HTML s , i as , eaza

9.4.3

Servere Web

Un server Web este responsabil cu oferirea de resurse din sistemul local de s , 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. un s n general, un server Web prezinta i , ier de congurare prin intermediul caruia poate alterat comportamentul. n cazul Apache HTTP Server versiunea 2, acest s ier ,

CAPITOLUL 9. SERVICII DE RET , EA

273

de congurare este /etc/apache2/apache2.conf. Alterarea acestui s , ier de congurare permite schimbarea portului pe care acesta asculta conexiuni (implicit 80), a webroot-ului (implicit /var/www) s , i altele. Un server Web va primi o cerere HTTP n forma GET /cale/catre/resursa resursei. HTTP/ 1.0 s , i va identica din sistemul local de s , iere intrarea asociata acin a (denumit webroot ) unde este cautat resursa Fiecare server are un director rad a clientului. n cazul serverului Apache, n urma unei cereri GET pentru a oferita /cale/catre/resursa HTTP/1.0 va trimite clientului s identicat de , ierul /var/www/cale/catre/resursa (sau /usr/local/Apache2/htdocs).

9.4.4

Client , ii Web

Client , ii Web se numesc navigatoare sau browser-e. Un client Web se va conecta la Resursa este specicata de utilizator ntr-un un server Web pentru a solicita o resursa. URL. Clientul Web transmite o cerere HTTP catre server solicitnd resursa clientului. resursa este o pagina Web. Codul HTML este interpretat apoi de De obicei aceasta navigator s , i as , at utilizatorului. Cele mai utilizate tipuri de navigatoare sunt Internet Explorer, Mozilla Firefox, Opera s ,i Safari. Internet Explorer este cel mai utilizat navigator cu o pondere de 80-85% urmat de Mozilla Firefox cu o pondere de 10-15%. Celelalte navigatoare au ponderi mult mai s cum ar lynx, w3m, links. mici. Exista , i navigatoare n linie de comanda, una dintre cele mai utilizate aplicat Navigatoarele Web reprezinta , ii din cadrul unui sistem de operare. Competit , ia dintre acestea a generat ceea ce s-a numit browser wars . Astfel, anii 1994-1998 au fost marcat , i de competit , ia dintre Netscape Navigator s , i Internet n anul 2002, Internet Explorer era folosit n proport Explorer cu victoria celui din urma. , ie de circa 92%. Ultimii ani sunt dominat , i de competit , ia ntre Mozilla Firefox s , i Internet Explorer. important de Competit , ia dintre navigatoare a condus s , i la aparit , ia unui numar blocarea mesajelor de tip pop-up, corect caracteristici printre care: navigare tabulara, , ie gesturi de mouse, suport pentru diverse protocoale (FTP, IRC, BitTorrent) gramaticala, s i pentru standarde (CSS, XHTML, XSLT, RSS). ,

9.5
9.5.1

Studii de caz
Utilitarul cURL

ofere suport Utilitarul cURL este aplicat , ie pentru transferul de s , iere ce s , i propune sa 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 autenticare Pentru asigurarea securitat de parola, ct s pe baza i pe certicate. ,

274

INTRODUCERE N SISTEME DE OPERARE

din linia de comanda, ceea ce permite includerea sa n Utilitarul cURL ce se executa scripturi. Cel mai adesea cURL este folosit pentru scripting HTTP, n scopul simularii , ii utilizatorilor ce folosesc diferite broswere. activitat numeroase mecanisme specice client Utilitarul cURL implementeaza , ilor web, cele mai multe suplimentare fat a de wget . Spre exemplu ofer a gestionarea cookies (trimiterea s , ,i navigarea prin pagini de formular, folosirea unui proxy web, urmarirea salvarea locala), redirectarilor automate, sau schimbarea semnaturii navigatorului. n cadrul unui site se aa un formular disponibil la Spre exemplu, presupunem ca adresa: test.cs.pub.ro/login.cgi. n acest formular trebuie completat un cmp de nume s butonul OK pentru a accesa site-ul. Formularul este scris , i apoi apasat folosind sintaxa HTML:
1 2 3 4

<form method="GET" action="login.cgi"> <input type=text name="nume"> <input type=submit name=press value="OK"> </form>

Listing 9.1: Formular de login simplu folosind cURL astfel: Cererea poate trimisa
1

razvan@kiwi:~$ curl "test.cs.pub.ro/login.cgi?nume=Razvan\&press=OK"

ncarce un s n cazul unui formular ce permite clientului sa , ier se poate folosi cURL cu formularul este scris astfel: opt , iunea -F. Presupunem ca
1 2 3 4

<form method="POST" enctype=multipart/form-data action="upload.cgi"> <input type=file name=upload> <input type=submit name=press value="OK"> </form>

Listing 9.2: Formular de upload simplu Pentru formularul aat la adresa test.cs.pub.ro/upload.cgi va ncarcat apasarea s butonului OK: , ierul test01 s , i apoi simulata
1

razvan@kiwi:~$ curl -F upload=@test01 -F press=OK test.cs.pub.ro/upload. cgi

suport s , ii navigatorului. Pentru a simula Utilitarul cURL ofera , i pentru schimbarea identitat de un navigator Internet Explorer 7.0 ce ruleaza o cerere catre serverul test.com init , iata pe un sistem Windows 2000 vom folosi comanda:
1

razvan@kiwi:~$ curl -A "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.0)" test.co

9.5.2

FTP

posibilitatea FTP (File Transfer Protocol ) este un protocol foarte raspndit ce ofera ct s pe modelul transferului de s , iere att ntr-o ret , ea locala , i prin Internet. Se bazeaza un client-server, deci presupune existent a a dou a entit at i ntre care se realizeaz a , , (s la serverul de transfer de s , iere, clientul ind cel care se conecteaza , i se autentica) la care poate descarca sau caruia i poate trimite s iere. ,

CAPITOLUL 9. SERVICII DE RET , EA

275

Ca s acesta , i n cazul modelului generalizat de client-server, serviciul FTP oferit de catre din urma se reduce la existent , a unei aplicat , ii, numita server FTP ce ruleaza pe o stat , ie. o aplicat Similar, clientul ruleaza ie numit a client FTP ce se ocup a de managementul , conexiunii catre server s , i de tracul de date dintre aces , tia. Att aplicat , iile server ct a s i cele client FTP sunt disponibile, practic, pentru toate platformele existente, dovada , , ii s versatilitat protocolului FTP. , i raspndirii acesta transfera att informat Un dezavantaj al protocolului FTP este faptul ca , iile de conectare ct s , i cont , inutul propriu-zis al s , ierelor n mod necriptat, interceptarea unui a sa. astfel de trac putnd duce la o interpretare facila

Funct , ionare la un server trimite acestuia un set de date de Un client FTP ce se conecteaza de directoare autenticare (nume s i parol a) care au asociate pe server un o structura , autenticarea reus ce sunt puse la dispozit Daca , ia acelui utilizator. , es , te, clientul are trimita n continuare comenzi pentru a interact dreptul sa iona cu s ierele la care are , , acces. Drepturile de acces la s , iere se reduc la cele de listare/creare de directoare, un transfer citire, modicare, s , tergere de s , iere sau directoare, ceea ce implica s bidirect ional ntre client s i server (clientul poate att s a descarce, ct s i s a trimita , , , , iere aceste drepturi sunt enunt de tip rwx ca pe server). n practica, , ate n aceeas , i structura s , i pe sistemele UNIX. conexiunile pe portul 21 s transferul de comenzi tot Serverul FTP asculta , i realizeaza n paralel, pe portul 20, doar n pe acesta. Transferul efectiv de s , iere se realizeaza urma unei conexiuni prestabilite. Porturile rezervate pentru protocolul FTP sunt 21 securizata pentru stabilirea conexiunii s , i 20 pentru transferul efectiv de date. O varianta s i similar a o reprezint a SFTP (SSH File Transfer Protocol). O alt a limitare a sa este , s imposibilitatea de a transmite atributele ce t arii , in de data s , i ora crearii/modic , ierelor, limitare este eliminata n acestea ind rescrise la destinat , ie. De asemenea, aceasta cazul lui SFTP. moduri, selectate manual naintea Transferul datelor prin FTP se poate face prin doua init ierii transferului sau determinate automat de c atre clientul FTP: ,

Mod ASCII: folosit pentru transferul s , ierelor text; are avantajul de a transmite
datele folosind codurile ASCII ale caracterelor, ceea ce permite compresia a informat dinamica , iei, la un raport foarte bun, deci un ux mai puternic de date, dar are dezavantajul de a corupe cont s , inutul oricarui , ier non-text. Mod binar: folosit pentru transferul oricarui tip de s , iere (inclusiv text)

Exemplu de utilizare Linux se poate face direct prin Conectarea la un server FTP dintr-o linie de comanda de numele sau adresa serverului la care se dores comanda ftp, urmata , te conectarea, ca n exemplul:
1 2 3

rookie@localhost~$ ftp ftp.lug.ro Trying 193.226.140.51... Connected to ftp.lug.ro (193.226.140.51).

276
4 5 6 7 8 9 10 11

INTRODUCERE N SISTEME DE OPERARE

220 (vsFTPd 2.0.3) Name (ftp.lug.ro:root): anonymous 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>

faptul ca urmatoarele Promptul ftp> indica comenzi vor trimise direct catre server. Cteva comenzi comune sunt ls sau dir pentru a lista cont inutul directorului curent, cd , pentru a schimba directorul, get pentru a descarca s , ierele specicate ca parametri (mget pentru s iere multiple) sau put pentru trimiterea de s , , iere. Deconectarea de la serverul FTP se face prin comenzile quit sau disconnect. de client broswerele web, limitarea acestora O categorie speciala , i FTP o reprezinta nu permit dect descarcarea constnd n faptul ca s , ierelor de pe server. Conectarea la un server FTP printr-un browser web se poate face prin introducerea adresei sale n bara de adrese a browserului, specicndu-se protocolul:
1

ftp://ftp.lug.ro

a cont predenit), n cazul serverelor n care accesul nu se poate face anonim (far browserul va cere un nume de utilizator s , i o parola. Pentru a specica direct din adresa parametrii de autenticare, se poate scrie:
1

ftp://user:parola@server:2555

explicit s conexiunea (2555), Exemplul anterior specica , i portul pe care se realizeaza n cazul n care serverul nu ruleaza pe portul implicit, 21. informat , ie necesara

Cuvinte cheie

client curl FTP HTML HTTP IMAP IP LDA POP3 port punct-la-punct scp server

SMB spam SSH (Secure Shell)


de protocoale stiva

TCP telnet UDP URL webmail wget WWW XHTML

CAPITOLUL 9. SERVICII DE RET , EA ntrebari

277

pe o arhitectura client-server? 1. Care dintre operat , iile de mai jos NU se bazeaza

K ridicarea mesajelor K editarea unui nou mesaj K trimiterea unui nou mesaj K vericarea mesajelor folosind broswer
direct (far a intermedierea nivelului transport) cu nivelul 2. Protocolul telnet comunica ret ea. Dup a stabilirea unei conexiuni de telnet comunicat , , ia se va face doar unidirect client. , ional: de la server catre K adevarat, adevarat K adevarat, fals K fals, adevarat

K fals, fals
3. Care dintre serviciile de mai jos NU este util intr-o solut , ie de webmail?

K SMTP K IMAP K HTTP K SSH


o tehnologie relevanta pentru serviciul 4. Care dintre cele de mai jos NU reprezinta web:

K URL K HTTP K HTML K FTP


5. Care dintre urmatoarele este o aplicat , ie server SMTP?

K Postx K Firefox K Outlook K Apache


adresa: 6. ntr-un client web (broswer) este tastata
1

ftp://bestman:none@test.com/lista/admisi.txt

a? Care dintre urmatoarele armat , ii este adevarat o conexiune pe portul 80 catre K va init, iata serverul test.com K va descarcat s , ierul /test.com/lista/admisi.txt

278

INTRODUCERE N SISTEME DE OPERARE

K se va folosi pentru autenticare parola bestman


trebuie sa existe pe K pentru stabilirea conexiunii utilizatorul bestman sa test.com cunoas 7. Pentru conectarea la un server SSH este necesara , terea adresei IP sau a numelui DNS a serverului. Filtrarea mesajelor spam se poate face numai pe serverul de mail, nu s , i pe client K adevarat, adevarat K adevarat, fals K fals, adevarat

K fals, fals
8. Care din urmatoarele NU este un client web?

K Firefox K Internet Explorer K wget K Thunderbird


pentru conectarea la un server 9. Care dintre urmatoarele aplicat , ii NU poate folosita web:

K telnet K ssh K wget K curl


servere de mail se realizeaza folosind: 10. Comunicat , ia ntre doua

K POP3 K HTTP K SMB K 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 les, and cryptography that will stop major governments from reading your les. Bruce Schneier

din acest capitol? Ce se nvat ,a , ii IT Problematica securitat

Elementele unei politici de securitate Securizarea sistemului Controlul accesului Securitatea sistemului de s , iere Forme de atac de ret, ea Criptare s , i rewall-uri Monitorizare

10.1

, ii Problematica securitat

Securitatea la nivelul calculatoarelor, n particular, s , i a domeniului IT, n general, a atat cap un interes deosebit n ultimele decenii. Des , i un concept discutat din cele mai atat vechi timpuri, securitatea a cap noi forme, ramuri de proiectare s , i implementare cu dezvoltarea sistemelor de calcul s n odata , i ndeosebi a Internetului. Pe o planeta 1 care peste 1.5 miliarde de oameni sunt conectat i la Internet (circa 25% din populat , , ie) deosebita. n domeniul IT, domeniul securitatea s , i integritatea informat , iei au o relevant ,a , ii a cunoscut o dezvoltare alerta, cu multe subdomenii s securitat , i specialis , ti. Se discuta , ii, despre criptograe, gestiunea riscului, securitatea ret despre ingineria securitat elei, , virus inginerie sociala, ,i s , i antivirus , i, scrierea de cod sigur (secure coding).
1

http://www.internetworldstats.com/stats.htm

279

280

INTRODUCERE N SISTEME DE OPERARE

domeniul este unul vast, nivelul de cunoas n ciuda faptului ca , tere s , i nt , elegere a publicului larg n privint De-a lungul ultimilor ani, , a securitat , ii este destul de scazut. , ii au par asit domeniul IT, ind preluate multe teme tehnice specice domeniului securitat Din pacate de ziare, jurnale TV, sau de industria cinematograca. procesul nu a fost, a conceptelor de securitate, cel mai adesea, unul ce ncerca aducerea n sfera publica senzat ci mai ales unul ce speculeaza , ionalul prin ignorarea constrngerilor lumii reale, ducnd la promovarea unor noi mituri ale erei IT. normale performant De multe ori se considera , ele hackerilor din lme, care reus , esc sa securitatea unui sistem n cteva secunde. Exemple de scenarii care compromita 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 virusarea unui sistem (vezi Swordsh, 2001). Exista, , i exemple pozitive n precum folosirea nmap s lumea cinematograca, i SSH pentru compromiterea unei , 1 ret , ele electrice computerizate (vezi Matrix, 1997 ). nu s ofere cititorului sfaturi despre obt Capitolul de fat ,a , i propune sa , inerea unei puteri aduca un nivel minim de nemarginite n controlul tuturor sistemelor electronice, ci sa , ii IT. A deveni cu adevarat ordine n domeniul populat de mituri al securitat un profesionist n securitate este o cariera, dupa cum spunea s , i Eric S. Raymond: Being able to break security doesnt make you a hacker anymore than being able to hotwire cars makes you an automotive engineer.

10.1.1

Principii de baza

Securitatea calculatoare are drept scop protejarea informat de la accese , iilor , ii se refera att la neautorizate, furt, corupere s Domeniile securitat , i alte riscuri. mecanismele folosite pentru a obt ine accesul sau a corupe informat iile ct s , , , i la de risc n securitatea IT se numes protejarea acestora. Forma generala , te atac de securitate. clasicare a riscurilor de securitate distinge trei tipuri de atacuri: O prima de succes redusa); atacuri venite din Internet (cu o rata atacuri init, iate din ret, eaua locala; acestea din urma avnd un impact mult atacuri generate de pe aceeas , i mas , ina, mai nsemnat dect primele. sunt Des , i cu gradul de risc cel mai ridicat, atacurile init , iate de utilizatorii serverului t , inta deseori tratate n graba s , i unitar. , ii dispune de un set de principii generale. Acestea nu sunt aplicabile Domeniul securitat , ii n general. Aceste principii nu sunt doar n cadrul domeniului IT, ci n domeniul securitat proiectarea s exhaustive, dar urmarirea acestora faciliteaza , i implementarea unui sistem ct mai ridicat. cu nivel de sigurant ,a includa att o Privit din perspectiva unui sistem IT, o solut , ie de securitate trebuie sa de securitate, ce denes politica te drepturile s i responsabilit at ile utilizatorilor, ct s , , , ,i
1

http://nmap.org/images/matrix/

CAPITOLUL 10. ELEMENTE DE SECURITATE

281

securitat , ii zice, ale componentelor sistemului de operare, ale specicat , ii ale asigurarii aplicat , iilor locale, precum s , i ale serviciilor de ret , ea. , ii, e ea IT sau de orice alta natura, este: Unul dintre principiile fundamentale ale securitat cu securitatea celei mai slabe verigi. securitatea unui sistem este egala ultra-performanta daca nu foloses Altfel spus, degeaba t , i pui us ,a , ti cheia, sau aplicat n cheltui sume enorme de bani pe sisteme de securitate, daca domeniul IT: nu are rost sa utilizatorii folosesc drept parole propriul nume, sau s ,i t , in parola lipita pe monitor. entitat , i active (utilizatori, procese) s n orice sistem exista , i drepturi pe care acestea le 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 , acest principiu sunt: mecanisme care respecta

folosirea unui director de tip home cu drepturi complete pentru ecare utilizator; folosirea comenzii sudo s , i s , ierului /etc/sudoers pentru a conferi anumite
privilegii utilizatorilor; (vezi sect , iunea 10.3.3)

separat, ia ntre informat, iile din s , ierul /etc/passwd s , i /etc/shadow; (vezi


sect , iunea 10.2.3)

folosirea doar a dreptului de execut, ie pe directoare cnd se dores , te parcurgerea


acestora; (vezi sect , iunea 10.2.4) drepturilor (vezi sect Acest principiu este legat de principiul limitarii , iunea 10.3.3). foloseasca o ntruct resursele sistemului sunt limitate, un utilizator poate ajunge sa foarte mare parte a acestora n dauna altor utilizatori sau a sistemului de operare, putnd conduce us or la suspendarea funct acestuia. n general, limitarea , , ionarii 1 drepturilor previne atacuri de tipul DoS (denial-of-service). Un utilizator poate crea foarte multe procese ducnd la ocuparea memoriei (fork 3 memorie, un bomb2 ), un atac de ret care ocupa , ea poate deschide multe conexiuni utilizator poate ocupa spat Solut , iu pe disc s , i mpiedica folosirea acestuia. , ia este limiteze drepturile utilizatorilor sau proceselor sistemului congurarea sistemului sa pentru a preveni suprautilizarea resurselor sistemului. Spre exemplu, folosirea cotelor4 previne suprancarcarea spat , iului de pe disc. (denumita s Asocierea dintre o entitate activa , 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, poate un proces (subiect) sa foloseasca o resursa (obiect). ct de mult, cum s , i daca de securitate trebuie sa stabileasca un compromis ntre gradul de O politica exibilitate a serviciilor IT s i nivelul de securitate dorit. Luate ad literam, cerint , ele , a sistemului de lumea exterioara, dar cum o de securitate ar presupune izolarea totala
1 2

http://en.wikipedia.org/wiki/Denial_of_service http://en.wikipedia.org/wiki/Fork_bomb 3 http://en.wikipedia.org/wiki/SYN_ood 4 http://en.wikipedia.org/wiki/Disk_quota

282

INTRODUCERE N SISTEME DE OPERARE

, ii, cel mai adesea securitatea unui astfel de abordare duce la limitarea funct , ionalitat descurajeze s sistem este denita ca un set de metode de protect , ie menite sa , i sa ntrzie atacatorul. , ii unui sistem presupune adaugarea , i. Aceasta Asigurarea exibilitat de noi funct , ionalitat se traduce, n general, n crearea unei aplicat , ii complexe. Se spune complexitatea este 1 pentru asigurarea securitat , ii este dus manul securit at ii . Un principiu de baza , , 2 caracteristica adaugat unui sistem sau unui program poate simplitatea . Orice noua a , i. Se estimeaza ca ntr-o companie nsemna introducerea unei noi vulnerabilitat pentru dezvoltarea de programe, se introduc zeci de defecte (bug-uri ) la specializata , ii se numes ecare 1000 de linii de cod. n dezvoltarea software, opusul simplitat , te feature creep3 : adaugarea de funct ionalit at i care nu sunt necesare. , , planicarea Un sistem cu nivel foarte bun de securitate se poate obt , ine mai us , or daca mecanismele de securitate sunt acestuia t cont de securitate dect daca , ine o perioada n care acesta a fost dezvoltat. Planicarea unui sistem implementate dupa t , innd cont de securitate (design with security in mind ) este un factor decisiv pentru obt , inerea unui sistem ct mai sigur. n proiectarea unei aplicat Daca , ii, a unei ret , ele sau a unui sistem, se t , ine cont de ale securitat , ii, de mediul s posibilile atacuri, de principiile de baza , i contextul de utilizare a. De asemenea, a aplicat iei, probabililitatea obt inerii unui sistem vulnerabil este sc azut , , orice noi mecanisme de asigurare a unui nivel suplimentar de securitate vor mai us , or 4 adaugate sistemului. Ingineria sofware foloses , te denumirea de secure by design . 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 nalitate, ci un proces. Un sistem nu va 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 de resursele pe care le investes resursele pe care le poate investi un atacator fat ,a , te cel sistemul (bani, timp, personal). care protejeaza n cartea Secure Coding: Principles and Practices [8] (capitolul 2 Architecture), se ca, ntr-un interviu de angajare, raspunsul ment potrivit la ntrebarea Ct de , ioneaza pot faci aplicat vrei sa e?. Raspunsurile sigura Pot , i sa , ia mea? este Ct de sigura o fac sigura n fat o fac ct de sigura se poate. ar trebui sa atac. sau Pot sa , a oricarui rezulte n eliminarea candidatului din lista de potent sa iali angajat i. Un sistem poate , , cu un numar crescut de mai sigur dect un alt sistem, dar acest lucru se realizeaza ct de sigur se , i obscure. ntotdeauna trebuie cntarit resurse, stres s , i funct , ionalitat dores te a un sistem la cte resurse pot investite. , Nu se poate obt , inut la un nivel , ine un sistem perfect sigur, dar un sistem trebuie ment monitorizare, actualizare, vericare de securitate. Operat , iuni periodice de mentenant , a, sunt necesare pentru asigurarea unui nivel dorit de securitate. O divizie responsabila , ii unui sistem va trebui sa considere n permanent exteriorul cu asigurarea securitat ,a nesigura . Tot ceea ce nu face parte din sistemul controlat trebuie ca ind o zona
1 2

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/

CAPITOLUL 10. ELEMENTE DE SECURITATE

283

cu potent considerat ca o zona , iale riscuri sau atacatori. Orice vulnerabilitate a sistemului o foloseasca. trebuie reparata la timp pentru a nu permite unui potent , ial atacator sa , ii. Depinznd de domeniu, pot exista s , i alte principii pentru asigurarea securitat cteva din principiile de baza ale securitat , ii. Principiile prezentate mai sus reprezinta Aceste principii nu sunt complete s i nu sunt aplicate o singur a dat a. Pentru a obt ine un , , trebuie revizuite, sistem cu nivel ct mai bun de securitate, principiile de baza at , ite s mecanismele folosite trebuie mbunat , i, n general, trebuie executate act , iuni , ii sistemului. periodice de evaluare a securitat

10.1.2

Termeni

, ii dispune de o serie de termeni care descriu la nivel general Domeniul securitat folosite. nt pentru conceptele de baza , elegerea acestor termeni este fundamentala orice specialist n IT s i mai ales pentru cei care doresc s a urmeze o carier a n domeniul , , ii. securitat ai domeniului: Mai jos sunt prezentat , i o parte din termenii de baza la orice eveniment sau circumstant cu potent amenint ,a , ial de , are (threat ) se refera a produce pagube unui sistem prin access neautorizat, distrugerea sau modicarea datelor sau denial of service; amenint provin ca urmare a , arile act , iunilor umane sau a cauze naturale; vericarea identitat , ii unui utilizator, autenticare (authentication) nseamna pentru a permite acestuia accesul la proces sau dispozitiv, n general ca cerint ,a resursele sistemului;

autorizare (authorization) este oferirea sau respingerea drepturilor de acces


pentru un utilizator sau proces; , ii care solicita protejarea condent , ialitate (condentiality ) este scopul securitat datelor de la ncercari intent sau accidentale de vizualizare/citire; , ionate att la datele aate pe un dispozitive de stocare, ct s condent , ialitatea se refera ,i la cele aate n procesare sau n tranzit; permiterea folosirii autorizate a unei control acces (access control ) nseamna resurse, simultan cu prevenirea folosirii neautorizate sau ntr-un mod neautorizat; , ii care solicita protejarea de la ncercari integritate (integrity ) este scopul securitat , ii datelor; integritatea datelor intent , ionate sau accidentale de alterare a integritat nu fost alterate/modicate ntr-un mod neautorizat; presupune ca acele date sa att la date aate pe dispozitive de stocare, la fel ca s i condent ialitatea se refera , , ct s , i la date aate n procesare sau n tranzit;

denial of service este un tip de atac care are ca efect prevenirea accesului
sau ntrzierea operat autorizat la o resursa , iilor critice n raport cu timpul; o informat n cadrul unui domeniu de identitate (identity ) reprezinta , ie unica ca o entitate unica n acel domeniu; securitate, recunoscuta probabilitatea ca o anumita amenint exploateze o risc (risk ) reprezinta , are sa vulnerabilitate a sistemului s , i impactul care ar rezulta n urma acestei act , iuni;

284

INTRODUCERE N SISTEME DE OPERARE

la o slabiciune vulnerabilitate (vulnerability ) se refera la nivelul proiectarii, sau operarii sistemului, care poate declans intent implementarii , ata , ionat sau accidental, rezultnd ntr-o violare a politicii de securitate a sistemului. o serie de confuzii de termeni de nume pentru persoanele implicate n domeniul Exista , ii. De multe ori not generic pentru a cataloga securitat , iunea de hacker este folosita este cea de cracker (sau atacatorii de ret , ea des , i, mai corect, denumirea corecta reprezinta denumirile uzuale folosite s black-hat hacker ). Urmatoarea lista ,i semnicat iile acestora: , init hacker este, n sensul sau , ial, un programator caracterizat prin curiozitate s ,i
1 de rezolvare a problemelor existente (de unde not dorint ,a , iunea de hacking ; n , ii, not nt sensul securitat , iunea de hacker poate avea doua , elesuri: white-hat hacker (ethical hacker ) sau black-hat hacker (cracker );

cracker (sau black-hat hacker este specializat n atacatarea unor sisteme pentru
politica, sau pentru distract obt , inerea accesului; motivat , ia poate nanciara, , ie; 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 considerat , i hackeri dar care folosesc scripturi sau programe scrise de alt , ii pentru a ataca sisteme de calcul s , i ret , ele;

ethical hacker (sau white-hat hacker este un expert n securitate, specializat


, ii unui sistem sau a unei ret n metodologii de testare a vulnerabilitat , ele pentru a asigura un nivel ct mai bun de securitate; n general, ethical hackerii aplica metode similare crackerilor, dar cu scopul nal de testare s , i securizare a sistemului atacat.

10.2

Securizarea sistemului

la mijloacele prin care se poate proteja un sistem de Securitatea sistemului se refera pot veni din calcul. Atacurile pot veni din exterior (din Internet, sau din ret , eaua locala), interior (de la utilizatori) sau pot cauze naturale (caderea tensiunii poate conduce la pierderea unui hard disk sau la coruperea datelor). doar la protect Protejarea sistemului nu se refera , ia sistemului de operare s , i a aplicat , iilor peste acesta ci s a sistemului: pozit ce ruleaza , i la protect , ia zica , ionarea n zone sigure, folosirea de us , i metalice, prevenirea accesului persoanelor neautorizate.

10.2.1

Securitatea sistemului de operare

porneasca de la asumarea gradului de risc dat de Securitatea aplicat , iilor trebuie sa sistemul de operare. Dintre componentele sistemului de operare, o mare parte a sa exploateze limitari ale implementarilor atacurilor ncearca de separare a drepturilor de acces la memorie sau la sistemul de s iere. ,
1

http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)

CAPITOLUL 10. ELEMENTE DE SECURITATE

285

resursele acestuia (zone de memorie, dispozitive Un sistem de operare este sigur daca , ile active (n general de intrare/ies , ire, s , iere etc.) sunt accesate n mod valid de entitat ca procese). Accesul valid este asigurat de nucleul sistemului de operare, ce act , ioneaza un intermediar ntre utilizatori s , i componentele hardware. la sistemele complexe Pornind de la sistemele de operare simple (cele pentru PDA) pna pe calculatoarele personale, securitatea oferita de nucleu se bazeaza pe ce ruleaza cel put niveluri de privilegii: suport hardware. Procesoarele ofera , in doua

un nivel de privilegii pentru operat, ii obis , nuite; un altul pentru accesul la instruct, iuni privilegiate: accesul la zone de memorie
accesul la dispozitivele hardware etc. rezervata; Accesul la aceste instruct , iuni privilegiate este permis doar nucleului.

Securitatea memoriei a de n sistemele de operare moderne, securitatea memoriei este strns legat Far a a intra n detalii, este sucient de precizat faptul mecanismul de memorie virtuala. sistemele de operare asigura ecarui ca proces un spat , iu dedicat de memorie virtuala (denumit s , i spat , iu de adrese) care este mapat/asociat unor zone din memoria RAM. Zonele de memorie RAM peste care este mapat spat , iul de adrese al unui proces nu poate accesat de catre alte procese. a ncercarilor Problemele de securitate la nivelul memoriei t de , in de detectarea corecta accesare a unor zone de memorie care nu se aa n spat , iul de adresa al procesului respectiv, dar s i a ncerc arilor de schimbare a unor zone de memorie n spat , , iul propriu procesului. de adrese, pe parcursul rularii spat mapat peste un spat Fiecare proces are propriul sau , iu de memorie virtuala , iu de printr-o tabela de translatare ce apart memorie zica , ine procesului. Pentru un proces sa acceseze o adresa de memorie pentru care nu exista o translatare care ncearca zica (adica pentru care nu exista pagina respectiva de memorie n catre o adresa respectiva adresa se aa n spat RAM), procesorul va verica la nivel hardware daca , iul de adrese al procesului. Daca se aa, nseamna ca respectiva pagina de memorie a pe disc (swap) s n RAM. n caz contrar va generat un fost evacuata , i trebuie adusa (de memorie) invalida (denumit page fault1 ), pe baza caruia semnal de pagina 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. esent a sistemelor multitasking (sisteme ce Protect , ia memoriei este o componenta , iala posibilitatea mai multor procese de a se aa n stare de execut ofera , ie n acelas , i timp). Din punct de vedere hardware, primele procesoare pentru calculatoarele personale ce 2 suport pentru protect ofera , ia memoriei sunt procesoarele din familia Intel 80386 . a suport Folosind mecanisme mprumumate de la DOS, care rula pe sisteme far
1 2

http://en.wikipedia.org/wiki/Page_fault http://en.wikipedia.org/wiki/Intel_80386

286

INTRODUCERE N SISTEME DE OPERARE

la Windows 98 s hardware (8086, 80286), versiunile de Windows pna , i Windows ME nu au oferit o protect , ie completa a memoriei.

10.2.2

Controlul accesului

la oferirea accesului autorizat s Controlul accesului se refera , i prevenirea acccesului neautorizat la sistem. Poate vorba de accesul zic al unei persoane sau de accesul unui utilizator n cadrul sistemului de operare.

Securitatea zica include o gama larga de parametri, de la controlul accesului personal Securitatea zica la asigurarea diferit pna , ilor parametri optimi de funct , ionare. componenta a securitat , ii zice presupune plasarea echipamentelor n locuri O prima n care se poate asigura controlul accesului, pentru a preveni utilizarea neautorizata, distrugerea sau furtul. ale consumului de putere Specicat , iile de alimentare cu tensiune vor include evaluari pentru dimensionarea surselor neinteruptibile de putere (UPS-uri), sau a generatoarelor de tensiune. Asigurarea temperaturii optime n centrele de operat , ii t , ine de folosirea unor sisteme de aer condit ionat sau de nc alzire cu un grad ridicat de redundant , , a. s cu servere va trebui sa aiba, Exista , i cerint , e de protect , ie mpotriva incendiilor: o camera sisteme de detect pe lnga , ie s , i stingere a incendiilor, s , i podea s , i peret , i din materiale rezistente la foc. politica de securizare va urmari plasarea echipamentelor n bunkere aate la O buna subsolul cladirilor, urmarindu-se astfel s , i protect , ia mpotriva cutremurelor.

Securitatea la nivelul utilizatorilor Una dintre componentele esent , iale ale unei politici de securitate este securitatea la pe separarea resurselor nivelul utilizatorilor. Securitatea utilizatorilor se bazeaza ecarui utilizator, precum s i pe folosirea autentic arii pentru protejarea accesului la , resurse. Principiul important de prevenire a atacurilor la nivelul utilizatorilor este principiul celui dintr-un cont cu drepturi ct mai mai mic privilegiu. Orice operat , iune trebuie executata limitate. Un administrator novice va folosi contul privilegiat inclusiv pentru efectuarea unor , i ale variabilelor de mediu poate duce n operat , iuni uzuale. Exploatarea unor ambiguitat a unei aplicat a ntr-un spat acest caz la rularea accidentala , ii malit , ioase lasat , iu public dintr-un cont de utilizator. Una dintre criticile (gen /tmp/), rulare ce nu ar fost posibila aduse sistemelor din familia Windows a fost crearea unui cont implicit de tip drepturi depline utilizatorului sistemului, inclusiv instalarea Administrator care ofera

CAPITOLUL 10. ELEMENTE DE SECURITATE

287

unor programe malit prin , ioase. ncepnd cu Windows Vista, acest lucru a fost combatut 1 folosirea User Account Control .

10.2.3

Parole

Des mecanismele de autenticare s-au diversicat, n continuare o pondere ,i o constituie perechile <utilizator, parol semnicativa a>. O solut, ie alternativa, un grad mult mai ridicat de scalabilitate, precum s ce ofera i de securitate, este folosirea , 2 la baza folosirii de certicate se numes de certicate. Conceptul ce sta (Public , te PKI Key Infrastructure). resurselor electronice ind n continua cres comita Numarul , tere, mult , i utilizatori ajung sa ati ale autenticarii: cel put alegerea de parole us , in una dintre erorile de cap , or de ghicit (spart), folosirea unei parole pentru mai multe conturi sau notarea parolelor n locuri nesigure.

Alegerea parolelor Una dintre principalele probleme n alegerea parolelor este folosirea de parole prea simple. Mult , i utilizatori folosesc numele propriu, numele sot , iei, copiilor sau cinelui, o de nas data , tere, numele echipei preferate. Aceste parole pot us , or ghicite printr-un atac de tipul dict ionar. , o parola ecienta: Se spune ca, aiba un numar de minim 7-8 caractere; trebuie sa foloseasca att minuscule, ct s trebuie sa , i majuscule s , i cifre; includa cel put trebuie sa , in un caracter special (s , i nu doar pe ultima pozit , ie n cadrul parolei); e un cuvnt din dict nu trebuie sa , ionar; e un nume de persoana. nu trebuie sa situat e us Cu toate acestea, parolele trebuie sa , ie, cea mai la , or de ret , inut. n aceasta solut ndemna se poate deduce parola (vezi , ie este alegerea unei fraze pe baza careia Ross Anderson Security Engineering, sect iunea 3.3.3 [3]). Come to the dark side, we , pentru a ret cum Social have cookies! poate folosita , ine parola Cttds, whc!, dupa engineering bypasses all technologies, including rewalls poate genera S3bat,1f. recomandarile n cazul folosirii unei parole ce nu respecta de mai sus, atacurile bazate pe dict , ionar (ncercarea parolelor ce apart , in unui set de cuvinte comune), sau cele bazate pe fort a burt a (ncercarea tuturor combinat , , iilor de caractere) pot avea rezultate numeroase aplicat astfel de atacuri, una dintre aproape imediate. Exista , ii ce simuleaza 3 cele mai renumite ind John the Ripper .
1 2

http://en.wikipedia.org/wiki/User_Account_Control http://en.wikipedia.org/wiki/Public_key_infrastructure 3 http://openwall.com/john/

288

INTRODUCERE N SISTEME DE OPERARE

la conturile de email, sau la conturile bancare De la conturi triviale de download pna o autenticare pe baza de parola. Este ideala electronice, tot mai multe resurse solicita separarea conturilor prin parole individuale. Cum acest lucru presupune ridicat de fraze, o solut n folosirea unor memorarea unui numar , ie de compromis consta de securitate redusa. Astfel, nu este parole comune pentru servicii similare cu miza folosirea PIN-ului cardului de banca pentru contul de mail; un atac de fort prudenta ,a ar dura aproximativ o microsecunda. Se poate nsa folosi aceeas pentru bruta , i parola mai multe site-uri de descarcare de software. mica reduce Des , i folosirea unor parole comune pentru servicii electronice cu miza destul de multe. n plus, politicile de securitate numarul parolelor, acestea pot nsa, schimbarea periodica a parolelor: timpul de viat recomandat pentru o parola solicita ,a este de s ase luni. n m asura n care parolele folosite nu pot memorate, vor trebui , a pe o foaie cu acces public. notate. n mod evident, notarea parolelor nu trebuie facut n pastrarea O solut lor centralizata. Exista , ie pentru parolele rar folosite consta numeroase aplicat ii menite s a protejeze printr-o singur a parol a o baz a de date de , parole (spre exemplu KeePass1 . Cons , tientizarea important , ei unei parole nu t , ine doar de protejarea unor resurse personale, ci de gradul de securitate a ntregului sistem, precum s , i a ret , elei locale. Altfel spus, ntr-o ret , ea n care utilizatorii folosesc parole triviale, riscul nu este doar unul compromita din Internet un cont local, transformnd un personal. Un atacator poate sa ntr-unul generat de pe aceeas ceea ce i cres atac de la distant ,a , i mas , ina, , te mult s ansele de succes. Acesta este s i motivul pentru care au evoluat s i mecanismele prin , , , care administratorii de ret , ea pot fort , a folosirea unor parole eciente. suport pentru securitatea bazata pe Att ret , elele Windows, ct s , i cele Linux ofera 2 parola la ecare 30 sau 60 de jetoane hardware (security token ) ce s , i regenereaza sincronizat ceasul serverului cu ceasul jetonului hardware, utilizatorul secunde. Odata de cont s de jeton la momentul autenticarii. va folosi numele sau Pret , i parola as , ata , ul unei astfel de solut , ii este de 5-10 euro per jeton hardware, ecare jeton trebuind aceasta solut riscurile de recongurat la 6 luni. Trebuie remarcat totus , i ca , ie nu rezolva a parolei. securitate zica

Gestiunea parolelor n Unix a ce precalcularea Parolele erau, init , ial, stocate n s , ierul /etc/passwd, dar, pe masur 3 a aparut s nevoia unui s , i stocarea parolelor comune a devenit posibila, , ier separat, cu permisiuni mai stricte, n care sunt stocate parolele. Acesta se numes , te /etc/shadow s i formatul s au, ct s i al /etc/passwd , este descris n sect iunea 3.3.1. , , , Utilitarul pentru schimbarea parolei n Unix este passwd. Utilizatorul privilegiat (root) poate schimba parola oricarui utilizator, inclusiv a sa. Un utilizator neprivilegiat poate parola proprie schimba doar parola proprie. nainte de a schimba parola i este solicitata pentru a preveni situat ia n care un utilizator uit a o sesiune shell deschis a. ,
1 2

alina@valhalla:~$ passwd Changing password for alina.


1 2

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

CAPITOLUL 10. ELEMENTE DE SECURITATE


3 4 5 6

289

(current) UNIX password: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully

se dores e relativ sigura, se Daca , te obt , inerea unei parole us , or de ret , inut, dar care sa n mod implicit parole de 8 caractere poate folosi utilitarul pwgen. pwgen genereaza (incluznd cifre):
1 2 3 4 5

alina@valhalla:~$ pwgen -N 1 uo3Pheis alina@valhalla:~$ pwgen -N 2 Eeb7Aej9 Xoo0beir

Utilitarul permite personalizarea parolelor obt , inute. n exemplul de mai jos, parametrul faptul ca n parola va inclusa cel put parametru -c de va deni -n precizeaza , in o cifra, lungimea parolei dorite. Ultima cifra reprezinta numarul de parole ce trebuie generate.
1 2

alina@valhalla:~$ pwgen -n -c 7 3 ahngeZ5 aiv5Iec bie3poR

10.2.4

Securitatea sistemului de s , iere

, te asigurarea izolarii utilizatorilor prin separarea Securitatea sistemului de s , iere urmares s , ierelor personale s , i prin denirea act , iunilor permise de utilizatori pe diverse sect , iuni din ierarhia sistemului de s iere. , Fiecare utilizator dispune de o intrare (un director) n sistemul de s , 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 s s , ierele cont , inute n respectivul director. Unele intrari , iere nu pot folosite dect de utilizatorul privilegiat.

Controlul accesului ntre sistemele Controlul accesului la diverse elemente ale sistemului de s , iere difera Windows s i cele Unix. , de la versiunea 4.0 posibilitatea denirii unei n Windows, sistemul de s , iere NTFS ofera lista de acces este denita n liste de acces pentru ecare utilizator din sistem. Aceasta 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 s , iere NTFS este tratat mai pe larg n studiul de caz al acestui capitol n sect iunea 10.6.1. Abordarea n , 1 a mecanismului de control a accesului . cazul Windows este o forma n Unix pentru denirea drepturilor de acces la sistemul de s Abordarea folosita , iere este o matrice de drepturi. se folosesc trei trepte de privilegiu: Pentru a obt , ine o matrice limitata,
1

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

290

INTRODUCERE N SISTEME DE OPERARE Tabelul 10.1: Matricea drepturilor de acces n Unix citire (r) scriere (w) execut , ie (x) utilizator grup alt , ii

utilizatorul (user) care det, ine s , ierul; grupul (group) care det, ine s , ierul; alt , i utilizatori (others).
Pentru ecare dintre cele trei trepte de privilegiu sunt denite cte trei drepturi:

citire (read) permite vizualizarea cont, inutului unui director sau a unui s , ier; scriere (read) permite alterarea cont, inutului unui s Pentru , ier sau director.
posibilitatea s de un director, alterarea cont , inutului nseamna , tergerii sau crearii s iere; ,

execut , ia unui s , ier s , i permite parcurgerea unui , ie (execute) permite execut


un director nu are drept de execut director; daca , ie, nu poate parcurs (nu se poate ajunge la s ierele s i subdirectoarele cont inute). , , , rezulta un total de 9 Avnd trei trepte de privilegiu s , i trei drepturi pentru ecare treapta, a matricei de acces drepturi care pot congurate pentru un s , ier dat. Forma liniarizata (s i a celor 9 drepturi) este as at a de comand a ls cu opt iunea de long listing (-l): , , ,
1 2

root@rosedu:~:~# ls -ld /var/svn/hfall/db/ drwxr-xr-x 6 hfall projects 4096 Jul 23 13:34 /var/svn/hfall/db/

n listing-ul de mai sus, utilizatorul asociat directorului /var/svn/hfall/db/, (hfall), are drepturi complete (rwx), iar grupul asociat (projects) s , i ceilalt ,i utilizatori au drept de citire s , i execut , ie (r-x) (se poate vizualiza s , i parcurge directorul). a matricei de acces pentru un s de comanda ls -l) este Forma liniarizata , ier (as , ata n gura 10.1. prezentata

Figura 10.1: Permisiuni Unix

CAPITOLUL 10. ELEMENTE DE SECURITATE

291

Pentru a specica mai succint drepturile de acces la un s , ier, utilizatorii avansat , i Unix prefera forma octala a drepturilor de acces la un s , ier. n cadrul acestei forme, ecare drept de acces este nlocuit cu un bit. Astfel, n cazul listing-ului de mai sus, drepturile de acces sunt:
1 2

rwx r-x r-x 111 101 101

unei trepte de privilegiu) este tranformata ntr-o Fiecare pereche de trei bit , i (asociata Forma nala, n octal, pentru drepturile de mai sus este, as valoare octala. adar 755. , s n tabelul 10.2 sunt prezentate cteva exemple de asociere ntre forma literala , i forma a dreputurilor de acces pe s octala 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 s sunt chown s n administrarea securitat , iere n Unix, utilitarele de baza ,i posibilitatea schimbarii proprietarului s chmod. Primul ofera i apart , i a grupului caruia , ine respectivul s , ier, n vreme ce al doilea permite modicarea drepturilor.
1

root@kiwi:~# chown -R george:users test/

o schimbare recursiva pentru toate s n exemplul de mai sus a fost efectuata , ierele s , i subdirectoarele directorului test/. ntreg cont , inutul directorului test/ va apart , ine utilizatorului george s i grupului users . , se dores Daca , te doar modicarea utilizatorului sau grupului, se foloses , te doar o parte a sintaxei:
1 2 3 4 5 6 7 8 9 10 11 12 13 14

razvan@valhalla:/tmp$ chown alina battleship chown: changing ownership of battleship: Operation not permitted razvan@valhalla:/tmp$ sudo bash root@valhalla:/tmp# chown alina battleship root@valhalla:/tmp# ls -l battleship -rw-r--r-- 1 alina razvan 0 Sep 19 18:01 battleship root@valhalla:/tmp# chown :shadow battleship 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 s , ierul /tmp/battleship ca n Linux, un utilizator neprivilegiat nu n alina, respectiv shadow. Se observa

292

INTRODUCERE N SISTEME DE OPERARE

doar de poate schimba det unui s , inatorul , ier. n Linux, comanda chown este folosita catre utilizatorul privilegiat. Pe alte Unixuri (spre exemplu, Solaris) comanda poate s folosita , i de un utilizator neprivilegiat. Comanda chmod permite modicarea drepturilor de acces ale unui s Comanda , ier. doar de utilizatorul ce det poate folosita ine s ierul sau de utilizatorul privilegiat. Noile , , literala sau octala. drepturi ale s , ierului pot precizate n forma Fie s , ierul hello.c de mai jos:
1 2

root@kiwi:~# ls -l hello.c -rw-r--r--

1 razvan new 81 Oct

6 21:35 hello.c

Drepturile pot 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 : utilizatori printr-o singura litera: adaugate prin folosirea operatorului +; nlaturate prin folosirea operatorului -;

precizate explicit prin folosirea operatorului =.


1 2 3 4 5 6 7 8 9 10

root@kiwi:~# chmod o+x hello.c root@kiwi:~# ls -l hello.c -rw-r--r-x 1 razvan new 81 Oct root@kiwi:~# chmod u=rx hello.c

6 21:35 hello.c

root@kiwi:~# ls -l hello.c -r-xr--r-x 1 razvan new 81 Oct

6 21:35 hello.c

n exemplul de mai sus a fost mai nti adaugat pentru restul utilizatorilor dreptul de drepturile utilizatorului trebuie sa e execut , ie, iar la al doilea pas s-a precizat explicit ca doar citire s rx adica , i execut , ie. n format octal, pentru a acorda toate drepturile utilizatorului (rwx), drepturi de citire s ,i execut , ie grupului (r-x), s , i doar drepturi de citire pentru restul utilizatorilor (r--) este o singura comanda: sucienta
1 2 3 4

root@kiwi:~# chmod 754 hello.c root@kiwi:~# ls -l hello.c -rwxr-xr-- 1 razvan new 81 Oct

6 21:35 hello.c

umask n sistemul de s Pentru controlul drepturilor unei noi intrari , iere se foloses , te un parametru de restrict ie numit masc a de creare ( le mode creation mask ). Drepturile efective ce , n sistemul de s vor atribuite unei noi intrari , iere se obt , in prin efectuarea operat , iei de S , I a mas , tii s logic ntre valoarea inversata i permisiunile implicite ( 666 pentru s iere s i 777 , , , matematic, operat pentru directoare). Reprezentata , ia este default_perm & ~mask. , tii se numes Comanda ce permite inspectarea s , i modicarea mas , te umask.

CAPITOLUL 10. ELEMENTE DE SECURITATE

293

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

root@kiwi:~# umask 0022 root@kiwi:~# touch uso7_test1 root@kiwi:~# ls -l uso7_test1 -rw-r--r-- 1 razvan razvan 0 Nov 10 17:28 uso7_test1 root@kiwi:~# umask 027 root@kiwi:~# touch uso7_test2 ro0t@kiwi:~# ls -l uso7_test2 -rw-r----- 1 razvan razvan 0 Nov 10 17:28 uso7_test2 root@kiwi:~# mkdir uso7_test_dir root@kiwi:~# ls -ld uso7_test_dir/ drwxr-x--- 2 razvan razvan 1024 Nov 10 17:29 uso7_test_dir

faza masca are valoarea 0022. Acest lucru nseamna n listingul de mai sus, n prima ca un s , ier nou creat (uso7_test1 va avea drepturile
1 2

666 & ~022 = 666 & 755 = 110 110 110 & 111 101 101 = = 110 100 100 = 644 = rw- r-- r--

n ultimul pas, masca are valoarea 027. Directorul uso7_test_dir/ va creat cu drepturile
1 2

777 & ~027 = 777 & 750 = 111 111 111 & 111 101 000 = = 111 101 000 = 750 = rwx r-x ---

10.3

ntret , inerea sistemului

congurarea drepturilor de acces la nivelul sistemului de operare sau al sistemului Dupa mentenant de s , iere, unui sistem i trebuie asigurata , a. Aceasta presupune vericarea a nivelului de securitate a sistemului, a jurnalelor, a act periodica , iunilor utilizatorilor s ,i forma de asigurare a securitat , ii, iar proceselor. Prevenirea atacurilor este cea mai buna un administrator de sistem profesionist va inspecta periodic sistemul s i va lua m asurilor , adecvate atunci cnd sigurant a sistemului este periclitat a. ,

10.3.1

Monitorizarea sistemului

a sistemului Monitorizarea dinamica (n timp real) a sistemului urmares , te nivelul de ncarcare Monitorizarea dinamica a diferitelor resurse hardware. Astfel, pentru a determina gradul de ncarcare a nivelul de folosire a procesorului se poate folosi comanda uptime. Pentru a urmari memoriei RAM se poate folosi comanda free.

294

INTRODUCERE N SISTEME DE OPERARE

informat Comanda top (vezi sect , iunea 5.2.4) combina , iile oferite de comenzile uptime s , i free.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

top - 14:05:43 up 8:12, 2 users, load average: 1.01, 1.02, 1.00 Tasks: 61 total, 3 running, 58 sleeping, 0 stopped, 0 zombie Cpu(s): 99.7% us, 0.3% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 256740k total, 254200k used, 2540k free, 12680k buffers Swap: 289128k total, 1444k used, 287684k free, 41356k cached PID 2490 14067 1 2 3 4 5 31 41 USER www-data root root root root root root root root PR 25 16 16 34 5 8 14 5 20 NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 0 26204 18m 12m R 99.5 7.5 275:26.52 apache 0 2064 1036 1852 R 0.3 0.4 0:00.02 top 0 1504 512 1352 S 0.0 0.2 0:00.73 init 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 -10 0 0 0 S 0.0 0.0 0:00.00 events/0 -10 0 0 0 S 0.0 0.0 0:00.00 khelper -10 0 0 0 S 0.0 0.0 0:00.00 kacpid -10 0 0 0 S 0.0 0.0 0:03.15 kblockd/0 0 0 0 0 S 0.0 0.0 0:00.00 pdflush

Prima linie cont , ine (n acelas , i format) informat , iile oferite de comanda uptime: ora intervalul de timp de la ultima init curenta, , ializare a sistemului (n cazul exemplului 8 ore s i 12 minute), num arul de utilizatori autenticat medie a , , i n sistem s , i ncarcarea este sistemului pentru ultimele 1, 5 sau 15 minute. O ncarcare supraunitara cu un sistem solicitat. echivalenta informat Liniile 4 s Linia 4 descrie ncarcarea , i 5 ofera , iile specice comenzii free. nivelul de utilizare a partit memoriei RAM, iar linia 5 indica iei de swap. Folosirea unei , , i nsemnate de memorie din swap indica faptul ca memoria RAM este cantitat pentru cerint insucienta ele sistemului. , ca procesorul este suprancarcat, n exemplul de mai sus se observa n vreme ce (pentru ca memoria swap nu este folosita). memoria RAM este bine dimensionata Inspectnd mai departe procesele cele mai relevante din punctul de vedere al ca procesul apache a petrecut n procesor 275 de consumului de resurse se observa mai mult de jumatate minute, adica din timpul scurs de la ultima init , ializare a sistemului. de asemenea, ca, n momentul rularii comenzii, procesul apache folosea Se observa, 99.5% din procesor. Acesta este un comportament neobis , nuit. Pentru un sistem bine ocupe 1-2 congurat cele mai active procese vor reus , i la nivelul unei luni de zile sa minute. resursele hardware Concluzia analizei dinamice a sistemului de mai sus nu este ca unul dintre servicii (mai exact serviciul de web) are un sunt insuciente, ci ca a ar trebui sa e oprirea procesului apache s comportament anormal. Prima masur ,i inspectarea congurat iilor specice acestui daemon. ,

discului Monitorizarea utilizarii resursa importanta a unui sistem o reprezinta spat O alta , iul liber de pe hard-disk. Pentru aceasta trebuie monitorizat nivelul de ocupare a partit , iilor denite pe disc, dar s ,i dimensiunea unor directore s i s iere. , ,

CAPITOLUL 10. ELEMENTE DE SECURITATE

295

Spat , iul liber pentru partit , iile disculurilor sistemului se poate vizualiza cu ajutorul comenzii df:
1 2 3 4 5

root@cursuri:/home/courses# Filesystem Size /dev/hda1 4.6G tmpfs 126M /dev/hda6 32G

df -h Used Avail Use% Mounted on 3.2G 1.2G 74% / 4.0K 126M 1% /dev/shm 30G 1.2G 97% /home

, it n doua partit pentru n exemplul de mai sus spat , iul pe disc este mpart , ii: una folosita ca /) s pentru stocarea datelor utilizatorilor rularea sistemului (montata , i o a doua folosita ca /home). n acest fel, chiar daca spat (montata , iul pe partit , ia /home este epuizat, acest lucru nu va afecta funct ionarea sistemului. , n cazul n care se dores , te inspectarea dimensiunii unui s , ier anume se poate folosi comanda ls sau comanda stat:
1 2 3 4 5

root@rosedu:~# ls -lh /var/log/apache2/access.log -rw-r----- 1 root adm 7.2M Sep 19 20:12 /var/log/apache2/access.log root@rosedu:~# stat -c %s /var/log/apache2/access.log 7482956

Pentru a obt , ine dimensiunea unui director se poate folosi comanda du:
1 2

root@cursuri:/home/courses# du -sh rc 155M rc

Monitorizarea serviciilor de ret , ea este folosit utilitarul Pentru monitorizarea serviciilor de ret , ea disponibile pe stat , ia locala netstat. a niciun parametru, netstat va as cu toate conexiunile active Apelat far , a o lista inactive). O utilizare frecventa a acestui (porturile aate n starea de listen se considera , te testarea funct utilitar urmares ionalit at ii anumitor servere (HTTP, FTP etc.). n general, , , conexiuni TCP sau UDP pe anumite porturi. aceste servere as , teapta Pentru a obt , ine lista tuturor conexiunilor TCP, se poate folosi:
1 2 3 4 5 6 7

root@rosedu:~# netstat --tcp --all Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address tcp 0 0 *:ssh *:* tcp 0 0 *:smtp *:* tcp 0 0 *:git *:* [..]

State LISTEN LISTEN LISTEN

eventuale cereri Pentru a verica funct , ionarea diferitelor servere instalate, care asculta comanda: de conectare, este utila
1 2 3 4 5 6

root@rosedu:~# netstat --tcp --listening --numeric-ports Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:9418 0.0.0.0:* LISTEN

296
7 8

INTRODUCERE N SISTEME DE OPERARE


0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

tcp [..]

ca sistemul mas exista servere care asculta pe portul 22 (SSH), Se observa , ina locala 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 presupunem ca se descopera un server care funct (se aa n starea LISTEN) Sa , ioneaza pe portul 22. Pentru oprirea acestui server putem opri procesul corespunzator. nainte trebuie aat pid-ul acestui proces (opt nsa, , iunea -p sau --program):
1 2 3 4 5 6 7

root@rosedu:~# netstat --tcp --listening --program --numeric-ports Active Interne connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5721/apache [..] tcp6 0 0 :::22 :::* LISTEN 5515/sshd tcp6 0 0 ::1:25 :::* LISTEN 5505/master

Ulterior, se poate trimite un semnal KILL catre procesul cu numarul 5515.


1

root@rosedu:~# kill -KILL 5515

, ii utilizatorilor Monitorizarea activitat Pentru a determina ce utilizatori sunt autenticat , 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)

n sistem sunt autenticat Din exemplul de mai sus se poate deduce ca , 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 cuvinte prin intermediul unor sesiuni la distant , a. , iata la ora 13:50 de pe stat , ia anaconda.cs.pub.ro, n vreme ce sesiunea utilizatorului la 14:05 de pe sistemul kiwi.cs.pub.ro. ot a fost nceputa se poate folosi Pentru a determina ce utilizatori au folosit sistemul n ultima perioada, comanda last:
1 2 3 4 5 6 7 8

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 wtmp begins Tue Sep 1 08:01:55 2009

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)

10.3.2

Jurnalizarea s , i gestiunea jurnalelor

ca daemoni (vezi sect Majoritatea serviciilor sistemului ruleaza , iunea 5.3) s , i nu pot comunica direct cu utilizatorul. Utilizatorul interact ioneaz a cu serviciile prin intermediul ,

CAPITOLUL 10. ELEMENTE DE SECURITATE

297

informat semnalelor s , i a s , ierelor de congurare, iar serviciile ofera , ii de stare, raportare s , i funct , ionare prin intermediul s , ierelor jurnal (server logs). Fis , ierele jurnal pot avea diverse formate, dar, n general, ecare linie de tip jurnal ora s precizeaza , 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 este vorba de o conexiune init de web Common Log Format. n cazul de fat ,a , iata crawler-ul de la Yahoo!1 .
1

72.30.78.249 - - [19/Sep/2009:20:29:26 +0300] "GET /tag/picasa/ HTTP/1.0" 200 6331 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help. yahoo.com/help/us/ysearch/slurp)"

Pe un sistem Unix, jurnalele se gasesc, de obicei, n /var/log/:


1 2 3 4 5 6

root@swarm:~# ls /var/log apache2 daemon.log.4.gz apt debug .0 auth.log dmesg .1 auth.log.0 dmesg.0 .2.gz [...]

kern.log kern.log.1 lastlog lpr.log

mail.log.4 mail.log.5.gz mail.log.6 mail.log.6.gz

syslog syslog syslog syslog

Crearea jurnalelor

sysklogd este un utilitar care permite lucrul cu mesajele sistem s , i cele generate de kernel. Pe scurt, aplicat iile trimit diferite mesaje c atre sysklogd iar acesta, utiliznd , un s , ier de congurare, depune aceste mesaje n anumite s , iere, le scrie n anumite mas console sau eventual le trimite catre o alta , ina.
n Debian utilitarul sysklogd este disponibil n pachetul cu acelas , i nume. Fis Acest s , ierul de congurare este /etc/syslog.conf. , ier cont , ine reguli care denesc modul n care sunt stocate mesajele de jurnalizare transmise de serviciile sistemului. s Des , i este foarte util pentru monitorizarea sistemului, sysklogd prezinta , i unele ar putea genera foarte multe mesaje, dezavantaje. De exemplu, o aplicat , ie neglijenta ceea ce ar putea duce la umplerea discului s i la instabilitatea ntregului sistem. Trimirea , mas mai put n ret mesajelor catre o alta , ina, , in importanta , ea, ar rezolva aceasta 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 faptului ca mesajele recente sunt atas la less. Datorita , ate la sfrs , itul s , ierului jurnal, un utilitar des folosit este tail.
1

http://help.yahoo.com/l/us/yahoo/search/webcrawler/

298

INTRODUCERE N SISTEME DE OPERARE

a jurnalelor se foloses Pentru inspectarea dinamica , te comanda tail cu opt , iunea -f. Comanda tail as , eaza n mod implicit ultimele 10 linii dintr-un s , ier dat. Prin folosirea as parametrului -f se asigura area dinamic a a liniilor ad augate la respectivul s , , ier. a activitat , ii Comanda de mai jos este un exemplu de folosire pentru inspectarea dinamica serviciilor de e-mail:
1

root@cursuri:/var/log# tail -f /var/log/mail.log

Rotirea jurnalelor spat Pentru a evita problema ocuparii , iului de pe disc de s , ierele jurnal, sistemele Unix dispun de utilitarul logrotate. Acesta permite reutilizarea s , ierelor de jurnalizare amnal au depas , it o anumita dimensiune. n momentul n care zilnic, sapt sau daca o rotat condit , ia de timp sau spat , iu a fost ndeplinita se efectueaza , ie. salvarea cont O rotat , ie nseama , inutul jurnalului ntr-un s , ier de backup cu un nume un numar. Fis format din numele original la care se adauga , ierul de backup copia avnd mai mare cu ct este mai veche (test.log.1, test.log.2 etc). La ecare rulare, un numar logrotate va s n , terge s , ierul cel mai vechi s , i le va actualiza pe celelalte corespunzator. general, s , ierele de backup sunt arhivate s , i comprimate. Mai jos sunt prezentate s , 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

(cron). logrotate este de obicei rulat zilnic de catre serviciul de planicare periodica de congurare este /etc/logrotate.conf. Fis , ierul sau

Alte utilitare de jurnalizare Utilitarul dmesg poate folosit pentru as , area informat , iilor de la init , ializarea sistemului. a jurnalelor Acestea sunt mesaje ale nucleului s i pot obt inute s i prin vizualizarea directa , , , de nucleu. Pentru congurat n s , iile implicite, jurnalele de nucleu sunt pastrate , ierul /var/log/kern.log.

10.3.3

Limitarea drepturilor

suport n principal doar pentru doua niveluri de privilegiu: utilizatori Sistemele Unix ofera neprivilegiat i s i administrator (root). n practic a este necesar un grad mai ridicat de , , exibilitate n acordarea privilegiilor, pentru a permite utilizatorilor obis , nuit , i rularea unor aplicat ii privilegiate. n acelas i timp, un utilizator obis nuit poate abuza de resursele care , , ,

CAPITOLUL 10. ELEMENTE DE SECURITATE

299

i sunt puse la dispozit , ie s , i poate, accidental sau intent , ionat, conduce la destabilizarea sau suspendarea sistemului. , i pentru limitarea sau extinderea De accea, un sistem de operare va oferi facilitat privilegiilor la nivel de aplicat , ie sau la nivel de utilizator.

Folosirea atributelor setuid s , i setgid utilitarele ce necesita resurse speciale din O categorie aparte de aplicat , ii o reprezinta nucleu. Pentru a putea da posibilitatea s i utilizatorilor neprivilegiat , , i de a rula astfel de pe parcursul execut programe, identicatorul utilizatorului (uid) se schimba , iei programului. La ncheierea unei astfel de act , iuni se revine la identicatorul utilizatorului ce a lansat aplicat ia. , ntr-un sistem Linux, acest lucru este realizat prin folosirea atributelor setuid s ,i Aceste atribute sunt marcate ca permisiuni de acces pentru un s ier , acelui executabil, procesul creat ruleaza nu mai ruleaza executabil. n momentul rularii cu drepturile utilizatorului care a lansat programul, ci cu drepturile utilizatorului ce acest utilizator este root, atunci procesul are drepturi privilegiate. det , ine s , ierul; daca

setgid.

Pentru activarea atributelor setuid s Bit , i setgid se foloses , te utilitarul chmod. , ii asociat i celor dou a atribute se g asesc ntr-un num ar n octal care precede cele 3 , numere n octal asociate drepturilor de acces:
1 2 3 4 5 6 7 8 9 10 11 12

root@kiwi:~# ls -l a.out -rwxr-xr-x 1 razvan razvan 13564 Jul root@kiwi:~# chmod 2755 a.out root@kiwi:~# ls -l a.out -rwxr-sr-x 1 razvan razvan 13564 Jul root@kiwi:~# chmod 4755 a.out root@kiwi:~# ls -l a.out -rwsr-xr-x 1 razvan razvan 13564 Jul

9 20:49 a.out

9 20:49 a.out

9 20:49 a.out

bitul asociat setgid n exemplul de mai sus, prima rulare a comenzii chmod activeaza 2). A doua rulare a comenzii chmod activeaza bitul asociat (folosind valoarea octala setuid (folosind valoarea octala 4). Alternativ, bitul asociat setgid poate activat folosind sintaxa g+s, iar bitul asociat setuid cu ajutorul sintaxei u+s ca argumente la chmod. marcarea unui executabil cu dreptul de suid reprezinta un Trebuie avut n vedere ca pe parcursul execut fort potent , ial risc de securitate. Daca , iei utilizatorul reus , es , te sa , eze a programului nainte de refacerea uid-ului, se poate obt terminarea anormala , ine acces la un shell de root. Din acest motiv un pas important n securizarea unui sistem este determinarea tuturor executabilelor ce au activat atributul setuid, s , i dezactivarea acestuia de la aplicat iilor nefolosite. Aceast lucru se poate realiza cu ajutorul comenzii , find (vezi sect, iunea 12.6.3).
1

root@kiwi:~# find / -perm -4000 -o -perm -2000 -type f -print

300

INTRODUCERE N SISTEME DE OPERARE

Printre utilitarele care au nevoie de activarea atributului setuid pentru a putea rulate ping s de catre utilizatori obis , nuit , i se aa , i traceroute.

acinii Schimbarea rad sistemului de s , iere (chroot) Unul dintre mecanismele extrem de eciente n securizarea unor servicii se numes , te , ii unui serviciu n raport cu sistemul de chroot. Acesta presupune dimininuarea vizibilitat s , iere. un Folosirea mecanismului chroot are rolul de reducere a riscurilor de securitate. Daca , i ntr-un proces ce foloses atacator obt , ine acces cu ajutorul unei vulnerabilitat , te chroot, vizibil acesta va avea acces limitat la sistemul de s iere. Noul director r ad acin a , numele de chroot jail. procesului poarta parte, folosirea acestui mecanism este destul de dicila, datorita faptului ca Pe de alta n general programele sunt compilate pentru a folosi biblioteci (vezi sect iunea 11.4). Din , cauza, bibliotecile trebuie incluse n directorul vazut acin a. O aceasta de proces ca rad solut alta ie este compilarea static a a programelor, f ar a biblioteci. , se modica scriptul de init Fie serverul de DNS bind9. Daca opt , ializare adaugnd , iunea acin a a ntregului -t /var/dns, serviciul va porni considernd /var/dns/ ca rad nainte sistem de s iere. Primul s ier c autat va /etc/bind/named.conf , astfel ca , , de lansarea serviciului va trebui copiat s , ierul /etc/bind/named.conf n acest s /var/dns/etc/bind/named.conf. Pe lnga , ier vor trebui copiate s , ierele (necesare congurarii serviciului de DNS), s de zona ierele de jurnalizare, dar s i , , unele s , iere speciale gen /dev/null sau /dev/log. serviciile UNIX ofera posibilitatea rularii Majoritatea programelor ce implementeaza programul nu ofera aceasta posibilitate, procesului cu sistemul de s , iere limitat. Daca se dores sau daca , te testarea mecanismului, se poate folosi utilitarul chroot. Utilitarul chroot este implementarea la nivelul shellului a mecanismului de schimbare acinii a rad sistemului de s de un proces. , iere vazut utilitarul chroot ntr-un nou director /root/test. n exemplul de mai jos se ruleaza nu se specica ce comanda se ruleaza, implicit se executa interpretorul de Daca a catre comenzi precizat de variabila de mediu SHELL. Cum /bin/sh este o legatur copierea sa n viitorul sistem de s /bin/bash, este necesara iere. ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

root@kiwi:~# pwd /root root@kiwi:~# mkdir test root@kiwi:~# mkdir test/bin root@kiwi:~# cp /bin/bash test/bin/ root@kiwi:~# chroot /root/test chroot: cannot run command /bin/bash: No such file or directory root@kiwi:~# ldd /bin/bash libncurses.so.5 => /lib/libncurses.so.5 (0x4001c000) libdl.so.2 => /lib/tls/libdl.so.2 (0x4005b000)

CAPITOLUL 10. ELEMENTE DE SECURITATE


16 17 18 19 20 21 22 23 24 25 26 27

301

libc.so.6 => /lib/tls/libc.so.6 (0x4005f000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) root@kiwi:~# mkdir test/lib root@kiwi:~# cp /lib/libncurses.so.5 /lib/libdl.so.2 test/lib root@kiwi:~# cp /lib/libc.so.6 test/lib root@kiwi:~# chroot /root/test root@kiwi:/# pwd /

ca, n prima faza, rularea comenzii bash prin chroot nu poate realizata. Se observa apoi lista bibliotecilor necesare bash, iar Motivul este absent , a bibliotecilor. Se as , eaza respectivele biblioteci sunt apoi copiate n viitorul sistem de s , iere. Comanda chroot rezultnd un prompt ntr-un sistem de s poate acum executata, , iere ce are doar 2 directoare s , i 4 s , iere. Se pot totus , i rula comenzile interne shellului bash.

sudo ruleze unele comenzi avnd Utilitarul sudo permite utilizatorilor neprivilegiat , i sa identitatea (uid-ul) altui utilizator (n general a utilizatorului root). Utilitarul sudo poate 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. ruleze comenzi privilegiate, precum s Controlul utilizatorilor care au dreptul sa , i lista a comenzilor este pastrat n s exacta a ierul /etc/sudoers . Fis ierul are n mod , , implicit doar drepturi de citire. The sudoers le should always be edited by the visudo. Pagina de manual ment , ioneaza oferirea unor drepturi provizorii de scriere s astfel Utilitarul visudo evita , i minimizeaza alte riscuri de securitate. vericarea s La lansarea unei comenzi sudo, dupa , ierului /etc/sudoers va trebui parola utilizatorului ce a lansat comanda sudo. Daca se dores introdusa , te rularea a solicitarea parolei (risc de securitate), se comenzilor privilegiate congurate far foloses , te tag-ul NOPASSWD n s , ierul de congurare:
1

razvan

ALL=(ALL) NOPASSWD: ALL

Listingul de mai sus este o linie din s , ierul /etc/sudoers. Utilizatorul razvan poate (ALL), fara rula n numele tuturor utilizatorilor din sistem (ALL=(ALL)) orice comanda parola (NOPASSWD). a i solicitata presupunem ca a fost dezactivat atributul setuid din Pentru exemplul urmator sa cadrul executabilului /bin/ping. Pentru a permite utilizatorului rookie sa comanda ping, administratorul va trebui sa adauge n s foloseasca ierul , /etc/sudoers urmatoarea linie:
1

rookie ALL=(ALL) /bin/ping

utilizatorul rookie ncearca rularea unui interpretor de comenzi cu drepturi Daca privilegiate, operat ia es ueaz a: , ,

302

INTRODUCERE N SISTEME DE OPERARE

1 2

rookie@kiwi:~$ sudo /bin/bash Sorry, user rookie is not allowed to execute /bin/bash as root on localhost.

se ncearca rularea comenzii ping, fara a folosi sudo, se obt Daca , ine din nou mesaj de eroare:
1 2

rookie@kiwi:~$ /bin/ping 141.85.99.1 -su: /bin/ping: Permission denied

Folosirea comenzii sudo impune parcurgerea s , ierului /etc/sudoers s , i permite rularea executabilului /bin/ping:
1 2 3

rookie@kiwi:~$ sudo /bin/ping 141.85.99.1 PING 141.85.37.1 (141.85.37.1): 56 data bytes 64 bytes from 141.85.37.1: icmp_seq=0 ttl=64 time=0.5 ms

a a avea o corespondent n s Rularea unei comenzi sudo far ,a , ierul /etc/sudoers ca un incident de securitate. Pentru a verica lista comenzilor ce pot va jurnalizata rulate ca root se poate folosi opt , iunea -l a comenzii sudo:
1 2 3

rookie@kiwi:~$ sudo -l User rookie may run the following commands on this host: (ALL) /bin/ping

Limitarea resurselor folosite de un proces sau utilizator Utilitarul ulimit permite controlul resurselor alocate pentru un proces pornit din interpretorul de comenzi. Pentru inspectarea limitarilor curente se poate se foloses , te argumentul -a:
1 2 3 4 5 6 7 8 9 10 11 12 13

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

root@kiwi:~# ulimit -n 2048 root@kiwi:~# ulimit -n 2048

o listare a tuturor limitarilor n exemplu de mai sus a fost realizata curente, pentru ca apoi e redenit numarul sa maxim de s , iere deschise la 2048. n scopul prevenirii unui atac DoS local (cauzat de crearea unui numar de procese Daca, extrem de mare), se dores de procese pentru utilizatorul privilegiat, , te limitarea numarului adaugarea se recomanda n s , ierul /root/.bashrc a unei limite de procese:
1

ulimit -u 1024

a a nsa Utilitarul ulimit permite limitarea drepturilor la nivelul unui proces far persistente. La repornirea sistemului, congurarile realizate se vor pierde. Pentru a

CAPITOLUL 10. ELEMENTE DE SECURITATE

303

asigura persistent pe un sistem Linux se poate folosi s , a schimbarilor, , ierul /etc/security/limits.conf. Acest s , ier reprezinta un mecanism ecient pentru limitarea resurselor disponibile unui utilizator sau unui grup de utilizatori. tipuri de limite, denumite limite software s Se pot deni doua La , i limite hardware. , irea unei limite software se genereaza un mesaj de atent depas ionare. La dep as irea , , hardware procesul n cauza este terminat. unei limitari pe denirea de reguli. O regula are patru elemente: Sintaxa s , ierului se bazeaza respectiva regula; t , inta: utilizatorii sau grupurile pentru care se aplica : regulile pot denite ca software sau hardware; tipul de regula

tipul de limitare: este precizat parametrul care este limitat;


limitarea. limitarea: valoarea la care se realizeaza se dores Ca exemplu, se presupune ca de procese ale utilizatorului , te limitarea numarului , irea limitei de 20 de procese sa e generat un mesaj de rookie la 35, iar la depas simultane permise avertisment. n plus se dores te limitarea num arului de autentic ari , utilizatorului rookie la 10. Pentru aceasta vom adauga n s , ierul /etc/security/ limits.conf urmatoarele trei linii:
1 2 3

rookie rookie rookie

soft hard -

nproc nproc maxlogins

20 35 10

Limitarea spat , iului ocupat pe disc prin folosirea de cote. Limitarea spat , iului ocupat de s , ierele unui utilizator se realizeaza n Linux, acest lucru este realizat cu ajutorul utilitarului quota. ntruct congurarea , es carte, recomandam cititorului sa acestui utilitar depas , te domeniul acoperit de aceasta unul din multiplele tutoriale din Internet legat de congurarea cotelor n Linux. parcurga

10.4

Atacuri de ret , ea

de act Privite ca forma principala , iune a crackerilor, atacurile de ret , ea nu trebuie sa constituie cunos tint e interzise sau privite cu suspiciune. nt elegerea modului n care un , , , producerea acestuia s atac este produs, a condit , iilor care faciliteaza , i a efectelor ulterioare sunt esent , iale pentru a proteja o ret , ea de calculatoare sau pentru a deni politicile de securitate asociate. Cunos tint ele s i , , , deprinderile legate de atacurile de ret , ea sunt necesare ethical hacker -ilor, persoane specializate n forme de testare a sistemelor informatice pentru securizarea acestora.

10.4.1

Tipuri de atacuri n ret , ea

Atacurile de ret , ea sunt clasicate n funct , ie de gravitate n trei categorii: atacuri de recunoas tere, atacuri DoS, s i atacuri de obt , , , inere a accesului.

304

INTRODUCERE N SISTEME DE OPERARE

Atacurile de recunoas , tere nu sunt atacuri propriu-zise, ci de obicei constituie faza init Cel mai simplu atac de , iala, de investigare, a unui atac (vezi sect , iunea 10.4). stat recunoas tere poate generat printr-un script ce inventariaz a , , iile dintr-o ret , ea a cu serviciile rulate pe o folosind pachete de ping. Pentru a obt , ine informat , ii n legatur mas in a se poate folosi o aplicat ie de scanat porturi (vezi sect , , , iunea 10.4.3). Aplicat , iile nu numai lista serviciilor, dar s a posibilelor mai complexe de recunoas , tere ofera , i o lista 1 , i. Un astfel de utilitar este Nessus . vulnerabilitat Atacurile DoS (Denial of Service) au ca scop congestionarea unei ret , ele, a unui server , ii. Se poate distinge sau doar a unui serviciu, n scopul reducerii sau opririi funct , ionalitat ntre atacurile clasice DoS, bazate n general pe ooding, s i atacurile DoS distribuite, , un mecanism de propagare (un virus) pe un numar ct mai numite DDoS, ce au la baza mare de destinat ii s i sincronizarea atacului DoS c atre o t int a. , , , un numar foate mare de pachete venite ntr-un interval scurt de timp. Un ood reprezinta Un trac ce poate interpretat drept ood la nivelul ruterului de acces n ret , eua locala poate tratat drept trac normal n nucleul Internetului. Pentru tehnologiile actuale un ood este denit astfel: de 100.000-150.000 de pachete pe la nivelul unui switch de nivel 2 un numar secunda; o ret un ood are la nivelul unui ruter de acces (ce conecteaza , ea locala) 8.000-12.000 de pachete pe secunda; poate tratat n nucleul Internetului un trac de milioane de pachete pe secunda drept trac legitim. , ii de prelucrare a unui volum de pachete de ordinul zecilor de mii pe n ciuda capacitat complexitatea adaugat de modele de ood specice poate reduce limita de secunda, a la cteva sute. pachete pe secunda pe trimiterea unui numar foarte mare de pachete ICMP (de ICMP ooding se bazeaza , ime de banda disponibila. Cel mai adesea atacul este tip ping), consumnd ntreaga lat , i utilitarelor prevenit prin ltrarea ntreg tracului ICMP, cu costul pierderii funct , ionalitat ping s , i traceroute. porturile 7 s Atacul UDP ooding are efecte puternice cnd foloses , te drept t , inta , i 19, serviciile de echo s adica , i chargen. Aceste servicii ind rar folosite, n ret , ele locale a un impact real asupra funct ret pot oprite de rewall-ul de intrare n LAN, far , ionarii , elei. Atacurile bazate pe ooding sunt n general combinate cu un atac de tip spoong, prin adrese sursa ctive s care se genereaza , i diferite pentru pachetele din ood. n lipsa , irii unui numar limita de pachete per sursa unui atac spoong, o ltrare pe baza depas n acelas , ii ar elimina atacul ooding. Atacul spoong asigura , i timp ascunderea identitat destinat atacatorului. n plus, daca ia atacului bazat pe ooding nu este o surs a t int a ci , , adresa de difuzare a unei ret , ele, toate echipamentele din respectiva ret , ea vor ncerca raspund unei surse ce nu exista n realitate, atacul devenind un atac de tip DDoS s sa a ,i se va numi un atac smurf. de calcul disponibila n ret Atacurile DDoS pornesc de la puterea enorma , elele actuale locale. Unele dintre aceste atacuri pot neintent ionate, precum n cazul Slashdot effect. , ,i Numele vine de la vestitul site Slashdot, care a postat un link catre un site cu capabilitat
1

http://www.nessus.org/nessus/

CAPITOLUL 10. ELEMENTE DE SECURITATE

305

acceseze respectivul site, efectul a mai mici. Cnd foarte mult , i utilizatori au ncercat sa fost echivalent cu un atac DoS. Atacurile de obt , inerea , inere a accesului au impactul cel mai mare, deoarece prin obt accesului la un serviciu cel mai adesea pot compromise s , i alte servicii sau mas , ini. n atacurile de obt O pondere importanta , inere a accesului o au atacurile bazate pe , ii aplicat exploatarea vulnerabilitat iilor web. Subiectul este unul amplu, iar cei ce vor sa , numeroasele metode de exploatare a riscurilor de securitate ar trebui sa urmareasc a cartea lui Joel Scambray, Hacking Exposed Web Applications [24]. parcurga s Atacurile de obt , inere a accesului pot avea drept t , inta , i tehnologiile din spatele aplicat , iilor important de atacuri ind direct web, un numar , ionat mpotriva bazelor de date. Cel mai cunoscut astfel de atac este inserarea de cod SQL (SQL Injection). Acest atac se pe modul direct de interogare a bazei de date. bazeaza
1

SELECT X from TABLE where user = $user_input AND pass = $pass_input

la introducerea n cmpul utilizator a unui nume Presupunnd scriptul de mai sus, daca valid de utilizator urmat OR -- (n SQL -- denes , te un comentariu), operat , ia de select , ie devine:
1

SELECT X from TABLE where user = $xxx OR -- AND pass = nu_conteaza

pertru orice nume de utilizator aat n baza de date. Mergnd mai s , i va validata departe se poate introduce n cmpul utilizator xxx OR 1=1 OR --, aceasta utilizatorul xxx exista sau nu n baza de date. garantnd accesul indiferent daca a prin funct Pentru a preveni un astfel de atac, interogarea bazei de date trebuie facut , ii s de biblioteca i nu direct prin select. , aplicat posibilitatea lansarii unui numar mare de atacuri. O astfel de Exista , ii ce ofera 1 o faza de determinare a vulnerabilitat , ilor (efectuata, aplicat , ie este metasploit . Dupa , ile gasite spre exemplu cu Nessus) se pot selecta vulnerabilitat s i pot lansate simultan , mai multe atacuri de obt , inere a accesului. Dincolo de not , iunile tehnice legate de atacurile de ret , ea, nu trebuie pierdut din vedere riscul de securitate adus de utilizatorii neglijent i din ret Chiar s , , ea. , i n cazul unor utilizatori responsabili, nu trebuie ignorate riscurile unui atac bazat pe inginerie sociala. cel mai cunoscut cracker este Kevin Mitnik, ale carui Nu este o ntmplare ca atacuri a pe o buna nt s-au bazat n mare masur , elegere a modului de gndire a utilizatorilor s ,i a administratorilor din ret , elele actuale.

10.4.2

Virus , i, viermi, troieni

de cod ce se atas altor Un virus este un program sau doar o secvent ,a , eaza a cunos s , iere executabile far , tint , a sau acceptul utilizatorului. Un virus include alaturi de mecanismele de execut ie s i modalit at i de replicare prin inserare n codul altei , , , aplicat , ii.
1

http://www.metasploit.com

306

INTRODUCERE N SISTEME DE OPERARE

Clasicarea 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. , a unui s cu infectarea Simpla prezent ,a , ier infectat pe un calculator nu este echivalenta e executat cel put sistemului. Pentru a infecta sistemul, un virus trebuie sa , in o data. Unele aplicat ii ruleaz a cod executabil n mod automat (f ar a informarea utilizatorului). , 1 Un exemplu este rularea s , ierului autorun.inf la montarea unui CD-ROM sau USB stick. Email-ul este unul dintre modurile principale de propagare a virus , ilor. Virus , ii de email (cel mai sunt cont , inut , i n atas , amentul emailului, deseori avnd extensia schimbata imaginilor). Aplicat adesea n extensie specica ia t int a a unui astfel de virus este , , numarului clientul de email. Datorita mare de utilizatori ai Microsoft Outlook, o mare aplicat parte a acestor virus , i sunt dezvoltat , i special pentru aceasta , ie. executat un atas n memoria RAM s Odata , ament de email infectat, virusul se ncarca ,i sa se multiplice. Pentru aceasta va cauta va urmari lista de adrese construite de clientul lista de adrese n mod de email (address book ). Majoritatea client , ilor de email creeaza a consultarea utilizatorului, s deschisa dinamic, far i nu o protejeaz a prin criptare. Odata , 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. de virus virus O a doua categorie importanta , i o reprezinta , ii de macro. Un macro este de cod executabil, atas unui s a acestor virus o bucata , ata , ier document. Aplicat , iile t , inta ,i sunt cele de gestionare a documentelor, gen editoare de text, foi de lucru, sau editoare Aceste aplicat de prezentari. , ii n general vor atent , iona utilizatorul nainte de deschiderea la deschiderea unui document ce cont , ine macro-uri. Pentru a reduce gradul de risc, daca unui s ier suntet i avertizat i de existent a unor macro-uri, nchidet i documentul s , , , , , , i rulat , i un program antivirus pe respectivul s , ier. o amenint pentru sistemele actuale datorita Virus , are majora , ii de boot nu reprezinta , ii de lansare n execut dicultat ie. Pentru a lansa un astfel de virus, sistemul trebuie s a , Impactul acestor virus ncerce init ializarea de pe o partit , , ie infectata. , i s-a diminuat odata cu disparit , ia oppy discurilor. n prezent virus , ii de boot se pot propaga prin CD-uri sau ash carduri. aplicat Troienii (trojan horses) reprezinta , ii (aparent legitime) ce cont , in (sau instaleaza) instalarea aplicat un program malit , ios. Pentru a evita astfel de atacuri se recomanda , iilor doar din surse sigure, precum s i vericarea integrit at ii s ierelor nainte de instalare. , , , , i n diferite servicii din Internet Viermii (worms) sunt programe care folosesc vulnerabilitat o categorie de viermi. pentru a se multiplica. Virus , ii de mail reprezinta Pentru a reduce impactul virus luate la nivelul ret , ilor sunt importante att masurile , elei, ct s i exersarea unor deprinderi din partea utilizatorilor. Este important ca accesul n , e protejat de un rewall (vezi sect aiba ret , ea sa , iunea 10.5.1), ca serverul de email sa existe o politica de monitorizare a serviciilor etc. La nivelul instalat un antivirus, sa nu lanseze n execut nu utilizatorului este important sa , ie s , iere primite prin email, sa atas ment un antivirus actualizat pe deschida , amente primite de la necunoscut , i, sa , ina stat ia de lucru etc. ,
1

http://en.wikipedia.org/wiki/AutoRun#Attack_vectors

CAPITOLUL 10. ELEMENTE DE SECURITATE

307

10.4.3

Scanarea porturilor

conexiuni catre Un program de scanat porturi este o aplicat toate , ie care init , iaza porturile unei sistem t int a. Scopul este cel de a detremina care porturi sunt deschise, , and astfel ce servicii sunt disponibile. folosite att de Programele de scanat porturi fac parte din setul de utilitare de baza crackeri (black-hat hackers) s , i ethical hackeri (white-hat hackers ) pentru a detecta n urma scanarii de porturi serviciile deschise pe un sistem s , i versiunea acestora. Daca servicii potent se detecteaza ial vulnerabile, se poate trece la folosirea unui exploit. , a popularitat , ii programelor Sfrs , itul anilor 90 n Romnia a dus la o cres , tere dramatica de scanat porturile, att n rndul crackerilor ct s i al administratorilor de ret , , ea. a acestei schimbari a fost dezvoltarea ret Principala cauza , elei metropolitane, precum s ,i a diferent , ei foarte mari ntre costul tracului metropolitan s , i cel al tracului Internet. Astfel ntr-un interval relativ scurt numarul atacurilor asupra serverelor aate n ret , ele , i) a crescut foarte mult. publice (mai ales asupra celor aate n universitat folosirea unui scaner de porturi poate interpretata drept un atac, Des , i nu este ilegala, va e ltrat accesul din ret s , i prin urmare este posibil sa , eaua din care au fost init , iate scanarile. O astfel de restrict , ionare este totus , i destul de improbabila.

Utilitarul nmap numeroase aplicat Exista , ii de scanat porturile, una dintre cele mai cunoscute ind 1 popularitat , ii de care se bucura n rndul administratorilor de sisteme nmap . Datorita 2 s Linux, aplicat , ia a fost portata , i pe platforme Windows . mai multe metode de scanare, putnd oferi informat nmap implementeaza , ii despre de informat porturile deschise, dar s n plus fat , i despre porturile explicit ltrate. ,a , 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 aare a versiunii sistemului de operare, aceste servicii, precum s versiunile serviciilor active, utilizatorii ce ruleaza , i multe alte informat ii relevante pentru sistemul scanat. , la scanarea porturilor TCP, Dintre cele opt tipuri importante de scanare, s , ase se refera , ii, aceasta ultima unul la scanarea porturilor UDP s i unul la monitorizarea conectivit at , ncercnd sa determine doar daca stat s se poate metoda , ia destinat , ie este activa , i daca 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

root@cursuri:~# nmap -sP 141.85.37.0/24 Starting Nmap 4.62 ( http://nmap.org ) at 2009-09-23 16:21 EEST Host csr.cs.pub.ro (141.85.37.1) appears to be up. MAC Address: 00:09:6B:89:06:67 (IBM) Host ns.catc.ro (141.85.37.2) appears to be up. MAC Address: 00:17:31:49:3A:E4 (Asustek Computer)
1 2

http://www.insecure.org/nmap http://www.sourceforge.net/projects/nmapwin

308
8 9 10 11 12 13 14 15

INTRODUCERE N SISTEME DE OPERARE

Host prof.cs.pub.ro (141.85.37.3) appears to be up. MAC Address: 00:09:6B:89:05:24 (IBM) Host info.cs.pub.ro (141.85.37.6) appears to be up. MAC Address: 00:13:8F:78:42:2C (Asiarock Incorporation) Host 141.85.37.7 appears to be up. MAC Address: 00:50:56:9A:33:46 (VMWare) Host 141.85.37.8 appears to be up. MAC Address: 00:09:6B:89:06:67 (IBM)

Metodele de scanare a porturilor TCP sunt diferent , iate prin prezent , a unui anumit ag care foloses ntr-un pachet TCP. Opt iunea -sS ( TCP SYN scan ) este opt iunea implicit a , , , te porturile deschise pe un sistem. agul SYN al TCP s , i detecteaza
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

razvan@valhalla:~/carte-uso$ nmap -sS localhost You requested a scan type which requires root privileges. QUITTING! root@valhalla:~# nmap -sS localhost Starting Nmap 4.68 ( http://nmap.org ) at 2009-09-23 15:38 EEST Interesting ports on localhost (127.0.0.1): Not shown: 1705 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 25/tcp open smtp 53/tcp open domain 111/tcp open rpcbind 139/tcp open netbios-ssn 445/tcp open microsoft-ds 631/tcp open ipp 5900/tcp open vnc 7634/tcp open hddtemp Nmap done: 1 IP address (1 host up) scanned in 0.312 seconds

drepturi privilegiate. n exemplul de mai sus, utilizatorul Opt , iunea -sS necesita neprivilegit razvan nu a putut rula comanda nmap cu opt , iunea -sS, ind 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

razvan@valhalla:~/carte-uso$ nmap -sT localhost Starting Nmap 4.68 ( http://nmap.org ) at 2009-09-23 16:00 EEST Interesting ports on localhost (127.0.0.1): Not shown: 1705 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 25/tcp open smtp 53/tcp open domain 111/tcp open rpcbind 139/tcp open netbios-ssn 445/tcp open microsoft-ds 631/tcp open ipp 5900/tcp open vnc 7634/tcp open hddtemp

CAPITOLUL 10. ELEMENTE DE SECURITATE


17 18

309

Nmap done: 1 IP address (1 host up) scanned in 0.170 seconds

opt informat Alte doua , iuni de scanare importante sunt -sV s , i -O. Opt , iunea -sV ofera , ii pe porturile deschise, n vreme ce opt despre versiunea serviciilor ce asculta , iunea -O informat ofera 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

root@kiwi:~# nmap -sV -O 141.85.37.53 Starting nmap 3.55 ( http://www.insecure.org/nmap/ ) at 2004-08-27 17:23 EEST Interesting ports on dhcp-53.cs.pub.ro (141.85.37.53): (The 1659 ports scanned but not shown below are in state: closed) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 3.8.1p1 (protocol 1.99) Device type: general purpose Running: Linux 2.4.X|2.5.X|2.6.X OS details: Linux 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7) Uptime 0.105 days (since Fri Aug 27 14:52:12 2004) Nmap run completed -- 1 IP address (1 host up) scanned in 11.840 seconds

s scanarea porturilor cuprinse nmap ofera , i alte opt , iuni. Comanda de mai jos realizeaza ntre 1 s , i 100 pe stat , ia locala:
1 2 3 4 5 6 7 8 9 10 11 12

root@valhalla:~/carte-uso# nmap -p 1-100 localhost Starting Nmap 4.68 ( http://nmap.org ) at 2009-09-23 16:14 EEST Interesting ports on localhost (127.0.0.1): Not shown: 96 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 25/tcp open smtp 53/tcp open domain Nmap done: 1 IP address (1 host up) scanned in 0.107 seconds

10.5

Securizarea ret , elei

Securizarea unui sistem sau a unei ret , ele pot presupune investit , ii importante att n echipamente, ct s , i n software. Cu toate acestea, orice solut , ie de securitate nu trebuie piarda din vedere cteva componente de baza. sa stabilirea unor politici clare de Primul pas n orice solut , ie de securitate o reprezinta de securitate va urmari: securitate. O astfel de politica

separarea domeniilor cu nivel de securitate diferit;


a drepturilor ecarui denirea clara utilizator; a ret denirea serviciilor ce trebuie oferite de ecare componenta , elei. stabilita politica de securitate va trebui restrict Odata , ionat tracul nedorit/nenecesar prin congurarea politicilor de ltrare a pachetelor s a unui rewall (vezi ,i sect iunea 10.5.1). ,

310

INTRODUCERE N SISTEME DE OPERARE

poate oferi o poarta de acces unui atacator n Infectarea stat , iilor dintr-o ret , ea locala spatele rewall-ului, reducnd gradul de securitate al ret Din acest motiv un , elei. administrator responsabil nu se va ocupa doar de congurarea rewall-ului s ,i a serverelor, ci s , i de securizarea stat , iilor de acces. importanta a securitat , ii o reprezinta condent O componenta n scopul , ialitatea. unor date sensibile se recomanda congurarea criptarii tracului. Operat protejarii , ia de e, n general, o operat n autenticarea trebuie sa ie securizat a, as a cum se ntmpl a , , cazul SSH.

10.5.1

Firewall-uri

pachetele de ret Firewall-urile sunt dispozitive sau aplicat , ii care ltreaza , ea pe baza unor politici sau reguli prestabilite. Firewall-urile au rolul de protejare a ret , elei prin ltrarea tracului nedorit/nenecesar. Un ltreze tracul ICMP pentru a preveni atacuri de tip ood, rewall poate congurat sa sau orice trac care nu este ment cererile de init iere de conexiune n ret , , eaua locala , ionat explicit ca ind trac legitim. Firewall-urile pot dispozitive dedicate (rewall-uri hardware) sau aplicat , ii (rewall costuri mai mari. uri software). Firewall-urile hardware sunt mai rapide, dar prezinta avantajul exibilitat , ii, dar nu sunt la fel de eciente ca Firewall-urile software prezinta rewall-urile hardware.
1 de ltrare a Aplicat , ia rewall pe sistemele Linux este iptables . Exceptnd rolul sau pachetelor, iptables poate folosit s i pentru alterarea pachetelor s i pentru NAT (Network , , Address Translation).

Sistemele Windows ncepnd cu Windows XP dispun de o aplicat , ie rewall nativa, numeroase aplicat Windows Firewall, dar exista ii de tip rewall personal, precum Zone , Alarm2 .

10.5.2

Criptarea informat , iei

folosita nca din cele mai vechi timpuri, criptarea informat O tehnica , iei nseamna transforme un mesaj cunoscut ntr-un mesaj folosirea unui algoritm care sa criptat. Aceast algoritm presupune, n general, folosirea unei chei de criptare. se cheama decriptare. Operat , ia inversa pentru a proteja datele de acces neautorizat. Datele protejate Criptarea este folosita pot stocate la un moment dat pe un dispozitiv de suport sau pot date transmise prin ret , ea. doua tipuri de criptare: criptarea cu chei simetrice s n domeniul IT, exista , i criptarea cu chei asimetrice.
1 2

http://www.netlter.org/ http://www.zonealarm.com/security/en-us/home.htm?lid=en-us

CAPITOLUL 10. ELEMENTE DE SECURITATE

311

Criptarea cu chei simetrice presupune folosirea unei chei att pentru criptare ct s ,i pentru decriptare. Cheia este secreta este cunoscuta doar celor doua entitat , i care Formal, cele doua operat comunica. ii sunt descrise astfel: ,

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, Twosh, Blowsh, IDEA, AES. AES (Advanced Encryption Standard ) este algoritmul adoptat ocial de guvernul SUA. Algoritmul a fost ales n urma unui proces de standardizare de 5 ani la care au participat 15 proiecte diferite. s Criptarea cu chei asimestrice foloses , te o pereche de chei: o cheie publica , i o cheie Dupa cum reiese s privata. i din denumire, cheia privat a este secret a, iar cheia publica , de oricine. Exista doua utilizari pentru o pereche cheie privata/cheie este accesibila publica: este folosita pentru semnaturi digitale (digital signatures), n care cheia privata este folosita pentru a verica criptarea/semnarea unui document, iar cheia publica documentul este autentic; oricine poate face vericarea dar numai faptul ca det chei private poate semna un document; , inatorul este folosita pentru criptarea criptare (public key encryption), n care cheia publica este folosita pentru decriptarea mesajului; oricine unui mesaj, iar cheia privata poate crea mesajul criptat pentru a transmis posesorului cheii private, dar numai poate decripta mesajul. acesta din urma Formal, procesele de semnare s , i vericare 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 p pentru a cripta mesajul M n mesajul S. n cazul semnarii, , te cheia privata P este folosita pentru decriptarea mesajului S napoi n mesajul M. n cazul Cheia publica , oara aseman ator, criptarii/decript arii, lucrurile se desfas dar se foloses , te cheia publica pentru decriptare. pentru criptare s , i cheia privata dect criptarea cu chei Criptarea cu chei asimetrice este, n general, mai sigura e partajata s simetrice: cheia nu trebuie sa Cu toate , i algoritmii sunt mai robus , ti. dect criptarea cu chei acestea, criptarea cu chei asimestrice este mult mai lenta situat metode se folosesc la un loc. Spre exemplu, simetrice. Exista , ii n care cele doua folosind criptare cu chei asimetrice; n n cazul SSH, init , ierea conexiunii se realizeaza aceasta urma init ierea se realizeaz a o negociere dup a care se obt , , ine o cheie simetrica; n continuare pentru criptarea comunicat cheie va folosita , iei ntre clientul s , i serverul SSH.

312

INTRODUCERE N SISTEME DE OPERARE

certicatele digitale1 . Un certicat digital O extensie a semnaturilor digitale o reprezinta s cont , ine o cheie publica , i un set de informat , ii despre posesorul certicatului semnate este inclusa n certicat, oricine poate verica validitatea digitale. ntruct cheia publica semnatura poate a unei autoritat ,i informat , iilor. Depinznd de infrastructura folosita, specializate (CA certicate authority 2 , n cazul PKI public key infrastructure3 ) sau a mai multor utilizatori (endorsements), n cazul web of trust 4 .

10.5.3

Monitorizarea ret , elei

, i de ret Autorii de cart , ele de calculatoare sau de ghiduri pentru administratorii de ret , ea n general ca activitatea de monitorizare este una dintre cele mai importante precizeaza sarcini ale unui administrator. Cu toate acestea, adesea, recomandarile propuse sunt citeasca regulat deseori limitate la cele evidente precum: Un administrator trebuie sa nu uitat jurnalele de pe ecare server sau Este important sa i s a pornit i serviciul de , , monitorizare. monitorizarea nu se rezuma doar la rularea unui daemon de Este important de nt , eles ca amnal a unei aplicat genul sysklogd sau la deschiderea sapt a , ii precum Event Viewer. funct sunt asigurarea dinamica a securitat , ii prin Cele doua , ii principale ale monitorizarii alertarea n fat a unei ncerc ari de atac, s i posibilitatea localiz arii s i denirii unei defect , , , , iuni suboptimale. sau a unei funct , ionari mai multe criterii pentru a clasica diversele tipuri de act Exista , iuni de monitorizare. O clasicare face distinct prima ia ntre: ,

monitorizarea unui sistem specic;


, ii; monitorizarea conectivitat

monitorizarea tracului din ret, ea.


Monitorizarea unui dispozitiv specic presupune rularea unui serviciu ce va urmari apelarea celorlalte servicii, precum s i accesul la jurnalele create de acest server. Un , exemplu este serviciul de jurnalizare oferit de sysklogd. Monit5 permite monitorizarea execute diverse act proceselor, s , ierelor s , i poate sa , iuni la nevoie. , ii se bazeaza deseori pe mecanisme foarte simple, cel mai Monitorizarea conectivitat ping important dintre acestea ind folosirea utilitarului ping, metoda ind denumita ICMP periodice poate oferi administratorului sweep. Crearea unui sistem de interogari informat , ii despre ntreruperea unui segment de ret , ea sau despre defectarea sau poate realizat ori stingerea unuia dintre servere. Un astfel de sistem de interogari printr-un script simplu, ori se poate apela la aplicat ii dedicate. , Monitorizarea de ret , ea cuprinde numeroase componente, de la dispozitive hardware dedicate (denumite generic IDS Intrusion Detection System), la programe de interceptare a tracului n ret , ea (programe de snifng), precum s , i programe de evaluare
1 2

http://en.wikipedia.org/wiki/Digital_certicate http://en.wikipedia.org/wiki/Certicate_authority 3 http://en.wikipedia.org/wiki/Public_key_infrastructure 4 http://en.wikipedia.org/wiki/Web_of_trust 5 http://mmonit.com/monit/

CAPITOLUL 10. ELEMENTE DE SECURITATE

313

, ii unui sistem din ret categorie intrnd programele de scanat a securitat , ea, n aceasta 1 porturi. O aplicat , ie foarte cunoscuta de monitorizare a ret , elei este Nagios . 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 aceeas n aceasta stat , ii nu vor mai vizibile de o a treia stat , ie aata , i ret , ea locala. situat o anumita , ie, un administrator de ret , ea ce dores , te monitorizarea tracului catre destinat ie va trebui ca nainte de a lansa programul de interceptare a tracului s a fac a un , atac ARP poisoning2 pentru respectiva destinat , ie. Pentru aceasta se pot folosi utilitare 3 4 precum Cain s , i dsniff .

Utilitarul tcpdump tracului n ret de date. tcpdump este un utilitar destinat monitorizarii , ea s , i achizit , ionarii la nivelul legatur a de date doar Placile de ret , ea, cum sunt cele Ethernet, captureaza cadrele adresate lor sau pe cele de difuzare. De aceea, pentru a captura toate cadrele, treaca interfat tcpdump trebuie sa , 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 de ret La o rulare simpla, ,a , ea a informat sistemului s , i as , eaza , ii din antetul IP s , i TCP.
1 2 3 4 5

root@frodo:~# tcpdump tcpdump: listening on eth0 14:45:09.252803 frodo.noi.39993 > 64.12.30.90.5190: P 444608787:444608793(6) ack 1453900500 win 32893 (DF) 14:45:09.254097 frodo.noi.33335 > main.noi.domain: 16713+ PTR? 90.30.12.64.in-addr.arpa.(42) (DF) 14:45:09.254583 main.noi.domain > frodo.noi.33335: 16713 NXDomain 0/1/0 (113)(DF)

n exemplul de mai sus, ecare linie cont , ine: timpul n care pachetul TCP a intrat n ret, eaua locala; s informat, ii legate de antetul IP (adresa sursa , i adresa destinat , ie); pot destinat ag-uri informat, ii din antetul TCP (port sursa, , ie, numere de secvent , a, TCP). Pentru a vedea s , i cont , inutul pachetului se poate utiliza opt , iunea -x:
1 2 3 4 5 6 7 8

root@frodo:~# tcpdump -c1 -x tcpdump: listening on eth0 18:38:51.087244 64.12.24.48.5190 > frodo.noi.32777: P 3127656695:3127656809(114) ack 3009470569 win 16384 (DF) [tos 0x80] 4580 009a c7a1 4000 6406 354d 400c 1830 c0a8 000b 1446 8009 ba6c 40f7 b360 e069 5018 4000 1f0d 0000 2a02 20dc 006c 0003 000b 0000 87d9 0d61 0836 3032 3033 3631 3400 0000 0700 0100 0200 7000 0c00 2500
1 2

http://www.nagios.org/ http://en.wikipedia.org/wiki/ARP_spoong 3 http://www.oxid.it/cain.html 4 http://www.monkey.org/~dugsong/dsniff/

314
9 10 11

INTRODUCERE N SISTEME DE OPERARE

0000 6 packets received by filter 0 packets dropped by kernel

Conform structurii unui pachet IP, primii 20 octet , i (4580 009a c7a1 4000 6406 354d 400c antetul IP iar urmatorii 1830 c0a8 000b) reprezinta 20 de octet , i (1446 8009 ba6c 40f7 antetul TCP. b360 e069 5018 4000 1f0d 0000) reprezinta solut interpretarea cont Exista Cea mai , ii grace ce realizeaza , inutului pachetului. aplicat cunoscuta ie grac a de interceptare s i interpretare a tracului de ret , , , ea este 1 Wireshark , utilitar disponibil att n mediul Windows, ct s Echivalentul , i n Linux. 2 pentru tcpdump n lumea Windows este windump .

10.6
10.6.1

Studiu de caz
Drepturile pe s , iere n NTFS

o serie de mbunat at , iri fat de FAT, att din punctul de Sistemul de s , iere NTFS ofera ,a , ii. ntr-un sistem de s vedere al performant , ei, ct s , i al securitat , iere FAT, toate conturile de utilizator au drepturi egale s , i depline asupra sistemului de s , iere.

Figura 10.2: Precizarea drepturilor n NTFS prin intermediul mecanismului de liste de acces. Securitatea n NTFS se implementeaza de acces reprezinta un set descriptori atas O lista , ati s , ierelor s , i directoarelor din sistemul
1 2

http://www.wireshark.org/ http://www.winpcap.org/windump/install/

CAPITOLUL 10. ELEMENTE DE SECURITATE

315

poata accesa un s de s , iere. Pentru ca un proces sa , ier sau un director, sistemul de securitate verica daca procesul are dreptul de a-l accesa. a sporita de securitate, sistemul de s posibilitatea criptarii Ca masur , iere NTFS ofera datelor pe care le stocheaza. Avantajul implementarii mecanismelor de criptare direct n viabilitatea pe care acest tip de securitate o ment sistemul de s , iere l reprezinta , ine n suport pentru sistemul respectiv de s lucrul cu orice sistem de operare care ofera , iere. Din mediul Windows, criptarea unui s , ier sau a unui director (inclusiv a cont , inutului sau) , i al s se face din ecranul de proprietat , ierului/directorului (clic dreapta > Properties > Advanced > "Encrypt contents to secure data"). , ii sistemului de s Pentru a putea act , iona granular asupra securitat , iere, n Windows opt trebuie dezactivata iunea Use simple le 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 s fereastra de proprietat Se , ier, sub tabul Security. utilizatorul sau grupul care va editat, iar din lista de drepturi se indica selecteaza doar s permisiunile ce vor atribuite. Toate congurarile se aplica , ierului sau directorului selectat. Pentru a congura explicit permisiunile, butonul Advanced o noua interfat n care pot vizualizate toate tipurile de permisiuni ce sunt as , eaza ,a aplicate s sau directorului ales, inclusiv drepturi mos prin ierarhia , ierului , tenite sistemului de s iere. ,

10.6.2

Recuperarea parolei

e cons Un bun administrator de sistem trebuie sa , tient de mecanismele de recuperare a parolei pentru a putea preveni proceduri neautorizate de modicare a acesteia. doua metode importante pentru a realiza recuperarea parolei de root, ambele Exista presupune modicarea din meniul necesitnd accesul zic la echipament. Prima metoda pe bootloader-ului a parametrilor trimis i la nc arcarea nucleului, iar a doua se bazeaza , folosirea unui CD Linux bootabil.

Editarea GRUB de a parolei de root necesita editrea meniului de boot a GRUB. Din Prima metoda imaginea de nucleu ce se dores s meniul GRUB se selecteaza a , te ncarcat , i se activeaza editarea respectivei linii de grub prin opt , iunea e. n capitolul 6 sunt prezentate pe larg metodele de modicare a opt nucleului. , iunilor transmise la ncarcarea se adauga opt La linia cont , innd imaginea de nucleu selectata , iunea init=/bin/bash procesul de init s n urma ncheierii procesului de , i se continua , ializare a sistemului. init ializare se va obt ine un shell root. Dac a la execut ia comenzii passwd se primes , , , , te mesaj de eroare trebuie remontat sistemul de s , iere pentru scriere s , i citire. Acest lucru folosind comanda: se realizeaza
1

root@ubuntu:~# mount -o remount,rw /

a parolei de root se recomanda folosirea Pentru a preveni o recuperare neautorizata parolelor de acces la meniul bootloader-ului. n cazul GRUB, acest lucru se realizeaza cu ajutorul opt iunii password n cadrul s ierului de congurare a GRUB. , ,

316 Folosirea unui Live CD

INTRODUCERE N SISTEME DE OPERARE

de recuperare a parolei presupune folosirea unui Live CD Linux. Daca A doua metoda prioritate unitat , ii optice n fat ordinea de boot nu acorda , a hard discului, va trebui ordinea de boot din BIOS. schimbata init Dupa , ializarea sistemului de pe CD trebuie obt , inut un shell de root. n cazul Live prin executarea din contul neprivilegiat a comenzi CD-ului Ubuntu aceasta se realizeaza sudo:
1

root@ubuntu:~# sudo bash

Trebuie creat un nou director n care se va face montarea vechiului sistem de s , iere:
1 2 3

root@ubuntu:~# mkdir /mnt/x root@ubuntu:~# mount /dev/hda2 /mnt/x

n acest moment putem invoca comanda chroot:


1

root@ubuntu:~# chroot /mnt/x

Ultimul pas presupune invocarea utilitarului passwd s , i schimbarea parolei de root. ntruct, prin intermediul Live CD-ului, utilizatorul are acces privilegiat la ntreg sistemul, va avea acces complet la sistemul de s Invocarea , iere de pe discul sistemului. comenzii passwd va conduce la modicarea informat iei din s ierul /etc/shadow . , , este necesar sa se fort Pentru a preveni o astfel de procedura , eze din BIOS ca prim de acces la meniul dispozitiv de boot unul dintre hard discuri s i s a se deneasc a o parol a , de congurare a BIOS-ului.

Cuvinte cheie

cel mai mic privilegiu


veriga cea mai slaba

drepturi pe s , iere n UNIX du /etc/sudoers /etc/passwd, /etc/shadow /etc/security/limits.conf liste de control a accesului ACL matrice de drepturi rewall criptare, decriptare chei simetrice, chei asimetrice chei private, chei publice
a digitala, certicat digital semnatur

controlul accesului autenticare autorizare criptare atacuri chmod chown chroot df DoS drepturi pe s , iere n NTFS

hacker

CAPITOLUL 10. ELEMENTE DE SECURITATE

317

netstat monitorizare nmap parole


de securitate politica

sudo suid syslog tcpdump top ulimit umask virus ,i

quota
securitatea zica

sniffer

ntrebari de utilitarul nmap? 1. Care dintre urmatoarele NU este o funct , ionalitate oferita

K scanarea porturilor UDP s , i TCP K detectarea versiunii sistemului de operare


K detectarea stat, iilor active din ret, eaua locala

K ltrarea pachetelor de ret, ea


2. Fie urmatoarele comenzi:
1 2 3

umask 022 echo "Acesta nu este un test" > test chmod go+x test

Care vor drepturile pentru utilizatorii grupului s , ierului test?

K doar citire K doar execut, ie K citire s , i execut , ie K citire, scriere s , i execut , ie


pentru utilizatorul cornel? 3. Care dintre parolele de mai jos este cea mai sigura

K cornelush K coRnel K _cOrN31[]sh+ K niciuna, toate parolele vor ncercate ntr-un atac bazat pe dict, ionar
riscuri de securitate zica pentru un 4. Care dintre riscurile de mai jos reprezinta server?

K lipsa unui rewall K parole pentru utilizatori prea simple


K vrfuri de tensiune n ret, eaua electrica

318

INTRODUCERE N SISTEME DE OPERARE

K absent, a licent, ei pentru sistemul de operare


5. n urma procesului de scanare de porturi se poate determina: un serviciu ruleaza pe un port dat K daca

K versiunea serviciului
serviciul este ltrat K daca

K toate variantele
6. Primirea unui email ce cont , ine un virus pe un sistem ce nu are antivirus duce automat la infectarea sa. Un sistem infectat cu un virus nu mai poate t , inta unui alt atac. K adevarat, adevarat K adevarat, fals K fals, adevarat

K fals, fals
7. Tracul catre un server este monitorizat cu tcpdump. Care dintre urmatoarele informat ii NU poate obt inut a? , , serviciul K portul pe care ruleaza K numarul de client , i ai server-ului

K dimensiunea pachetelor folosite K adresa IP a serverului


8. Pentru a limita numarul de procese per utilizator se poate folosi:

K ulimit K quota K nmap K chroot


9. Care este primul pas n securizarea unei ret , ele?

K denirea unei politici de securitate K denirea regulilor de ltrare pe rewall K instalarea de programe antivirus pe toate stat, iile din ret, ea K criptarea tracului
parolele utilizatorului (criptate)? 10. Pe un sistem Linux, ce s , ier stocheaza

K /etc/passwd K /etc/shadow K /etc/security/limits.conf K /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

din acest capitol? Ce se nvat ,a Cum se obt, ine un program executabil dintr-un program sursa

Compilarea s , i interpretarea unui program


Etapele compilarii

Utilizarea GCC pentru compilarea s , i link-editarea unui program


Optimizarea compilarii

Fis , iere obiect s , i s , iere executabile Biblioteci de funct, ii Automatizarea act, iunilor cunoscnd dependent, ele ntre ele; utilitarul make Concepte de portabilitate Link-editarea codului C s , i C++

11.1

Introducere

Unul dintre aspectele importante n utilizarea unui sistem de operare este dezvoltarea de noi programe. Acest lucru presupune folosirea unui limbaj de programare pentru Codul sursa este compilat, iar programul executabil obt scrierea de cod sursa. , inut este poarta numele de programare sau dezvoltare. rulat. Act , iunea de scriere de cod sursa Persoana care scrie codul se numes te programator sau dezvoltator. Termenii n limba , sunt programmer, software developer sau software engineer. engleza Sistemele de operare moderne pun la dispozit , ia dezvoltatorului/programatorului o suita de aplicat n cazul familiei de sisteme de , ii folosite pentru scrierea de noi programe. forma cea mai cunoscuta operare Windows, suita de aplicat ii Visual Studio reprezint a , 319

320

INTRODUCERE N SISTEME DE OPERARE

pentru dezvoltarea de noi aplicat , ii. Aceasta permite crearea de programe n diverse Dezvoltarea de aplicat , oara limbaje de programare s , i cu utilitate diversa. , ii se desfas ntr-un mediu integrat (IDE Integrated Development Environment) (vezi sect , iunea 14.9). sistemele Linux pun la dispozit De partea cealalta, , ia utilizatorului suita de aplicat , ii GNU, pentru compilarea, link-editarea s folosita , 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

a procesului de dezvoltare este scrierea de cod specic unui limbaj de Prima faza o ns programare. Codul reprezinta , iruire de instruct , iuni, variabile s , i funct , ii pentru acel pe care programatorul trebuie sa o respecte. Fis limbaj. Limbajul impune o sintaxa , ierul numele de s n care se scrie codul este, n general, un s , ier text s , i poarta , ier sursa, Expresia trebuie sa ma uit prin surse1 se refera la parcurgerea sau mai simplu sursa. ale unei aplicat s , ierelor sursa , ii pentru analiza codului. se realizeaza prin intermediul unui editor. Editoare raspndite Scrierea de cod sursa n lumea Unix sunt vi, Emacs, nano, joe, kate, gedit. Editoare raspndite n lumea Windows sunt Notepad++, Ultraedit, Crimson Editor. De obicei, n lumea Windows, editoarele sunt parte a unui IDE (Integrated Development Environment) cum este Visual Studio sau Eclipse. Un editor este folosit pentru scrierea unui s Drept urmare, editoarele , ier sursa. moderne prezinta o serie de caracteristici utile acestui scop: indentare automata, colorare a codului (syntax highlighting), code folding, variable completion, folosirea de registre de editare pentru operatii multiple etc.
2 de rivalitatea dintre editoarele vi s Lumea Unix este dominata , i Emacs . n vreme ce vi este un adept al loziei Unix (keep it simple) s , i este folosit doar pentru editarea de , i care includ posibilitatea de s iere surs a, Emacs este un editor complex cu facilitat , folosire ca mediu integrat de dezvoltare (IDE), client de e-mail, client de IRC etc. De-a numeroase facilitat , i au fost adaugate lungul vremii, nsa, s , i editorului vi astfel nct , ile oferite sunt apropiate. vi s de fapt doua familii de funct , ionalitat , i Emacs reprezinta familii sunt, respectiv, editorul editoare. Cei mai cunoscut , i reprezentant , i ai celor doua 4 , i avansate pentru editare Vim3 s i GNU Emacs . Ambele editoare dispun de facilit at , s ecienta Cunoscut , i permit posibilitatea de extensie s , i personalizare. , i pentru fanatismul folosirii unuia dintre cele doua editoare, programatorii vor prezenta s , ierul propriu de congurare (.vimrc n cazul Vim s i .emacs n cazul GNU Emacs). ,

a editorului Vim gasit , i n capitolul 14. O prezentare mai ampla


1 2

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/

CAPITOLUL 11. COMPILARE S , I LINKING

321

11.1.2

Compilare s , i interpretare

este compilat sau interpretat pentru a ndeplini sarcina Programul scris n cod sursa pentru care a fost scris. Att compilarea ct s , i interpretarea unui program sunt forme la de translatare a acestuia s , i execut , ie pe un sistem hardware. Translatarea se refera transformarea ntr-un limbaj a unui program scris ntr-un alt limbaj. compilarea unui program se refera la obt n denit , ia cea mai simpla, , inerea unui s , ier binar executabil. Executarea acestui s , ier duce la ndeplinirea sarcinii pentru care a cum se va observa n sect mai multe faze fost scris programul. Dupa , iunea 11.3 exista unui program. specice compilarii interpretarea unui program elimina faza obt De partea cealalta, , inerii unui executabil s ,i codul asociat unui program pe masura executa parcurgerii acestuia. Avantajul unui program este timpul mai scurt de dezvoltare (se elimina faza de interpretarii Pe de alta parte, dezavantajul interpretarii unui compilare) s , i depanarea mult mai facila. a de execut program este viteza mai scazut rularea executabilului , ie. n cazul compilarii, rularea de cod specic sistemului zic. n cazul interpretarii, codul sursa este nseamna parcurs, analizat s , i apoi executat, rezultnd ntr-un timp de rulare mai mare.

Limbaje compilate s , i limbaje interpretate numele de compilator, iar cel Utilitarul folosit pentru compilarea unui program poarta numele de interpretor. Compilatorul, respectiv folosit pentru interpretare poarta interpretorul, sunt implementari ale limbajului de programare asociat. Astfel, compilatorul/interepretorul cunoas te sintaxa limbajului de programare n care a fost , scris respectivul program s , i este folosit pentru translatarea acestuia ntr-o forma s executabila: , ier executabil n cazul compilatorului, sau execut , ie n timpul translatarii n cazul interpretorului. n general Una dintre cele confuziile din lumea limbajelor de programare s , i a programarii este clasicarea n limbaje compilate s , i limbaje interpretate. De multe ori se ment , ioneaza C, C++, Ada, Fortran, Java sunt limbaje compilate, n vreme ce Perl, Python, PHP, ca Ruby, Lisp sunt limbaje interpretate. De fapt, orice limbaj poate att interpretat ct s , i compilat. Astfel, des , i limbajul C este 1 s de obicei compilat, exista i interpretoare pentru acesta . , limbaje interpretate sau compilate ci implementari n concluzie, nu exista de limbajele de interpretor pentru un limbaj. ntr-adevar, compilator sau implementari de au asociate preponderent un anumit tip de implementare (C are implementari de interpretor) s compilator, Perl are implementari , i, drept urmare, sunt denumite clasicare este fort s limbaje compilate sau limbaje interpretate. Totus , i, aceasta , ata ,i sa e atribuita implementarii acelui limbaj. recomandam
1

http://www.softintegration.com/

322

INTRODUCERE N SISTEME DE OPERARE

Limbaje de nivel scazut s , i limbaje de nivel nalt posibile ale limbajelor de programare1 , o clasicare Dintre multiplele clasicari este n limbaje de programare de nivel scazut raspndit a s , i limbaje de programare de nivel nalt. o Limbajele de programare de nivel scazut sunt acele limbaje care nu ofera abstractizare a arhitecturii sistemului de calcul. n mod obis , nuit, aceste limbaje ofera a instruct o translatare minima iunilor arhitecturii. , adica scrierea unui program Limbaje de programare de nivel scazut sunt codul mas , ina, cod mas direct n binar s , i limbajul de asamblare. Un programator nu va scrie niciodata , ina s i foarte rar cod n limbaj de asamblare. , Limbajele de programare de nivel nalt sunt limbaje de programare care ofera o abstractizare a arhitecturii sistemului de calcul. Limbajele de programare de nivel o sintaxa mai apropiata de limbajul natural. nalt sunt mai us , or portabile s , i ofera o plaja larga de abstractizari. Limbajele de programare de nivel nalt ofera Unele limbaje pot ascunde complet detalii legate de modul de adresare a procesorului, alocarea/dezalocarea memoriei, lucrul cu obiecte etc. Not , iunea de limbaj de nivel nalt raportat la facilitat , ile oferite. Daca n anii 70, limbajul de programare C devine relativa era considerat limbaj de nivel nalt, n zilele noastre poate considerat limbaj de nivel scazut n comparat , ie cu limbaje precum Java, Python, Ruby. Exemple de limbaje de nivel nalt sunt: C/C++, Java, Perl, Python, PHP, Ruby, Lisp, Scheme, Prolog, Haskell.

11.1.3

la executabil, de la executabil la proces De la sursa

cum s-a precizat, n urma compilarii unui s se obt Dupa , ier sursa , ine un executabil care poate apoi rulat pentru ndeplinirea sarcinii pentru care a fost scris. n capitolul 5 s-a un executabil este o entitate pasiva care descrie modul n care va rula ment , ionat ca se realizeaza n urma execut programul. Rularea efectiva , iei programului n cadrul unui n cadrul careia proces. Procesul este entitatea activa se vor aloca resursele programului s , i se va rula codul asociat pe procesor. se As , a cum reiese s , i din gura 11.1, obt , inerea unui executabil dintr-un s , ier sursa n urma compilarii acestuia din urma. La fel, procesul este obt realizeaza , inut din cunoasca doar limbajul de nivel executabil n urma execut , iei. Utilizatorul va trebui sa nalt s i s a scrie codul surs a n acest limbaj. n continuare, compilatorul va obt , , ine operat executabilul; executabilul este un s , ier binar care descrie, n cod mas , ina, , iile precizate de utilizator. n faza de execut ie, cu suportul nucleului sistemului de operare, , un proces. Procesul este entitatea activa din executabilul obt , inut anterior se creeaza n zona de cod a care va executa pe procesor operat , iile descrise n cod mas , ina executabilului (vezi sect iunea 5.1.2). ,
1

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

CAPITOLUL 11. COMPILARE S , I LINKING

323

la executabil; de la executabil la proces Figura 11.1: De la s , ier sursa n acest fel un beneciu important: utilizatorul nu trebuie sa det Compilatorul ofera , ina informat ii despre sistemului zic din spate (zone de memorie, instruct iuni ale , , procesorului etc.), ci numai not , iuni despre limbajul folosit pentru a scrie codul sursa. (s Compilatorul va responsabil cu translatarea codului sursa ierul surs a, text) n cod , (s executabilului, sistemul de mas , ina , ierul executabil, binar). Ulterior, n urma rularii procesul care executa codul pe procesor. operare creeaza sine avantajul portabilitat , ii codului: utilizatorul va Folosirea unui compilator aduce dupa portabil specic limbajului de programare. Compilatorul genereaza cod scrie cod sursa binar neportabil specic sistemului zic pe care acesta va rula. Mai multe detalii despre portabilitate sunt prezentate n sect , iunea 11.6. C (hw.c) s n exemplul de mai jos este prezentat un s , ier sursa , i comenzile pentru compilarea acestuia (gcc hw.c), generarea unui executabil (a.out) s , i executarea acestuia n cadrul unui proces (./a.out).
1 2 3 4 5 6 7 8

#include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; }

Listing 11.1: hw.c


1 2 3 4 5 6 7

mircea@cougar:~/carte-uso/cap-10$ file hw.c hw.c: ASCII C program text mircea@cougar:~/carte-uso/cap-10$ gcc hw.c mircea@cougar:~/carte-uso/cap-10$ file a.out a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/ Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1, not stripped mircea@cougar:~/carte-uso/cap-10$ ./a.out Hello, World!

8 9 10

11.1.4

Pachete necesare

Pentru dezvoltarea de aplicat , ii este nevoie de

cunos , tint , e despre un anumit limbaj de programare;

324

INTRODUCERE N SISTEME DE OPERARE

un editor folosit pentru a scrie codul sursa;

un interpretor sau un compilator pentru acel limbaj.


n restul acestui capitol, limbajul de programare folosit pentru exemplicare va C. Compilatorul folosit va GCC1 , compilatorul implicit pe distribut Pachetele , iile Linux. necesare pentru dezvoltarea de aplicat Se , ii C sub Ubuntu sunt gcc, libc6-dev. s recomanda , i paginile de manual pentru dezvoltare din pachetul manpages-dev s ,i documentat ia bibliotecii standard C din pachetul glibc-doc (sau , glibc-doc-reference pe sistemele Debian). Instalarea utilitarului Make (vezi sect , iunea 11.5) este, de asemenea, recomandata.
1

root@cougar:~# apt-get install gcc libc6-dev manpages-dev glibc-doc make

Mai us , or, se poate instala pachetul virtual build-essential. Destinat formal crearii de pachete .deb, instalarea acestui pachet conduce la instalarea pachetelor importante pentru dezvoltarea programelor pe un sistem Ubuntu. Pachetul nu include pachetele de documentat , ie, deci acestea vor trebui instalate separat:
1

root@cougar:~# apt-get install build-essential manpages-dev glibc-doc

11.2

Compilare. GCC

la obt n general, procesul de compilare se refera , inerea unui s , ier executabil dintr-un s ier cod surs a. Aplicat ia care realizeaz a aceast a translatare se numes , , , te compilator. care, pe lnga rolul de translator, trebuie sa Un compilator este o aplicat , ie complexa s ndeplineasca i alte cerint e. Codul binar obt inut de compilator n cadrul executabilului , , , satisfaca una (sau mai multe) din urmatoarele va trebui sa solicitari: e ct mai mic; sa ruleze ct mai rapid; sa consume ct mai put memorie n momentul rularii. sa , ina implementeze ct mai mult din specicat Un compilator trebuie sa , iile standardelor n rigoare. Spre exemplu, n cazul C, standardele sunt stabilite de ISO2 . Ultimul standard 3 este ISO 9899:1999 denumit s , i C99 . prin transmiterea s ca Pe sistemele Unix, compilarea se realizeaza , ierului sursa n generarea executabilului implicit argument compilatorului. Compilarea rezulta 4 a.out :
1 2 3 4 5 6 7

mircea@cougar:~/carte-uso/cap-10$ gcc hw.c mircea@cougar:~/carte-uso/cap-10$ ls a.out hw.c mircea@cougar:~/carte-uso/cap-10$ ./a.out Hello, World!
1 2

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

CAPITOLUL 11. COMPILARE S , I LINKING

325

n linia de comanda, folosind utilitarul Pe sistemele Windows compilarea se realizeaza, 1 cl . Executabilul obt, inut are acelas , i nume cu s , ierul sursa nsa cu extensia .exe:
1 2 3 4

C:\> cl hw.c C:\> hw.exe Hello, World!

mare de alte sisteme GCC este compilatorul implicit pe distribut , iile Linux s , i pe un numar 2 Unix. Scris de Richard Stallman n 1989 pentru proiectul GNU, era folosit init , ial doar pentru a compila programe C (GNU C Compiler). De-a lungul timpului s-a extins, s , i n ziua de azi, poate compila programe scrise n C++, Fortran, Objective-C, Pascal, Java n GNU Compiler Collection. Pachetul etc. Drept urmare, denumirea sa a fost schimbata executabile (denumite s GCC ofera , i front-end-uri) pentru ecare tip de limbaj pe care l poate compila:

gcc este folosit pentru a compila programe scrise n C;


programe scrise n C++; g++ compileaza programe scrise n Ada; gnat compileaza programe scrise n Java; gcj compileaza programe scrise n Fortran; g77 compileaza

11.2.1

Utilizare GCC

a GCC, acesta genereaza executabilul a.out. Fie urmatorul La o rulare implicita program C:
1 2 3 4 5 6

#include <stdio.h> main() { printf("Hello, World!\n"); }

Listing 11.2: hw2.c compilarea se realizeaza prin transmiterea s n forma sa cea mai simpla, , ierului sursa ca argument comenzii gcc:
1

mircea@cougar:~/carte-uso/cap-10$ gcc hw2.c

n mod implicit se obt Pentru rularea acestuia se foloses , ine executabilul a.out. , te construct ia ./ care precizeaz a execut ia din directorul curent: , ,
1 2

mircea@cougar:~/carte-uso/cap-10$ ./a.out Hello, World!

Se poate specica numele executabilului care se dores , te obt , inut prin folosirea opt , iunii de numele executabilului: -o urmata
1 2

http://msdn.microsoft.com/en-us/library/ms235639(VS.80).aspx http://en.wikipedia.org/wiki/Richard_Stallman

326

INTRODUCERE N SISTEME DE OPERARE

1 2 3 4

mircea@cougar:~/carte-uso/cap-10$ gcc hw2.c -o my_exec mircea@cougar:~/carte-uso/cap-10$ ./my_exec Hello, World!

oriunde n general, executabilele n Unix nu au extensie. Opt , iunea -o poate prezenta doar ca va trebui sa e urmata de numele executabilului: n linia de comanda,
1 2 3 4

mircea@cougar:~/carte-uso/cap-10$ gcc -o my_other_exec hw2.c mircea@cougar:~/carte-uso/cap-10$ ./my_other_exec Hello, World!

frecventa este folosirea opt imediat de numele s O gres , eala , iunii -o urmata , ierului sursa:
1 2 3 4

mircea@cougar:~/carte-uso/cap-10$ gcc -o hw2.c my_other_exec my_other_exec:(.rodata+0x0): multiple definition of _fp_hw /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o:(.rodata+0x0): first defined here [...]

gres are consecint duce la pierderea s ATENT , IE: Aceasta , eala , e grave pentru ca , ierului sursa. dar nu respecta ntru totul standardul Programul hw2.c prezentat mai sus compileaza, 1 C. De exemplu, funct ia main trebuie s a ntoarc a int . Compilatorul nu va as , , a, n mod implicit, niciun fel de avertisment pentru astfel de inconsistent , e. Acest lucru poate compilatorul sa schimbat prin folosirea opt , iunii -Wall (Warnings All ) care comanda as eze mesaje de avertizare pentru abateri de la standard sau pentru formul ari atipice: ,
1 2 3

mircea@cougar:~/carte-uso/cap-10$ gcc -Wall hw2.c -o my_exec hw2.c:4: warning: return type defaults to int hw2.c: In function main: hw2.c:6: warning: control reaches end of nonvoid function

corectare, avertismentele nu vor mai furnizate: Dupa


1 2 3 4 5 6 7 8

#include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; }

Listing 11.3: hw2.c


1 2 3

mircea@cougar:~/carte-uso/cap-10$ gcc -Wall hw2.c -o my_exec mircea@cougar:~/carte-uso/cap-10$

frecventa care poate eliminata prin folosirea opt O gres , eala , 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 este raportata, iunii -Wall : ,
Una dintre gres este folosirea formelor void , elile frecvente realizate de programatorii ncepatori main(void) sau main(). Standardul C specica forma int main(void) ca ind cea corecta. Nefolosirea acestei forme poate conduce la probleme - http://users.aber.ac.uk/auj/voidmain.shtml
1

CAPITOLUL 11. COMPILARE S , I LINKING

327

1 2 3 4 5 6 7 8 9 10 11

#include <stdio.h> int main(void) { int a = 1; if (a = 1) printf("Hello, World!\n"); return 0; }

Listing 11.4: hw3.c


1 2

mircea@cougar:~/carte-uso/cap-10$ gcc -Wall hw2.c -o my_exec hw2.c: In function main: hw2.c:7: warning: suggest parentheses around assignment used as truth value

folosirea IMPORTANT: Din cauza sintaxei relaxate a limbajului C este recomandata opt , iunii -Wall la orice compilare de program.

11.2.2

Compilarea din surse multiple

va avea mai multe s cont , i din O aplicat , ie complexa , iere sursa , innd diverse part implementare. n exemplul de mai jos, s ierul main.c cont ine funct ia main , s , , , , ierele add.c s , i sub.c cont , in, respectiv, implementarea funct , iilor add s , i sub, iar s , ierul func.h det, ine antetele (declarat, iile) acelor funct, ii.
1 2 3 4 5 6 7 8 9 10 11 12 13

#include <stdio.h> #include "func.h" #define NUM 10

int main(void) { printf("Suma(%d) = %d\n", NUM, sum(NUM)); printf("Suma-alternanta(%d) = %d\n", NUM, sumalt(NUM)); return 0; }

Listing 11.5: main.c


1 2 3 4 5 6 7

#ifndef FUNC_H_ #define FUNC_H_ int sum(int n); int sumalt(int n); #endif

Listing 11.6: func.h


1 2

#include "func.h"

328
3 4 5 6 7 8 9 10 11 12

INTRODUCERE N SISTEME DE OPERARE

int sum(int n) { int i, sum; sum = 0; for (i = 1; i <= n; i++) sum += i; return sum; }

Listing 11.7: sum.c


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

#include "func.h" int sumalt(int n) { int i, sum; sum = 0; for (i = 1; i <= n; i++) { if (i % 2 == 0) sum -= i; else sum += i; } return sum; }

Listing 11.8: sumalt.c Pentru obt , inerea unui executabil, toate aceste s , iere vor transmise ca argument compilatorului:
1 2 3 4 5

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ gcc -Wall main.c sum.c sumalt.c razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ ./a.out Suma(10) = 55 Suma-alternanta(10) = -5

Se poate folosi opt , iunea -o pentru a specica numele executabilului nal:


1 2 3 4 5

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ gcc -Wall main.c sum.c sumalt.c -o exec razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ ./exec Suma(10) = 55 Suma-alternanta(10) = -5

11.3

(inclusiv link-editarea) Etapele compilarii

acum au folosit GCC pentru a obt Exemplele de pna , ine dintr-un s , ier sau mai multe Totus s iere surs a un executabil. Acest lucru a fost realizat ntr-o singur a comanda. , , i, rularea unei instant , e a GCC presupune trecerea printr-un set de etape de prelucrare a la executabil. Aceste faze sunt, n ordine: s ierului surs a pn a ,

CAPITOLUL 11. COMPILARE S , I LINKING 1. preprocesarea; 2. compilarea; 3. asamblarea; 4. link-editarea.

329

a comenzii gcc nseamna trecerea prin toate aceste faze. Prezent O rulare simpla ,a unor parametri poate fort a GCC s a se opreasc a dup a una dintre ele. , etapele compilarii: Figura 11.2 sintetizeaza

Figura 11.2: Fazele compilarii integrat toate cele 4 faze. Fis n cazul folosirii directe a comenzii gcc, se realizeaza , ierele obt inute n urma ec arei faze sunt, n aceast a situat ie, stocate temporar n sistemul de , , care sunt s detaliat s , iere dupa , terse. O rulare de tip verbose a comenzii gcc prezinta fazele procesului de compilare:
1 2 3 4 5 6 7 8 9 10 11 12

razvan@valhalla:~/code/ptr$ gcc -v -Wall ptr.c -o ptr Using built-in specs. Target: x86_64-linux-gnu [...] /usr/lib/gcc/x86_64-linux-gnu/4.3.3/cc1 -quiet -v ptr.c -quiet -dumpbase ptr.c -mtune=generic -auxbase ptr -Wall -version -o /tmp/ccYyQvdx.s [...] GNU C (Debian 4.3.3-14) version 4.3.3 (x86_64-linux-gnu) compiled by GNU C version 4.3.3, GMP version 4.3.1, MPFR version 2.4.1-p2. [...] as -V -Qy -o /tmp/ccoFhtN3.o /tmp/ccYyQvdx.s GNU assembler version 2.19.51 (x86_64-linux-gnu) using BFD version (GNU Binutils for Debian) 2.19.51.20090723 [...] /usr/lib/gcc/x86_64-linux-gnu/4.3.3/collect2 --build-id --eh-frame-hdr m elf_x86_64 --hash-style=both -dynamic-linker /lib64/ld-linux-x86-64.so .2 -o ptr /usr/lib/gcc/x86_64-linux-gnu/4.3.3/../../../../lib/crt1.o [...] /tmp/ccoFhtN3.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc [...]

cum se observa mai sus, exista 3 etape rezultate n urma rularii comenzii gcc: Dupa 1. invocarea compilatorului (cc1) conduce la obt , inerea s , ierului n limbaj de asamblare /tmp/ccYyQvdx.s;

330 2. invocarea asamblorului /tmp/ccoFhtN3.o; (as)

INTRODUCERE N SISTEME DE OPERARE conduce la obt , inerea s , ierului obiect

3. invocarea linker-ului (collect2) conduce la obt , inerea s , ierului executabil ptr; n n cazul GCC, preprocesorul este invocat intern de compilator (cc1) s , i nu rezulta obt , inerea unui s , ier temporar. n continuare vor prezentate mai detaliat fazele procesului de compilare s , i s , ierele intermediare obt , inute.

11.3.1

Preprocesarea
nlocuirea/expandarea directivelor de

Etapa de preprocesare presupune preprocesare din s , ierul sursa.

Printre acestea se Directivele de preprocesare ncep cu # (diez, sharp n engleza). a directiva #include s numar i directiva #define . Dup a preprocesare, directiva , cu s #include este nlocuita , ierul inclus, iar directiva #define denes , te un macro care va substituit cu valoarea sa oriunde apare n codul sursa. preprocesarea s n exemplul de mai jos se realizeaza , ierului info.c.
1 2 3 4 5 6 7 8 9 10 11

#ifndef INFO_H_ #define INFO_H_

1 32

#define MAX_ARRAY_LENGTH

struct array_struct { int array[MAX_ARRAY_LENGTH]; int len; }; #endif

Listing 11.9: info.h


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

#include "info.h" int get_sum(struct array_struct *a) { int i; int sum; if (a->len >= MAX_ARRAY_LENGTH) return 0; for (i = 0; i < a->len; i++) sum += a->array[i]; return sum; }

Listing 11.10: info.c GCC dupa faza de preprocesare se foloses Pentru oprirea rularii , te opt , iunea -E:

CAPITOLUL 11. COMPILARE S , I LINKING

331

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

mircea@cougar:~/carte-uso/cap-10$ gcc -E info.c # 1 "info.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "info.c" # 1 "info.h" 1

struct array_strunct { int array[32]; int len; }; # 2 "info.c" 2 int get_sum(struct array_struct *a) { int i; int sum; if (a->len >= 32) return 0; for (i = 0; i < a->len; i++) sum += a->array[i]; return sum; }

nlocuirea directivei #include cu s Se observa info.h s nlocuirea , ierul ,i macrodenit , iei MAX_ARRAY_LENGTH cu 32 n s , ierul preprocesat. a procesului de compilare care nu rezulta n mod Preprocesarea este singura faza este scris la implicit ntr-un nou s , ier. n absent , a opt , iunii -o, rezultatul preprocesarii ies , irea standard. Folosirea opt , iunii -o sau a operatorului de redirectare permite precizarea s , ierului de ies , ire. Convent , ional, s , ierul preprocesat are extensia .i:
1 2 3

mircea@cougar:~/carte-uso/cap-10$ gcc -E info.c -o info.i mircea@cougar:~/carte-uso/cap-10$ gcc -E info.c > info.i

pe un sistem Linux cu ajutorul utilitarului GNU CPP (C Preprocesarea este efectuata preprocessor)1 .

11.3.2

Compilarea

Compilarea este etapa n care din s , ierul preprocesat se obt , ine un s , ier n limbaj de asamblare. nseamna traducerea codului din limbaj de nivel nalt n limbaj de Compilarea efectiva asamblare. Limbajul de asamblare descrie instruct , iunile specice procesorului
1

http://gcc.gnu.org/onlinedocs/cpp/

332 sistemului zic. opt , iunea -S.

INTRODUCERE N SISTEME DE OPERARE GCC dupa faza de compilare se foloses Pentru oprirea rularii , te

s s n exemplul de mai jos, se compileaza , ierul info.c din sect , iunea anterioara , i se obt , ine, implicit, s , ierul info.s. Se poate preciza explicit s , ierul de ies , ire cu ajutorul opt iunii -o . ,
1 2 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 mircea@cougar:~/carte-uso/cap-10$ gcc -S info.c mircea@cougar:~/carte-uso/cap-10$ ls info.* info.c info.h info.s .file .text .globl get_sum .type get_sum: pushl movl subl movl movl cmpl jle movl jmp [...] "info.c"

get_sum, @function %ebp %esp, %ebp $20, %esp 8(%ebp), %eax 128(%eax), %eax $31, %eax .L2 $0, -20(%ebp) .L4

Listing 11.11: info.s Pe sistemele Linux s , i Unix, s , ierul n limbaj de asamblare are, de obicei, extensia .s. Pe sistemele Windows, un s , ier n limbaj de asamblare are extensia .asm.

Limbaje de asamblare Limbajul de asamblare este un limbaj de programare de nivel scazut. Instruct , iunile sale (denumite s i mnemonici) sunt de fapt reprezentarea simbolic a a instruct iunilor puse la , , dispozit , ie de procesorul sistemului. Exemple de mnemonici sunt mov, cmp, add, sub, push etc. Instruct, iunea n cod mas , ina:
1

10110000 01100001 (0xb061)

n limbaj de asamblare ca: este scrisa


1

mov

al,

061h

efectuarea unei copieri. Rezultatul este ncarcarea Mnemonica mov nseamna valorii n general, o asociere unu la unu ntre o 0x61 n registrul al al procesorului. Exista, instruct iune n limbaj de asamblare s i o instruct , , , iune n cod mas , ina. Un program scris n limbaj de asamblare este neportabil: poate rulat numai pe programul n limbaj de asamblare arhitectura de calcul pentru care a fost scris. Daca arhitectura, trebuie rescris s trebuie portat pe o alta , i folosite mnemonicile spcice acelei arhitecturi.

CAPITOLUL 11. COMPILARE S , I LINKING

333

cunos ntruct necesita despre structura procesorului, resursele acestuia, , tint ,e Se mecanismul de acces la memorie, programarea n limbaj de asamblare este dicila. folosirea acestuia doar la nevoie: recomanda instruct cnd un limbaj cum este C nu ofera , iuni pentru efectuarea unei anumite operat , ii maxima care poate obt numai prin scrierea de cnd este nevoie de ecient, a , inuta cod n limbaj de asamblare cu ajutorul unui Traducerea codului n limbaj de asamblare n cod obiect se realizeaza n sect asamblor n faza de asamblare descrisa iunea urm atoare. Fiind vorba de o , asociere unu la unu ntre mnemonici s este posibila , i instruct , iunile procesorului, obt , inerea codului n limbaj de asamblare pornind de la codul obiect. Aceasta operat , ie numele de dezasamblare s poarta i este prezentat a n sect iunea 11.3.3. , ,

Tipuri de limbaje de asamblare Chiar pentru acelas , i procesor pot exista limbaje de asamblare diferite sau, mai corect spus, sintaxe de limbaj de asamblare diferite. Pe arhitectura x86, asamblorul de la Microsoft foloses , te sintaxa Intel, pe cnd asamblorul de Linux (GNU) foloses , te sintaxa 1 AT&T . Astfel, copierea valorii 0x100 n registrul eax se face, folosind cele doua sintaxe, astfel:
1 2

movl mov

$0x100, eax,

%eax 100h

; sintaxa AT&T ; sintaxa Intel

de eax: La fel, stocarea valorii 100 la adresa indicata


1 2

movl $0x100, movl [eax],

(eax) 100h

; sintaxa AT&T ; sintaxa Intel

11.3.3

Asamblarea

Etapa de asamblare este etapa de traducere a codului scris n limbaj de asamblare (s , ier text cont , innd mnemonici specice arhictecturii sistemului de calcul) n cod binar. Acest reprezentnd codicarea binara a instruct cod binar este cod mas , ina , iunilor procesorului. Fis ierul obt inut poart a numele de s 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 Pentru oprirea rularii , te opt , iunea -c. n mod cu .o. Fis poate un s implicit se nlocuies , te extensia s , ierului sursa , ierul sursa , ier C sau un s , ier n limbaj de asamblare:
1 2 3 4 5 6 7
1

mircea@cougar:~/carte-uso/cap-10$ gcc -c info.c mircea@cougar:~/carte-uso/cap-10$ ls -l info.o -rw-r--r-- 1 ubuntu ubuntu 764 Sep 19 00:29 info.o mircea@cougar:~/carte-uso/cap-10$ gcc -c info.s

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

334
8 9

INTRODUCERE N SISTEME DE OPERARE

mircea@cougar:~/carte-uso/cap-10$ ls -l info.o -rw-r--r-- 1 ubuntu ubuntu 744 Sep 19 00:29 info.o

acum, se poate folosi opt Ca s , i pna , iunea -o pentru a preciza explicit numele s , ierului de ies ire: ,
1 2 3 4

mircea@cougar:~/carte-uso/cap-10$ gcc -c info.s -o modul.o mircea@cougar:~/carte-uso/cap-10$ ls -l modul.o -rw-r--r-- 1 ubuntu ubuntu 744 Sep 19 00:47 modul.o
1 n cadrul suitei de aplicat , ii GNU, asamblorul folosit Gas (GNU Assembler) , iar executabilul asociat este as. Un s , ier n limbaj de asamblare poate asamblat folosind as:

1 2 3 4

mircea@cougar:~/carte-uso/cap-10$ as info.s -o as_out.o 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 specic procesorului. Acest cod este obt Un modul obiect cont , ine cod mas , ina , inut n urma fazelor de preprocesare, compilare s i asamblare. Un modul obiect are, de obicei, , extensia .o:
1 2

mircea@cougar:~/carte-uso/cap-10$ file info.o info.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

objdump; dezasamblare asocierii unu la unu care exista ntre codul obiect s Datorita , i codul n limbaj de asamblare, se poate realiza o operat , ie de dezasamblare. recuperarea mnemonicilor n limbaj de asamblare Dezasamblare nseamna este operat asamblarii. pornind de la codul mas in a; , , ia inversa Utilitarul folosit n acest sens este objdump:
1 2 3 4 5 6 7 8 9 10 11 12

razvan@anaconda:~/uso/compilare$ objdump -d info.o info.o: file format elf32-i386 Disassembly of section .text: 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

%ebp %esp,%ebp $0x14,%esp 0x8(%ebp),%eax 0x80(%eax),%eax $0x1f,%eax

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

CAPITOLUL 11. COMPILARE S , I LINKING


13 14 15

335
1d <get_sum+0x1d> $0x0,0xffffffec(%ebp)

12: 14: [...]

7e 09 c7 45 ec 00 00 00 00

jle movl

nm Un alt utilitar folositor n lucrul cu s , iere obiect este nm. Cu ajutorul acestuia se pot lista simbolurile dintr-un s , ier obiect:
1 2

razvan@anaconda:~/uso/compilare$ nm info.o 00000000 T get_sum

nm poate oferi informat, ii despre denirea sau nu a unui simbol ntr-un modul obiect:
1 2 3 4 5

razvan@anaconda:~/uso/compilare$ nm main.o U add 00000000 T main U printf U sub

se observa ca simbolurile sunt marcate cu U sau T. T nseamna Din rezultatul as , arii acel simbol este denit n zona de text (cod) a executabilului, iar U nseamna ca ca este nedenit n modulul obiect primit ca argument. n exemplul nostru, modulul are denit simbolul main dar nedenite simbolurile add, sub s , i printf. Aceste simboluri se gasesc n alte module obiect sau n biblioteci. Rezolvarea acestor simboluri se va realiza n momentul link-editarii.

11.3.4

Optimizarea compilarii

codul sursa n limbaj de asamblare, s faza de Un compilator translateaza , i dupa Operat asamblare, n cod mas , ina. , iile descrise ntr-un limbaj de nivel nalt pot traduse n diverse scenarii de instruct iuni n limbaj de asamblare. Avnd cunos , , tint , e intime despre arhitectura sistemului de calcul (setul de instruct , iuni, registrele procesorului s ,i modurile de adresare), compilatorul poate alege un scenariu mai bun de translatare. n care compilatorul ncearca obt mai bun Faza translatarii , inerea unui cod mas , ina numele de optimizarea codului. poarta Un termen mult mai bun este cel de Denumirea de optimizare este us , or fort , ata. at , ire; nu se poate spune ca se obt raspndirii mbunat acestei , ine cod optim. Datorita ct s forme, att n limba romna i n limba englez a ( optimizing compiler ), se va folosi n , continuare denumirea de optimizare. ruleze ct mai rapid s Optimizarea are drept scop obt , inerea unui executabil care sa , i/sau ocupe ct mai put care sa in spat iu. , , scopuri (viteza mare, spat e n Se poate ntmpla ca aceste doua , iu ocupat mic) sa conict; utilizatorul va putea preciza compilatorului care scop este mai important. cu dezvoltarea sistemelor embedded, un rol important pe care trebuie sa-l O data executabilul obt ndeplineasca inut de compilator este consumul redus de putere. ,

336

INTRODUCERE N SISTEME DE OPERARE

reprezinta un compromis ntre obt Folosirea optimizarii , inerea unui executabil mai rapid sau care ocupa mai put , in spat , iu s , i un timp mai ndelungat de compilare. Din acest motiv, far a optimizare. Faza de optimizare partea de dezvoltare a unei aplicat , ii se realizeaza n momentul n care aplicat a pentru lansare (release). este folosita , ia este pregatit mai jos se prezinta doua Pentru a justica avantajele s , i dezavantajele folosirii optimizarii, scenarii de compilare a unei aplicat , ii C++: a optimizare; se obt far , ine executabilul bb-ssa-no-opt;

cu folosirea unor opt, iuni de optimizare; se obt, ine executabilul bb-ssa-opt.


Se poate observa, ca dezavantaj o cres , tere a timpului necesar pentru compilare (de la 4.1 secunde la 5.7 secunde), dar ca avantaj o scadere a dimensiunii executabilului (de la 328KB la 140KB):
1

razvan@valhalla:~/school/2001-2006_code/pt/tema4/pt4$ time g++ -o bb-ssano-opt bb-ssa.cpp basic_block.cpp ssa.cpp asamblor.c analizor.c interpretor.tab.c -lfl real user sys 0m4.143s 0m3.624s 0m0.488s

2 3 4 5 6 7

razvan@valhalla:~/school/2001-2006_code/pt/tema4/pt4$ time g++ -O -o bbssa-opt bb-ssa.cpp basic_block.cpp ssa.cpp asamblor.c analizor.c interpretor.tab.c -lfl real user sys 0m5.769s 0m5.288s 0m0.456s

8 9 10 11 12 13 14 15 16 17

razvan@valhalla:~/school/2001-2006_code/pt/tema4/pt4$ ls -lh bb-ssa-noopt -rwxr-xr-x 1 razvan razvan 328K Aug 21 22:11 bb-ssa-no-opt razvan@valhalla:~/school/2001-2006_code/pt/tema4/pt4$ ls -lh bb-ssa-opt -rwxr-xr-x 1 razvan razvan 140K Aug 21 22:12 bb-ssa-opt

GCC permite optimizarea codului obt , inut prin intermediul opt , iunii -O. Aceasta este de un numar care specica gradul de optimizare/mbunat at , ire a codului. n mod urmata codul. Acest lucru este echivalent cu folosirea implicit, compilatorul nu optimizeaza s opt , iunii -O0 (litera o majuscula , i zero):
1 2 3 4

mircea@cougar:~/carte-uso/cap-10$ gcc -c chatserv.c -O0 mircea@cougar:~/carte-uso/cap-10$ ls -l chatserv.o -rw-r--r-- 1 ubuntu ubuntu 3656 Sep 18 23:46 chatserv.o

3 niveluri numerice de compilare: GCC prezinta reducerea timpului de execut a a opt, iunea -O1 nseamna , ie s , i a codului obt , inut far cu folosirea opt afecta semnicativ timpul de compilare; este echivalenta , iunii -O a un argument numeric) (far
1 2 3 4

mircea@cougar:~/carte-uso/cap-10$ gcc -c chatserv.c -O1 mircea@cougar:~/carte-uso/cap-10$ ls -l chatserv.o -rw-r--r-- 1 ubuntu ubuntu 3200 Sep 18 23:46 chatserv.o

CAPITOLUL 11. COMPILARE S , I LINKING

337

folosirea tuturor optimizarilor opt, iunea -O2 nseamna care nu atrag un compromis viteza-spat , iu
1 2 3 4

mircea@cougar:~/carte-uso/cap-10$ gcc -c chatserv.c -O2 mircea@cougar:~/carte-uso/cap-10$ ls -l chatserv.o -rw-r--r-- 1 ubuntu ubuntu 3232 Sep 18 23:47 chatserv.o

ca s-a obtinut un cod ceva mai mare dect n cazul opt Se observa , iunii -O1, dar care va rula mai rapid. Nu ntotdeauna un cod mai mic va mai rapid. (s metoda de opt, iunea -O3 este n acest moment cea mai puternica , i agresiva) compilare:
1 2 3 4

mircea@cougar:~/carte-uso/cap-10$ gcc -c chatserv.c -O3 mircea@cougar:~/carte-uso/cap-10$ ls -l chatserv.o -rw-r--r-- 1 ubuntu ubuntu 3308 Sep 18 23:47 chatserv.o

s optimizarea codului pentru a ocupa GCC ofera , i opt , iunea -Os care nseamna este n cazul dispozitivelor embedded care ct mai put , in spat , iu. O utilizare tipica dispun de resurse hardware reduse:
1 2 3 4

mircea@cougar:~/carte-uso/cap-10$ gcc -c chatserv.c -Os mircea@cougar:~/carte-uso/cap-10$ ls -l chatserv.o -rw-r--r-- 1 ubuntu ubuntu 2868 Sep 18 23:47 chatserv.o

11.3.5

Link-editarea

Modulul obiect descrie Un modul obiect este asociat unui singur s , ier/modul sursa. numele generic de datele s i codul funct iilor proprii. Varibialele s i funct iile poart a , , , , funct simboluri. Simbolurile externe modulului (adica , iile sau variabilelele externe nedenite local, prezente n alte module) sunt marcate ca nedenite n cadrul modulului. Pentru obt , inerea unui s , ier executabil s , i deci pentru rularea acestui cod este necesara: s identicarea simbolurilor nedenite, operat, ie denumita , i rezolvarea simbolurilor, s ,i

unicarea sau legarea (linking) a zonelor de date s , i cod asociate ntr-un s , ier
executabil. operat Aceasta , ie se numes , te link-editare, linking sau legare. un modul obiect care foloses Spre exemplu, n momentul n care se compileaza , te funct , ia printf, simbolul apare ca ind nedenit (caracterul U la nm): de biblioteca
1 2 3

razvan@anaconda:~/uso/compilare$ nm main.o 00000000 T main U printf

n biblioteca standard C. n urma link-editarii se obt Funct , ia printf este denita , ine un zona de cod asociata funct executabil care importa , iei printf din biblioteca standard situat C. Alta ie este folosirea ntr-un modul obiect a unei funct , , ii denite ntr-un alt modul

338

INTRODUCERE N SISTEME DE OPERARE

obiect; un exemplu este folosirea funct sum n s main.c descris n , iei , ierul sect , iunea 11.2.2. Funct , ia sum este denita n sum.c. simbolurile nedenite s legarea modulelor Aplicat , ia care rezolva , i care realizeaza numele de linker. obiect poarta Rolul unui linker este, as , adar, de a lega mai multe s , iere obiect sau biblioteci, de a rezolva simbolurile nedenite s , i de a obt , ine un executabil sau o biblioteca. rolul ndeplinit de un linker. Figura 11.3 prezinta

Figura 11.3: Funct , ionarea linker-ului Mai multe detalii despre biblioteci se gasesc n sect , iunea 11.4.

Invocare linker
1 Linker-ul de pe distribut , iile GNU/Linux este GNU linker sau GNU ld . 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$ gcc -Wall -c main.c mircea@cougar:~/carte-uso/cap-10$ gcc -Wall -c add.c mircea@cougar:~/carte-uso/cap-10$ gcc -Wall -c sub.c mircea@cougar:~/carte-uso/cap-10$ gcc main.o add.o sub.o -o exec mircea@cougar:~/carte-uso/cap-10$ ./exec Suma (10): 55
1

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

CAPITOLUL 11. COMPILARE S , I LINKING


11

339

Suma alternanta (10): -5

numarul Se poate folosi s mare de argumente care trebuie transmis face , i ld, nsa opt aceasta , iune mai put , in viabila:
1

mircea@cougar:~/carte-uso/cap-10$ ld -dynamic-linker /lib/ld-linux.so.2 / usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.1.2/crtbegin .o main.o add.o sub.o -lc /usr/lib/gcc/i486-linux-gnu/4.1.2/crtend.o /usr /lib/crtn.o -o exec mircea@cougar:~/carte-uso/cap-10$ ./exec Suma (10): 55 Suma alternanta (10): -5

2 3 4 5

11.3.6

Fis , iere executabile

Un s , ier binar obt , inut dintr-un set de s , iere obiect s ,i , ier executabil este un s biblioteci n urma operat , iei de link-editare. Spre deosebire de s , ierele obiect, un s , ier executabil are identicate s , i, n general, sau la rezolvate simbolurile. Aceste simboluri sunt rezolvate la linking (legare statica) rulare (legare dinamica). n execut n momentul lansarii , ie, informat , iile cont , inute n s , ierul executabil sunt folosite folosit pentru pentru a genera un proces. Un s ier executabil va cont ine codul mas , , , ina ndeplinirea sarcinilor date dar s , i antete s , i sect , iuni de formatare auxiliare. Acestea sunt folosite pentru a descrie modul n care se foloses , te codul, zonele de memorie folosite etc. Un s , ier executabil are, as , adar, un format bine denit. Formatul de s , ier executabil se la s refera iere obiect, s iere executabile s i la biblioteci cu legare dinamic a. , , ,

Formate ale s , ierelor executabile


1 Formatul unui s este strns legat de sistemul de operare. Sistemul de , ier executabil operare este responsabil cu interpretarea unui s , ier executabil s , i generarea unui proces pe baza acestuia. Un executabil poate rulat pe un sistem de operare daca suport pentru formatul de executabil folosit. Formatul de acel sistem de operare ofera s , ier executabil se refera s , i la s , ierele obiect.

Exemple de formate de s , iere obiect/executabile sunt:

ELF folosit n sistemele Unix;


ELF folosita pe Unix; COFF versiunea anterioara

a.out primul format folosit de sistemele Unix; a oferit denumirea pentru


executabilul implicit generat de compilator/linker;

PE formatul implicit pe sistemele Windows;


1

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

340

INTRODUCERE N SISTEME DE OPERARE

Mach-O formatul implicit pe Mac OS X.


n Linux, formatul de s , ier obiect/executabil folosit este ELF (Executable and Linking Format)1 :
1 2 3 4 5

mircea@cougar:~/carte-uso/cap-10$ file info.o info.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped mircea@cougar:~/carte-uso/cap-10$ file exec exec: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/ Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1, not stripped mircea@cougar:~/carte-uso/cap-10$ file /bin/ls /bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1, stripped mircea@cougar:~/carte-uso/cap-10$ file /lib/libc-2.3.6.so /lib/libc-2.3.6.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.1, stripped

6 7 8

9 10 11

tipurile de s n listingul de mai sus se observa , iere care folosesc formatul ELF:
2 module obiect; s , ierul info.o este un modul obiect ELF relocabil ;

s , iere executabile; s , ierele exec s , i /bin/ls sunt s , iere executabile format ELF;
biblioteci partajate (vezi x.y.z); s , ierul /lib/libc-2.3.6.so este o biblioteca (shared-object) (vezi sect partajata , iunea 11.4.1). Utilitarul readelf poate folosit pentru analiza unui s , ier n format ELF. n exemplul de mai jos se pot observa cteva din sect , iunile unui s , ier executabil: .text reprezinta zona de cod, .rodata zona de date read-only.
1 2 3 4 5 6 7 8 9 10

razvan@anaconda:~/uso/compilare$ readelf -S exec There are 34 section headers, starting at offset 0xe38: Section Headers: [Nr] Name Inf Al [ 0] 0 0 [ 1] .interp 0 1 [ 2] .note.ABI-tag 0 4 [ 3] .hash 0 4 [...]

Type NULL PROGBITS NOTE HASH

Addr

Off

Size

ES Flg Lk 0 A A A 0 0 4

00000000 000000 000000 00 08048114 000114 000013 00 08048128 000128 000020 00 08048148 000148 000028 04

1 2

http://en.wikipedia.org/wiki/Executable_and_Linkable_Format http://en.wikipedia.org/wiki/Relocation_(computer_science)

CAPITOLUL 11. COMPILARE S , I LINKING

341

11.4

Biblioteci de funct , ii

servicii preimplementate este colect O biblioteca , ie de funct , ii sau clase care ofera este obt prin comasarea mai multor dezvoltatorului. n general, o biblioteca , inuta s iere obiect. O bibliotec a este, de asemenea, un s ier. , ,

Figura 11.4: Biblioteca libraries) au aparut pentru a oferi o mai mare exibilitate Bibliotecile de funct , ii (engleza: dezvoltatorilor de software. Acestea reunesc funct , ii des utilizate, astfel nct un program far a a nevoie de rescrierea codului dorit. va folosi o biblioteca n zilele noastre, foarte multe servicii au fost ncapsulate n biblioteci de funct , ii pentru a us ura procesul de dezvoltare de noi aplicat ii. Astfel: , , serviciile de baza ale sistemului; biblioteca standard C (libc) ofera primitive pentru dezvoltarea de interfet biblioteci precum GTK+1 sau Qt2 ofera ,e grace;

utilitarul Pidgin3 de instant messaging a izolat funct, iile principale n biblioteca libpurple; dezvotatorii Subversion4 au dezvoltat biblioteca libsvn1; libpng, libjpeg, libtiff sunt folosite pentru prelucrarea de imagini; libtorrent-rakshasa s , i libtorrent-rasterbar sunt biblioteci care
protocolul BitTorrent folosite de un numar mare de client implementeaza ,i BitTorrent. Mai sus sunt prezentate doar cteva dintre aplicat Practic, orice , iile bibliotecilor. de mai multe aplicat ntr-o biblioteca. funct , ionalitate utilizabila , ii poate implementata
1 2

http://www.gtk.org/ http://qt.nokia.com/ 3 http://www.pidgin.im/ 4 http://subversion.tigris.org/

342

INTRODUCERE N SISTEME DE OPERARE

Din circa 25000 de pachete instalabile n cadrul distribut , iei Debian GNU/Linux 1 Testing/Squeeze , peste 5000 sunt biblioteci:
1 2

razvan@valhalla:~/code/ptr$ apt-cache search library | grep ^lib | wc -l 5699

11.4.1

Tipuri de biblioteci

Bibliotecile s Pentru rezolvarea simbolurilor , i ncep utilizarea n momentul link-editarii. n modulele obiect ncapsulate n cadrul bibliotecilor s nedenite, linker-ul cauta ,i realizeaza rezolvarea simbolurilor. Rezolvarea nseamna marcarea locului n care adauge modulul simbolul este denit. n funct , ie de tipul bibliotecii, linker-ul decide sa marcheze referint Exista, obiect necesar n codul executabilului sau doar sa , a rezolvata. tipuri de biblioteci: astfel, doua (statically-linked libraries) sau, pe scurt, biblioteci biblioteci cu legare statica statice; (dinamically-linked libraries) denumite biblioteci biblioteci cu legare dinamica partajate (shared libraries) pe Linux s , i dynamic-link libraries (DLL) pe Windows. sub forma de s Indiferent de tip, bibliotecile de funct , ii exista , iere independente n sistem. Bibliotecile statice (static libraries) sunt acele biblioteci ale caror module obiect componente sunt incluse n s ierul executabil n momentul link-edit arii. , cu o biblioteca statica det Altfel spus, un executabil obt , inut n urma legarii , ine tot codul a prin includerea s necesar pentru a rula. Dimensiunea executabilului este marit , ierelor obiect necesare din cadrul bibiotecii. n cazul bibliotecilor partajate (shared libraries), operat , ia de link-editare doar referint marcheaza , ele ca ind rezolvate. Modulele obiect nu sunt incluse n codul n execut executabilului obt inut; vor adaugate n momentul lansarii , , ie sau n momentul rularii. n cadrul unui executabil. Codul asociat unei biblioteci partajate nu ajunge niciodata n memorie la nevoie s n cadrul procesului Biblioteca va ncarcat a i va folosit a , n obt a , inut n urma execut , iei. n funct , ie de momentul n care biblioteca va ncarcat doua subtipuri de biblioteci cu legare dinamica: memorie, exista biblioteci cu ncarcare la execut , ie (load-time dynamically-linked library ) n memorie n momentul n care programul executat, daca biblioteca este adusa deja acolo; nu exista biblioteci cu ncarcare la rulare (run-time dinamically-linked library ) biblioteca n memorie la cerere, n momentul n care programul executa o este adusa acest lucru. instruct , iune care solicita cum le spune s metoda cea mai Bibliotecile partajate, dupa , i denumirea, reprezinta de a pune la dispozit doua utilizata , ie funct , ii comune pentru mai multe aplicat , ii. Daca
1

http://packages.debian.org/testing/

CAPITOLUL 11. COMPILARE S , I LINKING

343

aceasta va trebui sa e ncarcat o sau mai multe aplicat a , ii folosesc aceeas , i biblioteca, singura data n memorie, economisind astfel spat Biblioteca standard C, , iul ocupat. de cea mai mare parte a aplicat partajata. folosita iilor, este, de obicei, o bibiotec a , o comparat Tabela 11.1 reprezinta , ie ntre bibliotecile statice s , i cele partajate: Tabelul 11.1: Comparat , ie ntre tipurile de biblioteci Biblioteci statice Biblioteci partajate de module obiect Colect , ie/arhiva Executabil rezultat mai mare; se include cod Executabilul poate mutat pe alt sistem Codul necesar este adaugat ecarui executabil s proces , i apoi ecarui Timp de execut , ie mai rapid Fis , ier format ELF nu se Executabil de dimensiune mica; include cod Executabilul are nevoie de prezent ,a bibliotecii pentru a putea rula Codul bibliotecii este partajat ntre toate procesele care o folosesc Timp de execut se face , ie mai lent; rezolvarea simbolurilor n mod dinamic

11.4.2

Informat , ii despre bibliotecile de funct , ii

Pe un sistem Linux, bibliotecile se gasesc n directoarele /lib, /usr/lib sau /usr/local/lib. Bibliotecile statice au extensia .a, iar cele partajate .so (de la shared object). Informat , ii primare despre bibliotecile de funct , ii se pot aa prin intermediul comenzii

file:
1 2 3 4 5 6 7 8 9

mircea@cougar:~/carte-uso/cap-10$ file /usr/lib/libm.a /usr/lib/libm.a: current ar archive mircea@cougar:~/carte-uso/cap-10$ file /lib/libm.so.6 /lib/libm.so.6: symbolic link to libm-2.3.3.so mircea@cougar:~/carte-uso/cap-10$ file /lib/libm-2.3.3.so /lib/libm-2.3.3.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped

Bibliotecile statice sunt de fapt arhive de s , iere obiect. Ele sunt create prin intermediul comenzii ar. (pentru mai multe informat , ii se poate consulta man ar). partajata este creata de linker. Pe un sistem Linux, o biblioteca partajata O biblioteca 1 se creeaza cu ajutorul comenzii gcc s , i opt , iunea -shared . O biblioteca partajata este printr-un numar de versiune. Pentru a facilita folosirea acesteia, se creeaza identicata a care nu include numarul o legatur versiunii. pentru a vizualiza lista simbolurilor dintr-o biblioteca Comanda nm poate utilizata sau dinamica): (statica
1 2 3

mircea@cougar:~/carte-uso/cap-10$ nm /lib/libm.so.6 00052b60 T fscanf 00043f20 T fprintf


1

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

344
4 5 6 7 8

INTRODUCERE N SISTEME DE OPERARE

00052b90 T scanf 00052bd0 T sscanf U __libc_enable_secure@@GLIBC_PRIVATE U __libc_stack_end@@GLIBC_2.1 [...]

Simbolurile marcate cu T sunt simboluri din zona de cod (funct , ii) ce pot folosite extern de alte programe sau alte biblioteci. Simbolurile care sunt precedate de caracterul U ca sunt simboluri care trebuie rezolvate de linker la apelarea programului (se observa n s ele nu au adresa ierul cu biblioteca). Acestea nu sunt denite local, ci n alte , biblioteci (simbolul __libc_enable_secure@@GLIBC_PRIVATE este denit n biblioteca standard C libc)

11.4.3

Utilizarea bibliotecilor

colect Bibliotecile reprezinta , ii de module preimplementate folosite pentru obt , inerea unui ca, n momentul link-editarii, linker-ului i trebuie precizate executabil, ceea ce nseamna cu ajutorul opt bibliotecile necesare. Acest lucru se realizeaza , iunii -l (litera L mic). n funct listingul 11.4.3 se apeleaza ii din biblioteca ncurses . ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

#include <stdio.h> #include <stdlib.h> #include <ncurses.h> int main(void) { initscr(); cbreak(); noecho(); printf("Smash forehead on keyboard to continue ..."); fflush(stdout); fflush(stdin); getch(); nocbreak(); echo(); endwin(); return 0; }

Listing 11.12: Folosire funct , ii din biblioteca ncurses urmatoarea n urma comenzii de compilare s eroare: , i rulare rezulta
1 2 3 4 5 6 7 8 9 10 11

razvan@valhalla:~/carte-uso/cap-10$ gcc -Wall -o getch getch.c /tmp/ccavsseB.o: In function main: getch.c:(.text+0x5): undefined reference to initscr getch.c:(.text+0xa): undefined reference to cbreak getch.c:(.text+0xf): undefined reference to noecho getch.c:(.text+0x3d): undefined reference to stdscr getch.c:(.text+0x42): undefined reference to wgetch getch.c:(.text+0x47): undefined reference to nocbreak getch.c:(.text+0x4c): undefined reference to echo getch.c:(.text+0x51): undefined reference to endwin collect2: ld returned 1 exit status

, te denit Linker-ul nu gases Pentru a , iile funct , iilor initscr, cbreak, noecho etc. problema link-erului i trebuie specicat sa foloseaca biblioteca rezolva aceasta n s ncurses. Aceasta este localizata ierul libncurses.a sau libncurses.so : ,

CAPITOLUL 11. COMPILARE S , I LINKING

345

1 2

razvan@valhalla:~/carte-uso/cap-10$ ls /usr/lib/libncurses.* /usr/lib/libncurses.a /usr/lib/libncurses.so /usr/lib/libncurses.so.5

biblioteca de linker se obt Numele sub care va folosita , ine prim eliminararea extensiei (.a sau .so) s , i a prexului lib. Pentru face legarea s , ierului getch.c cu biblioteca ncurses, se foloses te comanda: ,
1 2 3 4 5

razvan@valhalla:~/carte-uso/cap-10$ gcc -Wall -o getch \ > getch.c -lncurses razvan@valhalla:~/carte-uso/cap-10$ ls -l getch -rwxr-xr-x 1 razvan razvan 10734 Sep 21 23:25 getch

ca, n acest caz, operat , oara cu sucess s Se observa , ia de linking se desfas , i se obt , ine executabilul getch. Bibliotecile sunt cautate n zone standard din sistemul de s , iere: /lib, /usr/lib, , te ntr-unul /usr/local/lib. n cazul n care s , ierul asociat bibliotecii nu se gases se dores din directorele standard, se foloses , te opt , iunea -L. Astfel, daca , te legarea cu n s o biblioteca denita , ierul /home/traian/libs/libavatar.a, se foloses , te o de forma: comanda
1

ubuntu@ubuntu:~$ gcc -Wall -o morph morph.c -lavatar -L/home/traian/libs

un director suplimentar n care se va realiza cautarea, Cnd se specica numele acestuia se lipes te de opt iunea -L ; nu se las a spat ii libere ntre opt iunea -L s , , , , ,i numele directorului. o etapa suplimentara de cautare n cazul bibliotecilor partajate, exista a bibliotecii n n execut momentul lansarii ie a programului (la nc arcare). Modul n care se specica , , es directoare suplimentare de cautare depas , te sfera de cuprindere a acestui capitol. 1 Pentru cei interesat i, Internetul ofer a multe tutoriale despre aceste not , , iuni .

11.5

Automatizarea sarcinilor make

mare de s Aplicat Compilarea s , iile complexe dispun de un numar , iere sursa. ,i link-editarea acestora poate deveni un proces anevoios s i repetitiv. Se poate ntmpl a , sa e modicate s nu e nevoie de recompilarea ntregii ca doar cteva s , iere sursa , i sa aplicat ii. Se dores te, as adar, un utilitar care s a automatizeze sarcinile de compilare, , , , rezolve dependent pentru a ecientiza linking s , i altele s , i sa , ele ntre s , ierele sursa procesul. Make este un un astfel de utilitar: un program pentru automatizarea task-urilor. Make problema execut rezolva , iei unor act , iuni n funct , ie de relat , iile (dependet , ele) ntre ele. O act iune este executat a doar dac a act iunile de care depinde au fost executate. , , Relat Pe baza acestuia, , iile ntre act , iuni sunt denite ntr-un s , ier numit Makefile. Make determina automat secvent , a de pas , i care trebuie efectuata pentru respectarea daca o act dependent elor. Pentru a optimiza execut ia act , , , iunilor, Make determina , iune s n acelas daca pentru o a fost efectuata , i nu o mai executa. , i timp, Make detecteaza
1

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

346

INTRODUCERE N SISTEME DE OPERARE

s din nou. Figura 11.5 descrie mdoul de act , iune s-a modicat o dependent ,a , i o executa funct , ionare a utilitarului Make.

Figura 11.5: Funct , ionare Make de fapt, o clasa de aplicat Make reprezinta, membru al acestei clase , ii. Cel mai raspndit 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 n sect din 4 s aplicat , iei descrisa , iunea 10.3. Aplicat , ia consta , iere (main.c, sum.c, sumalt.c, func.h).

11.5.1

Cel mai simplu Makele

forma de s Cea mai simpla , ier Makefile cont , ine comanda de compilare s , i linking a s ierelor de mai sus: ,
1 2

exec: gcc main.c sum.c sumalt.c -o exec

Listing 11.13: Makele foarte simplu Pentru rularea comenzii descrise n s , ierul Makefile se foloses , te comanda make:
1 2

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ make gcc main.c sum.c sumalt.c -o exec

faptul ca pentru a obt Fis , ierul Makele specica , ine executabilul exec se ruleaza numele de comanda gcc main.c sum.c sumalt.c -o exec. exec poarta target (t int a ) a s ierului Makele: ceea ce se dores te obt inut. , , , , Din motive de tradit , ie, comenzile dintr-un s , ier Makele sunt precedate de caracterul frecventa este folosirea de spat TAB. O gres , eala , ii n loc de caracterul TAB nainte de destul folosirea unei comenzi. Aparit , ia unui mesaj de forma celui de mai jos nseamna, de probabil, omiterea folosirii caracterului TAB:
1 2

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ make Makefile:2: *** missing separator. Stop.


1

http://www.gnu.org/software/make/

CAPITOLUL 11. COMPILARE S , I LINKING

347

11.5.2

Folosirea dependent , elor

Fis , ierul Makele de mai sus are un neajuns important: la orice rulare a comenzii Make s au fost sau se va executa comanda de compilare s , i linking indiferent daca , ierele sursa realizarea unei act nu modicate. Acest lucru nseamna iuni inutile. , n Makele faptul ca executabilul exec se obt Pentru a evita acest lucru, specicam , ine (main.c, sum.c, sumalt.c). Cele trei s sunt din cele trei s , iere sursa , iere sursa adaugate n lista de dependent e a executabilului (dup a caracterul : dou a puncte ). , sau realizare depinde Dependent existent , iere sau alte target-uri de a caror ,a , ele sunt s target-ul curent:
1 2

exec: main.c sum.c sumalt.c gcc main.c sum.c sumalt.c -o exec

Listing 11.14: Makele cu dependent ,e situat n aceasta , ie, rularea comenzii make nu mai are ca efect compilarea s , i link-editarea ci as ca executabilul exec celor trei s , iere sursa , area unui mesaj care ment , ioneaza s exista , i nu au fost modicate s , ierele de care depinde:
1 2

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ make make: exec is up to date.

un s Daca , ier din lista de dependent , e va modicat, Make va observa acest lucru s ,i va rula din nou comanda. Un element target sau dependent a a unui s ier Makele are , , stari: doua

actualizat: s , ierul asociat nu a fost modicat s , i dependent , ele sale sunt actualizate; neactualizat: s , ierul asociat a fost modicat sau o parte din dependent , ele sale nu
sunt actualizate.

11.5.3

Dependent , e ierarhice

neajunsuri. Un neajuns important este prezent Fis , ierul Makele anterior are nca ,a s ierelor surs a n lista de dependent e. , , s Fie situat , ia n care programatorul modica , ierul sum.c. Rularea comenzii make va nsemna urmatorul set de pas , i: daca dependent se verica , ele target-ului exec sunt actualizate; ca s se observa , ierul sum.c a fost modicat, deci dependent , a sum.c este neactualizata; comanda asociata target-ul exec este marcat ca neactualizat; trebuie rulata target-ului; comanda gcc main.c sum.c sumalt.c; se ruleaza compilarea tuturor s comanda are drept consecint, a din lista de , ierelor dependent ,e s , i apoi link-editarea s , ierelor obiect asociate.

348

INTRODUCERE N SISTEME DE OPERARE

as Se efectueaza, trei procese de compilare (pentru main.c, sum.c, , adar, sumalt.c) s Totus , i un proces de link-editare a celor trei module obiect asociate. , i, ntruct doar s ierul sum.c a fost modicat, nu este nevoie de compilarea s ierelor , , main.c s , i sumalt.c. s Pentru a elimina acest neajuns, se modica , ierul Makefile astfel:
1 2 3 4 5 6 7 8 9 10 11

exec: main.o sum.o sumalt.o gcc main.o sum.o sumalt.o -o exec main.o: main.c gcc -c main.c -o main.o sum.o: sum.c gcc -c sum.c -o sum.o sumalt.o: sumalt.c gcc -c sumalt.c -o sumalt.o

Listing 11.15: Makele cu dependent , e ierarhice situat de dependent n aceasta , ie, s , ierul Makefile descrie o arborescent ,a , e, ca n gura 11.6.

Figura 11.6: Dependent , e ntr-un s , ier Makele sunt reprezentate s n gura s , i comenzile rulate pentru obt , inerea ecarui , ier n parte. a comenzii make va produce urmatorul Astfel, o rulare simpla rezultat:
1 2 3 4 5

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ make -f Makefile. dep.ier gcc -c main.c -o main.o gcc -c sum.c -o sum.o gcc -c sumalt.c -o sumalt.o gcc main.o sum.o sumalt.o -o exec

utilitarul Make sunt: Pas , ii pe care i efectueaza

CAPITOLUL 11. COMPILARE S , I LINKING

349

lista de dependent trei dependent verica , e a target-ului exec; exista , e care au la rndul lor alte dependent , e; aceste dependent , e trebuie vericate; deci trebuie obt comanda gcc -c target-ul main.o nu exista, , inut; se ruleaza main.c -o main.o; deci trebuie obt comanda gcc -c target-ul sum.o nu exista, , inut; se ruleaza sum.c -o sum.o; deci trebuie obt comanda gcc -c target-ul sumalt.o nu exista, , inut; se ruleaza sumalt.c -o sumalt.o;

toate cele trei dependent, e ale target-ului exec erau neactuzalizate; target-ul comanda asociata: gcc main.o exec este atunci neactualizat s , i trebuie rulata sum.o sumalt.o -o exec.
cum se precizase la nceput, presupunem ca programatorul modica s Dupa , ierul comenzii make este: sum.c. Rezultatul rularii
1 2 3

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ make -f Makefile. dep.ier gcc -c sum.c -o sum.o gcc main.o sum.o sumalt.o -o exec

Pas , ii urmat , i de utilitarul Make sunt: lista de dependent trei dependent verica , e a target-ului exec; exista , e care au la rndul lor alte dependent , e; cele trei dependent , e trebuie vericate; dependent s target-ul main.o exista, , a sa (main.c) exista , i este nemodicata; target-ul este actualizat, nu este nevoie de rularea comenzii asociate; dependent dar este modicata ; target-ul sum.o exista, , a sa (sum.c) exista comanda gcc -c sum.c -o target-ul sum.o trebuie actualizat s , i se ruleaza sum.o; dependent s target-ul sumalt.o exista, sa (sumalt.c) exista este ,a ,i target-ul este actualizat, nu este nevoie de rularea comenzii nemodicata; asociate; una dintre trei dependent, e ale target-ului exec (sum.o) este neactuzalizata; target-ul exec este atunci neactualizat s , i trebuie rulata comanda asociata: gcc main.o sum.o sumalt.o -o exec. ca, n acest caz, din cei patru pas Se observa , i posibili (trei pas , i de compilare s , i un pas de link-editare) este nevoie de execut ia a doar doi dintre aces tia: compilarea sum.c s , , ,i link-editarea. un neajuns: n cazul unei modicari a s Fis , ierul Makefile curent mai prezinta , ierul niciun target, ntruct s header func.h nu se actualizeaza n , ierul nu este adaugat astfel: lista de dependent , e a niciunui target. Un s , ier Makefile corect arata
1 2 3 4 5 6

exec: main.o sum.o sumalt.o gcc main.o sum.o sumalt.o -o exec main.o: main.c func.h gcc -c main.c -o main.o

350
7 8 9 10 11

INTRODUCERE N SISTEME DE OPERARE

sum.o: sum.c func.h gcc -c sum.c -o sum.o sumalt.o: sumalt.c func.h gcc -c sumalt.c -o sumalt.o

Listing 11.16: Makele cu s , ier header n lista de dependent ,e

11.5.4

Target-ul clean

de obicei, se dores , area completa a mediului de lucru (pentru Pentru ca, , te curat distribut ia surselor, mutarea aplicat iei, recompilarea acesteia n alt mediu etc.), un s , , , ier de obicei, o regula numita clean. Regula are rolul de a s Makele ofera, , terge s , ierele produse n urma rularii comenzilor din s s s , ierul Makele: , iere obiect, , iere executabile, s iere temporare etc. , clean are asociata o comanda rm ca mai jos: n mod tipic, o regula
1 2 3 4 5 6 7 8 9 10 11 12 13 14

exec: main.o sum.o sumalt.o gcc main.o sum.o sumalt.o -o exec main.o: main.c gcc -c main.c -o main.o sum.o: sum.c gcc -c sum.c -o sum.o sumalt.o: sumalt.c gcc -c sumalt.c -o sumalt.o clean: rm -f exec main.o sum.o sumalt.o

Listing 11.17: Makele cu target clean target-ului clean se transmite target-ul ca argument Pentru a rula comanda asociata comenzii make clean se s comenzii make. Astfel, n urma rularii , terg s , ierele obiect s ,i s ierul executabil: ,
1 2 3 4 5 6 7

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

razvan@valhalla:~/carte-uso.git/src/code/10-compilare/tmp$ make clean rm -f exec main.o sum.o sumalt.o razvan@valhalla:~/carte-uso.git/src/code/10-compilare/tmp$ ls Makefile func.h main.c sum.c sumalt.c

11.5.5

Target-urile .PHONY s , i all

care poate mpiedica funct a target-ului clean este O problema , ionarea corecta situat prezent , a unui s , ier cu numele clean n directorul curent. n aceasta , ia, Make va considera target-ul clean ca ind actualizat s i nu va rula comanda asociat a. ,

CAPITOLUL 11. COMPILARE S , I LINKING

351

1 2 3 4 5

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 razvan@valhalla:~/carte-uso.git/src/code/10-compilare/tmp$ make clean make: clean is up to date

problema, trebuie marcat clean ca un target care nu este Pentru a rezolva aceasta actualizat. Comanda asociata va , astfel, executata tot timpul. Marcajul unui niciodata cu ajutorul target-ului predenit .PHONY, ca mai target ca neactualizabil se realizeaza jos:
1 2 3 4

.PHONY: clean clean: rm -f exec main.o sum.o sumalt.o

Listing 11.18: Makele cu target clean ca se va rula comanda asociata target-ului Folosirea target-ului .PHONY nseamna exista sau nu un s clean indiferent daca , ier cu numele clean n directorul curent:
1 2 3 4 5

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 razvan@valhalla:~/carte-uso.git/src/code/10-compilare/tmp$ make clean rm -f exec main.o sum.o sumalt.o

Target-ul .PHONY este, n general, folosit s , i pentru marcarea target-ului all ca target neactulizabil. Target-ul all este, n general, primul target ntr-un s , ier Makele s , i este ca dependent vericat implicit la rularea comenzii make. Target-ul all ncapsuleaza ,e s 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 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

.PHONY: all clean all: exec exec: main.o sum.o sumalt.o gcc main.o sum.o sumalt.o -o exec main.o: main.c gcc -c main.c -o main.o sum.o: sum.c gcc -c sum.c -o sum.o sumalt.o: sumalt.c gcc -c sumalt.c -o sumalt.o clean: rm -f exec main.o sum.o sumalt.o

Listing 11.19: Makele cu target all

352

INTRODUCERE N SISTEME DE OPERARE

11.5.6

Variabile n Makele

acum nu a fost folosita opt n s , ierele Makele construite pna , iunea -Wall la compilarea s ierelor surs a C. O solut ie simpl a este introducerea opt , , , iunea -Wall n abordare nu este exibila. cadrul celor trei comenzi de compilare. Totus , i, aceasta la un moment ulterior, se dores Prespunnd ca, te s i ad augare opt iunea -g pentru , , , depanare, vor trebui din nou actualizate cele trei comenzi. este folosirea variabilelor n cadrul s se O abordare exibila , ierului Makele. O variabila s la un moment ulterior, se dores denes , te o data , i se foloses , te de mai multe ori. Daca, , te actualizarea variabilei, modicarea se va face doar n locul unde a fost denita.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

CC = gcc CFLAGS = -Wall exec: main.o sum.o sumalt.o $(CC) main.o sum.o sumalt.o -o exec main.o: main.c $(CC) $(CFLAGS) -c main.c -o main.o sum.o: sum.c $(CC) $(CFLAGS) -c sum.c -o sum.o sumalt.o: sumalt.c $(CC) $(CFLAGS) -c sumalt.c -o sumalt.o clean: rm -f exec main.o sum.o sumalt.o

Listing 11.20: Makele cu variabile n cadrul s , ierului Makele de mai sus, au fost folosite variabilele, respectiv, CC pentru compilatorului s a ret ine comanda asociata , , i CFLAGS pentru a ret , ine opt , iunile transmise pentru obt acestuia. Variabila CFLAGS nu a fost folosita , inerea executabilului exec are sens doar n faza de compilare, nu s pentru ca , i n cea de link-editare n urma etapei de compilare). (avertismentele indicate de -Wall rezulta

11.5.7

Makele Sintaxa

sect Aceasta , iune are un rol recapitulativ s , i descrie formal sintaxa unui s , ier Makele. cum s-a prezentat s Dupa , i n sect , iunile anterioare, sintaxa unui s , ier Makele este dintr-o lista de reguli de forma: compusa
1 2 3 4

target: dependente ... <tab>comanda <tab>comanda <tab>...

Makele Listing 11.21: Sintaxa unde:

target numele unui s , ier care trebuie generat sau numele unei act , iuni; n cazul
genereze acest s n care target-ul este un s , ier, comenzile trebuie sa , ier; n cazul

CAPITOLUL 11. COMPILARE S , I LINKING

353

un s n care comenzile nu genereaza , ier cu numele target-ului, se va considera la ecare rulare ca target-ul nu a fost creat (as , adar toate comenzile se vor executa);

dependent , ii) care trebuie ndeplinite , e lista de target-uri (separate prin spat
existe) pentru a se realiza target-ul curent make poate (s , iere care trebuie sa trebuie reexecutat target-ul daca una dintre dependet determina daca , e s-a modicat (unul din s , ierele din lista de dependent , e s-a modicat); comanda care duce la realizarea target-ului (de obicei la comenzi comanda sunt trecute comenzile de compilare care duc la realizarea unui s , ier cu numele target-ului);

<tab> caracterul TAB.


un arbore de dependent e executat, se Regulile formeaza , e. Pentru ca un target sa daca toate dependent ca s nu este ndeplinita aceasta verica , ele lui exista , iere. Daca condit ie, dependent ele care nu exist a sunt executate, aplicndu-se acelas i algoritm. , , ,

11.5.8

Moduri de utilizare a Make

La execut , ia comenzii make, vor luate n considerare target-urile denite n s , ierul Makefile. Pentru a executa un target, se foloses , te sintaxa:
1

mircea@cougar:~/carte-uso/cap-10$ make target

unde target este numele target-ului care se dores , te a executat. a parametri, se va executa primul target denit n s La utilizarea lui Make far , ierul Makefile. Din acest motiv, primul target descris este de obicei cel mai complex, cu cele mai multe dependent , e. Convent , ional, Makele-urile folosite pentru compilarea unei aplicat , ii denesc primul target all. Target-ul all det , ine n lista de dependent , e celelalte target-uri care trebuie obt inute. , Utilitarul GNU Make foloses , te, n mod implicit, unul din s , ierele GNUMakefile, s Makefile sau makefile. n cazul n care niciunul dintre acestea nu exista, ,i comanda make nu primes , te nici un argument, va ntoarce eroare:
1 2

razvan@valhalla:~/carte-uso.git/src/code$ make make: *** No targets specified and no makefile found.

Stop.

Pentru a fort , a folosirea unui s , ier Makele cu alt nume dect numele implicite, se foloses , te opt , iunea -f:
1 2 3 4 5

razvan@valhalla:~/carte-uso.git/src/code/10-compilare$ make -f Makefile. dep.ier.head gcc -c main.c -o main.o gcc -c sum.c -o sum.o gcc -c sumalt.c -o sumalt.o gcc main.o sum.o sumalt.o -o exec

a existent Make poate funct , iona s , i far , a unui s , ier Makele. Pentru a compila direct s , ierul myprog.c (care nu depinde de altele) se foloses te comanda: ,
1

mircea@cougar:~/carte-uso/cap-10$ make myprog

354

INTRODUCERE N SISTEME DE OPERARE

Iar pentru a compila direct myprog.c cu parametrul de compilare -Wall se foloses , te comanda:
1

mircea@cougar:~/carte-uso/cap-10$ make CFLAGS=-Wall myprog

11.6

Portabilitate

ntr-un mediu Portabilitatea este caracteristica unei aplicat , ii de a putea folosita diferit de cel pentru care fost init ial proiectat a. Acest lucru poate nsemna un alt , arhitectura hardware, o alta biblioteca. sistem de operare, o alta o aplicat daca are nevoie de modicari minime pentru a Se spune ca , ie este portabila putea rula pe un alt mediu. Act , iunea de portare este act , iunea de modicare a unei pe un alt sistem de operare sau sistem zic. Un mediu aplicat , ii pentru a putea folosita portarea se mai numes pe care se realizeaza , te platforma. n deceniile trecute numarul Daca de arhitecturi posibile pe care rula o aplicat , ie era destul de mare, n zilele noastre arhitectura hardware dominanta este x86. La fel o aplicat sistemele de operare pe care se porteaza , ie sunt Microsoft Windows, Apple portabilitatea ramne Mac OS X s o , i Unix/Linux. n lumea sistemelor embedded, nsa, importanta. problema

11.6.1

Portabilitatea la nivelul arhitecturii sistemului de calcul

rareori este n zilele noastre, sistemele desktop sunt dominate de arhitectura x86 as , a ca 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 specic procesorului dat. GCC este cel mai portat s n cod mas , ina , i cel mai portabil compilator ind capabil de a compila programe pentru o varietate de arhitecturi.

11.6.2

Portabilitatea unui limbaj de programare

prin denit Programarea n limbaj de asamblare nu asigura, , ie, portabilitatea codului, deorece acesta este intrinsec legat de arhitectura sistemului de calcul. Unul dintre motivele raspndirii Unix n anii 70 a fost scrierea acestuia n C, un limbaj de nivel nalt portabil. Folosirea C nsemna eliberarea de arhitectura hardware pe care va rula aplicat , ia. a prin intermediul compilatorului. n ziua de azi, aplicat Portarea codului era facut iile C , existent Cu toate sunt us , or portabile datorita , ei unui compilator C pe orice platforma. 1 acestea, anumite aspecte precum organizarea octet sau lungimea cuvntului , ilor
1

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

CAPITOLUL 11. COMPILARE S , I LINKING procesorului1 ramn aspecte de care trebuie t , inut cont.

355

de compilator Figura 11.7: Portabilitatea asigurata Java este un limbaj de programare gndit pentru a portabil. Deviza Java este Write once, run everywhere. Pentru a asigura acest lucru, un program Java este compilat portabila de modul obiect denumita bytecode. Acest bytecode este apoi ntr-o forma virtuala Java. Mas Java este responsabila cu interpretat de o mas , ina , ina virtuala translatarea bytecode-ului portabil n cod specic sistemului pe care acesta ruleaza. Astfel, rularea unui program Java sau unui modul compilat n bytecode pe o noua platforma este condit , ionata de existent , a unei mas , ini virtuale pe acea platforma. Mas , ina Java este cont virtuala inut a n pachetul JRE de la Sun (Java Runtime Environment). , s Acesta cont , ine mas , ina virtuala , i bibliotecile cu funct , ii standard Java.

de mas Figura 11.8: Portabilitatea asigurata , ina virtuala


1

http://en.wikipedia.org/wiki/Word_(computing)

356

INTRODUCERE N SISTEME DE OPERARE

11.6.3

Portabilitatea la nivelul sistemului de operare

acesteia pe un alt Portabilitatea unei aplicat , ii se poate referi s , i la posibilitatea rularii sistem de operare. Acest lucru este corelat, de obicei, cu interfet , ele de programare (API Application Programming Interface) pe care sistemul de operare le pune la dispozit , ie (system API). Astfel, Windows pune la dispozit , ia programatorului C interfat ,a parte pune la dispozit Win32 API1 . Unix, pe de alta ia programatorului interfat a POSIX , , (Portable Operating System Interface)2 . Pentru deschiderea unui s , ier un programator Windows va folosi apelul CreateFile, iar un programator Unix open. , ii nsa, multe biblioteci ofera programatorului o interfat Pentru asigurarea portabilitat ,a peste sistemul de operare. Astfel, funct portabila , iile ANSI din biblioteca standard C sunt portabile peste diverse sisteme de operare. De exemplu, pentru deschiderea unui s , ier, programatorul va folosi apelul fopen indiferent de sistemul de operare pe care va rula aplicat , ia. portabila este wxWidgets3 . Aceasta biblioteca permite Un exemplu de biblioteca crearea de aplicat , ii grace 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 grace neportabile pe care acesta le pune n mod obis , nuit la dispozit , ie.

11.7
11.7.1

Studiu de caz
GCC n Windows

Suportul pentru compilatorul GCC n mediul Windows este disponibil prin proiectele: o portare a aplicat MinGW4 (Minimalist GNU for Windows) reprezinta , iilor de ale proiectului GNU pe sisteme Windows. Componentele dezvoltare de baza principale sunt GNU Compiler Collection (GCC), GNU Binutils s , i bibliotecile de al runtime C. MinGW foloses , te DLL-urile de sistem standard s , i API-ul de baza sistemului Windows. aplicat Cygwin5 este un mediu care ofera , iilor un strat (layer) de emulare a API-ului cu o colect funct , ile din Unix. n Unix, mpreuna , ie de utilitare care ofera , ionalitat doar aplicat vreme ce MinGW ofera ii pentru dezvoltare, Cygwin permite instalarea , , i de aplicat unei mari diversitat , ii. ofera acces la suita de aplicat Aceste implementari , ii de dezvoltare a proiectului GNU. Parametrii s , i modul de utilizare a compilatorului sunt similare unui sistem Linux. utilizarea GCC s cu un mediu integrat de n mediul Windows este posibila , i mpreuna posibilitatea compilarii dezvoltare IDE. Dev-C++6 este un astfel de IDE care ofera programelor utiliznd GCC.
1 2

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

CAPITOLUL 11. COMPILARE S , I LINKING

357

11.7.2

Link-editarea modulelor C s , i a modulelor C++

limbaje aseman atoare Des (C++ este considerat un superset al C), combinarea , i doua nu ne vom referi codului scris n C s i C++ poate furniza probleme. n cele ce urmeaza , la accesarea claselor C++ din C sau folosirea apelurilor din biblioteca standard C++ n programe C situat , ii rar ntlnite. Ne vom referi la folosirea funct , iilor denite n module 12 C ntr-un modul C++ s . , i invers

Contextul Vom considera un scenariu foarte simplu care include 6 s , iere:

c_print.c: s , ier C cont , ine implementarea funct , iei c_print; cpp_print.cpp: s , ier C++ cont , ine implementarea funct , iei cpp_print; c_print.h: s , ier header ce cont , ine declarat , ia funct , iei c_print; cpp_print.h: s , ier header ce cont , ine declarat , ia funct , iei cpp_print; c_main.c: s , ier C cont , innd funct , ia main; va apela funct , ia c_print din s , ierul c_print.c sau funct, ia cpp_print din s ierul cpp_print.cpp ; , cpp_main.cpp: s , ier C++ cont , innd funct , ia main; va apela funct , ia c_print din s ierul c_print.c sau funct ia cpp_print din s ierul cpp_print.cpp . , , ,
1 2 3 4 5 6 7 8

#include <stdio.h> #include "c_print.h" void c_print(void) { printf("C-style: Wassup!\n"); }

Listing 11.22: c_print.c


1 2 3 4 5 6 7 8

#include <iostream> #include "cpp_print.h" void cpp_print() { std::cout << "C++ style: True, true!" << std::endl; }

Listing 11.23: cpp_print.cpp


1 2 3 4 5 6

#ifndef C_PRINT_H_ #define C_PRINT_H_ void c_print(void); #endif


1 2

http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B#Linking_C_and_C.2B.2B_code http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html

358

INTRODUCERE N SISTEME DE OPERARE

Listing 11.24: c_print.h


1 2 3 4 5 6

#ifndef CPP_PRINT_H_ #define CPP_PRINT_H_ void cpp_print(); #endif

Listing 11.25: cpp_print.h


1 2 3 4 5 6 7 8 9 10

#include "c_print.h" //#include "cpp_print.h" int main(void) { c_print(); //cpp_print(); return 0; }

Listing 11.26: c_main.c


1 2 3 4 5 6 7 8 9 10

#include "cpp_print.h" //#include "c_print.h" int main() { cpp_print(); //c_print(); return 0; }

Listing 11.27: cpp_main.cpp funct n mod implicit, n cadrul s , ierului c_main.c se apeleaza , ia c_print, iar n cadrul s ierului cpp_main.cpp se apeleaz a funct ia cpp_main . , , cele patru s ntr-un prim pas, se compileaza , iere C/C++. Folosim gcc pentru compilarea s ierelor C s i g++ pentru compilarea s ierelor C++. , , ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14

razvan@valhalla:~/mix$ ls c_main.c c_print.c c_print.h

cpp_main.cpp

cpp_print.cpp

cpp_print.h

razvan@valhalla:~/mix$ gcc -Wall -c c_main.c razvan@valhalla:~/mix$ gcc -Wall -c c_print.c razvan@valhalla:~/mix$ g++ -Wall -c cpp_main.cpp razvan@valhalla:~/mix$ g++ -Wall -c cpp_print.cpp razvan@valhalla:~/mix$ ls c_main.c c_print.c c_print.o c_main.o c_print.h cpp_main.cpp

cpp_main.o cpp_print.cpp

cpp_print.h cpp_print.o

CAPITOLUL 11. COMPILARE S , I LINKING Pentru

359

link-editare, folosim perechile c_main.o s c_print.o, respectiv ,i cpp_main.o s , i cpp_print.o. Executabilele obt , inute sunt denumite n conformitate cu s ierele obiect folosite pentru generare. ,

1 2 3 4 5 6 7 8 9

razvan@valhalla:~/mix$ gcc c_main.o c_print.o -o c_main-c_print razvan@valhalla:~/mix$ g++ cpp_main.o cpp_print.o -o cpp_main-cpp_print razvan@valhalla:~/mix$ ./c_main-c_print C-style: Whassup? razvan@valhalla:~/mix$ ./cpp_main-cpp_print C++ style: True, true!

comanda Pentru link-editarea modulelor obiect obt , inute din surse C++ a fost folosita linker-ul (ld) cu toate opt g++. Comanda g++ apeleaza , iunile necesare. Se poate folosi explicit folosirea bibliotecii s i comanda gcc pentru linking, dar trebuie specicat a , standard C++ (libstdc++).
1 2 3 4 5 6 7 8 9 10 11 12

razvan@valhalla:~/mix$ gcc cpp_main.o cpp_print.o -o cpp_main-cpp_print cpp_main.o:(.eh_frame+0x12): undefined reference to __gxx_personality_v0 cpp_print.o: In function cpp_print(): cpp_print.cpp:(.text+0xa): undefined reference to std::cout [...] collect2: ld returned 1 exit status razvan@valhalla:~/mix$ gcc cpp_main.o cpp_print.o -o cpp_main-cpp_print_new -lstdc++ 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, Cs C++? dintr-un s , ier sursa , i un modul provenit dintr-un s , ier sursa Pentru a testa acest lucru, sunt actualizate s , ierele c_main.c, respectiv care cpp_main.cpp pentru a include s , i apela funct , iile specice celuilalt limbaj. Dupa s se compileaza i se realizeaz a link-editarea: ,
1 2 3 4 5 6 7 8 9 10 11 12 13

razvan@valhalla:~/mix-new$ gcc c_main.o cpp_print.o -o c_main-cpp_print lstdc++ c_main.o: In function main: c_main.c:(.text+0xa): undefined reference to cpp_print collect2: ld returned 1 exit status razvan@valhalla:~/mix-new$ g++ c_main.o cpp_print.o -o c_main-cpp_print lstdc++ c_main.o: In function main: c_main.c:(.text+0xa): undefined reference to cpp_print collect2: ld returned 1 exit status razvan@valhalla:~/mix-new$ g++ cpp_main.o c_print.o -o cpp_main-c_print cpp_main.o: In function main: cpp_main.cpp:(.text+0x5): undefined reference to c_print()

360
14 15 16 17 18 19

INTRODUCERE N SISTEME DE OPERARE

collect2: ld returned 1 exit status razvan@valhalla:~/mix-new$ gcc cpp_main.o c_print.o -o cpp_main-c_print lstdc++ cpp_main.o: In function main: cpp_main.cpp:(.text+0x5): undefined reference to c_print() collect2: ld returned 1 exit status

(gcc sau g++) se obt n ambele situat , ii, indiferent de comanda folosita , ine eroare de , te simbolul asociat funct linker. Linker-ul nu gases iei cpp_print , respectiv c_print. , Folosind utilitarul nm se pot inspecta simbolurile din cadrul celor patru module obiect:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

razvan@valhalla:~/mix-new$ nm c_main.o U cpp_print 0000000000000000 T main razvan@valhalla:~/mix-new$ nm cpp_main.o U _Z7c_printv U __gxx_personality_v0 0000000000000000 T main razvan@valhalla:~/mix-new$ nm c_print.o 0000000000000000 T c_print U puts 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 [...]

de compilatorul de C++. Problema este folosirea tehnicii de name mangling 1 folosita de forma _Z. Simbolurile dintr-un modul C++ sunt precedate de o construct , ie speciala pentru a preveni folosirea aceluias Tehnica este folosita , i identicator pentru o variabila funct ie care are acelas i nume n dou a namespace-uri diferite. , , simbolul cpp_print nedenit s linker-ului Modulul c_main.o marcheaza , i solicita rezolvarea acestuia. Modulul cpp_print.o denes te ns a simbolul , s _Z9cpp_printv s , i linker-ul nu poate face rezolvarea. Similar se ntmpla , i n cazul simbolului c_print (varianta C) s , i _Z7c_printv (varianta C++).

Solut , ia problema, compilatorul trebuie sa det informat Pentru a rezolva aceasta , ina , ii marcheze simbolurile corespunzatoare suplimentare s n modulele obiect. , i sa este compilarea tuturor s folosind g++. Compilatorul de O solut , ie directa , ierelor sursa C++ poate compila s , i s , iere C, iar modulele obt , inute vor folosi tehnica de name mangling.
1 2 3

razvan@valhalla:~/mix-new$ g++ cpp_main.cpp c_print.c -o cpp_main-c_print razvan@valhalla:~/mix-new$ ./cpp_main-c_print


1

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

CAPITOLUL 11. COMPILARE S , I LINKING


4 5 6 7 8 9

361

C-style: Whassup? razvan@valhalla:~/mix-new$ g++ c_main.c cpp_print.cpp -o c_main-cpp_print razvan@valhalla:~/mix-new$ ./c_main-cpp_print C++ style: True, true!

absent ntruct este posibila , a unui anumit tip de compilator de pe un sistem s , i pentru ca este mai ecient ca un s ier surs a ntr-un limbaj de prorgramare s a e compilat cu un , solut n folosirea construct compilator specic, este de dorit o alta Solut , ie. , ia consta , iei construct extern "C". Aceasta ie se plaseaz a naintea declarat iei unei funct ii pentru , , , foloseasca un identicator de simbol care sa nu utilizeze a fort , a compilatorul de C++ sa tehnica de name mangling. n general, construct , ia extern "C" se foloses , te n cadrul s , ierelor header unde se gasesc declarat , iile de funct , ii. Fisierele c_print.h s , i cpp_print.h actualizate vor :
1 2 3 4 5 6 7 8 9 10 11 12 13 14

#ifndef C_PRINT_H_ #define C_PRINT_H_ #ifdef __cplusplus extern "C" { #endif void c_print(void); #ifdef __cplusplus } #endif #endif

Listing 11.28: c_print.h cu extern "C"


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

#ifndef CPP_PRINT_H_ #define CPP_PRINT_H_ #ifdef __cplusplus extern "C" { #endif void cpp_print(); #ifdef __cplusplus } #endif #endif

Listing 11.29: cpp_print.h cu extern "C" adica folosind perechea n acest moment se poate realiza link-editarea n diagonala, c_main.o s , i cpp_print.o pe de o parte s , i perechea cpp_main.o s , i c_print.o parte. de cealalta
1 2 3

razvan@valhalla:~/mix-new$ gcc -c c_main.c razvan@valhalla:~/mix-new$ g++ -c cpp_main.cpp

362
4 5 6 7 8 9 10 11 12 13 14 15 16 17

INTRODUCERE N SISTEME DE OPERARE

razvan@valhalla:~/mix-new$ gcc -c c_print.c razvan@valhalla:~/mix-new$ g++ -c cpp_print.cpp razvan@valhalla:~/mix-new$ gcc c_main.o cpp_print.o -o c_main-cpp_print lstdc++ razvan@valhalla:~/mix-new$ g++ cpp_main.o c_print.o -o cpp_main-c_print razvan@valhalla:~/mix-new$ ./c_main-cpp_print C++ style: True, true! razvan@valhalla:~/mix-new$ ./cpp_main-c_print C-style: Whassup?

folosirea unui identicator de simbol far a name Prin folosirea utilitarului nm se observa mangling n cadrul s ierelor obiect C++. ,
1 2 3 4 5 6 7 8 9

razvan@valhalla:~/mix-new$ nm cpp_main.o U __gxx_personality_v0 U c_print 0000000000000000 T main razvan@valhalla:~/mix-new$ nm cpp_print.o 000000000000005f t _GLOBAL__I_cpp_print [...] 0000000000000000 T cpp_print

funct Construct , ia extern "C" se foloses , te att n cazul n care se apeleaza , ii C dintr-un unei funct modul C++ ct s , i n cazul apelarii , ii C++ dintr-un modul C. funct n primul caz, cel al apelarii , iei C dintr-un modul C++, compilatorul de C++ n modulul obiect obt marcheaza , inut din s , ierul C++ simbolul ca ind nedenit, n forma unei funct non-mangled. n cel de-al doilea caz, al apelarii , ii C++ dintr-un modul C, n modulul obiect obt compilatorul de C++ marcheaza , inut din s , ierul C++ simbolul ca ind denit, n formatul non-mangled. decizie pe baza folosirii construct Compilatorul ia aceasta Este , iei extern "C". funct important ca att s , ierul care denes , te funct , ia, ct s , i cel care apeleaza , ia sa s includa ierul header care cont ine declarat ia funct iei precedat a 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 executabil interpretare limbaj

proces
sursa

preprocesare asamblare

CAPITOLUL 11. COMPILARE S , I LINKING

363

cod obiect linker


biblioteca

execut, ie apel de sistem make target


dependent, a

partajare portabilitate

ntrebari 1. Bibliotecile partajate de funct , ii: K sunt ncarcate explicit la cerere de aplicat , ii ca aplicat e mai simplu de ntret K ajuta , iile sa , inut K maresc aplicat , iile deoarece sunt incluse n executabilele rezultate de arhive de s K sunt prezente sub forma , iere obiect pe care o realizeaza GCC, se utilizeaza 2. Pentru a dezactiva link-editarea implicita parametrul:

K -O0 K -c K -lstdc++ K -o
ntr-un mediu pentru care nu a 3. Caracteristica unei aplicat , ii de a putea folosita fost init , ial proiectata:

K se ntlnes , te doar la bibliotecile partajate


numai la aplicat K este ntlnita , iile Java

K se numes , te portabilitate K niciuna din variantele de mai sus


4. Pentru a executa un target dintr-un s , ier Makefile, se foloses , te comanda

K make Makefile <target> K make <target> K <target> K make <target> Makefile


se obt 5. n urma preprocesarii , in:

K s , iere obiect
C far a directive de precompilare K s , iere sursa

K s , iere n limbaj de asamblare K s , iere executabile

364

INTRODUCERE N SISTEME DE OPERARE

o biblioteca al carei 6. Care din urmatoarele reprezinta cod este integrat explicit n codul unui executabil?

K static library K shared library K public library K common library


o metoda de a accesa resursele computerului. 7. Apelul de sistem reprezinta Apelurile de sistem sunt realizate doar de biblioteci. K adevarat, adevarat K adevarat, fals K fals, adevarat

K fals, fals
8. Fie comanda:
1 2

mircea@cougar:~/carte-uso/cap-10$ file /lib/libm-2.3.3.so /lib/libm-2.3.3.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped

Care armat , ie referitoare la s , ierul /lib/libm-2.3.3.so este falsa?

K s , ierul este binar, nu poate editat cu un editor text


partajata K s , ierul este o biblioteca

K s , ierul este executabil


pe o platforma Intel pe 32 bit K s , ierul funct , ioneaza ,i mai greu dect cele compilate. n urma 9. Programele interpretate se depaneaza rezulta s compilarii , iere n limbaj de asamblare care sunt executate direct pe procesor. K adevarat, adevarat K adevarat, fals K fals, adevarat

K fals, fals
10. Apelurile de sistem ale programului <program> pot urmarite folosind comanda:

K time <program> K file <program> K ldd <program> K strace <program>

Capitolul 12 Shell scripting


Shell to DOS... Come in DOS, do you copy? Shell to DOS...

din acest capitol? Ce se nvat ,a

Rolul unui shell n sistem Ce este un script shell Utilitatea scripturilor shell Interact, iunea cu shell-ul; execut, ia comenzilor ntr-un shell Crearea s , i rularea unui script shell Programarea shell: variabile, funct, ii, structuri de control Folosirea ltrelor de text Expandarea shell Programarea shell (batch programming) pe Windows Utilitarul sed Utilitarul awk

12.1

Not , iuni introductive

s Capitolul de fat ,a , i propune prezentarea mecanismelor prin care diversele comenzi acum pot combinate pentru obt utilizate pna , inerea unor efecte complexe n cadrul unui script shell. Un script shell este un program scris ntr-un s , ier text format din combinat , ii de comenzi s i instruct iuni specice unui interepretor de comenzi (unui shell). , ,

365

366

INTRODUCERE N SISTEME DE OPERARE

utilizatorului o interfat de control s Un shell este un program care asigura ,a , i utilizare a sistemului de operare. graca (GUI) sau poate avea interfat text (CLI). n cea Un shell poate avea interfat ,a ,a denumire de interpretor de comenzi. Shell-uri cu de-a doua situat , ie un shell mai poarta interfat a grac a sunt Windows Explorer sau medii desktop construite peste X Window , text (interpretoare de comenzi) sunt cmd.exe (Windows System. Shell-uri cu interfat ,a NT, XP), Windows PowerShell (Windows Vista, Server 2008, 7), Bash (Bourne Again Shell), csh (C Shell). shell-urilor cu interfat text (Bash, C shell etc.). n Not , iunea de shell scripting se aplica ,a 1 capitolul de fat a, shell-ul folosit va Bash . GNU Bash (Bourne-Again Shell) este shell-ul , implicit pe majoritatea distribut , iilor de Linux s , i pe Mac OS X. Ne vom referi prin Bash (cu la shell, iar cu bash la executabilul utilizat de acesta. majuscula)

12.1.1

De ce shell scripting?

a unui shell script deriva din faptul ca este o combinat Utilitatea principala , ie de comenzi posibilitatea de automatizare. Sarcinile repetitive deja existente. Acest lucru nseamna executarea acelei sarcini, pot descrise ntr-un script shell. Ori de cte ori este necesara se ruleaza script-ul shell s , i aceasta va ndeplinita. Un exemplu elocvent este crearea unui cont de utilizator. Pas , ii urmat , i pentru aceasta pot urmatorii: 1. crearea unui cont de utilizator (folosind useradd); creat; 2. copierea unor directoare s , i s , iere pentru contul proaspat 3. stabilirea de cote (quota); 4. schimbarea/stabilirea parolei; 5. transmiterea unui e-mail pentru a notica utilizatorul de crearea contului. ruleze comenzi pentru n lipsa unui script shell, administratorul sistemului ar trebui sa ecare din pas ii de mai sus ori de cte ori este necesar a crearea unui cont de utilizator. , Folosind un script shell, administratorul l va rula doar pe acesta (folosind eventuali parametri). Efectul imediat este marirea ecient , ei. precum: Scripturile shell se folosesc n general pentru automatizarea sarcinilor de rutina, sistemului etc. realizarea de backup-uri, vericarea starii situat Exista , ii cnd un utilizator dores , te realizarea unei noi comenzi prin mbinarea unora deja existente. Pentru a realiza acest lucru, el va crea un script shell pe care-l va putea utiliza ulterior. cea mai n sistemele Unix, scripturile shell au un grad mare de utilizabilitate pentru ca lozoa Unix: Do one thing, do one thing well . mare partea a comenzilor urmeaza ca ecare comanda este utila s n Acest lucru nsemna , i (am putea spune) exceleaza
1

http://www.gnu.org/software/bash/

CAPITOLUL 12. SHELL SCRIPTING

367

e realizate prin realizarea unei anumite sarcini, urmnd ca sarcinile mai complexe sa mbinarea mai multor comenzi simple ntr-un script shell.

12.1.2

, i oferite de scripturile shell Facilitat

n afara folosirii comenzilor simple deja existente n sistem, lucru care conduce la s ,i posibilitatea de automatizare a sarcinilor, un script shell ofera , i alte facilitat utilizatorului. un limbaj de programare cu variabile s n primul rnd, un shell ofera , i instruct , iuni de ciclu ca, dincolo de comenzile (for, while) s , i de decizie (if, case). Acest lucru nseamna 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 nevoie de rescrierea acestora) s componente deja create (far , i folosirea unor resurse specice ale sistemului: s , iere de congurare, drepturi de acces, utilizatori etc. Folosind , i de combinare a acestora s comenzi deja existente, facilitat , i de control al uxului, un s a unei probleme. Se spune ca un script shell script shell este o solut , ie rapida , i ecienta quick and dirty de rezolvare a unor probleme care ar necesita efort mai este o metoda s-ar folosi alte limbaje. n plus depanarea unui script shell este extrem de mare daca n momentul n care un script shell nu funct corect se poate determina s facila. , ioneaza ,i corecta foarte rapid linia din script care a cauzat eroarea. a de execut Dezavantajul unui script shell este viteza scazut , ie s , i lipsa accesului la folosirea unui script shell ntr-o structuri eciente de calcul. Astfel, nu este recomandata situat ie n care viteza de execut ie este un factor important. La fel, anumite probleme nu , , la a rezolvate cu un script shell din cauza lipsei de facilitat , i. Problemele se preteaza efectuarea de calcule complexe, interact de algoritmica, iunea cu hardware-ul se , prin folosirea de limbaje specializate. realizeaza un script shell permite interact Totodata, , iunea ntre comenzi (sau mai bine zis ntre procesele create prin rularea unei comenzi), prin operatori specici: | (pipe), ;, ||, && etc. , i includ: Alte facilitat pentru folosirea ulterioara posibilitatea ret, inerii ies , irii unei comenzi ntr-o variabila a acesteia; intrarii/ies posibilitatea redirectarii , irii unei comenzi dintr-un/ntr-un s , ier; acest a s lucru duce la prelucrarea foarte us , oara , ierelor relevante n sistem (de exemplu: /etc/passwd, /etc/shadow);

folosirea de comenzi non-interactive s , i programarea scriptului pentru execut , ie la


un moment ulterior. as un script shell este un instrument foarte puternic pentru Se observa, , adar, ca a diverselor probleme des ntlnite de utilizator. Programarea shell rezolvarea rapida devine un factor important pentru o mai buna utilizare s , i gestiune a sistemului.

368

INTRODUCERE N SISTEME DE OPERARE

12.2

Interact , iunea cu shell-ul

text interact cu utilizatorul prin intermediul comenzilor. Un Shell-urile cu interfat ,a , ioneaza un prompt utilizatorului (n mod tipic acesta se termina cu un caracter de shell ofera de forma $, % sau #) unde se pot introduce comenzi. Execut , ia unei comenzi nseamna, obicei, generarea unui proces dintr-un executabil asociat comenzii. n lucrul cu comenzile este prelucrarea s O deprindere utila , irului de caractere care le Astfel, un utilizator avansat va edita comenzile sale s formeaza. , i va folosi istoricul pus la dispozit ie de un shell pentru a ct mai ecient. Shell-ul pune la dispozit , , ia utilizatorului , i de editare s a comenzilor. mai multe facilitat , i utilizare rapida

12.2.1

Editarea comenzilor

este introdusa la promptul shell-ului prin folosirea tastelor corespunzatoare, O comanda care se apasa ENTER s dupa , i comanda va executata. nsa, situat un argument sau o litera s Exista, , ii n care se gres , es , te sau se uita , i este nevoie de editarea acelei comenzi pentru obt , inerea efectului dorit. Editarea comenzii poate nsemna adaugarea sau s teregerea unui caracter, a unui set de caractere, a unui , argument al comenzii. n mod evident, la fel ca n cazul unui editor, este nevoie s , i de parcurgerea comenzii scrise. prin intermediul bibliotecii readline. Detalii Editarea comenzilor n Bash este realizata 1 , i la online . Biblioteca readline este cea care asigura editarea unei despre aceasta gasit comenzi, oferind interfat a de control a terminalului. , Comenzile puse la dispozit , ie de readline pentru editarea comenzilor shell sunt inspirate din editorul Emacs. Urmnd convent , ia Emacs, vom prescurta cu C tasta Control iar cu M tasta Alt (Meta). Prezentam, n continuare, cteva dintre cele mai utile comenzi:

C-f, C-b un caracter nainte, respectiv S ageat a-Dreapta s ageat a-Stnga) , i S

napoi

(echivalent

cu

C-a, C-e nceput de linie, respectiv sfrs , it de linie (echivalent cu Home s , i End) M-f, M-b cuvnt nainte, respectiv napoi; pe unele terminale (spre exemplu gnome-terminal) trebuie dezactivate scurtaturile terminalului pentru a permite
comenzile readline

C-d s , terge caracterul de sub cursor (echivalent cu Delete) Backspace s , terge caracterul de dinainte de cursor
la sfrs M-d s , terge pna , itul cuvntului la nceputul cuvntului M-Backspace s , terge pna la sfrs C-k s , terge pna , itul liniei la nceputul liniei C-w s , terge pna C-y lipes , te (paste, yank ) ceea ce s-a s , ters ultima oara
1

http://www.gnu.org/software/bash/manual/html_node/Readline-Interaction.html

CAPITOLUL 12. SHELL SCRIPTING

369

(undo) ultima comanda de editare. C-_ (Control-underscore) anuleaza Pentru cei ce doresc acest lucru, editarea comenzilor folosind readline poate folosind un s personalizata Pentru mai multe detalii consultat , ier de congurare. ,i 1 manualul .

12.2.2

Folosirea istoricului. Completare automata

comenzile folosite n shell ntr-un istoric care poate Biblioteca readline memoreaza 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 ageat a-Jos. , i S asirea Istoricul este salvat la par shell-ului ntr-un s n cazul bash acesta este , ier. autenticare, shell-ul va ncarca ~/.bash_history. La o noua respectivele comenzi din history s , i utilizatorul le va putea reutiliza.

Cautarea comenzilor (reverse search) este cautarea n afara parcurgerii comenzilor din istoric, o opt acestora. , iune foarte utila Pentru cautarea comenzilor n istoric se poate folosi comanda C-r (reverse search):
1 2

razvan@anaconda:~$ cd (reverse-i-search)chm: chmod o+w uploads/

n exemplul de mai sus, apasarea C-r duce la schimbarea promptului. Utilizatorul poate introduce un s pentru identicarea unei comenzi. Pentru ecare , ir de cautare anteriora cea mai potrivita. caracter introdus, shell-ul va as , a prima comanda arii. Completarea s n afara introducerii s , irului va duce la refacerea caut , irului de cautare cteva comenzi utile n modul de cautare: exista se apasa (din nou) C-r se cauta urmatoarea daca potrivire; se apasa ESC sau C-j se ncheie cautarea; la prompt va daca comanda as , ata a; cea gasit se apasa ENTER se ncheie cautarea comanda gasit a; daca s , i se executa se apasa C-g se ntrerupe cautarea daca cu revenire la comanda de dinainte de cautare.

(autocompletion) Completare automata n ecientizarea lucrului cu comenzile shell este cea de O facilitate extrem de utila (autocompletion). Aceasta facilitate nseamna introducerea unui completare automata n sistemul de s s , ir part , ial de nceput al unei comenzi sau al unei intrari , iere s , i apoi Spre exemplu, daca cineva dores apasarea tastei TAB pentru completarea automata. , te verice server-ul de nume (DNS) al unui sistem, va folosi comanda: sa
1

http://www.gnu.org/software/bash/manual/html_node/Readline-Init-File.html

370

INTRODUCERE N SISTEME DE OPERARE

ubuntu@ubuntu:~$ cat /etc/resolv.conf

ca este nevoie de apasarea Un calcul simplu arata a 21 de taste (cu ENTER) pentru execut ia comenzii. , s Putem folosi, n schimb, completarea automata tastele n mod prezentat , i vom apasa mai jos:
1

ubuntu@ubuntu:~$ cat /e<TAB>res<TAB>.<TAB><ENTER>

apasarea tasta TAB devine foarte Un calcul la fel de simplu indica a doar 14 taste (plus ca s cu importanta i este ap asat a mult mai us or). Comanda as at a la prompt va identica , , , cea de mai sus s , i, drept urmare, efectul va acelas , i. se recomanda insistent folosirea facilitat , ii de completarea automata. n consecint , a, facilitate nu este prezenta numai la shell-urile unui sistem de operare ci s Aceasta ,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. a autorilor de scriere n cazul intrarilor sistemului de s Experient , iere. , a personala , i a surprins, nu de put acestei cart ine ori, crearea de s iere cu nume apropiate, dar nu , , identice, de cele reale (precum /etc/rezolv.conf, /etc/resolv.comf, /etc/resolv.cf etc.). Aceste erori ar putut evitate (dincolo de o mai mare viteza , ii de completare automata. de utilizare a comenzilor) prin folosirea facilitat mai multe posibilitat , i de completare, apasarea n situat tastei TAB nu are , ia n care exista ori a niciun efect. Totus i, se pot vizualiza toate aceste combinat ii prin ap asarea de doua , , tastei TAB. Astfel, apasarea z<TAB><TAB> va duce la as , area tuturor comenzilor care ncep cu litera z:
1 2 3 4 5

razvan@anaconda:~$ z<TAB><TAB> zcat zegrep zforce zcmp zeisstopnm zgrep zdiff zenity zip zdump zfgrep zipcloak

zipgrep zipinfo zipnote zipsplit

zless zmore znew zsoelim

La fel, folosirea comenzii cat /<TAB><TAB> duce la as care se , area tuturor intrarilor acin a al sistemului de s gasesc n directorul rad iere: ,
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

cum s-a observat, completarea automata se automate Dupa Extinderea completarii la comenzi s n sistemul de s prin refera , i la intrari , iere. Totus , i, aceasta poate extinsa intermediul unor scripturi personalizate la argumentele posibile ale unei comenzi. Astfel s , ierul /etc/bash_completion este folosit pentru extinderea completarii rularea comenzii: automate. Pentru folosirea acestui script este necesara
1

ubuntu@ubuntu:~$ . /etc/bash_completion

CAPITOLUL 12. SHELL SCRIPTING Cteva linii din acest s , ier:


1

371

complete -f -X !*.@(sxi|sti|pps|ppt|pot|odp|otp) ooimpress

ca daca un utilizator foloses Linia de mai sus nseamna , te n linia de comanda ooimpress, argumentele posibile ale acesteia vor considerate doar s ierele cu , extensiile precizate.
1 2

# user commands see only users complete -u su usermod userdel passwd chage write chfn groups slay w

Linia de mai sus permite ca argumente numai nume de utilizatori pentru comenzile de lucru cu aces , tia. n afara extinderilor existente n /etc/bash_completion, utilizatorul s , i poate deni ca acestea sa e plasate n noi extinderi pentru a le integra n shell. Se recomanda directorul /etc/bash_completion.d. Generarea de noi extensii de completare , es , i. Recomandam celor interesat depas , te domeniul de interes al acestei cart , i pagina 1 proiectului sau articolul legat de completarea automata de pe Debian web asociata Administration2 .

12.2.3

Comenzi interne (built-in) s , i comenzi externe

tipuri: Comenzile care pot rulate dintr-un shell sunt de doua 1. comenzi externe: sunt rulate prin intermediul unui executabil a invocarea unui alt program. 2. comenzi interne: sunt executate direct de shell far , i care sunt Comenzile interne (sau built-in) sunt utilizate pentru implementarea de facilitat e imposibil e neconvenabil de realizat folosind programe separate. Un bun exemplu comanda nu poate este comanda cd de schimbare a directorului curent. Aceasta folosita dintr-un executabil extern, ntruct la sfrs , itul rularii comenzii s-ar pierde orice a directorului curent). efect ar avea (s i nu ar posibil a, astfel, schimbarea persistenta , Exemple de comenzi externe s , i executabilul folosit pentru rularea acestora sunt:

ls cu /bin/ls file cu /usr/bin/file su cu /bin/su ifconfig cu /sbin/ifconfig


Exemple de comenzi interne sunt: variabile s redirectarile; : comanda nu face nimic, doar expandeaza , i realizeaza astfel, rularea comenzii:
1

ubuntu@ubuntu:~$ : > out.txt

este duce la trunchierea s , ierului out.txt. Versiunea s , i mai simpla


1
1 2

ubuntu@ubuntu:~$ > out.txt

http://www.caliban.org/bash/index.shtml http://www.debian-administration.org/articles/316

372

INTRODUCERE N SISTEME DE OPERARE

pentru interpretarea unui s . comanda este folosita , ier (de obicei script) n shell-ul curent. Echivalenta este comanda source. Un exemplu de folosire este ncarcarea congurat , iilor din /etc/bash_completion:
1

ubuntu@ubuntu:~$ . /etc/bash_completion

sau
1

ubuntu@ubuntu:~$ source /etc/bash_completion

pentru schimbarea directorului curent cd comanda folosita

echo as , area s , irului de caractere primit ca parametru la ies , irea standard


unui alias pentru o alias/unalias congurarea/dezactivarea congurarii Astfel, daca folosim: comanda.
1

alias mygrep=grep --color=tty -d skip

ca o comanda grep cu argumentele comanda mygrep (alias) va lansata precizate; se poate folosi ca alias chiar numele comenzii, n cazul n care cu acele argumente: utilizatorul dores , te rularea implicita
1

alias grep=grep --color=tty -d skip

o comanda poate implementata att n shell (built-in) ct s De notat este faptul ca , i prin intermediul unui executabil. Astfel de comenzi sunt echo s i time . n aceste situat , , ii implicit este comanda interna. Pentru execut comanda executata , ia comenzii externe calea completa. n exemplul de mai jos sunt prezentate cele doua tipuri trebuie apelata pentru comanda time (interna s de rulari i extern a): ,
1 2 3 4 5 6 7 8 9 10 11

razvan@anaconda:~/code$ time ls asm boot_hello latex stack_ovfl real user sys 0m0.004s 0m0.000s 0m0.000s

static

tests

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

ca poate exista o deosebire ntre formatele de ies Se observa , ire ale unei comenzi interne, respectiv externe. De asemenea, mecanismele de ajutor folosite pentru comenzi (whereis, apropos, doar pentru comenzi externe. Pentru comenzi --help, man, info) funct, ioneaza documentat interne va trebui consultata , ia de Bash (man bash, info bash) sau comanda (interna) help: folosita
1 2 3 4 5 6

razvan@anaconda:~/code$ help time time: time [-p] PIPELINE Execute PIPELINE and print a summary of the real time, user CPU time , [...] razvan@anaconda:~/code$ help alias

CAPITOLUL 12. SHELL SCRIPTING


7 8 9

373

alias: alias [-p] [name[=value] ... ] alias with no arguments or with the -p option prints the list [...]

completa a comenzilor interne Bash gasit , i n pagina de manual. O lista 1 bash/info bash sau online )

(man

12.2.4

Execut , ia unei comenzi shell

cum s-a precizat, comenzile sunt de doua tipuri: interne s Dupa , i externe. Clasicarea de modul n care comenzile se executa n cadrul shell-ului. Astfel, comenzile este data interne (built-in) sunt executate direct n cadrul shell-ului, altfel spus n cadrul procesului execut crearea unui curent. De partea cealalta, , ia unei comenzi externe nseamna proces u 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, care va oferi promptul utilizatorului. shell-ul va as , tepta terminarea procesului curent dupa Acest efect poate schimbat prin rularea procesului n fundal (background ) cu ajutorul operatorului & (vezi sect , iunea 5.3). n cazul nlant , uirii mai multor comenzi (vezi sect De ret , inut este faptul ca, , iunea 5.5.1), un proces pentru ecare comanda. Astfel, la rularea comenzii: se creeaza
1

ubuntu@ubuntu:~$ ls -l | sort

procese: unul generat din executabilul /bin/ls iar altul generat din se vor crea doua procese executabilul /usr/bin/sort. Shell-ul este procesul parinte al celor doua catre s i va asigura comunicat ia ntre acestea (ies irea comenzii ls -l va redirectat a , , , intrarea comenzii sort). grac execut Figura 12.1 ilustreaza , ia comenzii de mai sus.

Figura 12.1: Execut , ia unei comenzi n shell


1

http://www.gnu.org/software/bash/manual/bashref.html#SEC55

374

INTRODUCERE N SISTEME DE OPERARE

12.3

Scripturi shell

cum am specicat, un script shell este un s Dupa , ier text (un program) cont , innd comenzi shell, variabile, structuri de control s , i funct , ii cu rolul de rezolvare a unei parcurgerea probleme. Un script shell este interpretat de shell. Interpretarea nseamna , uiri de comenzi sau structuri de control s ecarei nlant , i realizarea sarcinilor descrise de aceasta. un script shell de limbajele interpretate obis a Ceea ce separa , nuite este folosirea directa , ilor de nlant , uire a comenzilor puse la dispozit comenzilor shell, a facilitat , ie s , i a s , ierelor de congurare specice sistemului. Comenzile componente ale unui script shell pot executate manual la promptul shell-ului scriptului. Astfel, liniile urmatoare cu aceleas dintr-un script , i rezultate ca n cazul rularii shell:
1 2 3 4 5

if test 10 -gt 4; then echo "mai mare" else echo "mai mic" fi

pot executate direct n linia de comanda:


1 2

razvan@anaconda:~$ if test 10 -gt 4; then echo "mai mare"; else echo "mai mic"; fi mai mare

sau astfel:
1 2 3 4 5 6 7

razvan@anaconda:~$ if test 10 -gt 4 > then > echo "mai mare" > else > echo "mai mic" > fi mai mare

utilizatorului un miniprompt (>) pentru a indica acestuia n ultimul exemplu, shell-ul ofera nu a nalizat comanda. n cazul de fat comanda este if. Detalii despre if s ca ,a , i despre , i de script se regasesc efectul acestei bucat n sect iunea 12.4.3. ,

12.3.1

Cel mai simplu script shell

Pentru a pastra tonul tutorialelor de limbaje de programare, cel mai simplu script shell pe care l vom descrie va cel care va as , a mesajul Hello, World! la ies , irea standard. Programul este prezentat mai jos:
1 2

echo "Hello, World!" exit 0

Programul este foarte simplu. Folosim comanda echo pentru a as , a un s , ir de caractere la ies irea standard s i comanda exit pentru ca programul s a se termine cu succes. , ,

CAPITOLUL 12. SHELL SCRIPTING

375

un script shell va ntoarce n mod implicit 0 Folosirea comenzii exit este opt , ionala; daca se ajunge la sfrs , itul programului. Astfel, scriptul nostru shell poate scris ntr-o linie: singura
1

echo "Hello, World!"

Rularea unui script shell la fel ca n cazul unui limbaj interpretat prin Rularea unui script shell se realizeaza transmiterea sa ca parametru interpretorului:
1 2

razvan@anaconda:~/uso/scripting$ bash hw.bash Hello, World!

denumirea de hw.bash. Se recomanda ca scripturile shell Bash Scriptul shell poarta aiba extensia .sh sau .bash, cu toate ca n lumea Unix extensia poate omisa. Se sa as observa area mesajului Hello, World! la ies irea standard. , , un nou proces care interpreteaza n spatele acestei execut , ii, shell-ul genereaza cont , inutul scriptului primit ca parametru.

#! shebang
un Mecanismul uzual de execut , ie a unui shell script este acela prin care se executa program obis nuit: ,
1

ubuntu@ubuntu:~$ ./hw.bash

precondit Totus , i, pentru a putea realiza acest lucru avem de ndeplinit doua , ii: e executabil 1. scriptul trebuie sa se cunoasca ce interpretor va folosit 2. n momentul execut , iei trebuie sa (/bin/bash pentru Bash, /usr/bin/python pentru Python, /usr/bin/perl pentru Perl etc.) foarte simplu. Primul pas se realizeaza comanda chmod:
1 2 3 4

drepturi de execut Se adauga , ie folosind

razvan@anaconda:~/uso/scripting$ chmod a+x hw.bash 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 s pereche de caractere este urmata de semnul exclamarii) denumita , i shebang. Aceasta catre calea completa programul care va interpreta scriptul. Linia care cont , ine shebang s ,i catre calea completa interpretor este prima linie din script. n momentul n care scriptul este lansat n execut , ie, shell-ul parcurge prima linie s , i foloses , te interpretorul specicat pentru a executa scriptul. Exemple de linii shebang sunt:

#!/bin/bash executarea scriptului folosind Bash #!/usr/bin/perl executarea scriptului folosind Perl

376

INTRODUCERE N SISTEME DE OPERARE

#!/usr/bin/php executarea scriptului folosind PHP #!/usr/bin/python executarea scriptului folosind Python
adaugarea Astfel, dupa drepturilor de execut , ie s , i a liniei shebang scriptului nostru:
1 2 3 4 5

razvan@anaconda:~/uso/scripting$ cat hw.bash #!/bin/bash echo "Hello, World!" exit 0 # afisare mesaj

l putem executa:
1 2

razvan@anaconda:~/uso/scripting$ ./hw.bash Hello, World!

prezent Un script shell nu necesita n mod implicit un script este , a liniei shebang. totus interpretat folosind /bin/bash. Se recomanda, , i, prezent , a acestei linii pentru a asigura consistent a. , n prezent, distribut , ia Debian s , i distribut , iile derivate (precum Ubuntu, Kubuntu etc.) folosesc ca shell Bash, iar ca interpretor implicit de script-uri shell Dash. Interpretorul de script-uri shell implicit este /bin/sh (link simbolic catre Dash). Dash este mult mai rapid s , i mai ecient din punct de vedere al consumului de resurse comparativ cu Bash. As dar este s , i mai limitat ca s , i sintaxa, , adar, atunci cnd modicat ,i scripturi existente n sistem care au n linia shebang ca interpretor /bin/sh, luat i n , sintaxa este limitata 1 comparativ cu Bash. considerare ca

12.3.2

Comentarii ntr-un script shell

cu ajutorul caracterului #. Un comentariu Comentariile ntr-un script shell se realizeaza ator ncepe de la aparit ia # pn a la sfrs itul liniei, aseman cu // din C++. Exemple de , , comentarii sunt:
1 2 3

# comentariu echo "hello" # comentariu # echo "hello" (comanda comentata)

12.3.3

Comenzi simple shell

n mod evident, scriptul shell prezentat anterior nu este un script shell n adevaratul sens al cuvntului. Aceasta deoarece acelas , i efect poate obt , inut prin rularea simpla de argumentul Hello, World! la promtpul shell-ului. Un script a comenzii echo urmata n instant shell va cont , ine mai multe comenzi care vor interpretate ntr-o singura ,a momentul execut iei scriptului. , Scripturile shell folosesc de multe ori comenzi interne. Vom prezenta, n continuare, o parte din cele mai folositoare comenzi interne:
1

https://wiki.ubuntu.com/DashAsBinSh

CAPITOLUL 12. SHELL SCRIPTING echo

377

Comanda echo permite as , area s , irului primit ca parametru la ies , irea standard a terminalului:
1 2

razvan@anaconda:~$ echo "test" test

Opt , iuni utile pentru echo sunt: as a unui caracter newline la sfrs -n: dezactiveaza , area implicita , itul liniei:
1 2

razvan@anaconda:~$ echo -n "test" testrazvan@anaconda:~$

-e: permite interpretarea caracterelor speciale:


1 2 3

razvan@anaconda:~$ echo -ne "test\n\t\ttest2\n" test test2

printf Comanda printf permite, ca s , i echo, as , area unui s , ir de caractere la ies , irea la fel ca funct standard. Permite, nsa, , ia printf din C, formatarea s , irului de as , are:
1 2

razvan@anaconda:~$ printf "%s test 020

%03d\n" "test" 20

similaritatea cu funct Se observa , ia printf din C: primul argument este s , irul de formatare iar celelalte sunt argumentele de as , at la ies , irea standard.

exit Comanda exit permite ntreruperea execut Comanda poate primi un , iei scriptului. valoarea de retur. Aceasta valoare este implicit 0. argument care specica

export Comanda export permite exportarea unei variabile (sub forma unei variabile de mediu) ce shell-ul a ncheiat interpretarea scriptului, din scriptul curent n shell. Astfel, dupa direct din shell. Pentru mai multe detalii n legatur a cu variabila va putea folosita variabile n script-uri consultat , i sect , iunea 12.4.1.

set pentru congurarea s Comanda set este utilizata , i personalizarea shell-ului. O opt , iune este opt a ce utila , iunea -x care permite as , area comenzilor unui script shell pe masur acestea sunt executate.

378 read

INTRODUCERE N SISTEME DE OPERARE

pentru a citi date de la intrarea standard s Comanda read este folosita , i pentru stocarea n exemplul de mai jos, se dores acestora ntr-o variabila. te stocarea datelor introduse , de utilizator n variabila a:
1 2 3 4 5

razvan@anaconda:~/uso/scripting$ read a test_msg razvan@anaconda:~/uso/scripting$ echo $a test_msg

ca variabila cont Se observa , ine s , irul test_msg introdus de utilizator.

12.3.4

One liners

utilizarea facilitat , ilor shell pot realizate prin Multe din problemele ce necesita nu este necesar (s intermediul unei simple linii. S-a observat ca , i nici ecient) sa un script shell doar pentru as utilizam , area unui mesaj precum Hello, World!\n la ies , irea standard. sau nlant , uirea comenzilor se pot obt Folosind redirectari , ine efecte imediate ntr-o linie de shell. Astfel de comenzi combinate poarta numele de one liners. singura

Redirectarea intrarii/ies , irii unei comenzi la posibilitatea de substituire a intrarii, Redirectarea unei comenzi se ofera ies , irii sau standard erorii standard a unei comenzi cu un s Astfel, redirectarea intrarii , ier. ca o comanda va citi informat nseamna , ii dintr-un s , ier n locul citirii de la intrarea standard. Redirectarea ies irii standard nseamn a c a rezultatul comenzii se va regasi , ntr-un s , ier de ies , ire. standard se foloses Pentru redirectarea intrarii , te operatorul < (caracterul mai mic) redirectarea. n cazul redirectarii ies urmat de numele s , ierul din care se realizeaza , irii standard, operatorul folosit este > (mai mare). Informat , ii despre redirectarea intrarii s ,i ies irii standard se reg asesc s i n sect iunea 4.4. , , , n mod Vom exemplica redirectarea folosind utilitarul cat. Comanda cat realizeaza, standard la ies implicit, as , area cont , inutului intrarii , irea standard. Un exemplu de rulare este prezentat n continuare:
1 2 3 4 5

razvan@anaconda:~$ cat mesaj1 mesaj1 mesaj2 mesaj2

Pentru ncheierea introducerii de informat , ii de la intrarea standard trebuie folosita ca ceea ce combinat , ia CTRL-D, nsemnnd sfrs , it de s , ier (end of le ). Se observa introduce utilizatorul la intrarea standard se as eaz a la ies irea standard. , , vom redirecta un s Daca , ier la intrarea standard, efectul va as , area cont , inutului s ierului la ies irea standard: , ,

CAPITOLUL 12. SHELL SCRIPTING

379

1 2 3 4 5 6

razvan@anaconda:~/uso/scripting$ cat < hw.bash #!/bin/bash echo "Hello, World!" exit 0

Acest lucru este echivalent cu transmiterea s , ierului ca argument comenzii cat. redirectam ies n mod similar, daca , irea standard ntr-un s , ier, acesta va cont , ine ceea ce a introdus utilizatorul la intrarea standard (se foloses , te CTRL-D pentru ncheiere):
1 2 3 4 5 6 7

razvan@anaconda:~/uso/scripting$ cat > out.txt introducem mesaj dupa care apasam CTRL-D razvan@anaconda:~/uso/scripting$ cat out.txt introducem mesaj dupa care apasam CTRL-D

n exemplul de mai sus, comanda cat a as , at s , ierul out.txt prin transmiterea acestuia ca argument, echivalent cu redirectarea acestuia catre intrarea standard a comenzii. Acest comportament se extinde s i la alte comenzii de prelucrare de s , , iere text (vezi sect , iunea 12.5). a redirectarii intrarii s Un efect care poate parea surprinzator este folosirea simultana ,i ies , irii standard. n acest fel, cont , inutul s , ierului de la intrare este copiat n s , ierul de la ies ire. Efectul este identic cu folosirea comenzii cp : ,
1 2 3 4 5 6 7 8

razvan@anaconda:~/uso/scripting$ cat < hw.bash > new.bash razvan@anaconda:~/uso/scripting$ cat new.bash #!/bin/bash echo "Hello, World!" exit 0

a cu Pentru redirectarea erorii standard se foloses , te operatorul 2>. Aceasta are legatur descriptorul de s , ier asociat: intrarea standard are asociat descriptorul de s , ier 0, ies , irea standard are asociat descriptorul de s ier 1 iar eroarea standard are asociat descriptorul , de s , ier 2. se doresc redirectate ntr-un s Astfel, daca , ier erorile s , i avertismentele emise de gcc se foloses , te operatorul 2>:
1 2 3 4 5 6 7

razvan@anaconda:~/uso/scripting$ gcc hw.c 2> err_warn.txt razvan@anaconda:~/uso/scripting$ cat err_warn.txt hw.c: In function main: hw.c:3: warning: incompatible implicit declaration of built-in function printf razvan@anaconda:~/uso/scripting$ gcc hw.c 2> /dev/null

n cel de-al doilea exemplu, s-a redirectat eroarea standard catre /dev/null. Aceasta ca nu se dores nseamna , te as , area la eroarea standard sau ntr-un s , ier a diverselor informat ii de avertisment as ate de gcc . , ,

380

INTRODUCERE N SISTEME DE OPERARE

Se poate redirecta att ies , irea standard ct s , i eroarea standard folosind operatorul &> 1 (Atent , ie: acest operator nu funct , ioneaza n interpretorul shell Dash ). n exemplu de mai att ies jos se redirecteaza , irea standard ct s , i eroarea standard a execut , iei comenzii strace:
1

razvan@anaconda:~/uso/scripting$ strace ls &> out_ls.txt

cu Operatorul >> Operatorul >> este utilizat pentru redirectarea ies , irii standard nsa adaugarea (append ) a informat , iilor redirectate la sfrs , itul s , ierului. Echivalent exista operatorul 2>> pentru adaugarea informat , iilor de la eroarea standard. n exemplul de mai jos scriem ies irile comenzilor ls , ps s i , , uptime ntr-un acelas , i s , ier:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

razvan@anaconda:~/uso/scripting$ ls > out.txt razvan@anaconda:~/uso/scripting$ ps >> out.txt razvan@anaconda:~/uso/scripting$ uptime >> out.txt razvan@anaconda:~/uso/scripting$ cat out.txt a.out err_warn.txt hw.bash hw.c new new.bash out.txt out_ls.txt PID TTY TIME CMD 30624 pts/2 00:00:00 bash 31508 pts/2 00:00:00 ps 15:34:59 up 59 days, 39 min, 2 users, load average: 0.37, 0.55, 0.61

Here documents; operatorul << Operatorul << este folosit n ceea ce se cheama here document. Un here document este folosit, de obicei, cu utilitare interactive. Formatul de utilizare este:
1

command <<word

n continuarea comenzii de la Acest lucru va impune comenzii citirea informat , iei aata la ntlnirea cuvntului word n corpul scriptului. n exemplul de intrarea standard pna la ntlnirea cuvntului END : mai jos, se cites , te de la intrarea standard pna
1 2 3 4 5 6 7 8 9 10 11 12

razvan@anaconda:~/uso/scripting$ cat here.bash #!/bin/bash cat <<END mesaj simplu ... pentru un here document ... avantajul este ca nu trebuie sa folosesc multe comenzi echo END echo "s-a terminat" razvan@anaconda:~/uso/scripting$ bash here.bash
1

https://wiki.ubuntu.com/DashAsBinSh

CAPITOLUL 12. SHELL SCRIPTING


13 14 15 16 17

381

mesaj simplu ... pentru un here document ... avantajul este ca nu trebuie sa folosesc multe comenzi echo s-a terminat

cum se observa s Dupa , i din comentariile s , ierului, un here document poate folosit n locul comenzii echo. Un exemplu util l constituie generarea unei pagini web simple. O alternativa este folosirea comenzii echo: prima
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

razvan@ragnarok:~/uso/scripting$ cat echo.bash #!/bin/bash hostname="ragnarok" name="razvan" 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>"

razvan@ragnarok:~/uso/scripting$ bash echo.bash <html> <title> Pagina mea </title> <body> <h3>Statia este ragnarok</h3> <h3>Numele meu este razvan</h3> <p>Data este Tue Sep 4 23:23:05 EEST 2007</p> </body> </html>

ca este incomoda folosirea comenzii echo. O solut Se observa , ie este utilizarea unui here document :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

razvan@ragnarok:~/uso/scripting$ cat here.bash #!/bin/bash hostname="ragnarok" name="razvan" cat <<EndOfHtml <html> <title> Pagina mea </title> <body> <h3>Statia este $hostname</h3> <h3>Numele meu este $name</h3> <p>Data este $(date)</p> </body> </html> EndOfHtml

382

INTRODUCERE N SISTEME DE OPERARE

online1 . Informat , ii suplimentare despre here documents se pot gasi

Here strings; operatorul <<< Operatorul <<< permite folosirea de here strings, adica redirectarea unui s ir de caractere c atre intrarea standard a unei comenzi. n exemplul , de mai jos, se foloses , te comanda read pentru a citi cont , inutul unui s , ir ntr-un set de variabile:
1 2 3 4

razvan@anaconda:~$ read a b c d <<< "alfa beta gamma delta " razvan@anaconda:~$ echo $a $b $c $d alfa beta gamma delta

Ca s , i n cazul operatorului <<, acelas , i rezultat poate obt , inut prin folosirea comenzii echo:
1

razvan@anaconda:~$ echo "alfa beta gamma delta" | read a b c d

eliminarea cont Trunchierea unui s Trunchierea unui s , inutului , ier , ier nseamna prin acestuia: s ierul devine gol (dimensiune 0). Trunchierea unui s ier se realizeaz a , , folosind redirectarea cont Acest lucru se realizeaza , inutului /dev/null n s , ier. comanda:
1 2 3 4 5 6 7

razvan@anaconda:~/uso/scripting$ ls -l out.txt -rw-r--r-- 1 razvan razvan 220 Sep 4 15:34 out.txt razvan@anaconda:~/uso/scripting$ cat /dev/null > out.txt razvan@anaconda:~/uso/scripting$ ls -l out.txt -rw-r--r-- 1 razvan razvan 0 Sep 4 15:35 out.txt

prin redirectarea unei comenzi care nu Mai simplu, trunchierea unui s , ier se realizeaza nimic la ies este : (comanda care nu face as , eaza , irea standard. O astfel de comanda nimic):
1

razvan@anaconda:~/uso/scripting$ : > out.txt

folosind comanda de mai jos: Si mai simplu, trunchierea se realizeaza


1

razvan@anaconda:~/uso/scripting$ > out.txt

cu cea de mai sus, cu absent Comanda este echivalenta , a comenzii :.

, uirea comenzilor nlant , uirea diverselor Shell-ul pune la dispozit , ia utilizatorului operatori care permit nlant comenzi pentru obt inerea de noi funct ionalit at i. Dintre aces tia, cel mai cunoscut este , , , , ies operatorul | (pipe) care redirecteaza Detalii , irea unei comenzi la intrarea alteia. despre acest operator se gasesc s , i n capitolul 5.
1

http://tldp.org/LDP/abs/html/here-docs.html

CAPITOLUL 12. SHELL SCRIPTING

383

Operatorul | (pipe) Un exemplu de utilizare al operatorului | este cautarea unei informat , ii ntr-un s , ier. O comanda uzuala este:
1

ubuntu@ubuntu:~$ cat file.txt | grep keyword

cu ajutorul comenzii grep, descrisa n Cautarea informat , iei n s , ier se realizeaza sect iunea 12.5.7. , o serie de comenzi prezentate n acest capitol Un exemplu mai complex care utilizeaza este determinarea numarului de utilizatori unici care s-au autenticat n sistem ntr-o Comenzile utilizate sunt last, grep, cut, sort, uniq, wc. Detalii despre zi data. aceste vor prezentate n sect , iunile urmatoare. autenticarile Pentru nceput, vom folosi comanda last care as n sistem. , eaza pentru a extrage numai acele linii care cont Comanda grep este folosita , in ziua dorita:
1 2 3 4 5 6 7 8 9 10 11 12 13 14

razvan@anaconda:~/uso/scripting$ last -30 | grep Mon sergiu pts/4 89.18.20.56 Mon Sep 3 23:36 razvan pts/4 dhcp-204.cs.pub. Mon Sep 3 23:19 carpalex pts/0 86.121.140.140 Mon Sep 3 23:14 alexef pts/0 89.120.196.59 Mon Sep 3 22:42 cojocar pts/0 86.127.17.156 Mon Sep 3 19:50 ddvlad pts/3 84.247.45.23 Mon Sep 3 16:00 root pts/0 dhcp-204.cs.pub. Mon Sep 3 15:14 ddvlad pts/0 84.247.45.23 Mon Sep 3 15:07 valentin pts/2 86.122.195.234 Mon Sep 3 13:47 alexef pts/0 89.120.196.59 Mon Sep 3 13:30 razvan pts/0 dhcp-204.cs.pub. Mon Sep 3 10:30 stefanb pts/0 adsl-76-200-147- Mon Sep 3 10:05 stefanb pts/0 adsl-76-200-147- Mon Sep 3 06:13

23:46 23:35 01:41 22:51 19:51 16:01 17:33 15:09 02:43 15:04 10:44 10:17 07:57

(00:09) (00:15) (02:27) (00:08) (00:01) (00:00) (02:18) (00:01) (12:55) (01:34) (00:13) (00:12) (01:43)

obt extragem numai numele utilizatorilor. Dupa n sistem vrem sa , inerea autenticarilor Pentru aceasta vom folosi comanda cut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14

razvan@anaconda:~/uso/scripting$ last -30 | grep Mon | cut -d -f1 sergiu razvan carpalex alexef cojocar ddvlad root ddvlad valentin alexef razvan stefanb stefanb

n acest moment avem numele utilizatorilor care s-au autenticat n sistem n ziua de extragem o singura instant a numelor care se repeta. Luni. Mai departe, va trebui sa ,a Drept urmare vom folosi utilitarele sort s i uniq : ,
1 2 3 4 5

razvan@anaconda:~/uso/scripting$ last -30 | grep Mon | cut -d -f1 | sort | uniq alexef carpalex cojocar ddvlad

384
6 7 8 9 10

INTRODUCERE N SISTEME DE OPERARE

razvan root sergiu stefanb valentin

as prin Mai ramne sa numarul de autenticari. Acest lucru se realizeaza , am contorizarea liniilor obt inute la pasul anterior, cu ajutorul utilitarului wc : ,
1 2

razvan@anaconda:~/uso/scripting$ last -30 | grep Mon | cut -d -f1 | sort | uniq | wc -l 9

Comanda de mai sus poate da rezultate incorecte n cazul n care Mon mai apare ar exista un utilizator Monica, atunci vor altundeva n rezultatul furnizat de last. Daca aparea s , i liniile ce descriu autenticarea n sistem a utilizatorului Monica (chiar daca problema va corectata n autenticarea a avut sau nu loc n ziua de luni). Aceasta sect , iunea 12.11.1.

, uire a comenzilor t Operatorii ;, || s Operatorii ;, || s , i && de nlant , in cont de , i && de comanda anterioara. Astfel: valoarea ntoarsa dupa execut comm1 ; comm2 comanda comm2 se executa , ia comenzii comm1 n cazul n care comm1 se comm1 || comm2 comanda comm2 se executa ntoarce cu o valoare nenula n cazul n care comm1 se comm1 && comm2 comanda comm2 se executa ncheie cu succes (ntoarce 0) a ecarei Operatorul ; este echivalent cu execut comenzi. , ia secvent , iala Operatorul && este folosit cnd comm2 depinde de execut , ia cu succes a comenzii comm1. O situat, ie este compilarea din surse s , i instalarea unei aplicat , ii:
1

root@ubuntu:~# make && make install

12.4

Programarea shell

prezentarea ctorva comenzi simple s Dupa n , i a operatorilor shell, putem patrunde cum s-a precizat, shell-ul pune la aspectele de programare a unui shell script. Dupa dispozit , ia utilizatorului un limbaj de programare. Acesta cont , ine, ca s , i alte limbaje de programare, variabile, funct ii, structuri de ciclare, instruct iuni de decizie. Combinate cu , , , i oferite de shell (utilizarea de comenzi deja implementate, nlant , uirea celelalte facilitat comenzilor, redirectarea), programarea shell devine un instrument puternic la ndemna utilizatorului.

12.4.1

Variabile

are asociat un nume s O variabila , i o valoare. La fel ca n C, numele variabilelor este un s ir de caractere ce poate cont ine litere, cifre sau caracterul _ (underscore) s , , , i trebuie

CAPITOLUL 12. SHELL SCRIPTING

385

nceapa cu litera sau underscore. Exemple de nume de variabile sunt a, a0b, a_b, sa AxB_01_D etc. o variabila Spre deosebire de limbaje precum C, variabilele n shell nu au un tip. Faptul ca sau un s De este un numar , ir de caractere depinde de contextul n care este folosita. poate denita oriunde. n mod obis asemenea, o variabila nuit, unei variabile i este , o valoare n momentul denirii. Exemple de init sunt: asociata , ializari
1 2 3 4

a=0 b="alfa" c="a08ss" d=230

Un lucru important de ret shell s , inut este fragilitatea programarii , i constrngerile nu poate exista spat importante pe care le impune. Una dintre ele este faptul ca , iu semnul = din momentul init unei variabile. Astfel, urmatoarele nainte sau dupa , ializarii init ializ ari vor invalide: ,
1 2 3

a =0 b = "alfa" d= 230

cu ajutorul simbolului $. Astfel, daca dorim as Valoarea unei variabile este referita , area valorii variabilelor denite mai sus folosim comanda:
1 2

razvan@anaconda:~$ echo $a $b $c $d 0 alfa a08ss 230

daca dorim init n consecint , a, , ializarea unei variabile la valoarea unei alteia vom folosi o construct ie de forma: ,
1 2 3 4 5 6 7

razvan@anaconda:~$ echo $e 0 razvan@anaconda:~$ f="$b$c" razvan@anaconda:~$ echo $f alfaa08ss

ca variabila f cont n ultimul exemplu se observa , ine valorile concatenate ale celorlalte variabile. De asemenea, se poate observa ca ghilimelele nu schimba sensul doua simbolului $. se dores sa e un rezultat al unei operat Daca , te ca o variabila , ii aritmetice cu o alta se foloses descris n sect variabila , te operatorul de expandare aritmetica , iunea 12.7.1:
1 2 3 4 5 6

razvan@anaconda:~$ a=4 razvan@anaconda:~$ c=3 razvan@anaconda:~$ echo $(($a * $c + 1)) 13

a shell-ului este posibilitatea stocarii ies O facilitate importanta , irii unei comenzi ntr-o Acest lucru se realizeaza prin intermediul construct variabila. n , iei $(command). exemplul de mai jos, ret de utilizatori , inem n variabila local_users_num numarul n /home: care au directorul de baza

386

INTRODUCERE N SISTEME DE OPERARE

1 2 3 4

razvan@anaconda:~$ local_users_num=$(cat /etc/passwd | grep /home | wc -l ) razvan@anaconda:~$ echo $local_users_num 52

vrem sa contorizam s am 1 la acea variabila: Daca , i utilizatorul root, adaug


1 2 3 4

razvan@anaconda:~$ total_local=$(($local_users_num + 1)) razvan@anaconda:~$ echo $total_local 53

frecventa n init O gres , eala , ializarea unei variabile este folosirea de spat , ii nainte sau =. Evitat dupa i aparit ia unor astfel de gres eli n scripturile voastre. , , ,

Exemple

as , 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

root@anaconda:/home/razvan/uso/scripting# cat -n service_ip.bash 1 #!/bin/bash 2 3 ip_num=3 4 log_file="/var/log/apache/access.log" 5 6 tail -n $ip_num $log_file | cut -d -f 1 root@anaconda:/home/razvan/uso/scripting# bash service_ip.bash 38.99.44.102 38.99.44.102 38.99.44.102

1 As , area memoriei totale ocupate de primele 3 procese din sistem 1 2 3 4 5 6 7 8 9 10 11 12 13

root@anaconda:/home/razvan/uso/scripting# cat -n mem_proc.bash 1 #!/bin/bash 2 3 rss1=$(ps -e -o rss --sort=-rss | head -n 2 | tail -n 1) 4 rss2=$(ps -e -o rss --sort=-rss | head -n 3 | tail -n 1) 5 rss3=$(ps -e -o rss --sort=-rss | head -n 4 | tail -n 1) 6 7 total_rss_kb=$(($rss1 + $rss2 + $rss3)) 8 9 echo "memorie totala ocupata de primele 3 procese: $total_rss_kb KB" root@anaconda:/home/razvan/uso/scripting# bash mem_proc.bash memorie totala ocupata de primele 3 procese: 29088 KB

Adaugarea unui utilizator n sistem n mod neinteractiv


1 2

root@anaconda:/home/razvan/uso/scripting# cat -n my_add_user.sh 1 #!/bin/bash

1 procesele pe parcursul execut presupunem ca nu se modica , iei script-ului, astfel nct ordinea lor sa se pastreze

CAPITOLUL 12. SHELL SCRIPTING


3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

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. 30 31 32 33 34 35 36 37 Your password is $password. Please use passwd to change it.

Your qota limit is $QUOTA MB.

Have a nice day! EndOfMsg exit 0

root@anaconda:/home/razvan/uso/scripting# ./my_add_user.sh root@anaconda:/home/razvan/uso/scripting# cat /etc/passwd | tail -1 newuser:x:1051:1026::/home/students/newuser:/bin/bash

12.4.2

Caractere speciale shell

Shell-ul are un set de caractere rezervate, caractere ce au roluri bine denite ntr-un script.

388 Caracterul blank (spat , iu)

INTRODUCERE N SISTEME DE OPERARE

s Caracterul blank este folosit pentru a separa argumentele unei comenzi de comanda ,i ntre ele. Astfel, n exemplul
1

ubuntu@ubuntu:~$ ls -l mydir

argumente: -l s avem un avem comanda ls cu doua , i mydir. Se poate ntmpla sa argument care cont , ine caractere blank. Spre exemplu, avem directorul my dir. Pentru as area cont inutului acestui director, nu putem folosi comanda: , ,
1

ubuntu@ubuntu:~$ ls my dir

argumente transmise comenzii ls. Astfel, s-ar ntruct shell-ul ar considera doua ncerca as Pentru a , area cont , inutului directorului my s , i apoi a directorului dir. trebuie folosit ca un prentmpina acest efect, caracterul blank trebuie citat, adica trei solut caracter obis , nuit. Pentru aceasta exista , ii: 1. folosirea caracterului special ghilimele pentru nglobarea numelui de director ce cont , ine blank:
1

ubuntu@ubuntu:~$ ls "my dir"

2. folosirea caracterului special apostrof, la fel cum s-a folosit ghilimele:


1

ubuntu@ubuntu:~$ ls my dir

caracterul special de 3. folosirea caracterului special backslash, care dezactiveaza el dupa


1

ubuntu@ubuntu:~$ ls my\ dir

Despre caracterele speciale ghilimele, apostrof s , i backslash se va discuta n continuare.

Caracterul $ (dolar) Unul dintre acestea este caracterul $ care poate folosit pentru expandarea unei variabile (a valorii acesteia), a unei comenzi sau expandare aritmetica. la determinarea valorii acesteia: Expandarea unei variabile se refera
1 2 3 4 5 6

razvan@anaconda:~$ a=3 razvan@anaconda:~$ b=mesaj razvan@anaconda:~$ echo $a $b 3 mesaj

Expandarea unei comenzi se refera la ret , inerea rezultatului execut , iei comenzii:
1 2 3 4

razvan@anaconda:~$ num_dirs=$(ls -l | wc -l) razvan@anaconda:~$ echo $num_dirs 21

la executarea de calcule aritmetice. Far a folosirea se refera Expandare aritmetica operatorii aritmetici ar considerat operatorului de expandare aritmetica, , i caractere simple:

CAPITOLUL 12. SHELL SCRIPTING

389

1 2 3 4 5

razvan@anaconda:~$ echo 2+3+4 2+3+4 razvan@anaconda:~$ echo $((2+3+4)) 9

Mai multe informat , ii despre utilizarea caracterului $ s , i despre expandare sunt prezentate n sect , iunea 12.7. ca nu poate folosit cu Caracterul $ este un caracter special. Acest lucru nseamna semnicat , ia de caracter direct cnd este urmat de un alt caracter care impune o dorim as expandare. Daca , area s , irului $a, nu putem folosi comanda echo $a, pentru ar as ca , a valoarea variabilei a:
1 2

razvan@anaconda:~$ echo $a 3

Pentru aceasta trebuie folosit caracterul backslash sau apostrof. Folosirea ghilimelelor nu conduce la folosirea semnicat , iei de caracter pentru $:
1 2 3 4 5 6 7 8

razvan@anaconda:~$ echo "$a" 3 razvan@anaconda:~$ echo $a $a razvan@anaconda:~$ echo \$a $a

Caracterul " (ghilimele) Un alt caracter special este " (ghilimele). Acest caracter este folosit pentru a deni s , iruri de caractere:
1 2

$ a="sir" $ b="acest sir"

Caracterul ghilimele este folosit pentru pastrarea semnicat , iei de caracter pentru caracterele speciale: blank, (, ), &, | etc. Except ia o constituie caracterul $ care s , ,i semnicat pastreaz a , ia n cazul expansiunii:
1 2 3 4 5 6

razvan@anaconda:~$ c=3 razvan@anaconda:~$ b=a razvan@anaconda:~$ echo "c = $c; b = $b" c = 3; b = a

Pentru as , area unui caracter ghilimele putem folosi backslash sau apostrof :
1 2 3 4 5

razvan@anaconda:~$ echo "simbolul ghilimele (\")" simbolul ghilimele (") razvan@anaconda:~$ echo simbolul ghilimele (") simbolul ghilimele (")

390 Caracterul \ (backslash)

INTRODUCERE N SISTEME DE OPERARE

ca nu putem as valoarea S-a observat nsa , a caracterul $. Comanda de mai jos as , eaza variabilei a:
1 2

razvan@anaconda:~$ echo $a 3

caracterul $ ca init dorim as Shell-ul interpreteaza Daca , iator al unei expandari. , area s irului $a , nu putem folosi construct ia de mai sus, ntruct se va ncerca expandarea , , variabilei a. Pentru a realiza acest lucru vom folosi caracterul \(backslash). Acest caracter este caracterul de citarea s semnicat , i are rolul de a pastra , ia caracterului de el. Citare nseamna folosirea unui caracter cu semnicat dupa ia literal a. , dorim as Astfel, daca , area s , irului $a, folosim comanda:
1 2

razvan@anaconda:~$ echo \$a $a

Caracterul \ poate folosit s , i pentru citarea caracterului ":


1 2

razvan@anaconda:~$ echo \" "

Tot \ este folosit pentru as , area \:


1 2

razvan@anaconda:~$ echo \\ \

Caracterul (apostrof) Caracterul are un rol similar cu cel al caracterului ". Este folosit pentru descrierea de caracterele speciale sa-s , i pastreze s semnicat , iruri s , i fort , eaza , ia. Deosebirea ntre s ,i primul este mult mai puternic. Astfel, orice caractere speciale care apar ntre " este ca caractere apostrof s semnicat doua a , i pastreaz , ia:
1 2

razvan@anaconda:~$ echo " ) ; & $ \ " ) ; & $ \

Alte caractere speciale Alte caractere cu rol special n shell sunt cele folosite de operatorii shell: >, <, |, &, ;, (, ) sau cele folosite pentru expresii regulate n shell: {, }, *, +, ?, [, ]. Toate aceste semnicat sunt folosite ntre ghilimele sau apostroafe. caractere s a , i pastreaz , ia daca Mai multe detalii despre caracterele folosite pentru expresii regulate n shell se regasec n sect , iunea 12.7.2. spre exemplu, un utilizator dores Daca, , te as , area tuturor pachetelor instalate care ncep utilizeze comanda: cu litera n, va trebui sa
1

ubuntu@ubuntu:~$ dpkg -l n*

exista o intrare n directorul curent care ncepe Comanda de mai jos nu va funct , iona daca expresiei regulate de catre a a transmis catre cu litera n din cauza expandarii shell, far utilitarul dpkg:

CAPITOLUL 12. SHELL SCRIPTING

391

1 2 3 4 5

razvan@anaconda:~/uso/scripting$ ls hw.bash new razvan@anaconda:~/uso/scripting$ dpkg -l n* No packages found matching new.

Solut , ia este citarea caracterului *:


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

razvan@anaconda:~/uso/scripting$ dpkg -l n* Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) ||/ Name Version Description +++-==============-==============-======================================== ii un un un pn pn ii nano nano-tiny nas nas-lib nautilus nautilus-cd-bu nautilus-data 2.0.2-1etch1 <none> <none> <none> <none> <none> 2.14.3-11 free Pico clone with some new features (no description available) (no description available) (no description available) (no description available) (no description available) data files for nautilus

12.4.3

Instruct , iuni de decizie

Instruct , iunile de decizie folosite n scripturile shell sunt if s , i case. O instruct , iune de decizie permite testarea unei condit , ii s , i executarea unei act , iuni sau a alteia conform condit iei. ,

if utilizatorul local este root Vom analiza instruct exemplu: daca , iunea if prin urmatorul un alt atunci se as eaz a un mesaj, dac a utilizatorul local este razvan se as , , eaza utilizatorul local este altcineva, se as un mesaj specic: mesaj, iar daca , eaza
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

razvan@anaconda:~/uso/scripting$ cat -n if_user.bash 1 #!/bin/bash 2 3 user=$(whoami) 4 5 if test $user = "root"; then 6 echo "Bow before me for I am root." 7 elif test $user = "razvan"; then 8 echo "I am no humble user." 9 else 10 echo "I am but a humble user." 11 fi razvan@anaconda:~/uso/scripting$ bash if_user.bash I am no humble user.

s Opt liniei. Sintaxa if este urmatoarea: , iunea -n a comenzii cat as , eaza , i numarul

392

INTRODUCERE N SISTEME DE OPERARE

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 predenite sunt if, then, elif, else, fi. conditie1, respectiv conditie2 se executa sunt condit , ii care sunt testate. n cazul n care o conditie este ndeplinita act iunea asociat a. , cum se vede din exemplu (liniile 5 s Dupa , i 7), condit , iile sunt exprimate cu ajutorul condit este ndeplinita sau 1 utilitarului test. Acesta interpreteaza ia s i ntoarce 0 daca , , nu: daca
1 2 3 4 5 6 7 8 9

razvan@anaconda:~/uso/scripting$ test "alfa" = alfa razvan@anaconda:~/uso/scripting$ echo $? 0 razvan@anaconda:~/uso/scripting$ test "alfa" = alf razvan@anaconda:~/uso/scripting$ echo $? 1

predenita care det Variabila $? este o variabila , ine valoarea de retur a ultimei expresii. Acelas , i efect poate obt , inut cu ajutorul operatorului de test al shell-ului [ ..
1 2 3 4 5 6 7 8 9

]:

razvan@anaconda:~/uso/scripting$ [ "alfa" = alfa ] razvan@anaconda:~/uso/scripting$ echo $? 0 razvan@anaconda:~/uso/scripting$ [ "alfa" = alf ] razvan@anaconda:~/uso/scripting$ echo $? 1

[s Este obligatoriu un caracter blank (spat , iu) dupa , i nainte de ] la operatorul de test de condit ie din shell. , if nu trebuie sa e neaparat Condit o condit , ia folosita , ie de test. Se poate folosi orice este 0 condit construct ie care poate evaluat a la un num ar. Dac a acel numar , , ia este s act ndeplinita altfel nu. n exemplu urmator, se , i se executa , iunea corespunzatoare, un mesaj corespunzator utilizatorul indicat de variabila user are as doar daca , eaza n /home (nu este utilizator de sistem): directorul de baza
1 2 3 4 5 6 7 8 9

razvan@anaconda:~/uso/scripting$ cat -n home_user.bash 1 #!/bin/bash 2 3 user="mihai" 4 5 if grep "$user" /etc/passwd | grep "/home"; then 6 echo "User $user is not homeless." 7 else 8 echo "User $user is homeless."

CAPITOLUL 12. SHELL SCRIPTING


10 11 12 13 14 15 16

393

fi

razvan@anaconda:~/uso/scripting$ bash home_user.bash amihaiuc:x:1011:1011:Alex Mihaiuc,,,:/home/amihaiuc:/bin/bash mihai:x:1014:1014:Mihai Dobrescu,,,:/home/mihai:/bin/bash mihaif:x:1023:1023:Mihai Florian,,,:/home/mihaif:/bin/bash User mihai is not homeless.

ca if testeaza ies echo -n "test" Se observa , irea comenzii compuse


1

grep "$user" /etc/passwd | grep "/home"

daca exista utilizatorul mihai n sistem s acest utilizator are directorul care verica , i daca n /home (linia 5). ntruct acesta exista, as mesajul User mihai is not de baza eaz a , homeless.. s Totus lucru care este deranjant n perspectiva , i, comanda grep as , eaza , i liniile gasite, , ii scriptului. funct Solut este redirectarea ies comenzii grep catre , ionalitat , ia , irii /dev/null.
1 2 3 4 5 6 7 8 9 10 11 12 13

razvan@anaconda:~/uso/scripting$ cat -n home_user.bash 1 #!/bin/bash 2 3 user="mihai" 4 5 if grep "mihai" /etc/passwd | grep "/home" > /dev/null ; then 6 echo "User $user is not homeless." 7 else 8 echo "User $user is homeless." 9 fi razvan@anaconda:~/uso/scripting$ bash home_user.bash User mihai is not homeless.

o Condit Att test ct s analizeaza , i operatorul de condit , ie shell [..] , ii de test este ndeplinita sau 1 daca nu este ndeplinita. n exemplele condit , ie s , i ntorc 0 daca prezentate de anterior condit ia a fost sir1 = sir2 . Exist a mai multe condit , , ii, o parte din care sunt prezentate n tabelul de mai jos: Mai multe condit , ii pot folosite simultan folosind operatorii -a s , i -o cu sintaxele respectiv conditie1 -a conditie2 s , i conditie1 -o conditie2. Cteva exemple de folosire a condit , iilor de mai sus sunt prezentate n continuare:
1 2 3 4 5 6 7 8 9 10 11 12 13 14

razvan@anaconda:~/uso/scripting$ test -f a.txt razvan@anaconda:~/uso/scripting$ test -s a.txt razvan@anaconda:~/uso/scripting$ test a.txt -ot b.txt razvan@anaconda:~/uso/scripting$ test 3 -eq 4 razvan@anaconda:~/uso/scripting$ test -z "" razvan@anaconda:~/uso/scripting$ test -z "a" razvan@anaconda:~/uso/scripting$ test "a" = "b"

394
15

INTRODUCERE N SISTEME DE OPERARE

razvan@anaconda:~/uso/scripting$ test -f a.xt -a 3 -eq 4

Negarea unui condit , ii se face cu ajutorul operatorului !:


1 2

razvan@anaconda:~$ if ! test 4 -gt 5; then echo "4 nu e mai mare ca 5"; else echo "4 e mai mare ca 5"; fi 4 nu e mai mare ca 5

poate folosit pentru evaluarea unor Operatorul ((...)) de expansiune aritmetica ator condit C: , ii ntr-un format aseman
1 2

razvan@anaconda:~/uso/scripting$ if ((1 < 4)); then echo "adevarat"; fi adevarat

Mai multe detalii despre operatorul ((...)) se gasesc n sect , iunea 12.7.1.

case Instruct , iunea case permite selectarea ntre mai multe s , abloane de s , iruri de expresii daca un s mica, o litera regulate. n exemplul de mai jos se verica , ir ncepe cu o litera mare sau cu un numar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14

razvan@anaconda:~/uso/scripting$ cat -n case_begin.bash 1 #!/bin/bash 2 3 var="Alfa" 4 5 case $var in 6 [a-z]*) echo "litera mica";; 7 [A-Z]*) echo "litera mare";; 8 [0-9]*) echo "cifra";; 9 *) echo "altceva";; 10 esac razvan@anaconda:~/uso/scripting$ bash case_begin.bash litera mare

s Sintaxa pentru case, observabila , i n exemplu, este:


1 2 3 4 5 6

case valoare_variabila in sablon1) actiuni;; sablon2) actiuni;; ... esac

daca valoare_variabila se Cuvinte rezervate sunt case, in, esac. Se verica potrives n momentul gasirii unei potriviri se , te cu unul dintre s , abloanele ulterioare. act executa Act , iunile asociate. , iunile asociate s , ablonului se ncheie cu ;; (doua simboluri punct s i virgul a). , la s n exemplul de mai sus, variabila var se init , ializeaza , irul Alfa (linia 3). Dupa daca variabila ncepe cu litera mica (linia 6), cu litera mare (linia 7) aceasta se verica (linia 8). Sabloanele sau cu cifra sunt date, de obicei, de expresii regulate. Mai multe detalii despre expresii regulate se gasesc n sect , iunea 12.7.2. orice s Caracterul * nseamna , i este folosit ca echivalent pentru cuvntul cheie default din C.

CAPITOLUL 12. SHELL SCRIPTING

395

12.4.4

Cicluri n shell

Bash pune la dispozit , ia utilizatorului trei instruct , iuni de ciclare cu funct , ionalitate similara diferita: for, while s dar sintaxa i do / until . Vom exemplica sintaxa s i modul de , , utilizare a acestor comenzi pe un exemplu simplu: calculul sumei primelor 10 numere naturale.

Instruct , iunea for Scriptul shell pentru calculul sumei primelor 10 numere naturale este urmatorul:
1 2 3 4 5 6 7 8 9 10 11 12

razvan@anaconda:~/uso/scripting$ cat -n for10.bash 1 #!/bin/bash 2 3 sum=0 4 for i in 1 2 3 4 5 6 7 8 9 10; do 5 sum=$(($sum + $i)) 6 done 7 8 echo "Suma este: $sum" razvan@anaconda:~/uso/scripting$ bash for10.bash Suma este: 55

cum se vede, sintaxa for este Dupa


1 2 3

for var in lista; do actiuni done

sau
1 2 3 4

for var in lista do actiuni done

pentru a parcurge lista element cu element. Cuvinte rezervate Varibila var este folosita sunt for, in, do s i done . , act Se parcurg elementele listei (linia 4) s , i se executa , iunile precizate (linia 5). n cazul de $((...)) se incrementeaza fat , a (linia 5), folosind operatorul de expansiune aritmetica , i shell, for poate folosit direct n linia de suma cu valoarea lui i. Ca orice alte facilitat comanda:
1 2 3 4 5

razvan@anaconda:~/uso/scripting$ for i in 1 2 3 4; do echo $i; done 1 2 3 4

a claritat , ii: Acest lucru se poate extinde s , i la scriptul de mai sus cu pierderea part , iala
1 2

razvan@anaconda:~/uso/scripting$ sum=0; for i in 1 2 3 4 5 6 7 8 9 10; do sum=$(($sum+$i)); done; echo "Suma este: $sum" Suma este: 55

396 sau:
1 2 3 4 5 6 7 8

INTRODUCERE N SISTEME DE OPERARE

razvan@anaconda:~$ sum=0 razvan@anaconda:~$ for i in 1 2 3 4 5 6 7 8 9 10; do > sum=$(($sum + $i)) > done razvan@anaconda:~$ echo $sum 55

e s Lista poate cont , ine orice fel de element, e numar , ir de caractere:


1 2 3 4

razvan@anaconda:~/uso/scripting$ for i in abc def ghi; do echo $i; done abc def ghi

este caracterul blank (spat un s Separatorul implicit pentru lista , iu). Daca , ir cont , ine blank, acesta trebuie citat:
1 2 3 4 5 6 7 8 9 10 11

razvan@anaconda:~/uso/scripting$ for i in "abc def" ghi; do echo $i; done abc def ghi razvan@anaconda:~/uso/scripting$ for i in abc def ghi; do echo $i; done abc def ghi razvan@anaconda:~/uso/scripting$ for i in abc\ def ghi; do echo $i; done abc def ghi

Comanda seq Revenind la calculul sumei primelor 10 numere naturale se observa manuale a elementelor listei. Acest aspect poate lipsa de scalabilitate a specicarii automatizat prin folosirea comenzii seq. Aceasta permite generarea unei liste de numere ntr-un interval dat:
1 2 3 4 5 6 7 8 9 10 11 12

razvan@anaconda:~/uso/scripting$ seq 1 4 1 2 3 4 razvan@anaconda:~/uso/scripting$ seq 1 2 10 1 3 5 7 9

argumente, seq as elementele cuprinse ntre cele doua limite. Cu trei Cu doua , eaza argumente, argumentul din mijloc (al doilea) este folosit ca pas de incrementare. spre exemplu, am dori calculul sumei primelor 100 de numere naturale am folosi Daca, urmatorul script shell:
1

razvan@anaconda:~/uso/scripting$ cat -n for10_seq.bash

CAPITOLUL 12. SHELL SCRIPTING


2 3 4 5 6 7 8 9 10 11 12

397

1 2 3 4 5 6 7 8

#!/bin/bash sum=0 for i in $(seq 1 100); do sum=$(($sum + $i)) done echo "Suma este: $sum"

razvan@anaconda:~/uso/scripting$ bash for10_seq.bash Suma este: 5050

solut aritmetice ca n exemplul de mai jos: O alta , ie este folosirea expandarii


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

razvan@anaconda:~/uso/scripting$ cat -n for10_exp.bash 1 #!/bin/bash 2 3 sum=0 4 for ((i = 1; i <= 100; i++)); do 5 sum=$(($sum + $i)) 6 done 7 8 echo "Suma este: $sum" razvan@anaconda:~/uso/scripting$ bash for10_exp.bash Suma este: 5050

similaritatea cu sintaxa C pentru instruct Se observa , iunea for.

Lucrul cu sistemul de s Folosind for putem parcurge intrarile dintr-un director , iere al sistemului de s script shell: , ier. O emulare a comenzii ls este urmatorul
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

razvan@anaconda:~/uso/scripting$ cat -n for_ls.bash 1 #!/bin/bash 2 3 n=0 4 for i in *; do 5 n=$(($n + 1)) 6 if test -f "$i"; then 7 echo "f - $i" 8 elif test -d "$i"; then 9 echo "d - $i" 10 else 11 echo "u - $i" 12 fi 13 done 14 echo "total $n" razvan@anaconda:~/uso/scripting$ bash for_ls.bash f - do_until10.bash f - echo.bash f - for10.bash f - for10_exp.bash f - for10_seq.bash f - for_ls.bash f - here.bash f - hw.bash d - test_dir f - while10.bash

398
28

INTRODUCERE N SISTEME DE OPERARE

total 10

expandarea cont Folosirea caracterului * (linia 4) nseamna , inutului directorului curent de intrari care este parcursa cu ajutorul variabilei i. Variabila n (linia 3) este ntr-o lista pentru contorizarea numarului (linia 5) folosind expandare aritmetica. folosita de intrari folosirea ghilimelelor n lucrul cu s Se recomanda ierele (linia 6) pentru a preveni aparit ia , , caracterelor cu rol special n shell (vezi sect iunea 12.4.2). ,

Instruct , iunea while cu scriptul de Calculul sumei primelor 10 numere naturale folosind while se realizeaza mai jos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

razvan@anaconda:~/uso/scripting$ cat -n while10.bash 1 #!/bin/bash 2 3 i=1 4 n=10 5 sum=0 6 7 while test $i -le $n; do 8 sum=$(($sum + $i)) 9 ((i++)) 10 done 11 12 echo "Suma este: $sum" razvan@anaconda:~/uso/scripting$ bash while10.bash Suma este: 55

Sintaxa while este


1 2 3

while conditie; do actiuni done

aceleas a conditie urmeaza Exemplul prezentat seaman , i reguli ca n cazul if. (liniile 2, 3, 4), condit foarte mult cu un program C: init , ializari , ie (linia 7), act , iuni (linia 8), incrementarea lui i (linia 9) s-a realizat prin incrementare (linia 9). Se poate observa ca intermediul operatorului de expandare aritmetica. cu precadere de Comanda while este folosita n momentul n care condit , ia este data valoarea de retur a unei alte comenzi (de multe ori read). O emulare a comenzii cat n scriptul urmator: cu opt , iunea -n este exemplicata
1 2 3 4 5 6 7 8 9 10 11 12

razvan@anaconda:~/uso/scripting$ cat -n while_cat.bash 1 #!/bin/bash 2 3 i=1 4 cat for10.bash | while read a; do 5 echo -e "$i:\t$a" 6 i=$(($i + 1)) 7 done 8 razvan@anaconda:~/uso/scripting$ bash while_cat.bash 1: #!/bin/bash

CAPITOLUL 12. SHELL SCRIPTING


13 14 15 16 17 18 19

399

2: 3: 4: 5: 6: 7: 8:

sum=0 for i in 1 2 3 4 5 6 7 8 9 10; do sum=$(($sum + $i)) done echo "Suma este: $sum"

ca se cites la Se observa , te n variabila a cte o linie din s , iereul for10.bash pna sfrs , itul s , ierului.

Instruct , iunea until atoare n acest caz condit Comanda until este aseman cu while, doar ca , ia nu este similaritat , ii nu vom insista; cea de continuare a act , iunilor, ci este cea de oprire. Datorita suma primelor 10 numere naturale este prezentat n scriptul shell care calculeaza continuare:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

razvan@anaconda:~/uso/scripting$ cat -n until10.bash 1 #!/bin/bash 2 3 i=1 4 sum=0 5 n=10 6 7 until test $i -gt $n; do 8 sum=$(($sum + $i)) 9 i=$(($i + 1)) 10 done 11 12 echo "Suma este: $sum" razvan@anaconda:~/uso/scripting$ bash until10.bash Suma este: 55

niciun motiv Exemplele prezentate n sect , iunea 12.4.2 sunt pur academice. Nu exista ntemeiat pentru a calcula suma numerelor naturale sau a emula comenzi existente folosind un script shell. Rolul unui script shell este acela de a folosi cele mai potrivite utilitare existente pentru a rezolva o problema.

12.5

Filtre de text

la ies Utilitarele de ltrare a textului primesc la intrare un s , ier text s , i ofera , ire o forma a acestuia. Prelucrarea poate impune schimbarea ordinii elementelor, select prelucrata , ia anumitor elemente (linii, coloane), substitut , ia unor elemente (linii, cuvinte, caractere), de linie etc.) s adaugarea de noi elemente (numar , i alte operat , ii. Aceste utilitare sunt, de obicei, folosite n tandem cu instruct , iuni de decizie sau de cicluri shell pentru obt , inerea unor informat ii ce pot utilizate ulterior. ,

400

INTRODUCERE N SISTEME DE OPERARE

12.5.1

cat, tac, nl

Utilitarul principal n prelucrarea de s , iruri este cat. cat este folosit pentru as , area unui s ier s i (de cele mai multe ori) este prima comand a dintr-o nl ant uire de comenzi care , , , cum s-a precizat n sect a cat este -n folosesc |. Dupa , iunile anterioare, o opt , iune utila care as , eaza s , i numarul liniei:
1 2 3 4 5 6 7 8 9

razvan@anaconda:~/uso/scripting$ cat -n nume.txt 1 sorin 2 stefania 3 mihaela 4 florin 5 codrin 6 lucian 7 razvan 8 tavi

Utilitarul tac (cat inversat) este folosit pentru as , area unui s , ier cu liniile inversate (prima linie ultima):
1 2 3 4 5 6 7 8 9

razvan@anaconda:~/uso/scripting$ tac nume.txt tavi razvan lucian codrin florin mihaela stefania sorin

cu numarul Utilitarul nl este folosit pentru a as lor: , a liniile mpreuna


1 2 3 4 5 6 7 8 9

razvan@anaconda:~/uso/scripting$ nl for10_exp.bash 1 #!/bin/bash 2 3 4 5 6 sum=0 for ((i = 1; i <= 100; i++)); do sum=$(($sum + $i)) done echo "Suma este: $sum"

de cat -n este faptul ca nl nu considera liniile goale. De asemenea, Deosebirea fat ,a , esc aria de nl are opt, iuni pentru paginare, considerare de sect, iuni etc. care depas , i. cuprindere a acestei cart

12.5.2

sort, uniq

pentru sortarea liniilor primite la intrare. n exemplul de mai Comanda sort este folosita sortarea liniilor din s jos, se realizeaza , ierul nume.txt:
1 2 3 4 5

razvan@anaconda:~/uso/scripting$ cat nume.txt sorin stefania mihaela florin

CAPITOLUL 12. SHELL SCRIPTING


6 7 8 9 10 11 12 13 14 15 16 17 18 19

401

codrin lucian razvan tavi razvan@anaconda:~/uso/scripting$ sort nume.txt codrin florin lucian mihaela razvan sorin stefania tavi

apara de doua ori s avem nevoie doar de o singura Se poate ntmpla ca un nume sa , i sa situat aparit , ie n ies , ire. n aceasta , 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

razvan@anaconda:~/uso/scripting$ sort nume2.txt alex alina alina cristi cristi cristi razvan razvan razvan@anaconda:~/uso/scripting$ sort nume2.txt | uniq alex alina cristi razvan razvan@anaconda:~/uso/scripting$ sort -u nume2.txt alex alina cristi razvan

Un exemplu util a fost prezentat n sect , iunea 12.4.2. n acel exemplu se dorea aarea Comanda utilizata numarului de utilizatori care s-au autenticat n sistem ntr-o zi data. a fost:
1 2

razvan@anaconda:~/uso/scripting$ last -30 | grep Mon | cut -d -f1 | sort | uniq | wc -l 9

Opt Dintre opt , iunile utile ale comenzii sort amintim: , iuni utile sort duplicatele dupa sortare; -u: elimina (n ordine descrescatoare); -r: sortare inversa

-t:

specicarea separatorului folosit pentru sortare; implicit, sortarea se dupa primul cmp; realizeaza vedea n exemplul de mai jos:

implicit sortarea este alfanumerica, dupa cum se poate -n: sortare numerica;

402

INTRODUCERE N SISTEME DE OPERARE

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

razvan@anaconda:~/uso/scripting$ sort numere.txt -3 10 100 12 15 2101 28 492 5 razvan@anaconda:~/uso/scripting$ sort -n numere.txt -3 5 10 12 15 28 100 492 2101

o coloana Uneori poate aparea Sortare avansata situat , ia n care dorim sortarea dupa avem o miniagenda cu persoane n care intrarile a s , ierului de intrare. Presupunem ca sunt n forma prenume, nume, num ar de telefon, adres a de e-mail s ,i nume (adica dupa a doua coloana). Pentru aceasta vom folosi dorim sortarea dupa comanda:
1 2 3 4 5 6 7 8 9 10 11

razvan@anaconda:~/uso/scripting$ cat nume3.txt Adrian,Munteanu,0711 111 111,am@ex.com Ilinca,Zafiu,0711 111 112,iz@ex.com Andreea,Popa,0711 111 113,ap@ex.com Dan,Badea,0711 111 114,db@ex.com razvan@anaconda:~/uso/scripting$ sort -t , -k 2,2 nume3.txt Dan,Badea,0711 111 114,db@ex.com Adrian,Munteanu,0711 111 111,am@ex.com Andreea,Popa,0711 111 113,ap@ex.com Ilinca,Zafiu,0711 111 112,iz@ex.com

Am folosit argumentul -t pentru a specica virgula ca separator. Pentru sortarea dupa o cheie specica se foloses , te argumentul -k. Acesta specica de la ce cmp se ncepe (n cazul de fat sortarea (aici este vorba de al doilea cmp) s , i cu ce cmp se termina ,a tot 2: -k 2,2). n caz de egalitate, se poate alege un nou cmp de sortare prin specicarea unui nou argument -k.

12.5.3

head, tail

Comenzile head s , i tail sunt utile pentru a ret , ine primele sau ultimele linii dintr-un s , ier primit la intrare. Implicit se ret in primele sau ultimele 10 linii. Exemple de utilizare sunt , prezentate n continuare:
1

razvan@anaconda:~/uso/scripting$ head /etc/passwd

CAPITOLUL 12. SHELL SCRIPTING


2 3 4 5 6 7

403

razvan@anaconda:~/uso/scripting$ tail /etc/passwd razvan@anaconda:~/uso/scripting$ head -n 20 /etc/passwd razvan@anaconda:~/uso/scripting$ tail -n 20 /etc/passwd

respectiv: primele 10 linii din s Comenzile specicate as , eaza , ierul /etc/passwd, ultimele 10 linii, primele 20 de linii, ultimele 20 de linii. pentru inspect Comanda tail este utila Jurnalele sunt de , ia jurnalelor (log-urilor). obicei s iere de mari dimensiuni s i, pentru acestea, de cele mai multe ori este , , vizualizarea ultimelor intrari. sucienta a comenzii tail este -f. Aceasta permite vizualizarea cont O opt , iune utila , inutului unui as scrierea unor noi linii n s s , ier n timp real n sensul ca , teapta , ier s , i as , area acestora a ce acestea sunt adaugate: pe masur
1

root@anaconda:~# tail -f /var/log/apache/access.log

comenzii se ncheie prin apasarea ntreruperea rularii CTRL-C (transmiterea semnalului SIGINT).

12.5.4

cut

pentru a extrage coloane dintr-un s Comanda cut este utila , ier format corespunzator. folosim s s Spre exemplu, daca , ierul prezentat n sect , iunea anterioara , i vrem as , area prenumelui s , i a adresei de e-mail vom folosi comanda:
1 2 3 4 5

razvan@anaconda:~/uso/scripting$ cut -d , -f 1,4 < nume3.txt Adrian,am@ex.com Ilinca,iz@ex.com Andreea,ap@ex.com Dan,db@ex.com

opt Cele doua , iuni cele mai importante ale comenzii cut sunt -d pentru a specica delimitatorul s i -f pentru a preciza cmpurile (coloanele) care se doresc extrase. n , s exemplul de mai sus, separatorul a fost virgula , i s-au ret , inut cmpurile (coloanele) 1 s ,i 4 corespunzatoare prenumelui s i adresei de e-mail. , se dores pentru Daca , te extragerea numelui de utilizator s , i al directorului de baza n /home, vom folosi urmatoarea utilizatorii care au directorul de baza comanda:
1 2 3 4 5 6 7 8

razvan@anaconda:~/uso/scripting$ cat /etc/passwd | grep /home | cut -d : -f1,6 ftp:/home/ftp george:/home/students/george andreic:/home/students/andreic iepurasu:/home/students/iepurasu valentin:/home/students/valentin dhartescu:/home/students/dhartescu ciconaru:/home/students/ciconaru

n /home (cat Comanda de mai sus extrage utilizatorii care au directorul de baza care extrage numele de utilizator s /etc/passwd | grep /home), dupa , i directorul asociat (cut -d : -f 1,6). Separatorul de cmp n /etc/passwd de baza

404

INTRODUCERE N SISTEME DE OPERARE

este :, iar indexurile de cmp corespunzatoare numelui de utilizator s , i directorului de baza sunt 1 s , i 6.

12.5.5

tr

Utilitarul tr (transliterate) este folosit pentru translatarea la nivel de caracter a informat , iilor de la intrare. Act , iuni posibile care pot efectuate cu ajutorul comenzii tr sunt:

translatarea caracterelor,
(squeeze), eliminarea caracterelor care se repeta

s , tergerea de caractere.
Exemple de translatarea caracterelor sunt:
1 2 3 4 5 6 7 8 9 10 11

razvan@anaconda:~/uso/scripting$ tr a b <<<"acadaeaf" bcbdbebf razvan@anaconda:~/uso/scripting$ tr acd xyz <<<"acadaeaf" xyxzxexf razvan@anaconda:~/uso/scripting$ tr a-z A-Z <<<"acadaeaf" ACADAEAF razvan@anaconda:~/uso/scripting$ tr [:lower:] [:upper:] <<<"acadaeaf" ACADAEAF

caracterul a n caracterul b. Sirul n primul exemplu se translateaza este transmis sub de here string. n cel de-al doilea exemplu, avem un set de intrare (acd) s forma , i un set de ies , ire (xyz). Translatarea se face ntre primul element din setul de intrare s , i primul element din setul de ies ire, al doilea element din setul de intrare s i al doilea element din , , literele mari n litere setul de ies , ire etc. Al treilea s , i al patrulea exemplu translateaza mici. a-z simbolizeaza literele de la a la z. De asemenea, expresiile [:lower:] s ,i respectiv, literele mici s [:upper:] reprezinta, i literele mari din alfabet. Utilitarul tr , foloses , te mai multe astfel de expresii. Mai multe detalii putet , i aa din pagina de manual sau info (man tr, info coreutils). sunt urmatoarele: Exemple de eliminare a caracterelor care se repeta
1 2 3 4 5

razvan@anaconda:~/uso/scripting$ tr -s <<< "a a b c

c"

razvan@anaconda:~/uso/scripting$ tr -s a-z A-Z <<< "aa A B C

bb

cc"

la o singura aparit n cazul primului exemplu, caracterul spat , iu este eliminat pna , ie. pentru a specica act Opt , iunea -s este folosita , iunea de eliminare a duplicatelor unui caracter (squeeze). n cel de-al doilea exemplu se foloses , te simultan operat , iunea de translatare s , i de eliminare de duplicate pe s irul de intrare aa bb cc. Rezultatul este transformarea , literelor mici n litere mari simultan cu eliminarea duplicatelor acestora. Stergerea caracterelor se face cu ajutorul opt , iunii -d:

CAPITOLUL 12. SHELL SCRIPTING

405

1 2 3 4 5

razvan@anaconda:~/uso/scripting$ tr -d a <<< abcdcba bcdcb razvan@anaconda:~/uso/scripting$ tr -ds a bcd <<< aabbccddccbbaa bcdcb

Opt , iunea -d primes , te un set de caractere care sunt eliminate. Opt , iunea -d poate de opt completata iunea -s . n cel de-al doilea exemplu se s terge caracterul a din s , , , irul de intrare iar celorlalte caractere le sunt eliminate duplicatele.

12.5.6

wc

Utilitarul wc (word count ) permite contorizarea numarului de linii, de caractere sau de a opt att numarul cuvinte dintr-un s de linii ct , ier text. La o folosire far , iuni, wc as , eaza s i num arul de cuvinte s i caractere: , ,
1 2

razvan@anaconda:~/uso/scripting$ wc < for10.bash 8 24 102

Pentru as de linii, de cuvinte sau de caractere, se folosesc, , area numai a numarului respectiv, opt iunile -l , -w , -c : ,
1 2 3 4 5 6 7 8

razvan@anaconda:~/uso/scripting$ wc -l < for10.bash 8 razvan@anaconda:~/uso/scripting$ wc -w < for10.bash 24 razvan@anaconda:~/uso/scripting$ wc -c < for10.bash 102

12.5.7

grep

n prelucrarea Utilitarul grep s , i variantele sale (egrep, fgrep) sunt utilitarele de baza s , ierelor text. Acest utilitar permite selectarea anumitor linii dintr-un s , ier text pe baza unei expresii regulate transmise ca argument. grep primes te ca parametru s , , irul de dorim sa vedem informat cautare s Daca , i, eventual, s , ierul n care se face cautarea. , ii despre autenticarea utilizatorului adrian n sistem vom folosi comanda:
1 2 3 4

razvan@anaconda:~/uso/scripting$ last | grep adrian adrian pts/2 92.80.182.158 Sun Sep 2 22:30 - 22:38 adrian pts/2 92.80.149.10 Sun Sep 2 09:10 - 09:29 adrian pts/0 92.80.149.10 Sun Sep 2 09:06 - 09:29

(00:07) (00:18) (00:23)

dorim sa as informat Daca nume ncepe cu , am , ii despre utilizatorii din sistem al caror litera a vom folosi comanda:
1 2 3 4 5 6

razvan@anaconda:~/uso/scripting$ cat /etc/passwd | grep ^a alexpoke:x:1003:1003:Poke Alexandu,,,,A & C:/home/alexpoke:/bin/bash adrian:x:1009:1009:Adrian Nistor,,,:/home/adrian:/bin/bash amihaiuc:x:1011:1011:Alex Mihaiuc,,,:/home/amihaiuc:/bin/bash alina:x:1016:1016:Alina Deaconescu,,,:/home/alina:/bin/bash andrewbwm:x:1031:1026:Andrei Buhaiu:/home/students/andrewbwm:/bin/bash

406
7 8

INTRODUCERE N SISTEME DE OPERARE

alexef:x:1032:1026:Alex Eftimie:/home/students/alexef:/bin/bash andreic:x:1045:1026:Andrei Cibotaru:/home/students/andreic:/bin/bash

pentru obt n cazul de fat nume ncepe cu litera a se , a, , inerea utilizatorilor al caror a. Utilizarea ei va duce la selectarea acelor linii care ncep foloses , te expresia regulata nceput de linie). Mai multe detalii cu litera a (caracterul este special s , i simbolizeaza despre expresii regulate grep se gasesc mai jos:

grep este utilizabil cu foarte multe opt, iuni. O parte din cele mai importante sunt exemplicate n continuare pentru s , ierul grep_test.txt:
1 2 3 4 5 6

razvan@anaconda:~/uso/scripting$ cat grep_test.txt alfa beta AlFa BeTa Beta gamma beta delta deltadd epsilon

literele mari (ignore case): opt, iunea -i ignora


1 2 3

razvan@anaconda:~/uso/scripting$ grep -i "alfa" < grep_test.txt alfa beta AlFa BeTa

cautarea liniile care nu cont opt, iunea -v inverseaza (as , eaza , in expresia de cautare):
1 2 3 4 5 6 7 8 9 10

razvan@anaconda:~/uso/scripting$ grep -v "alfa" < grep_test.txt AlFa BeTa Beta gamma beta delta deltadd epsilon razvan@anaconda:~/uso/scripting$ grep -v -i "alfa" < grep_test.txt Beta gamma beta delta deltadd epsilon

numarul opt, iunea -n as liniei: , eaza


1 2

razvan@anaconda:~/uso/scripting$ grep -n "alfa" < grep_test.txt 1:alfa beta

pentru cautarea opt, iunea -w este folosita unui cuvnt ntreg:


1 2

razvan@anaconda:~/uso/scripting$ grep -w "delta" < grep_test.txt beta delta

n structura de directoare: opt, iunea -r face cautare recursiva


1 2 3 4 5 6 7 8

razvan@anaconda:~/uso/scripting$ grep -r "for" . ./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."

s acel Rezultatul dat de utilizarea acestei opt , iuni prezinta , ierele n care s-a gasit s s complete din s , ir/expresie regulata , i linia completa/liniile , iere.

CAPITOLUL 12. SHELL SCRIPTING Expresii regulate grep

407

cum s-a observat, grep foloses Dupa care poate avea forma unei , te un s , ir de cautare expresii regulate. este un s O expresie regulata , ir de caractere utilizat pentru a se potrivi cu un alte s , iruri de caractere conform unor reguli de sintaxa bine precizate. O expresie regulata cont , ine caractere simple s , i caractere cu semnicat , ie speciala. sunt prezentate O parte din caracterele/gruparile de caractere cu semnicat , ie speciala n continuare:

Caracterele [] sunt folosite pentru a deni un set de caractere de potrivit; exemple:


potrivire cu oricare din caracterele a, b, c, d; [abcd] nseamna potrivire cu oricare minuscula; [a-z] nseamna potrivire cu orice caracter alfanumeric; [0-9a-zA-Z] nseamna potrivire cu orice caracter mai put [A-Z] nseamna , in majusculele. orice caracter; Caracterul . nseamna potrivire cu Caracterul pozit, ionat n afara unui set de caractere nseamna nceputul liniei; potrivire cu sfrs Caracterul $ nseamna , itul liniei;

Simbolurile \<, respectiv \> sunt folosite pentru a se potrivi cu s , irul vid de la
nceput s , i sfrs , it de cuvnt;

Simbolul ?

potrivire de cel mult o data a caracterului/grupului de nseamna caractere anterioare;

potrivire de zero sau mai multe ori a caracterului/grupului de Simbolul * nseamna caractere anterioare; potrivire de o data sau mai multe ori a caracterului/grupului Simbolul + nseamna de caractere anterioare; potrivire de n ori; {n} nseamna potrivire de cel put {n,} nseamna , in n ori; potrivire de cel put {n,m} nseamna , in n ori s , i cel mult m ori. Caracterele/grupurile de caractere prezentate mai sus pot concatenate pentru generarea unei expresii regulate complexe. , i n Informat , ii complete despre comenzile de ltrare de text folosite n shell scripting gasit paginile info asociate (info coreutils).

408

INTRODUCERE N SISTEME DE OPERARE

12.5.8

sed

textuale unui ux de Utilitarul sed (stream editor) este folosit pentru a aplica transformari operat dupa care date. n mod implicit, cites , te de la intrare o linie, aplica , ia specicata, linia modicata. as , eaza un set de operat sed poate considerat un editor non-interactiv. Acesta aplica , ii ecarei linie, prelucrarea se linii din s , ierul de la intrare. ntruct n memorie se ret , ine o singura poate face pe un s ier cu un num ar arbitrar de linii. , Pentru a exemplica modul de utilizare a sed vom folosi urmatorul s , ier de lucru:
1 2 3 4 5 6 7

razvan@anaconda:~/uso/scripting$ cat sed_ex.txt Andreea Popescu Alin Ionescu Mihai Francu Calin Antonescu Silvia Asavei Doina Ignat

Sintaxa de rulare Un exemplu obis , nuit de rulare a sed este nlocuirea unui text cu un altul:
1 2 3 4

razvan@anaconda:~/uso/scripting$ sed s/Alin/ALIN/ sed_ex.txt Andreea Popescu ALIN Ionescu [...]

cum se observa, sintaxa de rulare sed este: Dupa


1

sed comenzi fisier_intrare

n cazul n care s , 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. liniile de la intrare la ies n mod implicit, sed as , eaza , ire. Pentru a dezactiva acest lucru se foloses , te opt , iunea -n.

Sintaxa comenzi sed cum s-a putut observa s sed are sintaxa Dupa , i la exemplele anterioare, o comanda [adres a][functie][argumente]. funct Adresa denes , te spat , iul din s , ier la care se aplica , ia. Adresa poate o linie a s ierului, un spat iu de linii sau o expresie ce identic a linia. n acest fel: , ,

1 s/a/A/ nlocuies , te litera a cu A n prima linie a s , ierului; 1,10 s/a/A/ nlocuies , te litera a cu A n primele zece linii ale s , ierului;
la sfrs 100,$ s/a/A/ nlocuies , te litera a cu A de la linia 100 pna , itul s , ierului;

/alfa/ s/a/A/ nlocuies , te litera a cu A numai n liniile n care apare s , irul alfa.

CAPITOLUL 12. SHELL SCRIPTING Funct , ii sed Funct , iile cele mai utile sed sunt prezentate n continuare.

409

n exemplele anterioare. Funct , i a fost folosita , ia de substitut , ie (s) a lui sed este s s Aceasta foloses Separatorul folosit , te ca argumente s , irul de nlocuit s , i cel nlocuitor. implicit este / (slash), dar se poate folosi oricare altul:
1

s/sir_de_inlocuit/sir_inlocuitor/optiuni

Opt , iuni utile ale funct , iei de substitut , ie sunt:

g (global ) nlocuies , te toate aparit , iile s , irului de nlocuit


linia la ies p (print ) as , eaza , ire; folosit, de obicei, n conjunct , ie cu opt , iunea -n pentru sed

w (write) scrie linia ntr-un s , ier primit ca parametru


Funct , te citirea de la intrare a s , ierului. Exemple de folosire sunt as , area , ia quit (q) opres primelor N linii din s , ierul de la intrare:
1 2 3

razvan@anaconda:~/uso/scripting$ sed 2q sed_ex.txt Andreea Popescu Alin Ionescu

la gasirea sau as s , area primelor linii pna , irului Calin:


1 2 3 4 5

razvan@anaconda:~/uso/scripting$ sed /Calin/q sed_ex.txt Andreea Popescu Alin Ionescu Mihai Francu Calin Antonescu

respectiv s Funct , eaza, , terg linia de la intrare la ies , ire. , iile print s , i delete (p s , i d) as

Expresii regulate n sed pe intrare n format text, Funct ntruct sed lucreaza , iile sed pot avea argumente. argumentele pot exprimate ca expresii regulate. Acestea sunt similare cu expresiile n regulate grep (vezi sect , iunea 12.5.7). Mai multe detalii despre acestea putet , i gasi pagina info sed, folosind comanda:
1

info sed "Regular Expressions"

Exemple cteva exemple de utilizare a comenzii sed: Mai jos se pot regasi

translatarea unui s , ier n format DOS (CR/LF) n format Unix:


1

sed s/.$//

ca se elimina ultimul caracter de la sfrs Se observa , itul liniei (n cazul de fat ,a caracterul \r Carriage Return)

410

INTRODUCERE N SISTEME DE OPERARE

translatarea unui s , ier n format Unix n format DOS:


1

sed s/$/\r/

la sfrs Se adauga , itul liniei caracterul \r.

as , area tuturor liniilor mai put , in ultimele 100:


1

sed 1,2800d

s , tergerea spat , iilor albe de la nceputul liniilor unui s , ier:


1

sed s/[ \t]*//

s , tergerea spat , iilor albe de la sfrs , itul liniilor de s , ier:


1

sed s/[ \t]*$//

s , tergerea liniilor goale:


1

sed s/^[ \t]*$//

as (emulare grep): , area liniilor care cont , in un s , ir de cautare


1

sed -n /regex/p

as , area ntr-un s , ier a liniilor care cont , in un anumit s , ir:


1

sed /regex/w out.txt

nlocuim numele cu substitut, ia de coloane; n s , ierul de exemplu vrem sa prenumele:


1 2 3 4 5 6 7

razvan@anaconda:~/uso/scripting$ sed s/\([a-zA-Z]*\) \([a-zA-Z]*\) /\2 \1/ sed_ex.txt Popescu Andreea Ionescu Alin Francu Mihai Antonescu Calin Asavei Silvia Ignat Doina

n exemplul de mai sus se foloses , te construct , ia \(regex\) pentru a stoca valoarea expresiei regulate. Aceste valori sunt folosite, respectiv, cu ajutorul construct n situat , iilor \1, \2, \3 etc. , ia de mai sus, numele este ret , inut n construct ia \2 iar prenumele n \1 . As area se face n formatul nume prenume. , ,

12.5.9

awk

awk este un utilitar s , i un limbaj de programare folosit pentru prelucrarea textului pe mai multe versiuni de awk, versiunea cea mai ntlnita pe sisteme sisteme Unix. Exista 1 aseman atoare Linux ind implementarea GNU, gawk . Limbajul awk are o sintaxa cu limbajul C care permite operat , ii avasate pentru formatarea s , ierului text. Denumirea awk provine de la init ialele celor care au proiectat limbajul: Alfred V. Aho, Peter J. Weinberger , s , i Brian W. Kernighan.
1

http://www.gnu.org/software/gawk/

CAPITOLUL 12. SHELL SCRIPTING

411

awk poate folosit ca o versiune avansata a utilitarului cut. n forma sa cea mai simpla, Daca, spre exemplu, se dores , te doar extragerea numelui de utilizator s , i a directorului home folosind s ierul /etc/passwd urm atoarele dou a comenzi sunt echivalente: ,
1 2 3

razvan@valhalla:~/carte-uso.git$ cut -d : -f 1,6 /etc/passwd razvan@valhalla:~/carte-uso.git$ awk -F : { print $1,":",$6;} /etc/ passwd

Comenzile de mai sus ret linii din s , in primul s , i al s , aselea cmp al ecarei , ierul /etc/ separatorul folosit. passwd folosind separatorul :. Opt, iunea -F a awk precizeaza Argumentele $1, respectiv $6 sunt folosite pentru extrage primul s i , al s , as , elea cmp. de cut este posibilitatea formatarii ies Un avantaj important al awk fat ,a , irii. n vreme ce anumite coloane, awk permite s cut selecteaza , i prelucrarea ies , irii selectate. Astfel, dorim ca informat daca ii as ate s a e ncadrate de caracterul | (pipe), se va folosi , , urmatoarea comanda:
1 2 3 4 5 6 7 8 9

razvan@valhalla:~/carte-uso.git$ awk -F : { printf "|%-15s|%-25s|\n", $1, $6;} /etc/passwd |root |/root | |daemon |/usr/sbin | |bin |/bin | |sys |/dev | |sync |/bin | |games |/usr/games | |man |/var/cache/man | [...]

n exemplul de mai sus are o sintaxa similara celei din C, Instruct , iunea printf folosita cu absent a parantezelor. , sintaxei sed: Sintaxa awk este similara
1

awk [options] program instructions [input file]

de la intrare. awk permite n general, programul awk este aplicat ecarei linii citita folosirea clauzelor speciale BEGIN s i END care permit aplicarea instruct , , iunilor asociate doar la nceputul s Astfel, pentru a ncadra ies , i sfrs , itul prelucrarii. , irea de mai sus, se foloses te o comand a ca cea de mai jos. Programul se poate introduce pe mai multe , la nchiderea acestuia folosind caracterul (apostrof): linii, pna
1 2 3 4 5 6 7 8 9 10 11 12 13 14

razvan@valhalla:~/carte-uso.git$ awk -F : > BEGIN { printf "+---------------+-------------------------+\n"; } > { printf "|%-15s|%-25s|\n", $1, $6; } > END { printf "+---------------+-------------------------+\n"; } > /etc/passwd +---------------+-------------------------+ |root |/root | |daemon |/usr/sbin | |bin |/bin | |sys |/dev | [...] |pulse |/var/run/pulse | |saned |/home/saned | +---------------+-------------------------+

412

INTRODUCERE N SISTEME DE OPERARE

se dores awk foloses , te instruct , iuni s , i comenzi similare limbajului C. Daca , te as , 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 | +---------------+-------------------------+

cont programul awk, prezentat n Opt , iunea -f permite selectarea s , ierul care sa , ina listingul 12.5.9. Variabila current_users ret de utilizatori curent. Este , ine numarul init ializat a cu 0 la nceputul prelucr arii (n cadrul blocului BEGIN) s , , i apoi este pe parcursul prelucrarii liniilor. Se foloses incrementata , te instruct , iunea if pentru a selecta doar anumit i utilizatori. ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14

#!/usr/bin/awk -f BEGIN { current_users = 0; printf "+---------------+-------------------------+\n"; } { current_users++; if (current_users % 5 == 1) printf "|%-15s|%-25s|\n", $1, $6; } END { printf "+---------------+-------------------------+\n"; }

Listing 12.1: As , are utilizatorilor din 5 n 5 awk permite folosirea expresiilor regulate pentru selectarea doar anumitor linii. Astfel, se dores daca , te as , area doar acelor utilizatori care au directorul home n /home se foloses , te un program ca cel prezentat n listingul 12.2. Expresiile regulate se scriu ntre acestui program este: caractere / (slash) similar utilitarului sed. Rezultatul rularii
1 2 3 4 5 6 7 8 9 1 2

razvan@valhalla:~/carte-uso.git$ awk -F : -f print-home-users.awk /etc/ passwd +---------------+-------------------------+ |razvan |/home/razvan | |festival |/home/festival | |ntp |/home/ntp | |alina |/home/alina | |ftp |/home/ftp | |saned |/home/saned | +---------------+-------------------------+ #!/usr/bin/awk -f

CAPITOLUL 12. SHELL SCRIPTING


3 4 5 6 7 8 9 10 11

413

BEGIN { printf "+---------------+-------------------------+\n"; } /\/home/ { printf "|%-15s|%-25s|\n", $1, $6; } END { printf "+---------------+-------------------------+\n"; }

Listing 12.2: As , are utilizatori /home

daca ecare linie cont n listingul 12.2 se verica , ine s , irul /home. De fapt, funct , ionarea a programului se bazeaza doar pe vericarea faptului ca as cont corecta , asea coloana , ine cum este prezentat n s Acest lucru se poate realiza us , irul /home. , or n awk, dupa listingul 12.8.1. Construct ia $6 ~ /^\/home/ veric a dac a al s , , aselea cmp al unei linii ncepe cu s , irul /home.
1 2 3 4 5 6 7 8 9 10 11

#!/usr/bin/awk -f BEGIN { printf } $6 ~ /^\/home/ printf } END { printf } "+---------------+-------------------------+\n"; { "|%-15s|%-25s|\n", $1, $6;

"+---------------+-------------------------+\n";

Listing 12.3: As , are utilizatori /home folosind expresii regulate

de comanda cut este folosirea unei Un alt avantaj important al comenzii awk fat ,a expresii regulate pe post de separator. Opt , iunea -F a awk primes , te ca argument o care este folosita pentru a separa cmpurile unei linii. Urmatoarele expresie regulata comenzi, pentru determinarea adresei hardware a interfet doua , ei eth0 sunt echivalente:
1 2 3 4 5 6

razvan@valhalla:~/carte-uso.git$ /sbin/ifconfig eth0 | head -1 | tr -s | cut -d -f 5 00:1d:09:b4:0c:26 razvan@valhalla:~/carte-uso.git$ /sbin/ifconfig eth0 | head -1 | awk -F [ \t]+ { print \$5; } 00:1d:09:b4:0c:26

[ \t]+ specica faptul ca orice set de spat Expresia regulata , ii albe (caractere blank sau TAB) va folosit ca separator. un set mult mai amplu de funct , i. Mai multe detalii despre acestea s awk ofera , ionalitat ,i 1 , i n manualul Gawk . despre cazuri posibile de utilizare gasit
1

http://www.gnu.org/software/gawk/manual/

414

INTRODUCERE N SISTEME DE OPERARE

12.6

Comenzi de lucru cu s , iere

Comenzile de lucru cu s n sistemul de s , iere sunt comenzi care permit cautarea , iere s i executarea unor act iuni pentru s ierele c autate. Comenzile prezentate n aceast a , , , sect , iune sunt xargs, locate s , i find.

12.6.1

xargs

Comanda xargs permite transmiterea de argumente unei alte comenzi, argumente ce avem un s pot trimise de la intrarea standard. Spre exemplu, daca , ier ce cont , ine o s le s lista , iere pe care dorim sa , tergem (cte unul pe linie), vom folosi comanda: xargs rm < file.txt ca n exemplul de mai jos
1 2 3 4 5 6 7 8 9 10 11

razvan@anaconda:~/uso/scripting$ cat file.txt tmp1.txt tmp2.txt tmp3.txt razvan@anaconda:~/uso/scripting$ ls tmp* tmp1.txt tmp2.txt tmp3.txt razvan@anaconda:~/uso/scripting$ xargs rm < file.txt razvan@anaconda:~/uso/scripting$ ls tmp* ls: tmp*: No such file or directory

n exemplu, s tmp1.txt, tmp2.txt, , ierul le cont , inea trei nume de s , ier: rm. Argumentele pentru rm sunt citite de la tmp3.txt. Folosind xargs se invoca intrarea standard n care a fost redirectat s , ierul file.txt. Rezultatul este s , tergerea s , ierelor tmp1.txt, tmp2.txt s , i tmp3.txt precizate n s , ierul le.txt. un utilizator dores Daca , te as , area s , ierelor ce cont , in s , irul for va utiliza comanda:
1

ubuntu@ubuntu:~$ grep -l for *

sau
1

ubuntu@ubuntu:~$ ls | xargs grep -l for

se dores La fel, daca , te generarea unei liste a utilizatorilor n sistem se poate utiliza comanda:
1 2

razvan@anaconda:~/uso/scripting$ cut -d : -f 1 < /etc/passwd | sort | tr -s \n Debian-exim adrian alexef alexpoke alina amihaiuc [...]

sau
1 2

razvan@anaconda:~/uso/scripting$ cut -d : -f 1 < /etc/passwd | sort | xargs echo Debian-exim adrian alexef alexpoke alina amihaiuc [...]

Opt , iuni utile pentru xargs sunt: pentru a specica delimitatorul de parametri; implicit acesta este -d este folosita orice caracter alb (whitespace); n exemplul de mai jos se s , terg s , ierele tmp1.txt, tmp2.txt s i tmp3.txt : ,

CAPITOLUL 12. SHELL SCRIPTING

415

1 2 3 4 5 6 7 8

razvan@anaconda:~/uso/scripting$ cat file2.txt tmp1.txt,tmp2.txt,tmp3.txt razvan@anaconda:~/uso/scripting$ ls tmp* tmp1.txt tmp2.txt tmp3.txt razvan@anaconda:~/uso/scripting$ xargs -d , rm < file2.txt rm: cannot remove \n: No such file or directory

se interpreteaza caracterul newline (\n) Ultima linie apare ca urmare a faptului ca ca un argument posibil.

-0 impune folosirea ca delimitator de argument a nul-terminatorului de sir (\0);


acest lucru este util n momentul n care parametrii cont , in caractere speciale cu argumentul -print0 (blank, backslash etc.); este folosit, de obicei, mpreuna la find, precum este descris n sect , iunea 12.6.3.

-I permite folosirea unui s , ir care va substituit pe parcursul comenzii cu


argumentul primit la intrare; n urmatorul exemplu, s , ierele primite la intrare sunt copiate cu extensia .bkup n /tmp:
1 2 3 4 5 6 7 8 9

razvan@anaconda:~/uso/scripting$ cat file3.txt for10.bash for10_seq.bash for10_exp.bash razvan@anaconda:~/uso/scripting$ xargs -I abc cp abc /tmp/abc.bkup < file3.txt razvan@anaconda:~/uso/scripting$ ls /tmp/*.bkup /tmp/for10.bash.bkup /tmp/for10_exp.bash.bkup /tmp/for10_seq.bash. bkup

ca s-a folosit s Se observa , irul abc ca s , ir de substituit (prin intermediul opt , iunii de xargs, acesta a fost nlocuit -I). La aparit, ia acestui s , ir n comanda folosita cu parametrul de la intrare (n cazul nostru ecare din cele trei s , iere). Astfel, comanda
1

ubuntu@ubuntu:~$ xargs -I abc cp abc /tmp/abc.bkup

cu este echivalenta
1 2 3 4 5

ubuntu@ubuntu:~$ cp for10.bash for10.bash.bkup ubuntu@ubuntu:~$ cp for10.bash for10_seq.bash.bkup ubuntu@ubuntu:~$ cp for10.bash for10_exp.bash.bkup

12.6.2

locate

Comanda locate permite localizarea de s nume corespunde unui anumit , iere al caror de date construita cu s ablon transmis ca parametru. Comanda locate foloses te o baza , , ajutorul comenzii updatedb. Un exemplu este prezentat n continuare:

416

INTRODUCERE N SISTEME DE OPERARE

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

razvan@anaconda:~/uso/scripting$ time locate strace /usr/bin/strace /usr/share/doc/strace /usr/share/doc/strace/changelog.Debian.gz /usr/share/doc/strace/changelog.gz /usr/share/doc/strace/copyright /usr/share/doc/strace/TODO.gz /usr/share/man/man1/strace.1.gz /usr/share/vim/vim70/syntax/strace.vim /var/lib/dpkg/info/strace.list real user sys 0m0.288s 0m0.284s 0m0.004s

cum se vede comanda locate este foarte rapida ntruct foloses Dupa , te baza de date anterior de updatedb. ntruct este posibil ca anumite s generata/actualizat a , iere sa fost s , terse de la ultima actualizare, se poate folosi opt , iunea -e pentru a as , a doar n sistem dintre cele cunoscute: s , ierele care exista
1 2 3 4 5 6

razvan@anaconda:~/uso/scripting$ locate -e strace /usr/bin/strace /usr/share/doc/strace /usr/share/doc/strace/changelog.Debian.gz /usr/share/doc/strace/changelog.gz [...]

mpreuna cu xargs: Comanda locate este de multe ori folosita


1 2

3 4

razvan@anaconda:~/uso/scripting$ locate -e strace | xargs file /usr/bin/strace: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.1, dynamically linked ( uses shared libs), for GNU/Linux 2.4.1, stripped /usr/share/doc/strace: directory /usr/share/doc/strace/changelog.Debian.gz: gzip compressed data, was " changelog.Debian", from Unix, last modified: Fri Oct 27 00:22:12 2006, max compression [...]

12.6.3

nd

utilizata pentru cautarea Comanda find este principala comanda n sistemul local de o cautare n structura de directoare s s recursiva , iere. Comanda realizeaza , i descopera n sistemul de s condit acele intrari , iere care satisfac o anumita , ie. Suplimentar, comanda find permite executarea unei act, iuni specice. dect a altor comenzi s Sintaxa find este mai complexa , i o vom prezenta dupa urmatorul exemplu:
1 2 3 4 5 6 7

razvan@anaconda:~$ find /usr/include/ -type f -name *term*.h -print /usr/include/asm-generic/termios.h /usr/include/linux/termios.h /usr/include/asm/termbits.h /usr/include/asm/termios.h /usr/include/bits/termios.h /usr/include/sys/termios.h

CAPITOLUL 12. SHELL SCRIPTING


8 9 10

417

/usr/include/termio.h /usr/include/termios.h [...]

recursiv n /usr/include s n exemplul de mai sus, se cauta , ierele (-type f) al acele s caror nume corespunde expresiei regulate *term*.h s i se as , , eaza , iere (-print). Astfel, sintaxa find este
1

find director optiuni_potrivire actiuni

unde: director este directorul n care se face cautarea (recursiv); optiuni_potrivire sunt opt, iuni de cautare n sistemul de s , iere (adncimea arii, tipul intrarii, nume, det caut permisiuni etc.); , inator, act actiuni reprezinta ntreprinse n momentul gasirii unei intrarii , iunile este -print (de as corespunzatoare; act , iunea implicita , are). Opt , iuni de potrivire utile sunt: cu ajutorul opt tipul intrarii se precizeaza astfel, -type f , iunii -type; un s un director, -type l nseamna o nseamna , ier, -type d nseamna a simbolica etc.; exemplu: legatur utilizatorului curent:
1 2 3 4 5 6 7 8

as simbolice din ierarhia , area legaturilor

razvan@anaconda:~$ find /home/razvan/public_html/ -type l /home/razvan/public_html/pub/books /home/razvan/public_html/pictures /home/razvan/public_html/movies /home/razvan/public_html/games /home/razvan/public_html/wiki /home/razvan/public_html/school/uso/cursuri [...]

se precizeaza cu ajutorul opt de o expresie numele intrarii , iunii -name urmata descriind numele; opt pentru potrivire regulata , iunea -wholename este folosita (cale absoluta); exemplu: as cu numele complet al intrarii , area directoarelor ce cont , in calea c++:
1 2 3 4 5 6 7 8

razvan@anaconda:~$ find /usr/include/ -type d -wholename */c++/* /usr/include/c++/4.1.2 /usr/include/c++/4.1.2/backward /usr/include/c++/4.1.2/bits /usr/include/c++/4.1.2/debug /usr/include/c++/4.1.2/ext /usr/include/c++/4.1.2/ext/pb_assoc [...]

cu ajutorul opt permisiunile se precizeaza , 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: as area executabilelor suidate de sistem: , , ,
1 2 3

razvan@anaconda:~$ find /bin -perm 4755 /bin/su /bin/mount

418
4 5 6

INTRODUCERE N SISTEME DE OPERARE


/bin/umount /bin/ping /bin/ping6

cu ajutorul opt timpul ultimului acces sau a ultimei modicari , iunilor -amin, ca s -atime, -mmin, -mtime; -amin 20 nseamna ierul a fost accesat n , cu 20 de minute, -amin -20 nseamna ca s urma , ierul a fost accesat n urma ca s cu cel mult 20 de minute, -amin +20 nseamna , ierul a fost accesat n cu cel put cu urma , in 20 de minute; exemplu: aarea s , ierelor modicate n urma mai mult de 100 de zile:
1

razvan@anaconda:~$ find /home/razvan/ -type f -mtime +100

spat, iul ocupat pe disc cu ajutorul opt, iunii -size; -size +10M va selecta s , ierele
mai mult de 10 MB; exemplu: aarea s mai mult de care ocupa , ierelor care ocupa 200 MB:
1

razvan@anaconda:~$ find /home/razvan/ -size +200M

det, inatorul s , ierului cu ajutorul opt , iunii -user;

grupul s , ierului cu ajutorul opt , iunii -group.


Act , iunile ce pot ntreprinse cu ajutorul comenzii find sunt: act as , area s , ierului se face folosind -print; aceasta , iune este implicita;

as , area s , ierelor folosind nul-terminatorul ca separator folosind -print0; n combinat opt , iunea este utila , ie cu argumentul -0 la xargs; exemplu: mutarea s ierelor .iso pe o nou a partit , , ie:
1

ubuntu@ubuntu:~$ find . -type f -name *.iso -print0 | xargs -0 -I abc mv abc /mnt/hda6

s , tergerea s , ierului cu ajutorul -delete; exemplu: s , tergerea s , ierelor temporare


din ierarhia utilizatorului local:
1

razvan@anaconda:~$ find . -type f -name *~ -delete

execut, ia unei comenzi precizate de utilizator cu ajutorul opt, iunii -exec; s , irul {} gasite exec; comanda este utilizat pentru nlocuirea intrarii n comanda de dupa se termine cu ; (punct s trebuie sa i virgul a); se recomand a ca att s , , irul {} ct e citate pentru a preveni interpretarea lor ca nis s , i caracterul ; sa , te caractere
speciale; exemple: crearea unei copii pentru s , ierele mai vechi de 1 an din directorul curent:
1

razvan@anaconda:~/uso/scripting$ find . -type f -mtime +365 exec cp {} /tmp/{}.bkup ;

adaugarea dreptului de execut , ie pentru toate directoarele:


1

razvan@anaconda:~/uso/scripting$ find . -type d -exec chmod a+x {} ;

funct as , area s , ierelor C n care este denita , ia main:


1

razvan@anaconda:~$ find school/2001-2006_code/ -type f -name *. c -exec grep -l int main* {} ;

CAPITOLUL 12. SHELL SCRIPTING

419

Act cu nd pot executate cu ajutorul opt , iuni asupra s , ierelor gasite , iunii -exec sau prin folosirea xargs.

Exemple n continuare sunt prezentate cteva exemple utile de lucru cu find: care folosesc funct editarea s , ierelor .c din ierarhia curenta , ia printf:
1

razvan@anaconda:~$ vi $(find school/2001-2006_code/ -type f -name *.c -exec grep -l -w printf {} ;)

arhivarea s , ierelor mai vechi de 30 de zile:


1

razvan@anaconda:~/uso/scripting$ find . -depth -type f -mtime 30 | tar --files-from=- --null -czf out.tgz

s , tergerea s , ierelor utilizatorului local din /tmp:


1

razvan@anaconda:~/uso/scripting$ find /tmp -type f -user $(whoami) delete

Informat n paginile info asociate , ii complete de comenzile de lucru cu s , ierele se gasesc (info find).

12.7

Expandarea n shell

De-a lungul sect , iunilor anterioare s-au prezentat diferite metode de expandare n shell. Expandarea unei variabile la valoarea ei, expandarea unei comenzi, expandare Sect ofera o recapitulare structurata a acestor mecanisme. aritmetica. , iunea de fat ,a

12.7.1

Simbolul $

Simbolul $ este folosit pentru expandarea unei variabile, comenzi sau expresii s ,i posibilitatea transmiterii rezultatului acesteia. Caracterul are o semnicat , ie speciala, drept pentru care va trebui citat (folosind ghilimele, apostrof, backslash) n cazul n care se dores , te folosirea sa literala.

Variabile are un nume s nu are tip n O variabila , i o valoare. As , a cum s-a specicat, o variabila ca numar sau ca s shell. Poate interpretata , ir n funct , ie de situat , ie. Spre exemplu, n eroare: niciunul din cazurile de test de mai jos nu se genereaza
1 2 3 4 5

razvan@anaconda:~/uso/scripting$ b=3 razvan@anaconda:~/uso/scripting$ test "a" = $b razvan@anaconda:~/uso/scripting$ test 1 -eq $b

420

INTRODUCERE N SISTEME DE OPERARE

Numele variabilei poate ncadrat ntre acolade. Acestea sunt opt , iunale dar sunt utile pentru a proteja numele variabilei de caracterele urmatoare. n exemplul de mai jos altfel nu ar fost as utilizarea acoladelor duce la as , area dorita, , at nimic, variabila ba neind init , ializata:
1 2

razvan@anaconda:~/uso/scripting$ echo ${b}a 3a

asupra variabilei: Folosind caracterul $ se pot face diverite expandari determinarea numarului de litere compun variabila:
1 2 3 4

razvan@anaconda:~/uso/scripting$ var="alfanumeric" razvan@anaconda:~/uso/scripting$ echo ${#var} 11

port, iuni din numele variabilei:


1 2 3 4 5

razvan@anaconda:~/uso/scripting$ echo ${var:3} anumeric razvan@anaconda:~/uso/scripting$ echo ${var:3:6} anumer

Expandarea unei comenzi executarea acesteia s Expandarea unei comenzi nseamna , i ret , inerea rezultatului moduri: comenzii. Acest lucru se poate face n doua
1

$(comanda)

sau
1

comanda

pe tasta cu ~ de lnga tasta 1) Rezultatul (caracterul folosit este backquote se aa s unei comenzi poate ret , inut ntr-o variabila , i folosit ulterior.

Expandarea aritmetica presupune evaluarea unei expresii s Expandarea aritmetica , i ret , inerea rezultatului acesteia. Pentru aceasta se foloses sub forma $(( , te operatorul $((...)) expresie )). nu este nevoie de ret Daca , inerea rezultatului se poate folosi operatorul ((...))
1 2 3 4 5 6

razvan@anaconda:~/uso/scripting$ a=1 razvan@anaconda:~/uso/scripting$ ((a++)) razvan@anaconda:~/uso/scripting$ echo $a 2

CAPITOLUL 12. SHELL SCRIPTING

421

12.7.2

Expresii regulate n shell

Shell-ul permite interpretarea expresiilor regulate pentru a permite expandarea numelor de s , iere. Construct , iile care permit expandarea numelor de s , iere sunt:

acoladele {} permit precizarea unor opt, iuni pentru expandare; astfel, expresia {a,b,c}.d se va expanda la a.d b.d c.d;
expandarea la orice s toate s * nseamna , ir de caractere; astfel *.c nseamna , iere toate s care au extensia .c, iar a*.c reprezinta , ierele care ncep cu litera a s , i se n .c; termina potrivirea cu un singur caracter (oricare ar acela); ? nseamna

[ ...

] permit specicarea unei clase de caractere; astfel, [a-z] nseamna literele de la a la d, de la A la D sau cifrele de litere mici [a-d0-3A-D] nseamna orice mai put la 0 la 3; [a-z] nseamna , in literele de la a la z.

Exemple de utilizare a expresiilor regulate shell sunt prezentate n continuare:

as , area tuturor s , ierelor C din directorul curent:


1

ubuntu@ubuntu:~$ ls *.c

as , area tuturor s , ierelor de tip png, jpg sau gif:


1

ubuntu@ubuntu:~$ ls *.{png,jpg,gif}

as nume ncepe cu 3 cifre: , area tuturor s , ierelor al caror


1

ubuntu@ubuntu:~$ ls [0-9][0-9][0-9]*

12.8

Parametrii unui script shell

La fel ca orice alt program, un script shell poate primi argumente n linia de comanda. Acestea pot folosite pentru a oferi un mod de congurare a scriptului n momentul execut , iei. accesul la argumentele n linia de comanda este prin n C, modul n care se realizeaza numarul intermediul variabilelor argc s Astfel, variabila argc indica de , i argv. (incluznd numele executabilului), iar argv este argumente primite n linia de comanda vectorul de argumente: argv[0] este numele executabilului, argv[1] numele primului argument, argv[argc-1] este ultimul argument. prin intermediul variabilei $#, n Bash, accesul la argumente se realizeaza reprezentnd numarul de argumente, s reprezentnd , i al variabilelor $1, $2 etc. argumentele efective. Ca exemplu, vom folosi scriptul de mai jos, care nu face altceva as dect sa , eze argumentele primite:
1 2 3 4

razvan@anaconda:~/uso/scripting$ cat -n args.bash 1 #!/bin/bash 2 3 echo "Scriptul are $# argumente."

422
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

INTRODUCERE N SISTEME DE OPERARE


4 5 6 7 8 9 10 11 12 echo "Numele scriptului este $0." echo "Argumentele scriptului sunt $@." i=1 while test $i -le $#; do echo "Argumentul $i este ${!i}." ((i++)) done

razvan@anaconda:~/uso/scripting$ bash args.bash alfa beta gamma delta Scriptul are 4 argumente. Numele scriptului este args.bash. Argumentele scriptului sunt alfa beta gamma delta. Argumentul 1 este alfa. Argumentul 2 este beta. Argumentul 3 este gamma. Argumentul 4 este delta.

variabila argc numara n cazul exemplului de mai sus, se trimit 4 argumente. Daca doar argumentele. Variabila $0 cont inclusiv executabilul, variabila $# contorizeaza , 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 (linia 9) s (linia 10). Se observa ca am folosit construct comanda , i se as , eaza , ia $!i, pentru a expanda variabila i s i apoi variabila care reprezint a argumentul primit din linia , de comanda. ar fost Un al mod de a realiza parcurgerea argumentelor primite n linia de comanda 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, numele de parametri pozit poarta ionali. ,

12.8.1

Comanda shift

cum i spune numele, este folosita la deplasarea argumentelor Comanda shift, dupa n parametri pozit din linia de comanda , ionali. n exemplul de mai jos, se face parcurgerea parametrilor pozit ionali folosind comanda shift: ,
1 2 3 4 5

i=1 while ! test -z $1 ; do echo "Argumentul $i este $1." ((i++)) shift

CAPITOLUL 12. SHELL SCRIPTING


6

423

done

cu deplasarea spre stnga a argumentelor unui Comanda shift este responsabila rularea comenzii shift, se pierde informat script shell. Astfel, dupa , ia despre primul al doilea argument, variabila argument, variabila $# scade cu 1, variabila $1 reprezinta al treilea argument etc. $2 reprezinta Comanda shift poate primi un argument reprezentnd contorul de deplasare. Implicit a argument) acesta este 1. (far

12.8.2

Parametri speciali

cum a fost prezentat anterior, exista variabile speciale folosite de shell pentru Dupa prelucrarea argumentelor n linia de comanda: numarul $# reprezinta de argumente din linia de comanda; numele scriptului shell; $0 reprezinta argumentele din linia de comanda; $1, $2, ..., $N reprezinta lista de argumente separate prin spat $@ reprezinta , ii. ct n afara acestor variabile mai exista , iva parametri speciali, prezentat , i n continuare: valoarea de retur a ultimei comenzi; $? reprezinta pid-ul procesului bash curent; $$ reprezinta pid-ul ultimului proces lansat n fundal. $! reprezinta

12.8.3

Exemplu de utilizare a parametrilor

us Un exemplu util este un script shell care sa , ureze lucrul cu comanda find n momentul cautarii unor s , iere dupa nume. Scriptul este prezentat n continuare:
1 2 3 4 5 6 7 8 9 10 11 12 13

#!/bin/bash if test $# -ne 2; then echo "Two arguments are required." exit 1 fi if ! test -d $1; then echo "First argument is not a directory." exit 1 fi find "$1" -type f -name "$2"

Listing 12.4: Fis , ierul myfind.bash


1 2 3 4

razvan@anaconda:~/uso/scripting$ bash myfind.bash . "*.bash" ./while10.bash ./hw.bash ./for_ls.bash

424
5 6 7 8

INTRODUCERE N SISTEME DE OPERARE

./service_ip.bash ./while_cat.bash ./rss.bash [...]

ca se transmit ca argumente directorul n care se face cautarea Se observa s , i expresia numarul regulata asociata numelui s , ierului. n afara apelarii find (linia 13), se verica primul argument este un director (liniile 8-11). de argumente (liniile 3-6) s , i daca

12.9

Funct , ii

La fel ca majoritatea limbajelor de programare, shell scriptingul permite folosirea de , i de cod folosite pentru a separa o funct funct , ii. n general funct , iile sunt bucat , ionalitate ori acelas sau pentru refolosire (pentru a nu se scrie de doua i cod). De asemenea, , , ii codului. funct lizibilitat , iile au un rol important n marirea n shell scripting, funct , iile intervin n cazul scripturilor de dimensiune mai mare, unde bucat , i de cod care sunt folosite de mai multe ori. exista

12.9.1

Sintaxa unei funct , ii

sintaxa comenzii prin urmatorul Prezentam exemplu, n care se poate s , terge sau adauga un utilizator n sistem:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

#!/bin/bash if test $# -ne 1; then echo "One argument required: a or d (add or delete)." exit 1 fi username=testuser groupname=testgroup 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." } function delete () { userdel -r $username echo "User $username deleted." } case $1 in

CAPITOLUL 12. SHELL SCRIPTING


29 30 31 32

425

"a") add;; "d") delete;; *) echo "Required arguments are a or d."; exit 1;; esac

Listing 12.5: Fis , ierul user.bash


1 2 3 4 5 6 7 8 9 10 11

root@anaconda:/home/razvan/uso/scripting# bash user.bash a Adding group testgroup (GID 1031) ... Done. Group testgroup didnt exist so it was created. User testuser added. Use passwd to change password. root@anaconda:/home/razvan/uso/scripting# bash user.bash d User testuser deleted.

n exemplul de mai sus funct , iile sunt add s , i delete s , i sunt folosite, respectiv, pentru a adauga s , i a elimina un utilizator n/din sistem. Sintaxa unei denit , ii de funct , ie este:
1 2 3 4

function nume_functie () { cod shell }

ca o funct numele funct Se observa , ie shell are un antet s , i un corp. n antet se prezinta , iei n momentul apelarii (nume_functie), iar n corp se regasesc comenzile ce se executa funct , iei. Cuvntul function este cuvnt rezervat s , i poate omis. Astfel, o funct , ie denita:
1 2 3 4

function testare () { ... }

s poate denita , i astfel:


1 2 3 4

testare () { ... }

Pentru a apela o funct , ie se foloses , te direct numele funct , iei urmat de parametri, exact ca n cazul apelului unei comenzi.

12.9.2

Parametrii unei funct , ii

n mod evident, o funct , ie poate primi s , i argumente. Modul de denire funct , iei nu se altfel spus, ntr-un shell script o funct schimba; ie nu are parametri formali. Totus , , i, modul prin precizarea parametrilor pentru funct de apel se schimba , ie. Pentru a exemplica modul n care se transmit parametrii unei funct , ii vom folosi un exemplu de calcul a sumei unor numere naturale transmise ca argumente funct , iei sum-func:

426

INTRODUCERE N SISTEME DE OPERARE

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

#!/bin/bash function sum_func () { sum=0 while ! test -z $1; do sum=$(($sum + $1)) shift done } sum_func 1 2 3 4 5 echo "Sum: $sum" sum_func 2 3 5 7 11 13 17 19 echo "Sum: $sum"

Listing 12.6: Fis , ierul sum-func.bash


1 2 3

razvan@anaconda:~/uso/scripting$ bash sum-func.bash Sum: 15 Sum: 77

ca argumentele unei funct Se observa , ii se obt , in tot folosind parametri pozit , ionali ($1, numarul $2 etc.). Variabila $# reprezinta de argumente transmise funct , iei. Variabila $0 s ramne neschimbata i reprezint a 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. n cadrul funct s se Variabila sum a fost denita Daca , iei s , i este vizibila , i n exterior. sa e vizibila numai n interiorul unei funct dores , te ca o variabila , ii aceasta trebuie folosind cuvntul cheie local. prexata

12.10

Scripturile de pornire Bash

Scripturile de pornire Bash sunt s , iere intepretate la pornirea unei sesiuni shell. Acestea de actualizarea variabilelor de mediu s se ocupa , i de rularea unor comenzi personalizate de utilizator; un exemplu l constituie congurarea de alias-uri. Sesiunile de shell pot clasicate n: cum permit sau nu rularea de comenzi sesiuni interactive/non-interactive dupa este, de cele prin prezentarea unui prompt utilizatorului; o sesiune non-interactiva pentru rularea unui script shell mai multe ori, folosita

sesiuni de autenticare (login)/non-autenticare (non-login); sesiunile de emulator de terminal (gnome-terminal, konsole, xterm) sunt sesiuni
non-login Fis , ierele de pornire sunt interpretate de sesiunile de shell interactive n modul urmator:

o sesiune de shell login va interpreta, n ordine, s , ierele /etc/profile, apoi ~/.bash_profile, ~/.bash_login s , i ~/.profile; la ncheierea sesiunii s se interpreteaza ierul ~/.bash_logout ,

CAPITOLUL 12. SHELL SCRIPTING

427

o sesiune de shell non-login va interpreta comenzile din ~/.bashrc


Fis , ierul ~/.bashrc este s , ierul recomandat pentru personalizarea sesiunilor de ~/.bashrc, shell ale unui utilizator. ntruct un shell de login nu interpreteaza s , ierul ~/.bash_profile va cont , ine, de obicei, o linie de forma:
1 2 3 4

# include .bashrc if it exists if [ -f ~/.bashrc ]; then . ~/.bashrc fi

12.10.1

Variabile de mediu

cum a fost specicat anterior, unul din rolurile importante ale scripturilor de pornire Dupa shell este congurarea variabilelor de mediu. modul n care un proces ruleaza. n Variabilele de mediu sunt variabile care afecteaza 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 congurate n scripturile de pornire ale Bash. Declarat , ia unei variabile de mediu se face n formatul
1

export VARIABLE=value

nu se precizeaza export, atunci variabila nu va mos de procesele u. n Daca , tenita mod obis , nuit, variabilele de mediu sunt denumite cu majuscule. cu ajutorul Vizualizarea variabilelor de mediu existente la un moment dat se realizeaza comenzii env sau set:
1 2 3 4 5

razvan@anaconda:~/uso/scripting$ env SSH_AGENT_PID=7985 TERM=xterm SHELL=/bin/bash [...]

Exemple de variabile de mediu sunt: de directoare folosite de shell pentru a gasi executabilele PATH ret, ine o lista prin : (doua puncte); daca se dores asociate comenzii; lista este separata , te adaugarea directorului ~/bin la variabila de mediu, se foloses , te comanda:
1 2 3 4 5 6 7

razvan@anaconda:~/uso/scripting$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games razvan@anaconda:~/uso/scripting$ export PATH="$PATH":~/bin razvan@anaconda:~/uso/scripting$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/razvan/ bin

al utilizatorului curent HOME ret, ine directorul de baza

USER este numele utilizatorului curent EDITOR este editorul implicit

428

INTRODUCERE N SISTEME DE OPERARE

12.11
12.11.1

Studii de caz
Contorizarea numarului de utilizatori autenticat , i n sistem

Folosind cunos , tint , ele din acest capitol, se poate rezolva corect problema contorizarii numarului de utilizatori autenticat i n ziua de luni n sistem, problem a propus a n , n continuare: sect , iunea 12.3.4. Solut , ia este prezentata
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

#!/bin/bash user_day="Monday" 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 last | head -n -2 | while read user term ip day other; do if test $day = $day_last; then echo "$user"; fi done | sort -u | wc -l

Listing 12.7: Fis , ierul count-login.bash


1 2

razvan@anaconda:~/uso/scripting$ bash count-login.bash 9

pentru a ret Linia 3 denes , te variabila user_day folosita , ine ziua despre care dorim n formatul complet pentru a avantaja informat Aceasta va data , ii (generalizat). de traducerea zilei n formatul last; ziua n formatul utilizatorul. Liniile 5-14 se ocupa n variabila day_last. last (prescurtat) este ret, inuta de fapt, o comanda nlant , uita. Liniile 16-20 reprezinta, comenzii sunt: Componentele lant , ului de

informat last as , eaza , ii despre utilizatorii autenticat , i n sistem; este head -n -2 ret, ine primele linii de la intrare, mai put, in ultimele doua; linii date la ies nevoie de acest lucru deoarece ultimele doua , ire de last nu sunt utile; ciclul while este folosit pentru a citi, folosind read, diversele cmpuri ale ecarei linii date de last: numele de utilizator, terminalul asociat, adresa IP de conectare, ret ziua n care s-a realizat autenticarea; variabila other, ind ultima variabila, , ine restul de informat ii pn a la sfrs itul liniei (informat ii care nu intereseaz a); dac a ziua , , , la ies corespunde zilei ret , inute n variabila day_last atunci se as , eaza , ire numele de utilizator;

CAPITOLUL 12. SHELL SCRIPTING

429

s sort -u sorteaza , i ret , ine n mod unic liniile primite la intrare; n cazul nostru utilizatorii care s-au aceste linii sunt chiar cele as , ate de ciclul while, adica de variabila user_day; autenticat n sistem n ziua data numarului wc -l contorizeaza de linii furnizat de sort -u; rezultatul este de numarul de utilizatori distinct , i care s-au autenticat n sistem n ziua de data variabila user_day.

12.11.2

Schimbarea promptului shell

Promptul este s , irul de caractere oferit de shell unde utilizatorul poate introduce comenzi. n caracterul $ reprezinta o sesiune de shell a unui n Bash, un prompt care se termina n caracterul # este asociat unei sesiuni utilizator neprivilegiat; un prompt care se termina de shell a utilizatorului root. Aspectul promptului este controlat prin intermediul unei variabile speciale, anume PS1. modul n care promptul este oferit utilizatorului. Comanda echo Aceasta controleaza permite inspectarea variabilei:
1 2

razvan@anaconda:~$ echo $PS1 \u@\h:\w\$

ca variabila cuprinde o serie de caractere speciale citate cu ajutorul Se observa backslash: numele utilizatorului; n exemplul de mai sus se traduce n s \u nseamna , irul razvan numele sistemului \h nseamna as la \w nseamna , area directorului curent, cu abrevierea directotului de baza caracterul ~ # pentru root sau $ n rest \$ nseamna Promptul poate schimbat la un s , ir de caractere simplu:
1 2

razvan@anaconda:~$ PS1="prompt: " prompt:

Promptul personalizat s , i folosind o serie de caractere speciale ca n exemplele de mai jos:


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

prompt: echo PS1="\u-\h[\d]\$ " PS1=\u-\h[\d]$ prompt: PS1="\u-\h[\d]\$ " razvan-anaconda[Fri Sep 14]$ PS1="\u+\h \W (\A)" razvan+anaconda ~ (18:08)cd uso/ razvan+anaconda uso (18:08)cd ~/uso/conv/ razvan+anaconda conv (18:09)

Secvent , e speciale care au fost folosite n exemplele de mai sus sunt:

430 data curenta \d nseamna timpul curent \A nseamna

INTRODUCERE N SISTEME DE OPERARE

directorul curent ca s fat de directorul home (\w \W nseamna , i cale relativa ,a calea completa) as , eaza completa cu secvent O lista , ele speciale de personalizare a promptului se poate gasi online1 . n /etc/profile s Variabila PS1 este denita Pentru congurarea , i ~/.bashrc. a acesteia se recomanda utilizarea s permanenta , ierului ~/.bashrc.

Folosirea de culori n prompt se dores Promptul poate colorat prin folosirea secvent , ei speciale \e[. Astfel, daca , te as , area unui prompt de culoare ros , ie, se foloses , te comanda:
1

razvan@anaconda:~/uso/conv$ PS1="\e[0;31m\u@\h:\w\$ \e[m"

Pentru obt , inerea unui prompt de culoare verde comanda este:


1

razvan@anaconda:~/uso/conv$ PS1="\e[0;32m\u@\h:\w\$ \e[m"

Secvent , ele speciale \e[x;ym s , i \e[m denesc spat , iul de aplicabilitate al unei culori. Secvent Secvent , a x;y denes , te culoarea utilizata. , e posibile sunt:

0;30 negru 0;31 ros ,u 0;32 verde 0;33 galben 0;34 albastru 0;35 magenta 0;36 cyan 0;37 alb
n lista de mai sus x are valoare 0. Se poate folosi valoarea 1 pentru versiunea deschisa a culorii. n mod evident, se pot asocia culori diferite pentru componentele promptului, ca n exemplul de mai jos:
1

razvan@anaconda:~$ PS1="\e[0;36m\u\e[m@\e[0;34m\h\e[m:\e[0;31m\w\e[m\$ "

n exemplul de mai sus, n cadrul promptului, numele utilizatorului va as , at folosind cyan, numele sistemului folosind albastru, iar numele directorului curent folosind ros , u.
1

http://tldp.org/HOWTO/Bash-Prompt-HOWTO/bash-prompt-escape-sequences.html

CAPITOLUL 12. SHELL SCRIPTING

431

12.11.3

Batch scripting n Windows

n Windows, scripturile shell au ca echivalent scripturi batch. Un script batch are de obicei extensia .bat. Programul folosit pentru rularea scripturilor batch este cmd (interpretorul de comenzi pe Windows). La fel ca un script shell, un script batch permite execut , ia de comenzi native Windows s , i programarea cu ajutorul variabilelor, a instruct , iunilor de decizie s , i a instruct , iunilor de ciclare.

Comenzi Windows prin intermediul interpretorului de Rularea unei comenzi n Windows se realizeaza aplicat comenzi Windows. Pentru pornirea acestuia, n Windows XP trebuie pornita , ia Command Prompt: Start ->All Programs->Accesories->Command Prompt. n afara comenzilor obis , nuite pentru lucrul cu sistemul de s , iere (dir, cd, mkdir, s rmdir, del, copy, move etc.), exista i alte comenzi utile. Lista cu toate comenzile , Windows se poate obt , ine folosind comanda help:
1 2 3 4 5 6 7 8 9 10 11 12 13

C:\Documents and Settings\Razvan.RAGNAROK>help For more information on a specific command, type HELP command-name ASSOC Displays or modifies file extension associations. AT ATTRIB BREAK CACLS [...] Schedules commands and programs to run on a computer. Displays or changes file attributes. Sets or clears extended CTRL+C checking. Displays or modifies access control lists (ACLs) of files.

n tabelul 12.2 este prezentat un tabel cu comenzile utile Linux s , i echivalentul lor n Windows:

Operatori ator Interpretorul de comenzi Windows are, aseman interpretorului Bash, operatori de ret redirectare sau de comunicare ntre procese. n exemplul de mai jos dorim sa , inem n s ierul del.txt informat ii despre comenzile care se ocup a cu s tergerea de informat , , , , ii:
1 2 3 4 5 6 7 8 9

C:\Documents and Settings\Razvan.RAGNAROK>help | findstr "[Dd]elete" > del.txt C:\Documents and Settings\Razvan.RAGNAROK>type del.txt DEL Deletes one or more files. ERASE LABEL Deletes one or more files. Creates, changes, or deletes the volume label of a disk.

432
10

INTRODUCERE N SISTEME DE OPERARE

[...]

Variabile cu ajutorul Ca s Denirea acestora se realizeaza , i n Bash, variabilele nu au un tip. comenzii set:
1 2 3 4

C:\Documents and Settings\Razvan.RAGNAROK>set a=3 C:\Documents and Settings\Razvan.RAGNAROK>echo %a% 3

prexnd-o cu ajutorul As , area cont , inutul unei variabile nu se mai realizeaza numele variabilei. caracterului $, ci folosind caracterul % nainte s , i dupa s Ca s , i n Bash, comanda set este folosita , i pentru as , area variabilelor curente:
1 2 3 4 5 6 7 8 9 10 11

C:\Documents and Settings\Razvan.RAGNAROK>set a=3 ALLUSERSPROFILE=C:\Documents and Settings\All Users APPDATA=C:\Documents and Settings\Razvan.RAGNAROK\Application Data CommonProgramFiles=C:\Program Files\Common Files COMPUTERNAME=RAGNAROK ComSpec=C:\WINDOWS\system32\cmd.exe FP_NO_HOST_CHECK=NO HOMEDRIVE=C: HOMEPATH=\Documents and Settings\Razvan.RAGNAROK [...]

n Bash variabilele de mediu sunt denite n s Variabile de mediu Daca , ierele de o fereastra de congurare. Pentru accesul la pornire, n Windows trebuie folosita aceasta se foloses click dreapta pe My , te: Computer ->Properties->Advanced ->Environment Variables. Variabila PATH det executabile pot , ine, ca s , i n cazul Bash, lista de directoare ale caror Spre deosebire de Bash, separatorul folosit este ; (punct s rulate din linia de comanda. ,i virgula). directorul D:\mybin la calea de executabile: n exemplul de mai jos se adauga
1 2 3 4 5 6 7 8 9

C:\Documents and Settings\Razvan.RAGNAROK>echo %PATH% c:\program files\imagemagick-6.3.4-q16;C:\Program Files\MiKTeX 2.6\miktex \bin;C: \WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;D:\Software\ swftools C:\Documents and Settings\Razvan.RAGNAROK>set PATH=%PATH%;D:\mybin\ C:\Documents and Settings\Razvan.RAGNAROK>echo %PATH% c:\program files\imagemagick-6.3.4-q16;C:\Program Files\MiKTeX 2.6\miktex \bin;C: \WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;D:\Software\ swftools;D:\mybin\

CAPITOLUL 12. SHELL SCRIPTING Programarea batch

433

cum s-a precizat, echivalentul scripturilor shell din Linux sunt scripturile batch din Dupa Windows. De obicei, acestea au extensia .bat. Exemplul cel mai simplu de script batch este prezentat mai jos:
1 2 3 4 5 6

C:\DOCUME~1\RAZVAN~1.RAG>type hw.bat @echo off echo "Hello, World!" C:\DOCUME~1\RAZVAN~1.RAG>hw.bat "Hello, World!"

n mod implicit, rularea unui script batch duce la as , 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 4 5 6 7 8 9 10 11 12 13 14

C:\DOCUME~1\RAZVAN~1.RAG>type dir.bat @echo off for %%f in (*) do echo %%f C:\DOCUME~1\RAZVAN~1.RAG>dir.bat .gtk-bookmarks del.txt dir.bat gsview32.ini hw.bat logfile.txt PUTTY.RND winscp.RND _viminfo

atoare Instruct instruct , iunea if are o sintaxa aseman , iunii echivalente din Bash:
1 2 3 4

C:\DOCUME~1\RAZVAN~1.RAG>set a=3 C:\DOCUME~1\RAZVAN~1.RAG>if %a% EQU 3 echo "true" "true"

Mai multe despre comenzile instruct , iunile if s , i for se pot aa prin consultarea informat , iei de ajutor: if /? s , i for /? .

12.11.4

PowerShell pe Windows

PowerShell este un nou interpretor de comenzi dezvoltat de Microsoft. Se bazeaza obiect s pe programare orientata , i pe versiunea 2.0 a platformei de dezvoltare .NET. Windows PowerShell este gratis; poate descarcat de pe site-ul asociat1 . ntr-o oarecare masur a, ideea din spatele utilitarelor Windows PowerShell urmeaza, shell Unix, anume de a realiza sarcini complexe prin combinarea unor componente deja existente. Aceste componente sunt denumite cmdlets s , i sunt, de fapt, instant , e ale unor n loc de a crea o banda de clase .NET. Deosebirea de shellurile Unix este faptul ca transmitere a informat , iei n format text (pipeline), cmdlet-ii comunica folosind obiecte.
1

http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

434 Cmdlets

INTRODUCERE N SISTEME DE OPERARE

blocurile de baza pentru PowerShell echivalent cu comenzile de Cmdlet-ii reprezinta Unix folosite de Bash. baza Astfel, pentru listarea proceselor din sistem se foloses , te cmdlet-ul get-process. aliasul ps s Acesta prezinta 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 Daca, nume ncepe cu , te omorrea proceselor al caror litera p, se foloses , te comanda:
1

PS> get-process p* | stop-process

obiect, se pot extrage cmpuri din Folosind concepte din programarea orientata se dores rezultatul unei comenzi. Astfel, daca , te aarea timpului ultimului acces pentru un directorul Cookies, se foloses te comanda: ,
1

PS> $(get-item Cookies).lastaccesstime

tabelara se poate folosi comanda Pentru as , area proceselor din sistem n forma
1 2 3 4 5 6 7 8

PS> Get-Process | Format-Table Id, Name Id Name -- ---2876 alg 532 ApntEx 2044 Apoint 3448 calc 1824 CFSvcs

Variabile s , i structuri de control , ile precizate se PowerShell permite crearea de scripturi. Ca s , i Bash, printre facilitat a completare automata, utilizarea de variabile, structuri de control s numar , i funct , ii. Spre deosebire de Bash, variabilele PowerShell au un tip:
1 2 3 4 5 6

PS C:\> $b = 3.1415926 PS C:\> $b 3.1415926 PS C:\> $b.GetType().Name

n Windows PowerShell, echivalentul pentru for (din Bash) este foreach:


1 2 3 4 5 6 7 8 9 10 11

PS C:\WINDOWS\system32> 1..10 | foreach { $_ * 2 } 2 4 6 8 10 12 14 16 18 20

CAPITOLUL 12. SHELL SCRIPTING

435

Informat n documentat , ii complete despre Windows PowerShell se gasesc , ia care soses , te cu pachetul de instalare. la online1 . Informat , ii complete s , i tutoriale sed se pot gasi

Cuvinte cheie

shell bash script shell readline editarea comenzilor istoricul comenzilor reverse search autocompletion comenzi interne (built-in) comenzi externe shebang echo printf set exit read

operatorul de comunicat, ie | variabile shell caractere speciale shell: $, #, *, ", , \, (,


), , , &, |, ;, [, ], ?, blank

if, test, comanda de test [ ... ] for, while, until ltre de text: cat, tac, nl, sort, uniq,
head, tail, cut, tr, grep (pattern matching) expresie regulata

xargs, locate, nd expandarea


shell: variabilei, substitut , ia expandare aritmetica $0, $n, $#, $@, $?, $$, $! expandarea comenzii,

parametrii unui script shell; expresiile funct, ii shell scripturi


de init .bashrc, , ializare: .bash_prole, /etc/bash_prole

redirectarea intrarii/ies , irii/erorii standard variabile de mediu operatorii <, >, 2>, &>, >>

here document, here string operatorii <<, <<< operatorii de secvent, iere ;, &&, ||
ntrebari

batch scripting power shell; cmdlet sed

1. Care din urmatoarele nu este un intepretor de comenzi?

K Bash K PowerShell K Command Prompt


1

http://sed.sourceforge.net/grabbag/tutorials/

436

INTRODUCERE N SISTEME DE OPERARE

K Flash
este folosita pentru cautarea 2. Ce comanda unei expresii regulate ntr-un s , ier?

K tr K grep K cut K sort


3. Care din urmatorii operatori este asociat cu un here document ?

K > K | K &> K <<


egalitatea ntre doua s 4. Care din urmatoarele opt , iuni testeaza , iruri?

K set $a == $b K [$a == $b] K test $a == $b K { $a == $b }


5. Care este efectul comenzii sort -n file.txt? liniile nevide din s K sorteaza , ier liniile vide din s K sorteaza , ier liniile unice din s K sorteaza , ier liniile n format numeric K sorteaza substituie caracterul a cu A ntr-un s 6. Ce utilitar NU va ajuta un utilizator sa , ier?

K vim K cut K sed K tr


7. Care din urmatoarele NU este un avantaj al unui shell script?

K viteza mare de execut, ie K automatizarea sarcinilor K folosirea de componente existente


K depanare facila 8. Care este utilitatea shebang (#!)?

K permite editarea unui script shell

CAPITOLUL 12. SHELL SCRIPTING

437

K permite asocierea de drepturi de execut, ie unui script shell


calea catre K prezinta utilitarul folosit pentru rularea scriptului ntr-un script shell K este o linie de comentariu speciala 9. Care din urmatoarele NU este o instruct , iune n Bash?

K for K while K until K repeat


intrarile 10. Care din urmatoarele comenzi NU as din directorul curent? , eaza

K ls K for i in *; do echo $i; done K find . K ls * -mindepth 2 -type f

438

INTRODUCERE N SISTEME DE OPERARE

Tabelul 12.1: Condit , ii n shell operator tip operanzi condit , ie vericata s , ierul exista s , ierul este s , ier obis , nuit (regular le) s are dimensiune , ierul non-zero s , ierul este director s , ierul poate citit s , ierul poate scris s , ierul poate executat s este det de , ierul , inul utilizator grupul ce det , ine s , ierul este s i grupul utilizatorului , primul s este mai , ier recent dect al doilea primul s , ier este mai put , in recent dect al doilea numerele sunt egale numerele nu sunt egalee este mai primul numar mare dect al doilea este mai mic primul numar sau egal cu al doilea este mai mic primul numar dect al doilea este mai mic primul numar sau egal cu al doilea s , irurile sunt identice s , irurile nu sunt identice s , irul este vid utilizare

-e -f -s -d -r -w -x -O -G -nt -ot -eq -ne -gt -ge -lt -le = != -z

1 s , ier 1 s , ier 1 s , ier 1 s , ier 1 s , ier 1 s , ier 1 s , ier 1 s , ier 1 s , ier 2 s , iere 2 s , iere 2 numere 2 numere 2 numere 2 numere 2 numere 2 numere 2 s de , iruri caractere 2 s de , iruri caractere 1s , ir de caractere

-e fisier -f fisier -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 sir1 != sir2 -z sir

CAPITOLUL 12. SHELL SCRIPTING

439

Tabelul 12.2: Comenzi utile Linux s , i Windows Linux Windows Efect pwd ls cd mkdir rmdir touch rm cp mv cat echo less, more cmp diff le grep shift sort cd dir cd mkdir, md rmdir, rm del, erase copy move type echo more comp fc ftype ndstr shift sort directorul curent as , eaza cont listeaza , inut director director schimba director creeaza s , terge director s creeaza , ier s , terge s , ier s copiaza , ier s muta , ier cont as , eaza , inut s , ier as eaz a mesaj , s as are paginata , , ier s compara , iere diferent compara s , i as , eaza ,e as eaz a tipul s ierului , , n s cauta , ier parametrii pozit schimba , ionali intrarea sorteaza

Capitolul 13 Mediul grac


A bus station is where a bus stops. A train station is where a train stops. On my desk I have a workstation... (Anonymous)

din acest capitol? Ce se nvat ,a

Tipuri de imagini, fonturi, Unicode, UTF-8


n Linux: X Window System Interfat, a graca

Componentele X Window System: window manager, desktop environment, display


manager de baza: rezolut Congurari , ia, aranjamentul caracterelor pe tastatura

Congurarea sistemului folosind KDE Servicii desktop Congurare X peste SSH, VNC, RDC
cea mai utilizata metoda de interact n momentul de fat , a, , iune cu sistemul de operare avantaj fat de celelalte tipuri de interfet este interfat , a GUI. Principalul sau ,a , e (CLI, TUI) n us sa o foloseasca. (vezi s , i sect , iunea 2.3.1) consta , urint , a cu care utilizatorii nvat ,a Evolut Prima , ia interfet , elor grace s-a realizat n paralel cu evolut , ia hardware-ului. ncercare de realizare a unei interfet , e grace a avut loc n anii 60 la Institutul de al Universitat , ii Standford 1 . La acel moment, interfat cuprindea un Cercetari , a graca mouse elementar cu ajutorul caruia se puteau accesa link-uri n documentele text (text hyperlinks). interfet pas , easca n era 3D. Aero din Windows n momentul de fat , a, , ele grace ncep sa 2 3 4 5 Vista/7 , Compiz /KWin din Linux s din MacOS X ofera , i Quartz Compositor
Stanford Research Institute http://www.sri.com/ http://www.microsoft.com/windows/windows-vista/features/aero.aspx http://www.microsoft.com/windows/windows-7/features/aero.aspx 3 http://en.wikipedia.org/wiki/Compiz 4 http://en.wikipedia.org/wiki/KWin 5 http://arstechnica.com/apple/reviews/2005/04/macosx-10-4.ars/13
2 1

441

442

INTRODUCERE N SISTEME DE OPERARE

3D la a carei realizare participa n mare masur a placa video s utilizatorului o experient ,a ,i nu procesorul ca pna acum.

13.1
13.1.1

Concepte n mediul grac


Tipuri de imagini

tipuri: n funct , ie de modul de stocare a informat , iei, imaginile digitale se impart n doua imagini raster (bitmap) s , i imagini vectoriale. O imagine raster (bitmap) ret , ine informat , ia ca o matrice de puncte. foto digitala sunt imagini raster. Este De exemplu, fotograile realizate cu o camera 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, (scalata), redimensionata cont , inutul noii imagini trebuie aproximat din cont , inutul imaginii init iale. Aceast a 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 gura 13.1.

Figura 13.1: Marirea unei imagini n format raster Fiecare punct dintr-o imagine raster (bitmap) este descris prin mai multe componente, n funct , ie de suportul de ies , ire:

pe ecran un punct dintr-o imagine raster este descris prin 3 valori reprezentnd
(pe 8 bit intensitatea luminoasa culori: ros , i) a urmatoarelor , u (Red), verde (Green), albastru (Blue) prescurtate RGB. n cazuri speciale (prelucrari pe 16 bit profesionale de imagini), intensitatea ecarei culori poate exprimata ,i (crescnd astfel spectrul de culori ce poate reprezentat). De asemenea, pe cele 3 componente (RGB), anumite imagini digitale (precum formatul PNG) langa numita transparent (Alpha). Astfel, n cazul cont , in s , i o a 4-a componenta ,a s imaginilor cu transparent a (RGBA), pentru ecare punct se asociaza , , i un nivel permit sau part a unor part , i din de transparent , a, , nd astfel ascunderea (totala , iala) imagine.

CAPITOLUL 13. MEDIUL GRAFIC

443

, un punct dintr-o imagine raster este descris prin 4 valori, pe suport tiparit pentru obt reprezentnd cantitatea de culoare necesara , inerea culorii punctului din patru componente: cyan (C), magenta (M), galben (Yellow), negru (black K) elemente geometrice informat ntr-o imagine vectoriala , iile sunt ret , inute sub forma linii, elipse, puncte s de baza: , i gradient , i de culoare. sunt foarte us Avantajul major al acestor tipuri de imagini este acela ca , or de exact pe redimensionat (practic, culoarea ecarui punct din imagine poate calculata (mics baza elementelor ce compun imaginea). n urma redimensionarii , orare sau cteva formate mai marire), calitatea imaginii nu se pierde (gura 13.2). Exista cont cunoscute care stocheaza , inutul n format vectorial, cele mai cunoscute ind: 1 SVG , PS, EPS, PDF.

Figura 13.2: Marirea unei imagini n format vectorial

13.1.2

Fonturi. Unicode

Fonturile sunt s , 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 fonturi se numar , i Open Type (.otf). 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).
2 Init , ial, setul de caractere ASCII a necesitat 7 bit , i pentru reprezentare (un bit ind folosit , ii n transmiterea ecarui pentru calculul paritat caracter). Acest lucru permitea existent ,a a 128 caractere, 33 dintre acestea ind caractere de control. Ulterior, cnd bitul 8 nu a mai fost folosit ca bit de paritate, folosirea acestuia a dus la extinderea setului de 128. Pe cele 128 de noi pozit caractere cu nca , ii au fost plasate caractere s , i simboluri dar s-a constatat necesitatea unor extensii.
1 2

acceptat de W3C ca standard pentru WWW http://www.w3.org/Graphics/SVG/ http://en.wikipedia.org/wiki/ASCII

444

INTRODUCERE N SISTEME DE OPERARE

de coduri (code page)1 prin care erau denite noile Astfel, a aparut not , iunea de pagina de timp s-au folosit frecvent pagini de 128 de caractere disponibile. Pentru o perioada limba e pentru grupuri de limbi. coduri create e pentru o anumita 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 la 4 octet prezent ajuns la versiunea 5). Acesta permite reprezentarea prin pna , i a unui caracter (folosind maxim 32 de bit n acest fel sunt acoperite inclusiv caracterele , i). asiatice. mai multe standarde2 pentru codicarea caracterelor Unicode n s Exista , iere. Cel mai folosit este UTF-8, format n care primele 128 de caractere sunt identice cu cele din variabil de octet de octet ASCII. Acesta este un format cu numar , i, numarul , i ocupat , i de un de bit la primul bit 0, din primul octet (ncepnd caracter ind dat de numarul , i de 1, pna primul bit este 0, atunci caracterul ocupa un octet de la cel mai semnicativ bit3 ). Daca un octet are primii bit s , i, n mod special, este acelasi caracter ca n setul ASCII. Daca ,i reprezentarea unui caracter. Mai multe informat 10, atunci este un octet care continua ii , online4 . despre codicarea UTF-8 se pot gasi n prezent, fonturile importante din sistemele de operare moderne au suport pentru un semnicativ de caractere denite n standardul Unicode. numar

13.2
13.2.1

n Linux. Componente Interfat , a graca


X Window System

X Window System (cunoscut ca X11 sau ca X) este un cadru (framework) ce permite dezvoltarea de interfet , e grace n medii Unix. imagini n format raster. Din acest motiv, imaginea Monitoarele (CRT sau LCD) as , eaza trimisa catre nala acestea este n format raster. X Window System permite: desenarea s , i mutarea ferestrelor pe ecran, interact , iunea cu mouse-ul s i interact iunea cu tastatura. Restul este l asat n seama programelor, motiv , , destul de mult de la pentru care aspectul vizual al interfet , elor grace bazate pe X difera un sistem de operare la altul, sau chiar ntre versiunile aceluias , i sistem de operare. X a fost creat n 1984 la MIT5 . Versiunea curenta a protocolului este X11 s n , i a aparut proiectul X este condus de catre 1987. n momentul de fat X.Org Foundation s ,a , i a ajuns la versiunea X11 Release 7.4.
1 2

http://en.wikipedia.org/wiki/Code_page http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings 3 http://en.wikipedia.org/wiki/Most_signicant_bit 4 http://en.wikipedia.org/wiki/UTF-8 5 http://www.mit.edu

CAPITOLUL 13. MEDIUL GRAFIC

445

13.2.2

Arhitectura X Window System

de tip client-server: mai mult X Window System are o arhitectura , i client , i X se la un server X (gura 13.3). Serverul accepta cereri de desenare a conecteaza obiectelor grace s client (inputul) de la utilizator (preluate , i trimite napoi catre , i intrarile mouse etc.). de la tastatura,

Figura 13.3: Arhitectura X Window System Serverul X este responsabil de administrarea resurselor ce permit interact , iunea cu utilizatorul. Aceste resurse sunt: ecranul, tastatura, mouse-ul, touchpad-ul, stylus-ul, pe calculatorul care interact cu utilizatorul s joystick-ul etc. Serverul X ruleaza , ioneaza ,i trimite intrarile (inputul) primit de la acesta catre client i. Client ii proceseaz a informat ia , , , de la server s primita , i i trimit acestuia napoi informat , ii pe care serverul le va as ,a implementare a server-ului X este utilizatorului pe ecran. n prezent, cea mai utilizata de proiectul X.Org1 . oferita la un server X pentru a folosi resursele administrate de Client , ii X se conecteaza as acesta. Ei cer serverului sa , eze pe ecran obiecte grace s , i preiau de la acesta arile intrarile (inputul) utilizatorului, precum apas de taste sau mis mouse-ului. , carile Client ii pot rula local (pe acelas i calculator cu serverul) sau pot rula pe un alt calculator , , Exemple de client aat la distant , a. , i X: un browser web, un client de e-mail, un program de mesagerie instant. Protocolul X este protocolul utilizat n comunicat , ia dintre client ,i X s , i serverul X. , oara diferit fat de modelul general al Comunicat , ia dintre client ,i s , i server se desfas ,a pe calculatorul local comunicat iei client-server. n general clientul, ca localitate, se aa , pe un calculator aat la distant n cazul X Window System lucrurile iar serverul se aa , a. pe calculatorul local pentru a putea trimite s stau invers. Serverul se aa , i primi informat ii de la utilizator. Client i se pot aa tot pe calculatorul local sau pe unul aat la , , distant , a. ruleaza trei client n exemplul din gura 13.4, pe un calculator aat la distant ,a , i X. Acest nu aiba conectat niciun monitor s Fiecare calculator poate sa , i nici mouse sau tastatura. din cei trei client , i este conectat la un alt server X (ecare server X ind pe un calculator
1

http://www.x.org/

446

INTRODUCERE N SISTEME DE OPERARE

Figura 13.4: Exemplu de conectare client-server folosind protocolul X diferit). Fiecare server X preia datele de la utilizatorul local (de exemplu prin intermediul client tastaturii) s , i le transfera , ului, primind napoi de la aces , ta informat , ii care trebuie procesarea informat prezentate utilizatorului pe ecran. Toata , iei de la utilizator este de calculatorul aat la distant (acolo unde se executa clientul). Practic, n realizata ,a modelul de mai sus, calculatorul aat la distant a se ocupa de procesarea datelor, , calculatoarele 1, 2 s , i 3 funct , ionnd pe post de terminale. de felul n care arata interfat X nu cont , ine nicio specicat , ie legata , a cu utilizatorul butoanele, meniurile, ferestrele etc. (Application User Interface): modul n care arata Aceste specicat alte componente, precum , ii sunt implementate n schimb de catre Window Manager -ul (manager-ul de ferestre), Desktop Environment -ul (mediul desktop) sau de bibliotecile de componente grace utilizate de aplicat , ie aplicat , ie. amplasarea s ferestrele aplicat Un window manager controleaza , i modul n care arata , iilor. la serverul X ca orice alt client) care Acesta este un tip special de client X (se conecteaza felul n care arata ceilalt controleaza , i client , i X. aiba caracteristici comune: bara de Window manager-ul face ca tot , i client , ii sa titlu a ferestrei, butoanele de minimize s , i maximize etc. El poate crea o interfat ,a atoare aseman cu cea din Microsoft Windows sau cu cea din Mac OS X. , i de baza (precum twm1 , window managerul Window managerele pot oferi funct , ionalitat cu X) sau funct , i complexe (cum ar Enlightenment ce se care vine mpreuna , ionalitat apropie ca funct Printre cele mai cunoscute , ionalitate de un desktop environment). 2 a: Kwin este window managerul folosit de KDE, Metacity 3 window managere se numar 4 cel folosit de GNOME s este cel utilizat pentru desenarea interfet , i Compiz , ei 3D din proiectul cu acelas , i nume.
1 2

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

CAPITOLUL 13. MEDIUL GRAFIC

447

componenta lipses n cazul n care aceasta , te, se vor putea crea ferestre noi dar nu vor avea bara de titlu. n plus, ele nu vor putea mutate pe ecran, nu vor putea nchise cu din fundal ALT+F4, nu va funct, iona ALT+TAB, nu se va putea muta o fereastra (background ) n prim-plan (foreground ). n schimb, cont , inutul ferestrelor va ramne neschimbat. ferestrele (aspectul lor vizual) este controlat de o componenta Stilul n care arata window decorator. Acesta este responsabil cu a window managerului numita desenarea titlului ferestrei, a butoanelor s , i a marginii acesteia. Un desktop environment (mediu desktop) include un window manager, mai multe consistenta din punct de vedere vizual. aplicat , ii s , i o interfat ,a
2 Cele mai cunoscute medii desktop sunt KDE1 (gura 13.5) s , i GNOME (gura 13.6).

Figura 13.5: KDE Un display manager este un program care permite pornirea unei sesiuni pe un Acesta este server X de pe acelas , i calculator sau de pe unul aat la distant , a. implementat ca un tip special de client X. utilizatorului un ecran de autenticare (login) permit Display managerul as , eaza , ndu-i introduca un nume de utilizator s Dupa ce autenticarea s-a acestuia sa , i o parola. sesiune este pornita. Exemplu de display managere: kdm realizat cu succes o noua (gura 13.7) folosit de KDE, gdm (gura 13.8) folosit de GNOME sau xdm, display managerul implicit din X Window System. pe acelas Atunci cnd display managerul ruleaza , i calculator cu serverul X, el va porni serverul nainte de as Astfel display manager-ul are o , a fereastra de autenticare. funct ie asem an atoare cu procesele login s i getty (vezi sect , , , iunea 6.5.3).
1 2

http://en.wikipedia.org/wiki/KDE http://en.wikipedia.org/wiki/GNOME

448

INTRODUCERE N SISTEME DE OPERARE

Figura 13.6: GNOME

Figura 13.7: Fereastra de login din Kubuntu (KDM)

13.3

Pornirea s , i oprirea interfet , ei grace

nu pornes cu sistemul de operare, ea poate n cazul n care interfat , a graca , te odata separat. Pentru a realiza acest lucru exista mai multe posibilitat , i: pornita Folosind xinit xinit este un program care pornes , te serverul X s , i un prim client care se conecteaza se autentice ntr-o fereastra de login deoarece el s-a la el. Utilizatorul nu mai trebuie sa xinit. Atunci cnd acest prim client autenticat n sistem nainte de a rula comanda s i ncheie activitatea, xinit va opri serverul X: ,

CAPITOLUL 13. MEDIUL GRAFIC

449

Figura 13.8: Fereastra de login din Ubuntu (GDM)


1 2 3

george@asgard:~$ man xinit [...] The xinit program is used to start the X Window System server and a first client program on systems that cannot start X directly from /etc/init or in environments that use multiple window systems. When this first client exits, xinit will kill the X server and then terminate.

Folosind startx utilizatorului o interfat mai startx este un front-end pentru xinit care ofera ,a complexa:
1 2 3

george@asgard:~$ man startx [...] The startx script is a front end to xinit that provides a somewhat nicer user interface for running a single session of the X Window System. It is often run with no arguments.

Folosind un Display Manager Atunci cnd un Display Manager este pornit pe calculatorul local, el va porni mai nti prezinte utilizatorului un ecran de autenticare. Dupa un server X, urmnd ca apoi sa autenticare este pornit un server X n numele utilizatorului. ator Pornirea unui Display Manager se poate face n mod aseman serviciilor:
1

root@asgard:/home/george# service kdm start

n mod aseman ator. Pentru gdm se procedeaza oprirea display managerului. Acest lucru Pentru oprirea interfet , ei grace este sucienta se poate realiza n felul urmator:
1

root@asgard:/home/george# kill -9 *dm

opres Comanda anterioara nume este orict de lung s , te toate procesele al caror , i se cu s termina irul de caractere dm . ,

450

INTRODUCERE N SISTEME DE OPERARE

de oprire a interfet O alta metoda , ei grace este oprirea serviciului kdm (sau gdm) folosind paramerul stop:
1

root@asgard:/home/george# service kdm stop

a interfet e repornit Pentru oprirea s , i repornirea imediata , ei grace este sucient sa cu parametrul restart: display managerul folosind serviciile kdm (sau gdm) nsa
1

root@asgard:/home/george# service kdm restart

a serverului X se poate realiza s De asemenea oprirea s , i repornirea imediata , i prin combinat ia de taste Ctrl+Alt+Backspace . ,

13.4

Congurarea serverului X

sect Aceasta , iune se va concentra pe prezentarea modurilor de congurat , ie temporara a server-ului X. KDE s i GNOME vin cu aplicat ii pentru congurarea permanent a a , , server-ului X, salvnd congurat iile n s iere specice Desktop Environment-ului. , , unui s n ultimele versiuni, necesitatea utilizarii , ier de congurare a server-ului X a fost Fis eliminata. ierul de congurare utilizat n versiunile anterioare se numea , /etc/X11/xorg.conf. trebuia repornit server-ul la ecare Principalul dezavantaj al acestuia era faptul ca modicare a s Fis , ierului. , ierul mai poate utilizat n prezent pentru realizarea congurarilor permanente, dar, pentru simplitate n congurare, comenzile pentru se pot salva n s congurarea temporara , ierul ~/.xprofile. este folosit, trebuie structurat pe sect Fis , ierul /etc/X11/xorg.conf, daca , iuni 1 cum se poate observa s specice ecarui dispozitiv, dupa i online sau n documentat , , ia man (man xorg.conf).

13.4.1

Congurarea rezolut , iei

Versiunile recente ale server-ului X implementeaza extensia Xrandr, extensie care a repornirea mediului grac) a rezolut permite modicarea live (far , iei, dimensiunii ecranelor etc. Acest lucru reprezinta un mare avantaj n cazul desktop-ului, orientarii sistemelor la care se conecteaza monitoare externe (precum laptop-urile). frecvente Extensia Xrandr poate utilizata folosind comanda xrandr. Cteva utilizari ale comenzii sunt prezentate mai jos: curente a sistemului grac as , area starii
1 2 3 4 5
1

mircea@acorn:~$ xrandr Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 1280 x 1280 VGA connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm 1280x1024 60.0*+ 75.0 60.0* 1152x864 75.0

https://wiki.ubuntu.com/X/Cong/Resolution

CAPITOLUL 13. MEDIUL GRAFIC


6 7 8 9 10

451
70.1 75.0 72.8 60.0 60.3 66.7 56.2 59.9

1024x768 832x624 800x600 640x480 720x400

75.0 74.6 72.2 75.0 70.1

activarea tuturor monitoarelor conectate la rezolut, ia lor default:


1

mircea@acorn:~$ xrandr --auto

dezactivarea unui monitor (LCD-ul n acest caz):


1

mircea@acorn:~$ xrandr --output LVDS --off

activarea unei anumite rezolut, ii (se poate preciza opt, ional s , i rata de refresh pentru 75 Hz se foloses te parametrul --rate 75 ) ,
1

mircea@acorn:~$ xrandr --output LVDS --mode 1024x768

13.4.2

Congurarea tastaturii

ale tastaturii se numar a aranjamentul caracterelor Printre cele mai importante congurari congurat mai ales n condit pe taste (keyboard layout ). Aceasta ie este important a , , iile n scrie caractere care nu se gasesc care un utilizator dores implicit pe tastatura. , te sa s-au impus mai multe standarde de-a lungul timpului. Unele n limba romna a unor caractere de pe tastatura pentru includerea presupuneau nlocuirea completa diacriticelor. n 2004 a fost decis un nou standard pentru aranjamentul caracterelor cu urmatoarele romnes specicat , ti pe tastatura, , ii (pe scurt):

caractere romnes , ti sunt disponibile ca aranjament secundar pentru tastatura US, apasnd tasta AltGr (tasta Alt din dreapta) majoritatea tastaturilor din
Romnia au aranjamentul US, foarte put , ine ind inscript , ionate cu diacritice romnes , ti n vechiul standard a diacriticele a, , s AltGr s ,, t , sunt disponibile apasnd , i aceleas , i taste dar far (respectiv a, i, s, t) virgula

este accesibil pe tasta q


s pentru a obt, ine literele mari se apasa , i tasta Shift tastele: AltGr+Shift+t; pentru a obt Astfel, pentru a obt , se apasa , ine caracterul T , ine AltGr+q. caracterul se apasa acestea, aranjamentul permite s Pe lnga , i obt , inerea caracterului e(euro) prin apasarea combinat iei de taste AltGr+e . , problema n cazul aranjamentului de tastatura pentru limba romna este modul O alta diacriticele s n care se formeaza s i t . Mult i utilizatori nu remarc a faptul c a aceste doua , , , , reprezentari posibile: cu virgula (virgula caractere (s , i literele mari echivalente) au doua distant de caracter) s (virgula este lipita de caracter). este la o mica ,a , i cu sedila ment Standardul realizat de Academia Romna ioneaz a c a diacriticele se construiesc , O mare parte din implementarile folosind virgula. de aranjamente din sistemele de operare sunt gres ite din acest punct de vedere. ,

452

INTRODUCERE N SISTEME DE OPERARE

pentru limba romna conform standardului, n Pentru a activa aranjamentul de tastatura Linux se utilizeaza comanda:
1

mircea@acorn:~$ setxkbmap ro

, n caz ca este necesara pentru compatibilitate, se poate activa Varianta cu sedila dar adaugnd folosind aceeas s , i comanda , i parametrul cedilla.

13.5

Congurarea sistemului din KDE

n Kubuntu, toate congurarile importante ale sistemului sunt reunite ntr-un panou de numit System Settings. Acest panou este aseman ator comanda ca funct , ionalitate cu Control Panel din Windows s i poate accesat din meniul de KDE (aat n stnga jos, , n mod implicit).

13.5.1

System Settings

n gura 13.9. Pentru Kubuntu 9.10, fereastra de congurare este prezentata

Figura 13.9: System Settings n Kubuntu 9.10 acces la principalele congurari desktop-ului s Ea ofera , i ale sistemului de operare: legate de aspectul vizual, congurarea perifericelor, congurarea ret congurari , elei etc.

13.5.2

Schimbarea aspectului interfet , ei grace

legate de modul n care arata interfat Se poate Appearance cont , ine congurari , a graca. alege schema de culori a ferestrelor s , i a butoanelor (Colors ), fonturile folosite pentru (Fonts), icoanele folosite n sistem (Icons), stilul n as , area textelor din interfat , a graca elementele vizuale(Style), felul n care arata bara de titlu a ferestrelor (Window care arata stadiul curent al procesului de narcare Decorations), animat KDE (Splash , ia care arata un exemplu de congurari vizuale. Screen). Figura 13.10 prezinta

CAPITOLUL 13. MEDIUL GRAFIC

453

Figura 13.10: Alegerea schemei de culori Desktop permite modicarea fundalului (Background ), a screen saver-ului (Screen Saver ) sau a numarului de desktop-uri (Multiple Desktops). n mod normal n Linux se sau patru desktop-uri. Fiecare poate avea propria imagine de fundal s folosesc doua ,i propriile programe deschise. n general, aplicat utilizatori pe desktop-uri n funct , iile sunt grupate de catre , ie de utilitate. De exemplu, pe desktop-ul 1 se poate deschide un web browser, pe desktop-ul 2 un de casa s client de e-mail, pe desktop-ul 3 o tema , i pe desktop-ul 4 un program de abordare este acela ca ecare desktop mesagerie instant. Avantajul oferit de aceasta devine mai liber, avnd mai put ine programe deschise. De asemenea, acest mod de , organizare permite mai us , or concentrarea atent , iei pe anumite activitati. legate de sunetele asociate diferitelor act Notications cont , ine congurari , iuni din sect sistemul de operare (System Notications). De asemenea tot n aceasta , iune se pot deni s , i aplicat , iile care pornesc atunci cnd un disc este inserat n unitatea optica (echivalentul opt , iunii autorun din Windows) (Storage Media Notications ).

13.5.3

de baza ale sistemului de operare Congurari

About Me permite introducerea datelor personale ale utilizatorului s , i specicarea caii s catre directoarele sale personale: directorul home, directorul unde se aa ierele de pe , Desktop s , i directorul Autostart. n directorul de Autostart se pot pune scripturi care vor rulate la pornirea KDE. acces la diferire congurari pentru persoanele cu dizabilitat , i. Accesibility ofera Default Applications permite specicarea aplicat , iilor folosite la deschiderea diferitelor tipuri de s iere. , legate de regiunea n care se gases , te Regional & Language cont , ine congurari utilizatorul (de exemplu modul n care sunt as , ate numerele, separatorul pentru partea a numerelor, simbolul pentru moneda utilizata, tipul de calendar folosit, zecimala sect (de formatul orei s , i al datei). Tot n aceasta , iune se poate alege tipul de tastatura exemplu cu 104 sau 105 taste) s i aranjamentul caracterelor pe taste. Figura 13.11 ,

454

INTRODUCERE N SISTEME DE OPERARE

congurat prezinta , ia pentru tastatura n limba romna.

Figura 13.11: Tastatura n limba romna

13.5.4

administrative Congurari

Date & Time permite congurarea 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 Keyboard & Mouse cont Una din cele , ine congurari , i mouse. de starea NumLock la init mai importante opt , iuni prezente aici este cea legata , ializarea KDE. Se poate alege ca NumLock sa e activat, dezactivat sau sa s , i pastreze starea n cadrul subsect anterioara. iunii Mouse se poate alege tema cursorului de la mouse. , sect Tot n aceasta , iune se pot congura combinat , iile de taste (shortcut ) pentru diferite funct ii din KDE. Cele mai utilizate combinat ii (cu valorile lor implicite) sunt prezentate n , , tabelul 13.1. Display permite, printre altele, alegerea uneia dintre rezolut , iile de ecran disponibile s ,i a parametrilor de culoare (gamma, luminozitate, contrast). ale placii audio. Multimedia cont , ine congurari

13.5.5

Congurarea ret , elei

ale ret n System Settings, la Network Settings se pot face congurari , elei. n Network Connections > Wired apare lista conexiunilor congurate (gura 13.12). la parametrii Alegnd una din aceste conexiuni se pot congura parametrii ei [referint ,a de ret ea], precum n gura 13.13. ,

13.5.6

Managementul utilizatorilor

folosind aplicat Congurarea utilizatorilor se realizeaza , ia KDE User Manager (kuser) gura 13.14.

CAPITOLUL 13. MEDIUL GRAFIC Tabelul 13.1: Combinat , ii de taste uzuale n KDE Combinat , ia taste de Act , iune

455

Deschide fereastra de ajutor Deschide fereastra de Run de unde se poate porni o aplicat , ie specicnd numele executabilului o lista a Ctrl+Esc Pornes , te aplicat , ia System Activity n care este as , ata proceselor active ntre 1 s Ctrl+Fn Face trecerea la desktop-ul n (n este un numar , i 4) Alt+Tab sau Face trecerea de la o aplicat , ie la alta. Folosind tasta Shift se aplicat Alt+Shift+Tab cicleaza , iile n ordine inversa Alt+F4 nchide fereastra activa combinat Ctrl+Alt+Esc Aceasta , ie permite terminarea unei aplicat , ii n mod fort , at. ce combinat cursorul mouse-ului Dupa , ia de taste a fost efectuata, se va transforma (cel mai uzual ntr-un X) s , i fereastra pe care se n mod fort va realiza click va terminata , at. Funct , ionarea aplicat , iei comenzii kill este similara

F1 Alt+F2

Figura 13.12: Congurarea conexiunilor la ret , ea Aici se pot adauga, s , terge sau modica utilizatorii din sistem. Se pot modica numele de login, numele real al utilizatorului, grupurile din care face parte etc. Pentru a modica utilizatorul dorit s butonul Modify, fereastra datele unui utilizator se selecteaza , i se apasa as at a ind prezentat a n gura 13.15. ,

13.5.7

Monitorizarea sistemului s , i managementul proceselor

Aplicat , ia KDE pentru monitorizarea sistemului este System Monitor (comanda cu Kubuntu. ksysguard). Aceasta vine implicit mpreuna tab-uri n congurat unul pentru managementul s Aplicat , ia are doua , ia implicita: ,i monitorizarea proceselor (gura 13.16) s i unul pentru monitorizarea sistemului ,

456

INTRODUCERE N SISTEME DE OPERARE

Figura 13.13: Congurarea parametrilor de ret , ea de baza

Figura 13.14: Administararea utilizatorilor n KDE User Manager

se dores sub forma de arbore. (gura 13.17). Daca , te, lista de procese poate as , ata un cmp Search se permite cautarea De asemenea, n partea de sus a ferestrei se aa dupa numele lui. Un proces poate oprit n mod fort este unui proces n lista , at daca s selectat din lista i este ap asat butonul Kill . , Pentru monitorizarea sistemului, aplicat , ia pune la dispozit , ie o colect , ie de senzori ale caror valori pot grupate n tab-uri personalizate, precum se poate observa n gura 13.18.

CAPITOLUL 13. MEDIUL GRAFIC

457

Figura 13.15: Modicarea datelor unui utilizator

Figura 13.16: System Monitor lista de procese

13.5.8

Gestiunea pachetelor

mai multe utilitare pentru a realiza gestiunea pachetelor folosind interfat Exista , a graca. n Kubuntu, aplicat ia utilizat a pentru managementul pachetelor se numes te , , interfat KPackageKit. Figura 13.19 prezinta a KPackageKit pentru realizarea , actualizarilor.

Aplicat , ia permite gestiunea repository-urilor, actualizarea bazei de date cu pachete, nume, instalarea de pachete noi, dezinstalarea de pachete cautarea de pachete dupa s i actualizarea tuturor pachetelor din sistem. ,

458

INTRODUCERE N SISTEME DE OPERARE

Figura 13.17: System Monitor monitorizarea sistemului

Figura 13.18: System Monitor senzori care pot folosit , i n tab-uri personalizate

13.6
13.6.1

Servicii desktop
a aplicat Pornirea facila , iilor

KDE versiunea 4 a introdus n KDE un nou serviciu de pornire a aplicat , iilor. El nlocuies , te de Run (aseman atoare n care vechea fereastra cu cea din Windows) cu o fereastra identice aplicat o porneasca. utilizatorul este ajutat dinamic sa , ia pe care dores , te sa Accesul la aceasta fereastra de execut ie se face folosind combinat ia de taste Alt+F2 , , aceeas , i combinat , ie ca n KDE3 s , i n Gnome. n urma introducerii ctorva litere din numele sau descrierea aplicat , iei (gura 13.20), s fereastra se va completa cu aplicat iile posibile. Aceeas i fereastr a poate folosita , , ,i

CAPITOLUL 13. MEDIUL GRAFIC

459

Figura 13.19: KPackageKit aplicat , ia pentru managementul pachetelor

Figura 13.20: Fereastra de execut , ie a aplicat , iilor pentru realizarea de calcule simple doar se introduce calculul dorit urmat de semnul egal (spre exemplu: .19 * 2000 = ) s , i rezultatul apare n lista.

13.6.2

Cautarea s , ierelor n sistem

poata gasi date pe calculatorul propriu, ecare sistem n prezent, pentru ca utilizatorul sa un serviciu de cautare de operare modern ofera a s , ierelor. n general, acest serviciu se pe un daemon care indexeaza permanent s bazeaza , ierele din sistem. La indexare, pe numele s lnga , i locat , ia s , ierelor, daemon-ul de indexare poate colecta att cont , inut ct s i metadate ale s ierului (spre exemplu, n cazul s ierelor MP3 , se indexeaz a s i tag-urile , , , , s , ierului precum artistul, numele melodiei etc.). Serviciile de cautare din sistemele de operare pe cele mai cunoscute sunt urmatoarele:

460

INTRODUCERE N SISTEME DE OPERARE

Windows Windows Search1 Linux Strigi2 (KDE), Beagle3 (GNOME) Mac OS X Spotlight 4
arilor Utilizatorul poate instala s n sistem. Cea , i solut , ii third-party pentru realizarea caut solut este mai cunoscuta ie pentru cautare pe desktop oferit a ca aplicat ie separata , , 5 Google Desktop Search .

13.6.3

Noticari

Sistemele de operare moderne pun la dispozit , ia aplicat , iilor servicii de noticare a utilizatorului. Astfel, noticarile au un aspect consistent, efortul pentru dezvoltarea suport pentru noticari aplicat , iilor scade s , i cres , te nivelul de utilizabilitate. n Linux exista generice prin intermediul bibliotecii libnotify. sistemele de noticare puse la dispozit Pe lnga , ie de desktop, majoritatea interfet , elor grace pun la dispozit , ie o zona n dreptul ceasului pentru icoanelor aplicat , iilor care notice utilizatorul (pe bara de aplicat doresc sa ii sau pe bara cu meniul desktop-ului). , zona mai este numita tray (sau system tray ). Aceasta

13.7

Aplicat , ii KDE vs. GNOME

Alegerea ntre KDE s utilizator s , i GNOME apart , ine ecarui , i se poate baza pe mai multe criterii, precum aspectul vizual s , i nivelul de funct , ionalitate dorit. Tabelul 13.2 prezinta comparativ aplicat iile cele mai uzuale de KDE s i GNOME. , , restrict Aplicat , iile prezentate nu reprezinta , ii de utilizare. Ele se pot executa att pe s ,i 6 KDE ct s i pe GNOME dac a sunt instalate bibliotecile necesare . ,

13.8
13.8.1

Studii de caz
Congurarea X peste SSH

As , a cum a fost prezentat s , i la nceputul capitolului, arhitectura X Window System comunicare se permite comunicarea prin ret , ea ntre client , ii X s , i serverul X. Aceasta poate realiza folosind mai multe protocoale, printre care s , i SSH. SSH este un protocol calculatoare utiliznd un canal securizat care permite comunicarea ntre doua (sect SSH poate astfel securiza mesajele dintre client , iunea 9.2.2). , ii s , i serverul X
1 2

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

CAPITOLUL 13. MEDIUL GRAFIC Tabelul 13.2: Aplicat , ii KDE s , i GNOME KDE System Setings KPackageKit System Monitor (KSysGuard) Konqueror, Dolphin Kate Konsole Kcalc Kaffeine Amarok K3B Gwenview Okular Konqueror

461

Aplicat , ie

GNOME

Congurarea 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 (gura 13.21). Forwarding.

Meniul System Synaptic Packet Manger System Monitor Nautilus Gedit gnome-terminal Gcalctool Totem Rhythmbox Brasero Eye of GNOME Evince Epiphany

Opt , iunea SSH care permite acest lucru poate se numes , te X11

Figura 13.21: Conexiunea client server X peste SSH peste SSH, primul pas este congurarea Pentru a putea rula un client X aat la distant ,a metoda protocolului SSH n acest sens (activarea X11 Forwarding ). Cea mai simpla conexiunea SSH de pe este specicarea parametrului -X atunci cnd se realizeaza calculatorul utilizatorului (unde este server-ul X) pe calculatorul unde se va executa clientul X. conexiunea SSH pentru a permite ncapsularea Comanda cu care se realizeaza protocolului X este:
1

george@asgard:~$ ssh george@192.168.1.10 -X

ce conexiunea SSH a fost stabilita, se poate porni un client X. De exemplu, se Dupa poate porni KCalc :
1

george@acasa:~$ kcalc

cum se poate observa n gura 13.22, bara de titlu a ferestrei KCalc specica Dupa aceasta fereastra corespunde unui client care nu se gases , te pe calculatorul faptul ca local (<@acasa>).

462

INTRODUCERE N SISTEME DE OPERARE

Figura 13.22: Pornirea unei aplicat , ii X peste SSH Folosind X peste SSH se poate executa s , i un ntreg Desktop Environment, nu doar uzual datorita alternativelor mai bune programe individuale. Acest lucru nu este nsa criptare s existente n acest sens (vnc, freenx etc.). Conexiunea SSH necesita ,i decriptare acest lucru presupune consumul unor resurse hardware suplimentare. Pentru a putea rula X peste SSH folosind pe calculatorul local Windows (server X) s ,i e instalat Cygwin (sau un alt Linux pentru client , ii X, trebuie ca pe calculatorul local sa server X instalabil pe Windows).

13.8.2

Instalarea s , i congurarea VNC

VNC (Virtual Network Computing ) este unul dintre cele mai folosite sisteme de vizualizat VNC se bazeaza pe protocolul RFB (Remote desktop-ul unui calculator aat la distant , a. Frame Bufer ) s , i de aceea poate folosit ntre sisteme de operare diferite (Windows, Linux, Mac OS X). pe sistemul client server. Pe calculatorul aat la distant (al carui VNC funct , ioneaza ,a un server de VNC la care se conecteaza un client aat desktop va vizualizat) ruleaza pe calculatorul local. La un server se pot conecta mai mult , i client , i simultan. Un client vizualizeze desktop-ul calculatorului pe care ruleaza serverul VNC sau, daca poate sa s este permis din congurarea server-ului, poate sa , i interact , ioneze cu el (de exemplu o astfel de sesiune schimbnd pozit Figura 13.23 prezinta , ia cursorului mouse-ului). VNC. imaginea care se as pe ecran s Serverul de VNC preia de cteva ori pe secunda , eaza ,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 serverul de VNC. calculatorului pe care ruleaza

CAPITOLUL 13. MEDIUL GRAFIC

463

Figura 13.23: Conectarea prin VNC folosind un client Windows s , i un server Linux aiba simultan controlul unui Folosind VNC este posibil ca mai mult , i utilizatori sa calculator. De cele mai multe ori, nainte de a putea accesa un server de VNC, se autentice. Acest lucru se realizeaza pe baza unui nume de utilizatorul trebuie sa utilizator s i a unei parole. , mai multe programe, att server ct s Att n Windows ct s , i n Linux exista , i client, VNC. Pentru Linux, unul dintre cele mai simple servere VNC este care implementeaza instalat, acest server este pornit prin apelarea comenzii x11vnc: x11vnc. Odata
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

george@acasa:~$ x11vnc -usepw 10/09/2007 22:48:59 -usepw: found /home/george/.vnc/passwd [...] 10/09/2007 22:48:59 *** Trying ":0" in 4 seconds.

Press Ctrl-C to abort.

10/09/2007 22:48:59 *** 1 2 3 4 10/09/2007 22:49:03 *** XOpenDisplay of ":0" successful. 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

FrameBuffer Info: width: height: scaled_width: scaled_height: [...] The VNC desktop is: PORT=5900

1280 1024 1280 1024

acasa:0

de catre Comanda trebuie apelata utilizatorul care este autenticat n interfat , a graca. ce ultimul client se deconecteaza, serverul se va opri. Implicit, dupa Pentru a securiza accesul client , ilor pe baza unei parole, x11vnc trebuie pornit cu exista s opt iunea -usepw . n acest caz serverul va verica daca , , ierul

464

INTRODUCERE N SISTEME DE OPERARE

din el va citita parola ce va ceruta ~/.vnc/passwd. n cazul n care s , ierul exista, s utilizatorului i se va cere o parola ce va stocata n client , ilor. Daca , ierul nu exista, la urmatoarele ~/.vnc/passwd s instant , i va folosita , e ale serverului. mai mult Exista , i client , i VNC n Linux: xvnc4viewer, xvncviewer etc. servere ct client Si n Windows exista , i VNC. Unele programe sunt gratuite (ca de exemplu tightVNC), altele trebuie cumparate (ca de exemplu RealVNC, ce dispune s ,i dar limitata ca opt de o versiune gratuita iuni). , la VNC este FreeNX. Acest program trimite datele ntre client s O alternativa , i server comprima datele nainte de a le trimite. n acest fel reus obt peste SSH, nsa , es , te sa , ina performant , e superioare VNC-ului ca timp de raspuns s , i ca lat , ime de banda consumata.

13.8.3

Remote Desktop Connection

n mod similar cu RDC (Remote Desktop Connection) este o aplicat , ie care funct , ioneaza acceseze de la distant desktop-ul unui calculator. VNC s , i care permite unui utilizator sa ,a aplicat doar mpreuna cu Windows XP Professional sau cu Aceasta , ie este disponibila Windows Vista Business, Ultimate sau Enterprise. este instalat odata cu instalarea Windows. n comparat , ie cu VNC, RDC are avantajul ca nu permite accesarea desktop-ului simultan local s Dezavantajul RDC este acela ca , i de la distant a. Cu alte cuvinte, atunci cnd un utilizator este autenticat local pe calculator , direct cu sistemul de operare, nu este posibil ca altcineva sa e s i interact , , ioneaza vada act autenticat prin RDC s n momentul n care se , i sa , iunile primului utilizator. autenticarea prin RDC, utilizatorul local este deconectat. Atunci cnd un ncearca este autenticat prin RDC s s utilizator aat la distant ,a , i un utilizator local ncearca , i el sa se autentice, utilizatorul aat 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 controlat de la distant , a). care din tabul System Properties (click dreapta pe My Computer, apoi Properties), dupa Allow users to connect remotely to this computer (gura 13.24). Remote se bifeaza e necesare congurari ale programelor de tip rewall (vezi Este posibil sa calculatoare ntre care se dores sect , iunea 10.5.1) existente pe cele doua , te realizarea legaturii. Pentru a realiza conexiunea, de pe calculatorul local trebuie pornit clientul de RDC prin Start > All Programs > Accessories > (gura 13.25). Acesta se acceseaza Communications > Remote Desktop Connection sau Start > All Programs > Accessories > Remote Desktop Connection. este necesara adresa IP a acestuia. Pentru conectarea la calculatorul aat la distant ,a Folosind butonul Options se pot congura parametrii conexiunii RDC (gura 13.26). ce conexiunea a fost init utilizatorul trebuie sa se autentice (gura 13.27). Dupa , ializata, ce autenticare este realizata cu succes, desktop-ul calculatorului aa la distant Dupa ,a ator poate accesat, aseman unei conexiuni VNC.

CAPITOLUL 13. MEDIUL GRAFIC

465

Figura 13.24: Activarea RDC

Figura 13.25: Fereastra clientului de RDC Cuvinte cheie

aplicat, ii grace client X desktop environment: KDE, GNOME diacritice display manager: gdm, xdm, kdm font
raster graca vectoriala graca

RDC server X servicii desktop Unicode UTF-8 VNC window manager:


Compiz Kwin, Metacity,

GUI keyboard layout protocolul X rezolut, ie

X Forwarding X Window System X.Org xinit, startx Xrandr

466

INTRODUCERE N SISTEME DE OPERARE

Figura 13.26: Congurarea opt , iunilor conexiunii RDC

Figura 13.27: Autenticarea RDC ntrebari 1. Care din urmatoarele formate de s , iere NU este un format vectorial?

K PDF K True Type font K PNG K SVG


2. Care dintre urmatoarele este un standard pentru descrierea modul de codicare a caracterelor intr-un s ier? ,

CAPITOLUL 13. MEDIUL GRAFIC

467

K True Type K Unicode K UTF-8 K RGB


3. Un Display Manager are rolul de a: ferestrele K controla felul n care arata se autentice n interfat K permite unui utilizator sa , a grafca

K controla deschiderea s , i nchiderea ferestrelor K gestiona cont, inutul ferestrelor


4. Care dintre urmatoarele perechi NU cont , ine elemente cu acelas , i rol?

K KDE s , i GNOME K kdm s , i gdm K Kwin s , i Metacity K Xorg s , i bitmap


pe un calculator cu interfat graca instalata, dar care NU 5. Utilizatorul Dorel lucraza ,a este pornita. El ncearca sa porneasca interfat dar , a folosind comanda urmatoare nu reus es te. De ce? , ,
1

dorel@home:~$ service kdm start

K scriptul kdm nu porneste interfat, a graca porneasca serviciul kdm K Dorel nu are dreptul sa ruleze scriptul startx nainte de a rula scriptul kdm K Dorel trebuia sa ruleze scriptul startx dupa ce a rulat scriptul kdm K Dorel trebuia sa a unui 6. Care dintre urmatoarele NU este o metoda de control de la distant ,a calculator?

K X peste SSH K VNC K Spotlight K Remote Desktop Connection


7. Care dintre urmatoarele NU este un Window Manager?

K KDE K Compiz K Kwin K Metacity

468

INTRODUCERE N SISTEME DE OPERARE

n mediul grac pentru monitorizarea 8. Care dintre urmatoarele aplicat , ii este utilizata ocuparii resurselor hardware?

K top K System Information (ksysguard) K htop K free


felul n care arata ferestrele aplicat 9. Un Window Manager controleaza , iilor. Un client X preia intrarea (input-ul) direct de la utilizator. K adevarat, adevarat K adevarat, fals K fals, adevarat

K fals, fals
un client X? 10. Care dintre urmatoarele NU reprezinta

K Kcalc K gnome-terminal K Xorg K 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

din acest capitol? Ce se nvat ,a

Convent, ii de codare Editorul Vim Sisteme de control a versiunii; Subversion s , i Git


a codului Parcurgerea rapida

Compilarea unei aplicat, ii din surse Zonele unui executabil s , i proces Depanarea unui program folosind GDB, ddd s , i Valgrind IDE-uri: Eclipse, Anjuta, Microsoft Visual Studio Gestiunea unui proiect software

14.1

Introducere

, i ale specialis Dezvoltarea aplicat este una din principalele activitat n , iilor , tilor un set de utilitare pe care programatorul calculatoare. Procesul de dezvoltare necesita (dezvoltatorul software le foloses te), de la editoare s , , i utilitare de parcurgere a codului, la utilitare de depanare s a a s pna Far , i investigare a execut , iei aplicat , iei. , i propune sa acopere la nivel de detaliu aceste utilitare, capitolul de fat a prezint a principalele utilitare , folosite de un dezvoltator de software pe un sistem Unix/Linux. Multe dintre acestea sunt portate pe Windows s , i Mac OS X. n general, dezvoltarea de aplicat , ii pe un sistem Linux presupune folosirea de utilitare dedicate (editoare, compilatoare, depanatoare, mecanisme de documentare), n vreme ce dezvoltatorii de aplicat , ii pe sisteme Windows folosesc, de obicei, un mediu integrat de dezvoltare (IDE Integrated Development 469

470

INTRODUCERE N SISTEME DE OPERARE

Environment ); cel mai cunoscut este Microsoft Visual Studio (vezi sect , iunea 14.12.1). Totus , i, s , i n Linux sunt folosite IDE-uri precum Eclipse sau Anjuta (vezi sect , iunea 14.9).

14.2

Coding style (indent, astyle)

vor Una dintre gres este credint , elile frecvente realizate de programatorii ncepatori , a ca 1 putea nt elege codul surs a scris de ei ns is i oricnd n viitor . Scrierea unui cod , , , a comentarii este, de obicei, echivalenta cu scrierea unui cod dezorganizat, far nementenabil. timp pentru nt Pentru a preveni situat , iile n care se consuma , elegerea codului scris de pentru editarea codului. Folosirea altcineva trebuie respectate un set de norme de baza s acestor norme ajuta i lucrul ntr-o echip a de dezvoltare, cnd mai mult , , i dezvoltatori parcurga codul scris de un altul. ajung sa normele preferate (sau obligatorii) de redactare Diverse proiecte software colecteaza a codului ntr-un document de stil de codare (coding style, programming style, coding standards, code conventions). Exemple sunt Java2 , GNU3 , BSD4 , Linux5 , Python6 , PHP7 etc. n funct Stilurile de codare variaza , ie de limbajul de programare sau de proiect, dar exista nt at , irea ulterioara a codului. un set de reguli comune care faciliteaza , elegerea s , i mbunat Exemple de astfel de reguli sunt: denumirea num_files folosirea de nume relevante pentru variabile; se prefera n loc de num_var, EncryptMessage n loc de DoStuff sau tmp n loc de TemporaryVariabileForStoringIntegerArraySize; variabilele de implicite pentru parcurgerea vectorilor iar folosirea lor nu genul i, j se considera trebuie detaliata; e cu TAB e cu indentarea codului; corpul unui bloc de instruct, iuni se indenteaza spat , ii; folosirea spat spat, ii/linii libere; pentru lizibilitate se recomanda , 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 us , or de parcurs; funct , ii
, esc doua ecrane trebuie evitate; care depas

comentarii; codul trebuie comentat pentru a facilita nt, elegerea acestuia;


e redundante, trebuie sa ajute programatorul acolo comentariile nu trebuie sa unde codul este dicil de nt eles; ,
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
1

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

471

se scrie un cod greu lizibil, dar care are o consecvent, a stilului; este mai bine sa n stil chiar ilizibil dect sa se foloseasca mai multe stiluri, e ele consecvent ,a s , i bune.

cont indent, astyle n situat , iile n care s , ierele sursa , in cod indentat necorespunzator, se pot folosi utilitare precum indent sau astyle. corespunzator Utilitarul indent indenteaza codul C, conform unor opt , iuni congurabile prin argumente: spat ierea s i indentarea folosit a, introducerea de linii libere, as , , , area codului de funct , ii, pentru blocuri if s , i for, as , area comentariilor.

indent permite integrarea diverselor opt, iuni n ceea ce se numes stil , te 1 (COMMONSTYLES). n mod implicit se foloses , te stilul de codare folosit de GNU .
Fis Folosind comanda de mai jos se va , ierul 14.1 cont , ine cod indentat necorespunzator. obt , ine s , ierul 14.2 formatat folosind stilul GNU.
1

razvan@valhalla:~/development$ indent ugly-code.c -o ugly-code-default.c

pentru a specica s Opt , iunea -o este folosita , ierul de ies , ire. n absent , a acesteia se direct s modica , ierul sursa.
1 2 3 4 5 6 7 8 9 10 11 12 13 14

#include<stdio.h> int main(){ int i; int par=0,impar=0; int sum= 0; for(i=0;i<100;i++){ sum=sum+i; printf("partial sum is %d\n",sum); if(sum%2==0) { printf("par\n"); par++;} else {printf("impar\n"); par--;} } return 0;}

Listing 14.1: Fis , ier indentat necorespunzator


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

#include<stdio.h> 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
17 18 19 20 21 22 23 24 25

INTRODUCERE N SISTEME DE OPERARE


} else { printf ("impar\n"); par--;

} } return 0; }

Listing 14.2: Fis , ier formatat cu stilul GNU Folosind alte opt , iuni se pot specica alte stiluri de coding: -kr pentru stilul Kernighan & Ritchie, -linux pentru stilul Linux, -orig pentru stilul init , ial BSD. Fis , ierul 15.8 este formatat folosind stilul Linux, folosind comanda:
1

razvan@valhalla:~/development$ indent -linux ugly-code.c -o ugly-codelinux.c #include<stdio.h> int main() { int int int for

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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--; }

} return 0; }

Listing 14.3: Fis , ier formatat cu stilul Linux Utilitarul astyle1 (Artistic Style permite indentarea s , i formatarea codului C, C++, C# s ,i Java. La fel ca s , i indent, astyle are diverse opt , iuni de formatare s , i stiluri predenite. a utilitarului astyle este absent O lipsa a opt iunilor de introducere de spat , , , ii. Comenzile un s de mai jos formateaza , ier conform stilurilor GNU, Linux sau Kernighan & Ritchie:
1 2 3 4 5

razvan@valhalla:~/development$ astyle --style=gnu < ugly-code.c > uglycode-astyle-gnu.c razvan@valhalla:~/development$ astyle --style=linux < ugly-code.c > uglycode-astyle-linux.c razvan@valhalla:~/development$ astyle --style=k\&r < ugly-code.c > uglycode-astyle-kr.c
1

http://astyle.sourceforge.net/

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

473

14.3

Editorul Vim

utilitarele de baza pentru un dezvoltator de aplicat Editoarele reprezinta , ii. Editoarele , i pentru parcurgerea, prelucrarea s profesioniste vor oferi acestuia facilitat , i editarea a s Editoarele profesioniste vor oferi funct , i de colorare rapida , ierelor cod sursa. , ionalitat a sintaxei (syntax highlighting ), colapsarea codului (code folding ), indentare automata etc. n lumea Unix, cele mai cunoscute editoare sunt Vim s , i GNU Emacs. modul de lucru s urmatoare prezinta i funct ionalit at ile editorului Vim. , , , Sect , iunea

editoare protagoniste, tradit Unul dintre cele doua editoarelor1 este , ional, ale razboiului programul original nu mai este activ dezvoltat, au aparut vi. Pentru ca numeroase clone, derivate ale codului, sau rescrieri complete. Cel mai cunoscut astfel de program este Vim2 , dezvoltat de Bram Moolenaar. de vi minimala preinstalata. Pentru Majoritatea distribut , iilor de Linux vin cu o clona recomandam, majoritatea exemplelor urmatoare, aceasta nu este sucienta; deci, instalarea pachetului vim ntreg. n sistemele Debian, de exemplu, pachetul instalat implicit se numes , te vim-tiny, iar cel cu mai multe opt , iuni vim. Pentru varianta care include interfat , a graca, exista vim-full.

Pornirea editorului. Moduri avnd drept parametru opt Vim poate pornit din linie de comanda, , ional numele s , ierului l ncarce. Lipsa acestui parametru nseamna editarea unui s pe care sa ier nou. , pornit, editorul nu funct convent Odata , ioneaza , ional. El este n modul Normal, unde nu introducerea textului. Funct Vim poate este posibila ie de sarcina care trebuie ndeplinita, , 3 ntr-unul dintre modurile de mai jos : deplasarea rapida prin text. De asemenea, o serie de opt Normal faciliteaza , iuni avansate ca mark-uri sau fold-uri, descrise sumar n continuare, pot manevrate n modul Normal.

Insert singurul mod n care putem introduce text. Acesta nu este modul implicit
introducerea de text imediat dupa la pornirea editorului, deci nu este posibila ncarcarea unui s ier. Aceast a particularitate este sursa multor confuzii. Pentru a , este i. Pentru a reveni intra n modul Insert din Normal, comanda cea mai simpla n modul normal, se foloses , te Escape. Pentru a edita text ecient, nu se ramne n modul Insert mai mult dect este nevoie.

Command comenzile avansate se introduc utiliznd acest mod. Din modul Normal, se foloses , te : pentru a intra n modul Command. Lansarea comenzii se face folosind Enter, iar anularea ei, natural, prin Escape. Multe dintre ca introducerea lor se comenzile Vim sunt precedate de :. Aceasta nseamna
face n modul Command.
1 2

http://en.wikipedia.org/wiki/Editor_war Vi iMproved http://www.vim.org/ 3 lista nu este exhaustiva

474

INTRODUCERE N SISTEME DE OPERARE

Visual selectarea unei port, iuni arbitrare de text se face folosind acest mod. Dupa va act acest lucru este posibil, asupra textului selectare, o comanda , iona, daca selectat. Intrarea n modul Visual se face, din Normal, folosind v, iar revenirea n de editare. Normal utiliznd Escape sau lansnd o comanda sunt: Cteva comenzi de baza s :w salvare s , ier (write). Daca , ierului i este asociat un nume, se suprascrie comanda este urmata de un nume de s vechiul s , ier. Daca , ier, acesta este creat exista, suprascris; sau, daca exista modicari nesalvate, utilizatorul :q ies Daca , ire din program (quit). le salveze (:w), e sa foloseasca varianta :q! pentru a nu le salva; trebuie e sa a pentru cele doua comenzi de mai sus. :wq scurtatur

Sistemul integrat de Help Spre deosebire de majoritatea comenzilor Unix, pagina de manual vim nu s , i propune documenteze n ntregime utilizarea editorului, ci doar detalii despre argumentele n sa Vim are un sistem intern de help, foarte dezvoltat. linia de comanda. Pentru a aa informat , ii despre comanda :w, se foloses , te :help :w. Implicit, ecranul , it n jumatate, as va mpart cu partea superioara , nd informat , ii de ajutor. nchiderea noii ferestre se face folosind :q. se poate folosi :help pentru comenzi n mod Normal, comezi Este util de ret , inut ca extinse (caracterul : care le precede trebuie inclus), dar s , i parametri de congurare. Aces tia din urm a trebuie s a e dat i ntre ghilimele, de exemplu: :help cindent. , , excelenta pentru familiarizarea cu Vim este vimtutor, un Nu n ultimul rnd, o resursa tutorial self-contained care vine cu editorul. Lansarea lui se face convent , ional, n linie de comanda.

Deplasarea n modul Normal cteva opt Modul Normal ofera , iuni inedite de deplasare. Parte din puterea editorului vi n natura sa modala, pentru ca atunci cnd nu se editeaza text, tastele alfabetice sta sunt disponibile pentru alte comenzi utile. inclusiv n modul Insert, folosirea tastelor saget , i pentru deplasare prin Des , i este posibila, o alternativa avantajoasa. Se pot folosi tastele hjkl n loc de text, modul Normal ofera , i, dupa topologia: saget
1 2

k h j l

pe o tastatura standard QWERTY, se aa pe home row, Aceste taste au avantajul ca, far a a deplasa prea mult rndul central al tastaturii. Ele pot apasate cu mna dreapta, 1 degetele din pozit ia lor natural a, folosind tehnica touch typing . , Alte comenzi utile pentru deplasare, precum s , i semnicat , iile lor, sunt:
1

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

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

475

$ sfrs , itul liniei (analog End); nceputul liniei (analog Home);


w cuvntul urmator (word);

b cuvntul anterior (back);


(nd); fx urmatoarea aparit , ie a caracterului x pe linia curenta Fx precedenta aparit, ie a caracterului x pe linia curenta; (go to line); <num ar>g pozit, ionare pe linia data

gg prima linie; G ultima linie; % paranteza care corespunde celei de sub cursor. Perechile de paranteze pot congurate: :help matchpairs.
/text urmatoarea aparit Aceasta este o comanda , ie a textului specicat. (tastarea / provoaca intrarea n modul Command). extinsa

Editare avansata comenzi care, lansate n modul Normal sau Visual, manipuleaza text. Majoritatea Exista celor prezentate mai jos funct , ioneaza n felul urmator: o comanda este lansata n modul Normal, ea as o secvent de daca , teapta ,a opereze. Astfel, dfa va deplasare, pentru a specica textul asupra caruia sa pna la urmatoarea s aparit , terge tot textul din pozit , ia curenta , ie a caracterului a pe linia curenta; o comanda este lansata n modul Visual, ea act imediat asupra daca , ioneaza 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 ca lista nu este nicidecum completa. Important este ca o comanda ment , iunea esent , iala 1 2 de orice mis poate urmata care , inclusiv folosind repetit ii . , ,

ds , tergere (delete). Textul este pus n clipboard;


(scurtatur a); dd s , terge linia curenta a); Ds , terge restul liniei curente (scurtatur compusa); dw s cuvnt (comanda , terge urmatorul pna la nalul s compusa); dG s , terge de la linia curenta, , ierului (comanda n modul c schimbare (change). Textul este pus n clipboard s , i editorul intra Insert; linia curenta (scurtatur a); cc schimba
1 2

:h motion.txt :h repeat.txt

476

INTRODUCERE N SISTEME DE OPERARE restul liniei curente (scurtatur a); C schimba urmatoarele compusa); c8w schimba 8 cuvinte (comanda de la nceputul liniei, pna la caracterul curent (comanda c schimba compusa);

textul, dar poate folosit n y copiere n clipboard (yank). Nu afecteaza conjunct ie cu p ; ,

p inserare din clipboard (put sau paste). Pune cont, inutul ultimei comenzi d, pozit c, sau y dupa , ia curenta.
frecventa este aceea de a copia ceva folosind y, apoi, nainte de a pune O gres , eala Aceasta cont inutul n alt loc, as , , terge cont , inut superuu, spre exemplu o linie goala. este comanda u s O solut , tergere suprascrie cont , inutul clipboard-ului. , ie imediata (undo), dar raspunsul mai amplu este folosirea registrelor.

Registre acum Registrele sunt locuri n memorie unde Vim poate stoca text. Astfel, ceea ce pna am numit clipboard este, de fapt, un registru implicit. nicio Registrele de uz general sunt adresate folosind literele alfabetului. Nu exista ntre a folosi litere mici sau mari. Modul de folosire a registrelor cu comenzile diferent ,a de editare este urmatorul:
1

"Rc

Semnicat , ia componentelor comenzii este urmatoarea: ca vom folosi un registru nestandard; " anunt, a registrul folosit. Poate orice registru din domeniul a-z sau unul R anunt, a special1 ; Toate precizarile c comanda propriu-zisa. s , i exemplele sect , iunii precedente sunt valabile.

Utilizare make Folosind comanda :make, se poate rula make (vezi sect , iunea 11.5) direct din Vim. facilitnd deplasarea prin Implicit, Vim recunoas , te mesajele de eroare s , i le listeaza, surse. Deplasarea ntre mesajele de eroare se face utiliznd comanzile :cnext s , i :cprev. Aceste comenzi funct ioneaz a s i dac a eroarea nu se a a n s ierul curent, deschiznd , , , s iere noi dac a este nevoie. Astfel, Vim poate folosit ecient pe post de IDE (vezi , sect , iunea 14.9). comanda utila n acest sens este :copen, care deschide o fereastra cu toate O alta pentru pozit eroare far a a folosi erorile. Acesta poate folosita , ionarea pe o anumita a acestor facilitat , i este quickfix. :cnext n mod repetat. Denumirea generica
1

mai multe informat , ii la :h registers

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE Congurarea Vim

477

, ii Editorul Vim este remarcat prin exibilitatea sa, iar elementul central al congurabilitat sale sunt opt iunile. Folosind comanda :set se pot interoga sau congura opt iuni. , , pe true folosind numele lor (:set Unele opt , iuni sunt de tip boolean. Acestea se seteaza autowrite), iar pe false lipind no la nceputul numelui (:set noautowrite). completa a lor este prezenta n help, dar poate intimidanta. Cteva exemple O lista relevante sunt prezentate n continuare. care se face wrap. n general, pentru text, textwidth lungimea unei linii dupa sau mesaje email, aceasta opt e mai mica dect 80. O cod sursa, , iune trebuie sa ca Vim nu va face line wrap; valoare de 0 nseamna aceasta opt Vim va face indentare inteligenta cindent daca , iune este setata, pe sintaxa limbajului C. Aceasta este o opt bazata , iune booloeana; opt tipul de syntax filetype tipul s , ierului editat. Aceasta , iune inuent , eaza highlighting folosit, dar s , i alte opt , iuni. Nu n utimul rnd, interogarea valorii unei opt , iuni se face utiliznd comanda :set, dar numele opt adaugnd caracterul ? dupa iunii: ,
1

:set cindent?

Congurare persistenta Pentru a pastra Congurarea opt , iunilor la ecare rulare a editorului este incomoda. unele valori ale opt , iunilor, dar s , i pentru a rula script-uri de extensie, se foloses , te un s , ier de congurare. Vim cites Astfel, este posibil sa , te, n ordine, /etc/vim/vimrc, apoi ~/.vimrc. suprascriem opt , iuni globale folosind s , ierul personal de congurare. n general, un s Distribut , iile livreaza, , ier de congurare n /usr/share/vim. Acesta poate copiat n /etc/vim/vimrc s Este important ca unele , i apoi personalizat local. 1 e activate tot timpul, pentru folosirea ecienta a opt , iuni, spre exemplu syntax , sa editorului. posibilitatea congurarii unor opt Exista , iuni numai pentru anumite tipuri de s , iere. Linia urmatoare congureaza lungimea liniei, indentarea, s , i comportamentul nlocuirii spat , iilor cu tab-uri numai pentru sursele sau headerele C:
1

autocmd FileType c,cpp

set tw=72 cindent noexpandtab

Editarea de s , iere multiple Vim poate edita mai multe s , iere simultan, iar abstract , iile pe care le foloses , te pentru a prezenta utilizatorilor acest lucru sunt diverse.
1

:syntax on

478

INTRODUCERE N SISTEME DE OPERARE

, irea ecranului n mai multe ferestre, cum face comanda O posibilitate este mpart :help. Deschiderea unei noi ferestre se face folosind :split sau :vsplit, urmate de numele s Deplasarea ntre ferestre se face utiliznd hjk, dar , ierului de editat. precedate de prexul Ctrl-W. nchiderea unei ferestre este un simplu s , i bine-cunoscut :q. Cnd mai multe ferestre nu sunt suciente, vim poate folosi tab-uri. Fiecare tab poate a asocia unu-la-unu s cont , eala , ierele deschise , ine mai multe ferestre, deci este o gres cu tab-urile. Pentru deschiderea unui tab se foloses , te :tabnew, urmat opt , ional de numele unui s , ier, iar pentru deplasare ntre tab-uri gt s , i gT. nchiderea ultimei ferestre nchiderea tab-ului. dintr-un tab provoaca Informat ca de obicei, n help: :help windows.txt s , ii mai complete se gasesc, ,i :help tabpage.txt.

Lucrul cu proiecte mari de a adauga A edita un ansamblu de s , iere mari pune probleme complet diferite fat ,a , i pentru primul caz, as cteva linii unui s , ier de congurare. Vim are facilitat , a cum se va vedea n continuare. Pentru deplasarea ntr-un proiect C, Vim are suport de ctags1 . Generarea unui s , ier ctags se face folosind:
1

vlad@cormyr:~/school/so/tema4 $ ctags -aR *

generat un astfel de s Odata , ier, Vim trebuie noticat de existent , a lui, prin intermediul opt iunii tags . Deplasarea la locul de denit ie al funct iei de sub cursor se face utiliznd , , , 2 mai Ctrl-], iar pentru revenirea n locul anterior se foloses , te Ctrl-T. O alternativa 3 puternica, dar ceva mai dicil de folosit, este cscope . Exista script-uri Vim care ofera , i similare pentru cod scris n alte limbaje. n general, ele sunt publicate pe site-ul facilitat central Vim4 . memorarea unui loc ntr-un s Uneori, este utila , ier. Vim numes , te acest concept mark. se foloses Pentru a pune un mark pe linia curenta, , te, n modul Normal, m, urmat de litera corespunzatoare mark-ului. Literele mici sunt mark-uri per-s , ier, iar cele mari sunt la un mark se face utiliznd (apostrof) urmat de litera globale. Deplasarea pna corespunzatoare. apostroafe) este analogul Alt-Tab. Ea duce cursorul unde a fost Combinat , ia (doua deplasarile nainte, s semnicative. Astfel, deplasarile mici , i are euristici care detecteaza sunt ignorate. facilitate pentru lucrul cu s O alta Aceasta este, n esent , iere lungi este folding. , a, (s comprimarea vizuala ierul r amne neschimbat) a unei regiuni de text. Criteriul dup a , sau care se face comprimarea poate nivelul de indentare, elemente de sintaxa, marcaje ad hoc. Modul de comprimare este dat de opt , iunea foldmethod. Combinat , ii de taste esent , iale pentru folding sunt:
1 2

http://ctags.sourceforge.net/ popping the tag stack 3 http://cscope.sourceforge.net 4 http://www.vim.org/scripts/index.php

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

479

zo deschide un fold; zc nchide un fold;


un fold, daca foldmethod=marker. Aceasta comanda insereaza zf creeaza marcajele congurate cu foldmarker.

14.4
14.4.1

Sisteme de control al versiunii


Principii

s istoria Sistemele de control al versiunii sunt programe care t , in codul sursa , i toata aproape modicarilor asupra lui. Folosirea unui astfel de sistem este o practica n industria software, dar s pentru proiecte personale. universala , i o deprindere utila n primul Un sistem de control al versiunii (VCS Version Control System) protejeaza, rnd, mpotriva modicarilor care au efecte neprevazute, dar sunt greu de observat. n urma unui build, se constata ca s-a introdus un bug, se pot inspecta schimbarile Daca, facute s i determina mai simplu sursa erorii. , situat a O alta este caderea hardware sau s , ie care poate aparea , tergerea din gres , eala unor s iere. Un VCS ofer a un backup permanent sincronizat al codului, deci pierderile , ar putea minimizate. colaborarea ntre dezvoltatori, prin combinarea Nu n ultimul rnd, un VCS faciliteaza a schimbarilor automata asupra aceluias , i s , ier, acolo unde acest lucru este posibil. Cteva elemente cheie n jargonul VCS sunt:

repository locul central unde sunt t, inute sursele s , i istoria.

n majoritatea pe un server s cazurilor, repository-ul se aa , i este foarte bine protejat. Pierderea Sistemele distribuite (vezi sect unui repository poate o catastrofa. , iunea 14.4.3) redenesc not iunea de repository; , working copy nu are istoria codului, deci pentru consultarea lor este nevoie de comunicat , ia cu repository-ul. Obt , inerea unui working copy se face printr-o operat , ie tradit numita , ional checkout;

de un dezvoltator. De obicei, un working copy copia unui repository det, inuta

pe care un dezvoltator l trimite catre commit un set de modicari repository. Istoria codului este o ns , iruire de commit-uri; operat update sincronizarea unui working copy cu repository-ul. Aceasta , ie va aplica commit-urile care nu sunt deja n working copy; a sursei. Conceptul este folosit tradit branch o istorie distincta , ional pentru dar sistemele distribuite redenesc acest experimente asupra codului sursa, concept. a repository-ului. Un exemplu de tag este un release. O tag o stare semnicativa situat importante. alta , ie n care ar nevoie de un tag este naintea unei refactorizari tipuri de sisteme de versionare: Se disting doua

480

INTRODUCERE N SISTEME DE OPERARE perfect la descrierile Aceastea sisteme se preteaza conceptelor prezentate mai sus. Sunt nca foarte folosite s , i activ dezvoltate, dar tendint a actual a este migrarea c atre sistemele distribuite. Exemple relevante sunt , CVS, Subversion, Perforce. a codului. Astfel, nu mai exista un repository central. de fapt, istoria completa nu sunt coerente toate Asemenea sisteme sunt descentralizate, n sensul ca cauza, o copie a codului se numes copiile dezvoltatorilor. Din aceasta , te branch. nu exista un repository central, branch-urile sunt adesea schimbate prin Pentru ca email. Exemple relevante de VCS distribuite sunt: git, darcs, Mercurial, Bazaar.

Sisteme centralizate.

ecare working copy are, Sisteme distribuite. Ideea din spatele lor este aceea ca

n VCS se t , in toate s , ierele care nu pot generate altfel. Cu alte cuvinte, sistemele VCS regula este ca, n orice moment, starea ment in surse, dar nu s , , i s , iere binare. O alta e consistenta; codul trebuie tot timpul sa compileze, indiferent daca repository-ului sa , i incomplete. Sintagma a strica build-ul descrie un commit care are bug-uri sau facilitat codul ntr-o stare n care nu se compileaza. lasa

14.4.2

Subversion

Este urmas Subversion1 este sistemul centralizat cel mai folosit n momentul de fat , a. , ul CVS s i adopt a o abordare clasic a, simplu de nt eles. Executabilul de Subversion se , , numes , te svn. un working copy este svn checkout. Subversion poate Operat , ia prin care se creaza funct , iona peste SSH, sau poate folosi protocolul propriu.
1

vlad@cormyr $ svn checkout svn://svn.rosedu.org/wouso

Pentru a face un nou commit, se foloses sunt automat , te svn commit. Schimbarile transmise serverului central, deci computerul are nevoie de conexiune la ret , ea. nainte actualizarea working copy-ului pentru a evita de a face un commit, se recomanda conictele. Aceast lucru se face folosind comanda svn update. Adaugarea unui nou s Transferul catre , ier la repository se face folosind svn add. dect la urmatorul server nu se va face, nsa, commit. comanda Folosind svn status, se poate inspecta starea copiei de lucru. Aceasta , te un sumar al s tipares dar s , ierelor schimbate sau adaugate, , i al celor care nu sunt n repository-ul central (untracked). Pentru a vedea schimbarile aduse s , ierelor, se foloses , te svn diff. Subversion nu are suport nativ pentru branch-uri s , i tag-uri, fapt pentru care majoritatea acin a, 3 directoare: repository-urilor cont , in, n rad funct branches simuleaza , ionarea branch-urilor din alte VCS-uri. Practic, crearea unui branch este o copiere a surselor ntr-un nou subdirector al branches; exista o convent nu modice cont copiere, cu ment , iunea ca , ie ca nimeni sa , inutul directorului tags
1

existent cu o tags simuleaza Crearea unui tag este echivalenta , a tag-urilor.

http://subversion.tigris.org/

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

481

codul propriu-zis. Acest director este sursa copierilor care fac trunk aici rezida tag-uri s , i branch-uri.

14.4.3

Git

Git1 este un VCS distribuit dezvoltat, init , ial, de Linus Torvalds. Se distinge prin exibilitate s Este sistemul de versionare folosit de kernelul Linux. s , i viteza , i are o comunitate activa. activarea culorilor s a Pentru a folosi ecient Git, se recomanda , i congurarea globala numelui s , i adresei de mail a utilizatorului.
1 2 3 4 5

vlad@cormyr $ git config --global user.name "John Doe" vlad@cormyr $ git config --global user.email "john.doe@foobar.com" vlad@cormyr $ git config --global color.ui always

Operat , ia de creare a unui working copy (numit branch n terminologie Git) este git clone. Pentru comunicat, ia cu serverul se pot folosi HTTP sau SSH, dar este recomandat protocolul propriu Git, care are suport mai bun de compresie.
1

vlad@cormyr $ git clone git://git.rosedu.org/rtt.git

modicarea s Dupa explicit s , ierelor, ele trebuiesc adaugate , i apoi creat un commit. n prin Git tracks changes, not les. git commit cultura Git, acest lucru se sumarizeaza un editor n care este solicitata o descriere a noului commit. lanseaza
1 2 3

vlad@cormyr $ git add binops.c vlad@cormyr $ git commit

folosind git status, iar schimbarile Starea branch-ului curent poate inspectata pot propagate catre branch-ul de unde s-a facut clonarea (origin) folosind git push. Sincronizarea cu origin se face folosind git pull. Aspecte netriviale ale utilizarii Git sunt lucrul cu branch-uri, operat , iile de merge, rezolvarea conictelor, sau folosirea git rebase.

14.5

Analiza s , i parcurgerea codului

mult mai mult timp n Un dezvoltator software profesionist va petrece, de regula, dect n crearea de cod. Altfel parcurgerea, nt , elegerea s , i revizia s , ierelor cod sursa dect cea de spus, operat ia de citire a codului este mai frecvent a s , , i mai de durata scriere. urmareasc un stil Pentru a facilita nt a , elegerea codului, cel care scrie codul va trebui sa de codare sau un set de norme. n acelas i timp, ns a, cel care urm ares te sau revizuies , , , te codul dispune de un set de utilitare specice acestui scop. n momentul n care proiectul este foarte important ca revizorul sa ajunga software dispune de multe s , iere sursa, rapid la anumite pozit , ii din cadrul s , ierelor sursa.
1

http://git-scm.com/

482

INTRODUCERE N SISTEME DE OPERARE

revizorul sa ajunga n locul unde a fost denita o funct Utilitare precum ctags ajuta , ie sau o variabila din doar cteva combinat , ii de taste. Revizorul poate urmari astfel setul variabila este folosita de apeluri din cadrul unei aplicat ii, sau locurile n care o anumita , Unele IDE-uri (precum Microsoft Visual Studio (vezi sect sau utilizata. , iunea 14.12.1).

14.5.1

ctags

Utilitarul ctags este folosit pentru a genera un index al simbolurilor dintr-un set de s , iere pentru parcurgerea us a acestora. Indexul este generat ntr-un s sursa , oara , ier tag care va ulterior folosit de un editor. comenzi: ctags s Utilitarul are asociate doua , i etags. Comanda ctags este folosita pentru a genera s ierul index pentru a folosit de editoare din familia vi , iar comanda , s etags genereaza , ier index pentru editoare din familia Emacs. Editoarele folosesc rapid locul n care este denita/utilizat o funct comenzi specializate pentru a gasi a , ie sau pe baza s variabila ierului index. , n general, pentru a genera un s , ier index se foloses , te opt , iunea -R pentru a parcurge recursiv toate s ierele surs a din directorul curent. Astfel, pentru a genera s , , ierele index pentru sursele bibliotecii standard C, se vor folosi comenzile:
1 2 3 4 5 6 7

razvan@valhalla:~/packages/glibc-2.7/glibc-2.7$ ctags -R . razvan@valhalla:~/packages/glibc-2.7/glibc-2.7$ etags -R . razvan@valhalla:~/packages/glibc-2.7/glibc-2.7$ ls -l tags TAGS -rw-r--r-- 1 razvan razvan 5338062 Sep 26 11:31 TAGS -rw-r--r-- 1 razvan razvan 7364195 Sep 26 11:31 tags

s s n mod implicit, ctags genereaza , ierul tags, iar etags genereaza , ierul TAGS. , te n Fis ierul este nc arcat automat de editor n cazul n care s ierul index se gases , , de forma directorul curent. Altfel, s n Vim folosind o comanda , ierul poate ncarcat
1

:set tags+=/usr/include/tags

sau n Emacs, folosind


1

M-x visit-tags-table

a codului se Detalii despre utilizarea s , ierelor index n Vim pentru parcurgerea rapida gasesc n sect iunea 14.5.1. Pentru Emacs, informat ii utile sunt descrise n sect , , , iunea 1 a manualului . asociata

14.5.2

a codului splint Analiza statica

erorile raportate de compilator, sau erorile/problemele din momentul execut Pe lnga , iei raportate de utilitare precum Valgrind (vezi sect , iunea 14.8.2), dezvoltatorul poate folosi statica a codului (Static code analysis2 ). Aceste utilitare parcurg codul utilitare de analiza far a compilarea, interpretarea sau executarea acestuia. sursa
1 2

http://www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html#Tags http://en.wikipedia.org/wiki/Static_code_analysis

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

483

Un astfel de utilitar este Splint1 . Descendent al utilitarului lint din Unix, Splint permite detectarea potent , ialelor probleme de securitate s , i a erorilor de codare. Splint poate foloseasca diverse niveluri de vericare. Conform paginii de manual, se congurat sa un premiu special persoanei care creeaza un program util care nu raporteaza erori ofera n cazul folosirii opt iunii -strict (vericare strict a). , Un exemplu de rulare a comenzii splint s , i o parte a ies , irii acesteia este prezentat mai jos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

razvan@valhalla:/tmp$ splint -warnposix mini-shell.c Splint 3.1.2 --- 20 Feb 2009 mini-shell.c: (in function simple_cmd) mini-shell.c:38:5: Return value (type int) ignored: close(pin[0]) Result returned by function call is not used. If this is intended, can cast result to (void) to eliminate message. (Use -retvalint to inhibit warning) mini-shell.c:52:7: Test expression for if not boolean, type int: cmd->io_flags \& 0x01 Test expression type is not boolean or int. (Use -predboolint to inhibit warning) mini-shell.c:65:5: Assignment of int to char: str[0] = 0 Types are incompatible. (Use -type to inhibit warning) mini-shell.c:68:48: Possibly null storage passed as non-null param: strlen (getenv(par->string)) mini-shell.c:25:5: Function exported but not used outside mini-shell: simple_cmd A declaration is exported, but not used outside this module. Declaration can use static qualifier. (Use -exportlocal to inhibit warning) mini-shell.c:171:1: Definition of simple_cmd [...]

cum reiese din exemplul de mai sus, cteva dintre probleme de codare, Dupa neraportate implicit de compilator, sunt:

ignorarea valorii de retur a unei funct, ii;


n locul unei valori folosirea unei expresii care ntoarce o valoare ntreaga booleene;

init, ializarea unei variabile cu o valoare de alt tip; posibila folosire a unei valori null;
ntr-un alt modul. denirea unei funct, ii non-statice care nu este folosita parte din problemele raportate de Splint nu sunt relevante n contextul unui O buna program. De aceea, Splint pune la dispozit , ia dezvoltatorului opt , iuni de dezactivare a anumitor mesaje, precum -exportlocal, -predboolinit, -retvalint etc. a important deosebita n general, informat , iile oferite de Splint pot foarte stricte s , i far ,a selectarea informat n cadrul programului. De aceea, se recomanda , iilor furnizate dupa relevant a acestora. ,
1

http://www.splint.org/

484

INTRODUCERE N SISTEME DE OPERARE

14.6

Automatizarea compilarii

nu se gaseasc n repository-urile distribut Este posibil ca unele aplicat a , ii sa , iei folosite. nu e disponibile ntr-un format ce ar facilita Mai mult, este posibil ca acestea sa instalarea (cum ar .deb, .rpm). Astfel de aplicat , ii trebuie compilate explicit pentru pornind de la sursele lor. platforma folosita,

14.6.1

Compilarea unei aplicat , ii din surse

De cele mai multe ori, sursele unei aplicat n formatul tar.gz sau tar.bz2. , ii se gasesc As adar, primul pas este extragerea surselor din aceste arhive folosind utilitarul tar. , arhiva cu sursele se numes Presupunnd ca , te foo.tar.gz sau foo.tar.bz2, pentru a una din comenzile: extrage sursele trebuie rulata
1 2 3

user@sys:~$ tar -xzvf foo.tar.gz [...] user@sys:~$ tar -xjvf foo.tar.bz2

obt Urmatorul pas l reprezinta n acest punct este , inerea s , ierului makele. recomandata citirea s , ierelor README sau INSTALL pentru a vedea exact pas , ii ce trebuie urmat i. Des i pot ap area mici diferent e, majoritatea aplicat iilor pot instalate , , , , urmarind pas , ii descris , i n continuare. Scriptul congure este cel responsabil de generarea makele-ului, acesta vericnd diverse dependint versiunile de software disponibile s Este , i daca , e sunt ndeplinite. prin modicarea acestui script sau prin parametrii pasat important de ment , ionat ca , i n se poate specica directorul n care urmeaza sa e instalata linia de comanda, , te n directorul n care am extras sursele, s aplicat , ia. Scriptul se gases , i rularea lui se face astfel:
1

user@sys:~/foo$ ./configure

la acest pas, cum ar lipsa unei alte aplicat Orice fel de eroare ntlnita , ii, va semnalata nainte de trecerea la urmatoarea n output-ul comenzii s etapa. , i trebuie rezolvata n urma scriptului de congurare a rezultat un s , ier numit makele (sau Makele, depinde de s , ierul de congurare), pe care l vom folosi pentru a compila sursele. Pentru a face n directorul curent un s acest lucru vom folosi utilitarul make, care cauta , ier makele pe care l va folosi n obt , inerea executabilelor:
1

user@sys:~/foo$ make

rularea make, sursele vor compilate nsa executabilele rezultate se aa Astfel, dupa doar n directorul curent. Pentru a le muta n directorul de instalare:
1

user@sys:~/foo$ make install

s directorul n care aceasta se aa exista n acest moment, aplicat , ia a fost instalata , i daca se poata rula din directorul curent. n PATH, ar trebui sa Pentru a scapa de s , ierele temporare ce au fost generate n procesul de congurare s ,i compilare, se poate rula:

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

485

user@sys:~/foo$ make clean

Pentru dezinstalarea aplicat , iei, pot s , terse manual s , ierele din directorul unde a fost sau se poate folosi makele-ul generat anterior, rulndu-se: instalata,
1

user@sys:~/foo$ make uninstall

GNU Autotools un set de utilitare din cadrul proiectului GNU ce ajuta la GNU Autotools1 reprezinta , ii pachetelor software s procesului de instalare a cres , terea portabilitat , i a simplicarii acestora. Cum am vazut anterior, majoritatea aplicat , iilor pot instalate urmnd cei trei n mare parte pas i simpli : ./congure, make, make install. Acest lucru se datoreaza , uniformizeze procesul de build, indiferent de utilitarelor din Autotools, care reus , esc sa platforma. Utilitarele care fac parte din Autotools sunt: un s Automake pornind de la un s , ier numit Makele.am, creeaza , ier Makele.in, folosit apoi de scriptul de congurare pentru a genera Makele-ul nal; scriptul de congurare, pornind de la un s Autoconf este cel care creeaza , ier numit congure.ac; procesul de creeare a librariilor Libtool abstractizeaza statice s , i dinamice.

14.7

Execut , ia unui program

un executabil (vezi n urma procesului de compilare s link-editare rezulta ,i sect iunea 11.1.2). Acest executabil det ine informat ii necesare sistemului de operare la , , , rulare, pentru crearea unui proces.

14.7.1

Zonele de memorie ale unui executabil s , i proces

datele de organizare interna, un Un s , ier executabil are un format specic. Pe lnga executabil cont ine informat ii despre instruct iunile care vor executate pe procesor s , , , ,i s datele folosite. Aceste informat , ii se vor stoca n memorie n momentul crearii , i rularii procesului asociat. Un executabil va cont , ine, as , adar, zona de cod s , i zonele de date. s a funct Zona de cod, denumita , i zona text este, de fapt, traducerea n cod mas , ina , iilor Aceste instruct scrise n cod sursa. , iuni vor executate pe rnd pe procesor, n momentul procesului. Funct crearii ia main dintr-un program C este punctul de start din zona de cod. , echivalentul binar al variabilelor globale denite de un Zonele de date reprezinta Exista mai multe zone de date: programator n codul sursa.

zona pentru date init , ializate (.data) unde sunt stocate variabilele globale init ializate (de forma int size = 30;) ,
1

http://sourceware.org/autobook/autobook/autobook.html

486

INTRODUCERE N SISTEME DE OPERARE

zona pentru date neinit , ializate (.bss) unde sunt stocate variabilele globale neinit , ializate (de forma int file_array[10];) zona pentru date read-only (.rodata) unde sunt stocate datele ce pot
categorie fac parte literalii din C; de exemplu, n cazul doar citite; din aceasta 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 zone de memorie doar pe parcursul rularii acestor zone, n cadrul unui proces se aloca (zone de memorie dinamice), care nu sunt disponibile n executabil. Cele mai importante zone sunt stiva s , i heap-ul. folosita pentru a ret Stiva (stack ) este zona de memorie dinamica , ine informat , ii despre apelurile de funct ii s i pentru a stoca variabilele locale funct iilor. La ecare apel de funct , , , , ie, se creeaza un cadru de stiva (stack frame) cu informat pe stiva , ii despre apel s , i pentru alocarea variabilelor locale funct , iei. n momentul n care se revine din funct , ii, cadrul asociat este eliberat de pe stiva. Motivul pentru care se recomanda evitarea de stiva mare de apeluri. apelurilor recursive este ncarcarea stivei n cazul unui numar pentru alocari dinamice. Alocarile Heap-ul este zona de memorie folosita dinamice sunt procesului (la runtime). Opusul este dat de alocarile care se petrec n timpul rularii alocarile statice, care sunt realizate n momentul compilarii. Variabilele globale sunt alocate static n zona .data sau n zona .bss. se realizeaza, n C, cu ajutorul apelurilor de biblioteca malloc, Alocarea dinamica calloc sau realloc. Acestea primesc ca argument numarul de octet , i pentru O gres frecventa este omiterea eliberarii zonelor de regiunea care va alocata. , eala de memorie alocata folosind apelurile din familia malloc memorie alocate. Orice zona folosind apelul free atunci cnd nu mai este folosita. Daca se va trebui dezalocata 1 omite operat , ia de eliberare a memoriei se poate ajunge la situat , ii de memory leaking negativ funct care afecteaza , ionarea aplicat , iai sau a sistemului.

14.7.2

Utilizarea bibliotecilor partajate

o serie de operat n momentul execut , iei, sistemul de operare efectueaza , ii pentru a aplicat pregati ia pentru rulare. Procesele lucreaz a n zone de memorie independente , , te la o anumita adresa pentru un proces nu se unele de altele. Astfel, ceea ce se gases , te s gases i la alt proces. , ncarcarea Pe lnga zonei de cod s , i a zonei de date din executabil, sistemul de operare ncarce s trebuie sa , i bibliotecile partajate. Bibliotecile statice devin parte din aplicat , ii s ,i e tratate la execut nu au cum sa ie. , Pentru a vizualiza lista bibliotecilor partajate utilizate de un program, se foloses , te comanda ldd, precum n exemplul urmator:
1 2 3 4

mircea@cougar:~/carte-uso/cap-10$ ldd /bin/bash linux-gate.so.1 => (0xffffe000) libreadline.so.5 => /lib/libreadline.so.5 (0xb7eb4000) libhistory.so.5 => /lib/libhistory.so.5 (0xb7eac000)
1

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

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE


5 6 7 8

487

libncurses.so.5 => /lib/libncurses.so.5 (0xb7e6a000) libdl.so.2 => /lib/libdl.so.2 (0xb7e66000) libc.so.6 => /lib/libc.so.6 (0xb7d3a000) /lib/ld-linux.so.2 (0xb7f0d000)

Informat , iile despre bibliotecile partajate aate n sistem sunt colectate (manual sau comanda: automat) utiliznd programul ldconfig. Aceasta biblioteci partajate n locat cauta , iile standard s , i n directoarele specicate n /etc/ld.so.conf, legaturi congureaza simbolice corecte n directoarele cu biblioteci (pentru a oferi denumiri standard biblitecilor, din punct de vedere al formatului) referint salveaza biblioteci ntr-un cache. , ele catre acesta este un Rularea programului ldconfig la ecare bootare este inecienta motiv n plus pentru utilizarea unui cache. bibliotecile de funct Modul n care programele utilizeaza , ii este denit la link-editare. bibliotecile partajate n directoarele standard s Linker-ul (ld) cauta , i n directoarele prin intermediul unor parametri speciali (-rpath dir s adaugate n linia de comanda ,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 rularea unui program loader. Pe sistemele Linux, acesta este ,i /lib/ld-linux.so.X (unde X este versiunea). Acest loader gaseste s , i ncarca bibliotecile partajate utilizate de catre program. se dores dar cu pastrarea Daca unor funct restului , te suprancarcarea , ii dintr-o biblioteca bibliotecii, se pot introduce bibliotecile suprancarcate n /etc/ld.so.preload aceste biblioteci prencarcate vor avea ntietate relativ la setul standard. Acest s , ier ari este utilizat de obicei pentru patch-uri de urgent pentru prencarc a distribut iile nu , , includ de obicei un astfel de s , ier.

14.7.3

Analiza apelurilor de sistem s , i a semnalelor

resursele Pentru a interact cu sistemul de operare (cel care partajeaza , iona computerului), bibliotecile de funct ii apeleaz a o serie de funct ii ale kernel-ului numite , , apeluri de sistem (system calls). n continuare sunt prezentate doar cteva dintre utilizarile apelurilor de sistem:

deschiderea/inchiderea unui s , ier (open, close) citirea/scrierea dintr-un/intr-un s , ier (read, write) deschiderea unui socket (pentru o conexiune TCP/IP) executia unui program (execv)
Aceste funct , ii sunt implementate la nivelul nucleului sistemului de operare deoarece aceste apeluri n SO-ul face management-ul resurselor. Bibliotecile de functii mbraca funct ii/clase/obiecte utilizabile direct de c atre programatori. ,

488 strace

INTRODUCERE N SISTEME DE OPERARE

pentru urmarirea Comanda strace este utila apelurilor de sistem efectuate la execut , ia analiza reprezinta o metoda destul de ecienta n debugging-ul unui program. Aceasta programelor al caror cod sursa nu-l avem. ofere strace, se va analiza ies Pentru a observa ce informat , ii poate sa , irea programului pentru a us pentru o aplicat ie simpl a (o parte din ies irea programului a fost eliminat a , , , ura analiza):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

mircea@cougar:~/carte-uso/cap-10$ strace echo "USO" execve("/bin/echo", ["echo", "USO"], [/* 51 vars */]) = 0 uname({sys="Linux", node="aquarium", ...}) = 0 [...] access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=141679, ...}) = 0 [...] close(3) = 0 open("/lib/tls/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220R\1"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1363203, ...}) = 0 [...] close(3) = 0 [...] open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=38399616, ...}) = 0 [...] close(3) = 0 [...] fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 1), ...}) = 0 [...] write(1, "USO\n", 4USO ) = 4 [...] exit_group(0) = ?

Se poate observa: ce parametri a primit programul: echo s primul apel de sistem (execve) indica ,i USO deschida s programul a ncercat sa , ierul /etc/ld.so.preload dar nu a fost (scopul acestui s gasit , ier este descris n subcapitolul dedicat bibliotecilor) un descriptor de apelul de sistem open a returnat valoarea 3 aceasta reprezinta s , ier (fd le descriptor) descriptorul de s , ier este folosit n procesele de citire s i n procesele de scriere (e un fel de pointer la s , , ier, pointer utilizat de sistemul de operare)

apelul de sistem close are ca singur parametru descriptorul de s , ier care


nchis, un descriptor de s trebuie nchis odata , ier poate refolosit o citire din descriptorul de s apelul de sistem read indica , ier 3

apelul de sistem write are 3 parametri:

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

489

cum s 1 = le descriptor-ul unde se scrie: n cazul nostru, dupa , tim, 1 este le descriptor-ul pentru stdout (ies , irea standard) USO\n = acesta este textul ce trebuie as , at de comanda echo 4 = lungimea textului ce trebuie asat n acest program s-au putut identica cteva apeluri de sistem frecvente.

14.8

Depanarea unui program

corect de la prima rulare. De cele mai multe ori, programele scrise de noi nu funct , ioneaza De asemenea, se poate ntmpla ca un program care a funct , ionat corect timp de ct , iva nu mai ruleze bine acum, n momentul introducerii unei date neprevazute ani nainte sa initial. de a gasi s Depanarea unui program este o metoda , i identica aceste erori sau defecte s din program. Depanarea este o activitatea de durata , i obositoare, de obicei. Abilitatea factorul cheie programatorului de a identica bug-urile (gres elile din program) reprezinta , inuent n acest proces. Dar, nu trebuie uitata , a pe care o au metodele de depanare (debugging ). Desigur, pentru programele scurte se poate folosi printf pentru as , area diverselor este o metoda ce presupune modicarea codului mai mult dect informat , ii chiar daca este nevoie pentru corectarea gres elii. , folosirea unor instrumente de Pentru programele mai complicate este necesara 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 de GDB1 , depanatorul standard GNU, scris de Richard Stallman n 1986. prescurtata mai larga Este un instrument portabil, capabil de a depana programe scrise ntr-o suita de limbaje (C, Ada, Basic, Fortran, C++ etc). prin urmatoarele , i cerute de la orice program de GDB se remarca 4 lucruri, capacitat depanare a codului:

se permite pornirea execut, iei unui program, specicnd orice parametru ce-i poate
afecta comportamentul; oprirea programului ntr-un anumit punct, pe baza unor condit este posibila , ii specicate de utilizator;

n cazul opririi premature a programului, se pot examina toate condit, iile ce au dus
la acest caz;
1

http://sourceware.org/gdb

490

INTRODUCERE N SISTEME DE OPERARE

se permite schimbarea valorii unei variabile uneori putndu-se schimba s ,i


a a par asi depanatorul. instruct , iuni pentru a modica execut , ia programului far Pentru a putea depana un program cu GDB, acesta trebuie nti compilat utiliznd un ag special -g pentru a se permite salvarea anumitor informat , ii ce vor utile n continuare. evitarea oricarei De asemenea, se recomanda optimizari. n continuare, vom prezenta un exemplu de rulare a unui program sub gdb. Pornim prin a lista problema pe care o avem:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

mihai@keldon:~/tmp$ cat 1.c #include <stdio.h> #include <stdlib.h> int main() { int n = a = for

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);

} for (i = 0; i < n; i++){ for (j = 0; j < n; j++) printf("%d ", a[i][j]); printf("\n"); } return 0; } mihai@keldon:~/tmp$ gcc -Wall 1.c 1.c: In function main: 1.c:8: warning: assignment from incompatible pointer type mihai@keldon:~/tmp$ ./a.out Segmentation fault

tratam nti warningurile s depanam codul, vom proceda Des , i este normal sa , i apoi sa diferit acum, ignornd outputul lui gcc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

mihai@keldon:~/tmp$ gcc -Wall -g -O0 1.c ... mihai@keldon:~/tmp$ gdb ./a.out ... (gdb) run Starting program: /home/mihai/tmp/a.out Program received signal SIGSEGV, Segmentation fault. 0x08048488 in main () at 1.c:11 11 a[i][j] = i + (j-1); (gdb) list 6 int i, n, **a, j; 7 n = 6; 8 a = (int*) malloc(n * sizeof(char)); (gdb) print *a $4 = (int *) 0x0 (gdb) break main

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE


18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

491

Breakpoint 1 at 0x8048445: file 1.c, line 7. (gdb) r The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /home/mihai/tmp/a.out Breakpoint 1, main () at 1.c:7 7 n = 6; (gdb) next 8 a = (int*) malloc(n * sizeof(char)); (gdb) display a 1: a = (int **) 0xbfe62388 (gdb) n 9 for (i = 0; i < n; i++){ 1: a = (int **) 0x8634008 (gdb) 10 for (j = 0; j < n; j++) 1: a = (int **) 0x8634008 ... (gdb) q The program is running. Exit anyway? (y or n) y

n interiorul gdb, s-au folosit urmatoarele comenzi:

run, prescurtat r permite execut, ia programului; list, prescurtat l permite listarea codului programului n jurul punctului unde
acesta s-a oprit;

print, prescurtat p permite as , area unei variabile; break, prescurtat b permite stabilirea unui punct de ntrerupere n interiorul
programului; urmatoarea next, prescuratat n executa instruct , iune a programului (cea as , ata comenzii); n momentul tastarii

display, disp permite as , area unei variabile pe parcursul procesului de depanare;


programului, ies quit, q terminarea depanarii , irea din gdb. simpla trimitere a unei comenzi goale (doar apasarea Observat tastei Enter) duce la , i ca executarea comenzii anterioare.
1 Pentru mai mult detalii, consultat , i manualul GDB ,.

ddd graca, folosirea lui Des , i foarte util, GDB are un dezavantaj major: neavnd interfat ,a un front-end grac sub denumirea de Data Display este mai greoaie. Din fericire, exista Debugger (DDD2 ). oferirea unei interfet a unor Pe lnga , e grace ce permite stabilirea mult mai us , oara puncte de oprire a programului (breakpoints), ddd s-a remarcat prin as , area interactiva
1 2

http://sourceware.org/gdb/current/onlinedocs/gdb_toc.html#SEC_Contents http://www.gnu.org/software/ddd/

492

INTRODUCERE N SISTEME DE OPERARE

as a datelor programului utiliznd grafuri. Aceasta , are permite studierea unui program prin analiza datelor s , i nu a liniilor de cod, un proces evident mult mai simplu.
1 2 3 4

mihai@keldon:~/tmp$ gcc -Wall -g -O0 1.c ... mihai@keldon:~/tmp$ ddd ./a.out ...

Fiind un front-end al GDB, principiile de folosire sunt similare. Se va compila sursa s , i se va porni debugger-ul, restul comenzilor ind nlocuite cu butoane n mediul grac.

14.8.2

valgrind

Valgrind1 este un utilitar de programare folosit pentru a depana memoria, a detecta leak-urile de memorie s , i a face proling. Autorul lui este Julian Seward, care n 2006 a cs tigat un al doilea Google-OReilly Open Source Award pentru Valgrind. , dinamica. El cont Valgrind este un framework de analiza , ine un set de utilitare, iar ecare dintre acestea realizeaza un tip aparte de depanare sau proling. Dintre aceste componente, cele mai importante sunt:

memcheck checker de memorie.


cachegrind simulator de cache, numarul de instruct , iuni executate s , i cache miss-uri cauzate posibile race conditions din program helgrind depisteaza programul massif un proler pentru heap, spune ct memory heap utilizeaza Cel mai des folosit este memcheck, de aceea implicit valgrind l folosest , e pe acesta, se dores daca te folosirea altui utilitar acesta se va da ca parametru. ,
1 2 3

andrew@Goliath:~$ valgrind --tool=massif ./test andrew@Goliath:~$ valgrind --tool=cachegrind ./test

Similar cu gdb, programul trebuie compilat cu ag-ul -g pentru a primit informat , ii de se poata specica linia exacta la care a aparut depanare, astfel nct sa o problema. a optimizari este s daca este posibil, daca acest lucru ar Compilarea far , i ea recomanda -O1. Folosirea unei optimizari de determina un timp de rulare prea mare se recomanda la -O2 n sus poate produce erori de valori neinit , ializate care nu sunt corecte. n mod normal at n continuare vom analiza un exemplu de rulare. Daca , i rula programul astfel:
1

andrew@Goliath:~$ ./test arg1 arg2

Pentru a rula n valgrind cu vericarea leak-urilor de memorie rulat , i urmatoarea comanda:


1

andrew@Goliath:~$ valgrind --leak-check=full ./test arg1 arg2

urmatoarele Utilitarul memcheck depisteaza tipuri de erori:


1

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

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

493

variabile neinit, ializate citiri/scrieri n zone de memorie eliberate citiri/scrieri n zone inaccesibile leak-uri de memorie
Exemple de output pentru anumite erori: citire invalida
1 2 3 4 5

Invalid write of size 1 at 0x804841E: main (example2.c:6) Address 0x1BA3607A is 0 bytes after a block of size 10 allocd at 0x1B900DD0: malloc (vg_replace_malloc.c:131) by 0x804840F: main (example2.c:5)

utilizare de variabile neinit, ializate


1 2 3 4

Conditional jump or move depends on uninitialised value(s) at 0x402DFA94: _IO_vfprintf (_itoa.h:49) by 0x402E8476: _IO_printf (printf.c:36) by 0x8048472: main (tests/manuel1.c:8)

free-uri ilegale
1 2 3 4 5 6

Invalid free() at 0x4004FFDF: free (vg_clientmalloc.c:577) by 0x80484C7: main (tests/doublefree.c:10) Address 0x3807F7B4 is 0 bytes inside a block of size 177 freed at 0x4004FFDF: free (vg_clientmalloc.c:577) by 0x80484C7: main (tests/doublefree.c:10)

la copierea unor blocuri de memorie suprapunerea adresei destinat, ie cu cea sursa


1 2 3

Source and destination overlap in memcpy(0xbffff294, 0xbffff280, 21) at 0x40026CDC: memcpy (mc_replace_strmem.c:71) by 0x804865A: main (overlap.c:40)

rezumat al leak-urilor de memorie


1 2 3 4 5 6

LEAK SUMMARY: definitely lost: indirectly lost: possibly lost: still reachable: suppressed:

48 bytes in 3 blocks. 32 bytes in 2 blocks. 96 bytes in 6 blocks. 64 bytes in 4 blocks. 0 bytes in 0 blocks.

Pentru mai multe detalii se va folosi parametrul --leak-check=full. Informat , iile astfel: detaliate despre leak-uri vor arata
1 2 3 4 5 6 7 8 9

8 bytes in 1 blocks are definitely lost in loss record 1 of 14 at 0x........: malloc (vg_replace_malloc.c:...) by 0x........: mk (leak-tree.c:11) by 0x........: main (leak-tree.c:39) 88 (8 direct, 80 indirect) bytes in 1 blocks are definitely lost in loss record 13 of 14 at 0x........: malloc (vg_replace_malloc.c:...) by 0x........: mk (leak-tree.c:11) by 0x........: main (leak-tree.c:25)

494

INTRODUCERE N SISTEME DE OPERARE

1 mai multe informat Site-ul proiectului cont , ine un manual de utilizare n care se pot gasi , ii 2 3 despre erori s , i opt , iuni pentru memcheck.

pe majoritatea platformelor Linux, exista s neociale pentru Valgrind ruleaza , i portari NetBSD s , i FreeBSD.

14.9

Medii integrate de dezvoltare

Un mediu integrat de dezvoltare este construit pentru a spori productivitatea programatorilor prin oferirea unor componente strns legate prin intermediul interfet , ei cu utilizatorul. Totus , i, deoarece este vorba de un sistem complex, productivitatea poate aparea o perioada lunga de adaptare s , are a mediului. sporita dupa , 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 s n mod obis , nuit, un IDE este orientat pe un limbaj de programare specic, des , i exista ,i except ii. ,

14.9.1

Eclipse

Utiliznd Java, avnd un comportament congurabil prin plugin-uri, mediul de dezvoltare Eclipse4 poate utilizat pentru a dezvolta cod ntr-o mult , ime de limbaje. Sistemul de plugin-uri nu este doar un mecanism ce permite folosirea mai multor s limbaje de programare, ind posibila , i integrarea solut , iilor de versionare a codului (SVN), scrierea documentat , iei LaTeX, testarea aplicat , iilor de ret , ea etc. este put Cu toate acestea, Eclipse are s , i cteva dezavantaje. Interfat , a graca , in mai Fiind scris n Java, este absolut necesara prezent complicata. , a unei mas , ini virtuale Java este destul n sistem pentru a putea folosit. Nu n ultimul rnd, memoria consumata de mare. De asemenea, ind orientat pe proiecte, mediul de dezvoltare nu se preteaza pentru programele mici (sub 300 de linii).

14.9.2

Anjuta

Spre deosebire de Eclipse, Anjuta5 este un IDE pentru C s , i C++ pentru GNU/Linux. o serie de facilitat , i precum managementul Scris pentru GTK s , i Gnome, programul ofera 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 congurari.
1 2

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

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

495

Figura 14.1: Eclipse

Figura 14.2: Anjuta sau GtkSourceView n vim sau Emacs prin intermediul unui singur script scris de Anjuta detecteaza mai multe plugin-uri pentru acelas utilizator. Daca , i scop, utilizatorul selecteze unul din acestea, select va rugat sa , ia indu-i memorata. , i de source control De asemenea, prin intermediul plugin-urilor se pot introduce facilitat managerul de proiecte nu ret (SVN). Mult mai important este faptul ca , ine informat , ii despre proiect n alt s ier, astfel ind posibil a dezvoltarea ntr-un grup mixt de utilizatori, ,

496

INTRODUCERE N SISTEME DE OPERARE

unii folosind Anjuta, alt , ii folosind editoare clasice (vim, Emacs). un plugin pentru interact Pentru dezvoltarea aplicat , iilor grace Gtk, Anjuta ofera , iunea cu un generator de clase s Glade. Acceptnd s , i limbajul C++, Anjuta ofera , i un plugin ce va ierarhia claselor din proiect. De asemenea, exista plugin-uri pentru gdb, valgrind arata s , i gprof (ultimul pentru proling-ul codului scris).

14.10

Managementul proiectelor software

importanta n dezvoltarea aplicat activitat , ile de O componenta , iilor software o reprezinta gestiune, monitorizare s i control a acestora. Managementul proiectelor software este , legat de procesul de dezvoltare software s , i de modul n care o aplicat , ie este proiectata, testata s dezvoltata, i prezentat a. , , ile de management al proiectelor software se refera la nt Activitat , elegerea cerint , elor aplicat iei, arhitectura s i proiectarea acesteia, mp art irea de roluri s i responsabilit at , , , , , i n cadrul echipei, motivarea echipei, rezolvarea conictelor, discut , ii, monitorizarea s ,i controlul activitat Domeniul , ilor, feedback, evaluarea rezultatelor, analiza calitat , ii. managementului proiectelor sofware are o relevant a deosebit a ntruct ecare proiect , de un altul. De asemenea, ntruct niciun limbaj de programare nu este software difera e bine corelate cu limbajele, tehnologiile s perfect, procesele de dezvoltare trebuie sa ,i framework-urile folosite.

14.10.1

Procese de dezvoltare software

structura de activitat , i folosita pentru Procesul de dezvoltare software reprezinta dezvoltarea unui produs software. Activitatile cuprinse n procesul de dezvoltare software sunt: extragerea cerint , ilor; planicarea se refera , elor s , i stabilirea funct , ionalitat la stabilirea specicat proiectarea se refera , iilor s , i a arhitecturii (module sau componente s , i interact , iunile ntre acestea); la dezvoltarea efectiva a aplicat implementare se refera , iei; vericarea respectarii cerint testarea sau vericarea nsemna , elor software s ,i a n condit funct , ionarii , ii optime a aplicat , iei;

documentarea aplicat, iei;


sau livrarea acestuia clientului; lansarea aplicat, iei pe piat, a asigurarea funct corecte a aplicat mentenant , ionarii , iei n condit , iile , a se refera aparit la solicitarile client , ieie de noi probleme s , i raspunsuri , ilor.

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

497

doua tipuri de modele pentru implementarea procesului de dezvoltare software: Exista 2 modelul clasic (waterfall 1 ) s , i modelul iterativ . , ilor procesului de Modelul clasic presupune o dezvoltare pas cu pas a activitat nu a fost management. O activitate nu va ncepe ct timp activitatea anterioara Acest model are avantajul unei dezvoltari riguroase, dar ofera o exibilitate denitivata. iar o echipa care lucreaza la o anumita componenta va trebui sa as redusa, , tepte ca ncheie componente proprie. echipele anterioare sa presupune construirea unei part , i reduse a proiectului Modelul de dezvoltare iterativa software s i apoi cres terea acesteia. Procesul iterativ este preferat n momentul n care , , a modelului iterativ o reprezinta nu se cunoas O subclasa , te foarte bine scopul urmarit. (agile software development 3 ). foloses dezvoltarea agila Dezvoltarea agila te , mecanismul de feedback ca principal mecanism pentru controlul s , i evolut , ia proiectului. Un alt exemplu de model iterativ este Extreme Programming 4 care presupune , i foarte mici ale unui proiect (de obicei n echipe mici) s dezvoltarea de part , i apoi integrarea acestora n proiect.

14.10.2

Aplicat , ii web pentru managementul proiectelor software

un set divers de aplicat Exista , ii de gestiune a proiectelor software. n cadrul acestora, o aplicat categorie aparte o reprezinta , iile web pentru managementul proiectelor software. n general, un set integrat de componente printre care: Aceste aplicat , ii ofera, facila de wiki un wiki este o aplicat, ie web care permite editarea colaborativa cont , inut; celebra enciclopedie online Wikipedia foloses , te tehnologia wiki pentru dezvoltare colaborativa; un repository (vezi sect, iunea 14.4) pentru gestiunea codului sursa;

sistem de tichete pentru raportarea problemelor (bug-urilor ) s , i pentru cerint , e de


, i; noi funct , ialitat , ilor. roadmap s , i milestone-uri pentru planicarea s , i contorizarea activitat pentru gestiunea proiectelor software. Trac foloses Trac5 este o aplicat , iei minimalista , te Subversion ca aplicat , ie pentru gestiunea codului. Un aspect pozitiv al Trac este numarul mare de plugin-uri disponibile6 . Trac este scris n Python s i este folosit de un num ar mare , de organizat Redmine7 este o aplicat , ii. , ie web pentru gestiunea proiectelor software folosind Ruby on Rails8 . Redmine a fost inuent scrisa , at puternic de Trac. Redmine n plus fat de Trac o diversitate de utilitare de gestiune a codului (Subversion, Git, ofera ,a Mercurial, Bazaar, Darcs), gestiunea de proiecte multiple n cadrul aceleias , i instant ,e s ,i folosirea de diagrame Gantt s i de calendare. ,
1 2

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/

498

INTRODUCERE N SISTEME DE OPERARE

14.10.3

Resurse online pentru dezvoltarea proiectelor

Pentru cei care nu doresc instalarea unei instant , e de Trac sau Redmine pentru dezvoltarea s i managementul proiectelor sofware, se po folosi resurse online. n , general, accesul la acestea este gratis. Oricine poate crea un cont asociat unui proiect s , i poate folosi resursele puse la dispozit , ie pentru dezvoltarea acestuia.
1 Aplicat , iipe ce stau la baza acestor site-uri sunt denumite software forge-uri . servicii Majoritatea forge-urilor pot instalate separat. Principalele site-uri care ofera 2 3 de gazduire a proiectelor software sunt SourceForge , GNU Savannah , Google code4 , 5 BerliOS , CodePlex6 .

14.11

Resurse de documentare pentru dezvoltator

Mai mult dect n orice alt domeniu, n IT documentat , ia este us , or de obt , inut, de la format la cart , i tradit electronic pna , ionale, din surse ociale sau contribut , ii ale altor persoane.

14.11.1

Documentat , ie ociala

Aceasta este Pachetele software cunoscute vin, n general, cu documentat , ie detaliata. n cazul programelor simple s accesibila, , i a bibliotecilor, prin pagini de manual (man). n cazul programelor GNU7 , manualul nu cont , ine dect un sumar al comenzilor. Pentru alternative la info, printre care informat Exista , ii mai detaliate se foloses , te info. cititorul integrat din Emacs, sau pinfo8 . utilitare Alte suite software complexe, n general limbaje de programare, poseda personalizate pentru vizualizarea documentat , iei. Cteva exemple sunt:

pythondoc pentru documentarea limbajului Python9 ; perldoc pentru documentarea limbajului Perl10 ; texdoc pentru documentarea limbajului TEX11 s , i a suitei de macro-uri pentru el,
A L TEX12 .

http://en.wikipedia.org/wiki/Forge_(software) http://sourceforge.net/ 3 http://savannah.gnu.org/ 4 http://code.google.com/ 5 http://www.berlios.de/ 6 http://www.codeplex.com/ 7 http://www.gnu.org/ 8 http://pinfo.sourceforge.net/ 9 http://www.python.org/ 10 http://www.perl.org 11 http://tug.org/ 12 http://www.latex-project.org/
2

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

499

14.11.2

Documentarea programelor proprii

nu este intent a programatorului Orice program trebuie documentat, chiar daca , ia explicita e citita de altcineva. Des ca sursa sa , i, n general, comentarii sumare la nceputul programe care permit comentarea structurata s ecarei funct , ii sunt suciente, exista ,i A generarea de documentat ie n varii formate (HTML, pagini de manual, L T X). Este, ns a, , E documentat este adresata dezvoltatorilor, s important de ment , ionat ca , ia generata , i nu utilizatorilor. funct de a Pentru ca un astfel de program sa , ioneze corect, este nevoie de o metoda a delimita comentariile uzuale de cele care contribuie la generarea automata documentat iei. Dou a 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 documentat limbaje s , i genereaza , ie n formate variate. Este, n general, prima alegere genereze documentat pentru proiecte open-source care aleg sa , ia automat. Un exemplu excelent de documentat ie generat a 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
4 documentat utiliznd Javadoc, iar Javadoc3 . Toata , ia platformei Java este generata

facila. formatul Doxygen este voit compatibil cu cel Javadoc pentru a o alternativa o alternativa interesanta, folosind comentarii n format XML s C# ofera , i marcate cu ///. mediul Visual Studio ofera suport excelent Des , i marcarea cmpurilor este mai dicila, pentru acest tip de comentarii.
1 2

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/

500

INTRODUCERE N SISTEME DE OPERARE

14.11.3

,i s Cart , i tutoriale

a, o referint rapida, dar incompleta a unei tehnologii sau Un tutorial este o scurtatur ,a poate substitui temporar documentat n faza limbaj. O astfel de resursa , ia propriu-zisa, de familiarizare, dar detaliile care lipsesc (intent , ionat, pentru a asimila mai us , or lucrurile sunt adesea esent de baza) iale pentru o utilizare ecient a a conceptului n cauz a. , sub forma electronica, s Des documentat la obiect este accesibila ,i , ia , tiint ,a de cart , i n format clasic. Acestea nu sunt nicidecum calculatoarelor nu duce lipsa deseori cont ,i s redundante, pentru ca in sugestii, subtilitat , , i practici foarte valoroase. de cart , i sunt cele care s detalieze un domeniu O categorie importanta , i propun sa ntreg, independent de implementare. Acestea cont in elemente teoretice avansate, dar , s n general, ecare domeniu are o asemenea carte, , i studii de caz relevante. s de persoanele n tema. Pentru ca nu sunt ncuiate n studiul recunoscuta , i respectata particulare, aceste cart , i sunt preferate n domeniul academic. unei implementari
1 ,i s Exemple de asemenea cart , i domeniile lor asociate sunt:

sisteme de operare: Silberschatz, Galvin, Gagne, Operating System Concepts


[26]; Tanenbaum Modern Operating Systems [32];

ret, ele de calculatoare: Tanenbaum Computer Networks [30]; arhitectura sistemelor:


Quantitative Approach [9]; Hennessy, Patterson Computer Architecture: A

compilatoare: Aho, Sethi, Ullman Compilers: Principles, Techniques, and Tools


[2]. monograe a programarii Nu n ultimul rnd, profesorul Donald Knuth scrie o veritabila The Art of Computer Programming [14]. nceputa n 1962, cartea calculatoarelor, numita sa aiba 7 volume, dintre care doar primele 3 au aparut este programata complet. , i se refera exclusiv la programare s Alte cart , i descriu n detaliu e un limbaj, e un set de utilitare sau un mediu ntreg de programare. Spre deosebire de categoria anterioara, , i se adreseaza unui domeniu mai ngust de probleme, dar adopta o abordare aceste cart hands-on, cont , innd frecvent exemple de cod. celebre n acest sens sunt: Kernighan, Ritchie The C Programming Language Lucrari [13], Wall, Christiansen, Orwant Programming Perl 2 [33], Kernighan, Pike The Practice of Programming [12], sau Eckel Thinking in Java [5]. exista cart , i care descriu n detaliu un program sau o parte a unui n cele din urma, printr-un grad nalt de specicitate s sistem complex. Acestea se remarca , i limbaj tehnic, o detalii ne despre subiectul abordat. Asemenea lucrari sunt apreciate n dar ofera sau modica programe ca parte a special n industrie, de persoane care congureaza slujbei lor. categorie se ncadreaza, de exemplu, cart , ile lui Robert Love despre kernelul n aceasta Linux, Learning the vi and Vim Editors de Robbins, Hannah s , i Lamb, sau DNS and BIND de Liu s , i Albitz.
se limiteze la un singur aspect al Desigur, domeniile se ntrepatrund. Un inginer nu s , i permite sa profesiei lui. 2 cu afect cunoscuta , iune n comunitatea Perl drept The Camel Book
1

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

501

Departe de domeniul tehnic, dar relevante pentru industria IT, sunt lucrarile cu tenta ideologica sau cele care observa s Acestea tind sa se refere la , i compara tendint , e. procesul producerii software-ului, e 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 . nala asupra cart , ilor, este esent ele dezvolta competent Ca o nota , ial a realiza ca ,e distincte fat a de citirea documentat iei exclusiv tehnice. Cele dou a tipuri de resurse se , , ele se completeaza, nu se substituie. folosesc mpreuna

14.11.4

Documentat , ie din Internet

documentat exista multe alte surse, ecare cu specicul ei. Gradul Pe lnga , ia ociala, funct de detaliu s , i interact , iunea dintre persoane variaza , ie de mijlocul de comunicat , ie.

IRC IRC (Internet Relay Chat ) este un protocol de comunicat , ie multidirect , ional n timp real. 2 3 4 Client , i uzuali pentru acest mediu sunt Pidgin , XChat , sau irssi . utilizarii programului mIRC, are o reputat Des , i protocolul nsus , i, n special datorita , ie exista mult pachete software s , i care ofera suport informal folosind ndoielnica, , i comunitat o asemenea abordare cnd se dores IRC. Este utila te un r aspuns n timp real, la obiect, , dar din care de multe ori lipsesc detalii care nu sunt imediat relevante. Majoritatea proiectelor care folosesc IRC drept mijloc de comunicare sunt gazduite de 5 frecvent n discut a legatur a ret , eaua Freenode . Dezvoltatorii se lanseaza , ii informale, far cu subiectul, de aceea protocolul are un signal-to-noise ratio destul de mic.

Usenet Usenet este o ret Canalul de , ea care precede cronologic World Wide Web-ul. este comunicat , ie este tot one-to-many, dar, spre deosebire de IRC, aceasta metoda asemanndu-se asincrona, cu email-ul. vrstei venerabile a s Datorita , i a lipsei sale relative de popularitate, Usenet este folosit dar care au cunos de unii utilizatori mai n vrsta, , tint , e tehnice except , ionale. Usenet cont , ine discut , ii tehnice detaliate, dar s , i atacuri personale s , i ame-wars. mai ofere servere de Usenet, dar o metoda excelenta n ultimii ani, ISP-urile au ncetat sa 6 de a citi s , i scrie mesaje este arhiva Google Groups . Un grup de o notorietate legendara, att pentru discut , iile referitoare la limbajul C, ct s , i pentru ame-urile numeroase, este comp.lang.c.
1 2

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

502

INTRODUCERE N SISTEME DE OPERARE

sursa de informat Mai mult dect orice alta cu persoanele care , ie, Usenet este neiertator fac gres Se recomanda citirea ctorva tread-uri de discut , eli. , ie nainte de a porni o 1 discut ie nou a . ,

Google sursa de informat O ultima Avantajul este viteza cu , ie este a folosi un motor de cautare. prin majoritatea surselor ment care acesta cauta ionate mai sus, inclusiv discut , , ii Usenet parte, este uneori dicila alegerea cuvintelor sau log-urile canalelor de IRC. Pe de alta potrivite pentru exprimarea unei probleme.

14.12
14.12.1

Studiu de caz
Microsoft Visual Studio

Microsoft Visual C++ (MSVC) este un IDE(Integrated Development Enviroment) facut de Microsoft pentru limbajele de programare C, C++ s i C++/CLI. Acesta cont ine utilitare de , , depanare s , i dezvoltare a codului scris n C++. de codul C/C++, este compus din mai multe Visual C++, componenta care se ocupa elemente: pentru platformele x86, x64 s compilatorul Visual C++, cont, ine optimizari , i Itanium

bibliotecile Visual C++, cum ar ATL(Active Template Library), MFC(Microsoft


Foundation Class), CRT(C RunTime Library) s , i biblioteca standard C

mediul de dezvoltare Visual C++. Compilatorul s , i bibliotecile pot accesate s , i prin


mediul de dezvoltare ofera posibilitat , i de dezvoltare interfat , a n linie de comanda, a proiectelor s , i depanare mai facila mai multe metode de a crea un proiect n Visual C++: Exista

se poate folosi un s , ablon, cum ar Console Application Template, pentru a realiza


proiecte simple cont se poate folosi s , i un wizard pentru crearea unei solut , ii, o solut , ie poate sa , ina mai multe proiecte e inclus se poate crea un s , ier text simplu salvat cu extensia .cpp, iar acesta sa ntr-un proiect gol de tipul Win32 Application ce permite sa se creeze un proiect, sa Folosind wizard-ul avem acces la o interfat ,a un s se generezeze s s se modeleze un proiect dupa , ablon s , i sa , iere sursa , i directoare pentru aplicat , ie. Visual C++ lucreaza cu framework-uri de aplicat , ii s , i biblioteci pentru a crea schelete de programe peste care se poate lucra ulterior. pe site-ul MSDN2 . Mai multe detalii despre proiecte putet , i gasi
1 2

Lurk before you leap. http://msdn.microsoft.com/en-us/library/6765tta0.aspx

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

503

Figura 14.3: Proiect n Visual C++

Figura 14.4: Creare proiect n Visual C++ Cuvinte cheie

coding style indent, astyle editor vim modul insert, command, visual controlul versiunii

subversion git ctags s , iere index (tag)


statica analiza

splint

504

INTRODUCERE N SISTEME DE OPERARE

GNU Autotools strace .data, .bss, .rodata


stiva

Eclipse Anjuta waterfall model iterativ Trac Redmine man info Doxygen Javadoc IRC Internet Relay Chat Usenet Microsoft Visual Studio

heap apeluri de sistem ldd depanare GDB ddd Valgrind memory leak IDE

ntrebari 1. Care din urmatoarele este un editor?

K Vim K astyle K ctags K gdb


pentru depanarea la runtime a unui 2. Care din urmatoarele aplicat , ii este folosita program?

K Valgrind K Trac K indent K git


la folosirea unui sistem de 3. Care din urmatoarele operat , ii NU este o operat , ie valida gestionare a versiunii?

K commit K update K checkout/clone K boot


la recomandari din cadrul unor convent 4. Care din urmatoarele NU se refera , ii de codare?

CAPITOLUL 14. UTILITARE PENTRU DEZVOLTARE

505

K nume sugestive pentru variabile


K funct, ii cu dimensiune rezonabila

K folosirea de spat, ii s , i linii libere K licent, ierea codului sub GPL


5. Care din urmatoarele NU este un IDE?

K Anjuta K Eclipse K Microsoft Visual Studio K OpenOfce


6. Care din urmatoarele utilitare este folosit n conjunct , ie cu Vim pentru parcurgerea a codului? facila

K ctags K splint K indent K gdb


7. Care din urmatoarele NU este un mod de folosire pentru editorul Vim?

K visual K command K insert K graphic


n Vim, pentru salvarea unui s 8. Care din urmatoarele comenzi este folosita, , ier?

K :w K :q K :s K :help
9. Care din urmatoarele este un sistem pentru controlul versiunii?

K Git K Vim K Eclipse K ddd


10. Care din urmatoarele este o aplicat , ie web pentru gestiunea proiectelor software?

K Trac K GTK

506

INTRODUCERE N SISTEME DE OPERARE

K ddd K 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

din acest capitol? Ce se nvat ,a muzica n Linux Cu ce se asculta

Cum se vede un lm n Linux Cum se scrie un CD/DVD n Linux Cum se foloseste Y!M n Linux
cont Cum se descarca , inut BitTorrent n Linux

Cum se foloses , te imprimanta n Linux


n Linux Ce jocuri 3D s , i 2D exista monitoare n Linux Cum se folosesc doua documente Word/Excel n Linux Cum se editeaza

15.1

Muzica n Linux

trebuie sa asigure, pe lnga posibilitatea de a reda s Un player bun de muzica , ierele audio, managementul acestora, salvarea playlist-urilor, posibilitatea de minimize to tray s , i, eventual, posibilitatea de audio-scrobbling (trimiterea informat , iilor despre 1 unor site-uri de prol, precum last.fm ). Un utilizator mai pretent muzica ascultata , ios ar cere s i management-ul s 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 necesara instalarea unor plugin-uri suplimentare (acestea ind instalate automat far aplicat n momentul instalarii , iei).
1

http://www.last.fm/

507

508

INTRODUCERE N SISTEME DE OPERARE

Figura 15.1: Rhythmbox

Figura 15.2: Amarok Sistemele de operare Ubuntu au preinstalat Rhythmbox. Nu este doar un player audio din aplicat ci s , i o aplicatie pentru managementul s , ierelor audio, inspirata , ia iTunes de la Apple. Echivalent, n mediile Kubuntu este preinstalat Amarok. aplicat Daca , iile preinstalate nu corespund preferint , elor lui, utilizatorul poate oricnd sa instaleze altele, precum: Rhythmbox, bazata pe mono Banshee1 o aplicat, ie similara scrisa n Python Listen2 o aplicat, ie minimala

Audacious3 un player similar aplicat, iei Winamp din Windows


1 2

http://banshee-project.org/ http://www.listen-project.org/ 3 http://audacious-media-player.org

CAPITOLUL 15. VIAT , A N LINUX

509

Figura 15.3: Audacious Amarok pentru GNOME Exaile1 o aplicat, ie similara este Music Player Daemon2 . As O aplicat , ie interesanta , a cum i spune s , i numele, ca daemon, dar este controlat, e local, e prin ret programul ruleaza , ea, de un client. zeci de astfel de client Exista i, pentru diverse platforme, scris i n varii limbaje de , , programare s , i cu interfet , e grace sau n mod text.

15.2

Filme n Linux

n Linux dect n Windows, pentru ca Vizualizarea de lme este deseori mai facila sunt toate gratuite n adevaratul nu vin programele care exista sens al cuvntului, adica ndoielnica. Mai mult, n general instalarea unui video cu alt software de provenient ,a automat instalarea codecurilor asociate, daca ele nu sunt deja player pe Linux implica instalate. VLC este un player produs de proiectul VideoLAN. Acesta are avantajul de a avea codec-uri integrate, ceaa ce reduce pachetele adit , ionale care trebuiesc instalate cu el. Pe sistemele Debian, pachetul asociat se numes te vlc. , la VLC este mplayer, cu o interfat mai minimala, dar la fel de bogat O alternativa ,a , i. Utilizatorii mplayer pot alege ntre mai multe variante de interfet n facilitat , e, de la la GUI-uri sosticate s mod text pna , i interfet , e native (pentru Mac OS X, de exemplu). mplayer are, de asemenea, posibilitatea de a reda lme folosind mai multe drivere de Astfel, daca pachetele potrivite sunt output, folosind parametrul -vo n linie de comanda. pentru a vizualiza instalate, un utilizator nu are, de exemplu, nevoie de interfat a grac a , un s , ier. mplayer poate as , a direct n framebuffer folosind biblioteca directfb sau 3 n mod text folosind aalib . Ambele programe ment , ionate folosesc preponderent biblioteca libavcodec, parte a proiectului FFmpeg. Pentru unele formate specice Windows, se pot instala drivere
1 2

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 folosit peste conexiuni text-only.

510

INTRODUCERE N SISTEME DE OPERARE

proprietare, numite generic w32codecs. Nu n ultimul rnd, ambele pachete sunt s portabile, deci pot rulate cu us , urint ,a , i pe Windows.

15.3

Scrierea unui CD/DVD n Linux

cu ajutorul utilitarului n mod clasic, scrierea de CD-uri/DVD-uri n Linux se realizeaza wodim. Aplicat cdrecord. n ultimele versiuni, aplicat , ia a fost denumita , iile grace folosite uzual pentru scrierea de CD-uri (GnomeBaker, Brasero, K3b) folosesc n spate utilitarul cdrecord. Pentru a folosi wodim/cdrecord este nevoie de o imagine de CD (s , ier .iso. Pentru a obt ine o astfel de imagine se foloses te utilitarul genisoimage (fostul mkisofs): , ,
1 2 3 4 5 6 7 8 9 10 11

razvan@valhalla:~/projects$ ls library/ eLiberatica_OReilly_books.odt eLiberatica_OReilly_lista_carti.gnumeric eLiberatica_OReilly_carti.odt eLiberatica_OReilly_lista_carti.ods razvan@valhalla:~/projects$ genisoimage -o library.iso library/ Using ELIBE000.ODT;1 for /eLiberatica_OReilly_carti.odt ( eLiberatica_OReilly_books.odt) Total translation table size: 0 [...] razvan@valhalla:~/projects$ file library.iso library.iso: ISO 9660 CD-ROM filesystem data CDROM

ca cea de mai jos: Scrierea CD-ului se face cu o comanda


1

razvan@valhalla:~/projects$ cdrecord dev=/dev/hda speed=8 library.iso

s n sistemul local de s Imaginea .iso poate montata , i accesata , iere, similar utilitarului 1 Daemon Tools din Windows:
1 2 3 4 5 6

razvan@valhalla:~/projects$ mkdir tmp_mount razvan@valhalla:~/projects$ sudo mount -o loop -t iso9660 library.iso tmp_mount/ razvan@valhalla:~/projects$ ls tmp_mount/ elibe000.odt eliberat.gnu eliberat.ods eliberat.odt
2 ca, n urma obt Se observa , inerii imaginii, s , ierele au fost redenumite n formatul 8.3 .

n GNOME, scrierea CD-urilor se poate realiza cu ajutorul utilitarului GnomeBaker. opt Pentru scrierea unui CD, se pornes , te utilitarul, se selecteaza , iunea Data CD s , i apoi directoarele de scris pe CD n arborescent se adauga a din partea stnga jos, as a cum , , reiese din gura 15.4. n momentul n care toate s se foloses , ierele au fost adaugate , te butonul Burn. cu ajutorul utilitarului K3b (vezi gura 15.5). n KDE, scrierea CD-urile se realizeaza 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_lename

CAPITOLUL 15. VIAT , A N LINUX

511

Figura 15.4: Scrierea unui CD folosind GnomeBaker

Figura 15.5: Scrierea unui CD folosind K3b

15.4

Messenger n Linux

us Pentru utilizatorii de Instant Messaging, Linux are, tradit , ional, o alternativa , or diferita, s dar mult mai exibila , i mai utilizabila. Acest program se numes Init , te Pidgin. , ial numit Gaim, Pidgin are avantajul de a s instant a programului, un multi-protocol. Folosind aceeas i interfat , ,a , i o singura ,a utilizator poate avea acces la conturile de Yahoo Messenger, MSN/Windows Live, folosirea mai multor conturi din aceeas Google Talk, AIM etc. Mai mult, este posibila ,i a a nevoie de instalarea unui patch adit ret , ea simultan, far , ional. Central conceptului de conturi multiple din Pidgin este fereastra Accounts. Aceasta din meniul AccountsManage Accounts. Adaugarea poate accesata unui cont

512

INTRODUCERE N SISTEME DE OPERARE

ea nu necesta congurari adit de Yahoo este ct se poate de facila; , ionale. Google Talk necesita specicarea unui domeniu, pentru ca se bazeaza pe un protocol descris numit XMPP1 . Un exemplu de adaugare a unui cont Google Talk este prezentat n gura 15.6.

Figura 15.6: Adaugarea unui cont de Google Talk n Pidgin pentru toate conturile active. Aceasta faciliteaza s Lista de contacte este una singura, ,i gruparea mai multor contacte ntr-unul singur, pentru cazul n care aceeas i persoan a , n lista de contacte pe mai multe conturi sau ret este prezenta , ele. Pidgin are inclusiv suport de chat multidirect , ional, cum ar conferint , e de Yahoo sau protocolul IRC. Aceste chat rooms pot adaugate n lista de contacte, astfel programul uniforma. are o interfat ,a printre altele, s Nucleul Pidgin este biblioteca Purple. Aceasta mai este folosita, , i de text-mode, dar aseman ator Finch, un program cu interfat cu Pidgin. Cele doua ,a sunt dezvoltate de echipe cu legaturi programe s foarte strnse s , i biblioteca asociata ,i au pornit din acelas i cod. , Alternative la Pidgin sunt Kopete (parte a mediului KDE), Empathy (care va nlocui Pidgin text, centerim. n unele distribut , ii), sau, cu interfat ,a

15.5

BitTorrent n Linux

mai multe Pentru protocolul BitTorrent (protocol peer-to-perr de transfer de s , iere) exista 2 aplicat Astfel, Ubuntu vine cu Transmission preinstalat. Simplu s , ii n Linux. , i us , or prin faptul ca utilizatorul nu trebuie sa seteze nicio congurabil, programul se remarca preferint a init ial nainte de rularea acestuia (existnd denite opt iuni by-default pentru , , , funct ca toate lucrurile sa , ioneze perfect). Desigur, opt , iunile pot recongurate s , i acest
1 2

http://xmpp.org http://www.transmissionbt.com/

CAPITOLUL 15. VIAT , A N LINUX

513

neind necesara o experient foarte vasta. lucru se face foarte us , or din interfat , a graca, ,a De asemenea, clientul Transmission are cel mai mic consum de memorie dintre toate aplicat , iile ce folosesc protocolul BitTorrent.

Figura 15.7: Transmission preinstalat Ktorrent1 . Ca s Pentru Kubuntu exista , i n cazul Transmission, folosirea majoritatea congurarilor acestui program este foarte facila, realizndu-se prin interfat ,a graca.

Figura 15.8: Ktorrent o interfat text, exista posibilitatea folosirii Pentru cazul n care nu este disponibila ,a
1

http://ktorrent.org/

514

INTRODUCERE N SISTEME DE OPERARE

aplicat rtorrent1 . Utiliznd ncurses2 , aceasta , ie este foarte us , or de folosit peste o conexiune ssh sau ntr-un mediu fara interfat , a graca. Limewire3 , o aplicat pe Java, Nu n ultimul rnd, exista , ie cross-platform bazata 4 , i reduse de BitTorrent. n plus, aplicat suportnd facilitat , ia foloses , te ret , eaua Gnutella pentru a localiza s , ierele cautate.

15.6

Imprimanta n Linux

de instalarea s n Linux, folosirea imprimantei este condit , ionata , i congurarea CUPS (Commmon Unix Printing System). CUPS permite instalarea unui server care trimite Poate astfel folosit pentru a servi solicitari sosite din solicitarile catre o imprimanta. ret , ea. Pachetul asociat se numes , te cups. pachetul cups-pdf care permite instalarea unei imprimante n cadrul CUPS exista 5 virtuale. Folosirea acestei imprimante virtuale conduce la obt , inerea unui s , ier PDF . n mod implicit, s , ierele generate sunt stocate n directorul PDF din home-ul utilizatorului curent. moduri: Imprimantele (sau serviciul CUPS) pot congurate n doua

prin intermediul interfet, ei grace, n Gnome (vezi gura 15.9) sau KDE (vezi
gura 15.10); n prin intermediul interfet, ei web (vezi gura 15.11); interfat, a web este accesata, mod implicit, prin intermediul URL-ului http://localhost:631/.

Figura 15.9: Gestiunea imprimantei n GNOME numai de un utilizator privilegiat. Operat Congurarea imprimantei poate realizata , iile uzuale sunt adaugarea imprimantei, s tergerea imprimantei, modicarea congur arii de , astfel nct imprimanta. CUPS are instalate majoritatea driverelor de imprimanta a operat majoritatea imprimantelor vor putea congurate far , ii suplimentare. n caz de probleme sau n cazul folosirii unor imprimante ale caror drivere nu sunt prezente se accesarea site-ului OpenPrinting6 . recomanda
1 2

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

CAPITOLUL 15. VIAT , A N LINUX

515

Figura 15.10: Gestiunea imprimantei n KDE

Figura 15.11: Interfat , a web pentru CUPS

15.7

Jocuri n Linux

originilor s nu demult, Linuxul nu a Datorita i-a fost destinat pna , i mediului caruia reprezentat un segment de piat a atractiv pentru produc atorii de jocuri. De aceea nu , foarte multe jocuri care pot rula pe acest sistem de operare. exista n Windows, cele mai multe jocuri folosesc pentru desenarea obiectelor 3D API-ul Direct3D de la Microsoft, parte a API-ului multimedia DirectX (DirectX a ajuns la cu aparit acest API (proprietar versiunea 10 odata Pe lnga , ia Windows Vista). s Microsoft), exista i jocuri care folosesc un alt API, open source, numit OpenGL (Open , Graphics Library). OpenGL este o colect , ie de funct , ii gndite a cross-language s ,i cross-platform. Este printre put inele API-uri standardizate folosite n Linux pentru , crearea obiectelor 3D s , i implicit a jocurilor 3D. Dintre cele mai cunoscute jocuri pe Linux avem:

516

INTRODUCERE N SISTEME DE OPERARE

Battle for Wesnoth1 un joc de strategie fantasy


Quake Nexuiz2 shooter, clona

Armagetron Advanced3 un joc bazat pe un lm SF din anii 80

Figura 15.12: Nexuiz de aceste jocuri gratis, facute , i conectrate n jurul lor, exista s n afara de comunitat ,i jocuri cu suport pe Linux din partea unor rme mari. Dintre acestea probabil cea mai este Id Software care ofera majoriatatea jocurilor produse s bine cunoscuta , i pe Linux. de asemenea pentru anumite jocuri s Epic games, productatorul seriei Unreal, ofera ,i o pentru Linux. varianta Wine4 este o aplicat , ie ce permite rularea unor programe destinate platformelor Windows o aplicat n wine s pe un sistem Linux. Pentru a vedea daca , ie ruleaza , i alte informat , ii 5 6 legate de rularea ei n wine putet , i consulta baza de date a proiectului . Winetricks este un script facut pentru instala mai us , or anumite aplicat , ii specice Windows, cum ar directx sau framework-ul .NET.

15.8

Dual-monitor n Linux

cu trecerea de la monitoarele CRT la cele LCD s Odata , i n acelas , i timp cu scaderea monitoare la sistemul zic a devenit pret , ului la hardware, posibilitatea de a conecta doua Cres , ii s accesibila. , terea productivitat , i a confortului n utilizarea calculatorului ndeamna din ce n ce mai mult i utilizatori s a foloseasc a o astfel de solut ie. , ,
1 2

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

CAPITOLUL 15. VIAT , A N LINUX

517

monitoare la sistem (sau un monitor s Atunci cnd sunt conectate doua , i un videoproiector) acestea pot utilizate n doua congurat , ii: monitoarele arata aceeas mirror, n care amndoua , i imagine monitoare sunt diferite s extended, n care imaginile aratate de cele doua , i alaturate numai n cazul n care se dores Congurat , ia mirror este utila , te vizualizarea aceleias ,i permite marirea informat n schimb, congurat , ii pe mai multe monitoare. , ia extinsa spat iului de lucru, as a cum se poate vedea n gura 15.13. , ,

desktop-uri. Fiecare este redat pe un monitor separat Figura 15.13: Alaturarea a doua Pentru realizarea unei congurat , ii de acest gen se pot folosi utilitare grace sau utilitare n cazul GNOME, accesnd System -> Preferences -> n linie de comanda. de Display se pot congura att parametrii pentru ecare din monitoare (rezolut, ie, rata refresh) ct s i activarea sau dezactivarea ec arui monitor (gura 15.14). n plus, intrefat , ,a desktop-uri: unul de congurare permite alegere modului n care sunt as , ezate cele doua a altul, unul deasupra altuia sau, spre exemplu, pe ce monitor se as desktop-ul lang , eaza din stnga. avansate, va trebui folosit n cazul n care se dores , te realizarea unui set de congurari utilitarul xrandr, descris n sect iunea 13.4.1. , xrandr ce permite congurarea monitorului extern pentru un Un exemplu de comanda laptop ca desktop extins este urmatoarea:
1

george@asgard:~$ xrandr --output VGA --mode 1920x1200 --rate 60 --pos 0x0 --output LVDS --mode 1280x800 --rate 60 --pos 0x1200

As , a cum se poate vedea, pentru ecare din monitoare (LVDS ecranul laptop-ului s ,i trei parametri: VGA ies , irea video) se congureaza

rezolut, ia, prin parametrul --mode rata de refresh, prin parametrul --rate (acest parametru poate lipsi, caz n care
varianta posibila) sistemul de operare va alege automat cea mai buna

pozit, ia desktop-ului, prin parametrul --pos


la fel ca majoritatea elementelor ce t Pozit a, , ia desktop-ului se masoar , in de graca pe s calculator, ncepnd din colt ul din stnga sus, avnd axa Ox orizontal a , , i axa Oy

518

INTRODUCERE N SISTEME DE OPERARE

pentru desktop extins in GNOME Figura 15.14: Congurari n jos. Astfel, n exemplul de mai sus, ies orientata , irea VGA se va aa cu colt , ul din sub cea VGA, amndoua stanga sus n origine (X=0, Y=0), iar ies , irea LVDS se aa aliniate la stnga (X=0, Y=1200). Un alt exemplu de congurare a unui desktop multiplu, care a generat congurat , ia n gura 15.14, este: prezenta
1

george@asgard:~$ xrandr --output VGA --mode 1280x1024 --pos 1280x0 -output LVDS --mode 1280x800 --pos 0x224

n stnga (X=0), cu 224 de pixeli mai jos ca originea (Y=224). Ies , irea LVDS este plasata n dreapta, la 1280 de pixeli departare de origine (X=1280) s Ies , irea VGA este plasata ,i la acelas , i nivel cu aceasta (Y=0). Cei 224 de pixeli, calculat , i ca diferent , a dintre nalt , imea ecrane (1024 s celor doua i 800), au fost folosit i pentru a aduce partea de jos a celor doua , , cum se poate vedea s ecrane la acelas , i nivel. Dupa , i n gura 15.14, n patea de sus a neagra care nu va observata nsa pe niciunul ecanului mai mic (LVDS) apare o banda din monitoare.

15.9

Documente ofce n Linux

pentru Linux, interoperabilitate aproape Des , i suita Microsoft Ofce nu este disponibila cu ea se poate obt completa ine utiliznd OpenOfce. , OpenOfce are, similar cu produsul Microsoft, componente pentru editarea documentelor, a foilor de calcul, gestiunea bazelor de date s , i realizarea prezentarilor, un corespondent al lui numite Writer, Calc, Base, respectiv Impress. n plus, exista Visio numit Draw s i un editor de formule matematice numit Math. ,

CAPITOLUL 15. VIAT , A N LINUX

519

Versiunea 3.0 a OpenOfce are inclusiv suport pentru documente n format OOXML1 . n schimb, n situat Este recomandata, , ia n care nu este nevoie de compatibilitate cu Microsoft Ofce, 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 Salvarea , ia documentelor read-only este recomandat formatul .pdf. unui document din Writer n acest format este o facilitate care vine cu OpenOfce, neind nevoie de instalarea unui plugin. alternative la OpenOfce; KOfce este o suita similara, dar sunt s Desigur, exista , i multe programe standalone, care pot edita un singur tip de s ier. Asemenea programe se , de operare superioara s , i hardware mai reduse. Doua disting prin viteza , i necesitat 2 3 exemple cunoscute sunt AbiWord s , i Gnumeric .

Cuvinte cheie

Rhythmbox Amarok Banshee codecuri VLC mplayer wodim (cdrecord) genisoimage GnomeBaker

K3b Pidgin BitTorrent Transmission Ktorrent CUPS OpenOfce ODF

ntrebari a despre codec-urile audio s 1. Care dintre urmatoarele armat , ii este adevarat , i video n Linux? codec-uri audio/video pentru Linux K nu exista plateasc pentru codec-uri n Linux K un utilizator trebuie sa a

K codec-urile sunt gratuite, dar trebuiesc compilate din surse K majoritatea codec-urilor sunt instalate ca dependent, e ale player-elor
corespunzatoare a cu procesul de scriere a unui 2. Care dintre urmatoarele comenzi NU are legatur CD sau DVD?
cu Microsoft Ofce 2007 s Formatul OOXML a fost introdus odata literei , i se distinge prin adaugarea x la extensia veche, de exemplu .docx 2 http://www.abisource.com/ 3 http://projects.gnome.org/gnumeric/
1

520

INTRODUCERE N SISTEME DE OPERARE

K wodim K cdrecord K mplayer K genisoimage


, i pentru IRC? 3. Ce program are s , i facilitat

K Pidgin K Ktorrent K centerim K Audacious


de programe care se foloses 4. CUPS este o suita , te la:

K printare K scrierea unui CD/DVD K editarea de documente Ofce K CUPS este un joc
5. Pentru trimiterea unui document catre un coleg pentru printare este recomandat formatul:

K .doc K .docx K .pdf K .odt

Anexa A Raspunsuri la ntrebari


Capitolul 1. Introducere
se poata interpreta comenzi pentru 1. interpretor de comenzi trebuie sa 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 o aplicat ocupa , ie antivirus 5. OpenSolaris celelalte sunt sisteme de operare specializate pentru dispozitive mobile doar sub Linux 6. OpenVZ ruleaza 7. un proiect care produce o component a important a a aplicat a peste nucleul Linux - GNUs not Unix , iilor ce ruleaz viat s 8. Windows pentru ca , a e dura , 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. Congurari


1. 1 poate exista doar un root se ruleaza ntr-un 2. configurarea unei partit , ii primare pentru ca 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 s , iere 521

522

INTRODUCERE N SISTEME DE OPERARE

7. virtual a toate celelalte sunt tipuri de partit, ii 8. Ubuntu la mediul grac 9. window manager window manager se refera pentru a adauga 10. adduser adduser este folosita utilizatori

Capitolul 3. Gestiunea pachetelor s , i utilizatorilor


1. useradd va crea un utilizator nou folosind congurat , ia implicita 2. Permisiunile asupra /etc/passwd nu asigur a securitate maxim a. /etc/passwd poate citit de orice utilizator 3. apt este un wrapper peste dpkg 4. leg aturi simbolice 5. grupurile din care face parte informat , iile despre grupuri sunt t , inute n s ierul /etc/group , 6. con tine versiuni ale unor pachete diferite de ceea se g ases programatorii folosesc , te n repository-urile centrale astfel de repository-uri pentru testarea de noi versiuni ale programelor

Capitolul 4. Sisteme de s , iere


1. suportului pentru jurnalizare n cazul n care se ntrerupe curentul, ultimele operat pe baza jurnalului , ii pot refacute 2. /etc/fstab 3. 606 653 = rw-r-x-wx; a-x va elimina dreptul de execut , ie de la tot ,i (rw-r---w-); u+x va da drept de scriere owner-ului (nu se realizeaza schimbari); g-r va elimina drepturile de citire ale grupului (rw----w-); o+r va da drepturi de citire altor utilizatori; drepturile n nal vor rw----w- (606) doar s 4. cat comanda cat poate aplicata , ierelor 5. interfat a de ret , , ea de looback nu are corespondent n sistemul de s , 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 ind data formatarea o partit , ie, pentru a putea folosi spat , iul de pe aceasta, este necesara acesteia cu un sistem de s iere ,

ANEXA A. RASPUNSURI LA NTREBARI

523

Capitolul 5. Procese
1. init este primul proces pornit n sistem, cu PID-ul 1 pentru a rula un proces cu caracteristici de 2. nohup comanda este folosita daemon un singur proces init cu PID-ul 1 3. 1 exista limita pentru procesele bash din sistem 4. oricte nu exista 5. kill comanda doar trimite semnale proceselor 6. fals,fals un program poate rulat de mai multe ori astfel se vor crea mai pe prima coloana pid-ul multe procese care au aceeas , i imagine; top as , eaza 7. pkill comanda permite trimiterea de semnale 8. /proc un sistem de s informat , iere virtual, n care se gasesc , ii despre ecare proces n parte , ile 9. adev arat, fals toate PID-urile au valori pozitive; n mod normal, prioritat au valori ntre -19 s i +20 , pentru 10. explorer - nice Explorer este un shell, nice este o comanda , ii unui proces modicarea prioritat

Capitolul 6. Pornirea s , i init , ializarea sistemului


1. BIOS, GRUB, vmlinuz, init 2. un sector ce cont atura 0xAA55 (ultimii doi , ine semn el cont octet , i) un sector este de tipul boot daca , ine aces , ti ultimi doi ocetet , i, nu cont astfel se poate face un sector care sa in a un sistem de operare dar s a e , bootabil avnd aces , ti ultimi doi octet ,i 3. upstart 4. 4, 1, 1, oricte 5. POST/CMOS 6. stage2 7. /boot/grub/menu.lst 8. init, getty, login, bash 9. (hd1,2) 10. adev arat/adev arat

Capitolul 7. Analiza hardware a sistemului


, ii de 1. CPU CPU (Central Processing Unit) este procesorul, echivalentul unitat s comanda i a unit at ii de execut ie din modelul Von Neumann , , ,

524

INTRODUCERE N SISTEME DE OPERARE

date raw de pe un dispozitiv 2. dd dd copiaza 3. dd dd este utilitar de copiere de date, nu de informare comanda modinstall 4. modinstall nu exista un disc 5. /dev/hda3 /dev/hda3 reprezinta 6. /dev/ttyS0 /dev/ttyS0 este asociat unui dispozitiv serial chipset-uri importante de 7. southbridge southbridge este unul din cele doua pe placa de baza la un tip de arhiva 8. TGZ TGZ se refera 9. placa grafic a AGP (Advanced Graphics Port) 10. dimensiunea registrelor dimensiunea registrelor este cea care denota tipul arhitecturii (arhitectura pe 32 de bit , i, pe 64 de bit , i)

de ret Capitolul 8. Congurari , ea


1. Serverul web de la adresa cs.pub.ro este oprit stat , ia este browser-ul nu reus ca online (comanda ping reus , es , te); daca , es , te nseamna serverul web este oprit (al treilea octet este 257; mai mare dect 255) 2. Nu adresa este gres , ita 3. 172.16.150.0 se face operat , ia 172.16.150.200 S , I-LOGIC 255.255.255.0; 172.16.150.0 rezulta 4. Dorel a generat foarte mult trafic n timp scurt, lucru foarte multe specific virus , ilor opt , iunea -f a comenzii ping genereaza pachete (ood) 5. Asocia nume de domenii cu adrese IP conform denit , iei 6. 102.168.124.159, pentru c a a fost ultima adres a implicit daca nu se foloses configurat a de root masca este congurata , te opt , iunea netmask /etc/network/interfaces 7. fals, adev arat s , ierul se cheama 8. adev arat, false serverele pot accesate; DNS este necesar pentru a IP) asigura referirea acestora prin nume (n loc de adresa 9. calea c atre surs a s , i destinat , ie conform denit , iei 10. ping localhost toate celelalte comenzi folosesc comanda ping catre un server referit prin nume; referirea prin nume necesita un server DNS

Capitolul 9. Servicii de ret , ea


1. editarea unui nou mesaj editarea se face pe sistemul local; nu necesita o conexiune client-server

ANEXA A. RASPUNSURI LA NTREBARI

525

peste TCP 2. fals, fals telnet este protocol de nivel aplicat , ie care funct , ioneaza (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 autenticare pe s a existe pe test.com comunicat, ia FTP necesita se autentice server; bestman este utilizatorul care trebuie sa 7. adev arat, fals din denit, 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 HTTP , i raspunsuri folosind SMTP 10. niciuna dintre variante comunicat , ia se realizeaza

Capitolul 10. Elemente de securitate


1. filtrarea pachetelor de ret , ea 2. citire s , i execut , ie cu umask 022 s , ierul va creat cu drepturi 644. Dupa execut , ia comenzii chmod go+x test grupul va primi drept de execut , ie. ntr-un nal, grupul va avea drepturile r-x complexa, formata cu cifre, litere s 3. _cOrN31[]sh+ este o parola , i simboluri 4. vrfuri de tensiune n ret a , eaua electric 5. toate variantele 6. fals, fals virusul dintr-un e-mail trebuie nti activat; n funct , ie de tipul lui s ,i de clientul de e-mail, metoda de activare poate diferi; un sistem poate "gazda" orictor virus , i, att timp ct nu este protejat 7. num arul de client , i ai server-ului restul informat , iilor se pot extrage direct din tracul monitorizat 8. ulimit 9. definirea unei politici de securitate 10. /etc/shadow

Capitolul 11. Compilare s , i linking


1. ajut a ca aplicat a fie mai simplu de ntret , iile s , inut dezvolte s ntret componente, utiliznd programatorii nu mai trebuie sa , i sa , ina componentele disponibile n biblioteci

526 2. -c 3. se numes , te portabilitate

INTRODUCERE N SISTEME DE OPERARE

se gaseasc n directorul 4. make <target> s a , ierul Makefile trebuie sa curent; pentru trimiterea unui s , ier Makefile ca parametru se foloses , te parametrul -f 5. fis a C f ar a directive de precompilare , iere surs este integrat la compilare n 6. static library codul dintr-o biblioteca statica executabil 7. adev arat, fals apelurile de sistem pot executate s aplicat , i direct de catre , ii 8. fis , ierul este executabil restul informat , iilor reies din ies , irea comenzii

file
mai us 9. fals, fals programele interpretate se depaneaza , or dect cele compilate deoarece procesul de dezvoltare nu mai presupune compilarea codului; nu rezulta s n urma compilarii , iere n limbaj de asamblare (s , ierele n limbaj de asamblare nu se pot executa direct pe procesor) 10. strace <program>

Capitolul 12. Shell scripting


1. Flash Flash este un plug-in pentru web browser dintre cele prezentate care poate primi ca 2. grep este singura comanda parametru o expresie regulata 3. << este operatorul pentru deschiderea unui here document 4. test a ==b [$a == $b] nu are operanzii separat , i de paranteze; celelalte , ii opt , iuni nu sunt folosite pentru testarea egalitat 5. Sorteaz a liniile n format numeric 6. cut cut este folosit pentru extragerea de componente dintr-o linie de text e interpretate, motiv 7. Viteza mare de execut , ie scripturile shell trebuie sa mica de execut pentru care au o viteza ie , 8. Prezint a calea c atre utilitarul folosit pentru rularea

scriptului
comanda repeat n Bash 9. repeat nu exista recursiv doar s 10. find . -mindepth 2 -type f comanda as , eaza , ierele din subdirectoare

Capitolul 13. Mediul grac


(alpha channel ) 1. PNG PNG este un format bitmap cu suport pentru transparent ,a

ANEXA A. RASPUNSURI LA NTREBARI 2. UTF-8 UTF-8 este un standard de codicare a caracterelor n s , iere 3. permite unui utilizator s a se autentifice n interfat ,a grafc a conform denit, iei

527

4. Xorg s , i bitmap Xorg este o implementare de server X, bitmap este un tip de imagini 5. Dorel nu are dreptul s a porneasc a serviciul kdm din prompt utilizatorul nu este autenticat ca root se poate observa ca 6. Spotlight Spotlight este un serviciu de indexare s a s , i cautare , ierelor n Mac OS X 7. KDE KDE este un Desktop Environment 8. System Information restul aplicat , iilor sunt folosite pentru a aa informat , ii n linia de comanda cum arata ferestrele 9. Adev arat, Fals Un Window Manager controleaza aplicat iilor prin intermediul componentei window decorator . Clientul X nu , cu utilizatorul direct; server-ul X face acest lucru. interact , ioneaza 10. Xorg Xorg este o implementare de server X

Capitolul 14. Utilitare pentru dezvoltare


1. Vim gdb este un debugger, ctags este un program utilizat pentru a prelucra o s sursa , i scoate un s , ier cu indecs ,i s , i astyle este un code beautier 2. Valgrind git este un program de revision control, indent este un code beautier s , i Trac este un utilitar de management a proiectelor a 3. boot checkout/clone aduc local o copie a repository-ului, commit adaug modicarile la repository s , i update aduce repository-ul local la cea mai noua versiune nu va inuent 4. licent , ierea codului sub GPL o licent ,a , a frumuset , ea sau lizibilitatea codului. unelte necesare dezvoltarii 5. OpenOffice OpenOfce este Ofce Suite, nu ofera codului. statica a codului, indent este un 6. ctags splint este un utilitar de analiza code beautier s , i gdb este un utilitar de depanare apasnd 7. graphic n modul visual se intra tasta v, n modul command se apasnd apasnd intra :, n modul insert se intra tasta i ntr-un tab s 8. :w :q nchide editorul, :s va face replacei, :help lanseaza , ierul de help 9. git Vim este un editor, Eclipse este un IDE s , i ddd este un debugger 10. Trac GTK este un widget toolkit, ddd este un debugger s , i Waterfall este un model de a dezvoltare software-ului

528

INTRODUCERE N SISTEME DE OPERARE

Capitolul 15. Viat , a n Linux


1. Majoritatea codec-urilor sunt instalate ca dependen te ale (nu player-elor corespunz atoare. pentru o utilizare mai us , oara trebuie instalare ulterior codecurile) 2. mplayer este un media player de Pidgin are suport s 3. Pidgin libpurple, biblioteca utilizata , i pentru IRC 4. printare Common Unix Printing System 5. .pdf celelalte formate nu sunt suportate integral pe toate sistemele

Bibliograe
[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 Garnkel, Gene Spafford, and Alan Schwartz. Practical Unix and Internet Security. OReilly Media, third edition, February 2003. [8] Mark G. Graff and Kenneth R. Van Wyk. Secure Coding: Principles and Practices. OReilly, July 2003. [9] John L. Hennessy and David A. Patterson. Computer Architecture: A Quantitative Approach. Morgan Kaufmann, fourth edition, September 2006. [10] Michael Horton and Clinton Mugge. Hacknotes - Network Security Portable Reference. McGraw-Hill Osborne Media, July 2003. [11] Steve Hunger. Debian GNU/Linux Bible. Wiley, May 2001. [12] Brian W. Kernighan and Rob Pike. The Practice of Programming. Addison-Wesley Professional, February 1999. [13] Brian W. Kernighan and Dennis M. Ritchie. The C Programming Language. Prentice Hall, second edition, April 1988. [14] Donald E. Knuth. Art of Computer Programming. Addison-Wesley Professional, October 1998. [15] John R. Levine. Linkers and Loaders. Morgan Kaufmann, October 1999. [16] Robert Love. Linux Kernel Development. Novell Press, second edition, January 2005. [17] Robert Love. Linux System Programming. OReilly Media, September 2007. 529

530

INTRODUCERE N SISTEME DE OPERARE

[18] Neil Matthew and Richard Stones. Beginning Linux Programming. Wrox, November 2007. [19] David A. Patterson and John L. Hennessy. Computer Organization and Design: The Hardware/Software Interface. Morgan Kaufmann, fourth edition, November 2008. [20] Cyrus Peikari and Anton Chuvakin. Security Warrior. OReilly Media, January 2004. [21] Eric S. Raymond. The Art of Unix Programming. Addison-Wesley Professional, October 2003. [22] Razvan Rughinis Deaconescu, Andrei Ciorba, and Bogdan Doinea. Ret , , Razvan , ele locale. Printech, September 2008. [23] Razvan Rughinis Deaconescu, George Milescu, and Mircea Bardac. , , Razvan 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, fth 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
-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 ACL (Access Control List ), 88 ACPI (Advanced Conguration and Power Interface), 198 IP, 219 adresa IPv6, 219 adresa MAC, 219 adresa agile, 497 Anjuta, 469, 494 apel de sistem, 186 apeluri de sistem, 487 API (Application Programming Interface), 7 2 aplicat , ii de baza, apropos, 43, 372 arhitectura unui sistem de calcul, 188 arhivare, 82 asamblare, 328, 333 astyle, 472 autocompletion (bash), 369 AVFS (Anti-Virus Filesystem), 103 awk, 410 background, 130 bash, 366 bg, 132 531 341 biblioteca, partajata, 342, 486 biblioteca statica, 342 biblioteca 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 Cs , i C++, 357 ,a pos 264 Casut , tala, cache L1, 189 cache L2, 189 cachegrind, 492 72 cale absoluta, 72 cale relativa, case (bash), 367, 394 cat, 378, 400 certicat 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 congurare bash, 426 congurare prompt shell, 429 congurare vim, 477 congure, 484 40 consola, consola GRUB, 164 controlul accesului, 281 controlul versiunii, 479 criptare, 310 csh, 366 ctags, 478, 482 CTRL-\, 139 CTRL-ALT-DEL, 142 CTRL-C, 139 CTRL-Z, 131, 139 cut, 403 Cygwin, 356 daemon, 133 darcs, 479 dd, 206 DDD (Data Display Debugger ), 489, 491 Debian, 25 debug, 489 debugger, 489 depanare, 489 depmod, 195 desktop environment, 447 dezasamblare, 334 dhclient, 225 DHCP (Dynamic Host Control Protocol ), 251 director, 69, 74 display manager, 447 dispozitiv bloc, 203 dispozitiv caracter, 203 dispozitive de intrare/ies , ire, 187 distribut ie Linux, 24 , DLL (Dynamic-link library ), 342 DMA, 206 DNS (Domain Name System), 223, 251 documentat , ie html, 499 documentat , ie LaTeX, 499 DoS (Denial of Service), 281 Doxygen, 499 driver, 3, 193 echo, 377 Eclipse, 469, 494

INTRODUCERE N SISTEME DE OPERARE ELF (Executable and Linking Format ), 340 Emacs, 320 emulare, 17 emulator de terminal, 41 EncFS, 103 Ethernet, 252 ethtool, 239 exit, 377 export, 377 407 expresie regulata, extern, 361 Extreme Programming, 497 feature creep, 282 fg, 132 s , ier, 69, 74 s , ier executabil, 339 s , ier obiect, 333 nd, 416 Firewall, 310 rewall, 310 for (bash), 367, 395 foreground, 130 fork bomb, 281 188 frecvent , a, fsck, 212 FTP (File Transfer Protocol ), 251 funct , ii bash, 424 FUSE, 103 gateway, 222 GCC (GNU Compiler Collection), 325 gcc n Windows, 356 GDB (GNU Debugger ), 489 GID (Group Identier), 55 git, 479, 481 GNU, 23 GNU Autotools, 485 GNU CPP (GNU C preprocessor ), 331 GNU/Linux, 23 GParted, 49 grep, 405, 407 GRUB, 162 GUI, 7 GUI (Graphical User Interface), 39 GUI (gracal user interface), 366 hard-disk, 190 hardware, 186

GLOSAR head, 402 helgrind, 492 here document, 380 here string, 382 hipervizor, 16 host, 234 hostname, 236 HTML (Hypertext Markup Language), 270 HTTP (Hypertext Transfer Protocol ), 251, 270 hwinfo, 198 ICMP, 236 IDE (Integrated Development Environment ), 320, 469, 494 IDS (Intrusion Detection System), 312 if (bash), 367, 391 ifcong, 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 de ret interfat ,a , ea, 225 interpretare, 321 interpretor, 321 IP, 218 ipcong, 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 ldcong, 486 ldd, 486 a simbolica, 74 legatur

533 libnotify, 460 limbaj asamblare, 332 limbaje de nivel nalt, 322 limbaje de nivel scazut, 322 limbaje de programare de nivel nalt, 322 limbaje de programare de nivel scazut, 322 link-editare, 328, 337 linker, 338 Linux, 23 Live CD, 31 locate, 415 loopback, 226 lsmod, 194 lspci, 197 lsusb, 196 virtuala, 16 mas , ina make, 345 man, 43, 372 MAN (Metropolitan Area Network ), 218 management proiecte software, 496 massif, 492 Master Boot Record, 31 MBR (Master Boot Record ), 156, 211 medii integrate de dezvoltare, 494 memcheck, 492 memorie, 187 memorie cache, 189 285 memorie virtuala, MinGW (Minimalist GNU for Windows), 356 modprobe, 195 module de kernel, 194 montarea unui sistem de s , iere, 97 MSVC (Microsoft Visual C++), 469, 502 multi-core, 188 multiprogramare, 116 multitasking, 116 name-mangling, 360 nice, 146 nl, 400 nm, 335 nohup, 134 northbridge, 191 NTFS-3G, 103 NTLoader, 178 objdump, 334

534 one liner, 378 operatorul &, 130 operatorul $((...)), 420 operatorul >>, 380 operatorul <<<, 382 operatorul <<, 380 operatorul |, 140, 382 optimizare, 335 335 optimizarea compilarii, pachet software, 58 pachete necesare pentru dezvoltarea codului C, 324 pager, 77 paginator, 77 parametrii unui script shell, 421 31 partit , i logica, partit , ie, 30 partit , ie de swap, 30 31 partit , ie extinsa, 31 partit , ie primara, PATH, 74 pdush, 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 Ofce Protocol ), 251, 264 port, 255 port I/O, 205 portabilitate, 354 POSIX (Portable Operating System Interface), 356 POST (Power-on Self Test ), 154 PPP, 243 PPPoE, 243 pppoeconf, 243 preprocesare, 328, 330 principiul celui mai mic privilegiu, 281 drepturilor, 281 principiul limitarii printf, 377 proces, 112 proces de dezvoltare software, 496 procesor, 188

INTRODUCERE N SISTEME DE OPERARE procfs, 114, 127 program, 112 prompt, 42 protocol, 249 ps, 117 RAM, 190 ramdisk, 32 raster, 442 ret , ea de calculatoare, 217 read, 378 readline, 368 Redmine, 497 registre, 188, 189 registre vim, 476 repository, 479, 497 resolvconf, 233 reverse search (bash), 369 rmmod, 195 roadmap, 497 root, 45 ruter, 219, 252 S.M.A.R.T., 200 scanarea porturilor, 307 scheduling, 115 schimbare de context, 116 sector de boot, 154 sed, 408 Semantic Web, 268 semnal, 135 semnale, 487 seq, 396 server, 254 set, 377 setgid, 299 setuid, 299 sfdisk, 211 shebang, 375 shell, 41, 365 shell script, 365 shift, 422 shutdown, 44 SIGKILL, 135 SIGSEGV, 135 SIGTERM, 135 simbolul $, 419 sistem de s , iere, 70 sistem de operare, 1 sistem multi-core, 115

GLOSAR sisteme centralizate de versionare, 479 sisteme distribuite de versionare, 479 sisteme multi-tasking, 5 sisteme multi-user, 5 smartmontools, 200 SMTP (Simple Mail Transfer Protocol ), 251, 265 SNMP (Simple Network Management Protocol ), 251 SO (sistem de operare), 1 southbridge, 191 spat , iu kernel, 186 spat , iu utilizator, 186 spam, 267 splint, 482 sshfs, 103 starea unui proces, 115 de protocoale, 249 stiva 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 trunchiere s , ier, 382 TTL, 237 TUI (Text User Interface), 7, 39 Ubuntu, 25 udev, 201 UDP(User Datagram Protocol ), 251 UID (User Identier), 55 ulimit, 302 umask, 292 Unicode, 444 s 187 unitatea aritmetica , i logica, 187 unitatea de comanda, update, 479 Usenet, 501 utilizare biblioteci, 344

535

valgrind, 492 variabila $?, 392 variabila $@, 422 variabila $#, 421, 422 variabile make, 352 variabile speciale shell, 423 VBR (Volume Boot Record ), 156 VCS (Version Control System), 479 vectorial, 443 vi, 320 vim, 320, 473 vimtutor, 474 virtualizare, 16 virus, 305 VNC (Virtual Network Computing), 462 WAN (Wide Area Network ), 218 waterfall, 497 wc, 405 webmail, 266 whereis, 372 while (bash), 367, 398 wiki, 497 window decorator, 447 window manager, 446 WLAN, 253 working copy, 479 worm, 306 X11, 444 XHTML, 271

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