Sunteți pe pagina 1din 12

Lucrarea 1 Sistemul de fiiere Unix

1. Scopul lucrrii
Lucrarea de fat prezint structura si organizarea fiierelor sub sistemul de operare UNIX.
2. Consideraii teoretice
Sistemul de fiiere este o caracteristica importanta a unui sistem de operare. Sistemul de fiiere este
locul unde se memoreaz pe suport fizic fiierele sistem si cele utilizator. Sistemul de fiiere este
caracterizat prin trei aspecte: structura ierarhica, independenta ridicata fata de hardware si o mare
flexibilitate. Structura ierarhica este organizata sub forma unui arbore cu un director rdcin
(root). Directorul rdc
n poate conine fiiere, legaturi sau alte directoare, numite subdirectoare. Subdirectoarele sunt
noduri in arbore, iar fiierele sunt frunze. Independenta fata de hardware rezulta din faptul ca
fiierele sunt privite ca o succesiune de octei. Flexibilitatea se bazeaz pe posibilitatea de a monta
sau demonta la orice nivel in ierarhia de fiiere noi structuri arborescente de directoare si fiiere.
2.1 Structura standard a sistemului de fiiere
Nivelul de sub rdcina este tipic, fiind
Caracteristic pentru toate este faptul ca
sisteme cresc. Administratorul de sistem
cont de resursele hard de care dispune
directoarele:
root
|
+|
+|
+|
|
|
|
|
|
|
+|
+-

comun tuturor sistemelor de operare compatibile UNIX.


pe msura ce ne deprtm de rdcina diferenele intre
stabilete de regula structura sistemului de fiiere si tine
si de cerinele utilizatorilor. Structura standard conine

etc
dev
usr
|
+- bin
|
+- usr
|
+- ...
tmp
...

Structura arborescenta a sistemului de fiiere da posibilitatea unui numr mare de utilizatori sa


creeze si sa gestioneze un numr mare de fiiere. Nu exista limitare a numrului de noduri
eventualele restricii sunt impuse de hardware. Particulariti:

in directoare diferite pot exista fiiere diferite cu acelai nume;

un fiier frunza poate fi legat la mai multe directoare chiar daca acesta nu se afla la acelai
nivel in arbore;

fiecare director conine cel puin doua intrri:


. refera directorul insui, iar
1

.. refera directorul superior (printe);

orice director este legat la nivelul superior printr-o singura legtura (..).

Accesul la un fiier se face prin indicarea poziiei lui in arbore. Pentru aceasta se indica modul de
obinere al fiierului cobornd pe nivelurile arborelui fie de la directorul curent (cale relativa) fie de
la rdcina (cale completa). Prin directorul curent se nelege directorul in care se gsete
utilizatorul la momentul curent. Numele complet al fiierului cu indicarea poziiei sale in arbore
poarta denumirea de nume de cale. Numele de cale poate fi de orice lungime, fiecare nume de
director fiind separat de vecinul sau prin caracterul '/'. Caracterul '/' pe lng rolul de separator de
directoare si fiiere identifica si directorul rdcina. Pentru utilizatorii familiarizai cu sistemul de
operare DOS sunt utile observaiile:

caracterul '\' este nlocuit in Unix cu '/'.

in Unix se face distincie intre litere mici si litere mari;

numele unui fiier Unix poate fi orict de lung in funcie de implementare (minim 14 octei);

extensia nu este o caracteristica a sistemului Unix;

un fiier Unix poate avea mai multe nume, fiecare fiind asociat unei legaturi;

un fiier executabil in Unix este un fiier ce are setat dreptul de execuie (indiferent de
numele sau);

un fiier de comenzi Unix se numete script.

se accepta caracterele * si ? in Unix, dar semnificaia difer;

drepturile de acces asupra unui fiier in Unix sunt diferite. De exemplu, un fiier ascuns in
Unix nseamn lipsa dreptului de citire pentru directorul care conine fiierul.

un fiier text Unix are marcat sfritul de linie printr-un singur caracter ('\n');

pipe-ul in Unix nu impune crearea de fiiere temporare;

2.2 Tipuri de fiiere


In Unix se deosebesc patru tipuri de fiiere: ordinare (obinuite), pipe, speciale si directoare. Unele
documentaii considera fiierele pipe in categoria fiierelor speciale.
Din punct de vedere al sistemului de operare un fiier este un sir de octei de lungime nedefinita
terminat cu un caracter special de sfrit de fiier (EOF). Orice octet sau secvena de octei poate fi
citita sau scrisa. Citirea sau scrierea ncepe de la o locaie de octet specificata prin pointerul de fiier
(sau marker), care poate fi poziionat oriunde in fiier. Fiierele obinuite sunt pstrate pe disc.
Un fiier obinuit este creat de un proces. El poate conine o sursa (text) sau un fiier executabil
(binar). Doua sau mai multe procese pot sa citeasc si sa scrie concurent in acelai fiier. Rezultatul
depinde de ordinea in care cererile individuale de I/E apar si sunt in general imprevizibile. Pana nu
demult Unix-ul nu avea mecanisme eficiente pentru controlul accesului concurent. Versiunile mai
noi de Unix dein un control al concurentei prin semafoare.
Fiierele obinuite nu au nume, ele au ataate nite numere, care sunt interpretate ca index intr-o
lista de i-node-uri, pstrat la nceputul fiecrui disc care conine un sistem de fiiere Unix. Fiecare
2

i-node conine informaii importante despre fiier, care nu includ insa numele fiierului sau octeii
de date. Asupra informaiilor din i-node se va reveni pe parcurs.
Un fiier pipe este un fiier care este citit de un proces o singura data si este de natura temporara.
Daca data a fost citita din pipe o citire ulterioara este posibila doar daca procesul care a creat fiierul
pipe recreeaz datele ntr-un nou fiier pipe. Fiierele pipe sunt cunoscute ca fiiere FIFO. Asupra
acestor fiiere se va reveni in lucrrile urmtoare.
Fiiere speciale sunt fiiere ataate dispozitivelor de I/E (driverele bloc sau driverele caracter). In
directorul /dev se gsesc toate referinele la dispozitivele de I/E: discuri, benzi magnetice,
terminale, imprimante, mouse etc. Acestea sunt considerate fiiere speciale. De exemplu, pentru
fiecare partiie a unui hard disc se gsete cate un fiier special. Un fiier special deine un i-node,
care insa nu refera un bloc de date pe disc. In schimb acest i-node conine un numr de dispozitiv,
care este folosit ca index intr-o tabela kernel de proceduri pentru dispozitive periferice. Pentru
identificarea fiecrui dispozitiv se folosesc doua numere: minor (identifica numrul dispozitivului
de tipul dat) si major (identifica tipul dispozitivului).
Folosirea dispozitivelor in aceasta maniera confer avantajul tratrii uniforme. Din punct de vedere
utilizator nu exista nici o diferena intre lucrul cu fiiere ordinare si cele speciale. De exemplu:
$cp prg.c /usr/acct/k/prg1.c # copiere simpla
$cp prg.c /dev/lp0
# listare la imprimanta

Fiierele speciale de tip bloc respecta cerina: pe de o parte dispozitivul conine un ir de blocuri de
dimensiune fixa (in mod uzual de 512 octeti fiecare), iar pe de cealalt parte tampoanele kernel-ului
sunt utilizate ca tampoane cache pentru rapidizarea operaiei de I/E. Fiierele speciale de tip
caracter nu respecta nici o cerina. In acest caz, operaiile de I/E se fac fie la nivel de octet fie la
nivel de piste.
Un director face legtur intre numele fiierelor si locul unde acestea sunt memorate pe disc. El nu
conine efectiv fiierele care ii aparin ci doar referinele la acestea, sub forma unei succesiuni
neordonate de intrri de 16 bii (sistemele noi de Unix nu mai au aceasta limitare). Orice intrare
director este formata din numele fiierului (14 octei) si un numr de identificare (2 octei). Acesta
din urma refera un i-node sau nod de identificare, in care se pstreaz informaiile referitoare la
fiierul in cauza. Fiierul director conine o tabela de nume de fiiere mpreun cu inode-urile
asociate.
Fiecare fiier are un singur i-node care conine:
1. Proprietarul fiierului indicnd si drepturile de acces ale celorlali utilizatori. Superuser-ul
ignora drepturile indicate in acest cmp.
2. Tipul fiierului (obinuit, director, pipe sau special)
3. Drepturile de acces la nivel de utilizator, grup si alii.
4. Timpul ultimului acces si ultimei modificri, data si ora ultimei modificri efectuate asupra
i-node-ului.
5. Numrul de legaturi (a se vedea comanda unlink).
6. Adresele disc ale sectoarelor ce conin datele fiierului.
7. Lungimea fiierului in octei.
Daca i-node-ul este 0 intrarea respectiva este vida, adic nu exista fiiere in acel director.
3

Un fiier director poate fi citit ca orice fiier, dar nu poate fi scris in mod direct, ci numai prin
intermediul anumitor programe.
Conversia numelui de cale specificata in programe (procese) in i-node-ul fiierului este sarcina
kernel-ului Unix.
O caracteristica importanta a sistemului este noiunea de legare ( linking). In acest caz vom avea
doua nume de fiiere in doua directoare diferite care refera acelai i-node. Pentru legarea la orice
director a unui fiier care este legat deja la un director sistemul pune la dispoziie comanda ln (link).
Sintaxa: ln nume_cale_veche nume_cale_noua
Acelai lucru se poate realiza prin apelul sistem link. tergerea unei legaturi se poate realiza prin
comanda sau apelul sistem unlink. La tergerea unei legaturi dintr-un director i-node-ul si blocul de
date asociat nu este disponibilizat cci ar putea sa mai existe un alt fiier care sa refere acelai inode. Din acest motiv i-node-ul conine in structura sa un cmp contor de legaturi. tergerea unei
legturi implica decrementarea contorului de legaturi. Cnd acesta ajunge la zero kernel-ul
elibereaz i-node-ul si blocul de date. Se recomanda insa atenie mare la folosirea acestor comenzi
sau apeluri sistem.
Legarea directoarelor este posibila, dar numai de superuser.
O alta caracteristica importanta a sistemului Unix este posibilitatea de a monta un ntreg arbore de
fiiere undeva in ierarhia altui sistem de fiiere. Nucleul sistemului de operare Unix recunoate un
singur director rdcin. Dar este posibil ca fiierele sa se gseasc pe mai multe suporturi fizice
sau logice, fiecare volum avnd un sistem de fiiere propriu arborescent. Este posibila suprapunerea
rdcinii unui astfel de sistem de fiiere pe un director al sistemului de fiiere recunoscut de nucleu.
Aceasta operaie se numete montare (mount) si poate fi realizata de superuser. naintea acestei
operaii este necesar un punct de montare, care poate fi orice director gol din sistem.
Dupa montare, calea la punctul de montare prefixeaz orice acces la un fiier sau director de pe
sistem de fiiere montat. De exemplu:
$mount /dev/dsk /usr/k/m1 [-r]
monteaz cu posibilitatea de citire (-r) la directorul gol m1 volumul /dev/dsk.
Pentru a accesa o discheta aflata in unitatea 0, comanda de montare la directorul d1 din rdcina
este:
$mount /dev/fd0 /d1
De exemplu, pentru a accesa sun Linux o discheta formatata DOS este necesara montarea prin
comanda:
$mount -t msdos /dev/fd0 /d1
Daca montarea nu mai este necesara si se dorete, eventual, o alta montare de pe alt dispozitiv, se
impune demontarea si eliberarea punctului de montare prin:
$umount /dev/fd0
2.3. Implementarea sistemului de fiiere
Kernelul lucreaz la accesul fiierelor cu i-node-ul ataat.

Fiecare utilizator are asociata o tabela a fiierelor deschise pe baza creia se actualizeaz tabela
fiierelor deschise din intregul sistem. Aceasta din urma permite gestionarea unei tabele de i-nodeuri active cu ajutorul creia se identifica fiierele pe disc. Orice disc care conine un sistem de
fiiere Unix are urmtoarea structura:
blocul 0 blocul 1 2+isize fsize
Blocul
de boot

Superbloc

Lista de
inode-uri

Blocuri de
date

Zona de
swapping

Fig.1. Dispunerea informaiilor pe un disc Unix.


Sistemul de operare privete discul ca o succesiune de blocuri de 512 octei, numerotate de la 0 la o
valoare maxima data la initializare. Blocul 0 este rezervat unui ncarcator. Blocul 1 conine
superblocul care gestioneaz alocarea blocurilor. El conine urmtoarele informaii:
dimensiunea sistemului de fiiere;
numrul blocurilor libere din sistemul de fiiere;
lista blocurilor disponibile din sistemul de fiiere;
indexul urmtorului bloc liber din lista blocurilor libere;
dimensiunea listei de i-node-uri;
numrul total de i-node-uri libere din sistemul de fiiere;
lista i-node-urilor libere din sistemul de fiiere;
indexul urmtorului nod liber din lista i-node-urilor libere;
alte informaii;
fanion de modificare.
Superblocul este copiat in memoria interna. Nucleul actualizeaz periodic superblocul pentru a
asigura corespondenta reala cu sistemul de fiiere. Ca atare, se recomanda terminarea normala a
unei sesiuni de lucru. Distrugerea superblocului cauzeaz imposibilitatea accesului la sistemul de
fiiere.
Blocurile 2,3, ...1+isize sunt alocate pentru lista de i-node-uri. Fiecare i-node este de 64 octei si
descrie un fiier. I-node-ul 2 este folosit de directorul rdcina (1 este rezervat pentru gestionarea
blocurilor defecte).
Blocurile 2+isize pana la fsize-1 sunt utilizate pentru nregistrarea datelor. Toate fiierele si
directoarele sunt pstrate aici. Daca un fiier sau director consta din mai multe blocuri acestea nu
trebuie sa fie contigue pe disc.
Zona de swapping servete pentru salvarea temporara a unor segmente de procese, care ateapt in
memoria interna a calculatorului.
5

Pentru a deschide un fiier in directorul curent, sistemul citete fiecare intrare din director si
compara numele fiierului cu numele de fiier memorat in fiecare intrare pana cnd fiierul este
gsit sau se conchide ca acesta nu exista. Daca fiierul este prezent, sistemul extrage din intrare
numrul de i-node, si il folosete ca index in lista (tabela) i-node-urilor de pe disc, pentru a localiza
i-node-ul si a-l aduce in memorie. I-node-ul este depus in tabela i-node-urilor din memorie, care
conine toate i-node-urile fiierelor deschise. Tabela este gestionata de kernel.
Localizarea unui fiier precizat printr-o cale completa este un lucru putin mai dificil. De exemplu,
pentru calea /usr/act/fis sistemul localizeaz iniial directorul rdcina (i-node-ul 2). Dupa aceasta
cuta printre intrrile sale intrarea usr si gsete i-node-ul asociat ei. I-node-ul este adus in memorie
si se determina blocul de pe disc care conine directorul /usr. Intrrile acestui director sunt citite si
comparate cu irul act. O data gsita intrarea, se extrage i-node-ul pentru directorul /usr/act si se
citete blocul de pe disc referit de el. In final, se cuta irul fis printre intrrile sale si se determina inode-ul care ne conduce la blocul de date al fiierului. Se poate observa ca utilizarea cailor relative
este mult mai convenabila nu numai pentru utilizator cat si pentru sistem, care astfel i reduce
operaiile de cutare.
2.4. Drepturi de acces
Protecia accesului la fiiere intr-un sistem cu mai muli utilizatori este un aspect important. In Unix
fiecare fiier conine in i-node-ul asociat un identificator utilizator (IDU) si un identificator de grup
(GUID) al proprietarului (vezi procese). Fiecare utilizator primete un numr specific, numit numr
de identificare (ID). In momentul in care este creat un fiier el primete ca semn de recunoatere IDul celui care la creat. Fiecare fiier conine in i-node-ul asociat trei seturi de cate trei bii. Seturile
corespund proprietarului, grupului din care face parte proprietarul (grupul) si celorlali utilizatori
din sistem (alii). Pentru fiecare dintre acetia exista dreptul de citire (Read), de scriere (Write) si de
execuie (eXecute). Dreptul precizeaz unui proces operaiile (citire, scriere, execuie) pe care
acesta le poate efectua asupra unui fiier. Pentru fiiere obinuite semnificaia drepturilor este
evidenta. Pentru directoare dreptul de citire nseamn drept de consultare (de afiare) a directorului
(permisa comanda ls). Dreptul de scriere nseamn ca in acest director se pot crea noi fiiere, terge
fiiere, se poate monta un sistem de fiiere se pot aduga sau terge legaturi. Un director care are
drept de execuie poate fi vizitat in timpul catarii unui fiier. Pentru fiiere speciale si pipe dreptul
de citire scriere semnifica capacitatea de a executa apelurile sistem read sau write. Dreptul de
execuie nu este important in acest caz.
Drepturile de acces ale unui fiier sunt pstrate intr-un cuvnt de 16 bii cu urmtoarea semnificaie:
Bit(i) Semnificaie
0-3 Tipul fiierului.
4 Seteaz ID-ul utilizator in timpul execuiei (suid).
5 Seteaz ID-ul grupului in timpul execuiei (sgid).
6 Setare swapping (stiky bit). Fiierele care au acest bit poziionat pe 1 rmn in zona de swapping.
Un astfel de fiier este citit ulterior in ntregime printr-o singura operaie (nu pe blocuri) in
memorie.
7-9 Drept de citire, scriere, execuie pentru proprietar.
10-12 Drept de citire, scriere, execuie pentru grup.
13-15 Drept de citire, scriere, execuie pentru alii.
6

2.4.1. Bitul sticky


Daca un fiier executabil are bitul sticky poziionat, atunci la prima sa execuie o copie a zonei sale
text este salvata in zona de swap (la terminarea procesului). Acest lucru permite programului sa se
ncarce in memorie mult mai repede, deoarece zona swap este gestionata ca o zona contigua. Acest
bit era folosit pentru programe de aplicaie obinuite, precum editoarele de text. Cu toate ca zona de
swap era limitata tehnica a fost des utilizata. Actualmente sistemele Unix avnd un sistem de
memorie virtuala si un sistem de fiiere rapid nu mai folosesc aceasta tehnica.
Versiunile noi de Unix permit poziionarea bitului sticky pentru directoare. Daca acest bit este
poziionat pentru director, un fiier din director poate fi sters sau redenumit daca utilizatorul are
drept de scriere in director si este proprietarul fiierului si directorului, sau este superuser.
2.4.2. Bitii suid si sgid. Identificatorul utilizator (IDU) si identificatorul grupului de utilizatori
(GIDU)
Fiecare utilizator primete un numr specific, numit identificator utilizator (IDU). Acesta este un
numr pozitiv asociat cu un nume utilizator de intrare in sesiune (login), aflat in fiierul de parole
/etc/passwd. La intrarea in sesiune a unui utilizator, comanda login face acest identificator IDU al
primului proces creat, interpretorul shell. Procesele descendente din shell motenesc acest IDU.
Utilizatorii sunt organizai in grupuri (a nu se confunda cu grup de procese), care au ID propriu
numit identificator de grup (GIDU). Pentru un utilizator, acesta este preluat din fiierul de parole si
facut GIDU shell-ului propriu.
Grupurile sunt definite in fiierul de grup /etc/group. La intrarea in sesiune un utilizator poate sa
creeze un alt grup. Acesta schimba GIDU procesului ce gestioneaz cererea (normal shell-ul, prin
comanda newgrp), care apoi este motenit de toi descendenii procesului.
Cei doi identificatori descrii se numesc IDU real si GIDU real, deoarece acetia sunt reprezentativi
pentru utilizatorul real (persoana care a deschis sesiunea). Fiecrui proces ii sunt asociai ali doi
identificatori numii IDU si GIDU efectiv. Acetia sunt, de regula, identici cu cei reali
corespunztori, dar pot fi si diferii dup cum vom vedea in continuare. ID efectivi se refera la
drepturile de acces.
Fiecare fiier conine in i-node-ul sau un IDU si un GIDU al proprietarului. I-node-ul conine
printre altele doi biii suid si sgid.
Cnd un proces este in execuie, sistemul de operare ii atribuie doi identificatori: IDU real, egal cu
cel al utilizatorului procesului (cel care la iniializat) si IDU efectiv. Analog sistemul de operare
creeaz doi identificatori relativ la grup.
In general, ID efectivi sunt identici cu ID reali, in afara cazului in care procesul executa un cod
coninut intr-un fiier asupra cruia nu are drepturi de execuie obinuite, dar are bitul suid sau sgid
poziionat. In acest caz, procesul poate totui sa execute codul coninut in fiier, cu ID efectiv egal
cu cel al proprietarului fiierului si diferit de cel real, cel al proprietarului de fiier, care a rmas
nemodificat. Procesul poseda dreptul, cat timp executa codul in cauza, corespunztor proprietarului
fiierului programului in curs. Daca, de exemplu, acest proprietar este superuserul, procesul poseda
temporar toate drepturile asupra sistemului. Dar singura aciune care o poate realiza este cea
definita in programul executat si probabil determinata de proprietarul fiierului, in acest caz
superuserul. ndat ce procesul executa codul unui program coninut intr-un fiier neprotejat, IDU
efectiv (GIDU efectiv), redevine egal cu cel real. Procesul continua sa se execute cu drepturile
iniiale.
7

Uneori se dorete ca un utilizator comun sa aib, pentru un timp, privilegiile altui utilizator. Avnd o
configuraie ca in figura 2, pentru ca procesul P (care are alt proprietar) sa poat modifica datele din
F, bitul suid al lui P trebuie poziionat si utilizatorul U sa poat lansa in execuie pe P. In aceast
situaie in timpul execuiei lui P, avnd bitul suid poziionat, U are IDU efectiv acelai cu al lui P si
astfel el poate modifica datele din F (accesul direct U la F nu e permis).
U
utilizator
comun

======>

P+suid
comanda
passwd

======>

F
fiierul
/etc/passwd

Fig.2. Accesul la fiierul de parole.


Deci utilizatorul poate avea acces la fiierul de parole numai prin intermediul unui program care are
bitul suid poziionat, iar acest program este astfel conceput incit un alt utilizator sa nu vad sau sa
modifice alte parole.
Bitul sgid este folosit in aceeai maniera pentru grup.
Un fiier care are aceti bii poziionai afieaz ca rezultat al comenzii ls pe pozitia lui 'x' litera 's'.
Pentru a-i poziiona se folosete comanda chmod. Proprietarul fiierului executabil si superuserul
pot modifica aceti bii. Se poate spune ca 's' este o extensie a permisiunii 'x' in contextul discutat.
Algoritmul folosit de sistem pentru a determina daca un proces are sau nu dreptul de a efectua o
operaie ( citire, scriere sau execuie) asupra unui fiier dat este urmtorul:
1) Daca IDU efectic este 0 permisiunea este acceptata (utilizatorul efectiv este superuserul);
2) Daca IDU efectiv al procesului si IDU al fiierului se potrivesc se decide permisiunea din bitii
proprietarului;
3) Daca GIDU efectiv al procesului si GIDU al fiierului se potrivesc se decide permisiunea din
bitii grupului;
4) Daca nici IDU si nici GIDU nu se potrivesc atunci, se decide din ultimul set de trei biti.
Sistemul pune la dispozitia utilizatorilor urmatoarele apelurile sistem pentru aflarea unui
identificator real sau efectiv:
int getuid() Returneaza IDU real.
int getgid() Returneaza GIDU real.
int geteuid() Returneaza IDU efectiv.
int getegid() Returneaza GIDU efectiv.
Apelurile sistem pentru actualizarea IDU si GIDU sunt:
int setuid ( uid)
int uid;
8

int setgid( gid)


int gid;
Daca apelantul este superuserul, aceste doua apeluri sistem actualizeaza IDU real si efectiv sau
GIDU la valoarea argumentului. Aceasta permite superuserului sa devina orice proces. Apelurile
intorc 0 in caz de succes si -1 in caz de eroare.
Cea mai importanta comanda Unix care foloseste acest apel este login. Dupa afisarea numelui de
login si a parolei, programul login verifica acestea prin inspectarea fiierului /etc/passwd si daca
sunt valide executa setuid si setgid pentru a actualiza IDU si GIDU real si efectiv la valoarea din
intrarea /etc/passwd. Login actualizeaza directorul de login ca director curent si foloseste apelul
exec pentru lansarea shell-ului.
Utilizatorul simplu poate executa setuid si setgid, dar numai pentru a schimba IDU efectiv sau
GIDU inapoi la ID real corespunzator. In acest caz, argumentul trebuie sa fie IDU sau GIDU real.
Aceasta caracteristica este folosita cand un program trebuie lansat cu un ID efectiv particular, sa
faca o prelucrare privilegiata si sa revina la ID real pentru restul vietii procesului.
2.5. Comenzile ls si chmod
ls Listeaza continutul directoarelor.
Sintaxa: ls [optiuni] director
Optiuni:
-d Afiseaza numai directoarele din directorul curent.
-l Afiseaza in format lung, indicand drepturile de acces, numarul de legaturi, dimensiunea fiierului,
data ultimei actualizari, numele fiierului.
-i Afiseaza si numarul i-node-ului fiecarui fiier.
-s Afiseaza numarul de blocuri pentru fiecare fiier.
-t Fiierele sunt sortate dupa data ultimei actualizari
-u La afisare se considera data ultimului acces in loc de data ultimei actualizari pentru optiunile -t
sau -l.
-r Inverseaza ordinea de sortare.
Exemplu: ls -lsi /usr
chmod
Schimba drepturile de acces la un fiier ordinar sau
director.
Sintaxa: chmod atr fiier(e)
atr Se exprima ca un numar octal din patru cifre sau printr-o cobinatie de forma:
[u | g | o] [+ | - | =] [r | w | x | s | t]
+ adauga permisiune
9

- sterge permiiune
= atribuie permisiune
Categorie utilizator Permisiune
u - proprietarul r - Read
g - grupul w - Write
o - restul utilizatorilor x - eXecute
a - u+g+o t - setare bit swapping
Drepturile de acces la un fiier se pastreaza intr-un cuvant, plasat in i-node-ul fiierului. Se poate
specifica direct valoarea acestui cuvant, bitii avand semnificatia:
Drept
Citire
Scriere
Executie

Proprietar
0400
0200
0100

Grup
040
020
010

Altii
04
02
01

Exemplu:
chmod o-x f1 Sterge dreptul la executie pentru restul utilizatorilor fata de fiierul f1.
chmod 0774 f1 F1 va avea permisiunile de acces rwxrwxr--.
3. Aplicatii
3.1. Sa se gaseasca comenzile Unix corespondente urmatoarelor comenzi DOS de lucru cu fiiere:
attrib chmod, ls -l
cd, chdir cd, pwd
comp cmp
copy cp, cat
del, erase rm
dir ls
fc cmp, diff
md, mkdir mkdir
ren mv
rd, rmdir rmdir
type cat
3.2. Un fiier cu numele sistem.c este identificat in sistemul de operare DOS de expresiile 'sis*z.c*'
si 'sistem.c??'. Care dintre aceste expresii identifica in Unix fiierul ?
10

Caracterul * identifica orice secventa arbitrara de caractere, iar caracterul ? identifica orice caracter
singular. Diferentele apar la modul in care se face potrivirea. In Dos orice potrivire a unui nume de
fiier cu o expresie ce contine caracterele * si ? este extinsa cu blancuri la opt caractere pentru nume
si trei caractere pentru extensie.
In Unix, nici o expresie nu identifica fiierul. In prima exista caracterul 'z' in plus, iar in a doua
extensia ar trebui sa fie formata din trei caractere.
3.3. Se considera ca se doreste actualizarea unui fiier cu date furnizate de un alt utilizator care nu
are permisiunea de acces direct la acel fiier. Situatia aceasta este reprezentata schematic prin
desenul de mai jos:
Programul lui------>Program ? -------->Datele lui
XY
Care este calea prin care X va avea acces la datele lui Y ?
Calea prin care procesul X reuseste sa faca actualizarea este printr-un program scris de Y ce rezida
intr-un fiier, cu bitul suid pozitionat, inaccesibil utilizatorului daca acesta nu este in executie.
4. Probleme propuse
4.1. Comanda Unix man permite obtinerea de informatii despre comenzile Unix, diferite apeluri de
sistem, utilitare importante. Comanda se apeleaza avand ca argument numele comenzii despre care
se solicita informatii. Utilizand comanda obtineti informatii suplimentare despre comenzile ls, echo,
cat si chmod.
4.2. Ce realizeaza comenzile ?
ls -l ?
ls a*b
ls -li

ls [a-z]*[!0-9]
ls *[!o]
ln unu doi

Sa se explice rezultatele obtinute.


4.3. Sa se parcurga arborele sistemului de fiiere si sa se identifice directoarele cu comenzile, cu
dispozitivele periferice, cu fiiere temporare, etc.
4.4. Sa se vizulizeze continutul unui director folosind comanda ls -l. Sa se identifice informatiile din
i-node. Utilizand comanda chmod sa se modifice drepturile de acces ale unui fiier executabil si ale
unui director arbitrar din structura sistemului de fiiere. Sa se explice rezultatul comenzilor.
4.5. Sa se traga concluziile despre modul in care pot fi utilizate drepturile de acces pentru a permite
utilizarea fiierelor in cadrul grupurilor de utilizatori.
4.6. Care este deosebirea intre un director DOS si unul UNIX ?
4.7. Ce se poate spune despre interpretarea caracterelor * si ? in Unix. Explicati diferentele.
4.8. Directorul /tmp este un exemplu in care bitul sticky poate fi utilizat. In acest director toata
lumea are drepturi depline. In ce mod este util acest bit ?
4.9. Parola intr-un sistem cu mai multi utilizatori se schimba des pentru siguranta datelor. Fiecare
dintre utilizatori poate sa-si schimbe singur parola folosind comanda passwd. Parola este pastrata
intr-un fiier comun tuturor utilizatorilor, care practic este modificat de fiecare utilizator care isi
11

schimba propria parola. Cu toate ca toti utilizatorii au acces la acest fiier ei pot sa-si modifice doar
parola proprie. Sa se explice cum este realizat acest lucru.
4.10. Din cele discutate in lucrare, s-ar parea ca daca se copiaza fiierul sh in directorul propriu,
devenim proprietarul copiei. Daca se foloseste comanda chmod se pozitioneaza bitul suid, iar prin
comanda chown se modifica proprietarul la root. Executand acum copia vom detine privilegiul de a
fi root. Acest lucru nu se produce, deci care este greseala in rationament ?

12