Documente Academic
Documente Profesional
Documente Cultură
UNIX
UNIX
UNIX
CARACTERISTICI GENERALE
1.1 Introducere
Sistemul de operare UNIX, mpreun cu suita de protocoale TCP/IP
pentru comunicaia n reea i cu sistemul de fiiere NFS constituie o soluie
convenabil pentru constituirea unui sistem complet de operare n reea.
Dezvoltat iniial n laboratoarele AT&T Bell Labs (cu participarea
companiei General Electric i a faimosului MIT Massachusetts Institute of
Technology), UNIX-ul reprezint, de fapt, o mare familie de sisteme de
operare nrudite ce descind din munca programatorilor Dennis Ritchie i
Ken Thompson (creatorii limbajului C) la sfritul anilor 60 i nceputul
anilor 70. Sistemele din familia UNIX pot fi rulate pe orice tip de calculator,
plecnd de la calculatoarele personale pn la super-calculatoarele cu
configuraii extrem de avansate, utilizate ndeosebi n domeniul militar i cel
bancar. De asemenea, toate variantele de UNIX sunt multitasking, domeniu
n care UNIX are o reputaie deosebit.
Numele su deriv de la un jos de cuvinte al unui alt proiect
Bell Labs/MIT din acelai timp produs pe un calculator mainframe cunoscut
sub numele de Multics (Multiplexed Information and Computing Service).
Sistemul de operare interactiv Multics fusese scris pentru un computer al
companiei General Electric dovedindu-se dup ani de dezvoltare mult prea
costisitor, de aceea Bell Labs s-a retras ulterior din proiect.
n timpul lucrului la proiectul Multics, programatorul
Ken Thompson a scris un joc de cltorie n spaiu pentru computerul
General Electric. Dup sistarea proiectului, acesta a rescris jocul mpreun
Prin multitasking se nelege capacitatea unui sistem de operare de a executa mai multe
procese (task-uri) simultan. Acest lucru se realizeaz prin fenomenul time slicing ce
presupune c fiecare proces aflat n execuie utilizeaz calculatorul pentru o perioad
determinat de timp. Comportamentul multitasking este n opoziie cu task switching,
caz n care fiecare proces aflat n execuie trebuie s se termine pentru a se ncepe
execuia unui nou proces.
UNIX
UNIX
Operare multi-utilizator
Multitasking
Procesare distribuit
Nivel ridicat de securitate
10
11
UNIX
12
Operare multiutilizator;
Multitasking preemtiv;
Multiprocesare;
Suport pentru aplicaii multi-threaded.
13
UNIX
14
Platforma hardware
Vnztor
A/UX
Macintosh
Apple Computer
AIX
IBM
HP-UX
Staii HP RISC
Hewlett-Packard
Corporation
Linux
Intel x86
Shareware
NextStep
Next Computer
OSF/1 i Ultrix
Digital Equipment
Corporation
SCO OpenServer
Solaris
SunSoft
UNIXWare
Novell
15
UNIX
16
GNU s-a vrut iniial s fie o alternativ la versiunile comerciale de UNIX. Acest lucru nu
s-a ntmplat nc, dar Richard Stallman i ali programatori muncesc n continuare pentru
acest ideal. Paradoxal este c primele succese nregistrate de GNU au fost aplicaii
adiionale sistemelor proprietare UNIX. Componente GNU precum GNU Emacs, GCC
(GNU C Compiler) i bash (un nlocuitor free pentru Bourne Shell) sunt instalate astzi
implicit pe majoritatea variantelor de UNIX existente.
17
UNIX
18
19
UNIX
20
21
UNIX
22
Observaie
Aceast comand poate s difere de la un sistem la altul. Modalitatea
de apel prezentat mai sus se refer la Sun Solaris. Pe un sistem FreeBSD
ns, comanda poate fi apelat n felul urmtor, fr a se specifica opiunea s: man nr_sectiune nume.
n cazul n care nu tim numele comenzii, putem apela comanda man
folosind opiunea -k, prin care facem o cutare dup un cuvnt cheie.
$ man -k cuvant_cheie
23
UNIX
Tasta SPACE
Tasta RETURN
Tasta b
Tasta f
Tasta q
/sir_caractere
Tasta n
Tasta h
24
Varianta de UNIX
BSD
HPUX 10 & 11
SunOS, Solaris
IBM AIX
SGI IRIX/Linux
UnixWare & SCO
25
2
2.1
Generaliti
26
UNIX
Tabela de inoduri
Blocurile de stocare
27
acces la acesta prin mai multe nume. O legtur este, de fapt, o intrare
ntr-un director ce face redirectarea spre un fiier stocat n alt director sau
chiar spre un ntreg alt director.
Directorul root are o serie de subdirectoare (ce difer n funcie de
implementarea UNIX), printre care cele mai importante sunt, de regul:
"bin", "dev", "etc", "opt", "lib","mnt", "tmp","home" i "usr".
Aceste directoare au urmtorul coninut:
/bin
/dev
/etc
/lib
/mnt
Comenzi UNIX
Director pentru dispozitive speciale
Programe i fiiere de date suplimentare
Directorul bibliotecii de programe C
Directorul mount; rezervat pentru montarea sistemelor de
fiiere
/opt Conine aa numitele software storage objects (SSO's)
/tmp Director temporar
/usr Conine rutine utilizator
/var Fiiere obiect nepartajate
/home Directorul utilizatorilor sistemului
Unele dintre directoarele UNIX sunt mai interesante dect altele;
existena i coninutul acestor directoare depinde de varianta de UNIX
utilizat. Nu exist practic reguli foarte stricte cu privire la localizarea
fiierelor. Spre exemplu, pentru a gsi anumite fiiere sistem binare, putem
cuta ntr-unul din directoarele: /bin, /usr/bin, /sbin, /usr/sbin i chiar n /etc.
Fiierele binare motenite se pot gsi n /usr/ucb sau /usr/bsd. Alte
fiiere executabile se pot gsi n alte locuri din structura de directoare. i
legturile simbolice trebuie considerate cu atenie; directorul /home poate fi
definit ca avnd propriul sistem de fiiere (montat separat) sau poate fi
definit ca subdirector al rdcinii. Pe serverele Solaris, spre exemplu, el este
gsit ca subdirector al directorului /export; de regul, acest director conine
directoarele home ale utilizatorilor existeni n sistem.
Spaiul dedicat stocrilor temporare este localizat, de regul, n
directorul /tmp. Acest director poate fi accesat pe majoritatea sistemelor ca
/tmp, /usr/tmp sau /var/tmp. Dou dintre cele trei referine vor fi directoare
reale iar cea de-a treia va fi o legtur simbolic (symlink) ctre una din
primele dou. Varianta de UNIX utilizat va influena care dintre aceste
referine este legtura simbolic. Se recomand totui ca aceste directoare s
28
UNIX
fie reconfigurate astfel nct o singur referin s fie un director real, iar
celelalte dou s fie legturi simbolice ctre acest director. Mai mult, acest
director se recomand a fi montat separat. Deoarece utilizatorii pot scrie
fiiere de dimensiuni mari n spaiul temporar /tmp, montarea separat
asigur protecia directoarelor / i /usr fa de umplerea cu fiiere
temporare. O regul general valabil n acest sens este aceea c utilizatorii
nu trebuie s aib drept de creare i tergere de fiiere n locaiile /
i /usr.
Directorul /tmp trebuie s aib permisiuni de acces 1777, nu 777.
Dreptul de acces 777 permite ca orice utilizator s aib drepturi depline n
directorul /tmp, n timp ce 1777 seteaz aa-numitul sticky bit ce
nseamn c directorul poate fi modificat sau ters doar de ctre proprietar.
Directorul /usr poate fi montat separat sau poate fi subdirector al lui
/. Subdirectoarele sale pot fi:
2.2
29
Spaiul de swap
30
UNIX
Tipuri de fiiere
Fiiere text
Fiiere de date
Fiiere surs (ce conin codul surs al unor programe)
Fiiere executabile
Programe shell
Fiiere legtur
Fiiere asociate unor dispozitive
a) Fiiere text
Cel mai simplu tip de fiiere l constituie fiierul text, ce conine
doar caractere ca acelea pe care le putei citi n cadrul acestui capitol. Aceste
caractere ASCII (American Standard Code for Information Interchange)
sunt literale sau caractere numerice ce reprezint manifestarea muncii pe
31
care o facem. Dac utilizm, spre exemplu, un editor UNIX pentru a crea un
mesaj pentru pota electronic atunci crem un fiier text n cele mai multe
dintre cazuri. Avem n continuare un exemplu de fiier ASCII de pe un
sistem Linux:
:.Z: : :/bin/compress -d -c
%s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
: : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
: : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
: : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
: : :.tar.Z:/bin/tar -c -Z -f %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
: : :.tar.gz:/bin/tar -c -z -f %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
b) Fiiere de date
Fiierele de date sunt fiierele ce conin date utilizate de diverse
aplicaii de pe sistem. Dac utilizm un program de tipul FrameMaker
pentru scrierea unei cri, fiierele create cu acest program vor fi de tipul
suportat de acesta (la fel ca i fiierele speciale de date de pe un sistem
Windows). Fiierele de date conin pe lng informaia n sine (de tip text)
i informaii speciale de formatare. Acelai lucru se petrece i n cazul unui
fiier baz de date, ce conine att date ce pot fi citite ct i informaii
specifice formatrii respective.
c) Fiiere cod surs
Fiierele cod surs sunt fiiere ce conin date scrise ntr-un limbaj de
programare precum C, C++, Java, Pascal, Fortran etc. Aceste fiiere au, de
regul, extensii conforme cu limbajul n care au fost scrise; spre exemplu,
un program surs scris n C va avea extensia .c.
d) Fiiere executabile
Fiierele executabile reprezint programe obinute cu ajutorul unui
compilator (sau interpretor) i editor de legturi ce pot fi rulate (executate).
Dac ncercm s citim un fiier executabil ca pe un fiier text, vom obine o
serie de caractere ciudate i chiar sunete; n urma unei astfel de citiri se
pot pierde setrile ecranului. Majoritatea comenzilor UNIX sunt programe
executabile (vezi directorul /bin).
32
UNIX
33
Descriere
/dev/cua
/dev/dsk
/dev/fd
/dev/kmem
/dev/log
/dev/mem
/dev/null
Dispozitivul null
/dev/pts
Pseudo-terminale
/dev/rdsk
/dev/rmt
/dev/swap
Spaiul de swap
/dev/tty
/dev/zero
Fiierele device de tip caracter sunt cel mai des folosite pentru
proceduri de copiere de octei (ca n cazul comenzii dd). Majoritatea
echipamentelor de band au asociate doar fiiere device de tip caracter.
Fiierele device de tip bloc sunt utilizate pentru transferul de date n blocuri
de octei, ceea ce este mai avantajos i mai rapid pentru majoritatea
aplicaiilor. Pentru varianta de UNIX Solaris, hard-discurile au asociate att
un fiier device de tip caracter ct i unul de tip bloc. Fiecare dintre acestea
sunt folosite n cazuri diferite. Operaiile uzuale se fac prin intermediul
fiierelor bloc, ns crearea sistemului de fiiere se face cu ajutorul fiierelor
caracter.
Toate fiierele device standard UNIX sunt pstrate n directorul /dev
(unele implementri de Linux Red Hat pstreaz acest sistem). n varianta
UNIX Solaris i n unele noi implementri de Red Hat ns, coninutul lui
/dev tinde s fie o combinaie de fiiere device i de legturi simbolice ctre
fiiere device situate n alte directoare. ntr-un astfel de sistem, directorul
34
UNIX
[optiune(optiuni)] [argument(e)]
35
[nume_director]
Exemple:
$ cd
/tmp
/usr/stud
../../bin
36
UNIX
37
Comanda ls are o serie ntreag de opiuni, fiind una dintre cele mai
folositoare i flexibile comenzi UNIX.
Exemple:
$ ls -a
sys
-r--r--r--
1 root
sys
drwxr-xr-x 2 root
sys
-rwxr-xr-x 2 root
sys
-rwxr-xr-x 2 root
sys
-rwxr-xr-x 1 bin
bin
-rwxr-x--x 1 root
sys
-rwxr-x--x 1 root
sys
-rwxr-xr-x 2 root
sys
-rwxr-xr-x 2 root
sys
-rwxr-xr-x 1 root
sys
-rwxr-xr-x 1 root
sys
drwxr-xr-x 2 root
sys
-rwxr-x--x 1 root
sys
38
UNIX
39
40
UNIX
r w x
r w x
r w x
r w x
r w -
r - -
r w x
r - -
r - -
r w x
- - -
- - -
r - x
- - -
- - -
r
r
r
r
Coloana 2-4
w
x
w
x
w
x
x
r
r
r
-
Coloana 5-7
w
x
w
-
Coloana 8-10
r
w
x
r
r
-
41
b)
Descriere
Director
42
UNIX
Dimensiunea n octei
Grupul
drwxr-xr-x
-r--r--r-drwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwsr-xr-x
-rwxr-x--x
-rwxr-x--x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
-rwxr-xr-x
drwxr-xr-x
-rwxr-x--x
2
1
2
2
2
1
1
1
1
2
2
1
1
2
1
root
root
root
root
root
bin
uucp
root
root
root
root
root
root
root
root
sys
sys
sys
sys
sys
bin
uucp
sys
sys
sys
sys
sys
sys
sys
sys
Data
Numele fiierului
43
Numele fiierului.
Observaie
Pe un sistem Linux, comanda ls deriv din proiectul GNU fileutils,
avnd o ntreag serie de opiuni i caracteristici speciale. Spre exemplu,
numele de fiiere pot aprea listate n culori n funcie de tipul de fiier.
Culorile folosite la afiare sunt definite n fiierul /etc/DIR_COLORS;
acestea se pot personaliza folosind i fiierul .dir_colors din directorul
curent home.
Formatul acestui fiier este definit n fiierul /etc/DIR_COLORS.
Pentru a afia numele fiierelor fr culori dar cu simboluri, se pot folosi
opiunile --color i --classify. n mod asemntor cu opiunea -F,
simbolurile --classify sunt urmtoarele: / pentru directoare, * pentru
programe, @ pentru legturi simbolice, | pentru fiiere de tip pipe i =
pentru fiiere de tip socket.
Astfel, listingul comenzii:
$ ls --color=never --classify
studenti/ lista.sh* text.sub
semnific faptul c studenti este director, iar fiierul lista.sh este executabil.
44
UNIX
2.6
<
2>
>>
Descriere
Reprezint orice caracter sau secven
de caractere
Identific un singur caracter
Permite scrierea mai multor comenzi
pe aceeai linie
Identific o mulime sau un domeniu
de caractere pentru o singur poziie
Redirecteaz ieirea unei comenzi
ctre un fiier n loc de ecran (stdout fiierul standard de ieire).
Redirecteaz intrarea unei comenzi
dintr-un fiier n loc de tastatur (stdin
- fiierul standard de intrare)
Redirecteaz eroarea unei comenzi
ctre un fiier n locul ecranului
Adaug ieirea unei comenzi la un
fiier existent (concatenare)
Formatul comenzii
*
?
comanda;comanda
[domeniu]
comanda > fisier
45
Descriere
Preia ieierea unei comenzi i o
paseaz ca intrare comenzii urmtoare
Indicatorul prompter-ului standard
pentru shell-ul Bourne i Korn
Indicatorul prompter-ului standard
pentru shell-ul C
Indic directorul home
Re-execuia comenzii
Formatul comenzii
comanda | comanda
Nu se aplic
Nu se aplic
~
!n, unde n este numrul
comenzii introduse
46
3
3.1
ADMINISTRAREA FIIERELOR
I DIRECTOARELOR
Introducere
47
UNIX
48
49
UNIX
Comanda cat
Comanda cat (denumirea provine de la concatenate) ne ofer
posibilitatea vizualizrii fiierelor text. Deoarece comanda cat afieaz rapid
pe ecran coninutul fiierului respectiv, trebuie s fim pregtii s folosim
combinaiile Ctrl+s i Ctrl+q prezentate anterior sau s folosim comanda
more. Exemplu:
$ cat /home/razvan/.profile
va afia coninutul fiierului /home/razvan/.profile pe ecran. n cazul n care
coninutul fiierului este mai mare dect un ecran, aceast comand poate fi
conectat prin pipe cu comanda more astfel:
$ cat /etc/passwd | more
i astfel se va afia ecran cu ecran coninutul fiierului /etc/passwd.
Comanda cat poate fi utilizat i pentru concatenarea a dou sau mai
multe fiiere ntr-unul singur. n acest caz, sintaxa este urmtoarea:
$ cat fisier_1 [fisier_2 [fisier_n]] > fisier_complet
50
Comanda head
Comanda head este utilizat pentru afiarea primelor n linii dintrunul sau mai multe fiiere. Dac se omite specificarea numrului de linii, se
afieaz n mod implicit primele 10 linii din fiier. Comanda head este util
n cazul n care se dorete vizualizarea rapid a primelor linii dintr-un fiier,
fr a lua n considerare mrimea acestuia. Sintaxa general a comenzii este
urmtoarea:
$ head [-n] fisier(e)
Comanda tail
Comanda tail se folosete pentru afiarea ultimelor n linii dintr-un
fiier text. n mod asemntor cu comanda head, dac se omite specificarea
numrului de linii, se afieaz n mod implicit ultimele 10 linii din fiier.
Comanda tail este util n cazul n care se dorete vizualizarea rapid a
ultimelor intrri ntr-un fiier log de dimensiuni mari.
Utilitarele de backup utilizeaz frecvent aceast metod de a scrie
rezultatele ntr-un fiier log care ne arat pentru ce fiiere a fost fcut copia
de siguran i cnd. Ultima linie dintr-un astfel de fiier log conine, de
regul, numrul total de fiiere care au fost procesate i mesaje ce indic
dac procesul de backup s-a ncheiat cu succes. Comanda tail poate fi
folosit n dou moduri:
$ tail [-n] fisier(e)
sau
$ tail [+n] fisier(e)
51
UNIX
52
53
UNIX
54
Crearea fiierelor
De regul, fiierele i directoarele sunt create de utilizatorii obinuii
sau de ctre administratorul sistemului, dar exist i multe aplicaii care
creeaz fiiere. O modalitate de a crea un fiier nou, fr coninut este aceea
de a utiliza comanda touch. Sintaxa comenzii este urmtoarea:
$ touch fisier1 fisier2 fisierX
55
UNIX
Crearea directoarelor
n UNIX putem crea directoare cu ajutorul comenzii mkdir. Sintaxa
comenzii este urmtoarea:
$ mkdir dir1 dir2 dirX
Observaie.
Pentru a crea o structur de directoare pe mai multe nivele trebuie s
utilizm comanda mkdir cu opiunea -p. De exemplu, pentru a crea structura
de directoare dir1/dir2/dir3 din directorul curent, vom utiliza comanda:
$ mkdir dir1/dir2/dir3
56
tergerea fiierelor
n UNIX putem terge fiiere cu ajutorul comenzii rm. Sintaxa
comenzii este urmtoarea:
$ rm [-i] fisier(e)
tergerea directoarelor
tergerea directoarelor se face fie cu comanda rm -r nume_director,
fie cu rmdir. Pentru a putea ns terge un director cu comanda rmdir,
trebuie ca directorul sau directoarele respective s fie goale, adic s nu
conin nimic, nici un fiier sau subdirector. n caz contrar, vom obine un
mesaj de eroare, ca n figura 3.6. Comanda rmdir poate fi folosit astfel:
$ rmdir dir1 dir2 dirX
Directoarele specificate
trebuie s fie goale
57
UNIX
58
Observaie.
Comanda cp nu ine cont de existena fiierului destinaie ce urmeaz
a fi copiat. De aceea, pentru a preveni tergerea accidental a vechilor
fiiere, este util s folosim opiunea -i (interactive) ca msur de securitate.
Utilizarea acestei opiuni face ca atunci cnd fiierul destinaie exist s fim
ntrebai dac dorim copierea peste fiierul vechi sau nu, ca n figura 3.9.
59
UNIX
Copierea directoarelor
Copierea directoarelor se face cu ajutorul comenzii cp -r (recursive).
Folosirea opiunii -r face ca directoarele s fie copiate cu tot cu
subdirectoare, dac este cazul. Pentru copierea un director vom folosi
comanda:
$ cp -r[i] dir_sursa dir_destinatie
Redenumirea fiierelor
Att fiierele ct i directoarele pot fi redenumite cu ajutorul
comenzii mv (move). Aceast comand poate fi utilizat cu dou sensuri:
pentru a redenumi un fiier n cadrul unui director sau pentru a muta (nu
copia!) un fiier dintr-un director n altul. Redenumirea unui fiier se face
astfel:
$ mv [-i] fis_sursa fis_destinatie
60
Redenumirea directoarelor
Redenumirea unui director se face astfel:
$ mv [-i] dir_sursa dir_destinatie
61
UNIX
Alte exemple:
$ mv student.txt student.doc
Se redenumete fiierul
student.txt cu noul nume
student.doc
62
$ mv student temp
$ mv student /home/serban/temp
Se redenumete fiierul
student n temp (de remarcat
este faptul c, dac temp este
un director, fiierul student va
fi mutat n acel director).
Se mut fiierul student n
directorul /home/serban/temp
Observaie.
Ca i n cazul comenzii cp, este bine s prevenim tergerea
(rescrierea) accidental a vechilor fiiere i directoare, prin utilizarea
opiunii -i (interactive) ca msur de securitate. Utilizarea acestei opiuni
face ca atunci cnd un fiier sau director cu acelai nume exist s fim
ntrebai dac dorim suprascrierea sau nu, ca n figura 3.15. Vom introduce
n (no) dac nu dorim acest lucru sau y (yes) dac dorim suprascrierea.
63
UNIX
n care este creat fiierul lista ce conine ieirea comenzii ls. Exemplul este
prezentat i n figura 3.16.
64
Observaie.
Pentru a redirecta ieirea unei comenzi poate fi folosit i operatorul
>> care are acelai efect cu > dar este folosit pentru a aduga ieirea la
sfritul unui fiier existent, n loc de a suprascrie fiierul.
Redirectarea erorilor
Redirectarea erorilor generate de comenzi este util atunci cnd se
dorete analiza lor. Adminstratorii de sistem i programatorii fac acest lucru
atunci cnd scriu shell-scripturi de administrare. Pentru a redirecta fiierul
standard de eroare, se folosete ca operator de redirectare combinaia 2>,
astfel:
$ comanda 2> nume_fisier
65
UNIX
Observaie.
Am putea include aici i operatorul pipe ( | ) care se folosete atunci
cnd ieirea unei comenzi este redirectat ca intrare pentru o alt comand.
Efectul folosirii unei secvene pipe este acela al scrierii unui mic program,
deoarece se pot nirui pn la 20-30 de comenzi ntr-o astfel de secven
pipe. Spre exemplu, dac dorim afiarea ecran cu ecran a fiierelor din
directorul curent (atunci cnd avem multe fiiere n director) putem folosi
secvena pipe urmtoare:
$ ls -la | more
Crearea de legturi
Pentru a salva spaiu pe disc i a nu face o copie a unui fiier, de
multe ori putem crea o legtur (link) ctre acesta. n acest mod putem
accesa fiierul specificat i din alte locaii de pe hard disk. Crearea de astfel
de fiiere tip legtur este util atunci cnd mai muli utilizatori trebuie s
lucreze asupra aceluiai fiier (un proiect la care lucreaz o echip de
programatori, de exemplu) sau atunci cnd se dorete o referin la un fiier
utilizndu-se un nume mai scurt. Comanda folosit este comanda ln (link)
iar formatul general al este:
$ ln fisier fisier_nou
Observaie.
Atunci cnd este creat un fiier, este creat o legtur dintre director
i acel fiier. Numrul de legturi pentru fiecare fiier este de cel puin 1
(referina proprie). Numrul de legturi este afiat n cea de-a doua coloan
a listingului comenzii ls -l. De fiecare dat cnd este creat o legtur ctre
un fiier, numrul de legturi ale acelui fiier este incrementat. n figura
3.18 avem un exemplu n care este listat numrul de legturi (1) ctre
fiierul test, este creat o legtur ctre fiierul test i apoi vedem c
numrul de legturi a devenit 2.
66
Observaie.
Pentru a terge un fiier de tip legtur se utilizeaz aceeai comand
rm, care va terge legtura ctre fiier dar nu i fiierul original. Odat cu
tergerea fiierului de tip link, numrul de legturi al fiierului original este
decrementat cu 1.
3.3
67
UNIX
1k-blocks
380791
49558
16033712
256436
17245524
253871
Used
108116
7797
62616
0
1290460
88384
Available
253015
39202
15156608
256436
15079036
152380
Use%
30%
17%
1%
0%
8%
37%
Mounted on
/
/boot
/home
/dev/shm
/usr
/var
# df /
Afieaz spaiul liber din directorul specificat: / (root).
# df -kvi
Afieaz spaiul liber pe toate sistemele de fiiere montate msurat n
kilobii i i-noduri.
Comanda df difer cte puin de la o variant UNIX la alta. Exist o
serie de opiuni cu care aceast comand poate fi apelat, n funcie i de
varianta sistemului de operare, cum spuneam mai nainte. Spre exemplu,
Linux are opiunea h pentru aceast comand, care produce urmtorul
output:
# df h
Filesystem
/dev/sda5
/dev/sda1
/dev/sda3
none
/dev/sdb1
/dev/sdb2
Size
372M
48M
21G
250M
22G
248M
Used
106M
7.7M
62M
0
1.3G
87M
Avail
247M
38M
20G
250M
20G
148M
Use%
30%
17%
1%
0%
8%
37%
Mounted on
/
/boot
/home
/dev/shm
/usr
/var
68
Comanda dfspace
Comanda dfspace este o comand specific sistemelor SCO UNIX,
oferind o modalitate de vizualizare a spaiului liber de pe disc mai uor de
neles fa de comanda clasic df.
69
UNIX
Comanda du
Pentru a determina spaiul ocupat de un director din sistemul de
fiiere UNIX se poate folosi comanda du (disk usage). Exemple:
$ du
Apelat fr nici o opiune, comanda du ne arat spaiul ocupat de
ctre directorul curent pe disc, msurat n blocuri;
$ du -k
Opiunea k ne va arta spaiul ocupat n blocuri de cte 1KB;
$ du /home/razvan
Aceast comand ne prezint spaiul ocupat de ctre subdirectorul
/home/razvan.
$ du ks /home/razvan/*
Afieaz un sumar al fiecrui subdirector din directorul
/home/razvan.
De regul, comanda du genereaz un listing destul de lung atunci
cnd este vorba despre multe fiiere i directoare existente n directorul
pentru care se face afiarea. S considerm urmtorul exemplu:
12
16
412
36
32
196
48
16
1232
4
8
1848
3092
160
136
10464
76
52
2792
24
2872
2880
554
184
14
140
360
196
86
20
1110
6848
190
13974
28484
./.kde/Autostart
./.kde
./bin
./CraigsList
./DEMO/Src
./DEMO
./elance
./Exchange
./Gator/Lists
./Gator/Old-Stuff/Adverts
./Gator/Old-Stuff
./Gator/Snapshots
./Gator
./IBM/i
./IBM/images
./IBM
./CBO_MAIL
./Lynx/WWW/Library/vms
./Lynx/WWW/Library/Implementation
./Lynx/WWW/Library/djgpp
./Lynx/WWW/Library
./Lynx/WWW
./Lynx/docs
./Lynx/intl
./Lynx/lib
./Lynx/lynx_help/keystrokes
./Lynx/lynx_help
./Lynx/po
./Lynx/samples
./Lynx/scripts
./Lynx/src/chrtrans
./Lynx/src
./Lynx/test
./Lynx
.
70
71
UNIX
Semnificaie
Cutare dup nume
type tip_fisier
mtime [+|-]n
Cutare dup
data/ora ultimei
modificri
Cutare dup
data/ora ultimului
acces la fiier
Cutare dup
permisiuni de acces
atime [+|-]n
perm mod
size [+|-]n[c]
Cutare dup
permisiuni de acces
Aciunea
Caut toate fiierele cu numele specificat n
nume_fisier.
Caut toate fiierele cu tipul specificat de
tip_fisier.
Caut toate fiierele a cror modificare este
mai veche (+) sau mai nou (-) dect n zile.
Caut toate fiierele a crui acces este mai
vechi (+) sau mai nou (-) dect n zile.
Caut toate fiierele care satisfac criteriul
de permisiuni specificat (folosind notaia
octal).
Caut toate fiierele care au dimensiunea
exact, mai mare (+) sau mai mic (-) dect
n (n reprezint blocuri de 512 octei, sau
caractere dac este urmat de c).
72
73
UNIX
Argumentul '{}' va insera fiecare fiier gsit n linia de comanda chmod, iar
\; semnific ncheierea liniei de comand exec. Rezultatul comenzii va fi
acela c toi utilizatorii vor avea drepturi de citire asupra fiierelor rc.conf.
Un exemplu mai complex de cutare a fiierelor utiliznd operatorul
-o l ntlnim n cazul urmtor:
$ find /usr/src -not\( -name "a*" -o -name "a.*" \) '{}' \; -print
Comanda urmtoare:
$ find . -exec grep infocib.ase.ro {} \; -print
74
Comanda grep
Comanda grep (global regular expression print) este folosit pentru
cutarea unor iruri de caracactere ntr-unul sau mai multe fiiere sau n
ieirile generate de comenzi. irurile de caractere pot conine pe lng
caractere alfanumerice i spaii sau diferite semne de punctuaie, cu condiia
s fie ncadrate de apostrofuri ().
De regul, comanda grep este utilizat ca filtru pentru ieirile altor
comenzi. Comanda grep face distincie ntre litere mari i litere mici n mod
implicit; dac dorim s schimbm aceast setare implicit, putem folosi
opiunea -i. Opiunea -v caut toate liniile ce nu se potrivesc ablonului
specificat. Formatul general al comenzii grep este urmtorul:
$ grep [optiuni] sir_caractere nume_fisier
75
UNIX
* (asterisc)
^ (caret)
$ (dolar)
\ (backslash)
[] (paranteze
ptrate)
76
Sortarea fiierelor
77
UNIX
-r
-f
-d
+nM
-o
nume_fisier
78
3.7
79
UNIX
/dev/fd0
/home/razvan
80
81
UNIX
82
F
V
(/tmp/fisier.jar)
sau
banda
83
UNIX
84
-c (--stdout)
-d (--decompress)
-f (--force)
-h (--help)
-l (--list)
-L
-n (--no-name)
-N (--name)
-q (--quiet)
-r (--recursive)
-s sufix
-t (--test)
-v (--verbose)
Tabelul 3.26
Semnificaie
Folosete modul text ASCII Caracterele sfrit de linie (end-ofline) sunt convertite folosind convenii locale. Pe sistemele
Windows, gzip convertete CR+LF n LF atunci cnd
comprim fiierul. La decompresie, gzip -d i gunzip
convertete LF napoi n CR+LF.
Scrie rezultatul produs ctre standard output i las fiierul de
intrare nemodificat.
Decomprim fiierul specificat
Determin forarea compresiei/decompresiei chiar dac fiierul
are mai multe legturi, dac fiierul output exist deja sau dac
datele comprimate sunt citite sau scrise la un terminal.
Afieaz informaii de ajutor
Afieaz informaii despre fiecare fiier comprimat.
Afieaz informaii despre licena gzip
Nu salveaz implicit folosind numele fiierului iniial
Atunci cnd fiierele sunt compresate, se salveaz totdeauna
numele i informaiile fiierului iniial, astfel nct la
decompresie, numele fiierului iniial este restaurat. Aceast
opiune se folosete pe sisteme ce au reguli stricte privind
lungimea fiierului.
Suprim toate mesajele de avertisment
Acioneaz pe structura directorului recursiv (inclusiv
subdirectoarele)
Modific extensia implicit .gz n extensia specificat n sufix.
Face un test de integritate a fiierului comprimat
Afieaz informaii adiionale pentru fiecare fiier n parte,
cum ar fi numele i procentul de reducere a dimensiunii
85
UNIX
Exemple
Putem determina dimensiunea fiierului necomprimat cu o comand
de genul:
$ gzcat fisier.Z | wc -c
86
87
1. Servicii de reea
SERVICII
DE REEA
Dou dintre cele mai utilizate servicii de reea n UNIX sunt NFS i
ARPA. Serviciile NFS (Network File System) reprezint servicii de reea ce
permit partajarea de directoare n reea. ARPA este rezultatul unei
combinaii ntre servicii ARPA i servicii Berkeley. Serviciile ARPA
ofer suport pentru comunicaiile dintre sisteme ce ruleaz sisteme de
operare diferite, n timp ce serviciile Berkeley ofer suport doar pentru
sisteme ce ruleaz sub UNIX. n continuare sunt prezentate cele mai
cunoscute comenzi ARPA-Berkeley.
4.1
Servicii ARPA
Connected to infocib.
AIX version 5 infocib
login: stud
password:
Se introduce parola
88
UNIX
Name: stud
Password:
Se introduce parola
ftp> bye
Goodbye.
89
Sertvicii de reea
Explicaii
ascii
binary
cd
dir
get
lcd
ls
mget
put
mput
quit/bye
90
UNIX
Comanda remsh
Comanda remsh (remote shell) este utilizat atunci cnd suntem
conectai la un sistem UNIX i dorim s rulm o comand pe alt sistem
UNIX. Rezultatele comenzii sunt afiate local. n exemplul de mai jos
putem vizualiza coninutul fiierului test.file aflat pe serverul infocib
folosind comanda more:
$ remsh infocib more /tmp/test.file
91
Sertvicii de reea
Comanda rwho
Comanda rwho (remote who) este utilizat pentru a determina
utilizatorii conectai la alt sistem UNIX. Pentru ca aceast comand s
funcioneze este necesar rularea daemonului rwhod. Exist i alte comenzi de
tip r (remote) care difer ntre ele n funcie de varianta de UNIX utilizat.
4.1.4 Maparea numelor staiilor din reea
Un lucru important de configurat n reea l reprezint modalitatea de
recunoatere i mapare a numelor staiilor din reea. n acest sens exist trei
metode:
BIND (Berkeley Internet Named Domain)
NIS (Network Information Service)
Fiierul /etc/hosts
Modalitatea cea mai simpl i cea mai uzitat este aceea de
implementare a numelor staiilor folosind fiierul /etc/hosts. Acest lucru se
ntmpl mai ales pentru reele locale restrnse, ce au un numr mic de staii
de lucru. n reele mari este utilizat sistemul DNS (Domain Name Server)
care rezolv maparea numelor staiilor de lucru, utiliznd BIND pentru a
determina adresa pornind de la nume.
Sistemul BIND funcioneaz pe baza modelului client/server, astfel
nct n momentul n care un client dorete adresa unei staii aceasta este
oferit de ctre serverul BIND. Utilizarea sistemului BIND conduce la
performane mai bune pentru meninerea informaiilor legate de nume
deoarece datele sunt stocate doar n cteva locuri i nu pe fiecare sistem n
parte (ca n cazul fiierului /etc/hosts). Staiile client folosesc un fiier
/etc/resolv.conf pentru configurarea programului resolver (care determin
adresa folosind numele). Serverul de nume i adresa IP a sa reprezint
elementele cheie n rezolvarea maprii adreselor. Configurarea sistemelor
DNS i BIND este sarcina administratorului de reea.
Fiierul /etc/hosts
Acest fiier conine informaii despre alte sisteme cu care suntem
conectai n reea. Informaiile din fiier reprezint adresa Internet a fiecrui
sistem, numele sistemului i alte alias-uri pentru acesta. Dac fiierul
/etc/hosts este modificat pentru a conine numele sistemelor din reea atunci
se poate folosi comanda rlogin pentru a accesa alt sistem. O linie din fiierul
/etc/hosts arat n felul urmtor:
<adresa_ip> <nume_oficial> <alias>
92
UNIX
Fiierul /etc/hosts.equiv
Acest fiier este utilizat n cazul n care se dorete utilizarea
comenzii rlogin fr ca utilizatorii s fie nevoii s introduc o parol atunci
cnd se conecteaz la un alt sistem. Totui, acest lucru presupune un mare
risc de securitate i din aceast cauz acest procedeu nu este prea des
utilizat.
Numele de login ale utilizatorilor trebuie s fie aceleai pe ambele
sisteme pentru ca fiierul /etc/hosts.equiv s permit utilizatorilor s se
conecteze fr a introduce o parol. Fiierul /etc/hosts.equiv trebuie s
conin numele staiilor din reea de pe care se dorete conectarea, separat
fiecare nume pe cte o linie din fiier.
Fiierul /.rhosts
Fiierul /.rhosts reprezint alternativa fiierului /etc/hosts.equiv
pentru superuser. Dac se face conectarea ca root, putem avea aceleai date
stocate n /.rhosts ca cele din /etc/hosts.equiv. Acest lucru presupune ns o
mare bre de securitate n sistem i nu este recomandat a fi utilizat.
Utilizarea fiierelor /etc/hosts, /etc/hosts.equiv i /.rhosts conduce la
posibilitatea utilizrii comenzilor ARPA ftp i telnet, precum i a
comenzilor Berkeley rcp, remsh, rlogin i rwho.
4.1.5 Alte comenzi pentru lucrul n reea
Comanda ping
Una dintre cele mai folosite comenzi de reea este comanda ping.
Aceasta determin existena unei conexiuni ntre dou entiti din reea.
Comanda ping (Packet InterNet Groper) trimite un pachet ecou ICMP ctre
staia specificat o dat la fiecare secund. n funcie de varianta de UNIX
utilizat, comanda ping poate diferi de la un sistem la altul, mai ales n ceea
ce privete modalitatea afirii rezultatelor pe ecran atunci cnd comanda
este apelat fr nici o opiune. n timp ce unele variante afieaz rezultate
detaliate despre conexiune, unele variante afieaz doar un mesaj de tipul:
conexiunea este activ.
Pe un sistem UNIX AIX putem specifica intervalul la care se trimit
pachetele, precum i dimensiunea i numrul de iteraii. Putem considera
93
Sertvicii de reea
time=8.
time=9.
time=8.
time=9.
time=9.
time=8.
time=8.
time=8.
ms
ms
ms
ms
ms
ms
ms
ms
loss
Gateway Flags
Refs
127.0.0.1
Use
UH
Interface
Pmtu
0
133563 lop0
10.1.1.10
UH
356
10.1.1.110
UH
10.1.1.110
10.1.1.10
4136
4136
1300
1300
127.0.0.1
4136
10.1.1.1
UG
lan1
94
UNIX
Comanda route
Informaia afiat de comanda netstat provine din tabelele de rutare
ale sistemului care sunt automat create n momentul iniializrii sau n
momentul activrii interfeei de reea. Rutele ctre reele sau gazde ce nu
sunt direct conectate la sistem sunt introduse cu ajutorul comenzii route. n
exemplul urmtor se modific indicatorul Flags din U n UG:
$ /usr/bin/route add default 193.226.34.64 3
95
Sertvicii de reea
Comanda ifconfig
Aceast comand ne ofer informaii suplimentare legate de interfaa
de reea. Exemplul urmtor ne nfieaz listingul comenzii:
$ /etc/ifconfig eth0
eth0:flags=863<UP,BROADCAST,NOTRAILERS,RUNNING>
inet 193.226.34.141 netmask ffffff00 broadcast 193.226.34.255
96
UNIX
vers
2
2
1
1
1
1
1
proto
tcp
udp
udp
tcp
udp
udp
tcp
port
111
111
777
779
1024
976
978
service
portmapper
portmapper
status
status
nlockmgr
mountd
mountd
97
Sertvicii de reea
Comanda nslookup
Aceast comand este utilizat pentru determinarea adresei IP a unei
gazde creia i cunoatem numele. Pentru determinarea adresei IP, nslookup
acceseaz fie fiierul resolv.conf fie /etc/hosts. Exemplul urmtor ne
prezint utilizarea fiierului /etc/hosts pentru a determina adresa IP a
sistemului venus:
# nslookup venus
Using /etc/hosts on: venus
Looking up FILES
Name: venus
Address:193.226.34.141
#
4.2
98
UNIX
Odat cu instalarea NFS este util i instalarea NIS. Network Information System
acioneaz ca o baz de date centralizat ce conine date administrative importante cum ar
fi parolele i fiierul /etc/hosts.
99
Sertvicii de reea
100
UNIX
/
/mnt/cdrom
/mnt/floppy
/proc
/dev/pts
swap
ext2
defaults
iso9660 noauto,owner,ro
auto noauto,owner
proc
defaults
devpts gid=5,mode=620
swap
defaults
1
0
0
0
0
0
1
0
0
0
0
0
nume_dispozitiv
pass
101
Sertvicii de reea
LABEL=/
/dev/cdrom
/dev/fd0
none
none
/dev/hda4
/dev/hda1
/dev/hda5
0 0
/
/mnt/cdrom
/mnt/floppy
/proc
/dev/pts
swap
/mnt/c
/mnt/d
ext2
iso9660
auto
proc
devpts
swap
defaults
1
noauto,owner,ro 0
noauto,owner
0
defaults
0
gid=5,mode=620 0
defaults
0
auto
defaults
auto
defaults
1
0
0
0
0
0
0 0
102
UNIX
Ghidul complet pentru Samba este Using Samba, de Robert Eckstein, David Collier
Brown i Peter Kelly (OReilly&Associates, 1999).
103
Sertvicii de reea
[global]
workgroup = NETWORK
server string = saturn
encrypt passwords = Yes
update encrypted = Yes
log file = /var/log/samba/log
max log size = 100
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDUP=8192
dns proxy = No
104
UNIX
105
Sertvicii de reea
106
UNIX
printing = bsd
printcap name = /etc/printcap
load printers = yes
log file = /var/log/samba/log
lock directory = /var/lock/samba
Aceste linii specific tipul de printare (BSD sau System V), locaia
fiierului /etc/printcap utilizat de modul de tiprire Berkeley i locaiile
fiierelor log i lock. Cea de-a treia linie specific dac imprimantele sunt
ncrcate n reea de fiecare dat cnd este repornit serverul Samba. Dup ce
am modificat seciunea [global], trebuie s crem o nou seciune denumit
[printers], ce ajut la configurarea opiunilor generale de imprimare. Vom
considera n continuare urmtorul exemplu:
[printers]
comment = all printers
security = server
path = /var/spool/lpd/lp
browseable = no
printable = yes
public = yes
writable = no
create mode = 0700
107
Sertvicii de reea
108
Editoare de text
1. Editoare de text
5.1
Introducere
Editorul vi
Editorul vi este folosit pentru a crea sau modifica fiiere text sau
ASCII (American Standard Code for Information Interchange), fiind un
editor bazat pe caracter, parte integrant a sistemului de operare UNIX.
Editorul vi utilizeaz ca mediu de afiare ecranul monitorului fr a se putea
utiliza mouse-ul pentru deplasarea cursorului pe ecran; toate deplasrile
cursorului se fac cu ajutorul tastelor.
Operaia de editare n cadrul editorului vi se face prin intermediul
unei memorii tampon sau buffer, iar modificrile fcute asupra textului pot
fi salvate sau nu. Editorul vi opereaz doar asupra fiierelor text simple, fr
caracteristici speciale de formatare (cum ar fi cele create de un editor de
genul Word for Windows). Cu toate c utilizarea vi-ului este destul de
dificil, utilizatorii experimentai i administratorii de sisteme UNIX trebuie
109
UNIX
110
Editoare de text
111
UNIX
Semnificaie
j (sgeat n jos)
k (sgeat n sus)
h (sgeat stnga)
l (sgeat dreapta)
Tasta <SPACE>
0 sau ^
Tasta <RETURN>
112
Editoare de text
Semnificaie
dw
5dw
dd
2dd
3x
113
UNIX
tergerea textului n vi
tergerea caracterelor deja introduse se face din modul comand. n
prealabil se face poziionarea pe caracterele ce se doresc a fi terse, apoi se
utilizeaz comenzile de tergere din tabelul 5.2. Comenzile fac distincie
ntre litere mari i litere mici i se introduc fr a mai apsa tasta <ENTER>.
Modificarea textului, anularea comenzii anterioare, copiere
i alipire de text n vi
n tabelul 5.3 sunt prezentate comenzile de baz pentru modificare,
anularea comenzii anterioare (undo), copiere i alipire de text. Operaia de
copiere (copy) se mai numete i yank iar cea de alipire (paste) se mai
numete i put n vi.
Comenzi de baz pentru copiere, alipire,
modificare i anulare n vi
Tabelul 5.3
Comanda
cw
5cw
r
Semnificaie
Are ca efect modificarea cuvntului (sau a prii din
cuvnt) de la cursor pn la sfritul cuvntului. Se
poziioneaz cursorul n locul de unde dorim s ncepem
modificarea, apoi se apas cw, se introduce noul cuvnt i
se apas n final tasta <ESC>
Se modific 5 cuvinte
dd, apoi p
yy, apoi p
yy
Copiaz o linie
114
Editoare de text
5.3
Editorul pico
5.3.1 Generaliti
Editorul pico este un editor de texte mai puin complicat de utilizat
dect editorul vi, fiind integrat n celebrul program de pot electronic pine,
dezvoltat la Universitatea din Washington.
Uneori, nainte de intrarea n editorul pico trebuie setat tipul de
terminal folosit (dac se utilizeaz un terminal vt100, atunci se poate utiliza
comanda export TERM=vt100 pentru setarea tipului de terminal).
Pornirea editorului se face simplu, introducnd la linia de comand:
$ pico [nume_fisier]
115
UNIX
Inserarea textului
Pentru a insera text n ecranul de editare pico, se ncepe pur i
simplu introducerea textului, fr a se mai introduce alt comand (ca n
cazul editorului vi). Pico insereaz textul introdus de la tastatur la stnga
cursorului, deplasnd la dreapta textul existent (dac acesta exist). De
fiecare dat cnd cursorul ajunge la captul rndului, caracteristica word
wrap (desprirea pe linii) a editorului determin deplasarea cursorului la
nceputul liniei urmtoare.
Deplasarea cursorului
Deplasarea cursorului se poate face prin intermediul tastelor
direcionale (cu sgei) sau prin utilizarea combinaiilor de taste: Ctrl+f
(forward - nainte), Ctrl+b (back - napoi), Ctrl+n (next - linia urmtoare)
sau Ctrl+p (previous - linia anterioar).
tergerea textului
Caracterul de la stnga cursorului se terge cu tasta
<BACKSPACE>, <DELETE> sau prin combinaia Ctrl+h. Pentru a terge
caracterul de deasupra cursorului se apas Ctrl+d. Pentru tergerea liniei
curente se apas Ctrl+k.
Salvarea documentului
Pentru a salva fiierul pe disc, se apas Ctrl+o. Pico afieaz numele
fiierului curent, iar pentru salvarea fiierului cu alt nume trebuie ters
vechiul nume i introdus numele dorit, apoi se apas tasta <RETURN>.
Refacerea ecranului
n cazul n care pe ecranul pico apar caractere ciudate, refacerea
ecranului se face prin combinaia Ctrl+L.
116
Editoare de text
117
UNIX
Efect
Ctrl+f
Ctrl+b
Ctrl+p
Ctrl+n
Ctrl+a
Ctrl+e
Ctrl+v
Ctrl+y
Ctrl+w
Caut text
Ctrl+l
Ctrl+d
Ctrl+^
Ctrl+k
Ctrl+u
Ctrl+i
Ctrl+j
Ctrl+t
Corectarea semantic
Ctrl+r
Ctrl+o
Ctrl+g
Vizualizarea help-ului
Ctrl+x
118
Editoare de text
119
1. Shell-uri UNIX
6
6.1
6.1
SHELL-uri UNIX
Definiie i funciuni
UNIX
Variante de shell
121
Shell-uri UNIX
Scurt istoric
122
UNIX
123
Shell-uri UNIX
6.5
6.5.1
124
UNIX
6.5.2
Tipuri de comenzi
Shell-uri UNIX
shell). Dac nu, este o funcie sau comand intern? Dac nici acest lucru nu
este valabil, atunci se verific (cutnd n directoarele specificate n
variabila de sistem PATH) dac exist un program executabil pe hard disc
cu acest nume.
6.5.4
Procese UNIX
UNIX
Shell-uri UNIX
UNIX
129
Shell-uri UNIX
valorii lui umask, toate fiierele i directoarele nou create vor avea noile
drepturi de acces specificate, conform exemplului de mai nainte.
Comanda chmod
Pentru a modifica drepturile de acces la anumite fiiere i/sau
directoare, se poate utiliza comanda chmod (change mode). Pentru fiecare
fiier de pe un sistem UNIX, exist un unic proprietar al acestuia. Doar
proprietarul i utilizatorul root au dreptul de a modifica drepturile de acces
la un anumit fiier sau director.
Cele opt posibiliti de stabilire a drepturilor de acces la fiiere
Tabelul 6.2
Valoare octal
Valoare zecimal
Drepturi de acces
000
001
010
011
100
101
110
111
0
1
2
3
4
5
6
7
----x
-w-wx
r-r-x
rwrwx
130
UNIX
Comanda chown
Comanda chown (change owner) modific proprietarul i grupul
pentru fiiere i directoare. Ca i n cazul comenzii chmod, doar proprietarul
i root au dreptul de a face acest lucru (pe anumite versiuni de UNIX,
precum BSD, doar utilizatorul root poate face acest lucru). n figura 6.4
avem un exemplu de utilizare a acestei comenzi (se modific proprietarul
fiierului test din root n daemon).
Directorul de lucru
n momentul procesului de login, fiecare utilizator este poziionat
ntr-un director anume, care se numete directorul home. Directorul home
este motenit de toate procesele iniiate din cadrul acestui shell. Orice proces
copil poate modifica propriul director de lucru, dar aceste modificri nu vor
afecta procesul shell printe. Comanda cd (change directory) este o
comand intern a sistemului UNIX. Fiecare shell deine propria copie a
comenzii cd. O comand intern este executat de shell direct ca parte a
propriului cod; shell-ul nu face apeluri fork i exec atunci cnd execut
comenzi interne. Dac un alt shell-script este iniiat prin fork de ctre
procesul printe, comanda cd va fi executat n shell-ul copil i directorul va
fi modificat aici. Atunci cnd procesul copil se termin, procesul printe va
fi n acelai director ca i nainte de a fi pornit procesul copil. n figura 6.5
este ilustrat acest fapt.
131
Shell-uri UNIX
Semnale
n momentul n care un semnal trimite un mesaj unui proces, acesta
din urm se termin. Putem trimite semnale unui proces prin apsarea
tastelor BREAK, DELETE, QUIT i STOP, iar toate procesele acelui
terminal vor fi afectate de semnalul trimis. Putem opri un proces aflat n
execuie prin comanda kill. Shell-ul permite manipularea semnalelor trimise
programelor, fie prin ignorarea lor, fie prin specificarea unei aciuni n
momentul apariiei unui anumit semnal. Mai multe detalii legate de
semnalele UNIX sunt prezentate n seciunea 7.6.7.
6.6
132
1. Bourne Shell
7
7.1
BOURNE SHELL
Comanda test
UNIX
var1=15
var2=20
test $var1=$var2
echo $?
Exemplu.
Fie comanda:
$ ls -las
cu efectul urmtor:
total 5
4 drwxrwxrwx
4 drwxrwxrwx
2 -rwxrwxrwx
1 -rwxrwxrwx
2 -rwxrwxrwx
1
1
1
1
1
134
Bourne shell
Fie comanda:
$ test -f stud.dat; echo $?
test
test
test
[ -r
[ -w
7.1.3
-d examen.dat; echo $?
-x examen.dat; echo $?
-s examen.dat; echo $?
examen.dat ] ; echo $?
stud.dat ] ; echo $?
Observaie:
n general, este bine ca variabilele shell folosite n testare s fie
ncadrate de ghilimele: "nume_variabila".
Exemple.
Atribuire cu valoare null:
$ var=
135
UNIX
Comanda:
$ test $var=hello ; echo$?
sir1=dan
sir2=maria
sir3=dan
sir4=
[
[
[
[
[
$sir1 ] ; echo $?
-n $sir3 ] ; echo $?
$sir1=$sir4 ] ; echo $?
"$sir4"="$sir3" ] ; echo $?
-z $sir4 ] ; echo $?
136
Bourne shell
a.
b.
c.
d.
e.
[
[
[
[
[
"$sir1"!="$sir2" ] ; echo $?
-z "$sir3" ] ; echo $?
-n "$sir4" ] ; echo $?
"$sir1"="$sir3" ] ; echo $?
"sir4" ] ; echo $?
[
[
[
[
[
"$int1"
"$int2"
"$int4"
"$int3"
"$int4"
-gt
-lt
-le
-eq
-ne
"int2" ] ; echo $?
"$int3" ] ; echo $?
"$int1" ] ; echo $?
"$int4" ] ; echo $?
"$int1" ] ; echo $?
137
UNIX
2. Fie atribuirile:
V1=007
v2=7
Ce va afia comanda:
[ !"$v1" -eq "$v2" ] ; echo $? (0)
Exemplul 2.
Fie comanda:
[ -f fisier -a -x "fisier" ]
138
Bourne shell
Rezultatul este zero dac variabila var are o valoare cuprins ntre 1
i 90 (strict).
Observaie. Operatorul -a are o prioritate mai mic dect operatorii
de comparaie pentru ntregi.
Exemplul 4.
Fie comanda:
[ -r "stud" -o -d "stud" ]
n acest caz, rezultatul este zero dac stud poate fi citit sau dac este
director.
Exemplul 5.
Fie comanda:
[ "$luna" -gt 12 -o "$ziua" -gt 31]
Rezultatul este zero dac luna este mai mare dect 12 sau dac ziua
are o valoare mai mare dect 31.
7.1.6
139
UNIX
140
Bourne shell
7.1.7
Operatori aritmetici
141
UNIX
7.2
Gramatica Shell
7.2.1
Comenzi simple
Conducte (pipelines)
O secven pipeline este aceea n care una sau mai multe comenzi
sunt separate de simbolul pipe ( | ) - bar vertical. Formatul general al unei
secvene pipeline este:
[!] comanda1 [| comanda2 ...]
Ieirea standard a comenzii 1 este conectat la intrarea standard a
comenzii 2. Dac apare caracterul de negare (!), exit status-ul pipeline-ului
va fi valoarea negat a exit status-ului ultimei comenzi. Shell-ul ateapt
terminarea tuturor comenzilor din pipeline nainte de a ntoarce un rezultat.
Fiecare comand dintr-o secven pipeline este executat ca un proces
separat (ntr-un sub-shell).
7.2.3
Redirectare
142
Bourne shell
Liste
Comenzi compuse
UNIX
7.2.6
Caracterul escape
Variabile
144
Bourne shell
Instruciuni de selecie
Instruciunea if
145
UNIX
Exemplul 1.
unitati=0
if [ $contor -lt 10]
then
unitati=`expr $unitati + 1`
else
unitati=0
zeci=1
fi
146
Bourne shell
Exemplul 2.
Fie un shell-script denumit verif_fisier care ia drept argument un
nume de fiier i verific dac este director sau fiier obinuit:
if [ -f "$1" ]
then
echo "$1 este fiier obisnuit!"
elif [ -d $1 ]
then
echo "$1 este director!"
fi
7.3.2
Comanda null
UNIX
7.3.3
Instruciunea case
Bourne shell
Explicaii:
Se citete la nceput un ir de caractere care este atribuit variabilei
culoare. Comanda case evalueaz expresia $culoare. n cazul n care
culoarea introdus ncepe cu A sau a, continu cu litera l i urmeaz alte
6 caractere (pentru a se forma Albastru sau albastru), se afieaz mesajul
corespunztor i instruciunea case se ncheie.
Dac nu este ndeplinit prima condiie, se continu cu verificarea
celorlalte dou condiii (pentru culorile verde, apoi pentru galben i
portocaliu) i dac nici acestea nu sunt ndeplinite se va afia mesajul care
corespunde opiunii *, ce reprezint toate celelalte cazuri (un fel de else n
cazul instruciunii case, atunci cnd toate celelalte condiii anterioare nu au
fost ndeplinite). n final, instruciunea case se termin cu cuvntul cheie
esac i este afiat mesajul de ieire din instruciunea case.
149
UNIX
7.4
7.4.1
Instruciuni iterative
Instruciunea for
Exemplul 1.
Secvena urmtoare de program copiaz fiierele cu numele fis1, fis2
i fis3 n directorul copie din directorul curent:
for f in fis1 fis2 fis3
do
cp $f copie
done
Exemplul 2.
n acest exemplu presupunem c avem de trimis acelai mesaj prin
e-mail mai multor persoane. Adresele de e-mail ale persoanelor vor fi
introduse anterior ntr-un fiier text simplu, fiecare adres de email pe cte
o linie. Dac denumim fiierul cu adresele de e-mail adrese, acesta va arta
astfel:
150
Bourne shell
stud
anca@yahoo.com
cristi@hotmail.com
george
paul
serban@k.ro
7.4.2
Instruciunea while
Exemplul 1.
Secvena urmtoare de program citete o opiune i execut
comenzile specificate att timp ct variabila final are valoarea "n".
151
UNIX
final=n
while [ "$final" = n ]
do
read opiune
case "$opiune" in
1) echo "Introduceti numele fiierului
afisat:"
read nf
cat "$nf";;
2) echo "Introduceti numele fiierului
sters:"
read nf
rm "$nf";;
3) fin=y
echo "Iesire din program..."
sleep 5;;
*) echo "Opiune invalida!";;
esac
done
ce
va
fi\
ce
va
fi\
Exemplul 2.
Programul urmtor afieaz pe rnd argumentele cu care a fost
apelat. Folosind comanda shift putem face s afim nti toate argumentele
apelului, apoi mai puin cu unul, .a.m.d., pn la ultimul argument.
while [ $# -gt 0 ]
do
echo $*
shift
done
152
Bourne shell
7.4.3
Instruciunea until
UNIX
Exemplul 2.
Urmtorul program va afia cte un mesaj pentru toate orele zilei
ntre 8 i 24:
ora=8
until [ $ora gt 24 ]
do
case "$ora" in
[8-9] |1[0-1]) echo "Buna dimineata!"
;;
1[2-3]) echo "Ora pranzului!"
;;
1[4-6]) echo "Siesta!"
;;
*)
echo "Buna seara!"
;;
esac
ora=`expr $ora + 1`
done
154
Bourne shell
7.4.4
Funcii n Shell
UNIX
{
<secventa_de_comenzi>
}
}
go $1
cd $1
PS1="`pwd`>"
156
Bourne shell
7.6
7.6.1
Mediul Shell
Apelurile fork i exec
UNIX
7.6.3
Bourne shell
Comanda sh
UNIX
160
Bourne shell
Exemplu:
$set
PATH=/home/razvan:/bin:/usr/bin
TERM=vt220
VAR1=1
EXPORTED=vt100
$
Exemplu:
$ env TERM=tvi050 vi myfile
161
UNIX
Semnal
Semnificaie
SIGHUP
SIGINT
SIGQUIT
SIGILL
SIGTRAP
SIGABORT
SIGEMT
SIGFPE
SIGKILL
SIGBUS
SIGSEGV
SIGSYS
SIGPIPE
SIGALARM
SIGTERM
162
Bourne shell
7.6.7
Semnale
163
UNIX
Comenzi interne
Introducere
164
Bourne shell
Exemplu:
$ for i in f1 f2
>do
>file $i
>done
$
7.7.2
getopts
test.cmd
test.cmd
test.cmd
test.cmd
test.cmd
-a
-abc
-a -b
-a -b -c
.a.m.d
n acest caz vom folosi getopts n interiorul uneia dintre
instruciunile for, while sau until. Comanda getopts returneaz valoarea
logic "true" att timp ct exist opiuni ce trebuie luate n considerare.
Formatul general al comenzii este:
$ getopts optiuni nume_variabila
165
UNIX
Exemplu.
Fie shell-script-ul test.cmd:
# test.cmd
...
while getopts abc optiune
do
...
done
done
166
Bourne shell
Comanda hash
167
UNIX
Comanda type
Comanda newgrp
Bourne shell
ulimit
umask
Comanda times
169
UNIX
Comanda eval
7.8
170
Bourne shell
(pe prima linie din script). n cazul folosirii shell-ului Bash din Linux, prima
linie dintr-un shell-script va arta astfel:
#!/bin/bash
7.9
Comanda
Explicaii
Afieaz fiecare linie a script-ului
dup substituirea variabilelor,
naintea execuiei
Afieaz fiecare linie a script-ului
naintea execuiei, exact aa cum a
fost scris
Interpreteaz dar nu execut
comenzile
Opiunea echo
sh x nume_script
Opiunea verbose
sh v nume_script
Opiunea noexec
sh n nume_script
Seteaz echo-ul
set x
Reseteaz echo-ul
set +x
UNIX
172
Bourne shell
4) echo "Introduceti adresa destinatarului:"
read adresa
mail $adresa
echo "Apasati o tasta pentru continuare..."
read y ;;
5) echo "Sunt conectati `who | wc -l`\
utilizatori in acest moment!"
echo "Apasati o tasta pentru continuare..."
read y ;;
0) iesire=D ;;
esac
done
Explicaii.
Programul afieaz un meniu cu 6 opiuni. Opiunea este citit n
variabila optiune i n funcie de valoarea acesteia se execut comenzile
specificate folosindu-se o instruciune case. Totul este inclus ntr-un ciclu
while, care se va repeta pn n momentul selectrii opiunii 0, cnd
variabila iesire ia valoarea D i se iese astfel din ciclul while.
Exemplul 2.
n acest exemplu vom lucra cu o baz de date simpl vom crea
funcii pentru adugare, tergere, actualizare i un program principal ce
apeleaz aceste funcii. Baza noastr de date va conine informaii despre
studenii unei faculti: nume i prenume, grupa, adresa, i data naterii.
Fiierul ce va conine aceste informaii se va numi studenti.
S presupunem c vom defini funciile n fiierul functii.
Fie funcia de adugare:
adaug () { # Functia este definita in fisierul functii
while true
do
echo "Adaugare de informatii "
echo "Introduceti numele si prenumele studentului "
read nume
echo "Introduceti grupa "
read grupa
echo "Introduceti adresa "
read adresa
echo "Introduceti data nasterii (zz/ll/aaaa) "
read datan
echo $nume:$grupa:$adresa: $datan
173
UNIX
174
Bourne shell
cat <<EOF
[1] Adaugare de informatii
[2] Stergere de informatii
[3] Actualizarea informatiilor
[4] Iesire din program
EOF
read optiune
case $optiune in
1)
adaug
# Apelul functiei adaug
;;
2)
sterg
# Apelul functiei sterg
;;
3)
actualizare
# Apelul functiei actualizare
;;
4)
echo La revedere!
exit 0
;;
*)
echo Optiune gresita!
exit 2
;;
esac
echo Intoarcere din apelul functiei
175
8.1 Introducere
Bourne Again Shell (bash) ofer o serie de faciliti n plus fa de
shell-ul standard Bourne, att la nivel de interpretor al liniei de comand, ct
i la nivel de limbaj de programare. Printre altele, bash ofer istoric al
comenzilor, alias-uri, auto-completarea comenzilor i a numelor de fiiere,
editarea liniei de comand, etc. Unele dintre aceste faciliti sunt prezente i
n shell-ul standard Bourne, ns proiectul GNU a extins shell-ul pentru a
include un numr de noi faciliti i pentru compatibilitate POSIX.
O dat cu realizarea variantei bash 2.x, au fost adugate att de multe
funcionaliti (unele din Korn shell i C shell), nct shell-ul bash
reprezint un shell complect funcional att la nivel de interpretor ct i la
nivel de limbaj de programare. Shell-ul bash s-a nscut pe 10 ianuarie 1988
sub oblduirea lui Brian Fox i a fost adoptat mai trziu de ctre Chet
Ramey. Prima versiune a fost versiunea bash 0.99, iar cele mai importante
mbuntiri au fost aduse odat cu versiunea 2.0. Toate versiunile sunt
disponibile free sub licen public GNU. Pentru a vedea ce versiune de
bash folosete, un utilizator poate folosi comanda bash --version sau poate
afia valoarea variabilei de mediu BASH_VERSION. Urmtorul exemplu ne
nfieaz o posibil situaie:
$ bash --version
GNU bash, version 2.04.11(1)-release (i386-redhat-linux-gnu)
Copyright 1999 Free Software Foundation, Inc.
$ echo $BASH_VERSION
2.04.11(1)-release
176
UNIX
CMD
sh
bash
ps
177
Introducnd din nou comanda ps, se afieaz de data aceasta dou shell-uri
care ruleaz: shell-ul iniial sh i shell-ul bash pornit ulterior.
Fiiere de iniializare
Shell-ul bash are o serie de fiiere de configurare pe care le verific
la pornire. Aceste fiiere de configurare sau iniializare sunt procesate
(rulate) n funcie de mai multi factori (dac shell-ul curent este i shell-ul
de login, dac este un alt shell interactiv diferit dect cel de login, sau un
shell non-interactiv - shell-script). S vedem n continuare care sunt fiierele
de configurare iniial i ordinea n care aceste fiiere sunt procesate.
n momentul login-ului, nainte de apariia prompter-ului shell, este
executat fiierul de configurare global, /etc/profile. Dup aceea, dac
exist, este procesat fiierul .bash_profile din directorul home al
utilizatorului. Acest fiier specific alias-uri i funcii i seteaz variabile de
mediu specifice utilizatorului sau pornete anumite shell-script-uri. Dac
fiierul .bash_profile nu exist, dar exist fiierul .bash_login, atunci acest
fiier va fi procesat, iar dac acesta din urm nu exist, va fi procesat fiierul
.profile (din directorul home al utilizatorului).
178
UNIX
9
10
11
12
13
14
15
umask 022
fi
USER=id -un
LOGNAME=$USER
MAIL=/var/spool/mail/$USER
HOSTNAME=`/bin/hostname`
HISTSIZE=1000
179
180
UNIX
Explicaii:
Liniile 1,2,3 - Comentarii n shell-script;
Liniile 4-6 - Comand if care verific existena fiierului /etc/bashrc
i n acest caz l ruleaz;
Linia 7 - Comanda set apelat cu opiunea noclobber determin
apariia unor mesaje preventive n cazul suprascrierii fiierelor deja
existente;
181
#.profile
# Fisier de configurare initiala ce se executa atunci cand
# se utilizeaza shell-ul sh sau nu exista fisierele
# .bash_profile sau .bash_login
5 HOSTNAME=`uname -n`
6 EDITOR=/bin/vi
7 PATH=/bin:/usr/bin:/usr/ucb:/usr/local:/usr/bin:.
8 PS1=$HOSTNAME $>
9 export TERM HOSTNAME EDITOR PATH PS1
10 stty erase ^h
11 clear
Explicaii:
Liniile 1-4 - Comentarii n shell-script;
Linia 5 - Variabila HOSTNAME va lua valoarea returnat de
comanda uname -n;
Linia 6 - Variabila EDITOR ia valoarea /bin/vi. Programe precum
mail i history vor folosi acest editor;
Linia 7 - Variabila PATH este setat;
Linia 8 - Prompter-ului primar i este atribuit valoarea lui
HOSTNAME (numele mainii), urmat de semnul $ i semnul >;
182
UNIX
12 Aug 12:00
script01*
183
Semnificaie
Se citete de la tastatur n variabila raspuns
Se citete de la tastatur n variabila r1 pn la primul
caracter whitespace sau Enter, apoi n variabila r2
Se citete n variabila intern REPLY
Se citete o list de cuvinte ntr-un vector denumit
nume_vector
Se folosete n shell-ul interactiv
Afieaz un prompter, ateapt input-ul i stocheaz
rezultatul n variabila REPLY
Permite introducerea liniilor ce conin un backslash
de
184
UNIX
185
Apelat astfel:
$./test 1 2 3 4 5 6 7 8 9 10 11
186
UNIX
187
188
UNIX
189
Comanda case
Comanda case este utilizat pentru construcii condiionale multiple.
Formatul acesteia este acelai cu formatul shell-ului standard Bourne:
case variabila in
sablon_1)
comenzi
;;
sablon_2)
comenzi
;;
*)
comenzi
;;
esac
190
UNIX
191
Exemplul 2.
#!/bin/bash
# Nume shell-script: culori
PS3=Alegeti una dintre culori sau exit:
select alegere in albastru galben verde exit
do
case alegere in
albastru)
echo Albastrul este culoarea cerului!
break;;
galben)
echo Galbenul este o culoare calda!
break;;
verde)
echo Verde este padurea!
break;;
*)
echo $REPLY nu este o optiune valida!
echo Incercati din nou.
;;
esac
done
192
UNIX
193
8.3.6 Funcii
Funciile au fost introduse n shell-ul Bourne ncepnd cu versiunea
AT&T UNIX SystemVR2 (SVR2) i le-au fost adugate o serie de
mbuntiri n shell-ul Bourne Again. Funciile reprezint asocierea unui
nume pentru o comand sau un grup de comenzi, fiind folosite pentru
modularizarea programelor, fcndu-le astfel mai eficiente. Funciile sunt
executate n contextul shell-ului curent, astfel c nu se creeaz un nou
proces copil ca n cazul rulrii unui program executabil precum cat.
Funciile pot fi scrise n fiiere separate pentru a fi ncrcate n memorie din
shell-script atunci cnd trebuie folosite. n continuare sunt prezentate
regulile de scriere a funciilor n Bourne Again Shell:
1. O funcie trebuie definit nainte de a fi utilizat.
2. Funcia ruleaz n mediul de lucru curent, partajnd variabilele din
shell-script-ul ce o invoc i ofer posibilitatea de transmitere de argumente
prin atribuirea acestora ca parametri poziionali. Variabilele locale pot fi
create n cadrul unei funcii prin utilizarea funciei local.
3. Shell-ul determin dac se folosete un alias, o funcie, o comand
intern sau un program executabil aflat pe hard-disc. Ordinea de cutare
este: alias, funcie, comand intern, program executabil.
4. n momentul n care se utilizeaz comanda exit n cadrul unei
funcii, se produce ieirea din shell-script-ul ce apeleaz funcia. Dac se
194
UNIX
195
Explicaii.
n exemplul anterior se definete o funcie UTI ce este utilizat
pentru a afia un mesaj de eroare pe ecran (fiierul standard de eroare).
Argumentele funciei constau n orice ir de caractere trimise odat cu
apelul funciei. Argumentele sunt stocate n $*, variabila special ce
stocheaz toi parametrii poziionali. n cadrul unei funcii, parametrii
poziionali sunt considerai locali i nu au efect asupra parametrilor utilizai
n afara funciei. n cadrul script-ului se verific dac numrul parametrilor
poziionali este 2 i n caz contrar se afieaz mesajul de eroare
corespunztor. n momentul apelrii funciei UTI, irul $0: necesita doua
argumente este transmis funciei i memorat n variabila $* iar comanda
echo va afia mesajul de eroare i apoi se va returna valoarea de ieire 1,
ceea ce indic faptul c ceva nu a fost n regul. n continuarea programului,
196
UNIX
Explicaii.
n exemplul anterior se definete o funcie INC. n cadrul acestei
funcii se declar variabila local suma, care nu este cunoscut n afara
funciei. n momentul apelului funciei, valoarea primului argument, $1 va fi
incrementat cu 1 iar rezultatul va fi atribuit variabilei suma. Comanda
intern return va atribui variabilei $? valoarea din variabila suma, apoi irul
este afiat pe ecran. Funcia INC este apelat cu argumentul 5, iar
exit-status-ul ei va fi stocat n variabila $?. Pentru ultima linie din program
nu se va afia nimic, deoarece variabila suma a fost declarat doar n
interiorul funciei (cu ajutorul comenzii interne local) i valoarea acestei
variabile nu este cunoscut n afara funciei.
197
Exemplul 3.
#!/bin/bash
# Nume shell-script: cub
function CUB {
local rez;
let rez=$1 * $1 * $1
echo Numarul ce va fi ridicat la cub este $1
echo Rezultatul este $rez
}
echo -n Introduceti numarul pentru ridicare la cub:
read numar
rezultat=$(CUB $numar)
echo -n $rezultat
Explicaii.
n exemplul anterior se definete o funcie CUB. n cadrul acestei
funcii se declar variabila local rez, care va stoca rezultatul. n cadrul
script-ului se citete valoarea care va fi ridicat la cub n variabila numar,
apoi se atribuie variabilei rezultat valoarea ntoars de funcie prin
intermediul substituirii comenzii (construcia cu numele funciei ntre
paranteze precedate de semnul $). Prin comanda echo de pe ultima linie a
shell-script-ului se afieaz rezultatul.
Observaie. Ca i n Bourne Shell, funciile se ncarc n memorie cu
ajutorul comenzii dot (.). n Bourne Again Shell exist ns i comanda
source, care se apeleaz astfel:
$ source fisier_functii
198
Bibliografie
1
Anderson, R.
Bach, M.J.
Brescu, C. L.,
Duda, L.
Burtch, K.O.
Compaq
Compaq
Danesh, A.
Michael, J.
David, N.
Dodescu Gh.,
Vasilescu, A.
10
Dodescu, Gh.,
Nstase, F.
11
Dodescu, Gh.,
Nstase, F
12
Done, G.
13
Hahn, H.,
Stout, R.
199
UNIX
14
16
Hall, E. A.,
O'Reilly, &
Assosiates
Kurose, J.
Keith, R.,
Wesley, A.
Lammle, T.
17
McMullen, J.
18
Myers, D.,
Lorenz, J.
19
Nstase, F.
20
Pnoiu, Al.
21
Piti, A.
22
Poniatowski, M.
23
Quigley, E.
24
Rosch, L. W.
25
Roca, I. G.,
pu, N.,
Cristea, V.,
Atanasiu, I.,
Costinescu B.,
Nstase, F.,
Stanciu, C.,
Paiu, O.,
Godza, G.
15
200
Bibliografie
26
Sage, G. R.
27
Stallings, W.
28
Stevens, W. R.
29
Tanenbaum, A.
30
Tanenbaum, A.
31
Taylor, D.
32
Toxen, B.
33
Vasilescu, A.
34
35
Wrightson, K.,
Merlino, J.
Zota, R. D.
36
Zota, R. D.
37
Zota, R. D.
201