m9 admin serverelor

44

Click here to load reader

Upload: pilat-mihaela

Post on 13-Nov-2015

295 views

Category:

Documents


0 download

DESCRIPTION

retele

TRANSCRIPT

  • UNIUNEA EUROPEAN

    GUVERNUL ROMNIEI

    MINISTERUL MUNCII, FAMILIE I PROTECIEI SOCIALE

    AMPOSDRU

    Fondul Social European POS DRU 2007-2013

    Instrumente Structurale

    2007 - 2013

    OI POS DRU

    MINISTERUL EDUCAIEI,

    CERCETRII,TINERETULUI I SPORTULUI

    Investete n oameni!

    ATENIONARE!

    Coninutul acestei platforme de instruire a fost elaborat n cadrul proiectului Dezvoltarea resurselor umane n educaie pentru administrarea reelelor de calculatoare din colile romneti prin dezvoltarea i susinerea de programe care s sprijine noi profesii n educaie, n contextul procesului de reconversie a profesorilor i atingerea masei critice de stabilizare a acestora n coli, precum i orientarea lor ctre domenii cerute pe piaa muncii. Coninutul platformei este destinat n exclusivitate pentru activiti de instruire a membrilor grupului int eligibil n proiect.

    Utilizarea coninutului n scopuri comerciale sau de ctre persoane neautorizate nu este permis.

    Copierea, total sau parial, a coninutului de instruire al acestei platforme de ctre utilizatori autorizai este permis numai cu indicarea sursei de preluare (platforma de instruire eadmin.cpi.ro).

    Pentru orice probleme, nelmuriri, sugestii, informaii legate de aspectele de mai sus v rugm s utilizai adresa de email: [email protected]

    Acest material a fost elaborat de Cristian Oftez, n cadrul S.C. Centrul de Pregtire n Informatic S.A., partener de implementare a proiectului POSDRU /3/1.3/S/5.

    Versiunea materialui de instruire: V2.0

    eAdmin

  • 9. Administrarea Serverelor Drivere, module i dispozitive n Linux

    Avnd n vedere faptul c numrul de productori de dispozitive hardware de toate felurile a crescut constant, exist n prezent mii de astfel de dispozitive (i variaz de la un simplu mouse pn la plci grafice de performan care sunt foarte specializate), iar sistemele de operare existente au trebuit s in pasul cu acestea, astfel nct s permite funcionarea corect a acestora. Acest fapt este posibil datorit existenei driverilor, care ofer o interfa programabil cu restul sistemului, astfel nct programatorii s poat folosi facilitile oferite de diverse dispozitive ataate sistemului fr s fie nevoii s cunoasc n adncime modul de funcionare al acestora. n esen, driverele pot fi privite ca un mecanism de simplificare i uniformizare a prii hardware, astfel nct aceasta s poat fi folosit mai uor. Raionamentul din spatele acestei interfee programabile foarte bine definite este simplu: acesta permite o dezvoltare modular, n care drivere (fiind total independente de kernel) pot fi iniializate atunci cnd este nevoie de ele, simplificnd astfel foarte mult procesul de creare al acestora. Aceste module sunt cunoscute n Linux ca LKM, sau Loadable Kernel Module i reprezint extensii ale kernel-ului. O greeal comun n rndul utilizatorilor de Linux este concepia c aceste module fac parte din kernel n mod absolut, ns acesta poate fi mprit n dou pri importante: imaginea kernel-ului de baz (sau base kernel), adic imaginea care este ncrcat n timpul procesului de boot i aceste extensii (LKM), care comunic n mod direct cu partea de baz. Caracterul modular ofer sistemului Linux un avantaj foarte mare printr-un grad de flexibilitate crescut, modulele putnd fi oprite cnd nu este nevoie de ele sau ncrcate numai atunci cnd este nevoie de acestea. Exist dou alternative n implementarea LKM-urilor: ncrcarea acestora ca extensii, sau includerea lor n kernel-ul de baz. De multe ori, prima abordare este i cea mai bun, din mai multe motive: n primul rnd nu mai foreaz utilizatorul s recompileze kernel-ul (i deci reduce semnificativ probabilitatea apariiei erorilor sau greelilor n kernel-ul de baz), nu necesit rencrcarea sistemului i de foarte multe ori salveaz memorie (base kernel-ul fiind ncrcat mereu n memorie), ncrcnd modulele numai atunci cnd este nevoie de acestea. Un alt avantaj major al LKM-urilor l reprezint uurina cu care acestea pot fi depanate n cazul n care se ntmpl o eroare, de multe ori, erori n kernel-ul de baz ducnd la imposibilitatea ncrcrii sistemului. Aceste module nu nregistreaz o scdere n performana comparativ cu cele incluse n kernel-ul de baz, ns exist cazuri n care aceast abordare nu este posibil i kernel-ul trebuie recompilat. Vom aborda pe larg aceast problem n seciunea dedicat recompilarii unui kernel. LKM-urile pot s ndeplineasc o serie ntreag de funcii ntr-un sistem Linux, ns cele mai comune roluri sunt:

    2

    eAdmin

  • Drivere aa cum am meniona mai devreme, acestea reprezint o interfa care permite kernel-ului s comunice cu dispozitivele pentru care au fost create, fr a fi nevoie de cunostiinte detaliate despre modul n care acestea functioneza.

    Funcii de sistem ofer programelor metode de a apela funciile puse la dispoziie de sistem cum ar fi crearea unui nou proces, citirea unui fiier sau chiar oprirea sistemului. Dei majoritatea apelurilor de sistem sunt deja incluse n kernel-ul de baz, ns se pot crea noi apeluri sau chiar nlocui unele deja existente prin intermediul LKM-urilor.

    Interpretoare de executabile care fac posibil ncrcarea n memorie i rularea programelor executabile n diverse formate.

    Drivere pentru sistemul de fiiere astfel nct sistemul de operare s poat interpreta coninutul fizic i implicit i cel logic (modul n care sunt organizate directoarele i fiierele pe un mediu de stocare sau de pe reea)

    Urmnd aceast arhitectur, sistemul Linux pune la dispoziia utilizatorului o serie de utilitare prin intermediul crora s poat controla modulele existente. Pentru vizualizarea modulelor ncrcate, utilizatorul poate s foloseasc comanda lsmod (probabil prescurtat de la list modules). Acest utilitar, dup cum menioneaz i descrierea sa din manual (man), este unul oarecum trivial: unicul su rol este acela de formatare a informaiilor (aflate ntr-unul din fiierele speciale) ntr-o form ce poate fi interpretat mai uor, afind pe ecran numele, dimensiunea i dependinele tuturor modulelor de kernel ncrcate.

    3

    eAdmin

  • S analizm primul modul listat n poza de mai sus, cu numele de psmouse. Acesta reprezint modulul responsabil de interfaarea cu dispozitive periferice de tip mouse, conectate prin PS2. Putem observa faptul c modulul respectiv are dimensiunea de 32336 bytes, iar cmpul urmtor, cu valoarea 0, reprezint numrul de entiti ce depind de acest modul. Pentru nlturarea unui modul se pot folosi att comenzile modprobe dar i rmmod, ns doar prim este recomandat. Modul de utilizare al acesteia este destul de simplu, iar utilizatorul trebuie s specifice doar doi parametri: numele modului i parametrul care specific faptul c acesta dorete nlturarea modulului (-r). Dac ar fi s urmm exemplul de mai sus i am dori s excludem modulul psmouse, ar trebui executat comanda modprobe -r psmouse. Efectul nlturrii unui modul este de regul instant, avnd ca urmare (n acest caz) pierderea funcionalitii mouse-ului. n cazul n care utilizatorul dorete punerea n funciune a unui modul, din diverse motive, acesta poate utiliza tot comanda modprobe [nume_modul]. n exemplul de mai sus, putem folosi modprobe psmouse pentru a putea folosi mouse-ul din nou.

    ncrcarea automat a modulelor Sistemul poate fi configurat astfel nct s ncarce un modul LKM n mod automat atunci cnd kernel-ul are nevoie de acesta prima oar. Aceast ncrcare automat poate fi realizat n principiu prin dou mecanisme: fie prin kernel module loader (care face parte din kernel-ul Linux), fie prin versiunea mai veche a acestuia: un daemon numit kerneld. Amndou variantele folosesc utilitarul modprobe (deci implicit i insmod) pentru a-i duce sarcina la capt.

    Modul de funcionare al Kernel Module Loader Aa cum am menionat mai devreme, KML (Kernel Module Loader) face parte direct din kernel i are scopul de a ncrca module LKM n mod automat atunci cnd este nevoie de acestea. Cnd necesitatea unui modul devine aparen i acesta trebuie ncrcat, KLM creaz un nou proces (al crui proprietar este contul root) care va ncerca s ncarce modulul dorit prin executarea utilitarului modprobe (acesta aflndu-se la adresa /sbin/modprobe n mod implicit) cu o serie de parametri specifici: -s (foreaz notarea oricror erori n rapoartele de sistem), -k (modul autoclean) i desigur, numele modulului ce trebuie ncrcat. De multe ori, ultimul parametru pasat utilitarului modprobe nu este neaprat numele unui fiier de tip modul, ci mai degrab un nume simbolic, un alias pentru simplificarea numelor folosite. Lista acestora se gsete de regul n fiierul /etc/modprobe.d/aliases.

    4

    eAdmin

  • Eliminarea automat a modulelor n acelai fel n care modulele pot fi ncrcate n mod automat, exist i un mecanism de nlturare a acestora, numit autoclean. Motivul principal pentru care acest mecanism a fost implementat, este nlturarea modulelor care nu au mai fost folosite pentru perioade prelungite de timp (de regul peste 1-2 minute) salvndu-se altfel memorie i timp de procesor. Kernel Module Loader nu utilizeaz acest mecanism spre deosebire de kerneld, ns poate fi forat prin executarea comenzii rmmod all la intervale diferite de timp. n cazul n care utilizatorul dorete s beneficieze de acest mecanism, dar nu dorete s foloseasc kerneld, acesta poate programa execuia comenzii rmmod -all ca un cron job, astfel nct acesta s fie executat automat la intervale de timp fixe.

    Interfaarea cu structurile de date ale kernel-ului Kernel-ul Linux are dou roluri majore n cadrul unui sistem: s intermedieze i s controleze accesul cu diferitele dispozitive conectate la sistem i s gestioneze interaciunea proceselor (adic cnd i cum vor interaciona) cu aceste dispozitive. Directorul /proc reprezint o ierarhie de fiiere speciale, prin intermediul crora se pot obine o multitudine de informaii despre starea actual a kernel-ului. Acest director constituie i principalul mecanism prin care aplicaiile i utilizatorii pot obine informaii despre sistem. Respectnd structura unui sistem Linux (unde totul este un fiier) i analiznd coninutul directorului /proc putem trage o concluzie interesant: acesta este de fapt un pseudo sistem de fiiere dat fiind faptul c introduce un nou tip de fiier: fiierul virtual. Acesta au o calitate deosebit prin faptul c dei mare parte din acestea au dimensiunea de zero bytes, la afiare vor prezenta o cantitate mare de informaii. n esen, aceste fiiere virtuale sunt mecanismul prin care kernel-ul Linux ofer informaii despre sistem, folosind arhitectura cunoscut de totul este un fiier. Informaia este structurat n directoare i subdirectoare n funcie de categoria din care face parte. Dei majoritatea fiierelor au dimensiunea zero, i sunt read-only, acestea sunt reactualizate de kernel la intervale regulate. Totui, exist cteva fiiere din directorul /proc care pot fi alterate (de regul doar de contul root) modificnd configuraia kernel-ului. Pentru a afla de exemplu informaii despre tipul de procesor instalat n sistem, utilizatorul trebuie doar s afieze (n orice fel) fiierul /proc/cpuinfo, cu meniunea c dei o parte din aceste informaii sunt uor de neles de ctre utilizator, exist fiiere care pot fi interpretate de oameni cu greutate aici devenind aparent rolul utilitarelor existente precum top, free, etc. Pentru a putea nelege mai bine cum funcioneaz acest pseudo sistem de fiiere i ce fel de informaii ne ofer, vom analiza principalele zone ale acestuia. De regul, fiind vorba de un alt sistem de fiiere dect cel de baz i n baza celor discutate n seciunile anterioare, acesta trebuie montat

    5

    eAdmin

  • ntr-un director pentru a putea fi folosit, acesta fiind de regul chiar /proc din directorul rdcina. Principalele categorii din /proc sunt: /proc/[ identificator_numeric ]/ - Directorul /proc va conine o serie de

    subdirectoare al cror nume este un identificator numeric. Acestea simbolizeaz de fapt procese, iar numele directorului este dat de PID-ului fiecrui proces ce ruleaz n momentul curent. Directorul va conine o serie fiiere i subdirectoare:

    /cmdline conine linia de comand cu care a fost lansat executabilul, incluznd i lista de parametri.

    /cwd este un link simbolic ctre directorul activ al procesului n cauz.

    /environ conine informaii despre variabilele de stare i mediu cu care ruleaz procesul.

    /exe reprezint un link spre executabilul ce reprezint procesul, avnd inclus calea absolut.

    /fd/ este un subdirector ce conine link-uri ctre toate fiierele deschise de proces: 0 standard input, 1 standard output, 2 - standard error i aa mai departe. Fiierele sunt numite dup descriptorul de fiiere folosit i pentru a vedea exact de ce fiiere sunt legate este suficient comanda ls -l.

    /stat conine informaii despre procese, i este unul din fiierele pe care le consult comanda ps pentru a obine informaii despre procesele care ruleaz. Multe din informaiile coninute de acest fiier sunt de natur tehnic, i utile n special dezvoltatorilor de software. Pentru informaii suplimentare, apelai comanda man proc.

    /proc/apm prescurtarea de la advanced power management, ne ofer informaii despre starea bateriei n cazul n care aa ceva exist i kernel-ul a fost compilat corespunztor.

    /proc/bus conine subdirectoare pentru toate magistralele instalate /pci este un subdirector ce conine informaii despre magistralele

    pci, dispozitive i drivere. /pci/devices informaii despre dispozitivele conectate prin pci.

    Se recomand folosirea comenzii lspci pentru vizualizarea coninutului acestui fiier.

    /proc/cpuinfo reprezint o sumarizare a arhitecturii sistemului. /proc/diskstats este un fiier ce conine informaii despre activitatea

    input/output a fiecrui disc fizic. Formatul acestui fiier este oarecum greu de citit, i se recomand folosirea comenzii df pentru aflarea informaiilor legate de discuri.

    /proc/filesystem este o list cu toate tipurile de sisteme de fiiere cu care kernel-ul a fost compilat, fiind folosit de comand mount pentru ciclare, atunci cnd nu se specific n mod special un sistem de fiiere.

    /proc/kmsg - reprezint o interfa prin care utilizatorul poate s citeasc mesaje generate de kernel. Pentru a putea citi acest fiier, este nevoie de

    6

    eAdmin

  • drepturi de root, i nu se recomand accesarea simultan de ctre mai multe programe a acestui fiier. Pentru uurin, coninutul acestui fiier este cel mai uor de accesat prin intermediul comenzii dmesg.

    /proc/meminfo conine informaii despre memorie (att liber ct i utilizat, fizic i virtual) i este interpretat cel mai uor prin comanda free.

    /proc/mounts ofer informaii despre sistemele de fiiere montate n momentul afirii.

    /proc/net ofer o serie de fiiere virtuale, prin care se pot obine informaii despre starea curent a reelei. Dei mare parte din aceste informaii sunt uor de interpretat de ctre oameni, comanda netstat poate formata informaiile ntr-o msur mai bun. Directorul /proc/net conine urmtoarele puncte de interes:

    /dev un fiier ce conine informaii despre starea dispozitivelor de comunicare, precum plci de reea. Pe lng acestea, fiierul mai conine i numrul de pachete trimise i primite pentru fiecare interfa, ct i numrul de erori i alte informaii statistice. Acest fiier este citit de comand ifconfig pentru afiarea i configurarea tuturor interfeelor de reea.

    /tcp, /udp, /raw conin datele aferente socket-urilor de comunicaie pentru fiecare protocol n parte. Aceste fiiere sunt de regul folosite numai n scopul depanrii sau monitorizrii.

    /proc/partitions afieaz o tabel ce evideniaz modul n care sunt partiionate hard-discurile.

    /proc/sys acest director conine fiiere i subdirectoare ce alctuiesc mediul i variabilele de kernel. Aceste variabile pot fi schimbate prin intermediul pseudo sistemului de fiiere /proc sau prin intermediul utilitarului sysctl.

    /proc/uptime un fiier ce conine dou valori numerice. Prima dintre acestea reprezint timpul de funcionare al sistemului (msurat n secunde zecimale) sau uptime, iar al doilea reprezint timpul idle al sistemului (msurat tot n secunde zecimale). Timpul de idle se refer la numrul cumulat de secunde n care procesul a fost inactiv (nu a executat nicio instruciune), i n cazul sistemele desktop, acesta poate s fie foarte mare, atingnd chiar valori de peste 90% din uptime. n cazul unui server dedicat, aceast cifr este un indicator al eficienei de utilizare al acestuia, valori mai mici simboliznd un raport mai bun.

    /proc/version informaii despre versiunea de kernel ce ruleaz. Acest fiier concateneaz informaiile din mai multe fiiere precum /proc/sys/kernel/ostype i /proc/sys/kernel/osrelease.

    /proc/vmstat folosit pentru afiarea informaiilor legate de memoria virtual.

    7

    eAdmin

  • Sistemul de gestiune a pachetelor Unul dintre aspectele care sperie orice utilizator de calculatoare este gestiunea corect a programelor: instalarea, dezinstalarea sau configurarea acestora, provoac de multe ori probleme utilizatorilor, mai ales cnd acetia nu au experiena cu fiecare program n parte. n sistemele de tip UNIX, aceast problem era chiar mai mare dect pe alte sisteme de operare, cel puin n condiiile n care utilizatorul nu plnuia cu atenie ce i cum anume instaleaz, fiecare utilizator fiind forat s compileze singur programele pe care dorea s le foloseasc. Acest detaliu nsemna c n lipsa unui plan de desfurare al software-ului instalat ntr-un calculator, utilizatorul putea instala programe de mai multe ori, cu versiuni diferite i n locuri diferite (sau cu suprascrieri pariale), ceea ce fcea gestiunea corect a acestora aproape imposibil. Cnd un utilizator dorea s instaleze un program ntr-un sistem de tip UNIX, acesta de regul achiziiona codul surs al acestuia n format tar.gz (tar = tape archive, gz = gzip), adic o structur de fiiere i directoare, ce meninea informaii despre sistemul de fiiere (permisiuni, date, i proprietari) care era arhivata pentru distribuirea uoar. Dup acest pas, utilizatorul trebuia s extrag coninutul arhivei, i de regul, s urmeze nite script-uri de compilare relativ automate, incluse n arhiv (prin intermediul comenzii make, care se ocup att de configurare ct i de compilarea programului). Dac totul funciona corect, i dependinele de alte programe i librrii erau satisfcute, programul era instalat - cu meniunea c dac utilizatorul ar fi vrut s fac o actualizare a acestui program la o versiune mai nou, ar fi trebuit dezinstalat, i apoi reinstalat i reconfigurat. Debian a fost gndit de la nceput s ofere o soluie pentru aceast problem, i astfel a aprut un sistem complet de gestiune a programelor, unul care s ofere un sistem rapid i practic de instalare a pachetelor, abordnd n mod automat problema dependinelor i a reconfigurrilor n cazul actualizrilor de versiuni. Astfel a aprut pachetul Debian (fiiere cu extensia .deb) i apt (Advanced Packaging Tool). Pe lng toate aceste faciliti, apt ofer i posibilitatea procurrii pachetelor necesare din repository-uri (arhive de pachete), care pot fi surse locale (CD-ROM, hard-disc, etc) sau puse la dispoziie prin intermediul reelei. Toate acestea fac din apt un excelent utilitar pentru gestiunea software-ului dintr-un sistem Linux. Vom analiza n continuare compoziia pachetelor specifice distribuiei Debian, fiierele .deb. Acestea conin mai mult dect o serie de fiiere ce pot fi instalate pe sistemul nostru: pe lng fiierele de baz acestea conin i o informaii ierarhizate despre dependinele pachetului (mai exact ce alte pachete trebuie instalate astfel nct cel n cauz s poat fi instalat). n baza acestor informaii adiionale, sistemul responsabil de gestiunea pachetelor va tii ce pachete s descarce (din arhiva de pachete repository) pentru ca instalarea s poat fi terminat cu succes. De altfel sistemul este capabil s decid exact ordinea de instalare a dependinelor (ct i stabilirea acestora n funcie de pacheele deja instalate), ct i s in evidena versiunilor. Vom continua prin a detalia conceptele de dependine i conflicte.

    8

    eAdmin

  • Dependinele sunt n esen pachete necesare pentru instalarea unui alt pachet: dac am lua trei pachete imaginare a, b i c ca exemplu, iar c ar avea ca dependine pachetele a i b, atunci acesta nu ar putea fi instalat fr c pachetele a i b s fie instalate n prealabil. Sistemul respectiv funcioneaz n ambele sensuri, att pentru instalri dar mai ales pentru dezinstalari, cnd eliminarea unui pachet ar putea afecta multe altele. Conflictele se refer la perechi de pachete, care instalate mpreun ar putea cauza funcionarea anormal a unor programe. Din acest motiv, pachetele pot avea marcate alte pachete ca fiind conflictuale, i prin urmare acestea nu pot fi instalate n acelai timp. ntreg sistemul este gestionat de programul dpkg (Debian package management system), existnd mai multe interfee pentru a facilita uzul acestei aplicaii. Printre cele mai comune interfee pentru dpkg putem aminti apt-get sau varianta mai nou aptitude (tot o aplicaie de consol, ns care ofer o interfa mai uor de folosit dect cea bazat pe linia de comand). Instalarea pachetelor ntr-un sistem Debian Fiierele Debian pot fi instalate folosint att utilitarul dpkg, ct i apt-get. n cazul n care utilizatorul dispune de un fiier Debian (.deb) n mod absolut (de exemplu pachet.deb) acesta ar putea dispune instalarea acestui pachet folosind comanda: dpkg i pachet.deb n cazul n care pachetul dorit nu exist local pe sistemul n cauz, utilizatorul poate ncerca s obin acest pachet prin intermediul programului apt-get de la un server ftp, numit repository. Programul apt-get se va ocupa i de descrcarea automat a dependinelor, i tratarea oricror conflicte ce pot s apar ceea ce poate rezulta uneori n tergerea unor pachete, cu o notificare foarte clar ctre utilizator. Fiind vorba de un utilitar n linie de comand, sintaxa acestuia este una foarte simpl: apt-get install nume_pachet n urma executrii comenzii anterioare, apt va determina o list de pachete deja instalate pe sistem, pentru a putea stabili ce pachete lipsesc. Acest lucru este posibil prin interpretarea unui fiier esenial pentru sistemul Debian - /var/lib/dpkg/status. Compromiterea acestui fiier n orice fel, poate avea consecine grave asupra unui sistem Debian, pornind de la incapacitatea de a folosi platforma de gestiune a pachetelor pn la pieredea funcionalitii sistemului de operare. Din acest motiv, sistemul ine o copie (ceva mai veche dect originalul, dar relativ similar) n /var/lib/dpkg/status-old. n urma stabilirii dependinelor lips, apt va descrca att acele pachete, ct i pachetul dorit i va continua instalarea acestora, n ordinea relevant. Toate pachetele descrcate prin intermediul utilitarului apt vor fi stocate n directorul /var/cache/apt/archives. Sistemul de gestiune al pachetelor este gndit astfel nct dup descrcarea i instalarea unui pachet, acesta s rmn stocat n sistem la adresa menionat anterior, pentru a nu fora descrcarea unui pachet n mod inutil n cazul instalrilor multiple. tergerea pachetelor are loc periodic, dar poate fi forat de ctre utilizator fie prin

    9

    eAdmin

  • tergerea manual a coninutului directorului menionat anterior, fie prin rularea comenzii apt-get clean. Arhive de pachete (repository) Pentru a permite accesul facil la pachete comune, programul apt-get se foleste de arhive de pachete (numite repository). Acestea pot s varieze de la resurse locale (hard-disc, cdrom sau alte medii locale) la servere ftp de pe internet, acestea din urm fiind i cea mai utilizat variant, din moment ce de regul conin versiuni actualizate ale tuturor pachetelor dorite. Lista de repositories poate fi modificat, putnd fi adugate sau terse astfel de arhive, sistemul meninnd un fiier text (/etc/apt/sources.list), cu un format bine stabilit n care aceste arhive de pachete sunt menionate. Este important de precizat faptul c acest fiier conine doar referine ctre noi surse de software, i n cazul serverelor ftp, este necesar o conexiune fizic cu acestea.

    Analiznd imaginea de mai sus putem observa un exemplu de cum ar putea s arate fiierul sources.list. Aa cum am menionat, acesta conine o list cu referine ctre toate arhivele de pachete de pe care am putea s instalm ceva. Sistemul apt folosete o baz de date proprie pentru a pstra o list cu toate pachetele disponibile pentru descrcare (inclusiv versiunile disponibile pentru acestea) i genereaz aceast baz de date n funcie de arhivele selectate prin intermediul fiierului sources.list. Dei acest proces este automat ntr-o oarecare msur, se recomand forarea actualizrii acestei baze de date ori de cte ori se adaug un nou repository, sau cnd se ncearc instalarea unui nou program, astfel nct s ne asigurm c pachetul dorit exist n lista de pachete disponibile, actualizat la cea mai nou versiune disponibil. Pentru a fora sistemul de gestiune s reactulizeze aceast baz de date, trebuie folosit comanda: apt-get update Pe lng varianta instalrii pachetelor folosind consola sistemului, utilizatorul poate opta pentru folosirea interfeei grafice, prin intermediul programului Synaptic Package Manager. Acesta nu este altceva dect o interfa pentru sistemul apt, i ofer n esen aceleai funcii: instalarea, tergerea,

    10

    eAdmin

  • cutarea sau actualizarea pachetelor din sistem. Principala diferena dintre acesta i utilizarea n consol este un sistem n care schimbrile pot fi adugate ntr-o coad de comenzi, urmnd s fie executate ntr-o ordine anume. Principalele avantaje ale acestui program, sunt uurina cu care poate fi folosit de ctre oricine, mesajele clare (utilizatorul este atenionat foarte clar ce efect va avea orice schimbare), afiarea modificrilor altor pachete ca urmare a deciziilor luate i nu n ultimul rnd facilitile avansate de cutare a pachetelor. Synaptic Package Manager vine instalat n mod implicit cu Debian, i poate fi lansat foarte uor prin accesarea meniului System -> Administration -> Synaptic Package Manager.

    Ca i n cazul altor utilitare ce afecteaz sistemul la nivel global, pentru lansarea acestui program utilizatorul va fi rugat s furnizeze parola unui utilizator autorizat, n cazul de fa fiind vorba de contul utilizatorului root. Utilizatorul poate s adauge comenzi de instalare, tergere sau actualizare individual pentru pachete, ns schimbrile nu vor fi procesate dect dup ce acesta acioneaz butonul Apply. Ca un exerciiu, putem ncerca s instalm programul mc (Midnight Commander), vizibil n poza de mai sus. Acesta este un program de gestiune a fiierelor n mod text, similar cu Norton Commander i ofer multe faciliti pentru o gestiune mai uoar a sistemului de fiiere. Pe lng rolul su primar, programul mai conine i o serie de alte utilitare precum mcedit, un editor de text foarte util i foarte uor de folosit.

    11

    eAdmin

  • Pentru a instala pachetul mc, utilizatorul trebuie s localizeze mai nti pachetul respectiv, fie parcurgnd lista de pachete (vizibil n partea din dreapta a ecranului), fie folosind facilitile de cutare de pachete. n cazul n care utilizatorul foleste funcia de cutare, acesta trebuie s specifice o serie de parametri: un ir de caractere ce reprezint textul cutat, i cmpul n care programul s efectueaz cutarea (opiunile sunt destul de clare, ns dat fiind faptul c de regul se caut nume de pachete, se recomand cutarea dup nume i nu dup descriere pentru a reduce numrul de rezultate). Dup ce utilizatorul a identificat cu succes pachetul dorit, acesta poate s acioneze butonul din stnga al mouse-ului peste pachetul respectiv i s selecteze una din opiunile disponibile: Mark for Installation pachetul va fi marcat pentru instalare n coad de

    comenzi. n urma acionrii butonului Apply, se va ncerca instalarea acestuia i a tuturor dependinelor acestuia.

    Mark for Reinstallation va marca pachetul pentru a fi dezinstalat i instalat din nou.

    Mark for Upgrade se va ncerca actualizarea pachetului respectiv la o versiune mai nou, n cazul n care acesta este disponibil ntr-una din arhivele de pachete menionate.

    Mark for Removal marcheaz pachetul pentru tergerea acestuia din sistem.

    Mark for Complete Removal spre deosebire de varianta precedent, aceasta va elimina complet pachetul ct i eventuale fiiere de configuraie.

    Utilizatorul poate nirui mai multe comenzi, iar Synaptic se va asigura c acestea vor fi executate n ordinea corespunztoare i va avea grij s instaleze i s afieze numele tuturor dependinelor ce vor fi instalate. Este important de reamintit faptul c nici o schimbare nu va fi dus la capt pn cnd utilizatorul nu acioneaz butonul Apply. tergerea unui pachet Pe lng instalarea pachetelor, adminstratorul unui sistem Debian trebuie s poat i s le elimine din sistem. Pentru tergerea pachetelor se poate folosi tot interfaa apt-get cu o serie de parametri: apt-get remove nume_pachet n urma executrii comenzii de mai sus, sistemul apt va afia o serie de informaii eseniale precum o atenionare, lista tuturor pachetelor ce vor fi terse (apt se va ocupa automat i de nlturarea tuturor pachetelor ce depind de pachetul pe care ncercam s-l tergem, utilizatorul neavnd alt opiune), ct i informaii generale precum numrul de pachete ce vor fi instalate, terse sau actualizate i spaiul eliberat n urma aciunii. Ultimul rnd este de regul o cerere de confirmare din partea utilizatorul de regul n formatul Do you want to continue [Y/n] -, specificnd dac acesta dorete cu adevrat executarea comenzii.

    12

    eAdmin

  • OBSERVAIE: Urmnd un fel de tradiie n Linux, marea parte a confirmrilor de tipul de mai sus, pot avea una, dou sau mai multe opiuni. Printre opiunile prezente n exemplul de mai sus, putem observa faptul c litera Y (simboliznd yes) este scris cu majuscule, pentru a semnala opiunea implicit; dac utilizatorul nu specific alt opiune, cea implicit va fi selectat automat la apsarea tastei ENTER. Exemplul de mai sus poate fi tradus foarte simplu n programul Synaptic Package Manager prin selectarea opiunii Mark for Removal. Pentru specificarea tergerii complete a pachetului (adic inclusiv a fiierelor de configuraie, n cazul n care acestea exist), trebuie adugat parametrul --purge: apt-get --purge remove nume_pachet Cutarea i afiarea informaiilor referitoare la pachete Urmrind arhitectura prezentat pn acum, sistemul de gestiune al pachetelor funcioneaz prin folosirea unei baze de date proprii cu informaii despre pachetele disponibile, aceasta putnd fi reactualizat prin comanda apt-get update. Programul folosit pentru meninerea bazei de date interne actual este apt-cache, acesta permind utilizatorilor (prin intermediul consolei) s afieze i s caute n lista de pachete disponibile. De regul, principalul motiv pentru care se dorete cutarea unui pachet este atunci cnd utilizatorul nu tie exact numele pachetului, sau pur i simplu dorete afiarea tutoror pachetelor ce conin unul sau mai muli termeni n descriere. Cutarea se poate face foarte simplu folosind programul apt-cache cu parametrul search: apt-cache search sir_de_cutare unde irul de cutare reprezint o expresie regulat (REGEX). n urma executrii acestei comenzi, utilitarul va afia toate pachetele ce conin expresia cutat fie n numele pachetului, fie n descrierea acestuia. Informaiile afiate pot fi de multe ori derutante, doar prin prisma numrului de rezultate gsite, ns exist metode pentru reducerea numrului de rezultate. O alt metod de cutare poate implica cutarea dup mai multe expresii; abordarea poate s difere, fie prin folosirea expresiilor regulate (REGEX accesai comanda man regex pentru mai multe informaii), fie prin filtrarea rezultatului intermediar cu ajutorul comenzii grep: apt-cache search mc | grep midnight n exemplul de mai sus putem observa prima parte a comenzii, care va efectua o cutare dup irul de caractere mc. Chiar dac n cazul de fa, dorim s aflm informaii doar despre aplicaia Midnight Commander (prezentat mai sus), apt-cache va afia numele i descrierile tuturor pachetelor ce conin irul mc ducnd astfel la un numr foarte mare de rezultate. Partea a doua va filtra rezultatul intermediar (cu ajutorul utilitarului grep); astfel se vor afia doar pachetele care conin att textul mc ct i textul midnight. Aceast modalitate de cutare poate fi extins n mai multe feluri, de exemplu, pentru a cuta o list cu pachetele editoarelor de text disponibile: apt-cache search editor | grep text

    13

    eAdmin

  • Odat tiut numele pachetului dorit, utilizatorul poate afla n continuare mai multe informaii despre acestea, tot prin intermediul programului apt-cache. Acesta poate de exemplu s solicite informaii detaliate despre un pachet, precum versiunea, dimensiunea, arhitectur, conflictele sau chiar dependinele acestuia: apt-cache show mc Comanda de mai sus va afia toate informaiile disponibile despre pachetul mc. A se observa faptul c n loc de directiva search, s-a folosit directiva show pentru a specifica faptul c utilizatorul dorete informaii, i nu o cutare. Comanda poate fi folosit alternativ cu utilitarul less pentru ca rezultatul s fie mai uor de citit. Alternativ, utilizatorul poate s afieze dependinele unui pachet (acestea fiind menionate i n seciunea de informaii adiionale a pachetului) ntr-o form mai uor de citit folosind directiva depends n loc de show. Cutarea pachetelor n linie de comand poate fi evitat n cazul n care mediul de lucru beneficiaz de o interfa grafic. Programul Synaptic Package Manager prezentat anterior, poate fi folosit cu uurin de ctre aproape oricine, fiind foarte uor s se afle informaii adiionale precum dependine sau conflicte. Actualizarea surselor de pachete (Repositories) Sistemul de gestiune al pachetelor apt folosete surse de pachete pentru descrcarea acestora, pentru a putea fi instalate, indiferent de mediul pe care care se afl acestea (extern sau intern). Principalul avantaj al acestei infrastructuri este c att utilizatorii ct i dezvoltatorii de software pot apela la o surs comun de programe. Aceast abordare nu este util numai pentru descrcarea iniial a unuia sau mai multor programe, ci i pentru pstrarea acestora la versiuni actualizate; un dezvoltator se va asigura de regul c pachetele sale sunt prezente fie pe servere ftp proprii, fie pe arhive comune, facilitnd astfel accesul ctre acestea. Arhitectura folosit este foarte flexibil, permind astfel utilizatorului s adauge i s elimine astfel de surse de pachete dup nevoi. Lista de arhive poate fi alterat de utilizator pentru a aduga sau a scoate anumite surse n dou feluri: fie alternd fiierul ce conine lista de arhive (/etc/apt/sources.list) manual cu un editor de text, fie folosind un utilitar care n esen face acelai lucru, ns ofer o interfa mai uor de folosit. Formatul fiierului /etc/apt/sources.list este prestabilit, fiecare surs de pachete fiind menionat pe o linie, i este gndit s suporte o gam foarte larg de medii i surse. Fiecare linie descrie aadar o surs de pachete i respect urmtoarea sintax: deb URI distribuie [componenta 1] [componenta 2] Primul cuvnt poate fi deb sau deb-src, i descrie fie o arhiv cu dou nivele tipic distribuiei Debian, fie o arhiv ce conine codul surs n aceeai form ca tipul deb.

    14

    eAdmin

  • URI specific baza distribuiei, sau mai exact locaia de unde apt va putea descrca pachetele necesare. Aceasta poate fi i sub forma unei adrese (de internet de exemplu), caz n care componentele menionate trebuie omise i distribuia trebuie terminat cu ajutorul caracterului /. Principalele tipuri de surse recunoscute sunt urmtoarele: file permite folosirea unui fiier oarecare din sistem drept o arhiv. cdrom permite folosirea suportului CDROM pentru surse. http folosete un server HTTP drept arhiv ftp specific un server FTP drept arhiv Pentru a clarifica tipurile menionate anterior, putem da cteva exemple: Linia deb http://archive.debian.org/debian-archive main va meniona c surs de pachete serverul HTTP de la adresa menionat, ns folosind doar zona main. Linia deb ftp://ftp.debian.org/debian stable main va folosi ca surs serverul ftp de la adresa menionat, sub directorul /debian, accesnd doar zonele stable i main. Pentru mai multe informaii, putei accesa pagina de manual corespunztoare comenzii apt prin intermediul comenzii man sources.list. Ca observaie, utilizatorul trebuie s aib grij mereu de unde descrca pachete, fiindc folosind un repository necunoscut acesta poate permite instalarea unor pachete compromise pe sistem. De asemenea, orice modificare a fiierului sources.list trebuie s fie urmat de comand apt-get update astfel nc baza de date folosit de apt s poat fi actualizat. Alternativ, pe lng editarea manual a fiierului sources.list putem folosi programul Software Sources (accesibil prin meniul System -> Administration -> Software Sources) care ofer o interfa mult mai uor de folosit pentru modificarea listei de arhive.

    15

    eAdmin

  • Observm n lista din poz de mai sus, o niruire a tuturor surselor care sunt incluse de ctre apt, mai exact, vedem o variant puin interpretat a fiierului sources.list. Fiecare linie poate fi activat sau dezactivat prin bifarea, respectiv debifarea acesteia i se traduce prin adugarea caracterului # la nceputul liniei respective n cadrul fiierului sources.list. Acest caracter simbolizeaz existena unui comentariu n cadrul fiierului, ducnd la ignorarea liniei respective. Mecanismul respectiv este foarte util pentru a nu fora utilizatorul s piard astfel de surse, oferindu-i n acelai timp posibilitatea excluderii acestora. Pe lng dezactivarea unui repository, mai exist i opiunea de adugare de noi arhive prin acionarea butonului Add, fiind necesar doar linia apt, ce descrie sursa (formatul acesteia este cel prezentat mai devreme, n cadrul fiierului sources.list). Actualizarea sistemului (Update) Actualizarea versiunilor programelor ce ruleaz pe un sistem la un moment dat poate fi o sarcin dificil chiar i pentru utilizatorii experimentai: acetia trebuie s monitorizeze permanent o serie de productori pentru a afla cnd vor lansa o versiune mai nou (i n general mbuntit) a aplicaiilor pe care le folosesc. Monitorizarea poate fi dificil, dat fiind faptul c pot interaciona multe entiti cu politici diferite: unii dezvoltatori de aplicaii pot lansa versiuni noi zilnic, pe cnd alii o pot face i la intervale de ani de zile. Pe lng aceast problem, administratorii mai au i sarcina de a menine sistemul n stare funcional ct mai mult timp posibil, iar actualizarea versiunii unui serviciu precum cel de http presupune mai nti oprirea serviciului respectiv, i apoi actualizarea sa. Combinat cu alte sarcini pe care administratorii le pot avea n cadrul unui sistem Linux, pot transforma aceast sarcin ntr-una dificil, dar eseniala mare parte din mbuntirile versiunilor mai noi se refer la neajunsuri anterioare sau vulnerabiliti de securitate care nu pot fi ignorate. Continund aceast idee, s-a dezvoltat iniial pentru distribuia Ubuntu, apoi inclus i n Debian aplicaia Update Manager, care are rolul de a automatiza procesul de actualizare a programelor instalate ntr-un sistem Linux. Aceasta i ndeplinete rolul printr-un daemon de fundal, i poate ateniona utilizatorul atunci cnd apar noi versiuni ale pachetelor existente, i opional le poate descrca i instala. Update Manager este ca i celelalte aplicaii de gestiune a pachetelor, o interfa pentru sistemul APT, ns nu poate fi folosit pentru adugarea sau tergerea pachetelor. Programul ruleaz automat i discret, n distribuiile mai recente Debian, necesitnd un minim de interaciune cu utilizatorul, ns poate fi lansat accesnd meniul System -> Administration -> Update Manager. Utilizatorul este atenionat mereu prin intermediul unei pictograme n panoul de sistem:

    16

    eAdmin

  • Este important de tiut faptul c, precum i celelalte programe bazate pe sistemul APT, Update Manager detecteaz existena unor noi versiuni i descarc, precum i instaleaz noile pachete folosind APT. Mai mult, pentru a cuta noi versiuni, acesta trebuie s aib acces la arhivele de pachete menionate n fiierul sources.list, sau prin cadrul programului Software Sources.

    n imaginea precedent, putem observa cteva dintre opiunile pe care Software Sources ni le ofer n relaia cu sistemul automat de actualizare: Proposed updates - n esen, pachetele noi trebuie s treac printr-o

    perioad de testare ceva mai lung pn s fie incluse n arhivele majore. Pachetele marcate ca fiind proposed sunt de regul ceva mai noi, i nu au beneficiat de ntregul mecanism de testare. Ca atare, o prim consecin a bifrii acestei opiuni va fi aceea c sistemul va beneficia de mai multe actualizri, mai repede. Dei pentru un sistem normal de tip desktop aceast opiune poate fi folosit cu ncredere, nu se recomand bifarea n cazul unui server aflat n producie.

    Security updates marcheaz pentru verificare, descrcare i instalare, toate actualizrile referitoare la securitate. Aceast opiune este una foarte important, deoarece se va ocupa de repararea oricror probleme de securitate i nu poate fi dezactivat prin mijloace convenionale.

    Check for updates seteaz intervalul la care daemon-ul responsabil cu actualizarea s caute pachete noi.

    Install security updates without confirmation orice versiune nou de pachet va fi instalat n mod automat, fr nici un fel de confirmare din partea utilizatorului.

    17

    eAdmin

  • Download all updates n the background va specifica faptul c utilizatorul dorete s descarce noile pachete n fundal

    Only notify about available updates este i modul implicit de funcionare, n care utilizatorul va fi atenionat de existena unor noi pachete, acesta putnd s aleag ulterior dac dorete s le instaleze sau nu.

    Utilizatorului i este prezentat o fereastr n care poate obine informaii detaliate despre actualizarea fiecrui pachet, prin selectarea pachetului dorit, i vizualizarea seciunii Description of update, localizat n partea de jos a ferestrei. Pe lng aceste informaii generale, mai se precizeaz i dimensiunea total ce va fi descrcat. Pachetele pot fi actualizate preferenial, prin bifarea sau debifarea fiecrei intrri din lista vizibil i nu se va efectua nici o schimbare asupra sistemului pn nu se acioneaz butonul Install Updates. OBSERVAIE: Actualizarea oricrui program presupune ntreruperea acestuia n cazul n care ruleaz. Ca urmare imediat, se recomand salvarea oricror documente, i oprirea tuturor programelor pe toat durata actualizrii. Actualizarea pachetelor se poate face i fr existena unei interfee grafice, prin intermediul utilitarului apt-get, folosind directiva upgrade. Se recomand folosirea parametrului u pentru afiarea informaiilor despre pachetele ce vor fi actualizate n caz contrar, aceasta fcndu-se n fundal: apt-get u upgrade O alt caracteristic foarte important a sistemului de gestiune APT este aceea c permite actualizarea ntregii distribuii, prin executarea comenzii: apt-get dist-upgrade

    18

    eAdmin

  • Procese Linux Aa cum am menionat anterior, sistemul Linux este un sistem de operare multi-user cu capabiliti multi-tasking. Dar ce nseamn de fapt aceti doi termeni? Pentru a rspunde la aceast ntrebare, acetia trebuie analizai. Termenul multi-user se refer n mod concret la capacitatea accesrii unui sistem informatic sau al unui program de ctre mai muli utilizatori concureni. Putem trage concluzia c Linux este un sistem de operare multi-user din moment ce permite utilizarea resurselor disponibile de ctre mai muli utilizatori simultani, ns astfel se ivete o nou problem: nevoia de multi-tasking. Spre deosebire de alte sisteme de operare tip DOS (Disk Operating System), precum MS-DOS, care sunt single-user, single-tasking, mai precis nu permit accesul mai multor utilizatori simultani, i nici execuia n paralel a mai multor programe, o platform multi-user ar avea nevoie de capabiliti multi-tasking pentru a opera eficient, altfel utilizatorii conectai la sistem ar trebui s i desfoare activitatea pe rnd, unul dup altul. Dei DOS este n esen un sistem single-tasking (adic nu permite execuia mai multor programe simultan) i numai un singur program poate fi ncrcat n memorie la un moment dat, exist mecanisme de evitare a acestei probleme: TSR sau Terminate and Stay Resident. Acest mecanism fora sistemul de operare s pstreze un program n memorie i s modifice vectorul de ntreruperi al sistemului astfel nct acesta s poat fi apelat chiar i dup terminarea sa, i a fost considerat o form primitiv de multi-tasking, reprezentnd o platform pentru construirea unor driveri ce nu erau suportai nativ de sistem, asigurnd totui funcionarea sistemului. Dezavantajul acestui sistem era faptul c programele TSR trebuiau pstrate ntr-o zon de memorie foarte limitat primii 640KB de memorie convenional, rezultatul fiind reprezentat att de numeroase conflicte cu alte programe de tip TSR ct i lupta continu de a micora dimensiunea acestora astfel nct s pstreze ct mai mult memorie liber. Dei o soluie simpl la nivelul sistemelor de atunci, TSR nu este nici pe departe un sistem adevrat de gestionare a proceselor, cum este cel oferit de kernel-ul Linux. n realitate, conceptul de multi-tasking este de fapt mult mai complicat i poate fi abordat n multe feluri, fiind de fapt execuia mai multor procese individuale folosind o resurs comun un procesor. n cazul unui calculator cu un singur procesor, este imposibil ca acesta s execute dou instruciuni diferite n exact acelai moment n timp, ns multe sisteme de operare moderne permit execuia simultan a mai multor aplicaii - precum vizualizarea paginilor de interne n timp ce utilizatorul asculta muzic folosind un singur procesor. Mult simplificat, mecanismul poate fi explicat prin programarea n timp a permisiunii de execuie a fiecrui proces n parte fiecare fiind executat pe rnd de ctre procesor pentru un timp stabilit. Prin

    19

    eAdmin

  • alocarea timpului de procesor ntre procese diferite la intervale foarte mici, se creaz iluzia de execuie n paralel ns, realitatea este c pri din fiecare program sunt executate secvenial. Exist mai multe implementri ale acestui sistem de partajare a timpului de execuie, ns un sistem de gestiune al ntregului proces este esenial. Primele tentative de execuie n paralel se numeau multiprogramming, i au aprut ca urmare a nepotrivirii dintre viteza mare de execuie a unui procesor comparativ cu echipamentele periferice. Dezavantajul major al acestui sistem era ns faptul c nu se putea garanta n niciun fel execuia n timp util al unei aplicaii, maximiznd ns gradul de utilizare al procesorului. O alt variant de multi-tasking, ceva mai evoluat dect precedent, este modelul time-sharing (sau multi-tasking cooperativ), unde utilizatorul putea executa programe diferite simultan, ca i cnd acestea erau singurele care rulau de pe sistem. Printre sistemele de operare care folosesc acest mecanism se numr primele variante de Windows i Mac OS. Prin acest model, fiecare program n execuie pe sistem se angajeaz s acorde timp de proces i celorlalte procese, dezavantajul major fiind acela c n cazul execuiei unei aplicaii prost gndite, ntregul sistem se poate bloca. Pentru a sumariza cele spuse, putem concluziona c un proces reprezint un program n execuie i are ataate o serie de informaii specifice precum instruciunile programului, resurse folosite (precum fiiere deschise), unul sau mai multe fire de execuie i alte informaii necesare procesului de execuie n paralel. Caracteristicile proceselor Orice proces Linux va avea un set de caracteristici comune, ce ofer informaii despre acesta: PID sau Process ID, este un identificator de proces sub forma unui

    numr ntreg unic. PPID similar cu PID, cu excepia c reprezint identificatorul procesului

    care a dat natere procesului curent (cunoscut i ca proces printe) Terminalul ataat prescurtat i TTY, reprezint terminalul la care

    procesul curent este legat. RUID Real User ID, reprezint identificatorul utilizatorului care a lansat

    aplicaia. Similar exist i EUID (sau Effective User ID) pentru identificarea drepturilor reale la resursele sistemului.

    RGID i EGID similar cu RUID i EUID, doar c se refer la identificatorul grupului de utilizatori.

    factorul nice folosit pentru a determina, aa cum sugereaz i numele, factorul de prietenie al procesului cu scopul stabilirii prioritii de execuie (bazat pe factorul nice i istoricul de utilizare al procesorului)

    Procesele pot rula n mod normal n dou moduri: foreground respectiv background. Dintre procesele interactive, marea majoritate funcioneaz n modul foreground. Diferena dintre cele dou moduri se rezum strict la interaciunea cu interfaa cu utilizatorul, mai exact la ocuparea consolei din

    20

    eAdmin

  • care respectivul proces a fost lansat. n acest mod, consola nu va fi eliberat pn la terminarea programului care o ocup. n cazul comenzilor prezentate pn acum, vorbim tot despre procese ce ruleaz n foreground de exemplu, i comanda ls face parte din aceast categorie, ns datorit timpului foarte scurt de rulare acest fapt este doar o iluzie. Un contra exemplu ar fi execuia comenzii less care nu va termina execuia odat ce a terminat afiarea pe ecran, ci va atepta n permanen comenzi de la utilizator. Ca alternativ, programele pot rula i n modul background pentru a permite terminalului de pe care ruleaz s primeasc i alte comenzi n acelai timp, execuia avnd loc n fundal i fiind guvernat de aceleai reguli ca orice alt proces. Acestea sunt procesele care de regul au un timp de execuie mare sau nu necesit interaciunea cu utilizatorul. Serviciile ce ruleaz pe un calculator fac i ele parte din aceast categorie, ns exist cteva diferene. Dac interaciunea cu programe care ruleaz n foreground este evident (acestea de multe ori ateptnd gesturile utilizatorului), interaciunea cu programele ce ruleaz pe fundal (background) poate fi ceva mai dificil. Pentru a putea gestiona aceste procese, shell-ul ne pune la dispoziie o serie de utilitare: comanda jobs va afia toate comenzile ce ruleaz n fundal. Fiecare

    proces ce ruleaz n fundal va avea asociat un numr ntreg reprezentnd identificatorul i poate fi folosit pentru referentierea procesului respectiv. Acest identificator este diferit de cmpul PID (sau process identifier) i se refer doar la consola curent.

    comanda kill este folosit pentru terminarea oricrui proces, specificat prin menionarea PID-ului procesului int ca parametru.

    comanda fg %n va aduce procesul cu identificatorul n napoi pe fundal. similar, comanda bg %n va reactiva un proces suspendat n fundal. Procesele pot fi afectate i prin combinaii de taste precum CTRL+Z care va suspend (dar nu termin) procesul ce ruleaz n foreground. Similar, combinaia CTRL+C este foarte cunoscut pentru funcia sa de terminare a procesului curent. Orice comand executat n consol va rula implicit n modul foreground, ns pentru a fora o comand s ruleze n fundal trebuie adugat caracterul & dup comand:

    n exemplul de mai sus observm cum prin apelarea unui program ce nu i termin execuia dect la comanda utilizatorului (top) mpreun cu & acesta este trecut pe fundal. Prin apelarea comenzii jobs se vor afia o serie de informaii despre procesele din fundal.

    21

    eAdmin

  • Servicii O categorie foart important n orice sistem de operare modern, serviciile ofer diverse funcionaliti fie local, fie unei reele de calculatoare. Acestea sunt ca orice alt program ntr-un sistem Linux, cu meniunea c sunt denumii Daemons i c ruleaz n continuu, de regul pornind odat cu sistemul. Programele de acest tip ruleaz de regul n fundal i atept cereri ctre serviciile pe care le ofer, ns despre servicii vom vorbi pe larg n capitolele urmtoare. Ciclul de via al proceselor Ca orice entitate dinamic, procesele au un ciclu de via foarte bine definit, acestea nscndu-se, evolund i terminndu-se dup reguli bine puse la punct. Nevoia crerii unui proces nou este evident: acest lucru se ntmpl ori de ct ori este nevoie s fie instantiat un nou program. Procesele n Linux, urmeaz o structur de organizare foarte bine definit: aceea de arbore, cu procese ce reprezint rdcina arborelui, nodurile i frunzele acestuia. Procesele n cadrul sistemului Linux pot fi create numai din alte procese, acestea devenind procese fiu (sau children). Urmnd structura de arbore, fiecare proces poate fi reprezentat printr-un nod, rdcina fiind printele tuturor proceselor create. Nodurile din arborele de procese, pot avea la rndul lor alte procese de tip fiu, crendu-se astfel o structur ierarhic foarte bine definit. Crearea unui proces implic apelarea mecanismului numit fork, prin care acesta creaz o copie identic a sa, ns cu un PID diferit. Dup terminarea mecanismului de forking, spaiul de adresare al procesului este nlocuit cu cel reprezentativ pentru noul proces (procedeu numit exec) i astfel, noul proces este gata de execuie. n ceea ce privete execuia propriu-zis, o practic comun este aceea de transformare n daemon a proceselor fiu ale unui program, pentru ca acestea s poat rula chiar i dup terminarea procesului printe. Cazuri excepionale pot avea loc atunci cnd un proces fiu i termin execuia, n timp ce procesul printe nu ateapt acest lucru; acest tip de procese se numesc procese zombie. Terminarea execuiei unui proces n mod normal (dac nu este terminat forat) are loc printr-un mecanism ce returneaz un rezultat procesului printe (numit exit status). Acest rezultat reprezint un numr, ce poate oferi indicii despre modul n care procesul i-a derulat activitatea, mecanismul fiind mprumutat din limbajul C, unde orice funcie poate returna un rezultat. Codurile de ieire pot fi interpretate de ctre procesul tat i este specific fiecrui program. n momentul n care execuia unui proces tat este terminat, procesele sale fii pot fi terminate sau nu, n funcie de natura acestora, ns este bine de tiut c nu exist un o regul fix. Afiarea structurii ierarhice n care sunt organizate procesele poate fi fcut n mai multe feluri, probabil cea mai comun fiind apelarea comenzii pstree:

    22

    eAdmin

  • Durata de funcionare a sistemului; uptime i downtime Unul din avantajele majore al sistemului de operare Linux este stabilitatea sa, motiv pentru care este i att de rspndit n aplicaii unde este nevoie de siguran i durat mare de funcionare. O astfel de aplicaie ar putea fi un calculator care se ocup de servicii bancare i pe care banca respectiv nu-i poate permite s-l opreasc deloc, sau unde sigurana datelor procesate este foarte important. n terminologia folosit pentru servere, apar astfel doi termeni legai de disponibilitatea acestora: uptime i downtime. Primul se refer la durata de funcionare a sistemului de cnd a fost pornit, pe cnd cel de-al doilea vine n completare i msoar timpul n care serverul respectiv nu a fost operaional. Dei nu exist o modalitate corect de a msura downtime-ul local (acesta fiind msurat extern de ctre alte sisteme), se poate determina uptime-ul unui sistem, tiindu-se exact momentul n care sistemul a pornit ct i ora curent. Pentru afiarea uptime-ului se folosete comanda uptime:

    Pe lng comanda uptime, se mai poate folosi i comanda top, util nu numai pentru determinarea timpului de funcionare al calculatorului, ct i pentru afiarea proceselor care ruleaz n acel moment, totul n timp real. n plus, pe lng aceste informaii, comanda top va mai afisa i ali parametrii importani ai sistemului, precum numrul de procese i informaii despre memorie.

    23

    eAdmin

  • eAdm

    in

    Terminarea forat a proceselor n ciuda stabilitii foarte mri a sistemelor Linux, uneori se ntmpl c procesele ce ruleaz s se blocheze sau s funcioneze anormal, fcnd astfel oprirea lor prin mijloacele convenionale imposibil. Linux ofer o stabilitate foarte mare a sistemului, acesta putnd s continue operarea normal chiar i n cazul n care unul din procesele n curs de derulare se blocheaz. n acest caz, pentru a aduce sistemul la o stare de normalitate, se folosesc mecanisme de terminare forat a proceselor. Unic pentru fiecare proces ce ruleaz la un moment dat, este atributul PID (sau identificatorul numeric unic) al procesului, care poate fi folosit pentru a comanda terminarea sa. Pentru aflarea PID-ului unui proces, se pot folosi mai multe tehnici care implic folosirea urmtoarelor comenzi: comanda ps afieaz o list a tuturor proceselor ce ruleaz n mod

    curent. Dat fiind faptul c foarte multe procese pot rula la un moment dat (avnd ca rezultat o list de procese ce se ntinde pe mai multe ecrane), se recomand folosirea mpreun cu comanda less. Parametrii cei mai utili sunt -ax (unde parametrul a foreaz afiarea tuturor proceselor iar x elimin restricia de afiare numai a proceselor ce ruleaz dependent de o consol) EXEMPLU: ps ax | less va lista toate procesele, cte unul pe linie, afind totodat i PID-ul fiecruia.

    comanda top prezentat anterior poate fi i ea folosit pentru afiarea proceselor ce ruleaz n momentul curent, ns este mai puin folositoare datorit cantitii limitate de informaii pe care le poate afia la un moment dat.

    o alt metod de folosire a comenzii ps este n concordan cu comanda grep pentru filtrarea rezultatelor la un numr mai mic: ps ax | grep nume_proces. Acest mod de apelare va filtra rezultatele, afind informaii numai despre procesele al cror nume conine irul de caractere menionat ntre ghilimele.

    24

  • Aceast comand poate fi extrem de util dat fiind faptul c mai multe procese cu nume identifice pot rula la un moment dat. comenzile pidof i pgrep pot fi folosite pentru afiarea tuturor

    identificatorilor PID ce ruleaz sub numele menionat n parametru. Urmrind exemplul anterior, comanda pgrep bash sau pidof bash ar fi afiat PID-urile vizibile n poz. De regul, comanda pgrep este mai util, fiindc permite o libertate mai mare n specificarea irului de caractere ce reprezint numele procesului cutat.

    OBSERVAIE: folosirea comenzilor mpreun cu caracterul | simbolizeaz folosirea nu a uneia, ci a dou comenzi. Pe scurt, acest caracter specific faptul c datele primei comenzi afiate pe ecran(output-ul), vor reprezenta datele de intrare (sau input) pentru comanda grep, care are rolul de a filtra text. Ca urmare, dei comanda ps ax ar returna informaii despre toate procesele existente, afiarea propriu-zis pe ecran se rezum la doar cteva, datorit comenzii grep. Odat aflat PID-ul unui proces, se poate trece la terminarea acestuia prin intermediul comenzii kill. Aceasta poate primi o serie de parametrii, ns de regul este folosit doar cu unul singur: PID-ul procesului int (dat fiind exemplul anterior, comanda kill 3376 ar comanda terminarea procesului cu PID-ul respectiv). Modul n care kill funcioneaz este prin folosirea sistemului de semafoare aferent sistemului de control al proceselor. Comand va trimite o cere de terminare normal procesului int, care va returna (ca orice alt proces) un rezultat. Exist cazuri n care procese blocate nu vor rspunde unor astfel de comenzi, cnd este necesar terminarea forat prin includerea parametrului -9 (kill -9 3376). Terminarea proceselor n acest mod nu este recomandat, dat fiind faptul c poate ntrerupe procese importante n mod necontrolat. Pe lng comanda kill (care necesit neaprat PID-ul procesului int), se mai poate folosi i comanda pkill care va lua ca parametru direct numele procesului. Spre deosebire de comand pgrep, comanda pkill nu va afia PID-urile proceselor, ci le va comanda terminarea.

    Procesul INIT Dup cum se vede n structura de procese prezentat n poza anterioar, procesul rdcin, care este printele tuturor proceselor ce ruleaz la un moment dat, se numete init. Procesul init are rolul de a iniializa sistemul ntr-un mod prestabilit, dup ce kernel-ul sistemului a fost ncrcat n

    25

    eAdmin

  • totalitate. Mai exact, init va efectua sarcini precum montarea sistemului de fiiere, pornirea serviciilor aferente sistemului, sau chiar ncrcarea interfeei grafice. n Linux, init este executat cu un parametru, cunoscut i ca run-level, prin care se specific modul n care se dorete iniializarea sistemului. Valoarea acestui parametru este un numr ntreg ntre 1 i 6, i semnaleaz ce componente ale sistemului vor fi iniializate, fiecare nivel avnd o serie de script-uri ce vor fi executate. Aceste scripturi sunt de obicei stocate n directoare dedicate fiecrui nivel (de regul n /etc/rc[n].d unde [n] reprezint run level), iar fiierul principal de configurare n /etc/inittab. De menionat este faptul c script-urile coninute n directoarele ce reprezint fiecare run-level nu sunt de fapt fiiere propriu-zise, ci legturi ctre alte scripturi (care se afl de regul n /etc/init.d). Motivul acestei implementri este c se poate modifica comportamentul fiecrui run-level independent de celelalte, fr s existe 6 copii diferite ale scripturilor folosite.

    n poza de mai sus, se poate observa lista tuturor scripturilor atribuite nivelului 3. Se poate observa c acestea urmeaz un algoritm de denumire caracteristic, pentru a putea determina ordinea n care aceste sunt executate (alfabetic). n cazul n care se dorete executarea unui script pentru pornirea unui serviciu naintea altuia, numele primului trebuie s fie naintea celui de-al doilea din punct de vedere alfabetic. Dup terminarea iniializrii procesului init, acesta este clonat prin procedeul fork, devenind un nou proces, numit getty. Acesta are rolul de a porni consolele virtuale aferente sistemului, de regul n numr de 6 (acest numr fiind configurabil n /etc/inittab). Fiierul de configurare inittab poate de asemenea s specifice modul n care sistemul va reaciona la combinaia de taste CTRL+ALT+DEL (reset n mod implicit) se dorete nchiderea corect a sistemului spre deosebire de nchiderea imediat. Nivele run-level pot s nsemne lucruri diferite n funcie de distribuia folosit, ns n Debian, exist urmtoarele nivele: nivelul 0 halt (shutdown) nivelul 1 single user nivelele 2-5 multi-user cu console i mod grafic (distribuia Debian nu

    face nici o diferen ntre modurile 2,3,4 i 5) nivelul 6 reboot

    26

    eAdmin

  • Fire de execuie (THREADS) Firele de execuie, cunoscute i sub numele de threads (din limba englez), ca i procesele, reprezint un mecanism de execuie n paralel a instruciunilor, facilitate esenial pentru orice sistem de operare modern, cu capabiliti multi-tasking. Dei termenul este folosit foarte des drept sinonim pentru proces, exist diferene foarte mari ntre acestea. Procesele n Linux se refer la instane ale unor programe n execuie, adic inclusiv variabile, informaii de stare i n general ntregul spaiu de memorie al respectivului program, pe cnd firele de execuie se refer la execuia n cadrul unui proces. Dei firele de execuie i procesele funcioneaz n mod diferit n funcie de sistemele de operare pe care ruleaz, exist totui un punct comun: firele de execuie pot s mpart accesul la informaiile de stare caracteristice unui proces fr s fie nevoie s apeleze la mecanisme de comunicare complicate precum comunicarea prin fiiere, pipes sau sockets. Firele de execuie pot efectua schimbul de informaii n mod direct prin intermediul variabilelor sau al altor structuri de memorie. Consecina direct a acestui fapt este c schimbarea contextului de execuie se poate face mai rapid pentru fire de execuie dect pentru procese. Principalul avantaj al firelor de execuie este acela al performanei n cazul aplicaiilor; o baz de date de exemplu, care este caracterizat de un volum foarte mare de operaii de intrare/ieire poate obine o mbuntire foarte mare a performanei dac folosete o abordare orientat pe fire de execuie. Un alt exemplu de utilizare al firelor de execuie ar putea fi un program care necesit interaciunea permanent cu utilizatorul n timp ce se execut operaii pe fundal; abordarea normal n acest caz este implementarea proceselor costisitoare (din punct de vedere al timpului de execuie) folosind conceptul de worker thread (sau fir de execuie lucrtor), care va rula n mod paralel cu firul de execuie principal al programului, pstrnd ns responsivitatea acestuia.

    27

    eAdmin

  • Principalul dezavantaj al firelor de execuie este dificultatea de a le implementa n mod corect, fapt datorat mecanismului de funcionare mai greu de neles, ct i diverselor conflicte ce pot s apar datorit accesului mai multor entiti la resurse comune. Concluzionnd, procesele pot fi reprezentate drept un fir de execuie alturi de spaiul sau de adresare i alte informaii, i pot fi compuse din mai multe fire de execuie. Conceptul de pipe n cadrul sistemelor de operare de tip UNIX, conceptele de pipe i pipeline se refer la mecanisme de redirectare ale fluxurilor de date ntre procese, avnd c principal ntrebuinare comunicarea ntre procese diferite, sau implementarea unor filtre. Un exemplu bun de folosire al conceptului poate fi regsit n cadrul unor comenzi prezentate anterior: ps ax | less. n acest caz, avem de-a face cu dou comenzi separate, ps (cu parametrii menionai, listeaz procesele existente n momentul execuiei) i less (care permite parcurgerea i navigarea n cadrul textelor lungi). Caracterul | poate fi observat ntre cele dou comenzi, i reprezint mecanismul obinuit de creare al unui pipe. Comanda anterioar ar avea ca efect, afiarea numelor tuturor proceselor ce ruleaz la momentul execuiei n sistem i ar depi cu uurin cantitatea maxim de informaii ce poate fi afiat ntr-un singur ecran. Comanda anterioar poate fi rezumat astfel: redirecioneaz fluxul standard output (ceea ce se afieaz pe ecran) rezultat din execuia comenzii ps direct ctre aplicaia less, care l va putea prezenta utilizatorului ntr-o form uor de citit. Un alt exemplu de folosire al pipe-urilor este filtrarea datelor, aceast abordare fiind uneori mai eficient dect cutarea manual. Filtrarea se poate face redirectand fluxul standard output spre un program care n loc s ofere faciliti de navigare al coninutului primit, va afia numai informaiile dorite, pe baza unor parametrii. Un astfel de program este grep, care folosit simplu cu un singur parametru va afia doar liniile ce conin textul specificat: comanda ps ax | grep bash va redireciona rezultatul (lista de procese) ctre comand grep, care n baza parametrului specificat, va afia doar acele linii care conin irul de caractere bash. Redirecionarea fluxurilor de intrare/ieire Urmnd filozofia Linux conform creia totul este un fiier, chiar i tastatura, mouse-ul sau alte dispozitive sunt reprezentate prin fiiere. Principalul avantaj al acestei abordri este uurina cu care se pot interfaa dispozitivele de ctre programatori, ct i posibilitatea de a trimite, a primi sau a manipula datele primite de la dispozitive. De exemplu, fiierul /dev/input/mice este folosit pentru a primi informaii de la mouse, i folosind comanda cat /dev/input/mice (urmat de acionarea mouse-ului) ntr-un terminal vom putea observa schimbrile. Comanda cat are rolul de a concatena coninutul unui fiier pe standard output (adic pe ecran).

    28

    eAdmin

  • Linux folosete 3 fluxuri importante de intrare/ieire, codificate numeric: 0 standard input (tastatur), 1 standard output (ecran), 2 standard error. Shell-ul ne permite s redirecionm aceste fluxuri pentru o flexibilitate foarte mare, folosind operatorii > (redirectarea fluxului de ieire) i fiier.txt ar avea ca rezultat, un efect similar cu cel observat la pipe-uri: ps ax ar afia toate procesele ce ruleaz, ns rezultatul n loc s fie afiat pe standard output, va fi redirectat ctre fiierul fiier.txt pentru examinare ulterioar. n cazul n care se apeleaz o comand care poate genera o eroare (de exemplu, comanda ls pe un fiser inexistent), ar trebui redirectat fluxul de standard error: ls fiier_inexistent.txt 2> fiier.txt . n cadrul sistemului Linux exist o serie de fiiere speciale, ce pot fi folosite n diverse moduri. Unul dintre aceste fiiere este /dev/null, un fiier cu dimensiunea 0, n care orice modificare este imediat tears. O utilizare a acestui fiier ar putea fi ascunderea mesajelor de eroare: ls fiier_inexistent 2> /dev/null ar trimite mesajul de eroare ctre /dev/null, fiind total ignorat. O alt abordare a redirectarii poate fi folosit pentru tiprirea unui fiier prin intermediul imprimantei: comanda cat fiier.txt > /dev/lp0 ar trimite coninutul fiierului fiier.txt ctre fiierul lp0 care reprezint imprimanta sistemului. n mod invers, fluxul de intrare poate fi redirectat, astfel nct s reprezinte un fiier. Operatorul de redirectare al fluxului de ieire ctre un fiier este n mod absolut distructiv, n sensul c va rescrie tot fiierul int cu noul coninut. Pentru a aduga date la un fiier deja existent (modul append) trebuie folosit operatorul >>.

    29

    eAdmin

  • Script-uri bash

    Bash, sau Bourne-Again Shell, este un interpretor de comenzi pentru sistemul de operare Linux. Acesta este shell-ul implicit pentru o serie foarte mare de distribuii Linux, printre care i Debian, i pe lng facilitile de interpretare a comenzilor lansate prin intermediul consolei, ofer i posibilitatea scrierii unor script-uri pentru diverse sarcini, n general n scopul automatizrii unor procese, sau pentru mbuntirea facilitilor existente ale unui program. Un script este un fiier text, ce poate fi executat, al crui coninut respect un limbaj de scripting (n cazul de fa bash). Fiind vorba de fiiere text, i nu binare (compilate n cod main), scripturile nu pot fi executate propriu-zis; acestea sunt de fapt interpretate de un program specializat, de cele mai multe ori fiind vorba de interpretorul n a crui limbaj a fost conceput respectiv script. n continuare vom studia procesul de creare al script-urilor bash, ct i o parte din facilitile pe care acest interpretor le ofer. Conceptul din spatele scripturilor este simplu: comenzile din script vor fi interpretate linie cu linie, secvenial (sau cu salturi n cazul script-urilor mai complicate). Orice script bash, este de fapt un fiier, cu drepturi de execuie, i pot fi lansate n mai multe feluri. S presupunem n acest scop, c avem un script numit s1 n directorul curent, pe care l putem rula folosind unul din mijloacele de mai jos: Apelnd una din comenzile bash s1 sau sh s1. Aceast modalitate

    dezvluie faptul c se folosete un interpretor pentru execuie. n acest caz, fiierul nu trebuie s aib neaprat drepturi de execuie.

    Lansnd direct scriptul cu ajutorul comenzii ./s1. n acest caz, shell-ul i va da seama c este vorba de un script bash, i va instantia interpretorul pentru acest fiier. Pentru a seta drepturi de execuie asupra unui script pentru orice utilizator este necesar rularea comenzii chmod a+x nume_script.

    n continuare vom analiza compoziia unui fiier de tip script bash.

    30

    eAdmin

  • Se recomand folosirea editorului mcedit pentru vizualizarea, modificarea sau crearea scripturilor bash (sau a multor altor tipuri de script-uri) datorit facilitilor de sublienere colorat a sintaxei (syntax highlighting) oferite de acesta. Orice script bash, va avea pe prima linie secvena de caractere #! urmat de locaia interpretorului pentru care a fost scris. n scopuri didactice, vom crea n continuare un script simplu pornit de la reguli menionate anterior: Pasul 1. Crearea fiierului se poate face cu ajutorul comenzii touch:

    touch exemplu Pasul 2. Setarea permisiunilor. Reamintim pe aceast cale, c se recomand ca orice script s aib drepturi de execuie, cel puin pentru utilizatorii care ar trebui s-l poat rula.

    chmod a+x exemplu Pasul 3. Editarea fiierului n vederea introducerii comenzilor ce vor alctui script-ul. Se recomand folosirea editorului mcedit pentru acest pas. Mai jos, se poate observa un script foarte simplu prin care se terge coninutul directorului tmp (presupunnd c acesta exist) din cadrul directorului home al utilizatorului curent, urmat de un mesaj de atenionare:

    #!/bin/bash rm ~/tmp/* 2>/dev/null echo Coninutul directorului temporar a fost golit.

    Se poate observa c ntregul script este compus din comenzi obinuite. Prima linie a script-ului semnaleaz faptul c avem de-a face cu un script i include i calea ctre interpretorul bash. A doua linie este ceva mai greu de neles la nceput, dar poate fi interpretat n felul urmtor: rm este comanda folosit pentru tergerea fiierelor, caracterul ~ reprezint simbolul pentru directorul home al uerului curent, iar calea ~/tmp/* se refer la toate

    31

    eAdmin

  • fiierele din cadrul directorului tmp, coninut n directorul home al utilizatorului curent. Ultima parte a liniei este o redirecionare; n seciunile anterioare am discutat despre redirecionarea fluxurilor principale: standard out (1), standard error (2), respectiv standard n (3). Utilitarele pot trimite un mesaj de eroare ctre fluxul standard pentru a fi afiate pe ecran. n cazul de fa, eroarea cea mai probabil ar fi fost lipsa oricrui fiier din directorul tmp, utilizatorul fiind avertizat de acest lucru. Redirecionarea 2>/dev/null nu face alteceva dect s redirecioneze toate mesajele de eroare generate de ctre rm ctre dispozitivul special /dev/null (care are rolul de a ignora orice fel de date scrise n el) astfel nct acestea s nu mai fie afiate pe ecran. Ultima linie face uz de comand echo folosit pentru afiarea unui text pe ecran, n cazul de fa fiind vorba despre o atenionare simpl. n cazul n care exemplul de mai sus este greu de neles la nceput (mai ales pentru nceptori) o soluie bun este simplificarea sa:

    #!/bin/bash rm ~/tmp/*

    n varianta simplificat, am scpat de orice fel de tratare a mesajelor de eroare, ct i de atenionarea asupra terminrii operaiei de golire a directorului tmp. Aa cum am menionat mai devreme, comenzile vor fi executate secvenial, iar prompt-ul (controlul tastaturii) va fi redat consolei dup terminarea complet a execuiei. n continuare vom trata cteva din facilitile mai avansate oferite de interpretorul bash. Variabilele sunt nume simbolice al cror rol este s pstreze o valoare ce poate fi schimbat. Exemplul urmtor arat cum se pot folosi variabilele pentru stocarea i afiarea unei valori:

    #!/bin/bash var=un text echo $var

    Ca urmare a execuiei script-ului anterior, se va afia pe ecran prin comanda echo coninutul variabilei var. Ca observaie, semnul $ trebuie folosit n afiarea acesteia (acesta este modul prin care interpretorul bash i d seama c are de-a face cu o variabil i nu un text oarecare). Parametrii n linie de comand reprezint o facilitate important oferit de interpretor. Ca i multe alte executabile ce se folosesc de parametrii primii prin cadrul liniei de comand, la fel i scripturile pot beneficia de parametrii pasai n linia de comand. Dei linia de comand este una singur, parametrii folosii sunt de regul separai prin spaii. Accesul la aceti parametri din cadrul unui script bash se face prin intermediul unor variabile speciale $1, $2, pn la $9. $0 va reprezenta numele script-ului mereu.

    #!/bin/bash echo Parametrul 1 este $1 echo Parametrul 2 este $2

    32

    eAdmin

  • Lansnd scriptul prin ./nume_script exemplu script, interpretorul va afia pe ecran:

    Parametrul 1 este exemplu Parametrul 2 este script

    Citirea datelor de la tastatur se poate face n momentul execuiei unui script folosind comanda read.

    #!/bin/bash echo Introducei numele dvs: read nume echo Bine ai venit $nume!

    Verificarea condiiilor prin cuvintele cheie if / else / fi ofer utilizatorilor posibilitatea de a verifica anumite condiii n cadrul script-urilor i de a lua decizii particularizate pentru fiecare caz n parte. n exemplul urmtor vom putea examina verificarea de condiii multiple, ct i verificarea existenei unui fiier:

    #!/bin/bash fiier=exemplu echo Dorii afiarea rezultatului pe ecran? DA/NU read ecran if [ -f $fiier ]; then if [ $ecran == DA ]; then echo Fiierul $fiier exista. fi else if [ $ecran == DA ]; then echo Fiierul $fiier nu exista fi fi

    Exemplul anterior demonstreaz cum se pot pune condiii multiple i cum se poate verifica existena unui fiier (a se observa spaiile dintre parantezele ptrate att dup ct i naintea terminrii condiiei) - fr aceste spaii script-ul nu va funciona. Verificarea se face cu ajutorul cuvntului cheie if care poate fi folosit cu o serie de parametri. irul f $fiier este folosit pentru verificarea existenei fiierului al crui nume este coninut de variabila $fiier. n cazul n care se dorete verificarea existenei unui director, trebuie folosit parametrul d. O structur if va urma un set de reguli: ncepe cu if, continua cu instruciunile care se vor executa dac condiia este mplinit, opional poate continua cu else (care va conine o seciune de instruciuni executate n cazul n care condiia nu este mplinit) i obligatoriu se va termina n fi care semnalizeaz sfritul structurii. Dup cum se poate observa n exemplul anterior, n cadrul structurilor if pot exista alte structuri if, numite nested.

    33

    eAdmin

  • Crearea copiilor de rezerv. Backup. Copiile de rezerv sunt folosite n general pentru salvarea datelor importante, pentru a putea fi recuperate n urma unor evenimente neateptate precum defectarea unui disc, erori software sau chiar furt. n general se recomand includerea tuturor datelor n copiile de rezerv, n cazul n care spaiul dedicat acestei soluii permite acest lucru, i n cazul n care timpul folosit este disponibil. Copiile ntregi reprezint cea mai sigur soluie pentru sigurana datelor n eventualitatea unor dezastre, ns acestea pot dura foarte mult, n funcie de dimensiunea lor. Pentru planificarea unui backup parial, utilizatorul trebuie s aleag n primul rnd ce fiiere dorete s salveze. Printre fiierele importante (i posibil de nenlocuit) ntr-un sistem Linux, putem aminti: Baze de date n cazul serverelor MYSQL, acestea pot fi gsite n

    /var/lib/mysql Fiiere personale i documente localizate de obicei n /home Fiiere de configurare directorul /etc Copiile de siguran pot fi realizate n mai multe feluri, fie salvnd manual toate fiierele dorite, fie prin intermediul unor utilitare specializate. Indiferent de metoda de backup folosit, utilizatorul va trebui s planifice n prealabil ce resurse dorete s salveze. Salvarea manual a datelor poate fi realizat n mai multe feluri i variaz de la copierea manual a fiierelor, pn la folosirea unor utilitare precum dd sau tar. n cazul copiilor de siguran realizate manual, se recomand ns folosirea unor utilitare precum cele menionate mai devreme n defavoarea copierii manuale, motivul principal fiind alterarea informaiilor legate de sistemul de fiiere permisiuni, proprietar, etc. Utilitarul tar, prezentat anterior poate fi folosit (mpreun cu facilitatea de compresie gzip) pentru realizarea unei copii fidele a unei structuri de fiiere i directoare. Un exemplu bun ar fi: tar czf nume_copie.tar.gz /etc /home Comanda anterioar va crea o arhiv comprimat, reprezentnd copia de siguran a directoarelor /etc /home. Recuperarea datelor n eventualitatea pierderii lor, se poate realiza prin comanda: tar zxfp nume_copie.tar.gz Diferena fa de dezarhivarea i decomprimarea normal a unei arhive este parametrul p, prin care utilitarul va fi forat s dezarhiveze structura de fiiere meninnd permisiunile originale. Utilitarul dd este unul dintre programele originale UNIX folosite pentru scrierea datelor n mod raw. Acesta este i n ziua de azi un program foarte util, datorit facilitilor pe care le ofer: poate fi folosit pentru scrierea preferenial pe discuri, pentru extragerea parial a unor seciuni din fiiere binare i chiar pentru copierea la nivel de dispozitiv. Modul de folosire al utilitarului dd este unul ceva mai complicat, prin faptul c se bazeaz pe o serie de parametri specificai n formatul parametru=valoare. Restrns la cazul de fa, dd poate fi folosit pentru crearea copiilor de siguran a unor partiii ntregi (sau seciuni din acestea).

    34

    eAdmin

  • Copia de siguran n acest caz, va fi un fiier imagine, care reprezint o copie fidel a partiiei dup care a fost fcut. Acest fiier imagine poate fi comprimat, urmnd s fie pstrat, sau poate fi scris pe o partiie. Aceast metod de backup este ceva mai cuprinztoare, putnd fi folosit pentru rencrcarea ntregului sistem, ns, datorit faptului c se folosete pentru crearea unei copii fidele a unei partiii, procesul poate dur considerabil mai mult. Principiul de funcionare al utilitarului este simplu: acesta se bazeaz pe o surs de intrare a datelor, folosit pentru citirea datelor ce vor fi copiate (fiind folosit foarte des pentru partiii ntregi, sursa de intrare va fi de multe ori un fiier de tip dispozitiv) i o surs pentru datele de ieire, sau mai exact destinaia unde se vor scrie datele copiate. Sursa de ieire poate fi un fiier, n cazul n care se dorete crearea unei imagini, sau poate fi fiier de tip dispozitiv, n cazul n care se dorete scrierea direct pe o partiie. Parametrii cei mai folosii de ctre dd sunt if (input file) i of (output file). Un exemplu bun de creare a unei imagini fidele a partiiei /dev/sda1 ar fi: dd if=/dev/sda1 of=/(nume_imagine) bs=4096 conv=notrunc,noerror Aceasta poate fi tradus n felul urmtor: creaz o imagine cu numele specificat, avnd ca surs partiia /dev/sda1, cu dimensiunea blocului de date de 4096 bytes, i cu parametrii notrunct (adic fiierul destinaie nu va fi truncat) i noerror (adic procesul va continua i n cazul n care apare o eroare). Pentru a facilita stocarea imaginii astfel create, aceasta poate fi comprimat cu ajutorul utilitarului gzip. Comanda anterioar poate fi adaptat astfel nct fiierul rezultat va fi direct o arhiv: dd if=/dev/sda1 bs=4096 conv=notrunct,noerror | gzip c > /(nume_imagine).gz Comanda poate fi interpretat n felul urmtor: redirecioneaz datele de ieire ale utilitarului dd spre utilitarul gzip (care va redireciona la rndul su fiierul comprimat ctre standard output prin parametrul c) care va redireciona din nou ieirea ctre fiierul final, reprezentnd imaginea comprimat a partiiei. Restaurarea unei partiii avnd fiierul imagine iniial (dac acesta nu este comprimat) se poate face cu ajutorul comenzii: dd if=/(nume_imagine) of=/dev/sda1 bs=4096 conv=notrunct,noerror n cazul n care fiierul imagine a fost comprimat dup creare, comanda devine: gzip dc /(nume_imagine).gz | dd of=/dev/sda1 OBSERVAIE: Principalul dezavantaj al utilitarul dd fa de utilitare special gndite pentru back-up este acela c nu cunoate detalii despre sistemul de fiiere folosit, i ca urmare, va face o copie fidel a ntregii partiii, inclusiv a blocurilor de date nefolosite. De asemenea, indiferent de utilitarul folosit pentru crearea copiei de siguran, se recomand alegerea unor nume sugestive pentru acestea, astfel nct administratorul s-i poat da seama cu uurin care este coninutul unei copii i ct de actual este aceasta.

    35

    eAdmin

  • Cron. Automatizarea procesului de creare a copiilor de siguran. Procesul de crearea a copiilor de siguran poate fi automatizat ntr-o foarte mare msur, prin programarea evenimentelor folosind daemon-ul cron. Rolul acestuia este de a programa i executa comenzi la intervale i date prestabilite. Cron funcioneaz prin interpretarea fiierului /etc/crontab, un fiier text ce descrie cnd i ce comenzi sunt programate pentru executare automat. Fiecare utilizator i poate defini singur sarcinile automatizate, folosind utilitarul crontab, dat fiind faptul c acetia nu au acces direct la fiierul /etc/crontab. Dei n mod implicit toi utilizatorii i pot defini propriul set de comenzi programate, administratorul poate s restricioneze accesul la acest serviciu prin intermediul fiierelor cron.allow i cron.deny localizate n directorul /etc. Utilizatorii listai n primul fiier vor avea dreptul de a programa sarcini automate, pe cnd cei listai n cel de-al doilea fiier nu vor avea acest drept. Programarea sarcinilor se face de regul prin intermediul utilitarului crontab. Pentru afiarea listei de comenzi planificate trebuie executat comanda crontab l. Formatul tipic pentru fiierele crontab este simplu: fiecare linie reprezint programarea pentru o comand, i are 6 cmpuri separate prin spaii. Acestea sunt n ordine: Numrul de minute dup or [0;59] Ora [0;23] Ziua lunii [1;31] Luna [1;12] Ziua sptmnii [0 i 7 pentru Duminic, progesiv pentru restul] Comand ce va fi executat Fiecare coloan poate conine mai multe valori separate prin virgul sau o linie orizontal i se accepte caracterul * cu semnificaia oricare. Fiecare utilizator i poate edita propriul fiier crontab, prin executarea comenzii crontab e. Utilizatorul root este singurul care are dreptul s editeze fiierele crontab ale altor utilizatori prin adugarea parametrului u nume_utilizator, de exemplu crontab u user1 e. Fiecare utilizator i poate programa astfel execuia unor comenzi la intervale prestabilite. Urmeaz cteva exemple de linii crontab explicate: 40 * * * * echo salut | wall - va emite un mesaj de atenionare ctre toi

    utilizatorii la fiecare 40 de minute (0:40, 1:40, 2:40, etc...) 1-59 * * * * echo salut | wall - va emite un mesaj de atenionare ctre

    toi utilizatorii o dat la fiecare minut. 0 12 * * 5 /bin/salut - va executa scriptul / programul /bin/salut n fiecare

    zi de vineri (5 = vineri) la ora 12:00 AM. Administratorul poate programa i activai la nivel de sistem, prin editarea fiierului /etc/crontab, pstrnd sintaxa anterioar, cu meniunea c acesta are o coloan n plus inserat ntre coloanele ziua sptmnii i comanda. Acest cmp adiional reprezint utilizatorul pentru care se va executa comanda programat.

    36

    eAdmin

  • n aceast idee, procesul de creare a copiilor de siguran poate fi automatizat, la ore prestabilite. n cazul n care administratorul dorete executarea unei copii de siguran (de orice tip) folosind oricare dintre utilitarele prezentate mai sus, tot ce are de fcut este de adugat linia corespunztoare n fiierul /etc/crontab. Gestionarea datelor Datele de pe un sistem Linux se supun la aceleai reguli i riscuri ca orice date: proasta gestionare, pierdere sau furt. n continuare vom studia cteva tehnici diferite pentru o mai bun gestiune a datelor pe un sistem Debian. Primul pas n vederea asigurrii confidenialitii datelor, pentru a preveni accesul neautorizat sau furtul este criptarea. Procesul implic configurarea unei partiii astfel nct coninutul acesteia s fie criptat n mod transparent i n timp real. Configurarea unei partiii pentru criptare presupune pierderea datelor existente de pe acea partiie, astfel nct se recomand un back-up nainte de acest proces. n continuare, vom prezenta paii necesari pentru obinerea unei partiii criptate: Pasul 1. Instalarea pachetului cryptsetup Pachetul cryptsetup conine utilitarul necesar pentru realizarea partiiei criptate. Instalarea se face apelnd comanda apt-get install cryptsetup.

    Pasul 2. Pregtirea partiiei pentru criptare Acest pas presupune scrierea unor seturi de date pe partiia ce urmeaz s fie creat, pentru a ajuta procesul de criptare. Urmnd acest past naintea criptrii efective, partiia va fi protejat mpotriva atacurilor. Comanda recomandat pentru acest pas este una care ndeplinete raportul optim securitate / timp generare: badblocks vfw (nume_partiie) 4096 Aplicaia badblocks este folosit pentru examinarea discurilor fizice n scopul detectrii blocurilor defecte. n acest scop, acest program va genera nite abloane pe discul ce urmeaz s fie testat. Parametrii vfw foreaz scrierea acestor abloane pe disc, genernd n esen un punct de plecare pentru facilitarea procesului de criptare.

    Pasul 3. Criptarea propriu-zis n acest moment, partiia prelucrat este gata pentru a fi criptat. Pentru a continua, vom stabili civa parametri necesari pentru criptare: tipul de cifru va fi aes i dimensiunea cheii n bii (n cazul de fa vom folosi o cheie pe 128 de bii). Pentru folosirea acestor parametri, i pentru realizarea criptrii este necesar executarea comenzii (atenie, partiia n cauz NU trebuie s fie montat): cryptsetup luksFormat (nume_partiie) c aes s 128 n cazul n care utilizatorul primete un mesaj de eroare n genul Failed to setup dm-crypt key mapping, nseamn c modulul de kernel corespunztor nu este ncrcat. Pentru remedierea acestei probleme, trebuie ncrcat modulul dm-crypt prin executarea comenzii: modprobe dm-crypt. Dac totul a decurs normal, utilizatorul va fi rugat s introduc o fraz de

    37

    eAdmin

  • autentificare ce va fi folosit n procesul de criptare. Se recomand alegerea unei fraze ct mai lungi pentru garantarea unui nivel minim de securitate.

    Pasul 4. Deschiderea partiiei n acest moment, avem pregtit o partiie criptat, ns aceasta nu este nc gata pentru folosire. Pentru deschiderea partiiei, putem folosi tot utilitarul cryptsetup cu parametrii corespunztori: cryptsetup luksOpen (nume_partiie) (nume_criptat) n urma execuiei comenzii anterioare, utilizatorul va fi rugat s introduc fraz de autentificare stabilit la pasul anterior. Dac fraza este corect, atunci partiia va fi prelucrat de ctre sistemul device mapper. Acesta este un cadru prin care se poate face o asociere ntre dou dispozitive n esen creaz un fel de legtur ctre un fiier de tip dispozitiv ce va fi folosit pentru montarea partiiei criptate. Numele fiierului creat este cel specificat c parametrul n cadrul comenzii anterioare, i va putea fi localizat la adresa: /dev/mapper/(nume_criptat).

    Pasul 5. Crearea sistemului de fiiere pe partiia criptat n acest moment partiia criptat este gata, ns nu poate fi folosit pn nu va fi formatat. Pentru a crea sistemul de fiiere standard Linux (ext3) pe noua partiie, trebuie folosit comanda: mke2fs j /dev/mapper/(nume_criptat)

    Pasul 6. Montarea partiiei Odat generat, partiia poate