Documente Academic
Documente Profesional
Documente Cultură
40
M2.U2.3. Comenzi de lucru cu directoare
Creearea directoarelor se face cu comanda mkdir (“make directory”). Sintaxa ei
este:
mkdir [-p] nume_catalog
Dacă este prezentă opŃiunea -p se creează şi cataloagele părinte care lipsesc din numele de
cale dat pentru catalogul dorit.
Exemplu.
$mkdir –p /home/ilflorea/so/Linux/exemple
Înainte de crearea catalogului exemple, vor fi create cataloagele
ilflorea,so,Linux dacă nu au fost încă create, în ordinea specificată.
41
Exemple. Presupunem că avem structura de directoare şi fişiere din figura 2.2.1.
Dacă tastăm comenzile:
$pwd
/home/ilflorea/so/exemple/Linux
$rmdir Grep
Se şterge directorul /Grep.
Dacă tastăm:
$pwd
/home/ilflorea
$rd –r so
se vor şterge directoarele /so, /exemple, /Linux, /Windows,/Awk,
/Grep şi fişierele fis1 şi fis2.
/home/ilflorea
fis1 /exemple
/Linux /Windows
42
- numele fişierului.
Exemplu. Utilizarea comenzii ls cu opŃiunea -l. Relativ la structura din figura
2.2.1, dacă tastăm:
$ls –l /home/ilflorea
Se afişează:
total 22
drwxr-xr-x 1 ilflorea prof 4096 2010-08-24 22:04 so
drwxr-xr-x 1 ilflorea prof 2048 2010-08-24 23:04 so1
drwxr-xr-x 1 ilflorea prof 12048 2010-08-25 23:04 fis1
drwxr-xr-x 1 ilflorea prof 13048 2010-08-24 23:04 fis3
Cu opŃiunea -a (“all”) se listează şi fişierele ascunse (fişierele al căror nume începe
cu caracterul punct ).
Exemplu. Utilizarea comenzii ls cu opŃiunile -al. Relativ la structura din figura
2.2.1, dacă tastăm:
$ls –al /home/ilflorea
Se afişează:
total 22
drwxr-xr-x 1 ilflorea prof 512 2010-08-24 22:04 .
drwxr-xr-x 1 ilflorea prof 1024 2010-08-24 23:04 ..
drwxr-xr-x 1 ilflorea prof 4096 2010-08-24 22:04 so
drwxr-xr-x 1 ilflorea prof 2048 2010-08-24 23:04 so1
drwxr-xr-x 1 ilflorea prof 12048 2010-08-25 23:04 fis1
drwxr-xr-x 1 ilflorea prof 13048 2010-08-24 23:04 fis3
Pentru a schimba ordinea de listare implicită (alfabetic, după numele fişierului) există
mai multe opŃiuni:
-c: listarea se face în ordinea ultimei modificări a modului de acces la fişier (cel mai recent
modificat se listează primul);
-t: listarea se face în ordinea ultimei modificări a fişierului (cel mai recent modificat primul);
-u: listarea se face după timpul ultimului acces la fişier;
-r: inversează ordinea de sortare (invers alfabetic sau cel mai vechi modificat primul).
-S sorteaza fisierele in ordine descrescatoare dupa dimensiunea lor.
43
Exemplu. Pentru găsirea celor mai mari fisiere din directorul curent se listează
fisierele sortate in ordine descrescatoare dupa dimensiunea lor, prin:
$ls -lS
Dacă argumentul unei comenzi ls este un fişier, în funcŃie de opŃiunile utilizate se
afişează informaŃii despre fişierul respectiv.
Exemplu. Dacă se tastează
$ls –l /home/ilflorea/fis1
Se afişează:
drwxr-xr-x 1 ilflorea prof 12048 2010-08-25 23:04 fis1
Să ne reamintim...
Creearea directoarelor se face cu comanda mkdir. Tipărirea directorului curent
se face cu comanda pwd. Comanda cd are ca efect schimbarea directorului
curent sau modificarea poziŃiei curente în ierarhia de directoare. Ştergerea unui
catalog vid se face cu comanda rmdir Pentru ştergerea mai multor fişiere sau
directoare se foloseşte comanda rm. Comanda ls are ca efect afişarea
conŃinutului unui catalog.
CreaŃi o structură de directoare şi fişiere, similară celei din figura 2.2.1., în care să
înlocuiŃi ilflorea , cu numele vostru de utilizator. AdaptaŃi exemplele
prezentate, la structura creată.
M2.U2.4. Redirectarea intrărilor şi ieşirilor
Fiecare comandă Linux are un “fişier de intrare” şi un “fişier de ieşire”. Implicit
acestea sunt “intrarea standard” (tastatura de la care se introduce comanda) şi “ieşirea
standard” (ecranul terminalului la care lucrează utilizatorul).
Interpretorul de comenzi stabileşte identitatea fişierelor standard de intrare şi standard
de ieşire, pe care le ataşează comenzii. Atunci când se execută comanda respectivă, acestea
primesc descriptorii de fişier 0 (intrare) şi 1 (ieşire). De asemenea, shell-ul stabileşte fişierul
standard de erori, care are descriptorul 2 şi este transmis comenzii (de regulă este acelaşi cu
fişierul standard de ieşire).
Shell-ul permite utilizatorului sa specifice explicit în linia de comandă o altă identitate
pentru intrarea standard şi/sau ieşirea standard, prin caracterele speciale <, respectiv >.
Exemplu.
$ ls -l fis1 >fis2
InformaŃiile despre fişierul fis1 din catalogul curent, nu apar pe ecran, ele sunt
memorate în fişierul fis2 din directorul curent. Înainte de lansarea în execuŃie
a comenzii ls, shell-ul deschide pentru scriere fis2 (cu descriptorul de fişier
l). Dacă fişierul fis2 există, prin operaŃia de deschidere pentru scriere
conŃinutul său anterior se pierde; dacă fişierul nu există, el va fi creat de către
shell şi va avea iniŃial lungimea nulă.
Efectul unei specificări de forma:
$comanda <fisier
este acela că argumentele cu care va fi executată comanda nu vor fi luate de la intrarea
standard, ci din fişierul cu numele fisier .
O comandă în care se redirectează atât intrarea cât şi ieşirea va fi de forma:
$comanda <input >output
Ordinea de specificare a redirectărilor nu este semnificativă.
44
Prim notaŃia n>, în care n este un întreg, se specifică redirectarea pentru scriere a
fişierului cu descriptorul n. Această facilitate se foloseşte pentru redirectarea fişierului
standard de eroare. Sintaxa unei comenzi în care toate cele 3 fişiere standard sunt redirectate
este:
$comanda <input >output 2>errors
Pentru ca fişierul în care se redirectează ieşirea să nu fie suprascris, ci să se adauge la
sfârşitul lui noi date, se foloseşte notaŃia >>. Pentru adăugarea la sfârşitul fişierului de erori
sintaxa este 2>>. Astfel:
$comanda >>logfile
va determina ca mesajele produse de comanda să se adauge la sfârşitul fişierului logfile.
Prin notaŃia <<c se specifică preluarea informaŃiilor necesare unei comenzi de la
tastatură (în regim interactiv) sau din textul unei proceduri shell, până la întâlnirea lui c
(caracter sau text). O astfel de constructie este de forma:
$comanda <<cuvant
.......
succesiune de linii
-----
Cuvant
Comanda cat este utilizată pentru a afişa, la ieşirea standard conŃinutul unuia sau
mai multor fişiere specificate în linia de comandă. Prin redirectarea ieşirii, folosind
mecanismul prezentat anterior, cat se poate utiliza pentru a crea un fişier text.
Exemplu. SecvenŃa:
$cat >fis <<EOF
Cursul de Linux
Este foarte important
Pentru mine
EOF
introdusă într-un fişier de comenzi, are ca efect crearea fişierului fis ce conŃine
trei linii ” Cursul de Linux”, ” Este foarte important”,
”Pentru mine”.
Altă modalitate de a crea fişiere cu cat, fără a folosi notaŃia <<c, este de a folosi
redirectarea ieşirii şi a tasta Ctrl-D, după ce s-a introdus în fişier textul respectiv.
Concatenarea fişierelor cu comanda cat. Dacă în linia de comandă a comenzii se
specifică un număr de fişiere, dintre care ultimul este precedat de semnul >, se realizează
concatenarea fişierelor specificate înaintea ultimului şi ultimul fişier va conŃine rezultatul
concatenării.
Exemplu. SecvenŃa:
$cat fis1 fis2 fis3 >fis
Realizează concatenarea fişierelor fis1 fis2 fis3 în fişierul fis.
Dacă la redirectare se foloseşte notaŃia >>fis, textul respectiv se va adăuga la
sfârşitul fişierului, fără a distruge conŃinutul lui.
Exemplu. SecvenŃa:
$cat fi>fis
Cursul de Linux
Este foarte important
Pentru mine
Ctrl-D
se crează acelaşi fişier ca în exemplul anterior.
45
Legarea în pipe (“conductă”) are sintaxa:
$comanda1 | comanda2
Efectul este următorul: comenzile comanda1 şi comanda2 vor fi lansate în execuŃie
simultan, ieşirea lui comanda1 fiind utilizată ca intrare de comanda2. comanda2 poate
începe efectiv execuŃia numai după ce are un element de informaŃie de la comanda1 (dar nu
trebuie să aştepte până când comanda1 termină de produs tot ce va furniza ca ieşire).
Ieşirea pentru comanda1 (descriptor de fişier 1) este un fişier (o structură numită pipe) şi
acelaşi fişier va fi intrare pentru comanda2 (descriptor de fişier 0). Mecanismul pipe este
frecvent utilizat în Linux pentru combinarea unor comenzi.
Exemplu. SecvenŃa:
$ls -l|grep ilflorea
Va afişa fişierele din directorul curent ale căror proprietar este utilizatorul
ilflorea. Comanda grep o vom studia într-un modul următor. În acest
exemplu, are ca efect căutarea cuvîntului ilflorea în ieşirea comenzii ls -
l. Acelaşi efect se poate obŃine şi prin secvenŃa următoare:
$ls –l >fis
grep ilflorea fis
Se poate utiliza o legare în pipe a mai multor comenzi, de forma:
$comanda_1|comanda_2 |...comanda_i|comanda_i+1...|comanda_n
În această situaŃie, ieşirea lui comanda_i este utilizată ca intrare de comanda_i+1.
Exemplu. SecvenŃa:
$ls –l /home/ilflorea |grep ilflorea | sort +24
Va afişa fişierele din directorul /home/ilflorea ale căror proprietar este
utilizatorul ilflorea, ordonate după dimensiune. Comanda sort o
vom studia în această unitate de învăŃare.
46
Exemplu.
$ls /home/ilfloreax &>outcom.txt
$cat outcom.txt
ls: /home/ilfloreax: No such file or directory
Lucrează astfel:
&>outcom.txt redirectează atât stdout cât şi stderr către fişierul
outcom.txt.
Dacă nu se redirectează ambele fişiere, atunci mesajele de eroare vor fi transmise
la terminal.
Exemplu.
$ ls /home/ilfloreax >outcom.txt
ls: /home/ilfloreax: No such file or directory
În acest caz, erorile vor fi afişate pe ecran, şi toate ieşirile vor fi transmise în
fişierul outcom.txt.
Să ne reamintim...
Redirectarea intrărilor şi ieşirilor este un mecanism prin care se modifică fişierele
standard de intrare şi/sau de ieşire ale unei comenzi. În loc de tastatură, respectiv
ecranul monitorului, intrarea, respectiv ieşirea poate fi un fişier oarecare. Acest
mecanism este util atunci cind iesirea unei comenzi este intrare pentru o altă
comandă.
Cu acest mecanism, cu comanda cat, se pot crea fişiere text în linia de
comandă.
Un alt fişier standard care poate fi redirectat este cel de erori; de exemplu, când
se doreşte păstrarea tuturor erorilor într-un fişier, acesta este redirectat cu ieşire şi
adăugare la sfârşit într-un alt fişier. De asemenea, există şi situatia în care nu ne
interesează mesajul de eroare al unei comenzi şi atunci fişierul de ieşire este
fişierul nul.
Un alt mecanism de acest tip este legarea în pipe a comenzilor, prin care se
utilizează o structură specială, cu acelaşi nume, care pentru o comandă este fişier
de intrare, iar pentru alta de ieşire.
47
1. CreaŃi cu comanda cat câte un fişier prin ambele metode. AdăugăŃi text la
fişierele create prin ambele metode.
2. ScrieŃi o legare în pipe a două comenzi, prin care să se caute şi să se afişeze
informaŃii despre toate fişierele dintr-un director, al căror nume conŃine şirul de
caractere fis.
3. ScrieŃi o secvenŃă de concatenare a trei fişiere aflate în directoare diferite şi
fişierul în care se face concatenarea să fie în directorul gazdă.
M2.U2.5. Copierea, mutarea şi redenumirea fişierelor
Copierea unui fişier se face cu comanda cp (“copy”). Prin copiere se crează un nou fişier cu
acelaşi conŃinut. Are sintaxa:
cp [opŃiuni] nume1 nume2
OpŃiunile comenzii sunt:
-a (“archive”): se foloseşte acestă opŃiune pentru a se copia odată cu fişierul şi
caracteristicile lui.
-b (“backup”): dacă nume2 este numele unui fişier deja existent, se face o copie de
siguranŃă a cestuia.
-f („force”): se face copierea chiar dacă atributele lui nume2 interzic acest lucru.
-i („interactive”): utilizatorul este întrebat atunci când se face suprascrierea.
-p („preserve”): se face copierea şi a drepturilor, concept care îl vom discuta în această
unitate de învăŃare.
-r („recursive”): se face copierea recursivă.
-u („update”): se face copierea numai dacă nume2 nu există sau este mai vechi decât
nume1.
Comanda are întotdeauna cel puŃin două argumente.
• Dacă ambele argumente reprezintă nume de fişiere obişnuite, nume2 va fi un fişier nou (i
se alocă nod index şi blocuri de date proprii), cu conŃinut identic cu cel al fişierului nume1.
• Dacă nume1 este un fişier obişnuit, iar nume2 desemnează un catalog, atunci în catalogul
nume2 se creează o intrare cu numele nume1 pentru copia fişierului.
• Dacă atât nume1 cât şi nume2 reprezintă nume de cataloage, atunci comanda cp se poate
executa doar dacă este prevăzută şi opŃiunea -R sau -r, iar efectul este crearea în nume2 a
unui catalog nume1 şi copierea recursivă a fişierelor din catalogul original nume1 în
catalogul nou creat.
ObservaŃie. Numele de fişier nume1 poate fi definit şi ca un şablon, prin folosirea
caracterelor * şi ?. Dacă este prezent caracterul *, respectiv ?, acesta poate fi înlocuit cu
orice şir de caractere, respectiv cu un caracter, cu condiŃia ca numele obŃinut să existe în
structura respectivă.
Exemplu. Relativ la structura din figura 2.2.2. ; dacă se tastează:
$cd /home/ilflorea
$cp ./so/fis1 ./so/exem/linux
Se crează un nou fişier cu numele fis1 în directorul
/home/ilflorea/so/exem/linux, care are acelaşi conŃinut cu
fişierul cu numele fis1 din directorul /home/ilflorea/so.
48
Exemple Dacă se tastează:
$cd /home/ilflorea
$cp ./so/fis1 ./so/exem/linux/fis12
Se crează un nou fişier cu numele fis12 în directorul
/home/ilflorea/so/exem/linux, care are acelaşi conŃinut cu
fişierul cu numele fis1 din directorul /home/ilflorea/so.
Dacă se tastează:
$cd /home/ilflorea
$cp ./so/*fis? ./so/exem/linux1
Se crează noile fişiere cu numele fis1,abfis2, afis2 în directorul
/home/ilflorea/so/exem/linux1, care au aceleaşi conŃinuturi cu
cele din directorul /home/ilflorea/so.
Dacă se tastează:
$cd /home/ilflorea/so
$cp –r ./exem /home/ilflorea
Se creează o sub-structură de directoare şi fişiere în /home/ilflorea, care
conŃine sub-structura cu rădăcina în /home/ilflorea/so/exem (Figura
2.2.2).
/home/ilflorea
/Linux /Linux1
49
sursă este un catalog (deci cataloagele nu se pot muta dintr-un sistem de fişiere în altul).
Pentru fişierele obişnuite, într-un astfel de caz se creează un alt fişier (se alocă nod index şi
blocurile de date necesare) în noul sistem de fişiere.
Exemple. Relativ la structura din figura 2.2.2. ,dacă se tastează:
$cd /home/ilflorea/so
$mv fis1 fis2
Se va şterge intrarea fis1 din directorul /home/ilflorea/so şi se va crea
o noua intrare cu numele fis2 în acelaşi director, care va corespunde unui
fişier cu acelaşi conŃinut cu vechiul fis1.
Dacă se tastează:
$cd /home/ilflorea
$mv ./so/fis1 –t ./so/exem/linux
Se crează o nouă intrare în directorul /home/ilflorea/so/exem/linux
pentru fişierul fis1 şi se distruge intrarea corespunzătoare din directorul
/home/ilflorea/so.Fişierul va păstra vechiul conŃinut.
50
O legătură simbolică este de fapt un fişier text, al cărui conŃinut este nume_cale şi al cărui
nume este legătură (sau ultima componentă din nume_cale). Legăturile simbolice pot
traversa sistemele de fişiere. Nu se pot crea legături fixe spre un catalog. Doar
superutilizatorul poate forŃa această operaŃie prin opŃiunea -f (“force” ).
Exemplu. Relativ la structura din figura 2.2.2. ; dacă se tastează:
$cd /home/ilflorea
$ln –s /usr/local/bin/fis myfis
$ls -l myfis
Lrwxrvxrwx 1 ilflorea prof 19 Oct 17 12:02
myfis ->/usr/local/bin/fis
În catalogul gazdă al utilizatorului s-a creat o legătură simbolică, myfis, spre
fişierul /usr/local/bin/fis. Se observă că prin comanda ls –l,
lungimea fişierului myfis este afişată a fi 18, ceea ce corespunde cu numărul de
caractere din numele de cale dat.
Să ne reamintim...
Copierea unui fişier se face cu comanda cp.Cu opŃiunea –r, se face şi copierea
recursivă. Schimbarea numelui (poziŃiei) unui fişier se face cu comanda mv. Sub
sistemele Linux conceptul de partajare a fişierelor de către mai mulŃi utilizatori este
mult mai dezvoltat decât sub alte sisteme de operare; unul dintre conceptele pe care
se sprijină este cel de legătură, prin care un fişier poate fi fiul mai multor directori.
Crearea legăturilor la un fişier se face cu comanda ln.
M2.U2.7. Drepturi de acces
Dacă se tastează comanda ls -l cale, pentru fiecare fişier, după primul caracter
urmează un grup de 9 caractere, care definesc drepturile de acces la fişierul respectiv.
În raport cu un fişier sau director, din punct de vedere al drepturilor, utilizatorii se împart în
trei categorii:
• proprietarul fişierului, notat cu u ( user).
• grupul de utilizatori, notat cu g ( group), cu drepturi specifice, de obicei mai slabe decât
ale proprietarului, dar mai puternice decât ale restului utilizatorilor.
• restul utilizatorilor, notat cu o (others), cei care nu sunt în primele două categorii.
Pentru toŃi utilizatorii se foloseşte notaŃia a (all), echivalentă cu combinaŃia ugo.
Exemplu. Presupunem că avem un fişier cu notele studenŃilor dintr-o anumită
grupă la o disciplină. Proprietarul fişierului este numele de user al profesorului
care a predat disciplina, grupul este format din numele de user ale studenŃilor care
au susŃinut examen la disciplina respectivă.
Fiecare utilizator are asociat un identificator unic UID (User Identification), care este
un număr natural. De asemenea, grupurile de utilizatori se identifică prin numere numite GID-
uri (Group IDentification). Un utilizator aparte, cu drepturi depline asupra tuturor fişierelor
este root sau superuserul. Pentru fiecare categorie de utilizatori, fişierul permite trei drepturi:
(i) dreptul de citire, notat cu r (read)
51
(ii) dreptul de scriere, notat cu w (write) care include crearea de subdirectori, ştergerea de
subdirectori, adăugarea sau ştergerea de intrări în director, modificarea fişierului etc.
(iii)dreptul de execuŃie, notat cu x (execution) care permite lansarea în execuŃie a unui
fişier. Acest drept, conferit unui director, permite accesul în directorul respectiv (cd) .
În consecinŃă, pentru specificarea drepturilor de mai sus asupra unui fişier sau director sunt
necesari 9 biŃi. Reprezentarea externă a acestei configuraŃii se face printr-un grup de 9
caractere rwxrwxrwx,în care absenŃa unuia dintre drepturi la o categorie de utilizatori este
indicată prin - (minus).
Modul de atribuire a acestor drepturi se poate face cu ajutorul comenzii chmod. Cea
mai simplă formă a ei este:chmod mod fisier
unde mod poate fi absolut sau simbolic. În cazul absolut, este un întreg reprezentat în
sistemul de numeraŃie 8. În reprezentare binară, prima grupă de 3 biŃi indică drepturile
proprietarului(user-ului), cea de-a doua indică drepturile grupului, iar cea de-a treia cifră
indică drepturile restului utilizatorilor. Corespunzător unei anumite cifre octale, drepturile
setate sunt prezentate în tabelul 2.2.1. (simbolul – înseamnă că dreptul respectiv nu este
setat).
Număr Permisiune
0 ---
1 --x
2 -w-
3 -wx
4 r--
5 r-x
6 rw-
7 rwx
Tabelul 2.2.1. Codificarea drepturilor în cifre octale
Modul simbolic este o combinaŃie între literele u,g,o,r,w,x şi semnele + (acordarea unui
drept), - (ridicarea unui drept).
Exemple. Comanda:
$chmod 755 fis1
fixează pentru fişierul fis1 din directorul curent, toate drepturile pentru user, de
citire şi execuŃie pentru grup şi ceilalŃi utilizatorii. În urma acestei comenzi,
drepturile asupra fişierului fis1 vor deveni: rwxr-xr-x (în reprezentare
binară 755 este 111101101).
Pentru a se da grupului de utilizatori drepturi de scriere, se tastează:
$chmod g+w fis1
Pentru a se lua grupului de utilizatori drepturile de execuŃie, se tastează:
$chmod g-x fis1
Dacă se dă comanda:
$chmod a-r fis1
se va lua dreptul de citire al tuturor utilizatorilor.
Drepturi implicite. În momentul intrării în sistem, unui utilizator i se vor acorda nişte
drepturi implicite pentru fişiere nou create. Toate fişierele şi directoarele create de utilizator
pe durata sesiunii de lucru îl vor avea ca proprietar, iar drepturile vor fi cele primite implicit.
Fixarea drepturilor implicite sau aflarea valorii acestora se poate face folosind comanda
umask. Drepturile implicite sunt stabilite scăzând (octal) masca definită prin umask din 777.
Pentru a se afla valoarea măştii se lansează comanda umask. Rezultatul este afişarea măştii,
52
de regulă 022. Deci drepturile implicite vor fi: 777-022=755, adică userul are toate drepturile,
iar grupul şi restul vor avea doar drepturi de citire şi de execuŃie.
Exemplu. Dacă se doreşte schimbarea acestei măşti pentru a da userului toate
drepturile, grupului drept de citire şi execuŃie iar restului nici un drept,
(corespunzătoare constantei octale 750), se va da comanda
$umask 027 (777-027=750).
Efectul ei va rămâne valabil până la un nou umask sau până la încheierea
sesiunii.
Să ne reamintim...
Unul dintre conceptele fundamentale în partajarea fişierelor sub Linux, este cel de
acordarea de drepturi privind modul de utilizare al fişierelor. Astfel, se pot seta
drepturi de citire, scriere sau execuŃie pentru proprietarul fişierului, pentru un
anumit grup de utilizatori şi respectiv pentru restul utilizatorilor. Comanda prin
care se pot modifica aceste drepturi este chmod. De asemenea, există comanda
umask prin care se pot stabili drepturi implicite.
53
exemplu.
În căutarea fişierelor se pot folosi şi şabloane şi în acest caz numele de fişier este
specificat între apostroafe.
$find / -name ‘fis*’
listează toate fişierele din sistem al căror nume începe cu caracterele `fis’.
$find / -name ‘fis???’
listează toate fişierele din sistem al căror nume începe cu caracterele `fis’,
urmate de trei caractere oarecare.
$ find /home/ilflorea -name ‘*fis*’
listează toate fişierele din din structura care porneşte din directorul /home/
ilflorea cu textul `fis' inclus în nume.
$find . -regex `.*\(a1\|a2\).*`
listează toate fişierele(inclusiv calea) din structura care porneşte din directorul
curent al căror nume contine şirurile `a1` sau `a2` oriunde în numele lor.
Căutarea fişierelor după dimensiune se face cu opŃiunea -size, urmată de un
număr natural, opŃional precedat de un semn. Avem trei cazuri:
- când este precedat de semnul `+`, rezultatul căutării va fi toate fişierele care au dimensiunea
mai mare decât numărul dat;
- când este precedat de semnul `-`,vor fi selectate toate fişierele a căror dimensiune este mai
mică decât numărul dat;
- când nu este specificat nici un semn rezultatul va consta din toate fişierele care au exact
aceeaşi dimensiune.
Unitatea implicită este blocul de 512 baiŃi; dacă numărul specificat anterior este urmat de
caracterul k, respectiv b atunci unitatea de măsură este kilobaitul, respectiv baitul. Se
foloseşte opŃiunea -empty pentru a se găsi toate fişierele de dimensiune nulă.
Exemple.
$find ~ -size +1000k
va lista toate fişierele din structura care porneşte din directorul gazdă care au mai
mult de 1000 kilobaiŃi.
$find ~ -size -500b
va lista toate fişierele din structura care porneşte din directorul gazdă care au o
dimensiune mai mică de 500 baiŃi
$find / -size 42
va lista toate fişierele din sistem care au o dimensiune de 42 de blocuri a câte 512
baiŃi.
$find ~ -empty
va afişa toate fişierele vide din structura care porneşte din directorul gazdă.
Căutarea fişierelor după momentul modificării. Pentru a găsi fişiere modificate
într-un interval de timp specificat, se folosesc opŃiunile -mtime sau -mmin; argumentul
folosit cu -mtime specifică numărul de zile, pe când cel cu –mmin specifică numărul de
minute.
Exemple.
$find /usr/local -mtime -1
va lista toate fişierele din structura care porneşte din directorul /usr/local
care au fost modificate în ultimele 24 de ore.
$find /usr -mmin 5
va lista toate fişierele din structura care porneşte din directorul /usr care au
fost modificate în ultimele 5 minute.
54
Pentru a specifica un interval de timp, numărul utilizat ca argument, va fi precedat de semnul
+, respectiv -, având semnificaŃia selectării tuturor fişierelor pentru care timpul de la
ultima modificare este mai mare sau egal, respectiv mai mic sau egal decât argumentul
specificat.
Exemple.
$find /usr/local -mtime +1 -2
va afişa toate fişierele din structura care porneşte din directorul/usr/local
care au fost modificate în ultimele 24 de ore.
$find /usr -mmin -5
va lista toate fişierele din structura care porneşte din directorul /usr care au fost
modificate în ultimele 5 minute.
OpŃiunea -daystart va specifica faptul că contorizarea timpului se va face
începând din ziua curentă, în loc de ziua trecută.
Exemple.
$find ~ -mtime 2 -daystart
va lista toate fişierele din structura care porneşte din directorul gazdă care au fost
modificate de acum două zile.
$find /usr -mtime +356 -daystart
va lista toate fişierele din structura care porneşte din /usr care au fost
modificate de cel mult un an.
$find ~ -mtime 2 -mtime -4 -daystart
va lista toate fişierele din structura care porneşte din directorul gazdă, care au fost
modificate acum două până la patru zile. În exemplul precedent, am combinat
opŃiunile -mtime 2 şi -mtime -4.
OpŃiunea -newer va fi folosită pentru a găsi fişierele mai noi decât un fişier dat.
Exemplu.
$find ~ -newer /etc/fis
va lista toate fişierele din structura care porneşte din ~ care au au data de creare
mai recentă decât fişierul /etc/fis.
Pentru a căuta fişiere a căror dată de creare este ulterioară unei date specificate, se va folosi
comanda touch pentru a introduce acea dată într-un fişier, care va fi argument pentu
opŃiunea -newer.
Exemplu.
$touch -t 04012010 /tmp/timestamp
$find ~ -newer /tmp/timestamp
va căuta toate fişierele din structura care porneşte din directorul gazdă care au
fost modificate după 1 aprilie 2010.
OpŃiunea –used este folosită pentru a găsi fişiere accesate după un număr de zile de la
ultima modificare.
Exemplu.
$find ~ -used +100
va căuta fişierele din structura care porneşte din directorul gazdă care au fost
accesate după cel puŃin 100 de zile de la data ultimei modificări.
55
Căutarea fişierelor după proprietar. Cu opŃiunea –user, respectiv –group se pot
căuta fişiere care aparŃin unui anumit utilizator, respectiv unui grup de utilizatori.
Exemplu.
$find /usr/local/fonts -user florea
va lista toate fişierele din structura care porneşte din /usr/local/fonts care
aparŃin utilizatorului florea.
$find ~ -group info
va lista toate fişierele din structura care porneşte din directorul ~ al căror
proprietar este grupul info.
ExecuŃia de comenzi asupra fişierelor căutate se realizează cu opŃiunea -exec care are ca
argument o anumită comandă. Sfârşitul comenzii este marcat de caracterele ‘;’. Dacă se
foloseşte şirul '{}' în cadrul comenzii, acesta este înlocuit cu numele de fişier care a fost
găsit
Exemple.
$find . -name ’’*fis*’’ -exec rm ‘{}’ ‘;’;
va şterge toate fişierele care în numele lor conŃin subşirul fis, situate în
directorul curent sau în subdirectoarele acestuia.
$find ~/html/ -name '*.html' -exec grep linux `{}` `;`
va găsi toate fişierele din structura care porneşte din directorul ~/html/ cu
extensia .html şi va afişa liniile din aceste fişiere care conŃin textul `linux’ .
Pentru a se realiza comanda respectivă cu confirmare, se foloseşte -ok în locul
lui -exec.
$find ~ -used +365 -ok rm `{}` `;`
va găsi toate fişierele din structura care porneşte din directorul gazdă, care au fost
accesate la mai mult de un an de când au fost modificate şi va aştepta
confirmarea înainte de ştergere.
Căutarea fişierelor după tip se face cu opŃiunea -type c ; rezultatul este “true”
dacă tipul fişierului este c, un caracter care poate fi: f - fişier simplu; d - catalog; b - fişier
special bloc; c - fişier special caracter; p - “pipe” (canal) cu nume; s - “socket” (pentru
comunicarea în reŃea).
Exemplu. Pentru a lista numărul fişierelor din structura care porneşte din
directorul gazda se tastează:
$find ~ \! -type d|wc -l
Observăm legarea în pipe a comenzilor şi utilizarea operatorului de negare.
$ find /usr/share -type d | wc –l
va lista numărul directoarelor din structura care porneşte din directorul
/usr/share.
Căutarea fişierelor după mai multe criterii. Se pot combina mai multe opŃiuni
pentru a se găsi fişierele care îndeplinesc criterii multiple.
Exemple.
$find ~ -name 'fis*' -newer /etc/ultmod
va lista fişierele din structura care porneşte din directorul gazdă al căror nume
începe cu şirul `fis’şi care sunt mai noi decât fişierul /etc/ultmod
$find ~ -size +2000000c -regex '.*.[^gz]' -exec gzip
'{}' ';'
va comprima toate fişierele din structura care porneşte din directorul gazdă şi
care au o dimensiune de cel puŃin 2 megabaiŃi şi care nu au fost comprimate
folosind comanda gzip .
56
Alte optiuni:
a) -perm onum - “true” dacă drepturile de acces la fişier corespund exact numărului octal
onum.
b) -print - întotdeauna adevărată, are ca efect afişarea numelui fişierului curent (care
corespunde unui criteriu de căutare anterior specificat);
c) -ls - întotdeauna adevărată, are ca efect afişarea numelui de cale al fişierului curent şi
informaŃii suplimentare despre acesta (analog comenzii ls -li);
d) -prune - întotdeauna adevărată, are ca efect oprirea căutării la numele de cale curent,
dacă acesta este catalog (nu se caută recursiv);
1.ScrieŃi o comandă find care să şteargă toate fişierele din sistem care au fost
create anterior unei date specificate.
2. ScrieŃi o comandă find care să copieze într-un director dat toate fişierele din
structura de directoare şi fişiere a utilizatorului care au o dimensiune mai mare de
10 Mb.
3. ScrieŃi o comandă find care să afişeze numele tuturor fişierelor director din
structura de directoare şi fişiere a utilizatorului.
Să ne reamintim...
Comanda find oferă utilizatorilor sistemelor Linux posibilitatea căutării
fişierelor, într-o anumită structură, pe baza unor argumente exprimate prin opŃiunile
comenzii. Astfel se pot face căutări după numele fişierului, după data creerii, după
dimensiune etc. De asemenea, se pot specifica comenzi care să prelucreze rezultatu
căutării.
1. Prin care opŃiune a comenzii de creare de directoare, atunci când se specifică argumentl o cale,
se crează şi directoarele din calea respectivă:
a) -d c) –p
b) -f d) -r
2. Ştergerea unui catalog vid se face cu comanda:
a) rmd c) rmdir
b) rm d) rmpdir
3. Ştergerea unei structuri de directoare si fişiere, se face cu comanda (opŃiunea):
a) rm (-r) c) rmdir (-r)
b) rmdir (-p) d) rm (-p)
4. Cu ce opŃiune a comenzii ls, listarea se face în ordinea ultimei modificări a modului de acces
la fişier:
a) –a c) -c
b) - r d) -l
5. Care comanda realizeză concatenarea fişierelor:
a) cp c) ct
b) copy d) cat
6. Ce tip de redirectare a intrărilor şi ieşirilor crează o structură specială care este ieşire pentru o
comandă şi intrare pentru altă comandă:
a) Notată cu >>. c) conductă
b) Notată cu &>. d) socket
7. Cum se procedează pentru a nu se afişa mesajul de eroare al unei comenzi:
57
a) se redirectează ieşire c) se redirectează ieşire fişierului
fişierului de erori către de erori către /etc/null
/dev/null
b) se redirectează ieşire d) se redirectează ieşire fişierului
fişierului de erori către de erori către /usr/null
/proc/null
8. Ce sintaxă foloseşte redirectarea în acelaşi timp a lui stderr şi stdout :
a) @> c) $>
b) &> d) #>
9 Argumentul unei comenzi chmod care indică modul de setare a drepturilor, poatefi:
a) o constantă octală formată c) o constantă hexazecimală
din trei cifre formată din trei cifre
b) o constantă zecimalălă d) o constantă binară formată din
formată din trei cifre trei cifre
10. OpŃiunea utilizată în cadrul unei comenzi find, pentru a se căuta fişere numai în
directorul indicat ca argument, este:
a) -local c) -prune
b) -dir d) - proc
58