Elemente introductive privind sistemul de operare UNIX Istoric al evolu\iei sistemului Prima versiune experimental[ a sistemului, numit[ UNICS1… [601181]
1LUCRAREA NR. 1
Elemente introductive privind sistemul de operare UNIX
Istoric al evolu\iei sistemului
Prima versiune experimental[ a sistemului, numit[ UNICS1
(UNiplexed Information and Computing Service ), a ap[rut
@n 1969 fiind opera lui Ken Thompson ]i a membrilor echipei sale de la laboratoarele Bell. Versiunea, scris[ @n limbaj de asamblare, era numai pentru un singur utilizator. Realizarea @n 1972 a primului compilator
pentru limbajul C, a permis rescrierea sistemului UNIX @n acest limbaj de
programare. #ncep`nd cu anii '80 sistem ul s-a impus ca principal[ solu\ie
de standardizare @n domen iul sistemelor de opera re, el reg[sindu-se pe
toate tipurile de calculatoare (mainframe, mini, micro).
Considerentele de realizare ale sistemului de operare UNIX au
fost urm[toarele:
1. necesitatea standardiz[rii ]i unific[rii mediilor de operare ]i
@n general a interfe\ei cu utilizatorul;
2. transportabilitatea fi]ierelor @ntre diverse sisteme de calcul,
men\in`nd identic[ structura volumelor ]i fi]ierelor;
3. asigurarea unor niveluri superioare de portabilitate a
produselor program (se extinde portabilitatea de la nivelul limbajelor de programare c[tre portabilitatea la nivelul
executivului – asisten\a fiind identic[ din partea sistemului de
operare – ]i la nivelul filozofiei de implementare a programelor);
4. folosirea unei game largi de arhitecturi de sisteme de calcul
prin interconectarea calculatoarelor de tipuri ]i puteri diferite,
func\ion`nd sub acela]i sistem de operare;
5. transparen\a produselor software fa\[ de evolu\ia hardware-
ului.
Spre deosebire de cele mai multe sisteme de operare proprietar,
UNIX a devenit numele unei @ntregi familii de astfel de sisteme, exist`nd
@n prezent, mai multe variante. Acest lucru a fost posibil deoarece codul
1 Din cauza pronun\iei acronimului de mai sus, modul de scriere al
sistemului de operar e s-a transformat @n UNIX .
2surs[ al primelor versiuni a fost f[cut disponibil mai multor produc[tori
de calculatoare care au dezvoltat vari ante specifice unei anumite linii de
ma]ini (procesoare), @n timp ce alte va riante au fost dezvoltate @n mod
specific ca ]i produse shareware sau chiar freeware .
Cu toate c[ variantele respective difer[ @n ceea ce prive]te
originea, implementarea, ]i @nt r-un anumit grad, func\ionalitatea,
programele utilitare, limbajele de programare, metodele de configurare, sau interfe\ele utilizator pe care le ofer[, asem[n[rile între ele sunt mult mai mari dec`t deosebirile, toate variantele coexist`nd.
Se pot eviden\ia urm[toarele variante de UNIX :
• HP-UX (Hewlett Packard)
• Solaris (SunSoft)
• SVR4 (AT&T)
• AIX (IBM)
• BSD (Berkeley Software)
• UnixWare (Novell)
• SCO Unix (Santa Cruz Operation)
• Linux
Odat[ cu cre]terea popularit[\ii sistemului UNIX @n sectorul
comercial ]i guvernamental a devenit necesar[ standard izarea facilit[\ilor
acestuia, pentru a preveni dezvoltarea de versiuni care s[ nu fie
compatibile @ntre ele. Astfel, au ap[rut:
– SVID (System V Interface Definition ) –
publicat @n 1986 de AT&T . Este standardul de facto pentru
interfe\e UNIX System V . Aplica\iile dezvoltate @n
conformitate cu acest standard pot fi rulate (prin recompilare)
pe orice sistem UNIX System V .
– POSIX (Portable Operating System for
Computer Environment ) – define]te interfa\a @ntre
sistemul de operare ]i aplica\ii. Standardul este dezvoltat de
IEEE (Institute of Electrical and
Electronic Engineers
) ]i promoveaz[ portabilitatea
codului surs[ nefiind obligatoriu ca sistemul de operare
suport s[ fie un sistem UNIX .
3- C.A.E. (Common Application Environment ) –
standard pentru un mediu comun de aplica\ii, dezvoltat de
consor\iul X/OPEN .
Caracteristici generale ale sistemului UNIX
#ntre caracteristicile ce au contribuit la succesul acestui sistem de
operare se pot men\iona:
• este un sistem de tip time-sharing , multitasking ]i multiuser ;
• prin scrierea sa @n limbajul C (preponderent) s-a ob\inut o
portabilitate at`t a sistemului UNIX propriu-zis, c`t ]i a
software-ului de aplica\ie d ezvoltat sub acest sistem. Ca
urmare, UNIX -ul permite folosirea celor mai diverse
arhitecturi de sisteme calcul, func\ion`nd aproape identic pe
mainframe, mini sau microcalculatoare;
• promoveaz[ modularitatea;
• filozofia de proiectare a UNIX -ului, rezumat[ prin simplu ,
general ]i extensibil , este direct vizibil[ utilizatorului @n
limbajul de comand[. Astfel, @n contrast cu comenzile
complexe ale multor sisteme de operare, comenzi cu multe
op\iuni, greu de re\inut ]i care nu acoper[ niciodat[ toate
cazurile posibile, comenzile UNIX implementeaz[ o singur[
func\ie. Aceste comenzi, cu ro l de instrumente software, pot
fi combinate pentru a ob\ine func\ii complexe. Combinarea este facilitat[ de mecanismul de comunicare @ntre procese @n
UNIX prin transmiterea direct[ a rezultatelor unui program
ca date de intrare pentru un alt program;
• este multisesiune – se pot deschide mai multe sesiuni de
lucru pe acela]i terminal;
• este multiproces – se pot rula concurent mai multe procese ce
pot comunica @ntre ele sau pot crea la r`ndul lor alte procese;
• permite utilizarea @n comun a informa\iilor, faciliteaz[ lucrul
@n echip[ ]i comunica\ia @ntr e utilizatori prin mecanisme
evoluate;
• implementeaz[ un sistem de fi]iere arborescent care se poate
desf[]ura pe mai multe volume, elimin`nd func\ia de partajare a volumelor, care este o problem[ esen\ial[ @n
4sistemele time-sharing ]i @n configura\iile de re\ea. Fi]ierele
au cea mai simpl[ structur[: ]ir de octe\i;
• unific[ tratarea fi]ierelor ]i a dispozitivelor periferice, ]i
implementeaz[ un mecanism de redirec\ionare a rezultatelor
unui program;
• asigur[ protec\ia fi]ierelor ]i a modului de execu\ie prin
utilizarea parolelor ]i a permisiunilor de acces;
• opera\iile de I/E sunt integrate @n sistemul de fi]iere,
realiz`ndu-se a]a-numitele in tr[ri/ie]iri generalizate;
• exist[ un sistem de gestiune a proceselor reentrante ]i
asincrone multiple, care se pot sincroniza prin intermediul
unui sistem de @ntreruperi logice;
• gestiunea memoriei se face printr-un mecanism ce permite
schimbul de pagini @ntre memoria intern[ ]i memoria
extern[, gestion`ndu-se spa\iul afectat execu\iei proceselor
]i control`ndu-se timpul de acces la procesele @n a]teptare;
• asigur[ o interfa\[ simpl[ ]i interactiv[ @ntre utilizator ]i
sistem, prin intermediul componentei shell (interpretorul
de comenzi). Shell -ul nu este @nglobat @n nucleul
sistemului de operare, nu este unic, (sunt disponibile mai
multe shell -uri) ]i permite introducerea de noi comenzi,
combinarea comenzilor, etc.;
• ofer[ implement[ri de compilatoare pentru numeroase
limbaje de programare: Basic , Fortran , Pascal , C,
Prolog , Lisp , etc.
Sesiunea de lucru sub UNIX
Dup[ pornirea sistemului de calcu l, ]i @nc[rcarea sistemului de
operare, ini\ierea unei sesiuni de lucru sub UNIX @ncepe cu ac\iunea de
conectare ( login ). #n cadrul acesteia, utilizatorului i se va solicita, @n
prim[ faz[, identificatorul de conectare unic ( login ID) asociat. Acesta
identific[ utilizatorul ]i orice caracteristici asociate cu el, fiind @n fapt un
nume de recunoa]tere autorizat. Dup[ furnizarea de c[tre utilizator a
identificatorului respectiv, i se va solicita ]i parola de acces
corespunz[toare ( password ). Cele dou[ elemente sunt verificate, ]i @n
cazul @n care sunt corecte, conectarea se realizeaz[, fiind afi]ate o serie de
5informa\ii referitoare la ultima cone ctare nereu]it[, ultima conectare
reu]it[, dac[ sunt me saje de po]t[ electr onic[, mesaje de la
administratorul de sistem, ].a. Apoi se lanseaz[ automat @n execu\ie
interpretorul de comenzi implicit ( shell )2 afi]`ndu-se un prompter3.
Din acest moment utilizatorul are acce s la resursele sistemului, ]i poate
folosi comenzile UNIX .
Configurare
Configurarea unui sistem UNIX se face în primul r`nd prin
intermediul fi]ierelor de configurare . Acestea sunt fi]iere script
(fi]iere de comenzi), cu un format care le face u]or de citit ]i de
modificat, în care se memoreaz[ informa\ii referitoare la propriet[\ile
obiectului configurat, ]i care la momentul conect[rii se execut[. Fi]ierul script ce se execut[ depinde de shell -ul utilizat. De exemplu, @n
Bourne shell , se execut[ fi]ierul .profile din directorul home al
utilizatorului, iar @n Korn shell se execut[ fi]ierul c[tre care face
referire variabila de mediu ENV.
Terminarea unei sesiuni de lucru UNIX se face folosind una din
comenzile: exit , respectiv bye, sau tast`nd combina\ia de taste
<Ctrl><D> .
2 Interpretorul de comenzi este un prog ram executabil situat, de regul[, @n
directorul /bin , ]i care este tratat de c[tre nucleul (k ernel ) sistemului de
operare, ca orice proces utilizator nepriv ilegiat. La deschiderea unei sesiuni de
lucru, se lanseaz[ @n execu\ie un proces shell la terminalul la care lucreaz[
utilizatorul, a]tept`nd comenzi.
Interpretorul de comenzi ( shell ) (care porne]te dup[ introducerea
numelui utilizatorului ]i a parolei) poate fi ales de c[tre utilizator. Exist[ mai
multe interpretoare clasice, fiecare r[ spunz`nd anumitor cerin\e. Interpretorul
"standard" în UNIX este Bourne shell (sh) , dar foarte folosite sunt ]i
Bourne Again shell (bash) , Korn shell (ksh) , Berkeley C
shell (csh) , Turbo C shell (tcsh) .
3 #n func\ie de shell -ul utilizat, prompter-ul es te reprezentat printr-un
caracter specific. Astfel, @n cazul shell -ului sh (Bourne shell ), prompter-
ul este $ (@n cazul utilizatorilor neprivilegia\i) sau * (pentru utilizatori
privilegia\i – superuser , root ). Dac[ shell -ul este csh (C shell ),
prompter-ul va fi %, iar @n cazul shell -ului ksh (Korn shell ) prompter-ul
va fi :.
6 Pentru oprirea, @ntr-o manier[ ordonat[, a calculatorului pe care
ruleaz[ sistemul UNIX , se utilizeaz[ comanda shutdown .
Aceasta poate fi executat[ numai de c[tre utilizatorul privilegiat
(superuser , root ). C`nd comanda este executat[, to\i utilizatorii
primesc un mesaj shutdown ]i apoi recep\ioneaz[ un mesaj final de
terminare.
C`\iva dintre indicatorii utiliza\i cu comanda shutdown sunt:
-h opre]te sistemul complet
-i permite afi]area de mesaje ca re ghidez[ utilizatorul @n cadrul
procesului de shutdown
-k simuleaz[ un shutdown sistem
-m opre]te sistemul ]i @l trece @n modul @ntre\inere ( single
user ), astfel @nc`t administratorul de sistem s[ poat[ efectua @ntre\inerea
acestuia (instalarea de hardware/software sau @ntre\inerea planificat[ a hardware-ului/software-ului existent)
-r permite oprirea sistemului urmat[ de restartare ( reboot ).
Este de asemenea posibil[ specificarea momentului de timp la
care oprirea (sau restartarea) s[ fie f[cut[, prin indicarea unei date viitoare sau a unui timp relativ. #n ac est caz sistemul trimite periodic
mesaje utilizatorilor, referitoare la oprire.
Variantele cele mai des folosite ale acestei comenzi sunt:
shutdown -h now
shutdown -r now
Specificarea numelui fi]ierelor ]i directoarelor
UNIX are o structur[ de directoare ]i fi]iere asem[n[toare cu cea
a sistemelor DOS ]i Windows .
Fi]ierele sunt stocate @n directoare ]i sunt identificate printr-un
nume, care este o secven\[ de caractere. Toate numele de fi]iere, oricare ar fi tipul lor (text, binare) se
supun acelora]i reguli, ]i anume:
1. Spre deosebire de sistemul DOS unde numele de fi]iere era
specificat @n formatul 8.3, (maxim 8 caractere pentru nume
]i maxim 3 caractere pentru o eventual[ extensie), @n UNIX
se pot utiliza nume lungi de fi]iere (p`n[ la 255 de caractere,
dac[ este instalat sistemul de fi]iere ext2 sau umsdos ), iar
7numele pot con\ine mai mult de un punct (de exemplu,
mihai.stud.txt );
2. #n toate cazurile, @n cadrul numelui unui fi]ier, UNIX face
distinc\ie @ntre caracterele minuscule ]i majuscule4, (de
exemplu, numele FILENAME.tar.gz ]i
filename.tar.gz fac referire la fi]iere diferite);
3. Caracterele ce pot fi utilizate pentru numele de fi]iere sunt
func\ie de sistemul UNIX folosit, exist`nd particularit[\i. #n
general, pot fi utilizate literele de la A la Z sau de la a la z;
numerele de la 0 la 9, linia de subliniere5, punctul6. #n tabelul
1.1 sunt date o serie de caractere (sau combina\ii de caractere) ce au o semnifica\ie special[ pentru UNIX , ]i ca
urmare utilizarea lor trebuie f[cu t[ cu precau\ie. Lista nu este
exhaustiv[ ]i ea depinde de shell -ul UNIX folosit.
Tabelul 1.1
Semnifica\ia c`torva caractere speciale
Caracter Semnifica\ie
$ Indic[ @nceputul numelui unei variabile shell . De exemplu
$var va @nsemna numele unei variabile numite var.
| Leag[ ie]irea standard a unei comenzi la intrarea standard a
altei comenzi ( pipe ).
# #ncepe un comentariu.
& Execut[ un proces @n fundal (background ).
? Specificator pentru nume de fi]ier global ce \ine locul unui
4 Este case-sensitive .
5 Linia de subliniere poate separa cuvinte @n cadrul numelui unui fi]ier,
f[c`nd numele mai u]or de citit. De ex emplu, @n loc de a numi un fi]ier
fisierdetest , putem s[-l numim fisier_de_test .
6 Un punct poate fi folosit pentru a ad[uga o extensie la un nume de
fi]ier, @ntr-o modalitatea similar[ fi]ierelor DOS. De exemplu, un fi]ier surs[ C
care con\ine un program numit prog poate fi denumit prog.c . A]a cum s-a
ar[tat, @n UNIX nu suntem limita\i la o singur[ extensie.
#n cazul @n care un punct este folos it ca prim caracter @n cadrul numelui
unui fi]ier, acesta confer[ fi]ierul ui statutul de fi]ier ascuns ( hidden ). De
exemplu, dac[ @n directorul cu rent exist[ fi]ierele doc1 ]i .doc1 , tast`nd
comanda ls va fi afi]at numai fi]ierul doc1 . Pentru afi]area ambelor fi]iere se
va tasta comanda ls –a .
8singur caracter.
* Specificator pentru nume de fi]ier global ce \ine locul mai
multor caractere .
$# Num[rul de argumente transmise unui script shell .
$* Argumente transmise unui script shell .
$? Returneaz[ cod de la comanda executat[ anterior.
$$ Num[r de identificare proces.
> Operator pentru redirectarea ie]irii .
< Operator pentru redirectarea intr[rii.
' Substitu\ie comand[.
>> Operator pentru redirectarea ie ]irii (pentru a ad[uga la un
fi]ier).
[ ] Afi]eaz[ un domeniu de caractere. [a-z] semnific[ toate
caracterele dintre a ]i z. [a,z] semnific[ caracterele a sau
z.
.nume_fisier Execut[ fi]ierul cu numele specificat.
: Separator de nume de director din cadrul c[ii.
Observa\ii:
1. Sub UNIX , dac[ un nume de fi]iere con\ine spa\ii (nu este
recomandat, dar este posibil), ori de c`te ori ne referim la el,
va trebuie s[ includem numele respectiv @ntre ghilimele
duble.
2. Pentru fi]ierele executabile ("programe") nu exist[
obligativitatea utiliz[rii extensiilor: .COM , .EXE , .BAT .
Aceste fi]iere sunt marcate printr-un caracter * existent la
sf`r]itul numelului lor, atunci c`nd sunt afi]ate cu comanda ls -F .
3. Sub DOS numele fi]ierelor arhiv[ ( backup ) au extensia
.BAK , sub UNIX numele acestora se termin[ cu caracterul ~
(tilda).
C`teva dintre extensiile uzuale de fi]iere folosite @n mediul UNIX
sunt ilustrate @n tabelul 1.2.
9Tabelul 1.2
Extensii uzuale de fi]iere, @nt`lnite @n mediul UNIX
Extensie Comentariu
1. . .8 Pagini de manual. Se citesc folosind comanda: groff –
Tascii -man <file.1>
arj Arhiv[ realizat[ cu arj
dvi Fi]ier de ie]ire realizat de c[tre TeX. Pentru vizualizarea sa se
folose]te comanda xdvi , iar pentru convertirea sa @ntr-un
fi]ier PostScript se folose]te comanda: dvips
gz Arhiv[ f[cut[ cu gzip
info Fi]ier info (o alternativ[ la paginile de manual)
lsm Fi]ier Linux Software Map. Este un fi]ier ASCII plat ce
con\ine descrierea unui pachet
ps Fi]ier PostScript . Pentru a-l tip[ri sau vizualiza se
folosesc comenzile gs ]i op\ional ghostview sau gv
rpm Pachet Linux Red Hat. #l putem instala pe orice sistem
utiliz`nd gestionarul de pachete rpm
tar,
tar.Z Arhiv[ realizat[ cu tar ]i compresat[ cu compress
tgz,
tar.gz Arhiv[ realizat[ cu tar ]i compresat[ cu gzip
tex Fi]ier text de transmis lui TeX, un sistem de editare puternic
xbm,xpm,
xwd Fi]ier grafic
Z Arhiv[ realizat[ cu compress
Directoare standard
#n toate sistemele UNIX , anumite fi]iere trebuie @ntotdeauna s[
fie disponibile. Directoarele ce le con\in formeaz[ o arborescen\[
standard care se creeaz[, de regul[, la momentul instal[rii sistemului de operare.
Un exemplu de o astfel de arborescen\[ este specificat @n
tabelul 1.3. Trebuie men\ionat c[ lista respectiv[ nu este exhaustiv[, ea
depinz`nd de sistemul UNIX cu care se lucreaz[.
10Tabelul 1.3
Arborescen\a standard
Nume director Explica\ii
/ Director r[d[cin[ – este director ul p[rinte tuturor directoarelo r
]i fi]ierelor din cadrul si stemului de fi]iere al UNIX .
/bin Con\ine toate comenzile native UNIX , executabile.
/dev Con\ine fi]iere speciale asociate dispozitivelor periferice
(dispozitive caracter ]i dispozitive bloc).
/etc Con\ine fi]iere executabile ]i fi]iere de configurare a
sistemului. Cele mai multe dintre comenzile destinate
administr[rii sistemului sunt stocate aici.
/lib Stocheaz[ fi]iere bibliotec[ pentru diferite limbaje de
programare (de exemplu pentru limbajul C).
/lost+found Con\ine fi]ierele aflate @n curs de procesare la momentul @n
care sistemul s-a oprit datorit[ unor cauze anormale. Sistemul
folose]te acest director pentru a recupera fi]iere @n cauz[. Un
astfel de director ( lost+found ), exist[ @n toate parti\iile
discului.
/home Toate directoarele personale (implicite) ale utilizatorilor sun t
definite ]i con\inute @n acest director.
/usr Con\ine un num[r de subdirectoare cum sunt: adm, bin, etc,
]i include .
Comenzi UNIX
#n cadrul unui sistem UNIX utilizatorul are la dispozi\ie comenzi
native UNIX precum ]i comenzi pe el @nsu]i le poate scrie (fi]iere de
comenzi – fi]iere script ). #n func\ie de versiunea de UNIX ce ruleaz[ ]i
de shell -ul utilizat, comenzile difer[.
Comenzile UNIX sunt de fapt programe executabile care pot fi
g[site în directoarele /bin , /usr/bin . Diferen\ele între interpretoarele
de comenzi se v[d mai ales în contextul fi]ierelor de comenzi. Practic, aceste interpretoare permit scrierea de programe complexe, folosind
comenzile UNIX ]i directivele speciale.
Forma sintactic[ gene ral[ a unei comenzi shell este
urm[toarea:
comanda[indicatori][argument1][argument2]..
unde:
11 comanda – reprezint[ numele comenzii ce urmeaz[ a fi
executat[. C[utarea comenzii (a fi]ierului executabil), p`n[ c`nd aceasta
este g[sit[, se face @n urm[ toarea secven\[: în directorul curent; în
directorul /bin ; în directorul /usr/bin . #n cazul @n care comanda nu
este g[sit[, va fi afi]at un mesaj de eroare.
[indicatori] – reprezint[ op\iuni desemnate printr-o liter[,
precedat[ de semnul – sau +, ce sunt destinate pentru a ob\ine o rafinare
a ac\iunii comenzii. #n cadrul unei comenzi pot fi specifica\i mai mul\i indicatori, preceda\i de unul din cele dou[ semne men\ionate anterior. De
exemplu, comenzile ls -a-l ]i ls -al sunt echivalente.
[argument1] [argument2] .. – reprezint[ nume de
fi]iere/directoare sau ]iruri de caractere ]i constituie parametrii comenzii.
#n func\ie de comand[, argum entele pot fi op\ionale sau
obligatorii. Specificarea argumentelor op\ionale, @n cadrul sintaxei unei
comenzi, se face prin introducerea lor @ntre paranteze p[trate.
Specificarea argumentelor (fi]ierelor) este permis[ de c[tre
shell ]i prin utilizarea urm[toarelor metacartere (specificatori pentru
nume de fi]ier global – wildcard ):
* semnific[ orice ]ir de caractere, inclusiv ]irul vid
? semnific[ orice caracter
[…] semnific[ o mul\ime de caractere
– semnific[ o secven\[ lexicografic[
Pe baza acestor metacaractere, shell -ul va genera nume de
fi]iere utilizate în cadrul comenzilor. Exemple: *.c – indic[ toate fi]ierele av`nd sufixul c;
def[0-9] – indic[ fi]ierele def0 , def1 , …, def9 ;
prog[09] – indic[ fi]ierele prog0 , prog9 ;
cap? – indic[ fi]ierele existente cap1 , cap2 , cap3 ;
cap* – indic[ fi]ierele existente cap1 , cap2
, cap3 , cap1.c ,
cap2.c ;
prog[*?] – indic[ at`t varianta prog* , c`t ]i varianta prog? .
p*r – face referire la cele care @ncep cu p ]i se termin[ cu r;
*c* – face referire la cele care con\in litera c.
[abc]* – face referire la toate fi]ierele al c[ror nume @ncepe cu
a,b,c ;
12 *[[I-N1-3] – face referire la fi]ierele ce se termin[ cu
I,J,K,L,M,N,1,2,3 ;
Observa\ie :
Cele trei construc\ii lexicale comanda , [indicatori] ,
[argument1] [argument2] .. , trebuie s[ fie separate prin spa\ii.
Toate comenzile accept[ intr[ri de la intrarea standard (de regul[, tastatura), afi]eaz[ ie]irea la ie]irea standard (de regul[, ecranul
terminalului).
Atunci c`nd o comand[ este executat[ cu succes, ea returneaz[ un cod de return zero. Dac[ comanda nu s-a executat cu succes, sau s-a
executat cu succes par\ial, ea returneaz[ coduri de return diferite de zero.
Acestea pot fi utilizate ca parte a controlului logic @n fi]ierele de comenzi (script -urile shell ).
Observa\ii:
1. De]i comenzile descrise @n cadrul prezentei lucr[ri
func\ioneaz[ pe cele mai multe sisteme UNIX , @ntr-o
modalitate similar[, comportamentul indicatorilor asocia\i cu
fiecare comand[ poate s[ difere.
2. UNIX ofer[ posibilitatea introducerii @n linia de comand[ a
mai multor comenzi ce se vor executa serial. Comenzile trebuiesc separate prin caracterul ;. De exemplu introduc`nd
la linia de comand[:
date;netscape;date
ni se va afi]a data calendaristic [ dup[ care va fi lansat @n
execu\ie programul de navigare Netscape Navigator ,
iar la terminarea acestuia, dup[ revenirea la promptul sistem,
se va afi]a din nou data calendaristic[.
Multe comenzi UNIX ce se introduc de la promptul sistem, nu
difer[ de comenzile din MS-DOS , sau din Windows , anumite dintre ele
fiind identice.
#n continuare (tabelul 1.4) sunt prezentate c`teva comenzi
obi]nuite utilizate @n MS-DOS , Windows9x (de la promptul MS-DOS ) ]i
UNIX , @nso\ite de exemple. Trebuie men \ionat faptul c[ fiecare comand[
13are mai mul\i indicatori. Pentru a vedea care sunt ace]tia ]i care este rolul
lor, se va studia pagina de ma nual aferent[ comenzii @n cauz[.
Tabelul 1.4
Comenzi similare MS-DOS ]i UNIX
Scop MS-DOS UNIX Exemplu
Copiaz[
fi]iere copy cp cp test.txt /home/mihai
Mut[ fi]iere move mv mv test.txt /home/mihai
Afi]eaz[
con\inutul unui director dir ls ls
}terge ecranul cls clear clear
#nchide
fereastra exit exit exit
Afi]eaz[ sau
seteaz[ data
calendaristic[ date date date
}terge fi]iere del rm rm test.txt
Transmite @n
ecou ie]irea
unei comenzi
pe ecran echo echo echo acesta este un
mesaj
Editeaz[
fi]iere cu un
editor de texte simplu edit pico
7 pico test.txt
Compar[
con\inutul fi]ierelor fc diff diff fisier1 fisier2
Caut[ un ]ir
text @ntr-un fi]ier find grep grep acesta este un
text fisier.txt
Formateaz[ o
dischet[ format
a:
mke2fs (sau
mformat8) /sbin/mke2fs /dev/fd0
(/dev/fd0 este echivalentul
pentru Linux al lui A:)
7 pico este un editor de texte simplu. Alte editoare mai complexe ce pot
fi utilizate, sunt emacs ]i vi.
8 Formateaz[ o dischet[ pent ru sistemul de fi]iere DOS.
14Afi]eaz[ un
help aferent
unei comenzi /? man man comanda
Creeaz[ un
director mkdir mkdir mkdir Aplicatii
Filtre pentru
afi]area con\inutului
unui fi]ier,
sau rezultatului unei comenzi, ce nu @ncape @ntr-un singur
ecran more more , less
more test.txt
less test.txt
Redenume]te
un fi]ier ren mv9 mv test1 test2
Afi]eaz[
loca\ia din sistem chdir pwd pwd
Comut[ @n
directorul specificat
(cale absolut[) cd
nume_cale cd
nume_cale
10 cd /home/ise
Comut[ @n
directorul
specificat
(cale relativ[) cd.. cd .. cd ..
#ntre cele dou[ sisteme de operare exist[ diferen\e @n ceea ce
prive]te specificarea numelui unei c[i director. Astfel, @n cadrul MS-DOS ,
9 Comanda mv serve]te unui scop dublu. Ea poate muta un fi]ier, dar
poate s[-l ]i redenumeasc[ dac[ este “mutat ” @n cadrul aceluia]i director, a]a
cum se arat[ @n exemplu.
10 Caracterul ~ (tilda) este un shortcut pentru numele directorului
home al utilizatorului. Comenzile cd sau cd ~ vor avea ca efect comutarea
utilizatorului @n directorul s[u home indiferent de direct orul @n care se afla
@naintea tast[rii comenzii respective. Comanda cd – va reface efectul ultimei
comenzi cd tastate.
15numele directoarelor din cadrul unei c[i sunt separate prin caracterul
backslash (\), @n timp ce @n cadrul UNIX acesta este @nlocuit prin
caracterul forward slash (/).
Ob\inerea help -ului aferent unei comenzi
UNIX ofer[ posibilitatea ob\inerii unei informa\ii ajut[toare
(help ) referitoare la diferite comenzi.
Exist[ mai multe posibilit[\i:
1. Studiind documenta\ia ce @nso\e]te pachetele instalate pe
calculator ]i care se g[se]te, de regul[, @n subdirectorul
/usr/doc ;
2. Prin utilizarea uneia din comenzile: man, help , info ,
apropos , whatis .
man
Este una dintre cele mai importa nte comenzi. Permite ob\inerea
unor informa\ii suplimentare referitoar e la comenzile ]i serviciile sistem
ale UNIX -ului. Informa\ia @n cauz[ este prezentat[ @ntr-un format
condensat ("pagin[ de manual") ce prezint[ scopul comenzii, op\iunile
disponibile ]i sintaxa utilizat[.
Sintaxa general[ a comenzii, este:
man [indicatori] [sectiune] comanda
unde:
comanda este numele comenzii pentru care se solicit[
informa\ie ajut[toare, iar sectiune reprezint[ num[rul unei sec\iuni a
manualului @n cadrul c[reia se va face c[utarea. Exist[ 8 sec\iuni
numerotate de la 1 la 8. Acestea sunt:
1–Commands (descrie comenzile standard)
2–System calls (descrie func\iile(apelurile) sistem UNIX
apelabile @n limbajul C)
3–Subroutines (descrie func\iile de bibliotec[ C)
4–File formats (formate fi]iere)
5–Miscellaneous (formate ale diferitelor fi]iere specifice
sistemului UNIX )
7–Special files (fi]iere speciale)
8–Maintenance (comenzi de administrare a sistemului, cu
privilegii sporite)
16 Pentru fiecare sec\iune exist[ c`te un capitol introductiv care
descrie con\inutul acestei a. Pentru a vedea, de exemplu, introducerea la
sec\iunea 4, se va tasta comanda:
man 4 intro
Este de asemenea posibil[, c itirea unei pagini de manual
referitoare chiar la comanda man. Pentru aceasta se va tasta comanda:
man man
Pentru ob\inerea unei informa\ii ajut[toare se pot utiliza ]i
celelalte comenzi men\ionate anterior.
Redirectarea intr[rii/ie]irii comenzii
Toate comenzile UNIX folosesc canale de intrare/ie]ire pentru a
citi sau transmite informa\iile. Canalul de intrare standard, utilizat @n
general pentru citire, este asociat tast aturii, iar canalul de ie]ire standard,
este asociat ecranului terminalului. UNIX -ul gestioneaz[ aceste canale de
manier[ independent[ pentru fiecare utilizator. De regul[, multe dintre
comenzile UNIX -ului transmit rezultatele ac\iunii lor pe ecranul
terminalului. #n anumite cazuri este dificil pentru utilizator de a avea o imagine de ansamblu asupra acestor rezultate. De aceea o solu\ie mai util[ ar fi, de exemplu, transmiterea lor (redirectarea) c[tre un fi]ier.
#n acest context, redirectarea semnific[ determinarea shell -ului
s[ schimbe ceea ce el consider[ ca f iind intrarea standard sau unde anume
ie]irea standard se va duce. Pentru a realiza aceast[ schimbare se folosesc
urm[torii operatori de redirectare:
< pentru redirectarea intr[rii
> pentru redirectarea ie]irii
Redirectarea intr[rii
Exist[ o serie de comenzi UNIX ce a]teapt[ ca datele s[ le
parvin[ de la tastatur[. Este posib il ca aceste date s[ fie citite dintr-un
fi]ier. Vom exemplifica folosind comanda wc (word count ) ]i un fi]ier
numit test.doc @n care exist[ introduse mai multe linii de text.
Comanda va citi num[rul de linii, num[rul de cuvinte ]i num[rul de caractere ale textului din cadrul fi]ier ului, afi]`nd pe ecranul monitorului
rezultatele.
wc<test.doc
5 11 82
17 Dac[ se dore]te contorizarea numai a num[rului de linii11, se va
folosi indicatorul -l:
wc –l<test.doc
5
Comanda func\ioneaz[ ]i f[r[ redirectarea intr[rii. #n acest caz ea
ia @n considerare numai ap[s[rile de la tastatur[. Pentru a efectua
num[r[toarea se va termina introducerea de caractere, prin tastarea pe o
linie nou[, a combina\iei de taste <Ctrl><D> .
Un alt exemplu este cel @n care vom folosi comanda sort .
Aceasta preia liniile care trebuie sortate, dintr-un fi]ier ( date.txt ),
iar rezultatele vor fi afi]ate pe ecran.
sort<date.txt
Redirectarea ie]irii
#n acest caz, rezultatul ac\iunii unei comenzi nu va mai fi afi]at
pe ecranul monitorului, ci va fi redirectat c[tre un fi]ier.
Exemplu:
ls>iesire.txt
Rezultatele comenzii ls vor fi incluse @n fi]ierul iesire.txt .
Dac[ acest fi]ier nu exist[, el va fi creat. Dac[ fi]ierul exist[, datele pe care eventual le con\ine, vor fi @nlo cuite cu rezultatele ac\iunii comenzii.
Atunci c`nd se dore]te ca rezultate le generate de comand[ s[ fie
ad[ugate la sf`r]itul fi]ierului (dac[ acesta exist[), se va tasta comanda:
ls>>iesire.txt
Dac[ fi]ierul nu exist[, atunci el va fi creat.
Un alt exemplu, @n care liniile de text sunt introduse (citite) de la tastatur[, ]i scrise @ntr-un fi]ier ( ordonat.txt ) este urm[torul:
sort>ordonat.txt
Observa\ie:
Atunci c`nd utiliz[m redirectarea c[tre un fi]ier, putem rescrie
fi]ierul @n cauz[. Deci, trebuie s[ fim siguri c[ numele fi]ierului pe care @l cre[m este diferit de numele unui fi]i er existent (cu excep\ia cazului @n
care dorim @nlocuirea acestuia).
11 Comanda dispune de trei indicatori: -l (nr. de linii); -w (nr. de
cuvinte); -c (nr. de caractere).
18 Redirect[rile se pot combina, astfel înc`t liniile s[ fie citite dintr-
un fi]ier, iar rezultatul s[ fie scris în altul:
sort<date.txt>ordonat.txt
Conducte
Sistemul UNIX permite utilizarea ie]irii standard a unei comenzi
ca intrare standard pentru o alta, to tul @ntr-o singur[ comand[. Aceast[
@nl[n\uire se nume]te " conduct[ " (pipe ), iar operatorul folosit @n acest
caz este |.
O exemplificare a acestui concept o vom face folosind comanda ls. Pentru vizualizarea con\inutului directorului /etc vom tasta:
ls -al /etc
Ca efect, informa\iile afi]ate vor defila continuu pe ecran. Pentru
vizualizarea pagin[ cu pagin[ a aces tora (sau un ecran la un moment dat)
vom realiza o conduct[ @ntre comanda ls ]i comanda less , astfel;
ls -al /etc|less
Trecerea de la un ecran de vizualizat, la altul se face tast`nd
<SPACE> (un ecran @nainte) sau <B> (un ecran @napoi). Pentru p[r[sire
se tasteaz[ <Q>.
Se pot înl[n\ui oric`te comenzi ]i, prin urmare, pentru afi]area pagin[ cu pagin[, @n ordine alfabetic [, a numelor tuturor fi]ierelor din
directorul curent /etc , se va folosi comanda:
ls -al /etc|sort|less
Exerci\ii
1. S[ se specifice modalit[\ile @n care se poate ob\ine o informa\ie
ajut[toare relativ la o comand[. Se va exemplifica pe comanda ls.
2. Utiliz`nd comanda ls ]i specificatori de nume pentru fi]ier
global, s[ se afi]eze toate fi]ierele din directorul curent al c[ror nume
@ncepe cu una din literele c, t, s.
3. Utiliz`nd comanda ls ]i specificatori de nume pentru fi]ier
global, s[ se afi]eze toate fi]ierele din directorul curent al c[ror nume
con\ine litera a.
4. S[ se specifice @n cadrul unei singure linii de comand[
succesiunea de comenzi necesare pentru a afi]a data calendaristic[ ]i
directorul curent (loca\ia curent[).
19LUCRAREA NR. 2
Instalarea unei distribu\ii de Linux
Sistemul de operare Linux este o variant[ de UNIX distribuit[
gratuit (open-source ), pentru sisteme de calc ul bazate pe procesoare
Intel , Dec Alpha , dar ]i pentru alte tipuri de procesoare (cum ar fi, de
exemplu, cele pentru embedded systems ).
Creat @n 1991 de Linus Torvalds, Linux -ul este dezvoltat @n
permanen\[ de o echip[ format[ din mii de entuzia]ti din lumea @ntreag[,
sub @ndrumarea unui colectiv condus de Linus Torvalds. Aceast[ echip[
mondial[ se ocup[, @n fapt, cu dezvoltarea nucleului ( kernel -ului)
sistemului de operare, acesta afl`ndu-se @n prezent la versiunea 2.6.×12
.
Ca orice sistem din familia UNIX -ului, ]i Linux -ul este compus,
pe l`ng[ nucleul sistemului de operare , dintr-o colec\ie de utilitare de
baz[ ]i programe de aplica\ii, cum ar fi: diverse shell -uri, editoare de
texte, compilatoare ]i medii de dezvo ltare de aplica\ii @n diverse limbaje
de programare, diverse utilitare, programe de po]t[ electronic[, ].a. Majoritatea acestora sunt programe open-source , dar exist[ ]i
aplica\ii comerciale.
#n 1991 c`nd Linus Torvalds scria primele versiuni ale unui nou
nucleu de tip UNIX , a luat decizia de a combina nucleul s[u cu mediile de
dezvoltare de aplica\ii ]i utilitarele de baz[ din familia GNU dezvoltate de
c[tre FSF (Free Software Fundation )
13, ]i cu sistemul grafic X
12 2.6 este num[rul major de versiune, care indic[ o familie generic[ de
versiuni, ce se deosebe]te de preceden ta prin caracteristici ]i func\ionalit[\i
importante, introduse @n nucleu o dat[ cu trecerea la o nou[ familie de versiuni,
iar x reprezint[ num[rul minor de versiune, incrementat la lansarea fiec[rei noi
versiuni a nucleului de Linux .
13 Funda\ia FSF @]i propusese s[ dezvolte o versiune de UNIX care s[ fie
@n @ntregime compatib il[ cu varianta de UNIX de la AT&T , versiune numit[ GNU
(acronim recurs iv ce @nseamn[ GNU’s Not Unix ), ]i care trebuia s[ nu necesite
nici o licen\[ de utilizare (s[ fie gratuit[).
#nainte de anii ’90, funda\ia reu]ise s[ realizeze deja medii de dezvoltare
de aplica\ii (compilator de C ]i C++, depanator, link-editor, ].a.) ]i utilitarele de
baz[, dar @i lipsea tocmai nucle ul sistemului de operare.
20Window dezvoltat la MIT (Massachusetts Institute of
Technology ) pentru a forma un sistem de operare complet. Se n[]tea
astfel un nou sistem de operare, numit Linux , primul sistem de operare
care era disponibil @n mod gratu it. De fapt, ini\ial se numea GNU/Linux ,
dar s-a @nr[d[cinat folosirea numelui mai scurt Linux .
Datorit[ faptului c[ at`t nucleul, c`t ]i instrumentele GNU erau
disponibile gratuit, diverse companii ]i organiza\ii, ba chiar ]i unii utilizatori pasiona\i de fenomenul open -source ]i Linux , au @nceput
s[ lanseze diverse variante de Linux , care difereau @ntre ele prin
versiunea nucleului ce o includeau ]i prin programele (cu propriile lor
versiuni) ce alc[tuiau colec\ia de utilitare de baz[ ]i programe de aplica\ii inclus[ @n respectiva variant[ de Linux . Astfel, toate includeau
compilatorul GNU C/C++ pentru limbajele C ]i C++, @ntr-o anumit[
versiune a acestuia. #n plus, erau @nso\ite ]i de un program de instalare a sistemului, care ]i acesta era diferit de la o variant[ la alta de Linux .
Diferen\ele dintre aceste programe de instalare sunt mai pregnante @n ceea
ce prive]te modul de gestiune al pachetelor
14 ]i de selec\ie al lor @n
vederea instal[rii, precum ]i al script -urilor folosite pentru
configurarea sistemului.
Aceste variante de Linux au fost denumite distribu\ii de
Linux . #n prezent, cele mai r[sp`ndite distribu\ii sunt:
– Red Hat (http://www.redhat.com );
– Slackware (http://www.slackware.org );
– Mandrake (http://www.mandrake.com );
– SuSE (http://www.suse.de );
– Debian (http://www.debian.org ).
Num[rul actual de distribu\ii Linux dep[]e]te 100, acestea
fiind adaptate pentru diverse arhit ecturi, diverse scopuri de folosire a
sistemului, etc. (de exemplu, exist[ distribu\ii care pot fi rulate direct de
sub Windows , f[r[ a fi necesar[ instalarea lor @n parti\ii UNIX separate,
sau distribu\ii care pot fi boot -ate direct de pe CD, f[r[ a necesita
instalarea sistemului pe hard disc, numite distribu\ii “live ”). Pe portalul
oficial dedicat Linux -ului, accesibil la adresa Internet
14 #n terminologia UNIX , prin pachet se @n\elege un grup de programe,
uneori dependente unele de altele, ce realizeaz[ o anumit[ sarcin[ (sau mai multe sarcini @nrudite), @mpreun[ cu fi]ierele de ini\ializare ]i configurare aferente acestor programe.
21http://www.linux.org , se g[sesc informa\ii despre distribu\iile de
Linux disponibile @n prezent, grupate dup[ criteriile de clasificare
amintite mai sus.
#n concluzie, o distribu\ie de Linux const[, @n principal, dintr-o
anumit[ versiune a nucleului de Linux ]i dintr-o anumit[ selec\ie
(specific[ produc[torului distribu\iei respective) a programelor, cu
diverse versiuni ale lor, ce formeaz[ colec\ia de utilitare de baz[ ]i
programe de aplica\ii proprie acelei di stribu\ii. La acestea se adaug[ un
anumit program de instalare a acelei distribu\ii ]i de management al
pachetelor de programe ce alc[tuiesc distribu\ia respectiv[.
Diferen\ele @ntre distribu\iile provenite de la produc[tori diferi\i
constau, @n principal, @n programele ce au fost selectate pentru a fi
incluse, distribu\iile fiind adaptate pentru diverse scopuri, precum ]i,
uneori, @n programul de instalare ]i modul de gestiune al pachetelor de
c[tre acesta.
#n cadrul unei distribu\ii provenit[ de la un produc[tor oarecare,
diferen\ele @ntre diferitele versiuni ale ei constau, @n principal, @n versiunea nucleului ]i versiunile programelor incluse @n respectiva versiune a distribu\iei.
Etape ale procesului de instalare
1. Stabilirea tipului de instalare
• workstation – este recomandat[ pentru utilizatorii @ncep[tori.
Include programe de birotic[, programe pentru access
internet, multimedia, etc.;
• server – cuprinde programe care ofer[ servicii Internet
(WWW, FTP, e-mail, etc.) precum ]i alte servicii de re\ea
(NFS, SMB, etc.);
• laptop – se folose]te pe calc ulatoare portabile. Este
asem[n[tor cu tipul de instalare workstation ]i include
suport pentru gestionarea bateriilor;
• custom – este pentru utilizatorii avansa\i, c[rora le permite
alegerea pachetelor dorite a fi instalate.
2. Crearea parti\iilor
La instalarea unui sistem de operare Linux se recomand[
crearea a cel pu\in 3 parti\ii:
22• o parti\ie swap , folosit[ la memoria virtual[ (cel pu\in 32 MB
]i cel mult 2 GB). Marimea ideal[ este valoarea memoriei
RAM existente pe sistem;
• o parti\ie /boot (ext3 ) ce con\ine fi]ierele necesare
@nc[rc[rii sistemului de operare;
• o parti\ie root (r[d[cin[) care va con\ine toate fi]ierele din
sistem.
În cazul în care se opteaz[ pentru tipul de instalare server , se
recomand[ crearea urm[toarelor parti\ii suplimentare:
• /usr , care con\ine fi]iere ale sistemului de operare;
• /var , care va con\ine fi]ierele variabile ale sistemului;
• /home , care va con\ine fi]ierele utilizatorilor.
Aceste date pot s[ difere mult de la un sistem la altul în func\ie
de num[rul de pachete instalate, de memoria RAM a sistemului, de
m[rimea hard disc-ului ].a.m.d.
3. Instalarea propriu-zis[
Fiecare produc[tor al unei distribu\ii de Linux @nso\e]te acea
distribu\ie de manuale (disponibile @n format electronic, eventual ]i @n
format tip[rit) care descriu modul de instalare ]i de utilizare.
Observa\ie:
#nainte de a @ncepe instalarea unei distribu\ii este recomandabil[
citirea manualului de instalare.
#n continuare vom prezenta pa] ii generali ce trebuie urma\i @n
vederea instal[rii unei distribu\ii de Linux “clasice ” (ce trebuie instalat[
pe hard disc @n propria parti\ie de tip Linux ). Trebuie precizat c[ ace]ti
pa]i sunt doar un ghid general, pentru instalarea unei distribu\ii fiind necesar[ studierea documenta\iei aferente.
1. Preg[tirea instal[rii
Aceast[ prim[ etap[ cuprinde:
1.1 Preg[tirea spa\iului liber pentru stocarea sistemului de
fi]iere al Linux -ului
23#n cadrul acestui prim pas va fi creat spa\iu liber pe hard disc,
necesar pentru parti\iile de Linux . Dac[ hard disc-ul sistemului este gol,
atunci nu este nici o problem[.
Cel mai adesea @ns[, pe calculator se afl[ deja instalat sistemul
Windows . #n aceast[ situa\ie, dac[ totu]i mai exist[ spa\iu neparti\ionat
pe hard disc, iar[]i nu este nici o problem[. De regul[ @ns[, fie nu mai
exist[ deloc spa\iu liber, neparti\ionat, fie exist[, dar este insuficient. #n acest caz, va fi necesar[ eliberarea de spa\iu prin redimensionarea (mic]orarea) parti\iilor existente.
Acest lucru se poate face @n felul urm[tor: mai @nt`i se
defragmenteaz[ parti\ia ce urmeaz[ a fi mic]orat[, folosind fie utilitarul
de defragmentare din Windows , fie un alt program de defragmentare
(cum ar fi cel din suita Norton Utilities ). #n felul acesta blocurile
ocupate de date vor fi mutate la @n ceputul parti\iei, iar cele libere la
sf`r]itul ei. Urmeaz[ apoi mic]orarea efectiv[ a parti\iei, care se poate
realiza folosind utilitarul FIPS.EXE (ce se g[se]te pe CD-urile
distribu\iei respective, de obicei @n directorul \DOSUTILS ), sau o alt[
aplica\ie de parti\ionare (cum ar fi programul Partition Magic ).
Observa\ie:
#nainte de parti\ionare, se vor realiza copii de siguran\[ ale
datelor existente @n parti\ia respect iv[, aceasta deoarece utilizarea
programelor de parti\ionare comport[ anumite riscuri ce pot conduce la
pierderea de date, recuperarea lor ulterioar[ fiind, dac[ nu imposibil[, cel
pu\in foarte anevoioas[.
1.2 Alegerea metodei de instalare
De obicei, sunt disponibile trei metode de instalare, clasificate
dup[ loca\ia programului de instalare:
1. CD-ROM – instalarea se va face direct de pe CD-urile ce
con\in distribu\ia respectiv[. Pentru pornirea sistemului se poate opta fie pentru boot -area de pe CD (de obicei primul
CD al distribu\iei este boot -abil), dac[ BIOS -ul
calculatorului are op\iunea de boot -are de pe CD-uri, fie
pentru boot -area cu ajutorul unei dischete de boot .
2. hard disc – instalarea se va face de pe hard disc, dup[ ce @n
prealabil con\inutul CD-urilor din care este format[
24distribu\ia au fost copiate pe o parti\ie Linux sau Windows
existent[. #n acest caz este necesar[ discheta de boot
amintit[ mai sus.
3. re\ea – instalarea se va face prin re\ea, de pe un alt calculator
ce con\ine distribu\ia de Linux , ]i pe care o export[ @n re\ea
prin protocolul NFS, FTP, sau HTTP . }i @n acest caz este
necesar[ o dischet[ de boot , care trebuie s[ aib[ ]i suport
pentru re\ea.
Pe l`ng[ aceste metode de instalare, care toate presupun pornirea
calculatorului prin boot -area unui sistem Linux minimal, fie de pe o
dischet[ de boot , fie de pe CD, mai exist[ o posibilitate de instalare
direct de pe CD-ROM , @n situa\ia @n care pe calculator exist[ deja instalat
sistemul Windows . Astfel, se porne]te acest sistem ]i se apeleaz[ un
program special dedicat acestui scop (numit, de obicei, AUTOBOOT .EXE
sau AUTORUN .EXE, care se g[se]te pe CD-urile distribu\iei respective, de
obicei @n directorul \DOSUTILS ).
1.3 Crearea dischetei de boot
Este nevoie de crearea unei dischete de boot pentru Linux ,
care va fi folosit[ pentru boot -area unui sistem Linux minimal, cu
ajutorul c[ruia se va face instalarea propriu-zis[ a distribu\iei de Linux .
Crearea unei astfel de dischete se poate face din cadrul sistemului
MS-DOS/Windows , proced`ndu-se @n felul urm[tor: se copiaz[ pe o
dischet[ goal[ imaginea dischetei de boot aflat[ pe CD-urile distribu\iei,
folosind un utilitar dedicat acestui scop (cum ar fi programul RAWRITE.EXE , ce se g[se]te pe CD-urile distribu\iei respective, de
obicei @n directorul \DOSUTILS ).
Observa\ie:
Discheta de boot pentru Linux nu este necesar[ la instalare @n
situa\ia @n care instalarea se va face prin boot
-area de pe CD-ul
ditribu\iei, sau c`nd instalarea va fi pornit[ din MS-DOS/Windows .
Totu]i, este recomandabil[ crearea unei dischete de boot , fie @n
aceast[ etap[ preg[titoare, fie dup[ instalare, care s[ fie disponibil[
pentru situa\ia @n care boot-manager -ul instalat de Linux va fi
corupt (lucru ce se poate @nt`mpla la o reinstalare ulterioar[ a sistemului
Windows , deoarece programul acestuia de instalare rescrie MBR-ul
25(Master Boot Record ), iar acesta poate con\ine boot-manager -ul
de Linux ); @n aceast[ situa\ie, dup[ terminarea reinstal[rii Windows –
ului, sistemul va putea fi pornit cu ajutorul dischetei de boot , ]i va putea
fi ref[cut boot-manager -ul de Linux @n MBR.
1.4 Planificarea parti\iilor de Linux
Este recomandabil[ crearea cel pu\in a urm[toarelor parti\ii:
1. o parti\ie de swap , ce va fi folosit[ pentru memoria virtual[.
Dimensiunea acestei parti\ii trebuie s[ fie de minim 32 MB ]i
maxim 2 GB, dar recomandabil este s[ fie cam dublul memoriei
RAM instalate @n calculator.
2. o parti\ie pentru directorul /boot , ce va con\ine nucleul Linux
]i celelalte fi]iere utilizate @n timpul boot -[rii. Ca dimensiune
poate fi aleas[ valoarea 32 MB.
Observa\ie:
Aceasta fiind parti\ia de pe care se boot -eaz[ sistemul, exist[ o
restric\ie asupra plas[rii sale pe hard disc, ]i anume, ea trebuie plasat[ la
@nceputul hard disc-ului, sub limita de 1 GB (mai precis, aceast[ parti\ie
trebuie s[ aib[ cilindrul de start @naintea cilindrului 1024 ). Limitarea se
datoreaz[ modului restrictiv de acces la hard disc al programului LILO
(programul boot-manager responsabil cu pornirea sistemului). Pentru
celelalte parti\ii nu exist[ nici o restric\ie, ele put`nd fi plasate la orice distan\[ de @nceputul hard disc-ului, fie ca parti\ii primare, fie ca parti\ii logice @n cadrul parti\iei extinse definit[ pe respectivul hard disc.
3. o parti\ie de root , acolo unde se va afla / (r[d[cina structurii
arborescente a sistemului de fi]iere), ]i care va con\ine toate
fi]ierele din sistem. Dimensiun ea acestei parti\ii trebuie aleas[
astfel @nc`t s[ @ncap[ toate pachetele de aplica\ii ce vor fi selectate pentru instalare (@n timpul instal[rii propriu-zise exist[ posibilitatea de a alege ce aplica\ii se doresc a fi instalate dintre
toate cele disponibile @n distribu\ia respectiv[, ]i vi se va
comunica ]i spa\iul necesar acesto ra). |in`nd cont c[ hard disc-
urile actuale au dimensiuni de sute de GB, se poate alege f[r[
probleme o dimensiune de c`\iva GB, sau chiar mai mult.
26Observa\ie:
#n cazul @n care calculatorul nu va fi folosit ca sta\ie de lucru, ci
ca server Linux , se recomand[ crearea unor parti\ii suplimentare:
4. o parti\ie pentru directorul /home , ce va con\ine fi]ierele
utilizatorilor cu conturi pe acel server;
5. o parti\ie pentru directorul /var , ce va con\ine fi]ierele variabile
ale sistemului;
6. o parti\ie pentru directorul /usr , ce va con\ine fi]ierele
sistemului de operare ]i aplica\iile instalate ulterior.
Tipul sistemului de fi]iere ce trebuie utilizat pentru fiecare dintre
parti\iile amintite mai sus, trebuie specificat la momentul realiz[rii efective a oper\iei de parti\ionare.
Pentru parti\ia de swap , ce va avea codul numeric 82, trebuie
ales tipul de sistem de fi]iere swap . Celelalte parti\ii vor fi parti\ii native
de Linux , cu codul numeric 83, pentru care se va alege ca sistem de
fi]iere unul din tipurile urm[toare: ext2 (sistemul clasic de fi]iere
Linux , compatibil cu standardele UNIX ), ext3 (noul sistem de fi]iere
Linux , bazat pe ext2 , ce are ad[ugat suport pentru jurnalizare), sau
reiserfs (un sistem nou de fi]iere, cu suport pentru jurnalizare, ce are
performan\e superioare sistemelor ext2 ]i ext3 , datorit[ arhitecturii
interne mai eficiente).
Realizarea efectiv[ a parti\ion[rii se va face @ntr-o prim[ etap[ a
programului de instalare a distribu\iei respective. Ea se poate face ]i @n
avans, folosind discheta de boot , creat[ la un pas amintit mai sus, pentru
a porni sistemul, ]i apoi se poate apela utilitarul fdisk pentru a crea
parti\iile de Linux .
2. #nceperea instal[rii propriu-zise
A doua etap[ const[ @n instalarea propriu-zis[ a sistemului
Linux . Se @ncepe prin pornirea ( boot -area) sistemului cu ajutorul
dischetei de boot , sau direct folosind CD-ul boot -abil al distribu\iei. La
sf`r]itul etapei de pornire a sistemului, se va afi]a un ecran cu informa\ii despre modurile de startare a instal[rii ]i un prompter de forma boot: la
care se a]teapt[ alegerea unei op\iuni de startare a instal[rii.
27Exist[ dou[ interfe\e ale programului de instalare, ce pot fi
folosite, la alegere, @n timpul instal[rii: o interfa\[ @n mod text (care se
selecteaz[ de obicei tast`nd comanda text sau linux text la
prompterul amintit anterior (comanda exact[ ce trebuie tastat[ depinde de distribu\ie, dar de obicei se ofer[ info rma\ii @n acest sens chiar pe ecranul
afi]at @n acest punct al instal[rii), ]i o interfa\[ @n mod grafic , care este
aleas[ implicit (dup[ scurgerea unui interval de c`teva secunde f[r[
reac\ie din partea utilizatorului, sau imediat la ap[sarea tastei <ENTER>
dup[ apari\ia prompterului amintit anterior). Desigur, interfa\a @n mod
grafic este mai “prietenoas[ ” pentru utilizator, dar totu]i este
recomandabil[ folosirea interfa\ei @n mod text, mai ales @n cazul @n care adaptorul video instalat @n sistem ar e performan\e slabe, sau atunci c`nd
se dore]te un timp mai scurt de instalar e (interfa\a @n mod text este mai
rapid[).
Dup[ alegerea interfe\ei, text sa u grafic[, programul de instalare
parcurge urm[toarele etape:
2.1 Selectarea limbii
Limba selectat[ va fi utilizat[ pe parcursul instal[rii ]i, implicit,
]i dup[ instalare.
2.2 Selectarea tipului de instalare
Se poate alege o instalare complet[ sau o actualizare a unei
instal[ri mai vechi ( upgrade ). #n cazul instal[rii complete, se poate
alege @ntre o instalare recommended , @n care op\iunile de instalare ]i
pachetele ce vor fi instalate sunt selectate automat de c[tre programul de
instalare, @n conformitate cu un scenariu ales de utilizare a sistemului: personal desktop (sistem personal), workstation (sta\ie de
lucru), sau server , ]i o instalare custom (sau expert), care permite
modificarea op\iunilor de instalare ]i selec\ia pachetelor dorite, oferind
astfel cea mai mare flexibilitate posibil[.
2.3 Configurarea tastaturii ]i a mouse-ului
2.4 Parti\ionarea discului
#n cadrul acestei etape se defi nesc ]i se formateaz[ parti\iile
28necesare Linux -ului, @n conformitate cu cele discutate la etapa
preg[titoare a instal[rii.
Exist[ de obicei dou[ op\iuni de parti\ionare: automat[ ]i
manual[ . Pentru cea din urm[ se folose]te programul de parti\ionare
Disk Druid , @n cazul interfe\ei grafice, respectiv cu programul clasic
fdisk , disponibil doar pentru interfa\a @n mod text.
2.5 Instalarea @nc[rc[torului de boot
Pentru a putea porni sistemul Linux este nevoie de un @nc[rc[tor
de boot (boot loader ), care poate porni de asemenea ]i alte sisteme
de operare ce sunt instalate pe disc.
#nc[rc[torul clasic ce se folo]este este programul LILO (LInux
LOader ), dar mai exist[ ]i alte dou[ alternative: se poate folosi
programul GRUB (GRand Unified Boot loader ), sau f[r[ un
@nc[rc[tor de boot , situa\ie @n care va trebui pornit de fiecare dat[
sistemul Linux @ntr-o alt[ manier[ (fie cu o dischet[ de boot pentru
Linux , fie cu un program ce starteaz[ Linux -ul de sub MS-
DOS/Windows ).
Tot @n aceast[ etap[ se mai st abilesc modul de instalare a
@nc[rc[torului de boot ]i celelalte sisteme de ope rare ce vor fi pornite de
c[tre @nc[rc[torul respectiv. Acesta poate fi instalat fie @n MBR (Master
Boot Record ), adic[ sectorul de boot de la @nceputul discului ce este
@nc[rcat automat de BIOS -ul calculatorului (se recomand[ folosirea
acestei op\iuni), fie @n primul sector al parti\iei de root (@n aceast[
situa\ie trebuie configurat @nc[rc[torul sistemului de operare instalat anterior pe disc pentru a ]ti s[ apeleze @nc[rc[torul de Linux plasat @n
primul sector al parti\iei de root al acestuia).
Observa\ii :
1. #n cazul folosirii @nc[rc[torului clasic LILO , configurarea
sistemelor de operare ce vor putea fi po rnite prin intermediul lui, se face
cu ajutorul fi]ierului /etc/lilo.conf , care este un fi]ier text ce
poate fi editat direct pentru a specifica sistemele de operare, parti\iile de pe care vor fi pornite, ]i al\i para metri op\ionali de transmis nucleului
Linux la @nc[rcarea acestuia. Dup[ editare, activarea modific[rilor
efectuate se face cu comanda lilo (/sbin/lilo ).
29Spre exemplu, se poate pune o parol[ @n /etc/lilo.conf
pentru pornirea restrictiv[ a Linux -ului – pentru orice parametru
op\ional transmis nucleului, se va cere parola; @n acest caz, trebuie
protejat fi]ierul astfel @nc`t s[ nu fie accesibil dec`t utilizatorului privilegiat ( root ) (lucru ce se poate realiza cu comanda chmod 600
/etc/lilo.conf , efectuat[ de c[tre acest utilizator. Parola de pornire
ofer[ protec\ie fa\[ de atacurile de la consol[.
Cu comanda man lilo.conf se poate consulta documenta\ia
referitoare la acest fi]ier de configurare a @nc[rc[torului de boot .
2. La prompterul lilo : afi]at de @nc[rc[torul LILO , pe l`ng[
comenzile implicite ce pot fi tastate, ]i anume cele de selectare a sistemului de operare ce urmeaz[ a fi @nc[rcat, se mai pot tasta o serie de alte op\iuni utile pentru utilizatorii avansa\i, De exemplu, cu comanda
append="…" se pot specifica o serie de parametri ce vor fi transmi]i
nucleului la @nc[rcarea acestuia, sau, cu comanda linux single se va
porni sistemul @n mod single user ]i se va intra @n sistem ca root ,
f[r[ faza de autentificare (nu se ma i cere parola). Protec\ia @mpotriva
acestui tip de acces se poate realiza folosind o parol[ @n fi]ierul /etc/lilo.conf , conform celor discutate mai sus.
2.6 Configurarea conexiunii de re\ea
Se configureaz[ adaptorul (sau adaptoarele) de re\ea instalat @n
calculator, @mpreun[ cu toate datele necesare pentru buna func\ionare @n
cazul leg[rii @ntr-o re\ea de calculatoare: adresa IP, masca de re\ea,
numele ma]inii, adresa gateway -ului, adresa DNS-ului, ].a.
2.7 Configurarea nivelului de securitate
Se configureaz[ firewall -ul pe baza nivelului de securitate
ales, dintre mai multe op\iuni posibile: nivel @nalt, nivel mediu, nivel jos
(f[r[ firewall ), sau op\iunea custom , ce permite configurarea
manual[ a firewall -ului. Firewall -ul este o aplica\ie foarte
important[ pentru securitatea sistemului, ea av`nd ca sarcin[ filtrarea
traficului prin leg[tura de re\ea, @n func\ie de adresele IP ]i porturile din
pachetele de date ce o tranziteaz[.
2.8 Configurarea utilizatorilor
Se alege parola pentru utilizatorul privilegiat ( root ), ce posed[
30drepturi totale asupra sistemului. Contul acestui utilizator trebuie folosit,
@n mod normal, doar pentru instalarea /dezinstalarea de programe ]i pentru
administrarea sistemului. #n rest, se recomand[ crearea unuia sau mai
multor utilizatori obi]nui\i (f[r[ drepturi depline @n sistem) care s[ fie folosi\i pentru lucrul cu calculatorul, deoarece o comand[ gre]it[ tastat[
de c[tre utilizatorul root poate cauza deteriorarea sistemului sau chiar
pierderea datelor ]i aplica\iilor stocate pe disc.
2.9 Configurarea autentific[rii @n sistem
Dac[ calculatorul este legat @n re\ ea, din motive de securitate este
foarte important ca accesul la sist em, de la distan\[ (de pe un alt
calculator legat la re\ea, folosind protocoalele TELNET sau SSH), s[ fie
posibil pe baza unui sistem de autentificare sigur.
#n acest sens, sunt disponib ile mai multe op\iuni utile:
• activarea/dezactivarea sistemului MD5, ce permite folosirea de
parole mai sigure (cu lungimea de maxim 256 de caractere, @n
loc de lungimea maxim[ standard de 8 caractere);
• activarea/dezactivarea sistemului shadow (ce permite stocarea
sigur[ a parolelor @n fi]ierul /etc/shadow , @n locul variantei
nesigure de p[strare @n fi]ierul /etc/passwd );
• activarea sistemului de autentificare NIS (Network
Information Service ) sau a LDAP (Lightweight
Directory Access Protocol ) – ambele mecanisme
folosesc conceptul de interogare prin re\ea a unui server ce con\ine o baz[ de date de autentificare (asem[nator cu
mecanismul Active Directory din Windows );
• activarea Kerberos sau a SMB (Samba ), alte dou[ sisteme ce
ofer[ servicii de autentificare @n re\ea.
2.10 Selectarea ]i instalarea pachetelor
#n aceast[ etap[, @n func\ie ]i de tipul de instalare selectat, se pot
selecta pachetele (aplica\iile) ce se do resc a fi instalate, dintre cele
disponibile @n distribu\ia respectiv[ – acestea de obicei fiind de ordinul
sutelor, aranjate @n grupuri de pachet e pe baza rolului lor, de exemplu,
aplica\ii (editoare, de calcul inginere sc ]i ]tii\ific, suite de productivitate
office, etc.), programe pentru dezvoltare, programe pentru Internet
(po]t[ electronic[, navigatoare de web
, etc.), programe pentru diverse
31servere de servicii (server de web, server Samba , server DNS, etc.),
programe de sistem (pentru administrare, configurare, ].a.), medii grafice,
etc. De asemenea, se ofer[ informa\ii despre spa\iul necesar pentru
instalarea pachetelor selectate.
Dup[ selectarea pachetelor, programul de instalare verific[
dependen\ele dintre pachete (anumite aplica\ii se bazeaz[ pe altele pentru
a func\iona corect) ]i rezolv[ lipsurile constatate pe baza interac\iunii cu utilizatorul, iar apoi are loc instalarea propriu-zis[ a acestora.
Observa\ie:
Mediile grafice ce pot fi selectate folosesc sistemul de ferestre
grafice X Window , ce are o arhitectur[ de tip client-server bazat[ pe
protocolul X11. Ca medii grafice, dou[ sunt cele mai r[sp`ndite: GNOME
]i KDE. Se poate selecta instalarea ambelor, numai a unuia dintre ele, sau
a niciunuia (caz @n care nu vom putea exploata sistemul folosind o interfa\[ grafic[, ci doar utiliz`nd interfa\a clasic[ @n mod text).
2.11 Selectarea timpului ]i datelor regionale
Se selecteaz[ limba, tastatura, data ]i timpul curent, \ara ]i fusul
orar (time zone ).
2.12 Configurarea adaptorului video
#n majoritatea cazurilor programul de instalare poate determina
singur tipul adaptorului video din sistem. Poate ap[rea @ns[ ]i situa\ia @n care este necesar a indica, programului de instalare, care este tipul adaptorului video (prin selec\ia dint r-o list[ de tipuri cunoscute), sau
chiar se impune c[utarea unui driver potrivit (la distribuitor sau pe
Internet ), dac[ distribu\ia nu con\ine un driver pentru acel tip de
adaptor.
2.13 Configurarea monitorului ]i personalizarea sistemului X
Window
#n majoritatea cazurilor programul de instalare poate determina
singur tipul monitorului, altfel poate fi ajutat de utilizator prin selec\ia dintr-o list[ de tipuri cunoscute.
Pentru interfa\a grafic[, se se lecteaz[ rezolu\ia ]i ad`ncimea
culorii dorite, mediul desktop (GNOME sau KDE) dorit, ]i dac[ sistemul
va porni direct @n mod grafic, sau @n mod consol[ (interfa\a text clasic[).
32Observa\ii :
1. #n cazul pornirii sistemului @n mod text, avem la dispozi\ie 6
terminale la care putem deschide c`te o sesiune de lucru de la consola
sistemului (de la tastatura ]i monitorul conectate direct la calculatorul
respectiv). Bine@n\eles, ele nu pot fi folosite @n acela]i timp – la orice
moment de timp exist[ doar un terminal activ, care gestioneaz[ input –
ul de la tastatur[ ]i output -ul pe ecranul monitorului – dar avem
posibilitatea de a comuta @ntre ele pent ru a le folosi alternativ. Aceast[
comutare se realizeaz[ prin ap[sarea combina\iilor de taste <ALT+F1> ,
<ALT+F2> , . . . , <ALT+F6> ce selecteaz[ terminalul corespunz[tor.
2. #n cazul conect[rii la sistem de la distan\[ pentru o sesiune de
lucru, input -ul de la tastatur[ calculatorului de la distan\[ ]i output –
ul pe ecranul monitorului de la distan\[ preluate @n cadrul aplica\iei ce
ruleaz[ la distan\[ (clientul de SSH, spre exemplu aplica\ia putty ), sunt
gestionate local (pe sistemul Linux ) prin a]a-numitele pseudoterminale ,
care au un rol asem[n[tor cu terminalel e folosite pentru conectarea de la
consola sistemului.
3. Trebuie men\ionat faptul c[ se poate folosi interfa\a grafic[ ]i
@n cazul conect[rii de la distan\[, cu observa\ia c[ necesarul de resurse ]i traficul prin re\ea este mai mare @n acest caz.
2.14 Configurarea celorlalte dispozitive hardware
Configurarea celorlalte dispozitive periferice existente eventual
@n calculator, ]i anume: placa de s unet, adaptorul de re\ea, imprimanta,
scanner-ul, tuner-ul TV, ].a., decurge asem[n[tor ca pentru placa video,
@n majoritatea cazurilor programul de instalare put`nd determina automat
tipul dispozitivului respectiv, sau put`nd fi ajutat de utilizator (prin selectarea dintr-o list[ de tipuri cunoscute, sau c[utarea unui driver
potrivit, la distribuitor sau pe Internet ).
2.15 Crearea unei dischete de boot
Se ofer[ posibilitatea de a crea o dischet[ de boot , ce poate fi
folosit[ pentru a porni sistemul Linux . Despre aceast[ dischet[ s-a
amintit deja @n prima faz[, cea a preg[tir ii instal[rii, ]i s-a explicat atunci
de ce este recomandabil s[ fie creat[.
332.16 Instalarea de versiuni actualizate ale pachetelor
Unele distribu\ii ofer[ op\iunea de conectare automat[ prin
Internet la site-ul oficial al di stribu\iei pentru desc[rcarea
eventualelor versiuni mai recente ale pachetelor de programe deja
instalate.
2.17 Terminarea instal[rii
La @ncheierea tuturor etapelor descrise mai sus, programul de
instalare va cere permisiunea pentru repornirea sistemului. Se scoate
eventuala dischet[ de boot din unitatea de dischet[, sau CD-ul din
unitatea CD-ROM , ]i se restarteaz[ sistemul. Ca urmare, se va @nc[rca
boot loader -ul configurat @n timpul instal[rii, care va @nc[rca sistemul
Linux , exploatarea acestuia put`nd @ncepe.
3. Actualizarea sistemului
Pe l`ng[ op\iunea de instalare complet[ a sistemului, distribu\iile
de Linux mai ofer[ ]i op\iunea de actualizare ( upgrade ) a acestuia.
De obicei, se ofer[ dou[ moduri de actualizare:
• actualizarea numai a pachetelor (aplica\iilor) instalate;
• actualizarea complet[ (pachete instalate, nucleu Linux ]i
@nc[rc[tor de boot ).
Instalarea de programe
Pe parcursul exploat[rii sistem ului, se poate ivi nevoia de a
utiliza programe noi, neinstalate/inexistente @n cadrul distribu\iei,
ob\inute din diverse surse, de obicei de pe Internet .
Instalarea unui program se poate face de c[tre un utilizator
obi]nuit (neprivilegiat), @n propriul director home , ]i @n acest caz
programul respectiv @i va fi accesibil doar lui, dar cel mai recomandabil
este s[ se fac[ de c[tre utilizatorul root , pentru a fi accesibil tuturor
utilizatorilor din sistem (unele programe pot fi instalate numai de c[tre
root ).
#n principal, se folosesc dou[ formate pentru distribu\ia
programelor prin Internet :
• .tar.gz – este un format arhiv[;
Mai @nt`i se configureaz[ aplica\ia respectiv[, cu comanda:
34configure [optiuni]
prin care se pot specifica diverite op\iuni de configurare. Apoi, cu
secven\a de comenzi:
make
make install
are loc instalarea propriu-zis[.
Dezinstalarea se face prin ]ter gerea directorului (inclusiv a
subdirectoarelor acestuia) @n care a fost instalat[ aplica\ia, folosind
comanda:
rm -r director_de_instalare
• RPM – este un format introdus de firma Red Hat, pentru
distribuirea programelor executabile ]i gestiunea pachetelor din cadrul distribu\iilor de Linux .
Aplica\iile @n acest format sunt gestionate cu comanda rpm.
Instalarea unui program se face cu comanda:
rpm -iv nume_program –nr_versiune.rpm
unde indicatorul -i @nseamn[ instalare, iar indicatorul -v @nseamn[
modul verbose , adic[ o afi]are detaliat[ de informa\ii pe parcursul
instal[rii.
Se poate face ]i upgrade -ul la o versiune mai recent[ a unui
program deja instalat, utiliz`nd comanda:
rpm -u nume_program –nr_versiune.rpm
unde indicatorul -u @nseamn[ upgrade .
Dezinstalarea se face cu indicatorul -e urmat doar de numele
programului respectiv:
rpm -e nume_program
Exerci\ii
1. S[ se instaleze o distribu\ie de Linux , tipul de instalare ales
fiind workstation .
2. S[ se realizeze o actualizare a unui pachet instalat.
35LUCRAREA NR. 3
Interfa\a cu utilizatorul
Fiecare sistem de operare posed[ o interfa\[ cu utilizatorul,
în\eleg`nd prin aceasta una sau mai multe metode de a introduce
comenzi. În func\ie de sistemul de operare, exist[ urm[toarele tipuri de
interfa\[:
• interfa\[ linie de comand[ (Command Line Interface –
CLI) – are drept caracteristici principale:
interac\iunea cu sistemul de operare se bazeaz[ pe
comenzi scrise de la tastatur[;
este dificil de @nv[\at, utilizatorul obi]nuindu-se greu cu
comenzile;
pot fi invocate comenzi complicate utiliz`nd secven\e
scurte de caractere;
de]i de la apari\ia sa a fost concurat[ de celelalte tipuri
de interfa\[ ( TUI ]i GUI), r[m`ne totu]i, metoda de
control a sistemului de operare;
este preferat[ de utilizatorii avansa\i datorit[ u]urin\ei
utiliz[rii comenzilor.
Exemple de astfel de interfe\e sunt shell -ul din Linux ]i cmd
@n Windows .
• interfa\[ text (Text User Interface – TUI) – are drept
caracteristici principale:
interac\iunea cu sistemul de operare se realizeaz[ prin
intermediul ferestrelor, meniurilor, butoanelor, mouse-
ului;
pentru desenarea interfe\ei sunt utilizate caractere
disponibile pe orice terminal text.
Exemple de astfel de interfe\e: mcedit , links .
• interfa\[ grafic[ (Graphical User Interface – GUI) –
are drept caracteristici principale:
este un sistem de in terac\iune de tipul WIMP (window ,
icon , menu , pointing device );
36 pentru desenarea interfe\ei folose]te moduri grafice de
rezolu\ie @nalt[ ( 640X480 , 800X600 , 1024X768 ,
1280X1024 , 1600X1200 );
a ap[rut ca o reac\ie la di ficultatea de @nv[\are a
comenzilor din interfa\a linie de comand[.
Exemple de astfel de interfe\e: Windows , interfa\a grafic[ din
Linux .
Interfa\a grafic[
La început, at`t UNIX –ul c`t ]i Linux –ul au fost concepute
doar cu o interfa\[ în mod text, ba zat[ pe c`teva sute de comenzi.
Interfa\a era foarte greoaie, pentru a folosi sistemul utilizatorul fiind
obligat s[ cunoasc[ ]i s[ st[p`neasc[ foarte bine comenzile, lucru ce f[cea practic imposibil[ folosirea sistemelor de tip UNIX/Linux pe
calculatoare destinate uzului personal ]i pentru afaceri.
Pentru a putea extinde folosirea acestor sisteme ]i pe astfel de
calculatoare, a fost necesar[ crearea unui sistem care s[ fac[ leg[tura dintre interfa\a greoaie a sistemelor UNIX/Linux ]i utilizatori. A]a a
ap[rut X Window System (cunoscut ca X11 sau ca X).
Acesta ofer[ un cadru de lucru de baz[ ( framework ) ]i un set
de instrumente pentru dezvo ltarea de interfe\e grafice ( GUI) @n Unix ,
sisteme de operare derivate din Unix ]i OpenVMS .
Arhitectura X Window System
X Window Sytem are o arhitectur[ de tip client-server bazat[ pe
urm[toarele componente:
– un server X ce comunic[ cu mai multe programe client, acesta
accept`nd cereri grafice de ie]ire ( output ) ]i trimi\`nd @napoi c[tre
clien\ii X intrarea (input ) de la utilizator (preluat[ de la tastatur[,
mouse, etc.). Serverul X rulez[ pe calculatorul care interac\ioneaz[ cu
utilizatorul ]i trimite intrarea primit[ de la acesta c[tre clien\i. De asemenea, serverul X trimite pe ecran c[tre utilizator informa\iile primite
de la clien\i. Clientul ]i serverul se pot afla pe calculatoare diferite.
X.Org ]i XFree96 sunt cele mai des @nt`lnite implement[ri ale
serverului X.
37- clien\ii X ce se conecteaz[ la un server X pentru a se folosi de
resursele administrare de acesta. Clien\ii pot rula local (pe acela]i
calculator cu serverul) sau pot rula pe un alt calculator aflat la distan\[.
– protocolul X este protocolul utilizat @n comunica\ia dintre clien\i
]i server.
X Window Sytem nu con\ine nici o specifica\ie legat[ de
Application User Interface (de exemplu, felul @n care arat[
butoanele, meniurile, ferestrele, etc.). Aceste specifica\ii sunt f[cute @n
schimb de c[tre alte componente, ]i anume:
– window manager – este un tip special de client X ce
controleaz[ felul @n care arat[ ceilal\i clien\i X. El face ca to\i ceilal\i
clien\i s[ aib[ caracteristici comune, control`nd amplasarea ]i felul @n
care arat[ ferestrele aplica\iilor ]i rea liz`nd interfa\a grafic[ propriu-zis[.
Un window manager poate crea o interfa\[ asem[natoare cu cea din
Microsoft Windows sau cu cea din Mac OS X. Exist[ multe astfel de
window manager -e15, comerciale sau gratuite, prezente sub forma unor
aplica\ii de sine st[t[toare. Fiecare ofer[ o interfa\[ specific[ (aspectul ferestrelor ]i al componentelor grafice), introduc`nd facilit[\i proprii.
– desktop environment (sau application -specific
GUI) – include un window manager , mai multe aplica\ii ]i o interfa\[
consistent[. GNOME ]i KDE sunt dou[ exemple de desktop
environment .
– display manager – este un tip special de client X care se
ocup[ de autentificarea utilizatorilor. El permite pornirea unei sesiuni pe un server X de pe acela]i calculator sau de pe unul aflat la distan\[
(remote ), afi]`ndu-i utilizatorului un ecran de login ]i permi\`ndu-i
acestuia s[ introduc[ un nume de utilizator ]i o parol[. Dup[ ce
autentificarea s-a realizat cu succes o noua sesiune este lansat[. Exemple de display managere sunt: kdm, gdm, xdm.
#n ceea ce prive]te interfa\a cu utilizatorul, trebuie precizat c[
toate versiunile de Unix moderne ofer[ at`t interfe\e grafice c`t ]i
interfe\e @n linie de comand[. #n plus , acestea sunt foarte bine integrate
una cu cealalt[ ]i, @n toate sistemele Unix , interfa\a grafic[ poate fi
aleas[ de c[tre utilizator dintr-o ofer t[ bogat[, @n func\ie de preferin\ele
sale.
15 De exemplu, window manager -ul din KDE se nume]te Kwin , iar cel
din GNOME se nume]te Metacity .
38Instalarea, pornirea ]i oprirea interfe\ei grafice
#n cazul @n care interfa\a grafic[ nu este instalat[, instalarea
pachetelor necesare se face cu comanda:
apt-get install xserver-xorg x-window-
system x-window-system-core
#n cazul @n care interfa\a grafic[ nu porne]te o dat[ cu sistemul de
operare, ea poate fi pornit[ separat. Acest lucru se poate realiza folosind
una dintre urm[toarele posibilit[\i:
1. xinit – este un program care porne]te serverul X ]i un prim
client care se conecteaz[ la el. Atunci c`nd primul client @]i
@ncheie activitatea, xinit va opri serverul X.
2. startx – este un front-end pentru xinit care ofer[
utilizatorului o interfa\[ mai complex[. Adesea el ruleaz[
f[r[ a fi nevoie de alte ar gumente @n linia de comand[.
3. pornind un display manager – atunci c`nd un
display manager este pornit pe calculatorul local, el va
porni mai @nt`i un server X, urm`nd ca apoi s[ prezinte
utilizatorului un ecran de login . Pornirea unui display
manager se poate face, cu comanda start , @n felul
urm[tor:
/etc/init.d/kdm start (pentru kdm)
/etc/init.d/gdm start (pentru gdm)
Pentru a opri interfa\a grafic[ este suficient[ oprirea display
manager -ului, cu ajutorul uneia din comenzile:
kill -9 *dm
sau
/etc/init/d/*dm stop
Repornirea interfe\ei grafice se face prin repornirea display
manager -ului:
/etc/init.d/*dm restart
De asemenea, restartarea serverului X se poate realiza ]i prin
tastarea combina\iei de taste: <Ctrl+Alt+Backspace> .
Configurarea serverului X
Configurarea serverului X se realizeaz[ printr-un fi]ier text.
Pentru X.Org acest fi]ier este /etc/X11/xorg.conf , iar pentru
XFree86 fi]ierul este /etc/X11/XF86Config . Cele dou[ fi]iere au
39o structur[ asem[n[toare, fiind organizat e @n sec\iuni, ce se pot @mp[r\i la
r`ndul lor @n subsec\iuni. Un exemplu de fi]ier xorg.conf este
urm[torul:
40
Se observ[ c[ principalele sec\iuni ale fi]ierului de configurare
sunt: Files , Module , InputDevice (Keyboard ]i Mouse ),
Monitor , Device , Screen , ServerLayout , DRI.
Exemple de interfe\e grafice:
KDE
Mediul grafic KDE (K Desktop Environment ), dezvoltat
de organiza\ia cu acela]i nume ( http://www.kde.org ), este un
41mediu open source ajuns @n prezent la versiunea 3.2.3, disponibil
pentru Linux ]i pentru alte variante de UNIX .
KDE este @nso\it de o suit[ de aplica\ii de birou, numit[
KOffice , precum ]i de un cadru de lucru ( framework ) de dezvoltare
de aplica\ii grafice. Pentru programarea aplica\iilor KDE se folose]te Qt,
un framework general de dezvoltare de aplica\ii C++.
KDE caut[ s[ acopere nevoia unui mediu de lucru UNIX u]or de
utilizat, similar cu mediile grafice din Mac OS sau Windows 95/NT .
Instrumentele pentru atingerea a cestui scop sunt comunica\ia inter-
aplica\ii, reutilizarea componentelor, drag-and-drop generalizat,
aspect unitar ]i altele.
GNOME
Mediul grafic GNOME (GNU Network Object Modal
Environment ) este dezvoltat de organiza\ia cu acela]i nume
(http://www.gnome.org ), ]i reprezint[ o parte a proiectului GNU.
Este un mediu open source ajuns @n prezent la versiunea 2.6,
disponibil pentru Linux ]i pentru alte variante de UNIX (Solaris ,
BSD, ].a.).
Pe l`ng[ faptul c[ este un mediu grafic, GNOME este ]i o
platform[ de dezvoltare de aplica\ ii grafice, pentru programarea
aplica\iilor GNOME folosindu-se GTK+ (GIMP ToolKit ),
(http://www.gtk.org ), un toolkit multi-platform[ destinat
cre[rii de interfe\e grafice utilizator ( GUIs ). GTK+ face parte ]i el din
cadrul proiectului GNU ]i este distribuit gratuit, fiind dezvoltat dintr-un
proiect mai vechi de manipulare a imaginilor, GIMP (GNU Image
Manipulation Program ).
Principiile pe care este realizat[ interfa\a GNOME sunt
urm[toarele: un program responsabil pentru rularea ]i gestionarea
aplica\iilor, un program pentru organizarea fi]ierelor ]i a documentelor, un set de aplica\ii utilitare (agend[, po]t[ electronic[, internet, fax,
calculator, editare de text, calcul tabelar, muzic[ etc.). La acestea se
adaug[ un set de conven\ii pe baza c[rora sunt create aplica\iile pentru
GNOME , astfel înc`t ele s[ poat[ “colabora ” eficient.
42
Fig. 3.1 Interfa\a GNOME , neconfigurat[, a]a cum arat[ imediat dup[
instalare
GNOME apare în mai mult variante. Modulele principale sunt
scrise de GNU, @ns[ anumite firme (de exemplu, Ximian ) mai
adaug[interfe\ei grafice, diferite programe.
GNOME îndepline]te dou[ func\ii de baz[: rularea aplica\ilor ]i
gestionarea fi]ierelor.
Programul care se ocup[ de rularea aplica\iilor este
gnomepanel , acesta reprezent`nd efectiv panourile de comand[ ale
GNOME . Panourile sunt foarte asem[n[toare cu bara de stare din
Windows , exist`nd patru tipuri: meniu , panouri de col\ , panouri laterale
]i panouri mobile .
Panoul meniu este unic ]i are o pozi\ie fix[ în partea superioar[ a
ecranului, aici fiind plasat meniul principal al GNOME
(Applications16), echivalent cu meniul Start al Windows . De aici
se pot lansa toate programele distribuite împreun[ cu GNOME .
16 Datorit[ multitudinii de versiuni ale GNOME (configurate de diverse
firme) este posibil ca numele acestui meniu s[ fie diferit în anumite distribu\ii.
43Tot în acest panou, în partea dreapt[, se afl[ un meniu cu
aplica\iile deschise. El este reprezentat de pictograma aplica\iei active la
un moment dat. Efectu`nd un clic cu mouse-ul pe acea pictogram[, va fi
afi]at un meniu cu toate aplica\iile deschise.
Celelalte tipuri de panouri (de co l\, laterale ]i mobile) se
deosebesc doar prin locul unde pot fi amplasate, în rest func\ionalitatea
lor fiind aceea]i. Panourile pot fi mutate ]i redimensionate.
La fel ca toate celelalte interfe\e grafice, ]i GNOME suport[
conceptul de spa\ui de lucru (workspace ). Aceast[ tehnologie permite
utilizatorului s[ foloseasc[ mai multe ecrane virtuale pe un singur
monitor. A]adar, în loc s[ apar[ toat e aplica\iile deodat[ pe ecran, acestea
pot fi rulate pe diferite ecrane virtuale. Pentru a le accesa, utilizatorul
trebuie doar s[ schimbe ecranul virtual curent, ecranul care este afi]at la
un moment dat pe monitor.
Set[rile GNOME destinate configur[rii interfe\ei sunt plasate @n
meniul Applications , sec\iunea Preferences . Acestea sunt
accesibile ]i din Control Center , o fereastr[ similar[ cu Control
Panel din Microsoft Windows (figura 3.2).
Fig. 3.2 Fereastra Control Center
44Pe l`ng[ set[rile legate de aspect ]i func\ionalitate, GNOME mai
are un pachet de programe ce permit seta rea @n mod grafic a unor aplica\ii
]i periferice care \in de sistemul de operare ]i care, în mod normal, ar
trebui configurate din linia de comand[. Aceste programe se g[sesc acces`nd Applications
→System Settings →System Tools .
GNOME ofer[ o gam[ larg[ de aplica\ii ]i programe utilitare:
• Nautilus – program ce se ocup[ cu gestionarea fi]ierelor,
fiind echivalentul Windows Explorer ;
• OpenOffice – suit[ similar[ suitei Office de la
Microsoft ;
• Evolution – program de po]t[ electronic[;
• Mozilla – program de navigare pe Internet ;
• Xchat – program pentru IRC (Internet Real Chat )
reprezent`nd alternativa GNOME la mIRC ;
• Gnome Messenger – echivalentul lui Yahoo
Messenger ;
• The GIMP – program pentru editarea imaginilor.
Func\ioneaz[ pe acela]i principiu ca ]i Adobe Photoshop ;
• GQView – program pentru gestionarea imaginilor;
• Glade – desenator (creator) de interfe\e;
• XCDRoast – program pentru scrierea CD-urilor;
• xpdf – face posibil[ vizualizarea fi]ierelor în format PDF.
Este echivalentul Acrobat Reader ;
• gedit – este echivalentul Notepad -ului din Windows ;
• file-roller – este utilizat pentru arhivare, @n fapt fiind o
interfa\[ pentru diferite programe de arhivare ( gzip , bz2,
rar, zip, tar, lha, jar, era, lzh). Impune prezen\a @n
sistem a programelor de arhivare (cu interfa\[ în mod text);
• xsane – program folosit pentru scanarea imaginilor.
Exerci\ii
1. S[ se opreasc[ ]i s[ se reporneasc[ serverul X folosind
metodele prezentate @n lucrare.
2. S[ se afi]eze con\inutul directorului /etc/rcN.d , unde N
este runlevel -ul default (cum se determin[ care este runlevel –
45ul default ?). Care dintre link -urile din acest director este cel care
porne]te serverul X?
3. S[ se realizeze o copie de siguran\[ a fi]ierului
/etc/X11/xorg.conf (copiindu-l @n acela]i director sub un al nume)
4. S[ se configureze fi]ierul xorg.conf astfel @nc`t s[ avem o
rezolu\ie de 800X600 la o ad`ncime de culoare de 24 bi\i.
5. S[ se modifice set[rile interfe\ei grafice astfel @nc`t s[ avem:
schema de culori pumpkin ;
fontul Courier 10 Pitch de dimensiune 10pt ;
stilul ferestrelor s[ fie Keramik ;
la Menu efect s[ fie efectul Animate ;
Taskbar -ul transparent;
Desktop -ul va avea setat ca wallpaper imaginea
Sea of Conero ;
screensaver -ul Fireworks 3D.
6. S[ se adauge o poz[ contului corespunz[tor utilizatorului logat
@n sistem.
46LUCRAREA NR. 4
Gestiunea utilizatorilor ]i grupurilor
UNIX este un sistem multiuser ]i multisesiune, utilizatorii put`nd
avea deschise mai multe sesiuni de lu cru pe un acela]i calculator sau pe
calculatoare diferite din re\ea.
Gestiunea utilizatorilor @n cauz[, precum ]i a grupurilor din care ace]tia fac parte, reprezint[ o sarcin[ important[ a administratorului de
sistem. Pentru @ndeplinirea acesteia UNIX -ul pune la dispozi\ie c`teva
instrumente ]i conven\ii care fac ca ac east[ sarcin[ s[ fie mai u]or de
realizat. Astfel, accesul la resursele unui sistem UNIX se realizeaz[, de
regul[, prin intermediul unor conturi utilizator ce sunt setate de c[tre
administatorul de sistem ulterior in stal[rii sistemului de operare. Accesul
se poate realiza ]i prin intermediu l unor conturi sistem, @ntre acestea din
urm[, cel mai important fiind cel aferent utilizatorului root
(superuser ).
Prin folosirea de conturi separate pentru fiecare utilizator, securitatea sistemului este mult ma i bine asigurat[, coresponden\a de
unu-la-unu @ntre utilizatori ]i conturi f[c`nd ca activitatea de gestionare a
acestora s[ fie mai u]oar[.
Contul utilizatorului root
Este un cont creat automat la momentul instal[rii sistemului de
operare UNIX . #n timp ce majoritatea conturilor utilizatorilor sunt setate
astfel @nc`t s[ se previn[ distrugerea accidental[ a sistemelor de fi]iere,
contul root nu prezint[ nici o restric\ie, accesul s[u la toate resursele
sistemului, fiind deplin. Din acest mo tiv, folosirea acestui cont revine
numai administratorului de sistem, fiind utilizat @n realizarea opera\iilor
de configurare ]i @ntre\inere a sistemului UNIX .
Pentru prevenirea apari\iei unor incidente nedorite datorate folosirii necorespunz[toare a acestu i cont, este indicat[ crearea unor
conturi asociate unor nume de utilizator , care s[ aib[ ca scop realizarea
anumitor sarcini de administrare a sistemului, sarcini ce nu necesit[ un
acces deplin la resursele acestuia. De exemplu, se poate seta un cont utilizator destinat efectu[rii copiilor de siguran\[ ( backup ), un altul
pentru accesul la po]ta electronic[, la Internet, etc.
47 Protec\ia contului utilizatorului root , dar ]i a celorlalte conturi
utilizator, se realizeaz[ prin asignar ea de parole. Alegerea acestora este
indicat s[ se fac[ astfel @nc`t depistarea lor de c[tre ceilal\i utilizatori ai
sistemului, s[ fie dificil[, iar schimbarea lor periodic[ se constituie @ntr-o m[sur[ de securitate obligatorie.
Nume de utilizator implicite (standard)
A]a cum am men\ionat anterior, exist[ o serie de nume de
utilizator implicite ale c[ror conturi sunt create @n timpul procesului de
instalare a sistemului de operare (@n fapt este vorba de crearea fi]ierului
/etc/passwd ). Aceste nume (descrise @n tabelul 4.1), sunt utilizate de
c[tre sistemul de operare ]i administratorul de sistem, pentru realizarea
unor scopuri speciale.
Tabelul 4.1
Nume utilizator standard
Nume
utilizator UID GID Director home Shell
root 0 0 /root /bin/bash
bin 1 1 /bin
daemon 2 2 /sbin
adm 3 4 /var/adm
lp 4 7 /var/spool/lpd
sync 5 0 /sbin /bin/sync
shutdown 6 0 /sbin /sbin/shutdown
halt 7 0 /sbin /sbin/halt
mail 8 12 /var/spool/mail
news 9 13 /var/spool/news
uucp 10 14 /var/spool/uucp
operator 11 0 /root
games 12 100 /usr/games
gopher 13 30 /usr/lib/gopher-data
ftp 14 50 /home/ftp
nobody 99 99 /
Observa\ie:
Aceste nume de utilizator ]i c onturile asociate nu trebuiesc
modificate. #n fapt, ele sunt protejate contra accesului neautorizat prin
48introducerea @n cadrul c`mpului lor de parol[ (din fi]ierul
/etc/passwd ), a unui asterisc.
Fi]ierul /etc/passwd
Toate informa\iile referitore la conturile utilizatorilor sunt
p[strate @n fi]ierul /etc/passwd . Acest fi]ier se afl[ @n proprietatea
utilizatorului root ]i are identificatorul grupului (GID) setat la zero.
Permisiunea de scriere este setat[ numai utilizatorului root , ceilal\i
utilizatori av`nd numai permisiunea de citire.
Con\inutul unui astfel de fi]ier, a]a cum apare el dup[ prima
instalare a sistemului Linux , este prezentat @n continuare:
root::0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
adm:*:3:4:adm:/var/adm: lp:*:4:7:lp:/var/spool/lpd:
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown halt:*:7:0:halt:/sbin:/sbin/halt
mail:*:8:12:mail:/var/spool/mail:
news:*:9:13:news:/usr/lib/news: uucp:*:10:14:uucp:/var/spool/uucppublic:
operator:*:11:0:operator:/root:/bin/bash
games:*:12:100:games:/usr/games: gopher:*:13:30:gopher:/usr/lib/gopher-data:
ftp:*:14:50:ftp user:/home/ftp:
nobody:*:-1:100:nobody:/dev/null:
Se observ[ c[ ini\ial fi]ierul c on\ine numele utilizator implicite,
iar ad[ugarea ulterioar[ de noi utilizator i, se va reflecta prin apari\ia de
noi linii @n cadul fi]ierului
17:
ion:ncg3wyFNjd7dM:501:501:IonTudor:/home/ion:/bin
/tcsh
stud1:hszeEDw3ioS91:502:502:MarinDan:/home/stud1:/bin/ksh
Liniile din fi]ierul /etc/passwd sunt divizate @n urm[torul
format strict:
17 Fiec[rui utilizator @i corespunde o linie.
49nume_utilizator:parola:UID:GID:comentariu:directo
r_implicit:comanda_login
Fiecare linie este alc[tuit[ din c`mpuri ce sunt separate prin
simbolul :. Dac[ @ntr-un c`mp nu este nimi c introdus, acesta va r[m`ne
gol, iar simbolul : se va p[stra pentru a asigura c[ fiecare linie con\ine
]apte c`mpuri.
Denumirea c`mpurilor (de la st`nga la dreapta pentru fiecare
linie) ]i semnifica\ia lor, este urm[toarea:
C`mp Semnifica\ie
nume_utilizator Un identificator unic pentru utilizator
parola Parola utilizatorului (criptat[)
UID Un num[r unic care identific[ utilizatorul pentru
sistemul de operare
GID Un num[r unic care id entifc[ grupul la care
apar\ine utilizatorul
comentariu Uzual, numele real al utilizatorului, sau o alt[
informa\ie referitoare la acesta
director_implicit Directorul @n care utilizator ii sunt plasa\i c`nd se
conecteaz[ la sistem (director home )
comanda login Comanda executat[ c`nd utilizatorul se conecteaz[,
@n mod normal un shell
Descrierea detaliat[ a c`mpurilor respective este prezentat[ @n
continuare.
nume_utilizator
Este un c`mp ce con\ine un ]ir fo rmat din opt caractere sau mai
pu\in, ce identific[ @n mod unic fiecare utilizator. #n specificarea numelui
se pot folosi, pe l`ng[ litere, ]i linia de subliniere, numerele, virgula ]i
anumite caractere speciale. Deoarece cele mai multe comenzi UNIX sunt
scrise cu litere mici, conven\ia este ca numele de utilizator s[ fie ]i el
scris tot cu litere mici.
parola
#n acest c`mp sistemul stocheaz[ parola criptat[ a utilizatorului.
Informa\ia respectiv[ este fo arte sensibil[ la modific[ri
necorespunz[toare, acestea put`nd cond uce la blocarea contului utilizator
c[ruia @i este asociat[. Parola poate fi modificat[ numai de c[tre
50administratorul de sistem (care s-a conectat cu numele de utilizator
root ), sau de c[tre utilizatorul @nsu]i. Comanda folosit[ @n acest scop
este passwd .
Observa\ie:
Anumite versiuni de UNIX , datorit[ unor probleme poten\iale de
securitate, nu stocheaz[ parolele utilizatorilor @n fi]ierul /etc/passwd .
La momentul conect[rii unui utilizat or la sistem, parola introdus[
de acesta se compar[ @n mod logic cu un bloc de zero-uri, iar rezultatul
este comparat cu intrarea corespunz[toare din fi]ierul de parole.
Utilizatorului @i este permis accesul numai dac[ cele dou[ informa\ii se
potrivesc.
C`mpul de parol[ este folosit pe ntru restric\ionarea accesului la
sistem. Astfel, dac[ se dore]te ca un cont s[ nu poat[ fi folosit pentru accesarea sistemului, se plaseaz[ @n c`mpul de parol[ corespunz[tor lui,
un asterisc. #n exemplul prezentat anterior, se poate observa c[ multe
conturi de utilizator standard au un asterisc @n c`mpul de parol[, lucru ce
efectiv blocheaz[ accesul. #n situa\ia @n care acest c`mp nu con\ine nimic (este gol), la
contul respectiv se permite un acces nerestrictiv. Prin urmare, oricine
poate folosi numele de utilizator resp ectiv pentru a i se acorda accesul
imediat, f[r[ a i se solicita introducerea unei parole.
Observa\ie:
Nu se va completa c`mpul de parol[ cu o parol[ (edit`ndu-
se fi]ierul /etc/passwd ) deoarece @n acest fel, nu este posibil[
recrearea parolei criptate, iar contul utilizatorului respectiv se va bloca.
UID
Fiecare nume de utilizator are asociat un identificator unic ( UID).
Acesta este folosit de c[tre sistemul de operare UNIX pentru a identifica
anumite informa\ii ce sunt asociate cu utilizatorul. Folosirea UID @n locul
numelui utilizatorului este preferabil[, deoarece cu numerele se lucreaz[
51mai u]or dec`t cu caracterele, ]i @n plus ocup[ ]i mai pu\in spa\iu18.
Numerele UID sunt @n general asignate @ntr-un domeniu specific.
Cele mai multe sisteme UNIX , de exemplu, aloc[ numerele de la 0 la 99
pentru conturile utilizator standard, ]i numere UID de la 100 @n sus
pentru ceilal\i utilizatori. #n exemplul anterior, se poate observa c[
utilizatorul root are un UID egal cu 0, iar conturile utilizatorilor
standard au numere UID @n plaja 0 la 99. Contul utilizatorului nobody
este unul special folosit de c[tre sistemul de fi]iere NFS (Network
File System ) ]i posed[ un UID egal cu -1, un num[r invalid.
Asignarea numerelor UID pentru utilizatorii obi]nui\i ai sistemului, este
bine s[ se fac[ secven\ial.
GID
Identificatorul grupului, GID, este un num[r folosit pentru a
p[stra urma grupului la care utilizatorii apar\in c`nd ei se conecteaz[ la
sistem (grup de startup ). Numerele GID se situeaz[ @ntr-un domeniu
ce @ncepe cu 0 ].am.d., num[rul GID 100 fiind asignat grupului users
ce con\ine to\i utilizatorii neprivilegia\i ai sistemului.
comentariu
Acest c`mp este folosit de c[tre administratorul de sistem pentru
ad[ugarea oric[rei informa\ii pe car e acesta o consider[ necesar[ @n
identificarea utilizatorului. Tipic, aceast[ zon[ este folosit[ pentru a
introduce numele complet al utilizatorului, cu toate c[ anumi\i
administratori de sisteme prefer[ s[ adauge alte informa\ii (de exemplu
numele departamentului unde lucrea z[ utilizatorul, sau num[rul de
telefon al acestuia). C`mpul re spectiv mai este numit uneori ]i GECOS ,
dup[ denumirea primului sistem de operare care l-a folosit.
Anumite comenzi ale sistemului de operare pot s[ foloseasc[
acest c`mp pentru a afi]a diverse informa\ii despre utilizatori, prin
urmare con\inutul s[ u poate fi alterat.
directorul_implicit (home directory
)
Acest c`mp specific[ directorul @n care va fi comutat utilizatorul
18 De exemplu, sistemul de operare Linux p[streaz[ urma tuturor
proceselor lansate @n execu\ie de c[tre utilizator, folosind UID ]i nu numele
acestuia.
52dup[ ce acesta s-a conectat la sistem (d irectorul curent). Fiecare utilizator
din sistem trebuie s[ aib[ dedicat un director implicit propriu19, variabila
de mediu HOME din cadrul fi]ierelor de startup fiind ini\ializat[ cu
aceast[ valoare. Directoarele implicite ale utilizatorilor sunt localizate @ntr-un director comun, numit /home , ce este creat la momentul instal[rii
sistemului Linux . Calea aferent[ directoarele implicite g[site aici este
de forma: /home/nume_utilizator .
Alte versiuni de UNIX folosesc ca directoare implicite
directoarele /usr sau /u .
comanda_login
Reprezint[ comanda ce va fi executat[ c`nd procedura de
conectare se termin[. #n cele mai multe cazuri se lanseaz[ @n execu\ie o comand[ shell , cum este csh sau bsh, pentru a furniza utilizatorului
un interpretor de comenzi ( C Shell , respectiv Bourne Shell ).
Dac[ c`mpul este l[sat gol, si stemul de operare lanseaz[ ca
implicit shell -ul Bourne . Schimbarea shell -ului ce va fi lansat
poate fi realizat[ cu ajutorul comenzilor chsh sau passwd –s.
Indiferent de comanda ce este folosit[ , verificarea faptului c[ aceasta este
permis[ se face prin c[utarea ei @n fi]ierul /etc/shells . Numai
comenzile care se afl[ @n acest fi]ier sunt permise ca ]i intr[ri valide.
Dac[ sistemul folose]te fi]ierul /etc/shells , trebuie verificat ca
permisiunile de acces asupra sa ]i proprietarul s[ fie acelea]i ca ale fi]ierului /etc/passwd , altfel un utilizator @]i va putea modifica
comanda_login .
Ad[ugarea de utilizatori
Exist[ dou[ modalit[\i @n care se pot ad[uga utilizatori la sistem.
O prim[ modalitate este manual, prin editarea fi]ierului /etc/passwd ,
iar o a doua, folosind un fi]ier script care la momentul execu\iei
solicit[ detaliile noului utilizator ]i sc rie o nou[ linie @n cadrul fi]ierului
/etc/passwd . Modificarea fi]ierului @n cauz[ se poate face numai
dac[ suntem conecta\i ca ]i root .
#nainte de a efectua orice modificare asupra fi]ierului respectiv se recomand[ realizarea unei copii de siguran\[ a acestuia (pe dischet[).
1199 #n cadrul sistemului Linux , acesta poart[ chiar numele utilizatorului.
53 Pentru a ad[uga o nou[ intrare @n fi]ierul /etc/passwd , se va
utiliza un editor de texte care salveaz[ informa\ia @n format ASCII . Se
vor ad[uga noii utilizatori la sf`r] itul fi]ierului, folosind o linie nou[
pentru fiecare utilizator. Se va verifica faptul c[ pentru fiecare utilizator s-au folosit nume ]i UID unice.
Exemplu:
mihai::103:100:Mihai Ionescu:/home/mihai:/bin/sh
C`mpul aferent parolei este l[sat gol, deoarece la acest moment
nu se poate introduce @n el o parol[ criptat[. Dup[ salvarea modific[rilor
efectuate asupra fi]ierului /etc/passwd , se va stabili o parol[ pentru
acest contul nou creat tast`nd comanda:
passwd nume_utilizator
Aceast[ comand[ va solicita introducerea unei parole ini\iale. Se
va comunica parola utilizatorului iar acesta o va schimba prima dat[ c`nd
se va conecta (@n acest fel nici admi nistratorul de sistem nu va cunoa]te
parola respectiv[).
Dup[ ad[ugarea liniei necesare la fi]ierul /etc/passwd , se va
crea directorul implicit al utilizatorului. Odat[ acesta creat, utilizatorul va fi declarat ca proprietar al director ului respectiv. |in`nd cont de exmplul
anterior se vor introduce comenzile urm[toare:
mkdir /home/mihai
chown mihai /home/mihai
To\i utilizatorii trebuie s[ apar\in[ unui grup. Dac[ sistemul are
un singur grup definit, atunci se va ad[uga numele utilizatorului @n linia
din cadrul fi]ierului /etc/group care reprezint[ acel grup. Dac[ noul
utilizator trebui s[ apa\in[ mai multor grupuri, se va ad[uga numele utilizatorului @n fiecare grup din cadrul fi]ierului /etc/group . #n final,
fi]ierele de configurare pentru shell -urile utilizatorilor vor trebui s[ fie
copiate @n directorul lor implicit ]i setate pentru a le permite accesul pentru personalizare. De exemplu, dac[ se copiaz[ fi]ierul de configurare
aferent shell -ului Bourne (.profile ) de la un alt utilizator numit
ion, va trebui s[ se tast eze comanda urm[toare:
cp /home/ion/.profile /home/mihai/.profile
chown mihai /home/mihai/.profile
Se va verifica fi]ierul de configurare cu ajutorul unui editor de
texte, asigur`ndu-se c[ nu exist[ va riabile de mediu care s[ fie setate
incorect.
54 Pentru a preveni ca doi utilizatori diferi\i s[ editeze fi]ierul
/etc/passwd @n acela]i timp, se va folosi comanda vipw . Aceasta
invoc[ editorul vi (sau orice alt editor sistem implicit care a fost setat) ]i
editeaz[ o copie temporar[ a fi]ierului /etc/passwd . Utilizarea unui
fi]ier temporar ac\ioneaz[ ca un mecanism de blocare. C`nd fi]ierul este
salvat, vipw efectueaz[ o verificare simpl[ a consisten\ei fi]ierului
modificat, ]i dac[ acesta este @n regul[, se face actualizarea fi]ierului /etc/passwd .
Fi]ierele script , pentru Linux , au @n general denumirile
useradd ]i adduser . C`nd sunt executate, se va solicita introducerea
de informa\ii ce sunt necesare pentru completarea fi]ierului
/etc/passwd . Va fi solicitat[ de asemenea o parol[ ini\ial[. Un
avantaj al utiliz[rii acestor script -uri, este acela c[ ele efectueaz[ o
copie a tuturor fi]ierelor de configurare pentru shell -urile suportate,
automat, iar @n anumite cazuri efectueaz[ ]i modific[rile necesare asupra
variabilelor de mediu.
}tergerea de utilizatori
Ca ]i @n cazul ad[ug[rii de noi utilizatori, ]tergerea acestora poate
fi efectuat[ manual sau cu ajutorul unui fi]ier script . Fi]ierele
script sunt deluser ]i userdel ]i vor solicita introducerea
numelui utilizatorului ce se dore]te a fi ]ters, iar apoi intrarea aferent[ lui
din cadrul fi]ierului /etc/passwd este eliminat[. Dac[ se folose]te
varianta de ]tergere manual[ a utilizatorilor, vor trebui s[ se elimine
intr[rile aferente acestora din cadrul fi]ierului /etc/passwd . Apoi se
pot ]terge complet fi]ierele ]i directorul lor implicit cu ajutorul comenzii:
rm -r -f /home/nume_utilizator
unde /home/nume_utilizator reprezint[ numele c[ii complete a
directorului implicit al utilizatorului.
Apoi se va ]terge fi]ierul spool
al utilizatorului, care este
localizat @n directorul /usr/spool/mail/nume_utilizator . De
exemplu pentru a elimina fi]ierul de po]t[ electronic[ al utilizatorului
vasile se va tasta comada:
rm /usr/spool/mail/vasile
Pentru a completa aceast[ ]tergere, se va verifica dac[ utilizatorul
nu are intr[ri @n cadrul fi]ierului / etc/aliases . Pentru a efectua orice
modific[ri @n acest fi]ier, trebuie executat[ comanda newaliases . #n
55final se vor ]terge orice job-uri cron sau at (se poate afi]a fi]ierul
crontab al utilizatorului folosind comanda crontab ).
Orice ]tegere a unui utilizator se poate efectua numai dac[
suntem conecta\i ca ]i root .
Observa\ii :
#n cazul @n care se dore]te invalidarea temporar[ a unui cont
utilizator se va plasa un asterisc ca prim caracter al parolei criptate. Nu se
va altera nici un caracter al parolei existente, ci numai se va ad[uga un
asterisc @n fa\a acesteia. C`nd se dore]te reactivarea contului se va
elimina asteriscul introdus anetrior.
Pe l`ng[ cele dou[ modalit[\i, prezentate, de ad[ugare/]tergere a utilizatorilor, @n cadrul sistemului Linux se poate folosi ]i utilitarul
linuxconf .
Din cauza unor poten\iale probleme de securitate, anumite
versiuni de UNIX nu p[streaz[ parolele @n fi]ierul /etc/passwd . Dac[
@n c`mpul de parol[ din cadrul tuturor liniilor ce compun acest fi]ier,
@nt`lnim caracterul x, atunci pentru stocarea parolelor este folosit un alt
fi]ier, numit shadow password file , situat @n directorul
/etc/shadow , ]i care poate fi citit numai de c[tre utilizatorul root .
Grupuri
Fiecare utilizator al unui sistem UNIX apar\ine unui grup. Un
grup este o colec\ie de utilizatori realizat[ @n virtutea faptului c[ membrii
ei au o caracteristic[ comun[ (de ex emplu, pot s[ lucreze to\i @n cadrul
aceluia]i departament, pot avea acces la un set de programe particular, pot avea acces la un dispozitiv special cum este un scanner sau o
imprimant[ laser, etc.) #n general utilizatorii ce apar\in unui grup, au
acelea]i permisiuni de acces asupra unor fi]iere ]i directoare particulare. Utilizatorii pot apar\ine mai multor grupuri, dar la un moment dat, un utilizator poate fi membru numai al unui grup (grup primar).
Aceasta deoarece la orice moment de timp, este permis un GID per
utilizator. Datorit[ faptului c[ grupurile pot avea setul lor de permisiuni de
acces asupra unor fi]iere ]i directoare, apartenen\a sau nu a unui utilizator
la un grup anume, poate determina sau re stric\iona accesul la fi]ierele ]i
directoarele respective.
56 Grupuri implicite (standard)
#n urma procesului de instalare a sistemului de operare UNIX
sunt create mai multe grupuri implicite (stanadard) (@n fapt este vorba de
crearea fi]ierului /etc/group ).
Apartenen\a la aceste grupuri (reprezentate @n tabelul 4.2) este restric\ionat[ pentru utilizator ii obi]nui\i deoarece aceasta implic[
ob\inerea unor permisiuni de acces care sunt acelea]i cu cele ale
utilizatorului root . Ca urmare membri acestor grupuri sunt reprezenta\i
de utilizatorii implici\i ai sistemului.
Tabelul 4.2
Grupuri standard
Nume grup GID Membri
root 0 root
bin 1 root,bin,daemon
daemon 2 root,bin,daemon
sys 3 root,bin,adm
adm 4 root,adm,daemon
tty 5
disk 6 root
lp 7 daemon,lp
mem 8
kmem 9
wheel 10 root
mail 12 mail
news 13 news
uucp 14 uucp
man 15
games 20
gopher 30
dip 40
ftp 50
nobody 99
users 100
floppy 19
Informa\ia referitoare la grupuri este stocat[ @n fi]ierul
/etc/group , care este similar @n format cu fi]ierul /etc/passwd .
Un exemplu de fi]ier /etc/group implicit, de pe un sistem
Linux pentru prima oar[ instalat, este urm[torul:
57root::0:root
bin::1:root,bin,daemon daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:
disk::6:root,adm
lp::7:lp mem::8:
kmem::9:
wheel::10:root floppy::11:root
mail::12:mail
news::13:news uucp::14:uucp
man::15:man
users::100:games nogroup::-1:
Fiecare grup are o linie proprie @n cadrul acestui fi]ier, iar fiecare
linie este compus[ din patru c`mpuri ce sunt separate prin simbolul :.
Dou[ simboluri : imediat al[turate semnific[ faptul c[ nu a fost
specificat[ o valoare anume pentru c`mpul respectiv (c`mpul este gol).
Formatul aferent fiec[rei linii din cadrul fi]ierului /etc/group
este urm[torul: nume_grup:parola_grup:GID:utilizatori
unde:
nume_grup
Este un c`mp ce con\ine un nume unic alc[tuit, @n general, din
opt caractere sau mai pu\in (se folosesc de regul[ numai caractere
alfanumerice) ]i care specifi c[ numele grupului respectiv.
parola
Acest c`mp, de regul[, fie este liber, fie con\ine un asterisc. El
poate con\ine totu]i ]i o parol[, pe care utilizatorul trebuie s[ o introduc[
dac[ dore]te s[ se asocieze grupului. De]i nu toate versiunile de UNIX
folosesc c`mpul @n cauz[, el este p[strat din ra\iuni de compatibilitate cu versiunile mai vechi.
58 GID
Ca ]i @n cazul fi]ierului /etc/passwd , acest c`mp este folosit
pentru a stoca un num[r ce reprezint[ identificatorul grupului.
utilizatori
Este un c`mp ce con\ine o list[ a tuturor utilizatorilor ce apar\in
acelui grup.
Ad[ugarea unui grup
Informa\ia din fi]ierul /etc/group poate fi modificat[ fie
manual, folosind un editor ASCII , fie utiliz`ndu-se fi]ierele script
20
addgroup ]i groupadd .
Pentru a ad[uga manual un grup la fi]ierul /etc/group , mai
@nt`i se efectueaz[ o copie de siguran\[ a acestui fi]ier. Folosind un editor
ASCII se adaug[ o linie la fi]ier pent ru fiecare nou grup ce se dore]te a
fi creat. Se va avea grij[ ca sintaxa s[ fie corect[ deoarece intr[rile
incorecte nu vor permite utilizatorilor s[ devin[ membri ai grupului
respectiv. Exemplu de introducere a dou[ noi linii:
resurse::101:ion
scanner::102:mihai
Cele dou[ grupuri au GID 101 ]i 102, acestea fiind asignate (la
fel ca ]i UID) secven\ial. Utilizatorii care vor apar\ine grupurilor sunt
ad[uga\i. #n exemplul anterior, din fiecare grup face parte numai un
singur utilizator.
Nu este necesar ca grupurile s[ fie ordonate dup[ numele sau GID-ul lor. De asemenea, se pot ad[uga noi linii oriunde @n cadrul
fi]ierului /etc/group . Acesta @ns[ va trebui s[ fie verificat @n ceea ce
prive]te permisiunile de acces asupra sa precum ]i identitatea
proprietarului s[u. Astfel, permisiun ile vor trebui s[ previn[ ca nimeni,
cu excep\ia utilizatorului root , s[ nu poat[ edita fi]ierul, iar utilizatorul
respectiv s[ fie ]i proprietar al fi]ierului.
Ad[ugarea unui utilizator la noile grupuri
Utilizatorii pot s[ apar\in[ la mai multe grupuri, caz @n care
numele lor trebuie s[ se reg[seasc[ @n fi]ierul /etc/group @n liniile
20 Nu toate versiunile de UNIX posed[ aceste dou[ fi]iere script .
59grupurilor la care ei apar\in. Fiecare nume de utilizator dintr-o astfel de
linie, este separat de alte nume de ut ilizator, din cadrul aceleia]i linii,
printr-o virgul[. Teoretic nu exis t[ o limit[ asupra num[rului de
utilizatori care pot s[ apar\in[ unui grup, dar @n practic[, lungimea liniei din sistemul UNIX (255 de caractere) nu poate fi dep[]it[.
#n exemplul urm[tor de fi]ier /etc/group sunt specificate
c`teva grupuri cu utilizatori multipli:
student::52:ion,mihai,vasile,george
programe::53:dana,valeriu,george,alina,root
resurse::54:ion,dana,root
scanner::55:mihai,george
Numele utilizatorilor din cadrul fiec[rei linii nu trebuie s[ fie
@ntr-o ordine prestabilt[. A]a cum am men\ionat anterior, un utilizator, la momentul c`nd
se conecteaz[ la sistem, poate fi me mbru (apar\ine) numai al unui singur
grup. Acest grup de @nceput ( starting group ), este dat de c`mpul
GID din cadrul fi]ierului /etc/passwd . Comutarea @ntre grupurile ale
c[rui membru este utilizatorul se poate face utiliz`nd comanda newgrp .
#n cazul @n care se dore]te schimbarea grupului la care apar\ine un fi]ier se va folosi comanda chgrp .
Grupul trebuie s[ fie unul dintre grupurile la care apar\ine ]i
proprietarul
21 fi]ierului. De exemplu, s[ presupunem c[ utilizatorul
user1 este proprietarul fi]ierului test , ]i grupul c[ruia @i apar\ine
fi]ierul se nume]te student . Presupunem de asemenea c[ fi]ierul test
apar\ine grupurilor ise ]i econ (utilizatorul user1 este membru al
acestor grupuri). Pentru a schimba pr oprietatea asupra fi]ierului de la
grupul student la grupul econ , se va tasta comanda:
chgrp econ test
}tergerea unui grup
Dac[ se decide ]tergerea unui grup, atunci linia corespunz[toare
acestuia din cadrul fi]ierului /etc/group va trebui eliminat[. Va trebui
de asemenea s[ se verifice @n fi]ierul /etc/passwd pentru a se observa
dac[ exist[ vreun utilizator care are acel grup ca grup de startup , ]i
dac[ da, s[ @i fie atribuit un alt grup de startup , dintre cele la care
21 Grupul trebuie s[ fie sau grupul primar, sau unul dintre grupurile
secundare ale proprietarului.
60utilizatorul este membru. Dac[ ac east[ opera\ie nu este efectuat[,
utilizatorii @n cauz[ nu vor fi capabili s[ se conecteze deoarece ei nu
posed[ o afiliere la un grup, valid[. De asemenea va trebui efectuat[
verificarea @ntregului sitem de fi]iere pentru a c[uta fi]ierele ]i directoarele ce se afl[ @n proprietatea acelui grup, ]i s[ se schimbe
proprietatea acestora @n favoarea a ltui grup. Acest lucru va preveni
imposibilitatea de a accesa fi]ierele sau directoarele respective. Pentru efectuarea efectiv[ a ]tergerii liniilor din cadrul fi]ierului /etc/group se pot utili za dou[ fi]iere script numite delgroup ]i
groupdel .
Exerci\ii
1. S[ se vizualizeze continutul fi]ierului /etc/passwd ]i s[ se
interpreteze informa\ia afi]at[. #n ce condi\ii se poate modifica con\inutul
acestui fi]ier?
2. S[ se modifice setarea ce determin[ care este interpretorul de
comenzi (shell -ul) ce se va lansa automat @n execu\ie la @nc[rcarea
sistemului de operare, astfel @nc`t acesta s[ fie tcsh .
3. S[ se vizualizeze con\inutul fi]ierului /etc/group ]i s[ se
interpreteze informatia afi]at[. #n ce condi\ii se poate modifica con\inutul
acestui fi]ier?
4. S[ se adauge un nou utilizator @n sistem. 5. S[ se determine care sunt grupurile la care apar\ine utilizatorul
student .
6. S[ se adauge un nou grup @n sistem. 7. Grupului c[ruia @i apar\ine utilizatorul stud1 s[ i se mai
adauge un utilizator.
61LUCRAREA NR. 5
Permisiunile de acces asupra fi]ierelor ]i directoarelor
Sistemul de operare UNIX este un sistem multiuser, iar
permisiunile de acces asupra fi]ierel or ]i directoarelor reprezint[ una
dintre facilit[\ile de securitate ale ac estui sistem. #n fapt, este vorba de o
modalitate prin care sistemul protejeaz[ fi]ierele ]i directoarele @mpotriva oric[rui acces neautorizat, inten\ionat sau accidental.
Toate fi]ierele ]i directoarele UNIX au permisiuni de acces ]i
proprietari.
La momentul cre[rii unui fi]ier sau director, utilizatorul ce le-a
creat devine @n mod automat proprietarul acestora ( owner ). Aceasta
@nseamn[ c[ el are privilegiul de a schimba permisiunile (specific[ cine ]i
ce permisiuni are) sau poate schimba proprietarul fi]ierului (directorului)
22.
Schimbarea permisiunilor de acces sau a proprietarului are drept
scop furnizarea unui acces mai complet asupra fi]ierelor ]i directoarelor.
Schimbarea proprietarului unui fi]ier sau director se face cu
comanda:
chown proprietar_nou nume_fisier
Utilizatorii (dar ]i fi]ierele ]i directoarele) apar\in grupurilor.
Grupurile reprezint[ o modalitate convenabil[ de a furniza autoriz[ri de
acces mai multor utilizatori, dar nu oric[rui utilizator din sistem. La momentul cre[rii unui utilizator, grupul implicit al acestuia este cel ce @i
poart[ numele ]i care este creat odat[ cu utilizatorul.
Comanda prin care se poate schimba grupul c[ruia @i apar\ine un fi]ier (director) este:
chgrp grup_nou nume_fisier
Proprietarul fi]ierului trebuie s[ fie membru al noului grup
(grup_nou ).
22 Utilizatorul root are permisiunea de a citi, scrie, ]i executa orice fi]ier
din sistem, indifere nt cine este prop rietarul acestora.
62 Observa\ie:
Grupul users este cel ce con\ine to\i utilizatorii neprivilegia\i ai
sistemului.
Permisiunile de acces asupra fi]ierelor (directoarelor) acceptate
de UNIX sunt:
• permisiunea de citire ( r) – permite vizualizarea (citirea)
con\inutului unui fi]ier. #n cazul unui director permite
afi]area con\inutul acestuia (utiliz`nd, de exemplu, comanda ls).
• permisiunea de scriere ( w) – permite modificarea, ]tergerea ]i
redenumirea unui fi]ier. #n cazul unui director existen\a
acestei permisuni permite actualizarea, ]tergerea ]i redenumirea directorului.
• permisiunea de execu\ie ( x) – permite executarea fi]ierului
prin tastarea numelui acestuia . Pentru directoare permite
accesul (comutarea) @n directorul respectiv, ]i efectuarea de
opera\ii asupra fi]ierelor din cadrul s[u.
Observa\ii:
1. Dac[ un utilizator are permis iunea de scriere asupra unui
director ce con\ine fi]iere, permisiunile asupra fi]ierelor
respectiv sunt rescrise de permisiunile pe acel director.
2. Orice utilizator care are permisiunea de a citi un fi]ier poate
s[ copieze acel fi]ier. C`nd un fi]ier este copiat, copia se afl[
@n proprietatea utilizatorului care a efectuat copierea. Acesta poate s[ schimbe proprietarul ]i permisiunile, s[ editeze fi]ierul ].a.m.d.
3. }tegerea permisiunii de scriere asupra unui fi]ier nu permite
ca acesta s[ fie ]ters.
Pentru a vizualiza permisiun ile existente asupra unui fi]ier
(director) se folose]te comanda:
ls –l nume_fisier
De exemplu, se tasteaz[:
ls –l test.txt
Se va afi]a:
63 -rw-rw-r–1 student student 150 Dec 19
08:08 test.txt
Interpretarea informa\iei afi]ate se face astfel:
Primul caracter din ]irul afi]at indic[ tipul fi]ierului. Astfel, dac[ acest caracter este – atunci este vorba de un fi]ier normal. Dac[
caracterul este d, atunci este vorba de un direct or, iar dac[ ca racterul este
l este vorba de o leg[tur[ simboli c[ c[tre un alt program sau fi]ier din
sistem
23.
Urm[toarele nou[ caracter e din ]irul afi]at specific[, @n seturi de
c`te trei, permisiunile de acces pentru urm[toarele trei categorii diferite
de entit[\i:
• proprietarul (owner ) fi]ierului (directorului);
• grupul (group ) (utilizatorii ce apar\in aceluia]i grup ca ]i
proprietarul fi]ierului /directorului)24;
• al\ii (others ) (utilizatorii ]i grupurile altele dec`t
proprietarul ]i cei din grupul c[ruia @i apar\ine proprietarul).
Dac[ unul din caracterele ce specific[ permisiunile (r, w, x) va
ap[rea ca fiind @nlocuit prin caracterul -, atunci permisiunea respectiv[,
pentru entitatea @n cauz[, nu va fi acordat[.
Alte informa\ii afi]ate de c[tre comanda ls –l includ: numele
fi]ierului, data ]i timpul cre[rii sale, m[rimea acestuia.
Schimbarea permisiunilor de acces asupra fi]ierelor
Pentru a schimba permisiunile de acces asupra fi]ierelor se
utilizeaz[ comanda:
chmod indicator nume_fisier .
unde indicator se va @nlocui cu identitatea entit[\ii pentru care se face
schimbarea de permisiune: u utilizatorul care este proprietar al fi]ierului ( owner )
g grupul c[ruia @i apar\ine utilizatorul
o al\ii (al\ii dec`t utilizatorul ]i grupul acestuia) ( others )
a oricine (u, g ]i o) (everyone )
urmat[ de tipul ac\iunii ce se dore]te:
23 Sunt posibile ]i alte caractere. Se mnifica\ia acestora este explicat[ @n
lucrarea nr. 4.
24 Grupul din care face parte proprietarul.
64 + adaug[ o permisiune
– elimin[ o permisiune
= marcheaz[ permisiunea ca fiind singura acceptat[
]i litera (literele) aferente permisiunilor ( r, w, x).
Observa\ii:
1. #n cadrul sintaxei comenzii chmod , indicator se poate
@nlocui ]i cu un num[r format din trei cifre, a c[rui codificare
este explicat[ @n continuare.
2. At`t timp c`t suntem proprietar al unui fi]ier (director), sau
suntem conecta\i ca utilizator privilegiat ( root ), putem s[
modific[m permisiunile fi]ierului (directorului) @n orice
combina\ie pentru proprietar, grup ]i al\ii.
Exist[ dou[ modalit[\i de modificare a permisiunilor.
O prim[ modalitate este cea @n care se folosesc literele. Pentru a
specifica entit[\ile pentru care se schimb[ permisiunile, se vor tasta literele u, g, o sau a @n sintaxa comenzii chmod . Litera (literele) vor fi
urmate de unul dintre semnele +, -, sau =, pentru a ad[uga, ]terge sau
marca permisiunea ca fiind singura acce ptat[ Semnul este urmat de litera
permisiunii respective ( r, w, x).
Exemple:
Presupunem c[ permisiunile ini\iale ale fi]ierului test.txt
sunt:
-rw-rw-r–1 student student 150 Dec 19
08:08 test.txt
Conform permisiunilor afi]ate proprietarul ( student ) ]i grupul
(student ) pot citi ]i scrie @n fi]ier. Oricine alt utilizator ce nu apar\ine
grupului student poate numai s[ citeasc[ fi]ierul.
Dac[ tast[m comanda:
chmod o+rw test.txt
numai al\ii (ce nu sunt nici proprietari ]i nici nu apar\in grupului
student ) vor putea s[ citeasc[ ]i s[ scrie fi]ierul.
Deoarece utilizatorul student este proprietar al acestui fi]ier,
el va putea @ntotdeauna s[ schimbe perm isiunile pentru a rec[p[ta accesul
@n citire ]i scriere. Comanda ce se va tasta va fi:
chmod u+rw test.txt
cat test.txt
65 acesta este un test
S-a verificat ]i permisiunea @n citire cu ajutorul comenzii cat.
Pentru ]tergerea tuturor pe rmisiunilor asupra fi]ierului
test.txt pentru oricine, se va tasta comanda:
chmod a-rw test.txt
S[ vedem dac[ fi]ierul poate fi citit:
cat test.txt
cat: test.txt: Permission denied
Mesajul de eroare returnat de sistem, Permission denied ,
semnific[ faptul c[ execu\ia comenzii anterioare ( cat), nu este posibil[
datorit[ lipsei permisiunii de citire necesare.
Alte exemple de set[ri ce pot fi folosite @n cadrul comenzii chmod sunt:
g+w adaug[ permisiunea de scriere pentru grup
o-rwx ]terge toate permisiunile pentru al\ii
u+x permite proprietarului fi]ierului s[ execute fi]ierul
a+rw pemite oricui s[ citeasc[ ]i s[ scrie @n fi]ier
ug+r permite proprietarului ]i grupului s[ citeasc[ fi]ierul
g=rx permite grupului numai s[ citeasc[ ]i s[ execute fi]ierul,
f[r[ scriere
O a doua metod[ de modificare a permisiunilor asupra fi]ierelor
este cea bazat[ pe un sistem de codificare numeric[. Acesta permite specificarea permisiunilor asupra fi]i erelor sub forma unui num[r din 3
cifre octale.
Este important de a @n\elege cum lucreaz[ acest sistemul de
codificare, deoarece numerele @n cauz[ sunt folosite, at`t pentru a schimba permisiunile asupra fi]ierelor, c`t ]i de c[tre mesajele de eroare
ce implic[ permisiunile.
#n cadrul unui astfel de num[r prima cifr[ codific[ permisiunile pentru proprietar, a doua pe cele pentru grup ]i a treia pe cele pentru al\ii. Conform sistemului de codificare respectiv, seturile de c`te trei
permisiuni ( rwx) pot fi interpretate ca un num[r binar pe 3 bi\i. Astfel, o
permisiune acordat[ co respunde unei cifre de 1, iar o permisiune
neacordat[ corespunde unei cifre de 0. Prin urmare pentru setul ( r–x)
combina\ia binar[ corespondent[ va fi 101 care @n zecimal este egal[ cu:
4+0+1=5 .
66 Cifrele individuale sunt codi ficate prin @nsumarea tuturor
permisiunilor, "permise" pentru acel utilizator particular25 dup[ cum
urmeaz[:
Permisiune citire 4
Permisiune scriere 2
Permisiune execu\ie 1
Sunt posibile urm[toarele combina\ii:
0 – nici o permisiune
4 – numai citire
2 – numai scriere
1 – execu\ie
6 – citire ]i scriere
5 – citire ]i execu\ie
3 – scriere ]i execu\ie
7 – toate
Prin urmare o permisiune asupra unui fi]ier, codificat[ prin num[rul 751, @nseamn[ c[ proprietarul are permisiunile r,w,x
(4+2+1=7 ), grupul are permisiunile r ]i x (4+0+1=5 ) ]i al\ii au numai
permisiunea x (0+0+1=1 ).
Felul @n care metoda expus[ pe rmite schimbarea permisiunilor
asupra fi]ierelor se observ[ ]i din exemplele urm[toare:
ls -l test.txt
-rw-r–r–1 student student 114 Dec 7 14:31
test.txt chmod 345 test.txt ls -l test.txt
–wxr–r-x 1 student student 114 Dec 7
14:31 test.txt
ls -l test.txt
-rw-r–r–1 student student 114 Dec 7 14:31
test.txt
chmod 664 test.txt ls -l test.txt
25 Deci dintr-un set de trei.
67 -rw-rw-r-—1 student student 114 Dec 7 14:31
test.txt
Dac[ @n cadrul acestui exemplu se dore]te ca utilizatorii din
grupul student s[ nu aib[ permisiunea de scriere dar s[ o aib[ pe cea
de citire, asupra fi]ierului test.txt , va trebui eliminat[ permisiunea
respectiv[ prin sc[derea lui 2 din cel de-al doilea set de permisiuni.
Num[rul va deveni 644.
Se va tasta comanda:
chmod 644 test.txt
Pentru verificarea modific[rii se tasteaz[ comanda:
ls –l test.txt
-rw-r—r—1 student student 114 Dec 7 14:31 test.txt
Pentru a reda permisiunea de scriere grupului student asupra
fi]ierului @n cauz[, se va ad[uga valoarea 2 la cel de-al doilea set de
permisiuni.
chmod 664 test.txt
Observa\ie:
Setarea permisiunilor 666 sau 777 va permite ca orice utilizator
s[ poat[ citi ]i scrie @ntr-un fi]ier sau director. Asemenea set[ri pot
determina fraudarea fi]ierelor, ]i ca urmare nu sunt recomandate.
#n continuare sunt prezentate c`teva dintre cele mai obi]nuite
set[ri, valori numerice, precum ]i semnifica\ia lor:
-rw––- (600) – numai proprietarul are permisiunile r ]i
w
-rw-r–r– (644) – numai proprietarul are permisiunile r ]i
w; grupul ]i al\ii pot numai s[ citeasc[
-rwx–– (700) – numai proprietarul are permisiunile r w
x
-rwxr-xr-x (755) – proprietarul are permisiunile r w ]i x;
grupul ]i al\ii pot numai s[ citeasc[ ]i s[ execute
-rwx–x–x (711) – proprietarul are permisiunile r w x;
grupul ]i al\ii pot numai s[ execute
-rw-rw-rw- (666) – oricine poate s[ citeasc[ ]i s[ scrie @n
fi]ier
68 -rwxrwxrwx (777) – oricine poate s[ citeasc[, s[ scrie, s[
execute.
Schimbarea permisiunilor asupra directoarelor
Se poate realiza exact @n acela]i fel ca ]i @n cazul fi]ierelor, deci
tot cu ajutorul comenzii chmod . Orice utilizator care are permisiunea de
scriere @ntr-un director poate ]terge fi]iere din acel director, chiar dac[ utilizatorul are sau nu permisiunea de scriere asupra fi]ierului. Deoarece nu putem "executa" un director, c`nd se seteaz[ sau
]terge permisiunea de execu\ie asupra acestuia, @n fapt se seteaz[ sau se
]terge permisiunea de a c[uta @n acel director. De exemplu s[ tast[m:
chmod a-x aplicatii
pentru a ]terge permisiunea de execu\ie pentru to\i utilizatorii.
Iat[ ce se @nt`mpl[ c`nd se @ncearc[ folosirea comenzii cd @n
directorul aplicatii :
cd aplicatii
bash:aplicatii: Permission denied
S[ restaur[m permisiunea de execu \ie pentru proprietar ]i pentru
grupul acestuia:
chmod ug+x aplicatii
Acum, dac[ vom verifica cu ajutorul comenzii ls –dl se va
vedea c[ numai others au interzis accesul la directorul aplicatii .
Pentru a permite oricui de a avea acces @n citire ]i scriere asupra
directorului aplicatii se va tasta:
chmod –R a+rw aplicatii
Prin ad[ugarea indicatorului –R, se pot schimba permisiunile
pentru @ntreaga structur[ director. C`teva set[ri obi]nuite pentru directoare, sunt:
drwx–– (700) – numai proprietarul are permisiunile r,
w, x @n acest director
drwxr-xr-x (755) – oricine poate citi directorul dar
con\inutul s[u poate fi modifi cat numai de c[tre proprietar
Observa\ii:
1. Modalitatea de a ob\ine acces la un fi]ier atunci c`nd nu
avem permisiunile necesare, ]i f[r[ a ne deconecta de la
sistem, este de a utiliza comanda su. Acesta permite
69conectarea cu numele altui utilizator ce are permisiunile
necesare. Evident va trebui s[ cunoa]tem parola utilizatorului
respectiv.
2. Unele versiuni de UNIX furnizeaz[ un bit suplimentar numit
sticky bit ca parte a permisiunii asupra unui director.
Scopul acestui bit este de a permite numai proprietarului
directorului, proprietarului fi]ierului sau utilizatorului root
s[ ]tearg[ ]i s[ redenumeasc[ fi]iere.
Permisiuni implicite
Atunci c`nd un utilizator se conecteaz[ la un sistem UNIX , @i
sunt furnizate anumite permisiuni implicite. Toate fi]ierele ]i directoarele
pe care acesta le creeaz[ vor avea permisiunile definite @n umask .
Pentru a afla care sunt permisiunile definite implicit pentru un utilizator, acesta va tasta comanda:
umask
Rezultatul afi]at (masca) poate fi similar cu urm[torul:
022
umask este stocat ]i afi]at ca un num[r ce va fi sc[zut din 777.
022 @nseamn[ c[ permisiunile implicite sunt: 777-022=755
umask -ul implicit, setat de obicei pentru to\i utilizatorii de c[tre
administratorul de sistem, poate fi modificat pentru a corespunde cerin\elor particulare ale unui utilizator. Modificarea se face de c[tre
utilizator prin executarea comenzii umask cu un argument, care
reprezint[ masca pe care o dore]te . De exemplu, dac[ dore]te ca
permisiunile implicite s[ fie proprietar cu r, w, x (7); grup cu r, x (5); ]i
al\ii cu x (1), umask trebuie setat la 777-751=026 . Deci se va executa
comanda:
umask 026
#n general, comanda umask este folosit[ de c[tre administratorul
de sistem pentru a seta valoarea implic it[ a permisiunilor ce va fi asignat[
fiec[rui fi]ier creat de c[tre un utilizator.
setuid ]i setgid
Atunci c`nd un utilizator execut[ anumite programe, este posibil
s[ fie necesar ca acesta s[ @]i asum e identitatea unui utilizator sau grup
diferit.
70 Acest lucru este posibil prin setarea bitul SET USER ID
(setuid ) asupra unui fi]ier executabil, astfel @nc`t atunci c`nd fi]ierul
este executat, utilizatorul ce efectu eaz[ opera\ia respectiv[ s[ @]i asume
identitatea utilizatorului care este proprietarul fi]ierului @n cauz[. De exemplu, dac[ se execut[ un fi]ier numit testprg , care se
afl[ @n proprietatea utilizatorului user1 , pe durata execu\iei acestuia,
utilizatorul care a ini\iat aceast[ opera\ie, @]i va asuma identitatea lui user1 .
Un alt exemplu referitor la modul @n care se folose]te bitul SET
USER ID, este urm[torul.
S[ presupunem c[ se dore]te efect uarea unei copii de siguran\[ a
tuturor fi]ierelor din sistem de c[tre utilizatorul student . #n mod
normal aceast[ opera\ie este efectuat[ de c[tre utilizatorul root . Pentru
ca opera\ia s[ poat[ fie efectuat[ de c[tre utilizatorul student , se va
creea o copie a programului ce permite realizarea copiei de siguran\[, cu
bitul SET USER ID setat. Apoi utilizatorul student va putea executa
acest program ]i pe durata opera\iei de salvare @]i va asuma identitatea
utilizatorului root .
#ntr-o manier[ similar[, dac[ bitul SET GROUP ID (setgid )
al unui fi]ier executabil este setat, executarea acelui fi]ier va avea ca
efect asumarea identit[\ii grupului ce este proprietarul fi]ierului, pe durata execu\iei acestuia.
Exerci\ii
1. #n directorul de lucru curent s[ se creeze un subdirector ]i s[ se
vizualizeze permisiunile de acces, interpret`ndu-se.
2. Pentru un director creat anterior de c[tre utilizatorul stud1 , s[
se ]tearg[ permisiunea de scriere aferent[ proprietarului, ]i s[ se adauge
permisiunea de execu\ie pentru others . Pentru specificarea
permisiunilor se vor folosi literele.
3. Pentru un director creat anterior de c[tre utilizatorul studl , s[
se ]tearg[ permisiunea de execu\ie aferent[ proprietarului, ]i s[ se adauge permisiunea de scriere pentru others . Pentru specificarea permisiunilor
se va folosi codificarea numeric[.
4. S[ se determine care sunt permisiunile implicite pentru
utilizatorul stud1 .
71LUCRAREA NR. 6
Comenzi de baz[ pentru lu crul cu fi]iere ]i directoare
Comenzi pentru lucrul cu fi]iere
touch
Efectul utiliz[rii acestei comenzi este func\ie de existen\a sau nu,
a fi]ierului ce este specificat ca argument @n sintaxa ei. Astfel, dac[
fi]ierul nu exist[, utiliz`nd acest[ comand[ el va fi creat26. Dac[ fi]ierul
exist[ deja, comanda touch va modifica timpul aferent ultimei
modific[ri a acestuia.
Exemple:
Pentru a crea un fi]ier numit testfile @n directorul curent, se
va executa urm[toarea comand[:
touch testfile
Pentru a crea fi]ierul testfile @n directorul
/home/mihai/testdir , se va executa comanda:
touch /home/mihai/testdir/tetsfile
rm
Se folose]te pentru ]tergerea unui fi]ier ]i recuperarea spa\iului
pe disc ce a fost ocupat de c[tre acesta. }tergerea are caracter permanent. Pentru a putea ]terge un fi]ier dintr-un director, nu este necesar ca utilizatorul s[ aib[ permisiunile de citire sau de scriere asupra fi]ierului,
dar este necesar s[ aib[ permisiun ea de scriere asupra directorului ce
con\ine fi]ierul. #ntre indicatorii ce pot fi folosi\i cu comanda rm, se reg[sesc:
-i permite ]tergerea interactiv[ a fi]ierelor
-f permite ]tergerea fi]ierelor f[r[ ca utilizatorul s[ fie
aten\ionat prin mesaje. Chiar @n cazurile @n care fi]ierul ce se vrea a fi ]ters nu exist[, sau utilizatorul nu are permisiunea de a-l ]terge, sistemul
nu va afi]a nici un mesaj.
26 Utilizatorul va trebui s[ aib[ perm isiunea de a scrie @n directorul ce
urmeaz[ s[ con\in[ fi]ierul respectiv.
72 -r @n mod uzual comanda rm este folosit[ pentru a ]terge fi]iere,
dar prin aceast indicator ea permite ]tergerea at`t a fi]ierelor dintr-un
director, c`t ]i a directorului ]i a subdirectoarelor acestuia.
Exemplu: Dac[ se dore]te ]tergerea tuturor fi]ierelor din directorul curent,
al c[ror nume @ncepe cuv`ntul test , se va executa comanda urm[toare:
rm test*
Observa\ie:
Utilizarea @n sintaxa comenzii rm a metacaracterelor
(specificatorilor pentru nume de fi]ier global) trebuie f[cut[ cu precau\ie deoarece odat[ ce un fi]ier a fost ]ter s, el nu mai poate fi recuperat.
Pentru a preveni astfel de situa\ii este recomandat[ executarea
comenzii @n mod interactiv folosind @n acest scop @n sintaxa ei, indicatorul –i.
Dac[ nu se dore]te primirea a ni ci unui mesaj referitor la modul
@n care s-a executat comanda rm, se va folosi @n sintaxa acesteia
indicatorul –f. Uzual comanda nu va furniza nici un mesaj chiar dac[
fi]ierul nu exist[ sau numele acestuia nu a fost tastat corect. Dac[ se
execut[ comanda:
rm –f testfile
fi]ierul testfile va fi ]ters dac[ exist[, ]i nici o ac\iune nu va fi
efectuat[ @n cazul @n care el nu exist[ #n ambele situa\ii utilizatorul nu va
primi nici un mesaj de avertizare din partea sistemului.
Dac[ @n directorul curent exist[ un subdirector numit testdir ,
care la r`ndul s[u con\ine fi]ierele testfile1 ]i testfile2 , ]i se
dore]te ]tergerea acestor fi]iere precum ]i a subdirectorului ce le con\ine,
se va executa comanda urm[toare:
rm –r testdir
Comanda rm proceseaz[ @ntr-o modalitate diferit[, un fi]ier legat
hard. Exemplu:
Presupunem c[ @n directorul curent avem un fi]ier numit
testfile1 . Vom executa urm[toarea comand[ pentru a crea un fi]ier
numit testfile2 care va fi legat hard la fi]ierul testfile1 :
ln testfile1 testfile2
Vom ob\ine dou[ fi]iere identice: testfile1 ]i testfile2 .
73 Execut`nd comanda:
ls –l testfile*
va fi afi]at urm[torul rezultat:
-rw-r—r– 2 mihai student 10 Nov 3 14:28
testfile1
-rw-r—r– 2 mihai student 10 Nov 3 14:28
testfile2
Se observ[ c[ ambele fi]iere, testfile1 ]i testfile2 , arat[
num[rul de leg[turi ca fiind 2, aceasta deoarece ele sunt legate utiliz`nd
o leg[tur[ hard. Acum, dac[ ]tergem fi]ierul testfile1 utiliz`nd
comanda:
rm testfile1
vor avea loc dou[ ac\iuni: va fi ]ters fi]ierul testfile1 , ]i se va
decrementa contorul de leg[turi al fi]ierului testfile2 de la 2 la 1.
Dac[ tast[m acum comanda ls -l , vom ob\ine urm[toarele informa\ii:
-rw-r—r– 1 mihai student 10 Nov 3 15:28
testfile2
Deci num[rul de leg[turi al fi]ierului testfile2 este acum 1.
mv
Aceast[ comand[ permite redenumir ea unui fi]ier. Suplimentar,
ea permite mutarea fi]ierelor dintr-un director @n altul p[str`nd numele
ini\ial al fi]ierului, lucru ce este echivalent cu copierea fi]ierului din directorul surs[ @n directorul destina\ie ]i apoi ]tergerea fi]ierului din
directorul surs[.
#ntre indicatorii ce pot fi folosi\i cu comanda mv, se reg[sesc:
-i permite mutarea sau redenumirea fi]ierelor, interactiv
-f permite mutarea sau redenumirea fi]ierelor f[r[ a transmite
utilizatorului nici un mesaj. Folosirea acestei op\iuni va inhiba afi]area de mesaje de avertizare, chiar @n situa\ia @n care se @ncearc[ redenumirea unui fi]ier inexistent, sau utilizatorul nu are permisiunea de a redenumi
fi]ierul.
Comanda mv are dou[ argumente. Primul @l reprezint[ numele
fi]ierului sau directorului surs[, ]i al doilea @l reprezint[ numele fi]ierului
sau directorului destina\ie. Comportamentul comenzii mv (mutare sau
redenumire) depinde de faptul dac[ numele fi]ierului sau directorului
destina\ie exist[.
74 Dac[ sunt mutate fi]iere @n cadrul aceluia]i sistem de fi]iere,
toate leg[turile c[tre alte fi]iere sunt p[strate. Dar dac[ s unt mutate fi]iere
@ntre sisteme de fi]iere, leg[turile nu sunt p[strate.
Exemple: Pentru a redenumi @n directorul curent un fi]ier, se va folosi
comanda:
mv fisier_sursa fisier_destinatie
Dac[ fisier_destinatie nu exist[, va fi creat un nou
fisier_destinatie prin copierea fisier_sursa @n el, iar
fisier_sursa va fi ]ters.
Pentru a muta fisier_sursa din directorul curent @n
directorul /home/mihai/fis_destinatie , p[str`nd numele, se va
executa una dintre urm[toarele comenzi:
mv fis_sursa /home/mihai/fis_destinatie
mv fis_sursa /home/mihai/fis_destinatie/.
Dac[ fi]ierul exist[ deja @n
/home/mihai/fis_destinatie , fi]ierul existent este rescris.
Pentru a muta fis_sursa din directorul curent @n
/home/mihai/fis_destinatie cu numele de
fis_destinatie , se va executa comanda:
mv fis_sursa dir_destinatie/fis_destinatie
Dac[ nu suntem siguri c[ fi]ierul fis_destinatie exist[, se
va folosi indicatorul –i dup[ cum urmeaz[:
mv –i fis_sursa dir_destinatie/fis_destinatie
Dac[ fis_destinatie exist[, sistemul va afi]a un prompt cu
un mesaj de confirmare pentru mutarea fi]ierului.
Punctul, ca nume de fi]ier destina\ie indic[ faptul c[ numele
fi]ierului surs[ va fi p[strat. Acest lucru este util @n special c`nd se dore]te mutarea de fi]iere multiple @n alt director. Dac[ se dore]te s[ se
mute toate fi]ierele al c[ror nume @ncepe cu test @n directorul
/home/mihai/dir_tinta , se va executa comanda:
mv test* /home/mihai/dir_tinta/.
Pentru a redenumi un dir_sursa @n
/home/mihai/dir_dest , se va executa comanda:
mv /home/mihai/dir_sursa /home/mihai/dir_dest
Dac[ director_dest nu exist[, directorul
/home/mihai/dir_sursa este redenumit @n
/home/mihai/dir_dest .
75 Dac[ directorul /home/mihai/dir_dest exist[, ]i
utilizatorul nu are permisiunea de scriere @n el, toare fi]ierele ]i
subdirectoarele din /home/mihai/dir_sursa sunt mutate @n
/home/mihai/dir_dest .
cp
Este o comand[ folosit[ pentru a efectua o copie a con\inutului
unuia sau mai multor fi]iere surs[ ca fi ]iere destina\ie specificate. Dac[
fi]ierul destina\ie exist[ deja, el va fi rescris cu con\inutul fi]ierului surs[. Comportamentul comenzii cp variaz[ @n func\ie de faptul dac[ sursa ]i
destina\ia sunt fi]iere sau directoare.
#ntre indicatorii ce pot fi folosi\i cu comanda cp, se reg[sesc:
-p permite p[strarea datei ]i timpului modific[rii precum ]i
permisiunile pentru fi]ierul surs[
-i permite executarea comenzii cp @ntr-un mod interactiv
-h pentru a urma leg[turile simbolice
-r permite copierea fi]ierelor @n directoarele specificate ]i @n
subdirectoarele acestora. Trateaz[ fi ]ierele speciale (cum ar fi de
exemplu, fi]ierele legate), @n acela]i mod ca ]i pe cele normale.
Exemple: Pentru a copia fisier_sursa @n fisier_destinatie @n
cadrul directorului curent, comanda are sintaxa:
cp fisier_sursa fisier_destinatie
Dac[ se dore]te copierea fisier_sursa @n directorul
/home/ion/dir_dest p[str`nd numele fi]ierului, se va executa
urm[toarea comand[:
cp fisier_sursa /home/ion/dir_dest
Pentru a copia toate fi]ierele din /home/ion/dir_sursa @n
directorul /home/ion/dir_dest @n timp ce se vor p[stra numele
fi]ierelor, data ]i timpul ultimei modific[ri, ]i permisiunile, se va executa
comanda urm[toare:
cp –p /home/ion/dir_sursa/* /home/ion/dir_dest
Pentru a copia toate fi]ierele @ntr-un director precum ]i
subdirectoarele ]i fi]ierele @n acele subdirectoare p[str`nd data ]i timpul
ultimei modific[ri ]i permisiunile pent ru toate fi]ierele ]i subdirectoarele,
se va folosi comanda:
cp –r /home/ion/dir_sursa /home/ion/dir_dest/.
76 Dac[ nu suntem siguri c[ fi]ierul destina\ie exist[ deja, se va
folosi indicatorul –i. Ceea ce urmeaz[ este un dialog pentru copierea
fi]ierului fisier_test din directorul curent @n directorul
/home/ion/dir_test presupun`nd c[ fi]ierul fisier_test
exist[ deja @n directorul /home/ion/dir_test :
cp –i fisier_test /home/ion/dir_test/.
Rewrite /home/ion/dir_test/fisier_test? Yes
cat
Aceast[ comand[ permite concatenarea de fi]iere multiple @ntr-un
singur fi]ier. Implicit, comanda cat genereaz[ ie]iri la echipamentul de
ie]ire standard (terminalul) ]i accept[ intr[ri de la echipamentul de intrare
standard (tastatura). Comanda poate con\ine ca argumente unul sau mai
multe nume de fi]iere. Fi]ierele sunt concatenate @n ordinea @n care ele apar @n sintaxa comenzii.
#ntre indicatorii ce pot fi folosi\i cu comanda cat, se reg[sesc:
-b permite eliminarea numerelor de linie de liniile goale c`nd
este folosit @mpreun[ cu indicatorul -n
-e permite afi]area unui caracter $ la sf`r]itul fiec[rei linii, c`nd
este folosit @mpreun[ cu indicatorul –v
-n permite afi]area de linii de ie]ire precedate de numere de
linie, @n secven\[, @ncep`nd cu 1
-q permite eliminarea mesajului ce semnalizeaz[ situa\ia @n care
comanda cat nu poate g[si unul sau mai multe dintre fi]ierele de intrare
-v permite afi]area caracterelor netip[ribile din fi]ier ca ]i
caractere tip[ribile
Observa\ie:
Dac[ se utilizeaz[ operatorul de redirectare a ie]irii ( >) pentru a
redirecta ie]irea standard a comenzii cat, se va avea grij[ s[ nu se
foloseasc[ unul dintre numele de fi]i ere de intrare ca nume de fi]ier de
ie]ire. Dac[ acest lucru nu este respectat, fi]ierul de intrare va fi rescris. Unele sisteme UNIX furnizeaz[ un mesaj de eroare @n aceast[ situa\ie, dar
rescrierea fi]ierului se va face oricum.
Exemple: Tastarea simpl[ a numelui comenzii, cat, va determina intrarea
@n modul introducere. #n acest mod utilizatorul poate introduce linii
77multiple de la echipamentul de intrare standard, iar @n final va tasta
combina\ia de taste <Ctrl><d> pentru a semnaliza sf`r]itul
introducerii. Comanda cat va afi]a liniile ce au fost introduse:
cat
Acesta este linia de test 1
Acesta este linia de test 1
Acesta este linia de test 2
Acesta este linia de test 2
Ctrl d
Utilizatorul trebuie s[ fie atent la faptul c[ aceast[ comand[, @n cazul anterior, nu furnizeaz[ nici un mesaj. Dac[ se dore]te afi]area
con\inutului unui fi]ier numit testfile aflat @n directorul curent, pe
ecranul terminalului, se va executa comanda:
cat testfile
Va fi generat[ ie]irea urm[toare:
Acesta este un fisier
Continutul sau este de tip text
C`nd se vizualizeaz[ un fi]ier ma re, al c[rui con\inut va defila
umpl`nd mai multe ecrane la terminal, pentru a preveni situa\ia @n care se
vor putea vedea numai ultimele c`teva linii ale acestuia, se va folosi
comanda:
cat testfile|more
Concatenarea de fi]iere multiple, pentru afi]area pe terminal, se
va face utiliz`nd comanda:
cat testfile1 testfile2 testfile3
Este posibil ca rezultatul concaten[rii anterioare s[ se fac[ @n
cadrul unui alt fi]ier numit, de exemplu, testfile . Pentru aceasta se
va utiliza operatorul de redirectare > dup[ cum urmeaz[:
cat testfile1 testfile2 testfile3>testfile
Dac[ fi]ierul testfile exist[ deja, el va fi rescris cu fi]ierele
concatenate testfile1 , testfile2 , testfile3 . Dac[ fi]ierul
testfile exist[ deja ]i se dore]te efectuarea concaten[rii la sf`r]itul
s[u, @n loc de a utiliza operatorul de redirectare >, se va utiliza operatorul
>>, dup[ cum urmeaz[:
cat testfile1 testfile2 testfile3>>testfile
78 Dac[ se @ncearc[ concatenarea unuia sau mai multor fi]iere ]i
unul sau mai multe dintre acestea nu exist[, cat va concatena toate
fi]ierele disponibile, ]i la sf`r]itul opera\iei, va genera un mesaj referitor
la fi]ierele inexistente. #n situa\ia @n care se dore]te s[ se concateneze dou[ fi]iere,
testfile1 ]i testfile2 @n fi]ierul testfile din directorul
curent, ]i s-a tastat gre]it numele fi]ierului testfile2 ca testtile2
c`nd se execut[ comanda:
cat testfile1 testtile2>testfile
utilizatorul va primi un mesaj similar cu urm[torul, ]i testfile va
avea numai con\inutul lui testfile1 :
cat: cannot open testtile2
Inhibarea recep\ion[rii mesajelor de eroare se face folosind, @n
sintaxa comenzii, indicatorul –q. Dac[ @n directorul curent exist[ fi]ierul
testfile ce are urm[toarele linii (u ltima linie con\ine caractere
speciale), cat testfile va afi]a:
Acesta este un fisier de test
El nu contine nimic special
Acest fisier este un demo ^F^F^F^F^F
Dac[ se execut[ comanda cat cu indicatorul –n, ea va afi]a linii
cu numere de linie, dar ultima linia cu caractere speciale va fi afi]at[ ca o
linie goal[:
cat –n testfile
1 Acesta este un fisier de test
2 3 El nu contine nimic special
4
5 Acest fisier este un demo 6
Pentru a verifica faptul c[ liniile goale afi]ate anterior nu con\in
alte caractere dec`t cele netip[ribile, se va folosi @n sintaxa comenzii cat
indicatorul –v. Caracterele netip[ribile vor fi afi]ate ca ]i caractere
tip[ribile, dup[ cum urmez[:
cat –v testfile
Acesta este un fisier de test
79 El nu contine nimic special
Acest fisier este un demo ^F^F^F^F^F
file
Aceast[ comand[ este folosit[ pentru a determina tipul unui fi]ier
specificat. #n acest scop comanda cite]te fi]ierul ]i efectueaz[ o serie de
teste pentru a determina natura con\inutului acestuia. Rezultatele testelor
sunt afi]ate la echipamentul de ie]ire standard. Dac[ fi]ierul pare ca fiind un fi]ier ASCII , comanda file
examineaz[ primii 512 octe\i ai acestuia ]i @ncearc[ s[ determine limba
@n care acesta a fost scris. Dac[ fi]ierul nu pare ca fiind ASCII , comanda
efectueaz[ test[ri suplimentare pentru a distinge dac[ este vorba de un
fi]ier binar sau de un fi]ier text ce con\ine caractere extinse.
De exemplu, dac[ @n directorul curent exist[ un fi]ier numit
test ]i el con\ine un text ASCII , execut`nd comanda:
file test
va fi afi]at urm[torul rezultat:
test: commends text
Dac[ @ns[ fi]ierul respectiv este unul binar (deci fi]ier
executabil), ]i se lucreaz[ pe un calculator IBM RISC 6000 ce ruleaz[
sub verisunea de UNIX AIX V3.1 , execut`nd comanda:
file test
va fi afi]at urm[torul rezultat:
test: executable (RISC System/6000 V3.1)
Se observ[ c[ @n acest caz, este afi]at[ ]i versiunea sistemului
UNIX sub care ruleaz[ calculatorul respectiv.
Dac[ directorul curent este /dev , ce con\ine toate fi]ierele
speciale, ]i se execut[ comanda:
file hd1
pentru fi]ierul numit hd1 (ce corespunde unui disc hard pe care a fost
definit un sistem de fi]iere) se va afi]a urm[torul rezultat:
hd1: block special
rcp
Este o comand[ utilizat[ pentru a copia sau muta fi]iere situate
pe acela]i calculator ( local host ) sau pe calculatoa re diferite, la
distan\[ (remote host ).
80 Numele fi]ierului de pe calculatorul la distan\[ este precedat de
c[tre identificatorul acestui calculator (numele s[u):
nume_calculator:/nume_director/nume_fisier
Este de asemenea posibil de a specifica numele utilizatorului de
pe calculatorul la distan\[, sub forma:
nume_utilizator@nume_calculator:/nume_director/nu
me_fisier
unde nume_utilizator este op\ional. Dac[ acesta nu este specificat,
el va fi acela]i cu cel al utilizatorului de pe calculatorul local.
De asemenea, dac[ nici fi]ierul surs[ ]i nici cel destina\ie nu specific[ numele calculatorului gazd[, comanda rcp se comport[ similar
cu comanda cp.
#n cazul @n care numele fi]ierului de pe calculatorul la distan\[ nu este specificat complet, @ncep`nd cu directorul r[d[cin[, se presupune c[ numele s[u @ncepe cu directorul home al utilizatorului la distan\[.
Dac[ fi]ierele nu exist[ deja pe calculatorul la distan\[, ele sunt
create cu permisiunile implicite al e utilizatorului la distan\[. Dac[
fi]ierele exist[ deja pe calculatorul la distan\[, permisiunile fi]ierelor \int[
sunt p[strate.
Ca ]i comanda cp, comanda rcp poate fi utilizat[ numai pentru
a copia fi]iere ]i directoare @n cadrul directoarelor. C`\iva dintre indicatorii utiliza\i cu aceast[ comand[ sunt:
-p pentru a crea fi]ierul \int[ (destina\ie), p[str`nd data
modific[rii, timpul ]i permisiunile fi]ierului surs[ -r pentru a copia fi]ierele @n mod recursiv @n timp ce copiem
directoare
Observa\ie:
Pentru a putea utiliza comanda rcp @n transferul de fi]iere de
la/la un calculator la distan\[, este necesar s[ avem numele calculatorului
local definit @n fi]ierul /etc/hosts.equiv de pe calculatorul la
distan\[, sau ca numele calculatorului local ]i numele utilizatorului s[ fie definite @n fi]ierul .rhosts din directorul home al utilizatorului de pe
calculatorul la distan\[.
Exemplu: Dac[ dorim s[ copiem fi]ierul testfile din directorul curent
81@n fi]ierul testfile din directorul testdir din directorul home de
pe calculatorul la distan\[, se va executa comanda:
rcp testfile home:testdir/testfile
Dac[ numele utilizatorului pe calculatorul local este testuser ,
aceast[ comand[ va presupune c[ numele utilizatorului pe calculatorul la
distan\[ este tot testuser . Dac[ numele testuser nu exist[ pe
calculatorul la distan\[ ]i trebuie s[ utiliz[m numele utilizator newuser
pe calculatorul la distan\[, vom executa comanda:
rcp testfile newuser@home:testdir/test file
Dac[ trebuie s[ transfer[m fi]ierul testfile de pe un
calculator la distan\[ gazda_1 pe un alt calculator la distan\[,
gazda_2 , ]i dorim s[ p[str[m data modific[rii, timpul ]i permisiunea,
vom executa comanda:
rcp -p testuser1@gazda_1:testfile
testuser2@gazda_2:testfile
Ea va copia fi]ierul testfile din directorul home al
utilizatorului testuser1 de pe calculatorul la distan\[ gazda_1 @n
fi]ierul testfile din directorul home al utilizatorului testuser2 de
pe calculatorul la distan\[ gazda_2 .
Dac[ dorim s[ copiem toare fi]ierele din directorul
/u/testuser/testdir de pe calculatorul la distan\[ gazda_3 @n
directorul curent de pe calculatorul local, vom executa comanda:
rcp testuser@gazda_3:/u/testuser/testdir/*
Aceasta nu va copia nici un s ubdirector pe care @l avem @n
testdir sau orice fi]iere din acele subdi rectoare. Pentru a copia toate
subdirectoarele ]i fi]ierele @n acele subdirectoare, vom folosi comanda:
rcp -r testuser@gazda_3:/u/testuser/testdir/*
find
Atunci c`nd un utilizator lucreaz[ @n acela]i timp, la proiecte
multiple, este posibil ca acesta s[ nu @]i aminteasc[ detalii referitoare la
anumite dintre fi]ierele sale. #n acest caz, comanda find @l va ajuta s[
g[seasc[ numele unui fi]ier sau direct or, cu caracteristicile specificate.
Forma de baz[ a acestei comenzi este:
find . -print
Exist[ un num[r de argumente ce pot fi specificate @n cadrul
sintaxei comenzii find , pentru diferite atribute ale fi]ierelor ]i
directoarelor. C`teva exemple dintre acestea sunt:
82 -name nume_fi]ier – caut[ fi]iere cu numele specificat. Dac[ se
utilizeaz[ caractere pentru nume de fi]ier global ( wildcards ), atunci
nume_fi]ier trebuie introdus @ntre ghilimele. De exemplu, dac[ se
introduce ca nume_fi]ier , "test*" , vor fi c[utate toate fi]ierele al c[ror
nume @ncepe cu test . Dac[ se specific[ " test[1-2]" , vor fi c[utate
fi]ierele al c[ror nume @ncepe cu test ]i au 1 sau 2 ca ultim caracter (de
exemplu test1 ]i test2 ).
-modify data – caut[ fi]ierele care au fost modificate @n data
specificat[
-acces data – localizeaz[ fi]ierele care au fost accesate @n data
specificat[ -perm permisiuni – caut[ fi]ierele ce au setate permisiunile
specificate. Dac[ permisiunile specificate nu sunt precedate de c[tre
caracterul -, se va realiza o c[utare a fi]ierelor ale c[ror permisiuni se
potrivesc exact cu cele specificate. Dac[ se folose]te caracterul –
@naintea permisiunilor specificate, se va realiza opera\ia logic[ AND @ntre
permisiunile fi]ierelor ]i permisiun ile specificate. De exemplu, dac[ se
dore]te g[sirea fi]ierelor al c[ror proprietar are permisiunea de citire se va utiliza: -perm -400 .
-user nume_utilizator – caut[ fi]ierele al c[ror proprietar este
cel specificat -group nume_grup – caut[ fi]ierele care se afl[ @n proprietatea
grupului specificat
-size num[r – caut[ fi]ierele cu m[rimea specificat[ prin
num[r . M[rimea este specificat[ @n blocuri. Pentru a c[uta fi]iere a c[ror
m[rime este specifica t[ @n octe\i, dup[ num[r se va pune litera c.
-type tip_fi]ier – caut[ fi]ierele de un anumit tip. Tipurile ce
pot fi utilizate sunt: b – fi]ier de dispozitiv bloc
c – fi]ier de dispozitiv caracter
d – director
f
– fi]ier obi]nuit
l – leg[tur[ simbolic[
p – conduct[ cu nume ( FIFO )
s – socket
Utiliz`nd comanda find este posibil a c[uta fi]iere ]i directoare
care @ndeplinesc sau nu, condi\ii multiple. De exemplu:
83 condi\ie -a condi\ie – pentru a avea condi\ii multiple cu func\ia
logic[ AND @ntre ele
condi\ie -o condi\ie – pentru a avea condi\ii multiple cu func\ia
logic[ OR @ntre ele
! condi\ie – pentru a nega o condi\ie
Suplimentar, comanda find posed[ un grup de argumente
folosit pentru a specifica ac\iunea care trebuie @ntreprins[ asupra fi]ierelor sau directoarelor care sunt g[site. De exemplu: -print – afi]eaz[ numele fi]ierelor la ie]irea standard
-exec nume_comand[ – execut[ comanda specificat[
Observa\ie:
#ntotdeauna se va utiliza @n sintaxa comenzii find , op\iunea –
print . Dac[ aceast[ op\iune nu este utilizat[, comanda find se va
executa dar nu va genera nici o ie]ire.
ls
Comanda poate fi utilizat[ pentru afi]area de diverse informa\ii
(atribute) referitoare la unul sau ma i multe fi]iere sau directoare din
cadrul sistemului. Pentru a putea utiliza comanda ls @n cadrul unui
director, utilizatorul trebuie s[ posede permisiunea de citire asupra acestuia.
Implicit, lista fi]ierelor din cadrul unui director este ordonat[
dup[ numele lor. Aceast[ ordine poate fi modificat[. Comanda ls posed[ un num[r mare de indicatori, c`\iva dintre
ace]tia fiind:
-l afi]eaz[ urm[toarele informa\ii de spre fi]iere (de la st`nga la
dreapta):
• tipul fi]ierului
• pemisiunile asupra fi]ierului
• num[rul de leg[turi
• proprietarul
• grup c[ruia @i apar\ine proprietarul
• m[rimea fi]ierului ]i data c`nd acesta a fost modificat
• numele fi]ierului
Valorile pentru tipul fi]ierului sunt:
– intrarea este un fi]ier obi]nuit
84 d intrarea este un director
b intrarea este un fi]ier de dispozitiv bloc
c intrarea este un fi]ier de dispozitiv caracter
l intrarea este o leg[tur[ simbolic[
p intrarea este un fi]ier FIFO (conduct[ cu nume)
s intrarea este un socket local
Exemplu: Presupunem c[, @n directorul curent, execut[m comanda:
ls -l
Informa\iile afi]ate pot fi similare cu urm[toarele:
-rwxrwxrwx 1 stud1 ise 716 May 8 15:35 exemplu.c
drwxrwxrwx 3 stud1 ise 1536 Oct 19 00:54 exe
-rw-r–r– 2 stud1 ise 10 Nov 3 14:28 file1
-rw-r–r– 2 stud1 ise 10 Nov 3 14:28 file2
-a afi]eaz[ con\inutul unui dir ector inclusiv fi]ierele ascunse
(fi]iere al c[ror nume @ncepe cu caracterul .)
-d restric\ioneaz[ afi]area informa\iilor numai la directorul
specificat -F afi]eaz[ caractere speciale @naintea fiec[rui fi]ier @n func\ie de
tipul acestuia:
/ dup[ fiecare director
*dac[ fi]ierul este unul executabil
= dac[ fi]ierul este un socket
| dac[ fi]ierul este o conduct[ cu nume ( FIFO )
@ dac[ fi]ierul este o leg[tur[ simbolic[
-n afi]eaz[ urm[toarea informa\ie pentru fi]ierele sau
directoarele specificate:
• tipul fi]ierului
• permisiunile
• num[rul de leg[turi
• identificatorul proprietarului ( owner id)
• identificatorul grupului ( group id)
• m[rimea (@n octe\i)
85• data la care s-a efectuat ultima modificare
-R afi]eaz[ recursiv toate subdirect oarele directorului specificat
Comenzi pentru lucrul cu directoare
mkdir
Permite crearea de directoare, @n cadrul sintaxei acestei comenzi
put`ndu-se specifica ca argumente nume multiple de directoare.
Pentru a crea un director, utilizatorul trebuie s[ aib[ permisiunea de scriere @n directorul p[rinte @n care se dore]te a se crea directorul, iar
directorul p[rinte trebuie s[ existe. Multe sisteme UNIX furnizeaz[
pentru comanda mkdir un indicator –p, astfel @nc`t directorul p[rinte
este de asemenea creat dac[ el nu exist[. Permisiunile asupra noului director vor fi date de set[rile curente ale acestora (comanda umask ).
#ntre indicatorii ce pot fi folosi\i cu comanda mkdir , se
reg[sesc: -p permite crearea tuturor directoarelor ce au fost specificate ca
argumente @n sintaxa comenzii, dac[ acestea nu exist[
-m permite specificarea permisiunilo r de acces pentru directorul
ce va fi creat
De exemplu, dac[ directorul curent este /home/mihai ,
execut`nd comanda:
mkdir temp
se va crea un director numit temp @n directorul /home/mihai , a c[rui
cale absolut[ este /home/mihai/temp .
Comanda mkdir /home/mihai/temp va avea acela]i efect
ca ]i comanda anterioar[.
Pentru crearea directorului / home/temp se poate folosi ]i
comanda mkdir ../temp . S-a folosit .. ca parte a numelui de cale
relativ[ pentru a indica faptul c[ directorul temp va fi creat @n directorul
cu un nivel mai sus, /home .
Pentru a crea directoarele testdir1 ]i testdir2 , se va folosi
comanda:
mkdir testdir1 /home/mihai/temp/testdir2
Aceasta va crea testdir1 @n directorul curent ]i testdir2 @n
/home/mihai/temp (presupun`nd c[ exist[). #n acest exemplu,
86testdir1 folose]te un nume de cale relativ[ @n timp ce
/home/mihai/temp/testdir2 folose]te o cale absolut[.
Dac[ directorul testdir este deja prezent ]i se @ncearc[ crearea
lui @nc[ o dat[, sistemul va gene ra un mesaj similar cu urm[torul:
mkdir: cannot create testdir.
testdir: File exists
Pentru ca simultan cu crearea unui director (de exemplu,
testdir ) @n directorul curent s[ se acorde asupra acestuia ]i
permisiunile 770, se va executa comanda:
mkdir –m 770 testdir
Pentru a crea @n directorul curent un subdirector testdir , ]i @n
acesta un subdirector temp , simultan folosind o singur[ comand[, se va
executa:
mkdir –p testdir/temp
rmdir
Se folose]te pentru ]tergerea de directoare. Un director poate fi
]ters numai dac[ acesta este gol, adic [ toate fi]ierele ]i subdirectoarele
din el au fost ]terse @n prealabil. #n cadrul sintaxei comenzii rmdir se
pot specifica ca argumente nume multiple de directoare. Pentru a putea
]terge un director, utilizatorul trebuie s[ aib[ permisiunea de scriere @n directorul p[rinte al acestuia. Urm[ torul indicator poate fi folosit @n
cadrul sintaxei comenzii rmdir :
-p permite ]tergerea tuturor directoarelor din calea specificat[.
De exmplu, dac[ directorul curent este /home/mihai ]i
con\ine subdirectorul temp , pentru a ]terge temp se va folosi comanda:
rmdir temp
Dac[ directorul temp nu este gol, se va ob\ine un mesaj similar
cu urm[torul:
rmdir: Directory temp is not empty.
Presupunem c[ suntem @n directorul /home/mihai ]i acesta
con\ine un subdirector testdir iar acesta la r`ndul s[u con\ine un
subdirector numit temp . Pentru a ]terge directorul testdir din
directorul curent ]i subdirectorul temp din testdir , se va executa
comanda urm[toare (presupun`nd c[ toate fi]ierele ]i directoarele din ele
au fost ]terse):
rmdir –p testdir/temp
87Utilitarul Midnight Commander
Midnight Commander este o "clon[" a programului Norton
Commander , folosit pentru gestionarea fi]ierelor ]i directoarelor, dar ce
poate fi utilizat ]i pentru transferuri prin ftp sau c[utarea unui fi]ier pe
disc.
Asigur`nd o interfa\[ bazat[ pe meniuri, Midnight
Commander , se lanseaz[ @n execu\ie cu comanda mc (figura 6.1).
Se observ[ c[ pe ecran apar 2 panouri ce reprezint[ con\inutul a
dou[ directoare. Comutarea @ntre panouri se realizeaz[ cu ajutorul tastei
<Tab> .
Fig. 6.1 Ecranul Midnight Commander
Accesarea meniului se realiz eaz[ cu ajutorul tastei < F9> ]i a
tastelor s[ge\i. Ob\inerea help -ului se face ap[s`nd tasta F1.
Utilitarul permite realizarea mai multor opera\ii cu fi]ierele ]i
directoarele existente pe disc. #ntre acestea se reg[sesc:
– vizualizarea con\inutului unui fi]ier – fi]ierele al c[ror
con\inut poate fi vizualizat sunt de tip text, html ]i arhiv[.
Vizualizarea se realizeaz[ prin pozi\ionarea cursorului pe fi]ierul dorit ]i ap[sarea tastei < F3>. Ie]rea din modul
vizualizare se face ap[s`nd tasta < Esc> sau tasta <F10> ;
– editarea unui fi]ier (text) – Midnight Commander are
@ncorporat un editor astfel @nc`t pozi\ion`nd cursorul pe
88fi]ierul text ce se vrea a fi editat, ]i ap[s`nd tasta < F4>
con\inutul acestuia se poate modifica;
– crearea unui director – ap[s`nd tasta < F7> se poate crea un
director nou @n directorul cure nt. Crearea directorului @ntr-o
alt[ loca\ie impune schimbarea directorului curent. Ap[s`nd apoi tasta < F7> se lanseaz[ un dialog @n care utilizatorul va
specifica numele noului director. #n final se apas[ tasta
<Enter> (figura 6.2):
Fig. 6.2 Crearea unui director
– copierea fi]ierelor ]i directoarelor – @n acest caz este
necesar[ folosirea ambelor panouri: unul reprezint[ fi]ierul
sau directorul surs[, iar cel[lalt directorul destina\ie. Pentru
copiere se pozi\ioneaz[ cursorul pe fi]ierul (directorul) ce se dore]te a fi copiat. Daca se dore]te copierea mai multor
fi]iere, acestea se selecteaz[ cu ajutorul tastei <Insert> .
Ca urmare a select[rii numele fi]ierelor va ap[rea colorat @n galben. Se apas[ tasta <F5> . Pe ecran va apare o caset[ de
dialog @n care cere confirmarea copierii. Dup[ confirmare,
prin ap[sarea tastei <Enter> , @n panoul corespunz[tor
directorului destina\ie va ap[rea fi]ierul copiat (figura 6.3):
89
Fig. 6.3 Copierea fi]ierelor
– mutarea fi]ierelor ]i directoarelor – este asem[n[toare cu
copierea, cu deosebirea c[ se folose]te tasta <F6> . Aceast[
opera\ie poate fi utilizat[ ]i pentru redenumirea fi]ierelor, prin completare @n caseta de dialog a noului nume (figura 6.4):
Fig. 6.4 Mutarea fi]ierelor
– ]tergerea fi]ierelor ]i directoarelor – se pozi\ioneaz[ cursorul
90pe fi]ierul (directorul) dorit. #n cazul ]tergerii mai multor
fi]iere acestea se selecteaz[ folosind tasta <Insert> . Se
apas[ tasta <F8> , iar apoi se confirma ]tergerea cu ajutorul
tastei <Enter> (figura 6.5):
Fig. 6.5 }tergerea fi]ierelor
– schimbarea permisiunilor asupra fi]ierelor ]i directoarelor –
dup[ ce se pozi\ioneaz[ cursorul pe fi]ierul c[ruia i se
dore]te schimbarea permisiunilor, se utilizeaz[ combina\ia de
taste <Ctrl><X> , ap[sate simultan. Se elibereaz[ aceste
taste ]i se apas[ imediat tasta <C>. Pe ecran apare o caset[ de
dialog @n care se pot modifica pe rmisiunile. La final se apas[
butonul <Set> (figura 6.6):
91
Fig. 6.6 Schimbarea permisiunilor
– c[utarea unui fi]ier – folosind tasta <F9> se acceseaz[
meniul iar din submeniul <Command> se selecteaz[
op\iunea <Find file> . #n caseta de dialog ce apare se
specific[ de unde va @ncepe c[utarea ]i ce fi]iere s[ se caute.
– vizualizarea fi]ierelor arhivate – se apas[ tasta <Enter>
atunci c`nd cursorul este poz i\ionat pe fi]ierul arhiv[.
– copierea fi]ierelor prin ftp – se deschide meniul cu tasta
<F9> , ]i din submeniul Left sau Right se alege comanda
FTP link . #n caseta de dialog ce apare se introduc
informa\ile necesare stabilirii conexiunii ftp. Odat[ aceasta
stabilit[, @ntr-unul din panouri se vor vedea directoarele din
calculatorul accesat prin re\ea. Sunt posibile toate opera\iile iar copierea/mutarea fi]ierelor se face @ntre calculatoare
(figura 6.7):
92
Fig. 6.7 Utilizarea ftp
Exerci\ii
1. S[ se ]tearg[, cu o singur[ comand[, directoarele din
urm[toarea cale: /testdir/mihai/ion .
2. S[ se creeze @n directorul test1 dou[ fi]iere fisier1 ]i
fisier2 ]i un subdirector test1 . Folosind o singur[ comand[, @n mod
interactiv, s[ se ]tearg[ toate acestea.
3. S[ se copieze, folosind o singur[ comand[, fi]ierul file1 din
directorul curent, @n directorul director1 ]i @n subdirectoarele
subdir11 ]i subdir12 ale acestuia, p[str`ndu-se data ]i timpul
cre[rii fi]ierului precum ]i permisiunile sale de acces.
4. S[ se concateneze dou[ fi]iere existente @n directorul curent,
@ntr-un al treilea la sf`r]itul acestuia.
5. S[ se creeze un director numit test ]i s[ i se asigneze
urm[toarele permisiuni de acces: citire, scriere ]i execu\ie pentru proprietar, scriere pentru grup, ]i citire, scriere pentru others . Totul se
va realiza cu o singur[ comand[.
93LUCRAREA NR. 7
Comenzi pentru comunica\ii
Sistemul de operare UNIX ofer[ o varietate larg[ de comenzi
destinate realiz[rii de comunica\ii @ntr e utilizatori conecta\i la diferite
calculatoare gazd[. C`teva dintre cele mai frecvent folosite sunt
prezentate @n continuare.
talk
Aceast[ comand[ este un instrume nt de comunica\ie interactiv
prin intermediul c[ruia un utilizator poate dialoga, @n timp real, cu al\i
utilizatori conecta\i pe calculatorul gazd[ local sau pe unul aflat la
distan\[. Ca argumente, comanda talk necesit[ specificarea numelui
utilizatorului ]i a numelui calculatorului gazd[.
Specificarea numelui utilizatorului de pe calculatorul gazd[ se
poate face @ntr-unul din urm[toarele formate:
nume_utilizator@nume_calculator_gazda
nume_calculator_gazda!nume_utilizator nume_calculator_gazda.nume_utilizator nume_calculator_gazda:nume_utilizator
Op\ional se poate furniza un al doilea argument ce identific[
terminalul ( tty) prin intermediul c[ruia utilizatorul este conectat.
De exemplu, dac[ se dore]te ini\ierea unei sesiuni talk pentru a
dialoga cu utilizatorul mihai , se va tasta:
talk mihai
Observa\ie: Sesiunea talk nu poate fi ini\iat[ dac[ utilizatorul
cu care se dore]te s[ se comunice, nu este conecat. Pentru a vedea dac[
utilizatorul respectiv este conectat, se va folosi comanda who.
Dup[ tastarea comenzii talk ecranul terminalului va fi divizat,
printr-o linie punctat[, @n dou[ zone: una superioar[ @n care utilizatorul
introduce mesajele de transmis, ]i alta inferioar[ @n care va primi
mesajele recep\ionate.
94 Mesajul cu care va r[spunde calculatorul @n urma introducerii
comenzii talk , este:
[Waiting for your party to respond]
Dac[ utilizatorul specificat ( mihai ) nu este conectat, se va
recep\iona un mesaj similar cu urm[torul:
Your party is not logged on
@n timp ce utilizatorul mihai va primi mesajul urm[tor27:
Message from Talk Daemon@host1 at 0:46 …
talk: connection requested by student@host1
talk: respond with: talk student@host1
[Waiting for your party to respond]
Mesajul respectiv apare chiar dac[ utilizatorul mihai este @n
mijlocul unei sesiuni de editare. #n cazul @n care el refuz[ c onversa\ia, mesajul @i va ap[rea pe
ecran la intervale de 30 de secunde
28, @n timp ce pe ecranul terminalului
utilizatorului ce dore]te ini\ierea dialogului, vor ap[rea mesajele:
[Ringing your party again]
[Ringing your party again] [Ringing your party again]
[Ringing your party again]
Ocazional va ap[rea ]i urm[torul mesaj:
[Your party is refusing messages]
Dac[ utilizatorul mihai dore]te s[ dialogheze, el va trebui s[
tasteze comanda indicat[ @n ultima linie a mesajului recep\ionat, ]i
anume:
talk student@host1
Pe ecarnul terminalului se va afi]a mesajul:
[Connection Established]
Terminarea sesiunii talk ]i deci @nchiderea conexiunii se
realizeaz[ prin tastarea combina\iei de taste <Ctrl><C> . Pe ecranul
terminalului va ap[rea urm[torul mesaj:
[Connection closing.Exiting]
]i se va reveni la promptul sistem.
27 #n acela]i timp va fi avertizat ]i sonor.
28 talk se poate dovedi a fi perturbant pentru un utilizator, acesta dorind
s[ refuze conversa\ia. Pentru a reali za acest lucru, el va inhiba comanda talk
tast`nd de la promptul sistem comanda: mesg n .
95 vacation
Dac[ un utilizator dore]te s[ semnaleze altuia cu care schimb[
uzual mesaje de po]t[ electronic[, faptul c[, pentru o perioad[ de timp nu
poate s[-i r[spund[ la mesaje ("este @n vacan\["), va folosi comanda
vacation .
Semnalarea se poate face, fie pr in intermediul unui mesaj sistem
implicit ce este transmis o dat[ pe s[pt[m`n[ utilizatorului ce transmite
po]ta electronic[, fie printr-un mesaj personalizat. #n acest ultim caz,
mesajul respectiv trebuie s[ fi fost creat anterior @ntr-un fi]ier numit .vacation.msg din directorul home al utilizatorului comenzii
vacation .
Comanda poate fi folosit[ ]i pent ru a transmite mai departe, c[tre
al\i utilizatori ( forward ), mesajele pe care un utilizator le prime]te pe
durata "vacan\ei". #n acest scop se va folosi fi]ierul .forward din
directorul home al acestuia. Fi]ierul va include numele tuturor
utilizatorilor c[tre care se dore]te transmiterea mesajelor. O intrare @n fi]ierul .forward are urm[torul format:
nume_utilizator ,“|/usr/bin/vacation nume_utilizato ”
Comanda vacation permite de asemenea stocarea numelor
utilizatorilor care au transmis mesaje de po]t[ electronic[ pe durata c`t
utilizatorul destinatar "a fost @n vacan\[". Aceste nume sunt stocate @n
fi]ierele .vacation.dir ]i .vacation.pag din directorul home
al utilizatorului destinatar. Pentru cr earea ]i ini\ializarea celor dou[ fi]iere
(@nainte de a pleca @n "vacan\["), se va utiliza indicatorul –i al comenzii
vacation , tast`ndu-se:
vacation –i
Prezen\a fi]ierului .forward @n directorul home este folosit[
de c[tre sistem pentru a identifica dac[ utilizatorul "este @n vacan\[".
Deci, la revenirea din "vacan\[", acesta va trebui s[ ]terg[ sau s[ redenumeasc[ fi]ierul respectiv.
write
Comanda write este un instrument de comunica\ie ce permite
unui utilizator s[ transmit[ mesaje altuia, acesta din urm[ put`nd fi
conectat pe un calculator gazd[ loca l sau pe unul la distan\[. Spre
96deosebire de comanda talk , comanda write este folosit[, de regul[,
numai pentru transmiterea de mesaje29 @ntr-un singur sens.
Mesajele vor fi ad[ugate direct pe ecranul terminalului
utilizatorului destinatar, chiar dac[ acesta se afla @n mijlocul unei sesiuni de editare, comanda write rescriind orice informa\ie de pe ecran.
Con\inutul sesiunii de editare nu va fi corupt, @n cadrul celor mai multe
editoare, ecranul original put`nd fi restaurat cu combina\ia de taste
<Ctrl><L>.
Pentru a putea transmite un mesaj folosind comanda write , este
necesar ca utilizatorii ce comunic[ s[ fie conecta\i, iar terminalele lor s[ aib[ setat[ permisiunea de scriere. Pentru a vedea set[rile unui terminal,
este necesar ca utilizatorul s[ se ] tie num[rul acestuia. Pentru a g[si
num[rul terminalului el va folosi comanda tty dup[ cum urmeaz[:
tty
/dev/tty2
Deci num[rul terminalului s[u este /dev/tty2 . #n continuare
va tasta:
ls –al/dev/tty2
crw–w–w- 1 mihai users 4,2 Jan 15 05:49
/dev/tty2
Ie]irea comenzii ls arat[ c[ al\ii ( others ) au permisiunea de
scriere disponibil[ pe terminalul respectiv. Confirmarea acestei
permisiuni poate fi ob\inut[ folosind comanda mesg , dup[ cum urmeaz[:
mesg
Is y
Rezultatul comenzii mesg arat[ c[ terminalul permite ca
mesajele s[ fie scrise pe el. Pentru a inhiba permisiunea de scriere pe terminal se va tasta
secven\a de comenzi urm[toare:
mesg n
mesg
Is n
@n cadrul c[reia comanda mesg este setat[ pe off. Deci este necesar,
pentru ca write s[ mearg[, s[ se seteze comanda mesg pe on.
Urm[torii indicatori pot fi folosi\i @n cadrul comenzii write :
29 Un mesaj const[ din toate caracterele pe care le-am introdus p`n[ la
ap[sarea tastei <Enter> .
97 -h Handle,Reply – op\iunea Reply permite s[ se r[spund[
la un mesaj transmis de c[tre un utilitar sau de c[tre un script shell .
Handle este un num[r generat de c[tre sistem. R[spunsul poate fi ok,
cancel sau query .
-n nume_calculator_gazda – permite specificarea
numelui unui calculator gazd[ la distan\[, atunci c`nd se dore]te s[ se
transmit[ un mesaj unui utilizator con ectat la acesta. Este posibil[, de
asemenea, specificarea numelui unui utilizator de pe calculatorul gazd[ respectiv, sub forma:
nume_utilizator@nume_calculator_gazda .
De exemplu, dac[ se dore]te transmiterea unui mesaj utilizatorului mihai se va tasta comanda:
write mihai
Mesajul pe care @l va primi pe e carnul terminalului este similar cu
urm[torul:
Message from student on mainhost(pts/3)
[Fri May 22 19:48:30 2005]…
Dac[ utilizatorul mihai nu este conectat, se va primi un mesaj
similar cu urm[torul:
mihai is not logged on
#n cazul @n care utilizatorul mihai a setat pe off comanda
mesg pentru a inhiba permisiunea de scriere, se va primi un mesaj
similar cu urm[torul:
write: permission denied
Dac[ se dore]te transmiterea de mesaje lungi ce se afl[ stocate
@ntr-un fi]ier, numit de exemplu, fisier_test , se poate folosi
operatorul de redirectare a intr[rii, astfel:
write mihai<fisier_test
Pentru a r[spunde la mesajul ce i-a fost adresat, cel[lalt utilizator
trebuie de asemenea s[ foloseasc[ comanda write tast`nd:
write student
Dac[ se dore]te s[ se transmit[ mesaje unui utilizator conectat pe
un calculatorul gazd[ la distan\[, se va tasta una din urm[toarele dou[ comenzi:
write nume_utilizator@nume_calculator_gazda
sau
write –n nume_calculator_gazda nume_utilizator
98 Terminarea transmiterii de mesa je unui utilizator se realizeaz[
prin ap[sarea combina\iei de taste <Ctrl><d> .
telnet
Aceast[ comand[ permite comunicarea cu un alt calculator gazd[
utiliz`nd pentru aceasta protocolul TELNET . #n mod normal comanda
este invocat[ folosind sintaxa:
telnet nume_gazda[port]
unde nume_gazda este numele calculatorului gazd[ la care dorim s[ ne
conect[m iar port indic[ un num[r de port (o adres[ aplica\ie). Dac[
acesta nu este specificat, se va folosi portul telnet implicit.
#n cazul @n care comanda este invocat[ f[r[ argumentul ce
specific[ numele calculatorului gazd [ se va intra @n modul introducere
comand[, mod indicat prin promptul telnet> . Intrarea @n acest mod se
poate face ]i dup[ conectarea la un calculator gazd[, prin tastarea combina\iei de taste <Ctrl><]> .
Exist[ un num[r de subcomenzi ce sunt disponibile @n modul
introducere comand[. C`teva dintre acestea sunt:
open nume_calculator_gazda[[-l]user][-port]-
deschide o conexiune cu calculato rul gazd[ al c[rui nume a fost
specificat. Dac[ nu a fost specificat un num[r de port, telnet va utiliza
portul implicit. Indicatorul [-l] trebuie folosit pentru a specifica
numele utilizatorului.
exit – @nchide conexiunea curent[ ]i se revine la promptul
telnet> dac[ subcomanda open a fost utilizat[ pentru a ne conecta la
un calculator gazd[ la distan\[.
display – afi]eaz[ argumentele de operare
set – permite setarea argumentelor de operare
status – afi]eaz[ informa\ie de stare
? – afi]eaz[ informa\ie ajut[toare ( help )
quit – @nchide orice sesiune telnet deschis[ ]i se iese din
telnet . Un caracter EOF (End of File ) va determina de asemenea
@nchiderea sesiunii ]i ie]irea.
close – @nchide sesiunea telnet ]i se revine @n modul
introducere comand[
99 cu
Aceast[ comand[ permite conectarea, direct[ sau indirect[, la un
alt calculator gazd[. Astfel, dac[ un utilizator este conectat la calculatorul gazda1 ]i folose]te comanda cu pentru a se conecta la calculatorul
gazda2 , el va putea, ca de pe acest calculator, s[ se conecteze @n
continuare la calculatorul gazda3 . Prin urmare, el va fi conectat direct
la gazda2 ]i indirect la gazda3 .
Comanda cu accept[ o serie de indicatori, ]i anume:
-d – permite tip[rirea unor mesaje de diagnostic
-l linie – permite specificarea dispozitivului ce va fi folosit
pentru comunicare. Implicit, UNIX folose]te primul dispozitiv disponibil
corespunz[tor. Indicatorul poate fi folosit pentru rescrierea celui implicit.
-n – este destinat confirm[rii num [rului de telefon. Dac[ acest
indicator este folosit, comanda cu solicit[ introducerea unui num[r de
telefon.
-s viteza – permite specificarea @n bauds a vitezei de transmisie
a liniei ce va fi folosit[ pentru a comunica @ntre calculatoarele gazd[.
Valorile uzuale sunt: 300, 1200 , 2400 , 4800 ,9600 ].a.m.d.
-T secunde – permite specificarea unui parametru de time-
out. Acesta reprezint[ intervalul de timp @n care sistemul va @ncerca s[
se conecteze la un calculator gazd[ la distan\[.
Argumentele ce pot fi folosite @n cadrul sintaxei comenzii cu,
sunt: nume_sistem – este numele sistemului la care se dore]te
conectarea. Acest nume trebuie s[ fie definit @n fi]ierul
/etc/uucp/Systems .
De asemenea defini\i @n acest fi]ier sunt parametri, cum ar fi num[rul de telefon, viteza liniei, ].a ., care sunt folosi\i pentru a conectare
la un calculator gazd[ la distan\[. Dac[ utiliz[m argumentul
nume_sistem , va trebui s[ nu folosim indicatorii –l ]i –s.
numar_telefon – este num[rul de telefon (local sau
interurban) ce va fi folosit pentru conectarea la un calculator gazd[ la
distan\[. Dup[ efectuarea conexiunii, comanda cu execut[ dou[ procese:
procesul de transmitere care cite]te da te de la echipama ntul standard de
intrare (cu excep\ia liniilor ce @ncep cu caracterul ~ (tilda)) ]i le transmite
calculatorului gazd[ la distan\[; procesul de recep\ie care accept[ date de
100la calculatorul gazd[ la distan\[ (cu excep\ia liniilor ce @ncep cu
caracterul ~ (tilda)), ]i le transmite echi pamentului standard de ie]ire.
Conectarea cu succes la calculatorul gazd[ la distan\[, va permite
folosirea de c[tre utilizator a unor subcomenzi acceptate de c[tre cu.
Acestea permit efectuarea de opera\ii asupra fi]ierelor, directoarelor, ].a.
ce sunt localizate pe calculatorul gazd[ aflat la distan\[.
Urm[toarea list[ este alc[tuit[ din c`teva astfel de subcomenzi30:
~. pentru deconectarea de la calculatorul gazd[ la distan\[
~! ne introduce @ntr-un shell pe calculatorul local, @n timp ce
<Ctrl><d> ne re@ntoarce la calculatorul gazd[ la distan\[.
~!comanda permite execu\ia pe calc ulatorul local a comenzii
ce a fost specificat[ prin variabila comanda (de exemplu, pentru a
executa comanda ls pe calculatorul local, se va tasta subcomanda:
\~!ls )
~%cd director permite comutarea din directorul de pe
calculatorul gazd[ local, @n directorul specificat.
~%put From [To] este destinat[ copierii unui fi]ier de pe
calculatorul local, pe calculatorul gazd[ la distan\[. Dac[ variabila To nu
este specificat[, fi]ierul local este copiat pe calculatorul gazd[ la distan\[,
cu acela]i nume. Modul @n care progreseaz[ transferul fi]ierului va fi
afi]at prin digi\i singulari consecutivi pe ntru fiecare bloc transferat @ntre
calculatoarele gazd[. Numai fi]ierele ce con\in text ( ASCII ) pot fi
transferate folosind aceast[ subcomand[.
~%take From [To] este destinat[ copierii unui fi]ier de pe
calculatorul gazd[ la distan\[, pe calculatorul local. Dac[ variabila To nu
este specificat[, fi]ierul la distan\[ este copiat pe calculatorul local, cu
acela]i nume. Modul @n care progreseaz[ transferul fi]ierului este afi]at
prin digi\i singulari consecutivi pentru fiecare bloc transferat @ntre calculatoarele gazd[. Numai fi]ierele ce con\in text ( ASCII ) pot fi
transferate folosind aceast[ subcomand[.
~$comanda permite execu\ia pe calc ulatorul local a comenzii
ce a fost specificat[ prin intermediul variabilei comanda , ]i transmiterea
ie]irii comenzii, calculatorului gazd[ la distan\[, pentru execu\ie.
30 Pentru ca sistemul UNIX s[ nu acorde o semnifica\ie deosebit[
caracterului ~ este necesar ca @naintea acestuia s[ se pun[ un caracter \.
101 Exemple:
Cunosc`nd numele unui calculator gazd[ la distan\[ ( remote2 )
(nume ce este definit @n fi]ierul /etc/uucp/Systems ), putem s[ ne
conect[m la acesta folosind comanda cu, astfel:
cu remote2
Dac[ se dore]te conectarea la un dispozitiv specific tty1 , de pe
calculatorul gazd[ la distan\[, av`nd o vitez[ a liniei specificat[ la 2400 ,
se va executa comanda urm[toare:
cu –s 2400 –l tty1
Dup[ conectarea la calculatorul gazd[ la distan\[, se va putea
executa orice subcomand[ a comenzii cu. Astfel, dac[ se dore]te
comutarea @n directorul /home/mihai de pe calculatorul gazd[ local,
se va executa comanda:
\~%cd /home/mihai
De asemenea, dac[ @n directorul /home/mihai de pe
calculatorul gazd[ local, exist[ un fi]ier numit local_file , ]i se
dore]te copierea acestuia cu acela]i nume, @n directorul curent de pe calculatorul gazd[ la distan\[, se va executa comanda urm[toare:
\~%put /home/mihai/local_file
Pentru copierea fi]ierului local_file din directorul
/home/mihai , de pe calculatorul local, @n directorul
/home/mihai/director1 de pe calculatorul gazd[ la distan\[, cu
nume schimbat ( remote_file ), se va executa urm[toarea comand[:
\~%put /home/mihai/local_file
/home/mihai/director1/remote_file
Pentru copierea @n sens invers se poate folosi subcomanda take .
De exemplu, dac[ se dor e]te copierea unui fi]ier
/home/mihai/remote_file de pe calculatorul gazd[ la distan\[,
@ntr-un fi]ier numit /home/mihai/local_file de pe calculatorul
gazd[ local, se va executa comanda urm[toare:
\~%take /home/mihai/remote_file
/home/mihai/local_file
ftp
Protocolul de transfer de fi]iere ( FTP – File Transfer
Protocol ) este o metod[ de transfer a fi]ierelor de pe un calculator
gazd[ pe altul. Serviciul ftp (apelat prin comanda cu acela]i nume) este
102interfa\a cu protocolul FTP. El permite unui utilizator s[ se conecteze la
un alt calculator gazd[ ]i s[ transfere fi]iere.
Comanda ftp permite numai forme simple de transfer de fi]iere.
Astfel, nu este posibil[ copierea de fi]iere din directoare @n mod recursiv, ci va trebui s[ se transfere fiecare fi]ier sau director individual. Deoarece
aceast[ comand[ poate fi utilizat[ pentru transferuri de fi]iere @ntre
diferite tipuri de sisteme, @nseamn[ c[ este posibil ca atributele fi]ierelor (dependente de sistem), s[ nu fie p[strate @n urma transferului. Pentru a putea utiliza comanda ftp este necesar[ conectarea la
un calculator gazd[
31, deci este necesar[ furnizarea unui nume de
utilizator autorizat pe acel sistem, precum ]i parola acestuia. Urm[torii indicatori pot fi utiliza\i cu comanda ftp @n linia de
comand[:
-i – pe durata transferurilor de fi]iere multiple realizate cu o
singur[ comand[, seteaz[ pe off interogarea interactiv[ a utilizatorului
privind numele fi]ierelor
-d – valideaz[ depanarea
-n – permite prevenirea conect[rii automate (@ncerc[rile de auto-
login
32 dup[ conectarea ini\ial[) @n cazul @n care este prezent un fi]ier
.netrc33.
-v – ofer[ un raport ce con\ine statistici referitoare la transfer ]i
for\eaz[ ftp s[ afi]eze pe terminal toate mesajele de r[spuns primite de
la calculatorul gazd[ la distan\[.
Dup[ conectarea cu succes, comanda ftp afi]eaz[ promptul
ftp> de la care @n continuare se pot introduce un num[r de subcomenzi
destinate efectu[rii transferului de fi]iere. Cele mai importante dintre
acestea sunt (tabelul 7.1):
31 Un calculator gazd[ poate fi repreze ntat de un calculator gazd[ local sau
de unul la distan\[ (iden tificat printr-o adres[ de Internet ).
32 #n auto-login , ftp verific[ contul utilizatorului pe calculatorul
gazd[ la distan\[.
33 Acest fi]ier con\ine macro-ul neces ar pentru conectarea la calculatorul
gazd[ la distan\[.
103Tabelul 7.1
Subcomenzi ftp
Subcomand[ Semnifica\ie
append nume_fisier permite ad[ugarea unui fi]ier local
la sf`r]itul unui fi]ier situat pe calculatorul gazd[ la distan\[.
Op\ional, se poate specifica un
nume de fi]ier pe calculatorul gazd[ la distan\[ de ad[ugat la sf`r]itul fi]ierului specificat. Dac[ numele de fi]ier la distan\[ nu este specificat, numele de fi]ier local
este utilizat ca implicit.
bell emite un semnal sonor dup[
terminarea fiec[rui transfer de fi]ier
bye @ncheie sesiunea ftp
cd director_la_distanta comut[ din directorul de lucru
curent @n director_la_distanta situat
pe calculatorul gazd[ la distan\[
cdup comut[ @n directorul p[rinte al
directorului de lucru curent, situat pe calculatorul gazd[ la distan\[
chmod mod nume_fisier schimb[ modurile de permisiune
ale fi]ierului specificat
close @nchide conexiunea FTP existent[
pe un calculator gazd[ la distan\[
delete fisier_la_distanta ]terge fisier_la_distanta
de pe calculatorul gazd[ la distan\[
dir [director_la_distanta] afi]eaz[ pe ecranul terminalului
con\inutul detaliat al
director_la_distanta
disconnect similar cu close
get fisier_la_distanta
[fisier_local] transfer[
fisier_la_distanta ]i @l
stocheaz[ pe calculatorul local. Dac[ nu este specificat un
fisier_local , fi]ierul
transferat va avea acela]i nume pe care l-a avut pe calculatorul la
104distan\[, altfel noul s[u nume va fi
cel al fisier_local . #n timpul
transferului, pentru fiecare bloc de
date transferat, este afi]at caracterul
#.
help [subcomanda] afi]eaz[ un mesaj explicativ
referitor la subcomanda . Dac[ nu
este furnizat nici un argument, va fi afi]at[ o list[ a subcomenzilor cunoscute.
lcd [director_local] permite comutarea @n
director_local de pe
calculatorul local. Dac[ nu se specific[ nici un argument, se va
comuta @n directorul home al
utilizatorului.
ls [director_la_distanta] afi]eaz[ con\inutul lui
director_la_distanta de pe
calculatorul gazd[ la distan\[
mdelete
[fisiere_la_distanta] ]terge
fisierele_la_distanta de
pe calculatorul gazd[ la distan\[ (pot fi utiliza\i ]i specificatorii de nume de fi]ier global)
mdir fisiere_la_distanta similar cu dir, cu excep\ia c[ pot
fi specificate fi]iere multiple
mget fisiere_la-distanta permite transferul de fi]iere
multiple de pe calculatorul gazd[ la distan\[ pe calculatorul local (pot fi utiliza\i ]i specificatorii de nume de fi]ier global). Dac[ op\iunea prompt este setat[, sistemul va
solicita introducerea unei
confirm[ri pentru fiecare fi]ier ce se transfer[, altfel, fi]ierele sunt copiate f[r[ solicitarea confirm[rii.
mkdir nume_director permite crearea unui nou director @n
directorul curent de pe calculatorul gazd[ la distan\[.
mput permite transferul de fi]iere
105multiple de pe calculatorul local pe
calculatorul gazd[ la distan\[ (pot fi
utiliza\i ]i specificatorii de nume de
fi]ier global). Dac[ op\iunea prompt este setat[, sistemul va
solicita introducerea unei confirm[ri pentru fiecare fi]ier ce se transfer[, altfel, fi]ierele sunt
copiate f[r[ solicitarea confirm[rii.
open calcul ator_gazda
[port] permite stabilirea unei conexiuni ]i
deschide o sesiune ftp pe
calculator_gazda
put nume_fisier transfer[ un fi]ier de pe calculatorul
local pe calculatorul gazd[ la distan\[. Numele fi]ierului nu este modificat.
pwd afi]eaz[ numele directorului de
lucru curent de pe calculatorul gazd[ la distan\[
quit similar cu bye
remotehelp [nume_comanda] solicit[ de la calculatorul gazd[ la
distan\[ o informa\ie explicativ[ referitoare la nume_comanda
rename nume_vechi nume_nou redenume]te un fi]ier situat pe
calculatorul gazd[ la distan\[, din nume_vechi @n nume_nou
reset ini\ializeaz[ conexiunile de
comunica\ie
rmdir nume_director ]terge directorul specificat de pe
calculatorul gazd[ la distan\[
size nume_fisier returneaz[ m[rimea unui fi]ier
situat pe calculatorul gazd[ la
distan\[
status afi]eaz[ starea curent[ a ftp
type permite setarea modului de transfer
al fi]ierului. Modurile valide sunt: ASCII pentru fi]iere text
(implicit), binary pentru fi]iere
binare, EBCDIC pentru a transfera
fi]iere @n cod EBCDIC .
106verbose afi]eaz[ toate r[spunsurile c[tre
utilizator
? [subcomanda] afi]a o list[ de subcomenzi
disponibile. Op\ional, prin specificarea numelui unei
subcomenzi se poate ob\ine o
informa\ie explicativ[ referitoare la aceasta.
! [comanda] permite invocarea shell -ului de
pe calculatorul gazd[ local. Op\ional, se poate invoca o comand[ @mpreun[ cu argumentele acesteia.
Observa\ie: Anumite subcomenzi ftp partajeaz[ acela]i nume
ca ]i comenzile UNIX dar efectueaz[ func\ii diferite. De exemplu,
comanda ls @n ftp se comport[ ca ]i comanda ls –al din UNIX , iar
pe anumite sisteme va avea un comportament similar cu cel al comenzii
ls –F.
Exemplu:
Pentru a deschide o sesiune ftp pe un calculator gazd[ la
distan\[ numit, de exemplu, remote_host , se va executa urm[toarea
comand[:
ftp remote_host
sau
ftp
ftp>open remote_host
Se observ[ c[ se poate specifica numele calculatorului gazd[ fie
ca parte a liniei de comand[ (@n sintaxa comenzii ftp)
34, fie ca parte a
unei comenzi open specificat[ la promptul ftp.
#n ambele cazuri se va so licita introducerea unui nume de
utilizator ]i a unei parole35, dac[ aceste informa\ii nu sunt prezente @n
fi]ierul .netrc .
34 #n aceast[ situa\ie ftp @ncearc[ imediat s[ stabileasc[ o conexiune cu
un server FTP pe acel calculator gazd[. Dac[ numele calculatorului gazd[ nu
este specificat (se tasteaz[ simplu ftp) ftp lanseaz[ interpretorul s[u de
comenzi ]i a]teapt[ instruc\iuni de la utilizator.
107 Mesajele ce apar ]i informa \iile ce se introduc la momentul
conect[rii, sunt similare cu urm[toarele:
Connected to remote_host
220 remote_host FTP server (version 4.14
Fri Oct 10 13:39:22 CDT 2000) ready
Name (remote_host:student):student
331 Password required for student
Password: 230 User student logged in
Odat[ ce suntem la promptul ftp, putem executa subcomenzi
ftp. De exemplu, dac[ dorim s[ determin[m directorul curent pe
calculatorul gazd[, vom executa subcomanda:
ftp>pwd
257 "/home/student" is current directory.
Pentru a copia un fi]ier numit testfile de la otherhost pe
gazda local[, execut[m subcomanda get. #n continuare este afi]at[
subcomanda ]i r[spunsul s[u:
ftp>get fisier_test
200 PORT command successful.
150 Opening data connection for fisier_test (73 bytes).
226 Transfer complete.
80 bytes received in 0.02583 seconds (3.025 Kbytes/s)
#n mod similar, pentru a copia un fi]ier numit fisier_test de
la gazda local[ la cea la distan\[ otherhost , utiliz[m subcomanda
put:
ftp>put fisier_test
200 PORT command successful. 150 Opening data connection for
fisier_test.
226 Transfer complete.
35 Exist[ calculatoare gazd[ (numite servere FTP anonymous ) ce permit
utilizatorilor se le acceseze f[r[ ca pentru aceasta s[ li se solicite un nume de utilizator ]i o parol[ autorizate. #n ge neral numele utilizator folosit pentru
conectare, este anonymous , iar parola este guest . De asemenea, multe
calculatoare gazd[ de acest tip solicit[ ca parol[, @n loc de guest , adresa de
po]t[ electronic[ a utilizatorului.
108 142 bytes sent in 0.02954 seconds (4.695
Kbytes/s)
Pentru a copia fi]iere multiple, a le afi]a, ]i apoi a le ]terge, se va
folosi suita de subcomenzi urm[toare:
ftp>mput fisier*
mput fisier1? y
200 PORT command successful.
150 Opening data connection for fisier1. 226 Transfer complete. 46197 bytes sent in 0.03323 seconds (1358
Kbytes/s)
mput fisier2? y 200 PORT command successful.
150 Opening data connection for fisier2.
226 Transfer complete. 44045 bytes sent in 0.01257 seconds (3422
Kbytes/s)
mput fisier3? y 200 PORT command successful.
150 Opening data connection for fisier3.
226 Transfer complete. 41817 bytes sent in 0.01172 seconds (3485
Kbytes/s)
ls -l 200 PORT command successful.
150 Opening data connection for /bin/ls.
total 176 -rw-r–– 1 student ise 1115 Dec 15 11:34
fisier1
-rw-r–– 1 student ise 43018 Dec 15 11:34 fisier2 -rw-r–– 1 student ise 40840 Dec 15 11:34
fisier3
226 Transfer complete. mdel fisier*
mdel fisier1? y
250 DELE command successful. mdel fisier2? y
250 DELE command successful.
mdel fisier3? y
109 250 DELE command successful.
Pentru a @ntrerupe ]i abandona transferul unui fi]ier, se va tasta
combina\ia de taste <Ctrl><C> . Transferurile transmise sunt imediat
@ntrerupte. Transferurile recep\ionate sunt @ntrerupte ]i abandonate prin
trimiterea comenzii ftp ABORT c[tre calculatorul gazd[ la distan\[,
desc[rc`ndu-se orice date suplimentare recep\ionate.
mail
Po]ta electronic[ reprezint[ o metod[ de a transmite mesaje de la
un utilizator conectat pe un calcula tor gazd[, la unul sau mai mul\i
utilizatori conecta\i pe un alt calculator gazd[.
Pentru recep\ionarea mesajelor de po]t[ electronic[ transmise de
utilizatori, sistemul UNIX folose]te cutii po]tale. Astfel, fiecare utilizator
are o cutie po]tal[ sistem ( system mail ) @n care sunt stocate toate
mesajele ce i-au fost adresate. Nume le cutiei po]tale sistem aferent[ unui
utilizator poart[ acela]i nume cu aces ta. De exemplu, un utilizator numit
mihai va avea sub UNIX o cutie po]tal[ @n
/usr/spool/mail/mihai .
Odat[ ce po]ta electronic[ a fost recep\ionat[, utilizatorul poate s[ o citeasc[, salva sau ]t erge. Dup[ citire, ea poate fi mutat[ @ntr-o cutie
po]tal[ secundar[ sau personal[. Cuti a po]tal[ secundar[ implicit[ se
nume]te mbox ]i se afl[, de regul[, @n directorul home al utilizatorului.
Toate mesajele mutate @n cutia po]tal[ mbox sunt stocate pe o durat[
nedefinit[ p`n[ c`nd sunt mutate @n alte cutii po]tale secundare. Acestea
sunt @n fapt foldere ce pot fi organizate, de exemplu, dup[ subiectul
mesajelor pe care le con\in. Un mesaj de po]t[ electronic[ include dou[ p[r\i, ]i anume:
antetul ]i corpul mesajului. Antetul este generat @n mod automat de c[tre
progamul de po]t[ electronic[, un antet tipic ar[t`nd astfel:
Date: Fri, 6 Jan 2005 13:38:06 –0600
From:“Mihai Popescu”<mihai@yahoo.com> To: student@central.ucv.ro
Subject: Formatul unui antet
unde:
Date: specific[ data ]i timpul c`nd a fost transmis mesajul.
From: specific[ numele emitentului ]i adresa acestuia.
To: este adresa de po]t[ electronic[ a receptorului.
110 Subject: este o linie de text ce con\ine o descriere a
mesajului.
Antetul este urmat de corpul me sajului care cuprinde con\inutul
acestuia. Terminarea mesajului se face pr in tastarea unui punct ca prim
caracter al ultimei linii a acestuia. Sistemul ( handler -ul aferent) va
r[spunde cu un mesaj EOT (End of Text ). Aceasta este procedura
standard pentru Berkeley mail , alte programe de po]t[ electronic[ au
propria lor modalitate de a termina te xtul ce alc[tuie]te corpul mesajului
(de exemplu, prin ap[sarea combina\iei de taste <Ctrl><d> ).
#n continuare vom prezenta comanda mail .
Aceasta permite transmiterea
36 mesajelor de po]t[ electronic[
unuia sau mai multor utilizatori de pe acela]i calculator gazd[ sau de pe
alte calculatoare gazd[ din re\eaua la care calculatorul local este conectat,
precum ]i recep\ionarea mesajelor de la utilizatori.
O list[ de indicatori ce pot fi folosi\i cu comanda mail este
urm[toarea: -d permite afi]area de info rma\ii destinate depan[rii
-f permite afi]area unei liste de mesaje din cutia po]tal[
implicit[ mbox . Op\ional se poate specifica numele unui folder @n care
mesajele de po]t[ electronic[ au fost salvate anterior. -s subiect este destinat asocierii unui subiect, la mesajul de
po]t[ electronic[ ce va fi creat
-v este destinat afi][rii de informa\ii detaliate referitoare la
comanda mail
Fiecare mesaj de po]t[ electronic[ are o serie de informa\ii
asociate cu el, ]i anume:
status indic[ starea unui mesaj. Diferitele st[ri posibile,
simbolizate printr-un caracter, sunt:
Caracter Semnifica\ie
M mesajul va fi stocat @n cutia po]tal[ personal[
> indic[ mesajul curent
N mesajul este unul nou
P mesajul va fi p[strat @n cutia po]tal[ sistem
36 #n cazul @n care mesajele de po]t[ nu au fost livrate cu succes se va
recep\iona un mesaj de aten\ionare.
111R mesajul a fost citit
U mesaj nu a fost citit
* mesajul a fost salvat sau scris @ntr-un fi]ier sau un folder
Un mesaj f[r[ stare indic[ faptul c[ mesajul a fost citit dar nu a fost ]ters sau salvat.
number indic[ un identificator numeric ( ID) al mesajului prin
care acesta este referit. sender indic[ utilizatorul care a transmis mesajul.
date indic[ data la care mesajul de po]t[ electronic[ a fost
recep\ionat @n cutia po]tal[.
size indic[ m[rimea mesajului @n num[r de linii ]i num[r de
octe\i.
subject indic[ subiectul mesajului dac[ expeditorul a asociat
un mesaj cu acesta. Comanda mail furnizeaz[ o serie de subcomenzi destinate s[
faciliteze salvarea, ]tergerea, ed itarea ]i transmiterea de mesaje,
subcomenzi ce pot fi introduse de la promptul sistemului de po]t[
electronic[, &. Cele mai des folosite dintre ele, sunt (tabelul 7.2):
Tabelul 7.2
Subcomenzi mail
Subcomand[ Semnifica\ie
q se iese din comanda mail
x similar cu q
! comanda lanseaz[ un shell , execut[ o comand[, ]i revine la
promptul &
cd comut[ @n directorul home al utilizatorului. Op\ional,
se poate specifica un nume de director pentru a comuta @n el.
t afi]eaz[ mesajul curent. Op\ional, se poate specifica
o list[ de mesaje pentru a afi]a mesajele din cadrul ei.
n afi]eaz[ urm[torul mesaj
f afi]eaz[ antetul mesajului curent. Op\ional, se poate
specifica o list[ de mesaje pentru a afi]a toate
antetele acestora.
e permite editarea mesajului curent. Op\ional, se poate
specifica un num[r de mesaj pentru a edita mesajul
112respectiv
d ]terge mesajul curent. Op\ional, se poate specifica o
list[ de mesaje pentru a fi ]terse.
u permite restaurarea mesajelor ]terse
s fisier ad[ug[ mesajul curent, inclusiv antetul, la fisier .
Op\ional, se poate specifica, @ntre s ]i fisier , o
list[ de mesaje pentru a le ad[uga la fisier .
w fisier ad[ug[ mesajul curent, f[r[ antet, la fisier. Op\ional,
se poate specifica, @ntre w ]i fisier , o list[ de
mesaje pentru a le ad[uga la fisier.
pre permite p[strarea mesajelor @n cutia po]tal[ sistem.
Op\ional, se poate specifica o list[ de mesaje pentru a
le p[stra @n cutia po]tal[ sistem.
m lista_adrese creeaz[ sau trimite un mesaj nou la adresele din
lista_adrese
r transmite o reluare c[tre expeditorii ]i receptorii
mesajelor, pentru mesajul curent. Op\ional, se poate specifica o list[ de mesaje pentru a transmite o reluare c[tre expeditor ii ]i receptorii tuturor
mesajelor din list[.
R transmite o reluare numai expeditorilor mesajelor,
pentru mesajul curent. Op\ional, se poate specifica o
list[ de mesaje pentru a trasmite o reluare
expeditorilor mesajelor.
a afi]eaz[ o list[ de aliasuri ]i adresele lor
Exemple: S[ presupunem c[ se dore]te citirea po]tei electronice. Faptul c[
exist[ cel pu\in un mesaj nou, este semn alat de c[tre sistem la momentul
conect[rii utilizatorului, prin urm[torul mesaj:
You have new mail
Pentru a citi po]ta se va executa comanda mail , iar de la
promptul sistemului de po]t[ electronic[, &, se vor putea utiliza
subcomenzile necesare. Intrarea @n promptul & se poate face numai dac[
exist[ mesaje necitite. Altfel, se va primi mesajul sistem:
You have no mail
Presupun`nd c[ exist[ un mesaj ce ur meaz[ a fi citit, pe ecranul
terminalului vor ap[rea informa\ii similare cu urm[toarele:
113 mail
Mail [5.2 UCB] Type? For help “/usr/spool/mail/student”:1message 1new
>N 1 mihai Sat Nov 16 22:49 285/9644
&
Caracterul N indic[ faptul c[ este vorba de un mesaj nou.
Dac[ se p[r[se]te acum comanda mail tast`nd subcomanda q
(quit ), mesajul va fi salvat @n cutia po]tal[ personal[ a utilizatorului
(mbox din directorul s[u home )
37.
Pentru a vedea c[ mesa jul de po]t[ exist[ @n mbox , se folose]te
comanda mail –f , care afi]eaz[ informa\iile urm[toare:
mail –f
Mail [5.2 UCB] Type ? for help “/home/student/mbox”: 1 message
> 1 mihai Sat Nov 23 00:11 162/5175
&
Citirea mesajului anterior se face tast`nd de la promptul &, a
num[rul acestuia ( 1). Se vor afi]a informa\ii similare cu urm[toarele:
& 1
Message 1: From mihai@yahoo.com Fri jan 13:38:06 2003
Date: Fri, 6 Jan 2003 13:38:06 –0600
From:“Mihai Popescu”<mihai@yahoo.com> To: student@central.ucv.ro
Subject: Testare comanda mail
Aceasta este o testare a comenzii mail &
#n acest exemplu utilizatorul student (a c[rui adres[ este
afi]at[, student@central.ucv.ro ) a recep\ionat un mesaj de po]t[
electronic[ de la un alt utilizator, mihai . Mesajul este primul din coada
de mesaje ]i este stocat @n /home/student/mbox . Sunt afi]ate
numele ]i identificatorul emitentului ( "Mihai
Popescu”<mihai@yahoo.com> ), ziua din s[pt[m`n[, data ]i timpul
37 Pentru a salva mesajul de po]ta @ntr-o alt[ cutie po]tal[ (un folder) se va
executa urm[toarea subcomand[:
& save 1 /home/mihai/director1/fisier1
Ea va crea din primul mesaj fi]ierul fisier1 , @n directorul
/home/mihai/director1 .
114la care mesajul a fost trimis, subiectul ]i con\inutul acestuia.
Pentru a a crea ]i trimite mesaje de po]t[ electronic[ altor
utilizatori se va executa subcomanda m, dup[ cum urmeaz[:
& m mihai
Subject: Testare comanda mail
Acesta este un test al comenzii mail
Cc:
&
Marcarea termin[rii edit[rii con\inutului mesajului se face prin
tastarea combina\iei de taste <Ctrl><d> . #n situa\ia @n care se dore]te
ca acela]i mesaj s[ fie transmis mai multor utilizatori, se vor specifica @n
c`mpul Cc: (Copy carbon ), adresele de po]t[ electronic[ ale acestora.
Exerci\ii
1. Av`nd deschis[ o sesiune ftp s[ se afi]eze numele
directorului de lucru ]i s[ se rede numeasc[ un fi]ier existent @n acest
director.
2. Av`nd deschis[ o sesiune ftp s[ se modifice permisiunile de
acces pe un fi]ier existent @n director ul de lucru astfel: pentru proprietar,
scriere ]i execu\ie, pentru grup, citire, pentru others , citire ]i scriere.
3. Av`nd deschis[ o sesiune ftp s[ se ]tearg[ un subdirector din
directorul de lucru.
4. S[ se transmit[ un mesaj de po]t[ electronic[ utilizatorului
stud1 , ]i s[ se explice structura antetului mesajului.
5. S[ se afi]eze toate mesajele de po]t[ electronic[ recep\ionate
de utilizatorul stud1 ce se afl[ stocate @n mbox , dup[ care s[ se ]terag[
3 dintre ele.
6. S[ se afi]eze numai antetele primelor cinci mesaje din m box.
7. S[ se transmit[ o reluare a mesajului primit de utilizatorul
stud1 , expeditorului acestuia .
115LUCRAREA NR. 8
Sistemul de fi]iere al UNIX
Un sistem de fi]iere reprezint[ modul de or ganizare ]i exploatare
a informa\iilor stocate pe un suport de memorie extern[ @n vederea acces[rii ]i prelucr[rii lor de c[tre sistemul de operare. Orice sistem de operare trebuie s[ aib[ propriu s[u sistem de
fi]iere, de aceea exist[ mai multe tipuri de astfel de sisteme, ]i anume:
– sistemul FAT – pentru MS-DOS
– sistemul VFAT32 – pentru Windows95 OSR2
– sistemul NTFS – pentru Windows NT
– sistemul ext2fs – pentru Linux
Din punctul de vedere al utilizatorului, sistemele de fi]iere
prezint[ o organizare bazat[ pe conceptele de fi]ier ]i director.
Fi]ierele sunt entit[\i care @ncapsu leaz[ informa\ia de un anumit
tip, iar directoarele grupeaz[ @n interior ul lor fi]iere ]i alte directoare.
Deci sistemul de fi]iere are o organizare ierarhic[, fi]ierele fiind
grupate @n directoare care sunt struct urate pe mai multe niveluri @ntr-o
structur[ arborescent[. Directorul de nivel cel mai @nalt, din cadrul acestei arborescen\e, se nume]te director r[d[cin[ , ]i este simbolizat prin
caracterul /.
Orice fi]ier sau director poate fi identificat prin numele s[u indicat ca nume de cale, fie @n mod ab solut, fa\[ de directorul r[d[cin[,
fie @n mod relativ, fa\[ de directorul curent.
Observa\ie:
Sistemul de operare UNIX impune restric\ia ca un singur fi]ier s[
nu poat[ s[ se @ntind[ peste mai mult de un sistem de fi]iere, dar un
sistem de fi]iere poate avea mai mult de un fi]ier @n cadrul s[u.
Parti\ii
Un sistem de fi]iere este @n general creat pe hard disc. Sub
sistemul de operare UNIX este posibil[ instalarea mai multor sisteme de
116fi]iere, fiecare dintre acestea fiind plas at @ntr-o zon[ proprie pe hard disc.
Aceste zone @n care este subdivizat hard discul se numesc parti\ii38.
La nivel utilizator, fiecare parti\ie se comport[ ca un disc de sine
st[t[tor memor`nd un sistem de fi]iere. Informa\ia referitoare la parti\ii se memoreaz[ la @nceputul discului, @n a]a-numita tabel[ de parti\ii . Aceasta
con\ine 4 intr[ri (c`te una pentru fiecare parti\ie posibil[) @n care sunt
memorate pozi\iile, dimensiunile ]i tipurile parti\iilor de pe disc. Cele 4
parti\ii se numesc parti\ii primare, fiind posibil ca @n interiorul oric[reia dintre ele s[ se creeze c`te o nou[ tabel[ de parti\ii, referind parti\ii care
fizic se afl[ @n interiorul parti\iei curente ]i care se numesc parti\ii
extinse. Sistemul de operare UNIX necesit[ prezen\a a cel pu\in o parti\ie.
Parti\ia necesar[ men\ionat[ an terior se nume]te parti\ie root . #n cadrul
ei rezid[ software-ul de sistem ]i fi]ierele de configurare. Deoarece parti\ia root nu are menirea de a p[stra datele utilizatorilor, este
necesar[ crearea de parti\ii separate pentru directoarele home ale
utilizatorilor, pentru fi]ierele temporare, ].a. #n UNIX , echipamentelor periferice le sunt asociate fi]iere de
dispozitiv, ceea ce permite utilizarea ]i @n cazul acestora, a comenzilor ce
sunt folosite pentru fi]ierele obi]nuite . Acest lucru este valabil ]i pentru
hard discuri. Ca urmare, perntru identificarea lor se folose]te urm[toarea schem[, ce este func\ie de tipul unit[ \ii de control la care s-a conectat
hard discul.
Astfel, sub sistemul Linux , hard discurile conectat la o unitate
de control IDE, sunt denumite:
/dev/hd[unitate_hard_disc]
Fiecare unitate de hard disc IDE este identificat[ printr-o liter[.
Astfel, discul master (primul) din cadrul primei unit[\i de control este
a, cel de-al doilea disc ( slave ) din cadrul aceleia]i unit[\i de control
este b. Primul disc ata]at celei de a doua unit[\i de control este c, ].a.m.d.
Pentru a referi parti\iile create pe astfel de hard discuri, se
utilizeaz[ numere de ordine. De exempl u, cea de a treia parti\ie a unit[\ii
de hard disc slave de pe prima unitatea de control este referit[:
/dev/hdb3 .
38 Fiecare parti\ie este o mul\ime continu[ de blocuri. Un bloc este format
dintr-un sigur sector (cum este cazul la dischete) sau din mai multe sectoare
(cazul hard discurilor).
117 Unit[\ile de hard disc conectate unei unit[\i de control SCSI
folosesc aceea]i schem[ de identificare, cu excep\ia c[ @n loc s[ utilizeze
drept prefix construc\ia /dev/hd , folosesc /dev/sd , urmat[ de litera
corespunz[toare. Referirea parti\iilor este similar[.
Astfel, c`nd ne referim la a doua parti\ie de pe primul hard disc
ata]at unei unit[\i de control SCSI , vom folosi specifica\ia:
/dev/sda2 . Atunci c`nd dorim s[ ne referim la @ntregul disc, vom
specifica toat[ informa\ia cu excep\ia num[rului asociat parti\iei. De exemplu, pentru a ne referi la @ntregul disc master conectat pe prima
unitatea de control SCSI , vom utiliza specifica\ia: /dev/sda .
#n cele dou[ scheme de identificare anterioare, /dev este numele
directorului apar\in`nd arborescen\ei standard UNIX , ce con\ine fi]ierele
de dispozitiv asociate echipamentelor periferice din cadrul sistemului.
Crearea unui sistem de fi]iere sub Linux
Crearea unui sistem de fi]iere se realizeaz[ @ntr-o parti\ie
precizat[. Pentru a crea un sistem de fi]ier de tip ext2fs pentru
sistemul Linux , se utilizeaz[ comanda:
mkfs [indicatori] tip_sist_de_fis nume_partitie
De exemplu, vom crea un sistem de fi]iere pe a doua parti\ie a
discului had folosind comanda:
mkfs -t ext2fs /dev/hda2
Indicatorul -t, @n acest caz, specific[ tipul sistemului de fi]iere.
Pentru a putea folosi o dische t[ @n mod specific cu sistemul Red
Hat Linux , va fi necesar[ crearea pe ace asta a unui sistem de fi]iere
numit ext2fs (Second Extended filesystem )
39. Sistemul
respectiv este cel mai folosit tip de sistem de fi]iere Linux .
Se utilizeaz[ comanda:
mke2fs -c /dev/fd0 1440
Sistemul de fi]iere se va crea pe o dischet[ de 1, 44MB ]i 3,5”,
iar indicatorul –c va determina, ca @nainte de crearea sistemului de
fi]iere, s[ se efectueze o verificare a dischetei @n ceea ce prive]te
existen\a blocurilor defecte.
#n Linux , /dev/fd0 se refer[ la prima unitate de dischet[.
39 Sistemul poate fi creat inclusiv pe o parti\ie a discului hard.
118Componentele sistemului de fi]iere
No\iunea de baz[ ce st[ la baza implement[rii sistemului de
fi]iere este cea de bloc. M[rimea unui disc hard este m[surat[ @n num[r
de blocuri fizice, acestea av`nd de regul[ 512 octe\i, caracteristica @n
cauz[ fiind definit[ de c[tre unitatea de control a hard discului. Sistemele
UNIX grupeaz[ adesea mai multe blocuri fizice @ntr-un bloc logic mai
mare. Exist[ astfel sisteme de fi]iere care asambleaz[ 2, 4 sau 8 blocuri
fizice @ntr-un acela]i bloc logic. De]i sistemele de fi ]iere cunosc forme foarte diverse, la nivel
mai jos dec`t fi]ierele individuale, toate au acelea]i componente, ]i
anume: blocul de boot , superblocul, lista de i-nod -uri, blocurile de
date (vezi figura 8.1).
Fig. 8.1 Componentele sistemului de fi]iere
Blocul de boot este primul bloc ( 0) al fiec[rui sistem de fi]iere.
El con\ine un program de lansare ]i ini\ializare a ansamblului sistem. Nu este accesibil nici unui program utilizator. #n general numai primul sistem
de fi]iere de pe discul hard con\in e acest program de lansare, celelalte
blocuri de boot fiind vide. Sub UNIX , blocul de boot are, de regul[, o
m[rime de 2048 de caractere.
Superblocul, con\ine informa\ii destinate administr[rii sistemului
de fi]iere, ]i anume: m[rimea total[ a sistemului de fi]iere, @n blocuri;
num[rul de blocuri libere @n cadrul sistemului de fi]iere; lista blocurilor libere disponibile pentru sistemul de fi]iere; indexul urm[torului bloc
liber @n cadrul listei de blocuri libere; num[rul de blocuri rezervate pentru blocdeboot
superbloc
listai-nod -uri
blocuri de datenr. bloc 0
1
2
700
14000
119i-nod -uri; num[rul de i-nod -uri libere; lista i-nod -urilor libere ale
sistemului de fi]iere; indexul urm[torului i-nod liber din lista de
disponibilit[\i; numele sistemului de fi]ier e; data instal[rii sistemului de
fi]iere; ini\iala driver-ului unde se af l[ sistemul de fi]iere; informa\ii
referitoare la z[vor`rea urm[torului bloc sau i-nod liber; informa\ii ce
specific[ modificarea sau nu a sistemului de fi]iere.
Datorit[ importan\ei pe care o are, @n cadrul anumitor implement[ri particulare pot exista mai multe superblocuri, aceasta @n scopul cre]terii ]anselor de a g[si un superbloc valid @n cazul @n care pe
disc a ap[rut un defect hardware.
Un i-nod reprezint[ o structur[ de date ce con\ine toate
informa\iile de identificare ale unui fi]ier
40, cele mai multe dintre acestea
fiind folosite de c[tre nucleul sistemului de operare. Pentru fiecare fi]ier
existent fizic exist[ un i-nod . Acestea sunt organizate sub form[ de
liste, fiecare i-nod posed`nd un num[r care @i este propriu, numit num[r
i-nod . Pentru fiecare sistem de operare este indicat[ implicit sau
explicit care este m[rimea listei de i-nod -uri. Primul i-nod al
sistemului de operare r[m`ne liber ]i neutilizat. Al doilea reprezint[ directorul r[d[cin[ al sistemului de fi]iere.
Informa\iile con\inute @ntr-un i-nod sunt: numele proprietarului
fi]ierului, num[rul grupului la care acest fi]ier apar\ine, tipul de fi]ier
41,
drepturile de acces (care formeaz[ @mpreun[ cu tipul de fi]ier ceea ce se
nume]te file mode ), m[rimea @n octe\i a fi]ierului, datele ]i orele de
acces (data ]i ora ultimei modific[ri, data ]i ora ultimului acces la fi]ier,
data ]i ora ultimei modific[ri a i-nod -ului), num[rul de leg[turi pe acel
fi]ier, tabela de adrese a blocurilor de date.
Observa\ie:
De notat c[ i-nod -ul nu con\ine numele fi]ierului. Aceast[
informa\ie este p[strat[ @n fi]ierul director.
Blocurile de date ocup[ restul spa\iului disponibil sistemului de
fi]iere pe discul hard, dup[ lista de i-nod -uri. Pentru cre]terea eficien\ei
cu care sunt gestionate blocurile de date, anumite sisteme de fi]iere
40 #n func\ie de tipul de sistem de fi]iere, i-nod -ul poate con\ine p`n[ la
peste 40 de informa\ii diferite.
41 Tipul de fi]ier 0 indic[ faptul c[ i-nod -ul este vid sau neutilizat.
120folosesc h[r\i de blocuri ocupate ]i de blocuri libere. #n cadrul unei astfel
de h[r\i, pentru fiecare bloc este rezervat un bit. Dac[ bitul respectiv are
valoarea 1, atunci blocul este considerat ca fiind ocupat, iar dac[ bitul are
valoarea 0, blocul este liber.
Comenzi privind gestiunea sistemului de fi]iere
df
Aceast[ comand[ df este folosit[ pentru a vizualiza atributele
tuturor sistemelor de fi]iere specificate. Tipic, atributele afi]ate sunt urm[toarele:
filesystem – numele sistemului de fi]iere
kbytes – m[rimea exprimat[ @n KB a sistemului de fi]iere
used – m[rimea spa\iului folosit
avail – m[rimea spa\iului r[mas disponibil
iused – num[rul de i-nod -uri folosite
capacity – procentul din capacitatea total[ folosit[
%iused – procentul din i-nod -uri deja folosite
mounted on – numele directorului de nivel cel mai @nalt
Dac[ suntem @n directorul nostru implicit ]i execut[m comanda urm[toare:
df .
aceasta va retura pe ecranul monitorului informa\ii similare cu
urm[toarele:
Filesystem Total KB free %used iused %iused Mounted on
/dev/hd1 151552 41828 72% 5534 14% /home
ceea ce @nseamn[ c[ directorul nostru implicit se afl[ @n sistemul de
fi]iere numit /dev/hd1 iar directorul de nivel cel mai @nalt din cadrul
acestui sistem de fi]iere se nume]te /home .
Pentru a ob\ine o list[ a tuturor sistemelor de fi]iere din cadrul
sistemului, @mpreun[ cu atributele lor, se va executa comanda df f[r[ nici
un argument.
du
Comanda du permite afi]area num[rului de blocuri de pe disc
utilizate de c[tre fi]ierel e ]i subdirectoarele con\inute @ntr-un director
specificat.
121 De exemplu, dac[ din directorul nostru curent (ce con\ine mai
multe subdirectoare) am executat una din comenzile urm[toare:
du
sau
du .
putem ob\ine un rezultat similar cu urm[torul:
409 ./doc
945 ./lib
68 ./man 60 ./m4
391 ./src
141 ./intl 873 ./po
3402 .
Prima coloan[ indic[ num[rul de blocuri de pe disc folosite de
c[tre un subdirector, iar cea de a doua coloan[ indic[ numele
subdirectorului ce este evaluat. La final este indicat num[rul total de
blocuri utilizate de subdirectoarele respective. Pentru a vedea c`\i KB consum[ fiecare subdirector se va utiliza
@n sintaxa comenzi indicatorul -k.
find
Scopul acestei comenzi este de a g[si fi]iere sau modele de
fi]iere. Sintaxa ei este urm[toarea:
find nume_director parametri
unde
director este directorul unde va @ncepe c[utarea, iar parametri
definesc ceea ce este de c[utat. Ce i mai uzuali dintre parametri sunt:
-name specific[ numele fi]ierului42
-print implicit setat pe on, afi]eaz[ rezultatele execu\iei
comezii find
-exec execut[ comanda specificat[ asupra fi]ierelor g[site ce
corespund parametrului -name
-atime n fi]ierul a fost ultima oar[ accesat cu n zile @n urm[
-mtime n fi]ierul a fost ultima oar[ modificat cu n zile @n urm[
42 Pot fi utiliza\i ]i specificatori pentru nume de fi]ier global
(wildcards ), dar @n acest caz ei vor tr ebui inclu]i @ntre ghilimele.
122 -size n[bckw] fi]ierul utilizeaz[ n unit[\i de spa\iu, unit[\ile
fiind specificate prin:
b pentru blocuri de 512 octe\i
c pentru octe\i
k pentru KB
w pentru cuvinte de doi octe\i
Exemple:
find / -name test -mtime +7 -print
Aceast[ comand[ @ncepe c[utarea din directorul r[d[cin[ ]i caut[
toate fi]ierele ce poart[ numele test care nu au fost modificate @n
ultimele ]apte zile, afi]`ndu-le.
find /home -size +500k -print
Caut[ toate fi]ierele din directorul /home @n jos, ce au
dimensiunea mai mare de 500 KB, ]i le afi]eaz[.
fsck
Periodic este necesar[ verificar ea integrit[\ii fiec[rui sistem de
fi]iere pentru a vedea dac[ structura sa este corect[. Pentru realizarea
acestei opera\ii UNIX pune la dispozi\ie un utilitar sofisticat numit fsck .
fsck ruleaz[ @n cinci faze, fie care dintre ele baz`ndu-se pe
verific[rile ]i corec\iile realizate de fazele anterioare. Opera\ia de verificare a sistemului de fi]iere @ncepe cu verificarea
superblocului. Continu[ apoi cu bloc urile de pe disc alocate, numele de
c[i, conectivitatea directoarelor, num[rarea referin\elor leg[tur[, lista blocurilor libere ]i a i-nod -urilor.
Apelarea acestui utilitar se face tast`nd @n linia de comand[:
fsck
Dac[ se dore]te verificarea unui sistem de fi]iere specific, se va
introduce @n sintaxa comenzii, numele de dispozitiv al acestuia. De exemplu:
fsck /dev/hda1
Exerci\ii
1. S[ se vizualizeze atributele tuturor sistemelor de fi]iere de pe
hard disc.
2. S[ se afi]eze num[rul de blocuri de pe hard disc utilizate de
c[tre fi]ierele ]i subdirectoarele con\inute @n directorul home .
123LUCRAREA NR. 9
Tipuri de fi]iere
#n cadrul sistemului de fi]iere al UNIX exist[ mai multe tipuri de
fi]iere. Acestea sunt:
– fi]iere normale (obi]nuite)
– directoare (fi]iere catalog)
– leg[turi hard
– leg[turi simbolice
– socket -uri
– conducte cu nume (fi]iere FIFO )
– fi]iere de dispozitiv (fi]iere speciale)
Fi]iere normale
Un fi]ier normal este un fi]ier permanent, ce este privit de c[tre
sistemul de operare ca un ]ir de octe\i f[r[ o organizare logic[ special[, ]i
a c[rui structur[ intern[ este irelevant[ din punctul de vedere al
administratorului de sistem.
Un astfel de fi]ier poate con\ine informa\ie binar[ (@n cazul unui fi]ier @n format executabil), sau linii de text separate prin caracterul linie
nou[ (012
8), structurarea sa logic[ re venind exclusiv @n sarcina
programatorului. O comand[ ls –l va afi]a @n cazul unui fi]ier normal, o
informa\ie similar[ cu urm[toarea:
-rw––- 1 student ise 42 May 12 13:09 fistest
Se observ[ c[ primul caracter afi]at este -. Acesta semnific[
faptul c[ fi]ierul respectiv este un fi]ier normal.
Directoare
Sunt fi]iere de un tip special ce con\in o list[ de alte fi]iere.
Informa\iile din lista respectiv[ fac referire la numele ]i loca\iile fi]ierelor, m[rimea lor, timpul aferent cre[rii ]i modific[rii acestora. Directoarele pot ele @n]ile s[ c on\in[ subdirectoare, care la r`ndul
lor pot s[ con\in[ alte subdirectoare, ].a.m.d., form`nd @n acest fel o
124structur[ ierarhic[ (arborescent[). Se poate aprecia deci c[ fi]ierele
director reprezint[ o modalitate de a structura logic sistemul de fi]iere.
Un director poate fi citit numai de c[tre sistemul de operare
UNIX sau de c[tre programe special scrise pentru a efectua procesarea
acestuia.
Cu ajutorul comenzii ls –l se pot identifica directoarele
datorit[ apari\iei caracterului d ce este plasat @naintea permisiunilor de
acces:
drwx–– 2 student ise 512 May 12 13:08 public
#n fiecare director, se vor g[si @ntotdeauna dou[ intr[ri: . ]i..
. se refer[ la directorul curent, iar .. se refer[ la directorul cu
un nivel mai sus (uneori numit ]i director p[rinte).
De]i un director este tratat de c[tre UNIX ca un fi]ier, el posed[
anumite caracteristici speciale. As tfel, un director are cel pu\in dou[
nume. De exemplu, dac[ directorul curent este /home/mihai ]i am
creat un subdirector numit testdir , vor fi create dou[ leg[turi:
/home/mihai/testdir
]i
/home/mihai/testdir/.
Intrarea /home/mihai/testdir este creat[ @n directorul
/home/mihai , iar intrarea /home/mihai/testdir/. este creat[
@n directorul /home/mihai/testdir .
#nt`i, intrarea /home/mihai/testdir este creat[ ca un
director gol ]i apoi este legat[ la /home/mihai/testdir/.
Cele dou[ leg[turi exist[ pe durat a existen\ei directorului ]i sunt
]terse odat[ cu acesta.
Leg[turi la fi]iere
#n anumite circumstan\e este necesar43, de a furniza nume
alternative pentru un acela]i fi]ier.
Acest lucru poate fi realizat prin legarea unui nume de fi]ier la altul, o leg[tur[ fiind o modalitate de a furniza un alt nume unui acela]i
43 De exemplu, dac[ dorim s[ permite m accesul altor utilizatori, la
propriile noastre fi]iere, f[ r[ ca pentru aceasta s[ le punem la dispozi\ie o copie a
fi]ierelor respective.
125fi]ier44. Legarea unui fi]ier la un alt nume nu implic[ duplicarea
con\inutului fi]ierului respectiv.
Este posibil de a lega un fi]ier la un alt nume @n cadrul aceluia]i
director sau la acela]i nume @n cadrul unui alt director. Orice opera\ie care se execut[ asupra fi]ierului leg[tur[ (mai
pu\in ]tergerea) @]i va avea efectul de fapt asupra fi]ierului indicat de
leg[tur[. Dac[ este solicitat[ ]tergere a, efectul depinde de tipul leg[turii
respective.
Leg[turi hard (hard links )
Acest tip de leg[tur[ creeaz[ o referin\[ (un pointer) c[tre un
fi]ier deja existent, f[r[ duplicarea c on\inutului fi]ierului respectiv. Deci,
numele original al fi]ierului ]i numele fi]ierului leg[tur[ fac referire c[tre
aceea]i adres[ fizic[ (acela]i i-nod ).
Ca urmare, la afi]area con\inutul ui unui director acesta apare c[
ar con\ine dou[ fi]iere identice, lucru ce determin[ sistemul s[ le trateze
@n consecin\[.
Exist[ dou[ limit[ri importante al e unei leg[turi hard, ]i anume:
un director nu poate avea o leg[tur[ ha rd, ]i o astfel de leg[tur[ nu poate
exista peste mai multe sisteme de fi]iere deoarece ea partajeaz[ un i-
nod.
Este posibil de a ]terge numele fi]ierului original f[r[ a ]terge
numele fi]ierului leg[tur[. Sub aceste ci rcumstan\e, fi]ierul nu este ]ters,
dar intrarea @n director a fi]ierului original va fi ]tears[ iar contorul num[rului de leg[turi este decrementat cu 1. Blocurile de date ale
fi]ierului original sunt ]terse atunci c`nd contorul num[rului de leg[turi
devine zero.
Leg[turi simbolice (symbolic links )
Leg[turile simbolice sunt de fapt fi]iere distincte, marcate cu un
cod special, care au ca ]i con\inut numele complet al fi]ierului indicat. Exist[ deci dou[ fi]iere: unul este fi]ierul original, ]i altul este fi]ierul leg[tur[ ce con\ine numele fi]ierului original.
Spre deosebire de o leg[tur[ ha rd, o leg[tur[ simbolic[ poate s[
44 Practic, o leg[tur[ este v[zut[ de c[tre utilizator ca un fi]ier cu un nume
propriu, dar care @n realitate face refe rire la un alt fi]ier de pe disc.
126existe peste mai multe sisteme de fi]iere ]i poate fi folosit[ pentru a lega
at`t directoare c`t ]i fi]iere.
Dezavantajul unui leg[trui simbolice este c[ pentru ea (fiind
fi]ier) trebuie creat un i-nod separat ]i, @n plus, ocup[ spa\iu pe disc
prin con\inutul ei.
}tergerea unei astfel de leg[turi nu afecteaz[ fi]ierul original, dar
dac[ acesta este ]ters, leg[tura simbolic[ va face referire c[tre un fi]ier care nu mai exist[. Pentru a genera leg[turi hard sau simbolice la fi]iere, se
utilizeaz[ o comand[ sepcific[, numit[ ln. Sintaxa ei general[ este:
ln nume_fisier nume_legatura
unde nume_fisier este fi]ierul ce exist[ deja, iar nume_legatura ,
este numele fi]ierului leg[tur[ creat. Implicit comanda creeaz[ o leg[tur[ hard.
De exemplu, dac[ @n directorul curent exist[ un fi]ier numit
test1 , ]i tast[m comanda ls -l , se vor afi]a urm[toarele informa\ii:
-rw––- 1 stud1 ise 42 May 12 13:04 test1
Pentru a lega hard fi]ierul test1 la fi]ierul test2 @n directorul
curent, vom executa comanda:
ln test1 test2
Tast`nd din nou comanda ls –l , se vor afi]a informa\iile:
-rw––- 2 stud1 ise 42 May 12 13:04 test2
-rw––- 2 stud1 ise 42 May 12 13:04 test1
Apar deci dou[ fi]iere care au aceea]i m[rime, 42. Totodat[
num[rul de leg[turi (coloana a doua), a fost incrementat de la 1 la 2.
Tast`nd comanda ls –il , se vor afi]a informa\iile:
9180 -rw––- 2 stud1 ise 42 May 2 8:04 test2
9180 -rw––- 2 stud1 ise 42 May 2 8:04 test1
Se observ[ c[ ambele nume de fi]ier fac referire c[tre un acela]i
i-nod , 9180 . Este deci vorba de dou[ nume care fac referire c[tre un
acela]i fi]ier. Unul dintre indicatorii cei mai utiliza\i ai comenzii ln este -s,
folosirea acestuia pemi\`nd generar ea unei leg[turi simbolice. Formatul
comenzii ln, @n acest caz, este:
ln -s nume_fisier nume_legatura
De exemplu, pentru a crea o leg[tur[ simbolic[ la fi]ierul test1
@n directorul curent, se va tasta comanda urm[toare:
ln –s test1 test2
127 Aceasta creeaz[ un fi]ier test2 legat, care va con\ine numele
lui test1 .
Tast`nd o comand[ ls -l @n directorul curent, se vor afi]a
informa\iile:
-rw––- 2 stud1 ise 42 May 12 13:04 test1
lrw––- 1 stud1 ise 42 May 12 13:04
test2Ætest1
Fi]ierul test2 apare marcat ca fiind o leg[tur[ simbolic[ @n
cadrul sistemului de fi]iere.
Socket -uri
Un socket nu este @n fapt un fi]ier real, ci un mecanism folosit
de UNIX pentru a comunica @ntre dou[ calculatoare gazd[, utiliz`nd
pentru aceasta porturi re\ea.
Fi]ierele socket sunt identificate de c[tre set[rile lor de
permisiuni ce @ncep cu caracterul s. O comand[ ls –l asupra unui fi]ier
socket afi]eaz[ o informa\ie similar[ cu urm[toarea:
srwxrwxrwx 1 root admin 0 May 10 14:38 X0
Pentru ]tergerea unui fi]ier socket se va folosi comanda rm.
Conducte cu nume (named pipes )
O conduct[ cu nume este un fi]ier temporar ce permite
comunica\ia @ntre procese prin mecanismul pipe (conduct[).
Astfel, procesul emitent scrie date @n conducta cu nume, iar
procesul receptor cite]te datele din aceasta. Procesarea datelor din
conducta cu nume se face pe baze FIFO .
Existen\a unui astfel de fi]ier este limitat[ la intervalul de timp @n
care procesele comunic[. Recunoa]terea conductelor cu nume se face datorit[ caracterului
p cu care @ncepe informa\ia aferen t[ permisiunilor lor de acces,
informa\ie afi]at[ la executarea unei comenzi ls – l :
prw––- 1 root admin 0 May 12 22:02 nume_conducta
Proces 1 Proces 2
Scrie Cite]te fi]ier pipe
128 Fi]iere de dispozitiv
O particularitate care difere n\iaz[ sistemul de operare UNIX de
alte sisteme, o constituie asocierea dispozitivelor periferice cu fi]iere de
dispozitiv (fi]iere speciale). Fi]ierele de dispozitiv sunt citite/scrise, din punctul de vedere al utilizatorului, ex act ca ]i cele normale, rezultatul
unei astfel de opera\ii fiind activarea driver-ului asociat perifericului
respectiv. Un program de aplica\ie poate deci utiliza aceea]i sintax[ pentru a accesa un fi]ier normal sau un fi]ier de dispozitiv. Fie, de exemplu, comanda de copiere a fi]ierului test.p :
cp test.p /usr/diploma/copie.p
Prin lansarea acestei comenzi se realizeaz[ copierea fi]ierului
test.p @n fi]ierul destina\ie /usr/diploma/copie.p . Dac[
numele fi]ierului destina\ie se @nlocuie]te cu un nume de fi]ier de dispozitiv, de exmplu imprimanta ( /dev/lp0 ), ob\inem o listare a
fi]ierului te st.p .
cp test.p /dev/lp0
Unui dispozitiv periferic @i este asociat cel pu\in un fi]ier de
dispozitiv, care va con\ine @ntotd eauna informa\ii despre driver-ul
(programul de comand[) al acelui periferic. Toate fi]ierele de dispozitiv rezid[ @n directorul /dev .
Spre exemplu, fiec[rei unit[\i de disc @i corespunde c`te un fi]ier
@n directorul /dev . #n Linux , primei unit[\i de dischet[ @i corespunde
fi]ierul /dev/fd0 , celei de-a doua /dev/fd1 , ].a.m.d. Primei unit[\i
de hard disc cu interfa\[ IDE, din sistem, @i corespunde fi]ierul special
/dev/hda , iar primei sale parti\ii, fi]ierul /dev/hda1 . A doua parti\ie
de pe primul disc are ca ]i corespondent fi]ierul /dev/hda2 , a doua
unitate de hard disc IDE este referit[ ca fiind /dev/hdb , ].a.m.d.
#n func\ie de unitatea de informa\ie pe care o
transmit/recep\ioneaz[ la un moment dat, dispozitivele periferice se @mpart @n dou[ tipuri:
– dispozitive orientate pe caractere (terminale, imprimante)
– dispozitive orientate pe blocuri (unit[\i de disc)
Evident, func\ie de aceast[ carac teristic[, dispozitivelor @n cauz[
le corespund fi]iere de dispozitiv specifice.
#n cadrul unui sistem pot exista mai multe dispozitive periferice de acela]i tip. Pentru a distinge @ntre ele, UNIX -ul asociaz[ fiec[rui
dispozitiv, dou[ numere:
129- un num[r major, care indic[ tipul dispozitivului (de exemplu,
imprimanta)
– un num[r minor, care indic[ al c`telea dispozitiv periferic
este @n clasa de dispozitive de acela]i tip (de exemplu, a doua
imprimant[)
Fi]ierele de dispozitiv caracter se g[sesc localizate @n directorul
/dev ]i furnizeaz[ un mecansim pentru comunicarea, un caracter la un
moment dat, cu drivere-le dispozitivelor din sistem.
Informa\ia afi]at[ de o comand[ ls –l @n cazul unui astfel de
fi]ier, este similar[ cu urm[toarea:
crw-rw-rw- 1 root wheel 21, 4 May 12 13:40
ptyp4
Se observ[ c[ permisiunile de acces @n acest caz @ncep cu
caracterul c.
Fi]ierele de dispozitiv bloc se g[sesc, de asemenea, localizate @n directorul /dev , fiind folosite pentru a comunica cu drivere-le de
dispozitiv. Ele sunt asociate @ns[, unor dispozitive periferice ce transfer[
blocuri mari de date la un moment dat (cum este hard discul).
Aceste fi]iere sunt identificate de c[tre caracterul b ce apare @n
fa\a permisiunilor de acces, atunci c`nd se tasteaz[ comanda ls –l :
brw––- 2 root staff 16, 2 Jul 29 2006
fd0c
Crearea fi]ierelor de dispozitiv, bloc sau caracter, c`t ]i a
conductelor cu nume, se poate realiza utiliz`nd comanda mknod .
Sintaxa acestei comenzi este:
mknod fisier_dispozitiv b|c|p|u major minor
unde:
b semnific[ faptul c[ fisier_dispozitiv este un fi]ier
asociat unui dispozitiv bloc
c ]i u semnific[ faptul c[ fisier_dispozitiv este un fi]ier
asociat unui dispozitiv caracter p semnific[ faptul c[ fisier_dispozitiv este un fi]ier
asociat unei conducte cu nume
Unul dintre aceste argumente trebuie s[ fie prezent @n sintaxa
comenzii. Este necesar[, de asemenea, specificarea numerelor major ]i minor (cu excep\ia cazului c`nd se creeaz[ o conduct[ cu nume).
}tergerea fi]ierelor create cu comanda mknod se face cu ajutorul
comenzii rm.
130Exerci\ii
1. Care sunt tipurile de fi]iere existente @n sistemul de fi]iere al
UNIX ?
2. Ce sunt fi]ierele de dispozitiv ? 3. S[ se determine tipul fi]ierelor situate @n directorul /dev .
4. Ce sunt leg[turile la fi]iere ?
5. S[ se creeze o leg[tur[ hard la un fi]ier numit proba1 ,
numele fi]ierului leg[tur[ creat fiind proba2 . Ce valoare are contorul
num[rului de leg[turi?
6. Se va ]terge fi]ierul proba1 . Ce valoare are contorul
num[rului de leg[turi? Con\inutul fi]erului proba1 mai poate fi
accesat? Dar con\inutul fi]ierului proba2 ?
7. S[ se creeze o leg[tur[ soft la un fi]ier numit user1 , numele
fi]ierului leg[tur[ creat fiind user2 . Ce valoare are contorul num[rului
de leg[turi ?
8. Se va ]terge fi]ierul user1 . Ce valoare are contorul
num[rului de leg[turi? Con\inutul fi]erului user1 mai poate fi accesat ?
Dar con\inutul fi]ierului user2 ?
131LUCRAREA NR. 10
Montarea sistemelor de fi]iere
#n UNIX , sistemele de fi]iere nu sunt disponibile p`n[ c`nd nu
sunt montate @n sistemul de fi]ier e de baz[, aferent parti\iei r[d[cin[,
parti\ie ce con\ine directorul r[d[cin[ (directorul de cel mai @nalt nivel) al structurii arborescente de directoare.
Deci, @n acest context, montarea unui sistem de fi]iere @ntr-o
structur[ de directoare @nseamn[ opera\i a de legare a sistemului de fi]iere
de un director al unei alte parti\ii, @n vederea acces[rii. Ca urmare, dup[
montare, @n directorul respectiv se va afla @ntreaga structur[ de fi]iere ]i
directoare de pe sistemul de fi]iere montat. Mecanismul @n cauz[ este deos ebit de puternic, deoarece ofer[
posibilitatea de a avea o structur[ de directoare unitar[, care grupeaz[
fi]iere de pe mai multe parti\ii sau disc uri. Dac[ se adaug[ ]i sistemul de
fi]iere de re\ea NFS (Network File System ), aceast[ structur[ de
directoare va putea con\ine ]i sisteme de fi]iere montate de la distan\[ (de
pe alt[ ma]in[).
Ini\ial, la momentul @nc[rc[rii sistemului de operare (secven\a de boot ) singura parti\ie la care se are a cces imediat este parti\ia r[d[cin[.
Pentru ca @ntregul sistem de fi]iere cu parti\ii multiple s[ fie accesibil este
necesar ca celelalte parti\ii
45 s[ fie montate la aceast[ parti\ie r[d[cin[.
Acest lucru se realizeaz[ @n m od automat pe durata procesului de
boot , prin intermediul comenzilor specifice de montare existente @n
fi]ierele de startup , care vor determina montarea tuturor sistemelor de
fi]iere specificate @n fi]ierul /etc/fstab . Fiecare sistem de fi]iere care
este montat pe durata procesului de boot are o intrare ce specific[
numele dispozitivului unde acesta se afl[, punctul de montare, tipul
sistemului de fi]iere ]i eventual anumite op\iuni.
#nainte de a realizarea unei opera \ii de montare a unui sistem de
fi]iere, este necesar[ selectarea unui punct de montare.
Un punct de montare este un director din sistemul de fi]iere @n
cadrul c[ruia se dore]te montarea altui sistem de fi]iere.
45 De regul[, exist[ mai multe parti\ii, cum ar fi cele aferente fi]ierelor
sistemului de operare ]i cea care con\ine directoarele home ale utilizatorilor.
132 Evident, punctul de montare (directorul) va trebui s[ existe46
@nainte de a putea efectua opera\ia de montare.
Comanda cu ajutorul c[reia se realizeaz[ montarea este mount ,
]i are urm[toarea sintax[ general[:
mount sistem_de_fisiere punct_de_montare
unde sistem_de_fisiere este sistemul de fi]iere aferent parti\iei ce
se va monta, iar punct_de_montare este directorul din sistemul de
fi]iere al UNIX unde se va realiza montarea.
#ntre indicatorii utiliza\i de aceast[ comand[ se pot men\iona: -t tip permite specificarea explicit[ a tipului de sistem de
fi]iere care se monteaz[
-o optiune
unde optiune poate fi una din urm[toarele:
rw (citire/scriere)
ro (numai citire)
bg (montare @n background – dac[ montarea e]ueaz[, plaseaz[
procesul @n background ]i se repet[ @ncercarea de montare p`n[ c`nd
aceasta reu]e]te) Un exemplu de utilizare a acestui indicator este:
mount -o rw,bg /dev/hda4 /usr
care monteaz[ sistemul de fi]iere aferent parti\iei 4 de pe prima unitate
de disc a primei unit[\i de control IDE, @n directorul /usr din sistemul
de fi]iere de baz[ al UNIX , pemi\`nd citirea/scrierea acesteia, montarea
av`nd loc @n background .
Tastarea la linia de comnad[ a numelui comenzii, mount , f[r[
nici un argument sau indicator, permite afi]area sistemelor de fi]iere
montate @n momentul respectiv @n sistem.
Observa\ie:
De regul[, montarea de sisteme de fi]iere poate fi f[cut[ numai
de c[tre utilizatorul root (administratorul sistemului), dar se poate
permite ]i unor utilizatorilor neprivile gia\i s[ monteze anumite parti\ii sau
unit[\i de disc.
46 Un punct de montare poate s[ existe oriunde @n structura arborescent[
de directoare (cu excep\ia directorului r[d[cin[).
133Exemple:
1. S[ presupunem c[ exist[ create o parti\ie principal[ hda1 ]i o
parti\ie secundar[ hda2 cu urm[toarele structuri de directoare:
#n vederea acces[rii parti\iei hda2 , aceasta trebuie montat[ @n
structura de directoare a parti\iei hda1 , ]i anume @n directorul /prog ,
astfel:
mount /dev/hda2 /prog
Noua structur[ de directoare din parti\ia hda1 va deveni:
Dup[ aceast[ opera\ie, accesa rea fi]ierelor de pe discul hda2 se
va face prin precizarea c[ilor /prog/prog1 sau /prog/prog2 ,
respectiv /prog/prog3 .
2. Dac[ se dore]te montarea unui CD-ROM conectat la o unitate
de control SCSI , @n sistemul de fi]iere de baz[ al UNIX , av`nd ca punct
de montare directorul /usr/cdrom , se va folosi comanda: // // r[d[cin[ r[d[cin[hda1 hda2
prog date proiecte prog2 prog1 prog3
// r[d[cin[hda1
prog date proiecte
prog2 prog1 prog3
134 mount /dev/scd0 /usr/cdrom
Directorul /usr/cdrom trebuie s[ fi fost creat @nainte de a
executa aceast[ comand[. #n cazul folosirii unui CD-ROM care este conectat la o unitate de
control IDE, @n cadrul comenzii anterioare se va @nlocui /dev/scd0 cu
/dev/cd0 :
mount /dev/cd0 /usr/cdrom
Pentru a specifica @n mod explicit tipul de sistem de fi]iere ce se
va monta, se folose]te comanda:
mount -t iso9660 /dev/cd0 /usr/cdrom
Dac[ montarea sistemului de fi]iere s-a efectuat corect, comut`nd
@n /usr/cdrom , vom putea accesa toate fi]ierele existente pe CD-ROM
ca ]i c`nd ele ar face parte din sistemul de fi]iere ini\ial. 3. Montarea sistemului de fi]iere aferent unei dischete se face
similar cu montarea sistemului de fi]iere aferent CD-ROM -ului.
Astfel, pentru a monta o dischet[ din prima unitate de dischet[, @n
directorul /mnt , din cadrul sistemului de fi]iere de baz[ al UNIX , se va
utiliza comanda:
mount /dev/fd0 /mnt
unde /mnt este numele punctului de montare.
Observa\ie:
Orice sistem de fi]iere montat de pe o unitate de disc care
permite schimbarea discului respectiv, trebuie demontat @nainte de a
putea scoate discul. De asemenea, @nainte de oprirea sau restartarea
calculatorului, trebuie demontate ]i sistemele de fi]iere de pe hard discuri.
Demontarea sistemelor de fi]ierelor
Opera\ia invers[ celei de montare se nume]te demontare ]i se
realizeaz[ cu ajutorul comenzii:
umount sistem_de_fisiere_de_demontat
unde sistem_de_fisiere_de _demontat este sistemul de fi]iere
aferent parti\iei ce se va demonta.
sau
umount punct_de_montare
135unde punct_de_montare este numele directorului @n care a fost
montat sistemul de fi]iere.
Observa\ii:
1. Pentru a putea realiza opera\ia de demontare, directorul
curent nu va fi cel aferent punctului de montare.
2. Dac[ avem fi]iere deschise @nt r-un sistem de fi]iere montat,
acesta nu va putea fi demontat p`n[ c`nd fi]ierele respective nu sunt @nchise. #n cadrul unui sistem mare acest lucru se poate dovedi a fi dificil. De]i nu este indicat, se poate utiliza
indicatorul -f aferent comenzii umount , pentru for\area
demont[rii.
Exemplu:
Pentru demontarea sistemului de fi]iere aferent unei dischete, montat @n cadrul exemplului 3, se va utiliza una din comenzile:
umount /dev/fd0
sau
umount /mnt
Dac[ se dore]te @nlocuirea dischetei al c[rui sistem de fi]iere a
fost montat, cu alta, va trebui efect uat[ mai @nt`i opera\ia de demontare,
urmat[ de montarea sistemului de fi]iere de pe noua dischet[.
Exerci\ii
1. S[ se vizualizeze sistemele de fi]iere montate @n sistem.
2. S[ se monteze sistemul de fi]i ere existent pe o dischet[. S[ se
vizualizeze con\inutul acestuia, s[ se editeze un fi]ier existent, ]i apoi s[
se demonteze.
3. S[ se monteze sistemul de fi]iere existent pe o dischet[, astfel
@nc`t acesta s[ fie accesibil numai @n citire.
4. S[ se monteze sistemul de fi]iere existent pe un CD-ROM . S[
se vizualizeze con\inutul acestuia, s[ se copieze pe hard disc, ]i apoi s[ se
demonteze.
136LUCRAREA NR. 11
Tip[rirea
#n cadrul unui sistem UNIX pot fi instalate mai multe
imprimante, dar numai una dintre el e poate fi setat[ ca imprimant[
implicit[. Toate cererile de tip[rire vor fi trimise c[tre aceasta, dac[ @n
cadrul comenzii de tip[rire nu este specificat @n mod explicit numele unei alte imprimante.
UNIX accept[ at`t dispozitive de tip[rire paralele c`t ]i seriale,
ambele lucr`nd @n mod caracter. #n cazul imprimantelor paralele, acestea sunt referite ca lp0,
lp1, lp2 @n func\ie de adresa portului paralel pe care @l folosesc.
Porturile de dispozitiv paralele valide, adresele lor
47, numerele majore ]i
minore, precum ]i numele echivalente sub MS-DOS sunt urm[toarele:
Nume Adres[ I/E Major Minor Echivalent MS-DOS
/dev/lp0 0x03bc 6 0 LPT1
/dev/lp1 0x0378 6 1 LPT2
/dev/lp2 0x0278 6 2 LPT3
Ad[ugarea de dispozitive de tip[rire
Pentru a crea un fi]ier de dispozitiv asociat unei imprimante
paralele, UNIX -ul utilizeaz[ comanda mknod . Dup[ ce fi]ierul de
dispozitiv a fost creat, proprietarul acestuia trebuie s[ fie schimbat @n
root sau daemon .
Exemplu:
Urm[toarea comand[ este destinat[ cre[rii unui fi]ier de
dispozitiv asociat imprimantei paralele conectate pe primul port paralel
(/dev/lp0 ):
mknod -m 620 /dev/lp0 c 6 0
chown root.daemon /dev/lp0
47 Pentru a determina adresa unui port paralel, se poate folosi un utilitar de
diagnostic cum este MSD.EXE din DOS. Anumite versiuni de BIOS afi]eaz[
adresele de port la momentul @n care sistemul de operare se @ncarc[.
137 #n cadrul exemplului, permisiunile fi]ierului /dev/lp0 sunt
setate la 620, el corespunz`nd unui dispozitiv caracter cu un num[r
major egal cu 6 ]i un num[r minor egal cu 0. Proprietatea
root.daemon este o conven\ie special[ folosit[ Linux pentru
daemoni executa\i de c[tre root . Intrarea root.daemon nu apare @n
fi]ierul /etc/passwd . Acesta folose]te o conven\ie care las[ prima
parte a intr[rii (@nainte de punct) s[ indice utilizatorul ]i a doua parte
dup[ punct reprezint[ grupul. Pentru fiecare port paralel posibil, comenzile mknod sunt
urm[toarele:
mknod -m 620 /dev/lp0 c 6 0
mknod -m 620 /dev/lp1 c 6 1
mknod -m 620 /dev/lp2 c 6 2
#n aceste exemple, numere le dispozitiv minor au fost
incrementate pentru a corespunde num [rului portului. Aceast[ opera\ie
nu este necesar[ dar ajut[ la identificare.
Dup[ ce comenzile mknod ]i chown au fost folosite, este
recomandat de a verifica manual faptul c[ propr ietarii sunt seta\i
corespunz[tor ]i c[ un director spool a fost creat. Dac[ acest director nu
exist[, el va trebui creat manual.
Daemon -ul de tip[rire lpd
Toate elementele legate de tip[rire @n cadrul sistemului Linux
sunt manipulate de c[tre daemon -ul lpd. Acesta este lansat @n execu\ie
la momentul @n care se @ncarc[ sistemul de operare. Pe durata procesului de @nc[rcare daemon -ul lpd cite]te fi]ierul /etc/printcap pentru a
identifica sec\iunile ce se aplic[ ori c[rei imprimante cunoscute ca fiind
ata]ate sistemului. Pentru a manipula cererile de tip[rire ]i a le copia @n
zona spooling daemon -ul lpd folose]te alte dou[ procese numite
listen ]i accept . #n cele mai multe cazuri, modificarea daemon -ului
lpd nu este necesar[, de]i pot exista situa\ii c`nd acesta trebuie oprit
manual ]i restartat.
Sintaxa comenzii lpd este urm[toarea:
lpd [-l] [port]
Indicatorul -l poate fi util @n situa\ii ce impun depanarea
sistemului de tip[rire. Argumentul port este folosit pentru a specifica un
num[r de port Internet (practic nu va fi utilizat[ niciodat[).
138 M[rimea zonei spool de tip[rire (num[rul blocurilor de pe disc)
este setat[ prin specificarea unei intr[ri @n fi]ierul minfree din
directorul spool48. Con\inutul acestui fi]ier poate fi modificat utiliz`nd
orice editor de texte. Accesul la daemon -ul lpd pentru a permite tip[rirea unei cereri
utilizator, va trebui s[ fie validat @n cadrul unei rutine. Sunt implicate
dou[ fi]iere: /etc/hosts.equiv ]i /etc/hosts.lpd @n cadrul
c[rora trebuie s[ fie prezent numele calculatorului utilizatorului ce a transmis cererea de tip[rire. Dac[ a cest nume nu este prezent @n nici unul
dintre cele dou[ fi]iere, cererea de tip[rire este refuzat[.
Fi]ierul /etc/printcap
Este un fi]ier text ce se afl[ @n proprietatea utilizatorului root ,
ce este consultat at`t de c[tre comanda lpr a utilizatorului c`t ]i de c[tre
daemon -ul de tip[rire lpd. El con\ine informa\ie referitoare la fiecare
imprimant[ care este accesibil[ de pe sistemul ce ruleaz[ sub UNIX .
Fiecare intrare @n acest fi]ier con\ine o descriere pentru o imprimant[ ]i
modul @n care datele vor fi manipulate de c[tre ea. De exemplu, o intrare
va defini ce dispozitiv fizic de tip[rire va fi utilizat, ce date pentru acel
dispozitiv vor fi stocate @n directorul spool , ce preprocesare va trebui s[
fie efectuat[ asupra datelor, unde vor fi stocate mesajele de eroare aferente dispozitivului fizic respectiv, ].a.
Toate c`mpurile din fiecare intrare sunt incluse @ntre o pereche de
caractere : ]i sunt reprezentate printr- un cod din dou[ litere. Codul de
dou[ litere este urmat de o valoare car e depinde de tipul c`mpului. Exist[
trei tipuri de c`mpuri: ]ir, boolean, numeric. C`teva dintre codurile ce pot
ap[rea @n fi]ierul /etc/printcap sunt prezentate @n tabelul 11.1:
Tabelul 11.1
Coduri /etc/printcap
Cod Tip Descriere
lp ]ir specific[ dispozitivul la ca re se va tip[ri, cum ar fi
/dev/lp0
sd ]ir specific[ numele directorului spool pentru aceast[
imprimant[
lf ]ir specific[ fi]ierul @n care eroril e de pe aceast[ imprimant[ vor fi
48 Fiecare imprimant[ are propriul s[u director spool .
139@nregistrate (error log)
if ]ir specific[ numele filtrului de intrare
of ]ir specific[ numele filtrului de ie]ire
rm ]ir specific[ numele unei gazde de tip[rire la distan\[
rp ]ir specific[ numele unei imprimante la distan\[
sh boolean se specific[ pentru a elimina antetele (paginile banner )
sf boolean se specific[ pentru a elimina saltul la pagin[ nou[ ( form-
feed ) de la sf`r]itul job-ului
mx numeric specific[ (@n blocuri) m[ri mea job-ului de tip[rire maxim
permis[
Un extras din acest fi]ier este ilustrat @n continuare:
# HP Laserjet
lp|hplj|laserjet-ise|HP LaserJet 4M in lab
324:\
:lp=/dev/lp0:\ :sd=/usr/spool/lp0:\
:lf=/usr/spool/errorlog:\
:mx#0:\ :of=/usr/spool/lp0/hpjlp:\
Comenzi destinate tip[ririi ]i gestiunii imprimantei
#ntotdeauna putem tip[ri direct la imprimant[ folosind
urm[toarea comand[:
cat test.txt>/dev/lp0
Din p[cate, aceast[ comand[ poate s[ interfere cu al\i utilizatori
ce @ncearc[ s[ tip[reasc[. De asemenea, comanda poate chiar s[ nu
mearg[ dac[ calculatorul nu este capabil s[ secven\ieze corect @n timp caracterele c[tre imprimant[. Pe o imprimant[ lent[, sau pe o imprimant[ care este deselectat[ sau deconect at[, acest lucru poate conduce la
blocarea shell -ului.
lp
Este comanda folosit[ @n mod uzual pentru a tip[ri unul sau mai
multe fi]iere pe o imprimant[ specificat[. Dac[ @n sintaxa comenzii sunt
specificate numele mai multor fi]iere, acestea vor fi tip[rite @n ordinea @n
care apar @n cadrul comenzii.
140 Urm[toarea list[ de indicatori poate fi folosit[ @mpreun[ cu
comanda lp:
-c pentru a efectua o copie a fi]ierului astfel @nc`t acesta poate fi
]ters sau modificat @n timp ce se efectueaz[ tip[rirea -d coada_de_tiparire pentru a specifica coada de tip[rire
unde cererea de tip[rire va fi direc\ionat[
-c numar_de copii pentru a specifica num[rul de copii de
tip[rit -t titlu pentru a tip[ri titlul specificat pe pagina banner
Exemple:
Pentru a tip[ri fi]ierul test.txt , se va tasta comanda
urm[toare:
lp test.txt
#n acest caz, fi]ierul test.txt va fi tip[rit pe imprimanta linie
implicit[. Dac[ se dore]te tip[rirea fi]i erului pe o alt[ imprimant[ numit[
hplj , atunci @n sintaxa comenzii se va introduce numele acesteia ]i
indicatorul -d:
lp -d hplj test.txt
Dac[ fi]ierul test.txt este mare ]i dorim s[ fim anun\a\i
atunci c`nd job-ul a fost tip[rit comple t, cu succes, vom folosi indicatorul
-m @n urm[toarea comand[:
lp -m -d hplj test.txt
Dac[ dorim s[ tip[rim copii multiple ale fi]ierului test.txt ,
vom folosi indicatorul -n urmat de num[rul de copii dorite, ca @n
urm[toarea comand[:
lp -n 15 -d hplj test.txt
#n situa\ia @n care se dore]te tip[rirea unui titlu, de exemplu
urgent , @n pagina banner , vom folosi indicatorul -t ca @n comanda
urm[toare:
lp -n 15 -t "urgent" -d hplj test.txt
cancel
Dac[ am efectuat anterior cereri de a tip[ri unul sau mai multe
fi]iere folosind comanda lp ]i dorim s[ anul[m aceste comenzi, vom
utiliza comanda cancel . #n acest fel vom putea anula un job specificat,
sau toate cererile din coada de tip[rire asociat[ unei imprimante
specificate.
141 Dac[ suntem un utilizator obi]nuit (neprivilegiat) vor fi anulate
numai job-urile care au identificatorul nostru de utilizator.
Se poate specifica de asemenea identificatorul job-ului ce se
dore]te a fi anulat. De exmplu pentru a anula un job cu ID 734, se va tasta
comanda:
cancel 734
Totodat[ este posibil[ anularea tuturor cererilor din coada de
tip[rire asociat[ unei imprimante, specific`nd @n sintaxa comenzii cancel , numele imprimantei:
cancel hplj
lpstat
Putem folosi comanda lpstat pentru a afi]a starea curent[ a
tuturor imprimantelor linie. Dac[ este executat[ comanda lpstat f[r[
nici un indicator, ea afi]eaz[ starea fiec[rei imprimante cu intr[rile din fiecare coad[ de tip[rire.
Urm[toarea list[ con\ine c`\iva dintre indicatorii ce pot fi folosi\i
cu comanda lpstat :
-a coada sau -c coada sau -p coada pentru a afi]a
informa\ie referitoare la job-urile din coada de tip[rire specificat[
-d pentru a afi]a informa\ie despre imprimanta linie implicit[
-o coada sau -o job_numar pentru a afi]a starea cozii de
tip[rire specificate sau pentru a afi]a starea job_numar specificat
-r pentru a afi]a starea ]i informa\ie despre job-urile tuturor
cozilor de tip[rire -s pentru a afi]a o informa\ie rezumat despre toate cozile de
tip[rire
-t pentru a afi]a informa\ie detaliat[ referitoare la toate cozile de
tip[rire -u nume_utilizator pentru a afi]a starea cererilor de
tip[rire solicitate de c[tre un utilizator anume
Exemple: Dac[ dorim s[ cunoa]tem care sunt toate imprimantele din
sistem, folosim comanda lpstat f[r[ indicatori, astfel:
lpstat|more
Informa\ia afi]at[ poate fi similar[ cu urm[toarea:
142Queue Dev Status Job Files User PP % Blks Cp Rnk
–– ––––––––––––––-
m_prt lp0 READY
prt_01 lp0 READY
prt_02 lp0 READY
Dac[ se dore]te ob\inerea de info rma\ie despre imprimanta linie
implicit[, vom folosi indicatorul -d dup[ cum urmeaz[:
lpstat -d
Informa\ia afi]at[ poate fi similar[ cu urm[toarea:
Queue Dev Status Job Files User PP % Blks Cp Rnk
–– ––––––––––––––-
m_prt lp0 READY
Dac[ tip[rim fi]ierul test.txt pe imprimanta hplj , pentru a
afla starea imprimantei ]i a job-ului, vom folosi indicatorul -a dup[ cum
urmeaz[:
lpstat -a hplj
Informa\ia afi]at[ poate fi similar[ cu urm[toarea:
Queue Dev Status Job Files User PP % Blks Cp Rnk
–– ––––––––––––––-
systems lpprt READY
prt_01:prt_01 is ready and printing prt_01:Rank Owner Job Files Total Size
prt_01:active stud1 735 test.txt 15648 bytes
lpr
Rolul acestei comenzi este de a preg[ti fi]ierul ce se dore]te a fi
tip[rit, trec`nd apoi controlul pentru tip[rirea efectiv[ daemon -ului
lpd
49.
Sintaxa comenzii este:
lpr [indicatori][nume_fisier]
Dac[ nume_fisier nu este specificat, lpr a]teapt[ ca intrarea
s[ vin[ de la intrarea standard.
49 C`nd lpr este executat[, ea copiaz[ fi]ier ul specificat @n tr-un director
anume (directorul spool ) unde acesta r[m`ne p`n[ c`nd daemon -ul lpd @l
tip[re]te.
143 Comanda lpr accept[ c`\iva indicatori @n linia de comand[ care
permit utilizatorului s[ controleze modul @n care aceasta lucreaz[:
-P imprimanta specific[ imprimanta ce va fi folosit[
-s creeaz[ o leg[tur[ simbolic[ @n loc s[ copieze fi]ierul @n
directorul spool (util @n cazul fi]ierelor mari)
-#numar specific[ num[rul de copii de tip[rit
Exemplu:
lpr -#2 -sP laser test.txt
Comanda anterioar[ va crea o leg[tur[ simbolic[ la fi]ierul
test.txt @n directorul spool pentru imprimanta numit[ laser , unde
va fi procesat de c[tre daemon -ul lpd. Va fi tip[rit[, de asemenea, o a
doua copie a fi]ierului.
lpc
Este o comand[ ce permite efectuarea unor func\ii importante
privind gestiunea imprimantelor utilizate @n sistemul UNIX , ]i anume:
– afi]area informa\iei de stare referitoare la imprimante
– validarea/invalidarea imprimantei
– validarea/invalidarea cozii de tip[rire
– eliminarea tuturor cererilor de tip[rire din coada de tip[rire
– promovarea unei cereri de tip[r ire particulare la @nceputul
cozii de tip[rire
– efectuarea de modific[ri @n daemon-ul de tip[rire lpd
Comanda lpc se utilizeaz[ numai pentru gestiunea
imprimantelor ata]ate direct ]i configurate pe sistemul local.
Atunci c`nd se folose]te f[r[ argumente, comanda lpc este @n
modul interactiv, solicit`nd introducerea unei subcomenzi. #n continuare sunt prezentate c`teva dintre subcomenzile permise
de lpc, @mpreun[ cu argumentele lor (tabelul 11.2):
Tabelul 11.2
Subcomenzi lpc
Subcomand[ Semnifica\ie
abort
nume_imprimanta|all Este similar[ cu subcomanda stop , cu
deosebirea c[ nu permite nici unui job care se afl[ @n tip[rire, s[ se termine
@nainte a opri imprimanta. C`nd se
folose]te cu argumentul all, toate
144imprimantele sunt oprite.
clean
nume_imprimanta|all }terge toate job-urile de tip[rire aflate @n
coada de tip[rire, incl usiv pe cele active.
#n multe cazuri job-ul aflat @n tip[rire se
deruleaz[ normal deoarece el a fost
transmis daemon -ului de tip[rire sau
buffer-ului imprimantei. Toate celelalte job-uri sunt ]terse. Dac[ este folosit argumentul all, cozile de tip[rire ale
tuturor imprimantelor vor fi ]terse.
disable
nume_imprimanta|all Dezactiveaz[ posibilitatea transmiterii
de cererir de tip[rire pentru imprimant[ (sau pentru toate imprimantele, func\ie de argument). Orice job care este deja @n
coad[ nu este afectat. Orice utilizator ce
@ncearc[ s[ trimit[ un job de tip[rire c[tre o imprimant[ deazctivat[ recep\ioneaz[ un mesaj ce indic[ c[ imprimanta este dezactivat[ ]i job-ul de tip[rire este refuzat.
down nume_imprimanta
mesaj Este folosit[ pentru oprirea off-line a
unei imprimante atunci c`nd aceasta are probleme serioase ce impun scoaterea sa
din sistem pentru mai mult de o zi. Dac[
se include mesaj , acesta este plasat @n
fi]ierul status din directorul spool
]i afi]at utilizatorilor ce @ncearc[ s[ transmit[ job-uri de tip[rire imprimantei.
enable
nume_imprimanta|all Valideaz[ transmiterea de cereri de
tip[rire c[tre imprimant[.
exit Iese din lpc (similar cu quit )
help sau ? Afi]eaz[ o scurt[ descriere a tuturor
subcomenzilor lpc. Dac[ este
specificat un argument, afi]eaz[ o descriere on-line a acelei subcomenzi.
quit Iese din lpc (similar[ cu exit )
restart
nume_imprimanta|all Restarteaz[ daemon -ul de tip[rire ]i
este uzual folosit[ dup[ ce acesta a murit dintr-un motiv inexplicabil. Dac[ este
145folosit argumentul all, to\i daemon -ii
de tip[rire sunt restarta\i.
start nume_imprimanta Starteaz[ imprimanta permi\`ndu-i s[
tip[reasc[ cereri de tip[rire. De asemenea, comanda starteaz[ daemon –
ul cozii de tip[rire pentru acea
imprimant[.
status nume_imprimanta Afi]eaz[ informa\ii de stare referitoare
la acea imprimant[.
stop nume_imprimanta Opre]te imprimanta. Dac[ un job era @n
curs de tip[rire c`nd comanda stop a
fost emis[, job-ul termin[ procesul de
tip[rire ]i apoi opre]te tip[rirea.
topq nume_imprimanta
print_ID Mut[ cererea de tip[rire ce are
print _ID la @nceputul cozii de
tip[rire.
topq nume_imprimanta
nume_utilizator Mut[ toate cererile de tip[rire aflate @n
proprietatea nume_utilizator la
@nceputul cozii de tip[rire.
up nume_imprimanta Este folosit[ pentru a reactiva o
imprimant[ pentru care a fost emis[ o
comand[ down .
Observa\ie:
lpc este una dintre comenzile impredictibile ]i nefiabile incluse
@n sistemul de operare UNIX . Ea poate s[ e]ueze f[r[ un motiv evident, s[
afi]eze mesaje de stare eronate. #n anumite cazuri singura modalitatea de
a repara problemele generate de a ceast[ comand[ o constituie resetarea
calculatorului.
lpq
Este o comand[ destinat[ afi][rii, pentru orice imprimant[, a
unor informa\ii referitoare la coada de tip[rire curent[. Sintaxa ei general[, este:
lpq[-l][-P nume_imprimanta][job_ID][nume_utiliz.]
F[r[ argumente, lpq afi]eaz[ informa\ii referitoare la coada de
tip[rire ale imprimantei curente:
lp is ready and printing
Rank Owner Job Files Total Size
146 active stud1 31 test.txt 682048 bytes
Aceste informa\ii cuprind: starea cozii, starea job-ului, numele
utilizatorului care a transmis job-ul de tip[rit, identificatorul job-ului, fi]ierele ce urmeaz[ a fi tip[rite, m[rimea total[ a fi]ierelor.
Indicatorul -l permite afi]area unor informa\ii mai complexe
referitoare la fiecare intrare din coada de tip[rire. Uzual, este afi]at[ numai o singur[ linie de informa\ie.
Prin folosirea indicatorului -P urmat de nume_imprimanta
va fi afi]at[ informa\ie specific[ imprimantei respective. Dac[ sunt furnizate argumentele job_ID sau nume_utilizator , va fi afi]at[
numai informa\ia referitoare la job-ul respectiv sau la job-urile din coada
de tip[rire aferente acelui utilizator.
lprm
Aceast[ comand[ este folosit[ pentru a ]terge job-uri dintr-o
coad[ de tip[rire. Utilizarea ei imp lic[ cunoa]terea identificatorului job-
ului de tip[rit, sau dac[ utilizatorul este root , el va putea ]terge toate
job-urile aferente unei imprimante particulare. Sintaxa general[ a acestei comenzi este urm[toarea:
lprm[-P nume_imprimanta][-][job_ID][nume_utiliz.]
Dac[ se utilizeaz[ argumentul -, lprm ]terge toate job-urile
aflate @n proprietatea utilizatorului care a lansat comanda. Dac[ acesta
este conectat ca root , vor fi ]terse toate job-urile de tip[rire. Pentru a
]terge job-urile de pe o imprimant[ particular[ se va folosi op\iunea -P
nume_imprimanta . De exemplu, comanda:
lprm -P nume_imprimanta
]terge toate job-urile de tip[rire aferente utilizatorului ce a emis comanda,
existente pe imprimanta nume_imprimanta , sau toate job-urile de
tip[rire pentru acea imprimant[ dac[ comanda a fost emis[ de root .
Dac[ un job_ID sau un nume_utilizator sunt furnizate ca
argumente, lprm ]terge acel job sau toate job-urile transmise de c[tre
acel utilizator. Dac[ nu sunt furnizate argumente, este ]ters job-ul activ
curent transmis de c[tre utilizator. C`nd comanda lprm ]terge job-uri din coada de tip[rire, ea
transmite @n ecou un mesaj pe ecran. Dac[ nu exist[ fi]iere de ]ters, @n
ecou, nu va fi transmis nimic.
147 Tip[rirea fi]ierelor text neformatate
Fi]ierele text neformatate @n UNIX nu con\in numere de pagin[,
break -uri de linie, informa\ie de formatare, sau break -uri de pagin[
logic[. Dac[ la sistem este conectat[ o imprimant[ matriceal[, este posibil ca tip[rirea cu aceasta a unui fi]ier neformatat, s[ dep[]easc[
marginile paginii, sau s[ se impr ime numai pe partea din st`nga a
acesteia. Pentru evitarea unei asemenea situa\ii, este bine ca @nainte de
tip[rire, fi]ierul s[ fie trecut printr-un program numit formatter .
Un formatter simplu @n Linux @l reprezint[ comanda pr.
Aceasta accept[ intrarea de la echipamentul standard de intrare ]i
genereaz[ ie]ire la echipamentul st andard de ie]ire. Deoarece comanda
pr formateaz[ ]i pagineaz[ ie]irea, pentru tip[rire, ea se va redirecta
c[tre o comand[ cum este lpr.
Fiind destinat[ s[ formateze un fi]ier text neformatat pentru a putea fi tip[rit la o imprimant[ linie, comanda pr permite ad[ugarea de
antete, note de subsol, numere de pa gin[, data calendaristic[, precum ]i
modificarea marginilor, distan\ei dintre r`nduri, ].a. #n cazul @n care
lungimea liniei de tip[rit este mai ma re dec`t l[\imea paginii, ea va fi
trunchiat[.
Urm[toarea list[ con\ine indicatori ce pot fi folosi\i cu comanda
pr:
-d genereaz[ ie]irea cu spa\iere la dou[ r`nduri
-f sau -F pentru a folosirea unui caracter form-feed (salt la
pagin[ nou[) @n locul une i secven\e de caractere line-feed (salt la
linie nou[) -h "antet" pentru a afi]a @n loc de numele fi]ierului ca antet
al fiec[rei pagini, antet -ul specificat
-l lunime_pagina permite setarea num[rului de linii de
tip[rit pe fiecare pagin[ la lungime_pagina @n locul valoarii implicite
66
-n permite specificarea m[rimii num[rului de linie ce se va tip[ri
la @nceputul fiec[rei linii. Op\ional, se poate specifica un caracter care s[
fie tip[rit @ntre num[rul de linie ]i con\inutul acesteia. -o numar pentru a indenta fiecare linie cu numar coloane
-p pentru a efectua o pauz[ dup[ af i]area fiec[rei pagini dac[
ie]irea este direc\ionat[ c[tre ie]irea standard. Pentru a continua, se va
ap[sa tasta <Enter>
148 -r pentru a elimina mesajele de diagnostic
-t pentru a elimina tip[rirea antetului paginii ]i a notelor de
subsol ale acesteia
-w numar permite setarea l[\imii fiec[rei pagini la numar @n
loc de valoarea implicit[ 72
+numar_pagina permite specificarea faptului ca afi]area s[
@nceap[ de la numar_pagina @n loc de la 1
Exemple: S[ presupunem c[ @n directorul curent exist[ un fi]ier numit
file1 , al c[rui con\inut este urm[torul (pentru afi]are s-a folosit
comanda more ):
more file1
Acesta este un fisier de test pentru
comanda pr Va fi utilizat pentru a arata modul de
folosire al comenzii respective
Tast`nd:
pr file1
pe ecranul monitorului se vor afi]a urm[toarele:
Wed Feb 4 09:40:14 2006 file1 Page 1
Acesta este un fisier de test pentru
comanda pr
Va fi utilizat pentru a arata modul de
folosire al comenzii respective
Dac[ se dore]te tip[rirea unui antet, altul dec`t numele fi]ierului, se va folosi indicatorul -h dup[ cum urmeaz[:
pr -h "Fisier de test pentru comanda pr"
file1
Wed Feb 4 09:40:14 2006 Fisier de test
pentru comanda pr Page 1
Acesta este un fisier de test pentru
comanda pr
149 Va fi utilizat pentru a arata modul de
folosire al comenzii respective
Dac[ se nu se dore]te tip[rirea antetului se va folosi indicatorul –
t dup[ cum urmeaz[:
pr -t file1
#n cazul @n care se dore]te afi]area num[rului de linie @n fa\a
fiec[rei linii a fi]ierului, precum ]i a unei linii de separa\ie @ntre num[rul
de linie ]i con\inutul acesteia, se va folosi indicatorul -n, astfel:
pr -n-5 file1
Wed Feb 4 09:40:14 2006 file1 Page 1
1-Acesta este un fisier de test pentru
comanda pr
2-Va fi utilizat pentru a arata modul de folosire al comenzii respective
Exerci\ii
1. S[ se afi]eze starea curent [ a imprimantei linie implicite.
2. Folosind editorul de texte joe s[ se creeze un fi]ier care apoi
s[ fie formatat ]i tiparit la imprimant[.
3. S[ se vizualizeze informa\ia aferent[ cozii de tip[rire curente
]i s[ se interpreteze.
4. S[ se ]tearg[ job-urile di n coada de tip[rire curent[.
5. S[ se formateze un fi]ier text neformatat astfel @nc`t @n antetul
acestuia s[ apar[, la tip[rire, cuvintele “Acesta este un test de formatare ”.
150LUCRAREA NR. 12
Fi]iere de comenzi
#n cadrul sistemului de operare UNIX exist[ mai multe
interpretoare de comenzi ( shell -uri), selectabile de c[tre utilizator.
Shell -ul accept[ comenzi UNIX care pot fi introduse fie de la
un terminal, fie pot fi citite dintr-un fi]ier. Toate comenzile, cu excep\ia celor rezidente @n shell se execut[ @ntr-un proces nou creat.
Fi]ierele de comenzi (numite fi]iere script sau programe
shell ) definesc practic, comenzi noi , care pot con\ine parametri,
variabile ]i structuri de control specifice limbajelor de programare algoritmice.
Crearea ]i rularea fi]ierelor de comenzi
La cel mai simplu nivel, fi]ierele de comenzi sunt fi]iere ce
con\in comenzi shell sau UNIX . Ele pot fi utilizate pentru a simplifica
sarcinile repetitive, pentru a @nlo cui dou[ sau mai multe comenzi care
sunt executate @ntotdeauna @mpreun[, cu o singur[ comand[, pentru a automatiza instalarea altor programe, pentru a scrie aplica\ii interactive
simple.
Crearea unui fi]ier de comenzi se face utiliz`nd un editor de texte cu ajutorul c[ruia sunt introduse @n fi]ier comenzile shell sau UNIX ce
se doresc a fi executate.
De exemplu, s[ presupunem c[ lucr[m la trei fi]iere diferite, situate @n acela]i director, iar la sf`r]itul zilei dorim s[ efectu[m o copie de siguran\[ a acestor fi]iere, pe dischet[. Pentru a realiza acest lucru va
trebui s[ tast[m, de fiecare dat[, urm[toarea serie de comenzi:
mount -t msdos /dev/fd0 /a
cp fisier_1 /a
cp fisier_2 /a
cp fisier_3 /a umount /a
#n loc de a tasta mereu secven\a anterioar[ de comenzi, vom crea
151un program shell simplu (un fi]ier text), numit backup50, ce va
con\ine secven\a @n cauz[ ]i pe care @l vom executa atunci c`nd se dore]te
copierea celor trei fi]iere.
Pentru a executa un fi]ier de comenzi astfel creat, exist[ mai multe modalit[\i.
O prim[ modalitate este de a face fi]ierul executabil, cu ajutorul
comenzii chmod +x backup , ]i de a tasta apoi din linia de comand[,
numele fi]ierului: backup .
O a doua modalitate este de a apela, @n linia de comand[,
interpretorul de comenzi cu un para metru reprezent`nd numele fi]ierului
de comenzi:
sh backup
O a treia modalitate de a executa comenzile dintr-un program
shell este de a utiliza comanda . (@n pdksh ]i bash ) ]i comanda
source @n tcsh . Aceast[ comand[ spune shell -ului s[ execute toate
comenzile din fi]ierul transmis comenzii, ca argument. De exemplu, urm[toarea comand[ poate fi utilizat[ pentru a spune shell -ului bash
sau pdksh s[ execute comenzile din fi]ierul backup :
.backup
Pentru a face acela]i lucru @n tcsh se va tasta comanda:
source backup
Observa\ie:
Fi]ierul de comenzi backup trebuie s[ fie @ntr-un director care
se afl[ @n calea noastr[ de c[utare, altfel shell -ul nu va putea s[-l
g[seasc[ pentru a-l executa. De asemenea, dac[ utiliz[m shell -ul tcsh
pentru a scrie programe, prima linie a fi]ierului de comenzi trebuie s[
@nceap[ cu caracterul # pentru ca tcsh s[ recunoasc[ c[ este vorba de un
fi]ier de comenzi.
Utilizarea variabilelor
Ca ]i @n cazul oric[rui limbaj de programare, ]i @n cazul
programelor shell utilizarea variabilelor este foarte important[.
Pentru a asigna o valoare une i variabile se va tasta numele
50 #n UNIX nu exist[ o "extensie" dedicat[ care s[ identifice fi]ierele de
comenzi, a]a @nc`t numele lor pot fi alese liber.
152variabilei urmat de semnul egal ]i de valoarea pe care dorim s[ i-o
asign[m.
De exemplu, dac[ dorim s[ asign[m valoarea 5 variabilei
count , putem tasta urm[toarea comand[ @n bash sau pdksh :
count=5
#n tcsh , pentru a ob\ine acela]i rezultat, va trebui s[ introducem
comanda:
set count = 5
Observa\ii:
1. Dac[ folosim sintaxa bash ]i pdksh pentru setarea unei
variabile, va trebui s[ ne asigur[m c[ nu exist[ spa\ii @nainte ]i dup[ semnul egal. #n tcsh acest lucru nu conteaz[.
2. #ntr-o variabil[ pot fi stocate at`t numere @ntregi c`t ]i
caractere. De exemplu:
nume=Mihai (pentru pdksh ]i bash)
set nume = Mihai (pentru tcsh)
Accesarea valorii unei variabile
Acest lucru se poate face preced` nd numele variabilei de semnul
$. De exemplu, dac[ dorim s[ afi][m valoarea stocat[ @n variabila
count , pe ecran, vom introduce comanda urm[toare:
echo $count
Observa\ie:
Dac[ se omite semnul $ @naintea numelui variabilei, comanda
echo aceasta va afi]a pe ecran cuv`ntul count .
Parametrii pozi\ionali ]i alte variabile incluse @n shell
Shell -ul cunoa]te un fel special de variabil[ numit parametru
pozi\ional . Parametrii pozi\ionali sunt utiliza\i pentru a face referire la
parametrii ce au fost transmi]i unui program shell @n linia de comand[.
C`nd execut[m un program shell ce necesit[ sau permite un num[r de
parametri @n linia de comand[, fiecare dintre ace]ti parametri este stocat
@ntr-un parametru pozi\ional.
Primul parametru este stocat @ntr-o variabil[ (parametru pozi\ional) numit[ 1, al doilea parametru este stocat @ntr-o variabil[
153numit[ 2, ].a.m.d. Aceste nume de variabile sunt rezervate de c[tre
shell astfel @nc`t nu le putem utiliza ca variabile definite de utilizator.
Pentru a accesa valorile stocate @n aceste variabile, trebuie s[ preced[m
numele variabilei de semnul $ la fel ca ]i @n cazul variabilelor definite de
utilizator.
Urm[torul program shell a]teapt[ s[ fie invoca\i doi parametri.
Programul ia cei doi parametri tasta \i @n linia de comand[, afi]`nd mai
@nt`i al doilea parametru iar apoi pe primul.
#program ordine_inversa, afiseaza
parametrii din linia de comanda in ordine inversa#
echo "$2" "$1"
Dac[ invoc[m acest program introduc`nd:
ordine_inversa buna ziua
programul va returna urm[toarea ie]ire:
ziua buna
Atunci c`nd se dore]te efectuarea unei program[ri shell mai
complexe este important de ]tiut care sunt variabilele incluse @n shell .
#n tabelul 12.1 sunt prezentate aces te variabile @mpreun[ cu o scurt[
descriere a utiliz[rii fiec[reia dintre ele.
Tabelul 12.1
Variabile incluse @n shell
Variabl[ Utilizare
$# Stocheaz[ num[rul argumentelor linie de comand[ ce au fost
transmise programului shell
$? Stocheaz[ valoarea de ie]ire a ultim ei comenzi ce a fost executat[
$0 Stocheaz[ primul cuv`nt al comenz ii introduse (numele programului
shell )
$* Stocheaz[ toate argumentele care au fost introduse @n linia de
comand[ ($1 $2 …)
"$@" Stocheaz[ toate argumentele care au fost introduse @n linia de
comand[, fiecare @ntre ghilimele ( "$1" "$2" …)
Utilizarea ghilimelelor
Utilizarea diferitelor tipuri de ghilimele este foarte important[ @n
realizarea de programe shell . Ambele tipuri de ghilimele (duble ]i
simple), @mpreun[ cu caracterul \ (backslash ) sunt folosite pentru a
154ascunde caracterele speciale de shell , pentru a nu fi interpretate de
c[tre acesta.
C`nd utiliz[m ghilimele duble pentru a @ncadra caracterele dintr-
un ]ir, eventualele caractere spa\iu existente vor fi ascunse fa\[ de
shell , restul caracterelor speciale r[m`n`nd s[ fie interpretate de c[tre
acesta. Acest mod de @ncadrare este util atunci asign[m unei variabile
]iruri ce con\in mai multe cuvinte. De exemplu, dac[ dorim s[ asign[m ]irul buna ziua variabilei
salut va trebui s[ tast[m urm[toarea comand[:
salut="buna ziua" (pentru bash ]i pdksh )
set salut = "buna ziua" (pentru tcsh )
Aceast[ comand[ va asigna ]irul buna ziua variabilei salut
ca un singur cuv`nt. Dac[ tast[m aceast[ comand[ f[r[ a utiliza
ghilimele, nu vom ob\ine rezultatul dorit, bash ]i pdksh nu vor @n\elege
comanda ]i vor returna un mesaj de eroare. Tcsh va asigna valoarea
buna variabilei salut ]i va ignora restul liniei de comand[.
Ghilimelele simple ele ascund toate caracterele speciale pentru a
nu fi interpretate de c[tre shell . Acest lucru este util dac[ comanda pe
care o introducem este destinat[ unui program altul dec`t shell -ul.
Observa\ie:
#n situa\ia @n care ]irul de caractere ce se vrea a fi asignat
variabilei salut con\ine o alt[ variabil[, va trebui s[ utiliz[m
ghilimelele duble. De exemplu, dorim s[ includem numele utilizatorului
@n variabila salut vom tasta urm[toarea comand[:
salut="buna ziua $LOGNAME" (pentru bash ]i pdksh )
set salut="buna ziua $LOGNAME" (pentru tcsh )
#n acest exemplu, variabila LOGNAME este o variabil[ a shell –
ului care con\ine numele utilizatorului UNIX ce s-a conectat la sistem.
Dac[ am fi @ncercat s[ scriem aceast[ comand[ utiliz`nd
ghilimele simple, ele vor ascunde semnul $ de shell ]i acesta nu va ]ti
c[ s-a presupus c[ va efectua o substitu\ie de variabil[, variabilei salut
fiindu-i asignat[ valoarea buna ziua $LOGNAME .
O a treia modalitate de a as cunde caracterele speciale de
interpretarea shell -ului se bazeaz[ pe utilizarea caracterului \
(backslash ). Ca ]i ghilimelele simple, backslash -ul ascunde toate
155caracterele speciale, dar, la un mo ment dat, poate ascunde un singur
caracter, ]i anume caracterul ce @i urmeaz[. Exemplul anterior poate fi
rescris utiliz`nd caracterul \ @n locul ghilimelelor duble:
salut=buna\ ziua (pentru bash ]i pdksh )
set salut=buna\ ziua (pentru tcsh )
Apostroafele ( '') vor efectua o func\ie diferit[. Ele sunt utilizate
atunci c`nd se dore]te utilizarea rezultatelor unei comenzi @ntr-o alt[ comand[. De exemplu, dac[ dorim s[ set[m valoarea variabilei
continut egal[ cu lista fi]ierelor din directorul curent, vom tasta
urm[toarea comand[:
continut='ls' (pentru bash ]i pdksh )
set continut = 'ls' (pentru tcsh )
Aceast[ comand[ va executa comanda ls ]i va stoca rezultatul
acesteia @n variabila continut . Acest lucru poate fi foarte util atunci
c`nd se dore]te scrierea unui program shell care efectueaz[ o anumit[
ac\iune asupra rezultatelor altei comenzi.
Comanda test
#n bash ]i pdksh , pentru a evalua expresiile condi\ionale se
folose]te comanda test . #n mod tipic aceast[ comand[ este destinat[
evalu[rii unei condi\ii ce este utilizat[ @ntr-o declara\ie condi\ional[ sau
pentru a evalua criteriul de intrare sau ie]iere aferent unei declara\ii de
itera\ie. Sintaxa comenzii test este:
test expresie
Operatorii ce pot fi utiliza\i cu comanda test se clasific[ @n
patru grupe: operatori @ntregi, operato ri ]ir, operatori fi]ier, operatori
logici.
Operatorii @ntregi efectueaz[ func\ii similare cu cei ]ir cu
execp\ia c[ ei ac\ioneaz[ asupra argumentelor @ntregi. Tabelul 12.2 ilustreaz[ operatorii @ntregi ai comenzii test :
Tabelul 12.2
Operatorii @ntregi
Operator Semnifica\ie
int1 -eq int2 Returneaz[ true dac[ int1 este egal cu int2
int1 -ge int2 Returneaz[ true dac[ int1 este mai mare sau egal cu
int2
int1 -gt int2 Returneaz[ true dac[ int1 este mai mare dec`t int2
156int1 -le int2 Returneaz[ true dac[ int1 este mai mic sau egal cu
int2
int1 -lt int2 Returneaz[ true dac[ int1 este mai mic dec`t int2
int1 -ne int2 Returneaz[ true dac[ int1 este diferit de int2
Operatorii ]ir sunt utiliza\i pentru a evalua expresiile ]ir (tabelul
12.3):
Tabelul 12.3
Operatorii ]ir
Operator Semnifica\ie
str1 = str2 Returneaz[ true dac[ str1 este identic cu str2
str1 != str2 Returneaz[ true dac[ str1 nu este identica cu str2
str Returneaz[ true dac[ str nu este nul
-n str Returneaz[ true adc[ lungimea lui str este mai mare
dec`t 0
-z str Returneaz[ true dac[ lungimea lui str este egal[ cu 0
Operatorii fi]ier sunt utiliza\i pentru a efectua func\ii cum sunt
verificarea existen\ei unui fi]ier, verificarea tipului de fi]ier ce este transmis ca argument comenzii test (tabelul 12.4):
Tabelul 12.4
Operatorii fi]ier
Operator Semnifica\ie
-d fisier Returneaz[ true dac[ fisier este un director
-f fisier Returneaz[ true dac[ fisier este un fi]ier obi]nuit
-r fisier Returneaz[ true dac[ fisier poate fi citit de c[tre proces
-s fisier Returneaz[ true dac[ fisier are o lungime diferit[ de zero
-w fisier Returneaz[ true dac[ fisier poate fi scris de c[tre proces
-x fisier Returneaz[ true dac[ fisier este executabil
Operatorii logici ai comenzii test sunt utiliza\i pentru a
combina doi sau mai mul\i operatori @ntregi, ]ir sau fi]ier, sau pentru a
nega un singur operator @ntreg, ]ir, fi]ier (tabelul 12.5):
Tabelul 12.5
Operatorii logici
Comand[ Semnifica\ie
! expr Returneaz[ true dac[ expr nu este true
expr1 -a expr2 Returneaz[ true dac[ expr1 ]i expr2 sunt true
157expr1 -o expr2 Returneaz[ true dac[ expr1 sau expr2 este true
Tcsh nu are o comand[ test , dar permite aceea]i func\ie
utiliz`nd expresii. Expresiile tcsh permit acela]i fel de operatori ca ]i
cei ai comenzii test din bash ]i pdksh (tabelele 12.6, 12.7, 12.8,
12.9).
Tabelul 12.6
Operatorii @ntregi
Operator Semnifica\ie
int1 <= int2 Returneaz[ true dac[ int1 eset mai mic sau egal cu
int2
int1 >= int2 Returneaz[ true dac[ int1 este mai mare sau egal cu
int2
int1 < int2 Returneaz[ true dac[ int1 este mai mic dec`t int2
int1 > int2 Returneaz[ true dac[ int1 este mai mare dec`t int2
Tabelul 12.7
Operatorii ]ir
Operator Semnifica\ie
str1 == str2 Returneaz[ true dac[ str1 este egal cu str2
str1 != str2 Returneaz[ true dac[ str1 nu este egal cu str2
Tabelul 12.8
Operatorii fi]ier
Operator Semnifica\ie
-r fisier Returneaz[ true dac[ fisier poate fi citit
-w fisier Returneaz[ true dac[ fisier poatr fi scris
-x fisier Returneaz[ true dac[ fisier is executabil
-e fisier Returneaz[ true dac[ fisier exist[
-o fisier Returneaz[ true dac[ fisier se afl[ @n proprietatea
utilizatorului curent
-z fisier Returneaz[ true dac[ fisier este de m[rime 0
-f fisier Returneaz[ true dac[ fisier este un fi]ier obi]nuit
-d fisier Returneaz[ true dac[ fisier este un fi]ier director
Tabelul 12.9
Operatorii logici
Operator Semnifica\ie
exp1 || exp2 Returneaz[ true dac[ exp1 este true sau dac[ exp2 este
158true
exp1 && exp2 Returneaz[ true dac[ exp1 este true ]i exp2 este true
!exp Returneaz[ true dac[ exp nu este true
Declara\ii condi\ionale
Declara\iile condi\ionale ale shell -ului sunt structuri de limbaj
ce pot fi utilizate @n scrierea de programe.
Declara\ia if
Toate cele trei shell -uri permit declara\ii if … then
imbricate. Acestea furnizeaz[ o modalitatea de a efectua teste
condi\ionale complicate @n cadrul programelor shell . Sintaxa
declara\iei if este aceea]i pentru bash ]i pdksh , a]a cum se arat[ @n
continuare:
if [expresie]
then comenzi elif [expresie2]
then
comenzi else
comenzi
fi
Observa\ie:
Clauzele elif ]i else sunt ambele op\ionale iar cuv`ntul cheie
fi este utilizat pentru a semnala terminarea declara\iei if.
Clauza elif este o abreviere a lui else if . Ea este executat[
numai dac[ nici una dintre expresiile asociate cu declara\ia if sau a orice
clauze elif @nainte de aceasta au fost adev[rate. Comenzile asociate cu
declara\ia else sunt executate numai dac[ nici una dintre expresiile
asociate cu declara\ia if sau oricare dintre clauzele elif nu a fost
adev[rat[.
#n tcsh declara\ia if are dou[ forme diferite. Prima form[
furnizeaz[ aceea]i func\ie ca ]i declara\ia if din bash ]i pdksh .
Aceast[ form[ a declara\iei if are sintaxa urm[toare:
if (expresie1) then
159 comenzi
else if (expresie2) then comenzi
else
comenzi endif
Cea de a doua form[ a declara\iei if furnizat[ de c[tre tcsh
este o versiune simpl[ a primei declara\ii if. Ea evalueaz[ numai o
singur[ expresie. Dac[ expresia este adev[rat[, se execut[ o singur[
comand[; dac[ expresia este fals[, nu se execut[ nimic. Sintaxa pentru aceast[ a doua form[ este urm[toarea:
if (expresie) comanda
#n continuare este prezentat un exemplu al utiliz[rii declara\iei
if din cadrul shell -urilor bash ]i pdksh . Declara\ia verific[ dac[
exist[ un fi]ier .profile @n directorul curent:
if [ -f .profile ]
then echo "Exista un fisier .profile in
directorul curent"
else echo "Nu pot gasi fisierul .profile"
fi
Aceea]i declara\ie scris[ utiliz`nd sintaxa tcsh este urm[toarea:
#
if ( { -f .profile } ) then echo "Exista un fisier .profile in
directorul curent"
else echo "Nu pot gasi fisierul .profile"
endif
De notat c[ @n cazul utiliz[rii shell -ului tcsh prima linie a
exemplului va trebui s[ @nceap[ cu caracterul #. Acesta este necesar
pentru ca tcsh s[ recunoasc[ faptul c[ fi]ierul ce con\ine comenzi este
fi]ier script tcsh .
Declara\ia case
Permite s[ compar[m un model cu c`teva alte modele ]i s[
execut[m un bloc de cod dac[ este g[sit[ o potrivire.
160 Observa\ie:
Declara\ia case permite compararea de ]iruri ce con\in caractere
wildcard (identificatori pentru nume de fi]ier global * ]i ?).
Sinataxa declara\iei case este identic[ @n cazul bash ]i pdksh
]i diferit[ pentru tcsh . Pentru bash ]i pdksh aceast[ sintax[ este:
case string_1 in
sir_1)
comenzi;; sir_2)
comenzi;;
*) comenzi;;
esac
sir_1 este comparat cu sir_2 . Dac[ unul dintre aceste ]iruri se
potrive]te cu string_1 , comenzile se deruleaz[ p`n[ c`nd sunt
executate ( ;;). Dac[ nici sir_1 ]i nici sir_2 nu se potrivesc cu
string_1 , comenzile asociate cu asteriscul sunt executate. Aceasta este
condi\ia case implicit[ deoarece asteriscul se potrive]te cu toate ]irurile.
Echivalentul tcsh al comenzii test din bash ]i pdksh este
comanda switch . Sintaxa sa este urm[toarea:
switch (string_1)
case str_1:
declaratii
breaksw case str_2:
declaratii
breaksw default: declaratii
breaksw
endsw
Aceasta se comport[ @n acela]i fel ca ]i declara\ia case din
bash ]i pdksh . Fiecare ]ir ce urmeaz[ cuv`ntului cheie case este
comparat cu string_1 . Dac[ oricare dintre aceste ]iruri se potrivesc cu
string_1 , codul ce urmeaz[ se execut[ p`n[ c`nd cuv`ntul cheie
breaksw este executat. Dac[ nici unul dintre ]iruri nu se potrive]te,
codul de dup[ cuv`ntul implicit se execut[ p`n[ c`nd cuv`ntul cheie
breaksw este executat.
161 Urm[torul cod este un exemplu de utilizare a declara\iei case @n
bash sau pdksh . Codul verific[ dac[ prima op\iune din linia de
comand[ este -i sau -e. Dac[ este -i, programul contorizeaz[ num[rul
de linii din fi]ierul specificat de c[tre a doua op\iune din linia de comand[ care @ncepe cu litera i. Dac[ prima op\iune era -e, programul
contorizeaz[ num[rul de linii din fi ]ierul specificat de c[tre a doua
op\iune din linia de comand[ care @ncepe cu litera e. Dac[ prima op\iune
din linia de comand[ era -i sau -e, programul afi]eaz[ un scurt mesaj
de eroare pe ecran.
case $1 in
-i)
count='grep ^i $2 | wc -l' echo "Numarul liniilor in $2 care incep cu
un i este $count"
;; -e) count='grep ^e $2 | wc -l'
echo "Numarul liniilor in $2 care incep cu
un e este $count" ;;
* )
echo "Aceasta optiune nu este recunoscuta" ;;
esac
Acela]i exemplu scris @n sintaxa tcsh este:
#
switch ( $1 ) case -i | i:
set count = 'grep ^i $2 | wc -l'
echo "Numarul liniilor in $2 care incep cu i este $count"
breaksw
case -e | e: set count = 'grep ^e $2 | wc -l'
echo "Numarul liniilor in $2 care incep cu
e este $count" breaksw
default:
echo "Aceasta optiune nu este recunoscuta"
162 breaksw
endsw
Declara\ii de itera\ie
Shell -urile furnizeaz[ de asemenea c`teva declara\ii de itera\ie
sau de ciclare. Cea mai frecvent utiliza t[ dintre acestea este declara\ia
for.
Declara\ia for
Execut[ comenzile care sunt con\inute @n ea de un num[r
specificat de ori. Sintaxa declara\iei for este aceea]i at`t @n bash c`t ]i
@n pdksh . Bash ]i pdksh au dou[ forme pentru declara\ia for.
Prima form[ are urm[toarea sintax[:
for var1 in lista
do comenzi
done
#n acest caz, declara\ia for se execut[ o dat[ pentru fiecare
articol din list[. Aceast[ list[ poate fi o variabil[ care con\ine c`teva
cuvinte separate de spa\ii, sau poate fi o list[ de valori care sunt tastate
direct @n declara\ie. De fiecare dat[ @n cadrul buclei, variabilei var1 @i este asignat
articolul curent din list[, p` n[ c`nd se ajunge la ultimul.
O a doua form[ a declara\iei for are urm[toarea sintax[:
for var1
do
declaratii
done
#n aceast[ form[, declara\ia for se execut[ o dat[ pentru fiecare
articol din variabila var1 . C`nd este utilizat[ aceast[ sintax[, programul
shell presupune c[ variabila var1 con\ine to\i parametrii pozi\ionali
care au fost transmi]i @n programul shell @n linia de comand[
Tipic aceast[ form[ a declara\iei for este echivalent[ cu scrierea
urm[toarei declara\ii for:
for var1 in "$@"
do declaratii
done
163 Echivalentul declara\iei for @n tcsh este declara\ia foreach .
Sintaxa sa este urm[toarea:
foreach nume(lista)
declaratii
end
#n continuare prezent[m un exemplu de utilizarea a declara\iei
for din bash ]i pdksh . Exemplul ia ca op\iuni ale liniei de comand[
orice num[r de fi]iere text. Programul cite]te din fiecare aceste fi]iere,
converte]te toate literele @n litere mari , ]i apoi stocheaz[ rezultatul @ntr-un
fi]ier cu acela]i nume dar cu extensia .caps .
for file
do tr a-z A-Z < $file >$file.caps
done
Acela]i exemplu scris @n tcsh este:
#
foreach file ($*) tr a-z A-Z < $file >$file.caps
end
Declara\ia while
O alt[ declara\ie de iterare oferit[ de c[tre shell -uri este
while .
Ea determin[ ca un bloc de cod s[ fie executat at`t timp c`t o
expresie condi\ional[ furnizat[ este ad ev[rat[. Sintaxa pentru declara\ia
while @n bash ]i pdksh este urm[toarea:
while expresie
do
declaratii
done
Sintaxa pentru declara\ia while @n tcsh este:
while (expresie)
declaratii
end
#n continuare prezent[m un exemplu de utilizarea a acestei
declara\ii @n bash ]i pdksh . Programul afi]eaz[ parametrii care i-au fost
transmi]i, @mpreun[ cu num[rul parametrului.
count=1
164 while [ -n "$*" ]
do echo "Acesta este parametrul numarul $count
$1"
shift count='expr $count + 1'
done
Acela]i program scris @n tcsh este:
#
set count = 1 while ( "$*" != "" )
echo "Acesta este parametrul numarul $count
$1" shift
set count = 'expr $count + 1'
end
Declara\ia until
Este similar[ @n sintax[ ]i func\ie cu declara\ia while . Singura
diferen\[ real[ @ntre cele dou[ este c[ declara\ia until execut[ blocul
s[u de cod p`n[ c`nd expresia sa cond i\ional[ este fals[, iar declara\ia
while execut[ blocul s[u de cod p`n[ c`nd expresia sa condi\ional[ este
adev[rat[. Sintaxa pentru declara\ia until @n bash ]i pdksh este:
until expresie
do
comenzi done
Acela]i exemplu care a fost utilizat pentru declara\ia while
poate fi utilizat pentru declara\ia until . Singura modificare o reprezint[
negarea condi\iei:
count=1
until [ -z "$*" ] do
echo "Acesta este parametrul numarul $count
$1" shift
count='expr $count + 1'
done
165 Diferen\[ @ntre acest exemplu ]i exemplul cu declara\ia while
este c[ op\iunea -n a comenzii test (ceea ce @nseamn[ c[ ]irul are o
lungime diferit[ de zero) a fost e liminat[, ]i @nlocuit[ cu op\iunea -z
(ceea ce @nseman[ c[ ]irul are l ungimea zero). #n practic[ declara\ia
until nu este foarte util[ deoarece orice astfel de declara\ie poate fi
scris[ ca o declara\ie while .
Tsch nu are un echivalent pentru declara\ia until .
Comanda shift
Bash , pdksh ]i tcsh permit o comand[ numit[ shift .
Aceasta mut[ valorile curente stocat e @n parametrii pozi\ionali la st`nga
cu o pozi\ie. De exemplu, dac[ valorile parametrilor pozi\ionali curen\i
sunt:
$1=-r $2=file1 $3=file2
]i execut[m comanda shift parametrii pozi\ionali rezulta\i vor fi dup[
cum urmeaz[:
$1=file1 $2=file2
Urm[toarea comand[ va deplas a parametrii pozi\ionali cu dou[
locuri:
shift 2
#n exemplul urm[tor, programul shell a]teapt[ dou[ op\iuni @n
linia de comand[ – una care specific[ un fi]ier de intrare ]i alta care
specific[ un fi]ier de ie]ire. Programul cite]te fi]ierul de intrare,
transform[ toate caracterele din fi]ierul de intrare @n litere mari, apoi stocheaz[ rezultatele @n fi]ierul de ie]ire specificat.
Exemplul a fost scris utiliz`nd sintaxa aferent[ bash ]i pdksh :
while ["$1"]
do
if ["$1"="-i"] then
infile="$2" shift 2
elif ["$1"="-o"]
then outfile="$2"
shift 2
else echo "Programul $0 nu recunoaste optiunea
$1"
166 fi
done tr a-z A-Z <$infile >$outfile
Declara\ia select
Este o declara\ie de itera \ie pe care o ofer[ numai pdksh .
Sintaxa ei este:
select articol_meniu [in lista_de_articole]
do comenzi
done
unde parantezele p[trate sunt utilizate pentru a include partea op\ional[ a
declara\iei.
C`nd o declara\ie select este executat[, pdksh creeaz[ un
articol de meniu numerotat pentru fiecare element din lista_de_articole . Aceast[ lista_de_articole poate fi o
variabil[ ce con\ine mai mult dec`t un singur articol, cum ar fi
optiunea_1 optiunea_2 , sau poate fi o list[ de op\iuni introduse @n
comand[. De exemplu:
select articol_meniu in optiunea_1 optiunea_2
optiunea_3
Dac[ lista_de_ articole nu este funizat[, declara\ia
select utilizeaz[ parametrii pozi\ionali la fel ca ]i @n cazul declara\iei
for.
Odat[ ce utilizatorul programului ce con\ine o declara\ie
select alege un articol din meniu prin tastarea num[rului asociat
acestuia, declara\ia select stocheaz[ valoarea articolului selectat @n
variabila articol_meniu .
Exemplul urm[tor ilustre az[ utilizarea declara\iei select . #n
cadrul s[u se afi]eaz[ trei articole de meniu, iar c`nd utilizatorul alege unul dintre ele este @ntrebat dac[ aceasta este selec\ia dorit[. Dac[
utilizatorul introduce ori ce altceva @n afar[ de y sau Y, meniul este
reafi]at.
select articol_meniu in alege_1 alege_2
alege_33 do
echo "Sunteti sigur ca doriti sa alegeti
$articol_meniu"
167 read raspuns
if [$raspuns ="y" -o $raspuns ="Y"] then
break
fi done
#n acest exemplu sunt introduse c`teva comenzi noi. Comanda
read este utilizat[ pentru a permite introducerea de informa\ii de c[tre
utilizator. Ea stocheaz[ ceea ce utiliz atorul tasteaz[ @ntr-o variabil[
specificat[. Comanda break este folosit[ pentru a ie]i dintr-o declara\ie
while , until , repeat , select sau for.
Declara\ia repeat
Este o declara\ie de itera\ie pe care nu o posed[ dec`t tsch . Ea
execut[ o singur[ comand[ de un num[r specificat de ori. Sintaxa sa este
urm[toarea:
repeat count command
#n exemplul urm[tor, se ia un se t de numere ca op\iuni ale liniei
de comand[ ]i se afi]eaz[ acel num[r de puncte pe ecran.
#
foreach num ($*) repeat $num echo -n "."
echo ""
end
Orice declara\ie repeat poate fi rescris[ ca o declara\ie while
sau for.
Func\ii
Shell -urile ne permit s[ definim propriile noastre func\ii
51.
Acestea se comport[ asem[n[tor cu func\iile pe care le definim @n
limbajul C sau @n alte limbaje de programare. Avantajul principal al
utiliz[rii func\iilor este c[ ele grupeaz[ codul mai frecvent folosit, @n loc
de a-l insera @n mod repetat @n progr ame, acolo unde este nevoie de el. Ca
urmare, codul scris utiliz`nd func\ii tinde s[ fie mult mai u]or de citit ]i
de @ntre\inut.
Sintaxa pentru crearea unei func\ii @n bash ]i pdksh este
51 Shell -ul tcsh nu permite definirea de func\ii.
168urm[toarea:
nume_functie () {
comenzi shell }
De aseemenea pdksh permite urm[toarea sintax[:
function nume_functie {
comenzi shell
}
Ambele forme se comport[ similar.
Odat[ ce am definit func\ia u tiliz`nd una din formele men\ionate,
putem s[ o invoc[m tast`nd urm[toarea comand[:
fname [parm1 parm2 parm3 …]
De notat c[ putem transmite orice num[r de parametrii unei
func\ii. C`nd transmitem parametri une i func\ii, aceasta vede parametri
respectivi ca parametrii pozi\ionali, la fel cum programul shell o face
c`nd @i transmitem parametrii @n linia de comand[. De exemplu,
urm[torul program shell con\ine c`teva func\ii, fiecare dintre ele
execut`nd un task asociat cu una dint re op\iunile liniei de comand[.
#n cadrul exemplului sunt citite toate fi]ierele ce sunt transmise @n linia de comand[ ]i, @n func\ie de op\iunea utilizat[, scrie fi]ierele cu
litere mari, scrie fi]ierele cu litere mici, sau tip[re]te fi]ierele.
upper () {
shift
for i
do tr a-z A-Z <$1 >$1.out
rm $1
mv $1.out $1 shift
done; }
lower () { shift
for i
do tr A-Z a-z <$1 >$1.out rm $1
mv $1.out $1
shift done; }
169 print () {
shift for i
do
lpr $1 shift
done; }
usage_error () { echo "$1 sintaxa este $1 <optiune>
<fisiere_de_intrare>"
echo "" echo "unde optiune este una din
urmatoarele"
echo "p — pentru a tipari fisierele" echo "u — pentru a salva cu litere mari"
echo "l — pentru a salva cu litere mici"; }
case $1 in
p | -p) print $@;;
u | -u) upper $@;; l | -l) lower $@;;
*) usage_error $0;;
esac
Exerci\ii
1. S[ se scrie un fi]ier script care s[ afi]eze numele
utilizatorului, numele directorului home al acestuia, data calendaristic[,
]i numele directorului curent.
2. S[ se scrie un fi]ier script care s[ realizeze o copie de
siguran\[ a fi]ierelor din directorul curent, pe o dischet[, @ntr-un director
al c[rui nume este numele zilei din s[pt[m`n[ @n care se realizez[ copierea.
3. S[ se scrie un fi]ier script care s[ verifice dac[ un utilizator
particular, specificat, este logat. 4. S[ se scrie un fi]ier script care s[ verifice dac[ un fi]ier
specificat exist[ @n directorul curent. Dac[ da, atunci s[ copieze fi]ierul
respectiv cu un nume schimbat, nume ce este alc[tuit din numele original
]i extensia bak.
170LUCRAREA NR. 13
Programarea @n C sub Linux
C este un limbaj de programare de nivel înalt creat, ini\ial, pentru
a ajuta la dezvoltarea sistemului de operare UNIX . #ntre motivele care fac
din C unul din cele mai folosite limbaje de programare la ora actual[, se
pot enumera portabilitatea acestuia (aproape toate calculatoarele ]i
sistemele de operare dispun de un compilator de C, iar sintaxa limbajului
]i biliotecile de func ții sunt standardizate), precum ]i faptul c[ C este
limbajul de sistem pentru toate versiunile de UNIX .
Pentru a veni în înt`mpinarea noilor cerin\e în materie de dezvoltare de programe, exist[ extensii ale limbajului C, ca de exemplu
C++, limbaj de programare orientat pe obiecte.
Compilatorul GNU C
Pentru Linux , compilatorul de C disponibil, se nume]te GNU C
(GCC) . El este creat sub licen\a Free Software Foundation ]i
poate fi distribuit în mod liber. GNU C este un compilator complet opera\ional, compatibil ANSI
C, invocarea sa f[c`ndu-se astfel:
gcc [indicatori] [nume_fisiere]
Opera\iile specificate de indicatori vor fi executate asupra
fiec[rui fi]ier din linia de comand[.
Exist[ mai mult de 100 de indicatori ai compilatorului, o
documenta\ie complet[ referitoare la ac e]tia put`nd fi ob\inut[ cu ajutorul
comenzii:
info gcc
Deoarece mul\i din indicatorii GCC sunt forma\i din mai mult de
un caracter, este necesar ca fiecare indicator s[ înceap[ cu caracterul – .
#n cazul @n care se compileaz[ un program folosind GCC f[r[ a
specifica un indicator, se va crea un fi]ier executabil cu numele a.out .
Pentru a specifica un alt nume pentru fi]ierul executabil, se va
folosi indicatorul -o nume_executabil :
gcc -o proba test.c
Al\i indicatori frecvent utiliza\i @n cadrul compilatorului GCC
sunt:
171-c – genereaz[ doar cod obiect (extensia .o), f[r[ asamblare ]i
editare de leg[turi;
-g – genereaz[ informa\ii folosite la depanare (cu depanatorul
gdb)
-pg – compilatorul va adauga c od suplimentar care, atunci c`nd
este executat, generaz[ informa\ii ce pot fi folosite de gprof pentru a
afla detalii cu privire la viteza de execu\ie a programului.
Depanarea programelor folosind gdb
gdb este un depanator ( debugger ) puternic, ce poate fi folosit
pentru depanarea programelor C ]i C++. El permite inspectarea
con\inutului memoriei ce este utilizat[ de program în timpul execu\iei.
C`teva din func\iile gdb sunt:
– permite monitorizarea valorilor variabilelor programului; – permite setarea punctelor de întrerupere ( breakpoints ) care
vor opri programul la o linie de cod specificat[ ;
– permite execu\ia pas cu pas a programului.
Apelarea gdb se face cu comanda:
gdb [nume_executabil]
Pentru folosirea corect[ a depanatorului, este necesar[
compilarea programului utiliz`nd indicatorul -g.
#ntre comenzile de baz[ ale depanatorului se reg[sesc:
file nume_executabil – @ncarc[ programul executabil care
urmeaz[ a fi depanat;
kill – termin[ programul care este depanat;
list – afi]eaz[ sec\iunile din codul surs[ care au fost folosite
pentru a genera fi]ierul executabil;
next – execut[ o linie de cod, f[r[ a intra în alte func\ii;
step – execut[ o linie de cod, intr`nd în func\ii;
run – execut[ programul care este în depanare;
quit – iese din gdb;
watch – permite examinarea unei variabile a programului ori de
c`te ori variabila se modific[;
break – seteaz[ un punct de oprire ( breakpoint ). De fiecare
dat[ c`nd programul ajunge în acest punct, se opre]te;
make – recompileaz[ programul f[r[ a ie]i din gdb;
shell – execut[ comenzi shell ;
172help – informa\ii despre comenzi.
Exemplu de sesiune gdb:
Folosind un editor de text simplu ( joe sau pico ), s[ se
introduc[ urm[torul program:
#include <stdio.h>
void my_print(char *);
void my_print2(char *); main ()
{
char my_string[] = "salut"; my_print (my_string);
my_print2 (my_string);
} void my_print (char *string)
{
printf ("Sirul este: %s\n", string); }
void my_print2 (char *string)
{ char *string2; int size, i;
size = strlen (string);
string2 = (char *) malloc (size + 1); for (i = 0; i < size; i++)
string2[size – i] = string[i];
string2[size+1] = '\0'; printf ("Sirul afisat invers: %s\n",
string2);
}
Programul va fi compilat cu numele salut ]i va fi executat. Se
observ[ c[ a doua linie nu a afi]at ceea ce trebuia, ]i anume:
Sirul afisat invers: tulas
Pentru rezolvarea problemei se va folosi gdb. Mai înt`i, se
recompileaz[ programul folosind indicatorul -g:
gcc -g -o salut salut.c
Se apeleaz[ gdb tast`nd:
gdb salut
sau
173 gdb
]i apoi comanda:
(gdb) file salut
care va înc[rca programul salut .
Se execut[ programul aflat @n depanare:
(gdb) run
Se observ[ c[ programul ruleaz[ la fel, gdb specific`nd ]i codul
de ie]ire al acestuia. Pentru a g[si problema, se seteaz[ un breakpoint
dup[ instruc\iunea for din func\ia my_print2 . Pentru aceasta, se
afi]eaz[ codul surs[ folosind comanda list :
(gdb) list
Se observ[ c[ fiecare linie începe cu un num[r. Se identific[
num[rul liniei specificate (cea care con\ine instruc\iunea for), dup[ care
se introduce:
(gdb) break nr
Se ruleaz[ programul cu comanda run. Acesta se va opri la linia
specificat[. Pentru a putea depista eroarea se va urm[ri valoarea lui
string2[size -i]:
(gdb) watch string2[size-i]
#n acest moment, gdb va opri programul de fiecare dat[ c`nd
valoarea specificat[ se modific[. Întruc`t am mai fost setat un
breakpoint la aceea]i linie, programul se va opri de dou[ ori în
acela]i loc. Pentru a elimina redundan\a respectiv[, se ]terge breakpoint -ul tast`nd comanda:
(gdb) disable 1
unde 1 înseamn[ primul breakpoint , numerele breakpoint -urilor
fiind date în ordinea în care au fost setate. Se continu[ execu\ia tast`nd
comanda:
(gdb) cont
Observa\ie:
Se poate afi]a valoarea oric[rei variabile sau expresii utiliz`nd
comanda print expresie (de exemplu, print i sau print (size
– i)).
Se continu[ execu\ia, urm[rind de fiecare dat[ valorile expresiei afi]ate de watch . Se observ[ c[ nu este nici o valoare asignat[ pentru
string2[0] . Întruc`t malloc ini\ializeaz[ memoria alocat[ cu 0,
174primul caracter al ]irului este 0. Reamintim c[ în C, ]irurile se termin[ cu
\0. Problema o reprezint[ deci, as ignarea de valori pentru
string2[0] . Cum poate fi ea rezolvat[?
make
make este unul din cele mai importante instrumente folosite în
dezvoltarea de software pentru Linux . El \ine cont de dependen\ele
dintre fi]iere ]i actualizeaz[ doar acele fi]iere care au fost modificate de la ultima compilare.
make genereaz[ comenzi folosind un fi]ier descriptiv numit
makefile , comenzi ce sunt executate de shell . Acest fi]ier con\ine
seturi de reguli ce trebuie urmate c`nd se actualizeaz[ un program.
makefile este format din mai multe intr[ri, o intrare av`nd
forma:
tinta: dependenti
(TAB) lista comenzi
De obicei, make se folose]te astfel:
make tinta
unde
tinta este un nume ales de utilizator, atunci c`nd se d[
comanda make tinta , se vor executa comenzile indicate (compil[ri,
mut[ri, copieri de fi]iere).
dependenti este lista de fi]iere obiect, separate prin caracterul
",", care vor fi legate.
Exemplu:
prg: main.o prg1.o prg2.o /usr/lib/lib1.a
cc -o prg main.o prg1.o prg2.o /usr/lib/lib1.a
main.o: main.c cc -c main.c
prg1.o: prg1.c
cc -c prg1.c prg2.o: prg2.s
as -o prg2.o prg2.s #prg2.s -sursa în limbaj de
asamblare
Exerci\ii
1. S[ se explice comanda: gcc -o file file.c -lm
1752. S[ se explice utilitatea folosirii indicatorului -g la compilarea
unui program.
3. S[ se explice linia de program: string2=(char *)
malloc(size + 1);
4. Cum se lanseaz[ ]i cum se opre]te gdb?
5. S[ se explice comenzile de baz[ watch ]i shell din gdb.
6. Cum ]i cu ce scop se folose]te comanda break @n gdb ?
7. S[ se explice diferen\a dintre comenzile next ]i step ale
gdb.
8. S[ se explice diferen\a dintre comenzile run ]i make ale gdb.
9. S[ se explice ce face comanda cont în gdb ]i cum se
anuleaz[ un breakpoint .
10. Ce este gcc ]i la ce se folose]te indicatorul -pg?
11. S[ se scrie un program care ordoneaz[ cresc[tor un ]ir de
numere introduse de la tastatur[.
12. S[ se scrie un program care copiaz[ fi]iere. 13. S[ se scrie un program care afi]eaz[ num[rul de apari\ii ale
unui sub]ir într-un ]ir.
14. S[ se scrie un program care afi]eaz[ în ordine invers[ literele
unui ]ir de caractere citit de la tastatur[.
176
Bibliografie
Acost[chioaie D. Administrarea ]i configurarea sistemelor Linux ,
edi\ia a II-a, Ed. Polirom, Ia]i, 2003
Acost[chioaie D.,
Buraga S. Utilizare Linux. No\iuni de baz[ ]i practic[ , Ed.
Polirom, Ia]i, 2004
Cristea V., ].a. UNIX , Ed. Teora, Bucure]ti, 1993
Ignat I., ].a. Sistemul de operare UNIX. Gestionarea fi]ierelor .,
Ed. MicroInformatica, Cluj-Napoca, 1992
Ignat I., Kacso A. UNIX – Gestiunea proceselor , Ed. Albastr[, Cluj-
Napoca, 1995
Pilat F., UNIX , Ed. Teora, Bucure]ti, 1992
Tanenbaum A. S. Modern Operating Systems , Prentice Hall, 2001
Wielsch M. Le grand livre de UNIX , Editions
MicroApplication, Paris, 1994
***** http://www.redhat.com ***** http://metalab.unc.edu/pub/Linux/docs
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Elemente introductive privind sistemul de operare UNIX Istoric al evolu\iei sistemului Prima versiune experimental[ a sistemului, numit[ UNICS1… [601181] (ID: 601181)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
