Sunteți pe pagina 1din 7

Laboratorul 1

Sistemul de fis, iere

1 Ierarhie
În sistemele de operare de tip UNIX fis, ierele s, i directoarele sunt organizate
ı̂ntr-o structură arborescentă. Rădăcina este notată cu / s, i se mai numes, te s, i
root. În rădăcină se găsesc mai multe directoare s, i fis, iere. La rândul lor, aceste
directoare pot cont, ine alte fis, iere s, i directoare. Directoarele dintr-un director se
mai numesc s, i subdirectoare sublinind relat, ia ierarhică.
De exemplu, mesaje de sistem se găsesc ı̂n fis, ierul /var/log/messages.
Acesta se află ı̂n directorul log care se află la rândul său ı̂n directorul var
care se află ı̂n rădăcină. Alt exemplu este directorul personal de lucru uso care
cont, ine două directoare, care la rândul lor au câte un subdirector ı̂n care se
găsesc diferite fis, iere.
$ t r e e uso
uso
|−− c u r s
| ‘−− 1
| |−− uso−c u r s −1. pdf
| ‘−− uso−c u r s −1. t e x
|−− l a b
| ‘−− 1
| |−− uso−lab −1. aux
| |−− uso−lab −1. f d b l a t e x m k
| |−− uso−lab −1. f l s
| |−− uso−lab −1. l o g
| |−− uso−lab −1. pdf
| |−− uso−lab −1. s y n c t e x . gz
| ‘−− uso−lab −1. t e x
‘−− p l a n

4 d i r e c t o r i e s , 10 f i l e s

1
2 Linia de comandă
Majoritatea comenzilor vor fi executate ı̂n cadrul unui terminal (ex. xterm(1),
GNOME Terminal etc.). Des, i dificil s, i aparent mai complicat la ı̂nceput, fo-
losirea terminalului oferă multe avantaje precum flexibilitate, automatizarea
sarcinilor s, i control la distant, ă al altor mas, ini.
Un terminal tipic are la bază un program de tip shell (ex. bash(1), ksh,
zsh) care gestionează s, i execută comenzi secvent, ial sau ı̂n paralel. Promptul
unui terminal indică faptul că se as, teaptă o comandă de la utilizator s, i este ı̂n
cea mai simplă formă constituit din simbolul $ sau % pentru utilizatorii comuni
s, i # pentru administrator (denumit root ı̂n UNIX). În Linux se practică un
prompt mai elaborat care poate cont, ine numele utilizatorului, numele mas, inii,
s, i/sau directorul curent. De exemplu, promptul root@lab uso# indică faptul
că utilizatorul root este logat pe terminalul de pe mas, ina lab s, i se află ı̂n
directorul uso.
Tot ce este scris ı̂n dreapta promptului reprezintă comanda utilizatorului
către mas, ină.
$ echo ” H e l l o , World ! ”
H e l l o , World !
$

În exemplul de mai sus a fost executată comanda echo cu parametrul "Hello,
World!". Rezultatul comenzi, dacă există, este afis, at fără a fi prefixat cu
prompt. Încheierea comenzii este semnalată prin reaparit, ia promptului.
De fiecare dată când vedet, i o comandă necunoscută citit, i manualul pentru
a afla ce face
$ man echo
Din motive istorice, manualul sistemului de operare (ce include manualele co-
menzilor) este ı̂mpărt, it ı̂n sect, iuni. Astfel pot exista mai multe intrări cu acelas, i
nume dar ı̂n sect, iuni diferite. Vezi cunoscuta funct, ie printf.
$ man p r i n t f
$ man 3 p r i n t f
Prima instruct, iune s-ar putea să vă surpindă afis, ând manualul comenzii printf
nu a funct, iei C printf. Comenzile de terminal se află de regulă ı̂n sect, iunea 1, pe
când funct, iile se află ı̂n sect, iunea 3. Pentru a accesa manualul funct, iei trebuie să
specificăm un argument ı̂n plus comenzii man(1) care specifică sect, iunea explicit.
Din această cauză când ne referim la o comandă sau o funct, ie punem la sfârs, it s, i
sect, iunea din manual ı̂n care este documentată: printf(1) versus printf(3).
Este bine de s, tiut că există manual s, i pentru comanda de citit manuale
$ man man

2
3 Navigare
În general, fiecare utilizator are un spat, iu de lucru propriu ı̂n care ı̂s, i poate
desfăs, ura activitatea. Acest spat, iu este găzduit ı̂ntr-un director, de regulă
/home/username, care este memorat ı̂n variabila $HOME
$ echo $HOME
/home/ p a u l
Acest tip de variabilă se mai numes, te s, i variabilă de mediu. Ele sunt definite
dinamic de sistem sau utilizator pentru a fi folosite de programe la execut, ie.
Variabilele sunt ı̂n general scrise cu litere mari s, i precedate de simbolul $. O
altă variabilă importantă este cea ı̂n care sunt memorate căile din sistemul de
fis, iere ı̂n care se găsesc executabilele.
$ echo $PATH
/ b i n : / s b i n : / u s r / b i n : / u s r / s b i n : / u s r /X11R6/ b i n :
/ usr / l o c a l / bin : / usr / l o c a l / sbin
Când este pornit un terminal, acesta de regulă vă plasează ı̂n directorul $HOME.
Folosit, i comanda pwd(1) pentru a verifica ı̂n orice moment unde vă aflat, i s, i
comanda ls(1) pentru a lista cont, inutul directorului curent.
$ pwd
/home/ p a u l /wrk/ub/ uso / l a b /1
$ ls
uso−lab −1. aux uso−lab −1. l o g
uso−lab −1. f d b l a t e x m k uso−lab −1. pdf
uso−lab −1. f l s uso−lab −1. t e x
Toate comenzile se execută relativ la directorul curent: ls(1) verifică implicit
directorul curent s, i listează cont, inutul său.
Dacă dorit, i să schimbat, i directorul curent folosit, i comanda cd(1). Aceasta
primes, te ca parametru viitorul director curent. El poate fi dat relativ la direc-
torul curent sau ı̂n formă absolută pornind de la rădăcină. În aproape toate
sistemele de operare . simbolizează directorul curent s, i .. directorul părinte.
Deci dacă vrem din exemplul anterior să ajungem acasă putem folosi oricare
dintre următoarele comenzi
$ cd . . / . . / . . / . . / . . /
$ cd /home/ p a u l
$ cd $HOME
$ cd
Implicit cd(1) fără argumente schimbă directorul ı̂n directorul $HOME.
Pentru a afla unde se află executabilul aferent unei comenzi folosit, i comanda
which(1)
$ which l s
/ bin / l s
Observat, i că ls(1) se află ı̂ntr-unul din directoarele cont, inute ı̂n $PATH.

3
4 Citire s, i scriere
Pentru a crea fis, iere noi text se poate folosi echo(1)
$ echo ” lorem ipsum ” > f o o
unde operatorul > redirect, ionează ies, irea comenzi către fis, ierul foo. Dacă foo
există, va fi suprascris. Pentru a adăuga la sfârs, itul unui fis, ier existent folosit, i
>>. Fis, ierele text scurte pot fi rapid afis, ate ı̂n terminal cu ajutorul comenzii
cat(1).
$ cat foo
lorem ipsum
Des, i se poate aplica aceias, i comandă asupra fis, ierelor binare, precum executa-
bilele, nu este recomandat deoarece anumite ”caractere” rezultate pot fi inter-
pretate de shell drept caractere de control care vor da peste cap funct, ionarea
normală a terminalului. De aceea se foloses, te utilitarul hexdump(1)
$ hexdump −C / b i n / l s
unde opt, iunea -C indică modul canonic de afis, are a binarelor: ı̂n stânga octet, ii
ı̂n format hexadecimal s, i ı̂n dreapta octet, ii ı̂n format ASCII. Rezultatul este
destul de lung s, i depăs, es, te lungimea terminalului. Pentru a parcurge toată
informat, ia se recomandă folosirea unui pager precum less(1)
$ hexdump −C / b i n / l s | l e s s
unde operatorul | se numes, te pipe. Un pipe transformă iesirea programului din
stânga ı̂n intrarea celui din dreapta. Pentru a ies, i din less(1) apăsat, i tasta q.
Pentru a căuta un text folosit, i comanda /. De exemplu /print va căuta s, irul
de caractere print. Evident, less(1) poate fi folosit direct pentru a inspecta
fis, iere s, i este util mai ales pentru fis, iere text mari
$ l e s s / e t c / passwd
Căutarea unui fragment de text ı̂ntr-un fis, ier se poate face folosind expresii
regulate ı̂n cadrul comenzii grep(1). Fie următorul fis, ier text
$ echo ” words \ n r a t \ n r a t a \ n r a t a t \ n r a t a t a \ n r a t a t a t a ” > r a t
unde \n reprezintă o linie nouă (ca ı̂n limbajul C). Pentru a găsi cuvintele ce
cont, in at ı̂n fis, ier folosim comanda
$ grep at rat
rat
rata
ratat
ratata
ratatata
Dacă vrem să găsim cuvintele care se termină ı̂n litera t atunci vom folosi
comanda

4
$ grep t$ rat
rat
ratat
unde caracterul $ simbolizează sfârs, itul linei. Pentru ı̂nceputul linei se foloses, te
^
$ g r e p ˆw r a t
words
Alte caractere speciale utile, numite wildcards, sunt:
• * – găses, te de 0 sau mai multe ori atomul precedent
• + – găses, te de 1 sau mai multe ori atomul precedent
• ? – găses, te de 0 sau 1 ori atomul precedent
unde un atom este implicit caracterul precedent sau grupul precedent de carac-
tere. Gruparea mai multor caractere se face cu ajutorul parantezelor rotunde
(). În exemplul nostru putem căuta toate cuvintele care ı̂ncep cu rata s, i sunt
urmate de ta de 0 sau mai multe ori astfel
$ g r e p −E ’ r a t a ( t a ) ∗ ’ r a t
rata
ratat
ratata
ratatata
$ g r e p −E ’ r a t a ( t a )+ ’ r a t
ratata
ratatata
$ g r e p −E ’ r a t a ( t a ) ? ’ r a t
rata
ratat
ratata
ratatata
Observat, i că am folosit parantezele pentru grupare s, i opt, iunea -E pentru a folosi
expresii regulate.

5 Manipulare
Pentru a schimba valoarea unei variabile se foloses, te comanda export. Aceasta
este o comandă tipică shell-ului folosit s, i găsit, i detalii despre ea ı̂n manualul
shell-ului (ex. bash(1)).
$ echo $PS1
$
$ e x p o r t PS1=”uso$ ”
uso$ echo $PS1
uso$

5
Putem refolosi variabila curentă s, i doar adăuga informat, ii la ı̂nceput folosind
$ e x p o r t PS1=”uso$PS1 ”
uso$ echo $PS1
uso$
unde variabila $PS1 din dreapta a fost ı̂ntâi evaluată, iar valoarea ei a fost
adăugată s, irului de caractere uso, care pe urmă a fost folosit pentru a seta noua
variabilă $PS1. Observat, i că la init, ializare variabilele nu sunt precedate de $.
Directoarele sunt create cu comanda mkdir(1)
$ pwd
/home/ p a u l /wrk/ub/ uso / l a b /1
$ mkdir tmp
$ cd tmp
Pentru a crea fis, iere noi lipsite de cont, inut folosit, i comanda touch(1).
$ touch f o o
$ ls
foo
Argumentul primit este calea către fis, ierul nou creat. Dacă fis, ierul deja există,
este modificată data la care a fost accesat ultima dată. Operat, ia de copiere se
face cu comanda cp(1)
$ cp f o o bar
$ ls
bar f o o
iar cea de mutare cu comanda mv(1)
$ mv bar baz
$ ls
baz f o o
Fis, ierele se s, terg cu comanda rm(1), iar directoarele goale cu comanda rmdir(1)
$ pwd
/home/ p a u l /wrk/ub/ uso / l a b /1/tmp
$ ls
baz f o o
$ rm baz f o o
$ ls
$ cd . .
$ cd . . /
$ rmdir tmp
Pentru a găsi fis, iere se foloses, te comanda find(1)
$ f i n d / b i n −name l s
/ bin / l s

6
unde primul argument este directorul ı̂n care să caute s, i al doilea este numele
fis, ierului. Folosit, i * pentru a specifica că orice s, ir de caractere este acceptat mai
departe
$ f i n d / b i n −name l ∗
/ bin / ln
/ bin / l s
Odată găsite, putet, i executa anumite comenzi asupra fis, ierelor
$ mkdir tmp
$ touch tmp/ f o o tmp/ bar tmp/ baz
$ l s tmp
bar baz f o o
$ f i n d tmp −name b∗ −e x e c rm {} \ ;
$ l s tmp
foo
Aici am folosit opt, iunea -exec a comenzii find(1) care execută comanda spe-
cificată pentru fiecare rezultat. Notat, ia {} reprezintă rezultatul curent, ı̂n cazul
nostru ı̂ntâi bar s, i pe urmă baz, iar \; semnifică ı̂ncheierea comenzii -exec.

6 Sarcini de laborator
1. Refacet, i ierarhia directorului uso din Sect, iunea 1 folosind comenzile mkdir(1)
s, i touch(1).
2. Creat, i un director bin ı̂n $HOME s, i adăugat, i-l ı̂n $PATH. Copiat, i un execu-
tabil existent s, i observat, i cum/dacă se modifică ies, irea comenzii which(1)
când ı̂ntrebăm de executabilul copiat. Dacă nu se schimbă, de ce?
3. În ultimul exemplu din Sect, iunea 4 grep(1) ı̂ntoarce acelas, i număr de
rezultate pentru * s, i +. Construit, i un exemplu nou ı̂n care să folosit, i cele
trei wildcard-uri s, i să obt, inet, i rezultate diferite.

4. Creat, i două directoare orig s, i backup. În directorul orig creat, i fis, ierele
foo,bar,baz. Folosit, i comanda find(1) să copiat, i toate fis, ierele din orig
ı̂n backup dar cu extensia .orig ı̂n plus (ex. foo.orig).
5. Căutat, i ı̂n manualul rm(1) cum să s, terget, i recursiv s, i folosit, i informat, ia
pentru a s, terge ı̂ntr-o singură instruct, iune directorul backup de mai de-
vreme.

S-ar putea să vă placă și