Sunteți pe pagina 1din 41

1.

Administrarea fi ierelor i directoarelor

3
3.1

ADMINISTRAREA FIIERELOR I DIRECTOARELOR

Introducere

n acest capitol vom prezenta att comenzile de baz ct i comenzi mai avansate utilizate n administrarea fiierelor i directoarelor pe un sistem UNIX. Ne vom concentra asupra utilizrii comenzilor la linia de comand. Cu toate c administrarea fiierelor i directoarelor se poate face i prin utilizarea unei interfee grafice precum GNOME, spre exemplu, exist dou motive suficient de puternice pentru a ne convinge c un bun utilizator UNIX trebuie s tie s foloseasc linia de comand: n primul rnd, linia de comand ofer posibilitatea utilizrii a numeroase opiuni, deci ofer o mai mare flexibilitate; n al doilea rnd, prin intermediul liniei de comand se poate face administrarea pe un sistem aflat la distan, pe care nu putem folosi o interfa grafic (cazul cel mai des ntlnit). 3.2 Funcionaliti ale liniei de comand i comenzi de baz

Cunoaterea utilizrii comenzilor la linia de comand reprezint piatra de baz ce st la temelia cunoaterii sistemului de operare UNIX. Multe dintre instrumentele de management ale sistemului de operare i dintre aplicaiile de configurare a dispozitivelor hardware presupun folosirea liniei de comand. De asemenea, de multe ori este necesar crearea aa numitelor shell-scripturi, programe utilizate de regul pentru automatizarea unor activiti specifice sistemului de operare. Fiierele shell-script sunt compuse din comenzi UNIX i sunt asemntoare cu fiierele de comenzi (batch) utilizate i n alte sisteme de operare pentru reea.

UNIX

3.2.1 Folosirea combinaiilor de control Combinaiile de control sunt utilizate pentru a realiza anumite sarcini specifice, cum ar fi terminarea sau pornirea afirii pe ecran, ieirea din sesiunea de lucru curent, terminarea imprimrii etc. Majoritatea tastaturilor de PC actuale au dou taste de control, inscripionate cu Ctrl i care se gsesc n colurile stnga-jos i dreapta-jos. Atunci cnd apare pe ecran, semnul corespunztor tastei Ctrl este semnul caret (^). Pentru introducerea unei secvene de control, se ine apsat tasta Ctrl i simultan se apas i o alt tast de pe tastatur. Cea mai uzitat secven de control este probabil secvena Ctrl+c, utilizat pentru ntreruperea unui program sau proces ce se afl n execuie. Aceast combinaie apare pentru shell drept ^C i se obine n urma apsrii simultane a tastelor Ctrl i a tastei C. Alte combinaii de control care mai pot fi folosite sunt urmtoarele: Ctrl+s - determin oprirea defilrii informaiei pe ecran. Aceast combinaie poate fi utilizat, spre exemplu, atunci cnd vizualizm cu ajutorul comenzii cat un fiier mai mare pe ecran i dorim oprirea defilrii informaiei pe ecran. Ctrl+q - reia defilarea informaiei pe ecran atunci cnd aceasta a fost ntrerupt cu Ctrl+s. Ctrl+c - ntrerupe activitatea curent i este des folosit pentru oprirea forat a programelor sau proceselor aflate n execuie sau n cazul unor listinguri interminabile pe ecran obinute n urma comenzilor man, cat sau ls. De exemplu, n cazul n care am folosit comanda man i vrem s oprim defilarea n continuare a ecranelor cu paginile de manual (am vzut ceea ce ne interesa i vrem s terminm afiarea), putem folosi Ctrl+c pentru a ne ntoarce la prompter (n acest caz, un rezultat identic se obine prin apsarea tastei q - quit). Ctrl+d - se folosete pentru a marca sfritul de fiier sau ieirea (exit). Aceast combinaie este folosit fie pentru a iei din unele utilitare UNIX (bc, write, etc.), pentru ieirea dintr-o fereastr terminal sau pentru ieirea din sesiunea curent de lucru (logout). Ca o regul general, putem ncerca combinaia Ctrl+d ori de cte ori Ctrl+c nu funcioneaz. Ctrl+u - se folosete pentru tergerea ntregii linii de comand. Se poate folosi n cazul n care dorim s tergem rapid ntreaga linie deoarece ne-am hotrt s nu mai rulm comanda introdus. Ctrl+w - se folosete pentru tergerea ultimului cuvnt de la linia de comand.

Administrarea fiierelor i directoarelor

Ctrl+h - se folosete pentru tergerea ultimului caracter introdus la linia de comand. Se folosete atunci cnd suntem conectai la un sistem la distan i tasta Backspace nu funcioneaz deoarece pe sistemul de la distan aceast tast nu este setat s acioneze precum combinaia Ctrl+h.

3.2.2 Determinarea tipului unui fiier n cazul lucrului cu diverse fiiere este deosebit de util s cunoatem tipul fiierului cu care lucrm. n acest sens, putem folosi: Comanda file Comanda file este folosit pentru a determina tipul unui anumit fiier. Ea difer puin pentru fiecare implementare UNIX. Pentru un sistem UNIX, listingul n cazul unui fiier text va fi:
$ file temp.txt temp.txt: ascii text

n exemplul urmtor avem cazul unui sistem Linux:


$ file serban serban: ASCII text

Alt exemplu consider afiarea tipurilor de fiiere al cror nume ncepe cu litera c din directorul /bin:
/bin $ file c* cat: ELF 32-bit LSB executable 80386 cd: sh commands text chgrp: ELF 32-bit LSB executable 80386 chmod: ELF 32-bit LSB executable 80386 chown: ELF 32-bit LSB executable 80386 chroot:ELF 32-bit LSB executable 80386 cksum: ELF 32-bit LSB executable 80386 clear: Bourne/Korn shell commands text

3.2.3 Vizualizarea fiierelor text Pentru a vizualiza fiiere de tip text (ASCII) vom prezenta n cele ce urmeaz comenzile cat, more, head i tail.

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

Fiierele fisier_1, fisier_2, ..., fisier_n vor fi concatenate ntr-unul singur, fisier_complet. Comanda more Comanda more ofer posibilitatea vizualizrii fiierelor text acestea sunt afiate ecran cu ecran. Exemplu: $ more /etc/passwd Comanda de mai sus afieaz coninutul fiierului /etc/passwd ecran dup ecran. Pentru defilarea liniilor pe ecran se pot folosi: tasta <SPACE> pentru defilarea unui ntreg ecran, tasta <ENTER> pentru defilarea unei singure linii i tasta <q> pentru terminarea afirii. Observaie: Doar acele fiiere care determin defilarea ecranului pot fi editate cu ajutorul editorului standard UNIX, vi (visual editor) n timpul vizualizrii fiierului prin intermediul comenzii more. O alternativ a comenzii more este comanda less, considerat de muli mai performant. Aceast comand este disponibil pe majoritatea distribuiilor Linux i UNIX; conine funcionaliti n plus precum deplasarea napoi. Spre deosebire de comanda more ncepe afiarea fiierului nainte ca acesta s fie ncrcat n ntregime n memorie.

Administrarea fiierelor i directoarelor

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)

n figura 3.1 este prezentat un listing al comenzii head -5 lista (sunt afiate primele 5 linii ale fiierului lista).

Figura 3.1 Exemplu de listing al comenzii head

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)

UNIX

n primul caz sunt afiate ultimele n linii din fiierul specificat, pe cnd n cel de-al doilea caz se pornete afiarea ncepnd cu a n-a linie din fiier, pn la sfrit. n figura 3.2 este prezentat un listing al comenzii tail -5 lista (sunt afiate ultimele 5 linii ale fiierului lista).

Figura 3.2 Exemplu de listing al comenzii tail

3.2.4 Comenzi pentru compararea fiierelor Pentru a vedea dac dou fiiere sunt diferite sau nu putem folosi fie comanda wc, fie comanda diff. Dac specificul comenzii wc este de fapt altul, pentru a vedea ntr-adevr diferenele dintre cele dou fiiere trebuie s utilizm comanda diff. S prezentm n continuare cele dou comenzi. Comanda wc Comanda wc provine de la "word count" i este utilizat pentru a determina numrul de caractere, cuvinte sau linii coninute ntr-un fiier text. De asemenea, comanda mai poate fi utilizat atunci cnd dorim s comparm dou fiiere. Apelat fr opiuni, comanda wc ne ofer informaii despre numrul de linii, cuvinte word, octei din fiierul specificat. Folosind opiunile comenzii, se poate specifica s se afieze doar ce ne intereseaz. Formatul general i opiunile sunt: Opiunile sunt: -l numr liniile $ wc [-optiune] fisier(e) -w numr cuvintele -c numr octeii -m numr caracterele Spre exemplu, comanda wc l /etc/passwd poate afia: 26 passwd, ceea ce nseamn c fiierul /etc/passwd conine 26 de linii. Se pot specifica mai multe fiiere n cadrul comenzii wc, de asemenea se pot folosi i metacaractere. n figura 3.3 este prezentat un alt exemplu unde sunt afiate

Administrarea fiierelor i directoarelor

informaii referitoare la toate fiierele ce ncep cu litera l din directorul curent de lucru, precum i un total al acestor informaii.

Figura 3.3 Exemplu de listing al comenzii wc

Conform exemplului din figura 3.3, fiierul lista conine 17 linii, 90 de cuvinte i 610 octei, fiierul lista1 are 10 linii, 83 de cuvinte i 556 octei iar fiierul lista2 are 7 linii, 7 cuvinte i 54 de octei. n total, cele 3 fiiere nsumeaz 34 de linii, 180 de cuvinte i 1220 de octei. Comanda diff Comanda diff (difference) este utilizat pentru a compara dou fiiere text i a gsi diferenele dintre acestea. Formatul general al comenzii este:
$ diff [optiune] fisier1 fisier2

Opiunile acestei comenzi sunt: -i ignor diferenele ntre litere mari i litere mici (B este totuna cu b etc.); -c ofer o comparare detaliat i produce un listing pe larg a diferenelor, ncepnd cu identificarea fiierelor i datele de creare a respectivelor fiiere.

UNIX

Figura 3.4 Exemplu pentru comanda diff

Folosit cu opiunea -c, comanda diff afieaz informaiile detaliate ale celor dou fiiere, apoi o linie cu asterisk-uri (*) i liniile din fiierul fisier1, cu un semn minus (-) n faa liniilor ce difer de fisier2. Acelai format de afiare este valabil i pentru fisier2, cu semnul + n faa liniilor diferite fa de cele din fisier1. n figura 3.4 avem un exemplu de afiare detaliat pentru comanda diff, utilizat cu opiunea -c. Este afiat coninutul celor dou fiiere cu ajutorul comenzii cat, apoi listingul comenzii diff. Observaie. Dac nu exist diferene ntre cele dou fiiere (dac cele dou fiiere sunt identice) atunci comanda diff nu va afia nimic.

Administrarea fiierelor i directoarelor

3.2.5 Comenzi de creare i tergere pentru fiiere i directoare nainte de a descrie modalitatea de creare i tergere a fiierelor i directoarelor n UNIX, s reamintim regulile de stabilire a numelor pentru fiiere i directoare. Acestea sunt: Lungimea maxim a numelui unui fiier sau director nu poate depi 255 de caractere (cu toate acestea, numele prea lungi nu sunt recomandate); Se recomand utilizarea caracterelor alfanumerice mpreun cu dou caractere non-alfanumerice: liniua de unire (semnul minus -) i liniua de subliniere (caracterul underscore _ ); Se pot utiliza i alte caractere non-alfanumerice, dar nu este recomandat; Numele de fiiere conin de regul i o extensie, dar pot avea i mai multe extensii. Numele directoarelor nu au de regul extensii, dar acest lucru nu este interzis.

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

Cu ajutorul comenzii touch se pot crea chiar mai multe fiiere simultan, avnd n vedere c uneori trebuie s existe un anumit fiier nainte de a aduga informaii n el. Comanda touch poate fi utilizat i pentru a actualiza data i ora ultimului acces la fiier, care va reseta bitul archive, fcnd posibil din nou backup-ul (utilitarele de backup analizeaz de regul bitul archive pentru a actualiza copia fiierului respectiv sau nu). n figura 3.5 avem un exemplu prin care am creat 5 fiiere cu comanda touch. Dac fiierele respective nu exist, comanda touch le va crea, dac exist, va fi modificat doar data i ora timpului de acces/modificare.

UNIX

Figura 3.5 Exemplu de utilizare a comenzii touch

Crearea directoarelor n UNIX putem crea directoare cu ajutorul comenzii mkdir. Sintaxa comenzii este urmtoarea:
$ mkdir dir1 dir2 dirX

Cu ajutorul comenzii mkdir se pot crea chiar mai multe directoare simultan, cu condiia s avem drepturi (de acces) pentru a crea directoarele respective. n caz contrar, vom primi un mesaj de eroare de genul:
$ mkdir /usr/Test mkdir: Failed to make directory /usr/Test; Permission denied

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

Considernd alt exemplu, comanda


$ mkdir p /home/razvan/temp/seminar_unix

creeaz un nou director intitulat /home/razvan/temp/seminar_unix, precum i toate directoarele intermediare necesare. Spre exemplu, dac exist doar directorul /home/razvan, atunci vor fi create directoarele temp (ca subdirector al directorului /home/razvan) i seminar_unix (ca subdirector al directorului /home/razvan/temp).

Administrarea fiierelor i directoarelor

tergerea fiierelor n UNIX putem terge fiiere cu ajutorul comenzii rm. Sintaxa comenzii este urmtoarea:
$ rm [-i] fisier(e)

Fiierele terse prin comanda rm sunt permanent terse, fr a exista posibilitatea recuperrii (doar cnd folosim o interfa grafic recuperarea mai este posibil), deci trebuie s fim ateni cum folosim aceast comand. Prin utilizarea opiunii -i avem posibilitatea de a fi atenionai nainte de tergerea fiierelor. Exemple:
$ rm student.txt $ rm stud1 stud2 stud3 $ rm -r TEMP

Se terge fiierul student.txt Se terg fiierele stud1, stud2 i stud3 Se terge directorul TEMP, mpreun cu tot coninutul su

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

Figura 3.6 Mesaj de eroare n cazul ncercrii de tergere a unui director care nu este gol cu comanda rmdir

UNIX

Pentru a terge directoare care nu sunt goale, trebuie s utilizm comanda rm -r, astfel:
$ rm -r [i] dir1 dir2 dirX

3.2.6 Comenzi de copiere, redenumire, mutare i redirectare Copierea fiierelor Copierea fiierelor i directoarelor se face cu ajutorul comenzii cp. O operaie uzual este aceea de copiere a unui fiier. Spre exemplu, dac trebuie modificat un fiier, vom face o copie de siguran a acestuia apoi vom face modificrile necesare. Dac dorim s ne ntoarcem la versiunea anterioar a fiierului, putem folosi copia fcut mai nainte. De regul, putem copia un fiier n dou moduri: fie l copiem n acelai director cu alt nume, fie l copiem n alt director cu acelai nume (putem s specificm i un nume diferit, totui). Pentru a copia fiierul n acelai director vom folosi comanda:
$ cp [-i] fis_sursa fis_destinatie

unde fis_sursa este numele fiierului surs iar fis_destinatie reprezint noul nume. n exemplul din figura 3.7 este copiat fiierul student cu noul nume student.bak. Am obinut n acest mod o copie a fiierului student.

Figura 3.7 Fiierul student este copiat cu noul nume student.bak n directorul curent

Pentru a copia un fiier n alt director (pstrnd acelai nume pentru fiier) vom folosi comanda:
$ cp [-i] fis_sursa dir_destinatie

Administrarea fiierelor i directoarelor

unde fis_sursa este numele fiierului surs iar dir_destinatie reprezint numele directorului destinaie. n acest caz numele fiierului se pstreaz, ns se poate specifica i alt nume. Comanda:
$ cp razvan temp

va copia fiierul razvan n subdirectorul temp (dac acesta exist). De asemenea, comanda:
$ cp /usr/razvan/student

va copia fiierul student din directorul /usr/razvan n directorul curent, iar


$ cp /usr/razvan/student /usr/serban

va copia fiierul student din directorul /usr/razvan n directorul /usr/serban. Comanda cp poate fi, de asemenea, folosit mpreun cu metacaracterele * i ? pentru a se copia mai multe fiiere deodat. Spre exemplu, n figura 3.8 se copiaz toate fiierele al cror nume ncepe cu litera l n subdirectorul temp.

Figura 3.8 Toate fiierele al cror nume ncep cu l sunt copiate n subdirectorul temp

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.

UNIX

Figura 3.9 Utilizarea comenzii cp cu opiunea -i pentru prevenirea tergerii accidentale a fiierelor

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

unde dir_sursa este numele directorului surs iar dir_destinatie este numele directorului destinaie. n figura 3.10 este prezentat un exemplu de copiere a unui director folosind comanda cp -r.

Figura 3.10 Utilizarea comenzii cp -r pentru copierea unui director

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

Administrarea fiierelor i directoarelor

unde fis_sursa este numele vechi al fiierului iar fis_destinatie este noul nume al fiierului. Dac directorul este acelai att pentru surs ct i pentru destinaie, este vorba despre o redenumire; dac directoarele difer, avem de-a face cu o mutare a fiierului dintr-un director n altul. n figura 3.11 avem un exemplu de redenumire: fiierul lista este redenumit n lista_nou.

Figura 3.11 Redenumirea fiierului lista n lista_nou

Pentru a muta un fiier n alt director, vom folosi urmtoarea sintax:


$ mv [-i] fis_sursa dir_destinatie

unde se specific numele fiierului surs (fis_sursa) i numele directorului destinaie (dir_destinatie). n figura 3.12 fiierul lista2 este mutat n directorul temp.

Figura 3.12 Mutarea fiierului lista2 din directorul curent n subdirectorul temp

Redenumirea directoarelor Redenumirea unui director se face astfel:


$ mv [-i] dir_sursa dir_destinatie

UNIX

unde dir_sursa reprezint vechiul nume al directorului iar dir_destinatie este noul numele al directorului. n figura 3.13 avem un exemplu de redenumire a unui subdirector n cadrul aceluiai director (dir1 este redenumit n dir_nou).

Figura 3.13 Redenumirea unui subdirector n cadrul aceluiai director

n figura 3.14 este considerat un exemplu n care subdirectorul nu este redenumit n cadrul aceluiai director, ci este mutat n alt director (directorul dir_nou este mutat n directorul temp).

Figura 3.14 Mutarea unui subdirector n alt director

Alte exemple:
$ mv student.txt student.doc

Se redenumete fiierul student.txt cu noul nume student.doc

Administrarea fiierelor i directoarelor

$ mv student 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

$ mv student /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.

Figura 3.15 Exemplu de utilizare a comenzii mv -i

Redirectarea intrrilor i ieirilor Sistemul de operare UNIX ofer o facilitate deosebit de util de redirectare a intrrilor sau/i ieirilor unei comenzi. Toate operaiile ce se desfoar ntr-un computer au intrri i/sau ieiri. De exemplu, tastatura reprezint fiierul standard de intrare (denumit stdin) iar monitorul (ecranul) reprezint fiierul standard de ieire (denumit stdout). Toate comenzile UNIX au un fiier standard de intrare (input) i un fiier standard de ieire (output). Intrarea este, de regul, tastatura iar ieirea este, de regul, ecranul monitorului. Cu ajutorul operatorilor de redirectare se pot schimba ns aceste setri implicite. Redirectarea ieirii se face utiliznd operatorul >, redirectarea intrrii se face cu ajutorul operatorului < iar redirectarea erorilor (mesajelor de eroare obinute n urma rulrii unor comenzi) se face prin utilizarea combinaiei 2>. n continuare este prezentat formatul general al redirectrii. Fiierul aflat dup simbolul de redirectare poate fi un fiier text sau un fiier asociat unui dispozitiv (fiier device), avnd n vedere c n UNIX toate dispozitivele sunt definite sub form de fiiere. Spre exemplu, ecranul

UNIX

monitorului este referit de fiierul /dev/console, unitatea de floppy disc este referit de /dev/fd iar imprimanta de /dev/lp. Formatul general pentru redirectare este:
$ comanda simbol_redirectare fisier

unde comanda este numele comenzii, simbol_redirectare este unul dintre simbolurile de redirectare existente iar fisier este numele unui fiier text sau numele unui fiier generic asociat unui dispozitiv UNIX. Redirectarea intrrii Conform formatului general de mai sus, pentru redirectarea intrrii unei comenzi vom folosi urmtoarea sintax:
$ comanda < nume_fisier

Un exemplu de utilizare al redirectrii intrrii este:


$ mail serban < lista

n care utilizatorului serban i se trimite prin email coninutul fiierului lista. Redirectarea ieirii Redirectarea ieirii unei comenzi determin crearea unui nou fiier n modul urmtor:
$ comanda > nume_fisier

Un exemplu de utilizare al redirectrii ieirii este:


$ ls > lista

n care este creat fiierul lista ce conine ieirea comenzii ls. Exemplul este prezentat i n figura 3.16.

Administrarea fiierelor i directoarelor

Figura 3.16 Exemplu de redirectare a ieirii

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

Se creeaz un nou fiier sau se suprascrie peste cel existent.

n exemplul din figura 3.17 am redirectat erorile n fiierul eroare, care este afiat n continuare. Eroarea provine din faptul c am ncercat s copiem un director cu comanda cp fr opiunea -r.

Figura 3.17 Exemplu de redirectare a erorilor

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

Comanda anterioar creaz un link pentru fiierul fisier n directorul curent, cu numele fisier_nou; pentru crearea unei legturi n alt director dect cel curent, vom folosi formatul:
$ ln fisier director/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.

Administrarea fiierelor i directoarelor

Figura 3.18 Exemplu de creare a unei legturi cu comanda ln

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 Comenzi legate de hard discuri i partiii

n ultimii ani hard discurile au devenit deosebit de ncptoare astfel nct majoritatea sistemelor de operare le pot administra cu relativ uurin. Majoritatea sistemelor de fiiere existente au o dimensiune minim a fiierelor i un numr maxim de fiiere i/sau directoare ce pot fi stocate pe un dispozitiv fizic, ceea ce vine n contradicie cu dimensiunile din ce n ce mai mari ale hard discurilor. Pentru a rezolva aceast problem, sistemele de operare moderne ofer posibilitatea mpririi discului fizic n mai multe discuri virtuale ce se numesc partiii. i sistemele de operare Windows i Macintosh ofer posibilitatea de partiionare logic a discurilor, cu toate c, pentru sistemele desktop (la care aceste dou sisteme de operare sunt folosite cu predilecie) aceast facilitate (i, pe de alt parte, protecie) nu este att de imperioas ca n cazul unui sistem utilizat pe post de server ntr-o reea. Lucrurile stau diferit n lumea UNIX fa de cea Windows; astfel, ntr-un sistem UNIX pot exista sute de discuri virtuale (transparent fa de utilizatorul obinuit) iar directorul home se poate afla pe dou sau trei partiii diferite. Unul dintre motivele acestei strategii UNIX este acela c programele ce ruleaz au deseori tendina de a lsa n urma lor fiiere de tip log (iniializare) sau temp (temporare) care pot umple n mod inutil spaiul liber de pe hard disc. Mai mult ns, trebuie s avem o grij deosebit cnd este vorba despre spaiul liber de pe hard disc deoarece sistemul de operare UNIX i diminueaz considerabil performanele atunci cnd duce lips de spaiu liber. n acest sens trebuie avute permanent n vedere dimensiunile partiiilor, fiierele

UNIX

de dimensiuni mari i modalitatea de control al acestora nainte de a deveni o problem pentru sistemul de operare. Pentru controlul asupra gradului de ocupare a sistemului de fiiere putem utiliza comenzile df, du i dfspace. Comanda df Comanda df provine de la disk free i este utilizat pentru a determina mrimea spaiului liber de pe disc. Exemple: # df Simplul apel al comenzii df va afia spaiul liber (blocuri i i-noduri) pentru toate sistemele de fiiere montate. Chiar i acest apel al comenzii ne ofer o serie de informaii utile:
Filesystem /dev/sda5 /dev/sda1 /dev/sda3 none /dev/sdb1 /dev/sdb2 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

Formatul folosit aici este mai inteligibil: putem vedea cu uurin c att /home ct i /usr au un spaiu neutilizat de cte 20 GB!. Spre deosebire de alte variante UNIX, Solaris 8 are o comand df ce ne ofer informaii foarte diferite de output-ul de mai sus. Comanda df se

Administrarea fiierelor i directoarelor

concentreaz mai degrab asupra fiierelor i a sistemului de fiiere dect asupra discurilor i a spaiului utilizat de pe acestea:
# df / (/dev/dsk/c0d0s0 ): 827600 blocks 276355 files /boot (/dev/dsk/c0d0p0:boot): 17584 blocks -1 files /proc (/proc ): 0 blocks 1888 files /dev/fd (fd ): 0 blocks 0 files /etc/mnttab (mnttab ): 0 blocks 0 files /var/run (swap ): 1179992 blocks 21263 files /tmp (swap ): 1179992 blocks 21263 files /export/home (/dev/dsk/c0d0s7 ): 4590890 blocks 387772 files

n acest caz este mai greu de observat ce se ntmpl; putem observa ns c informaiile prezentate sunt, n ordine, urmtoarele: punctul de montare, identificatorul dispozitivului, dimensiunea acestuia n blocuri de cte 1KB i numrul de fiiere existente pe acel dispozitiv. Din acest listing nu ne putem da seama ns care este procentul de spaiu ocupat pe disc din total; aceast comand apelat fr nici o opiune nu ne ofer informaii foarte importante din punct de vedere al administratorului. Exist ns opiunea t (totals), care ofer un listing mai relevant i informaii utile unui administrator de sistem:
# df -t / /boot /proc /dev/fd /etc/mnttab /var/run /tmp /export/home (/dev/dsk/c0d0s0 ): 827600 blocks 276355 files total: 2539116 blocks 320128 files (/dev/dsk/c0d0p0:boot): 17584 blocks -1 files total: 20969 blocks -1 files (/proc ): 0 blocks 1888 files total: 0 blocks 1932 files (fd ): 0 blocks 0 files total: 0 blocks 258 files (mnttab ): 0 blocks 0 files total: 0 blocks 1 files (swap ): 1180000 blocks 21263 files total: 1180008 blocks 21279 files (swap ): 1180000 blocks 21263 files total: 1180024 blocks 21279 files (/dev/dsk/c0d0s7 ): 4590890 blocks 387772 files total: 4590908 blocks 387776 files

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.

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 .

Administrarea fiierelor i directoarelor

Prima valoare de pe fiecare linie reprezint dimensiunea fiecrui director. Aceast dimensiune nsumeaz dimensiunile tuturor fiierelor i subdirectoarelor din acel director. Astfel, directorul Lynx are dimensiunea de 13974, incluznd subdirectorul Lynx/src (6848) care, la rndul su conine subdirectorul Lynx/src/chrtrans de dimensiune 1110. Ultima linie reprezint dimensiunea total nsumat a fiierelor, directoarelor i subdirectoarelor: 28484. Care este unitatea de msur? Din pcate, aceasta depinde de implementare; de exemplu, n cazul Linux Red Hat 7.2, pagina de manual pentru comanda du ne arat c unitatea de msur nu este explicit specificat! Exist, din fericire opiunea k care ne permite afiarea dimensiunilor n blocuri de cte 1KB, deci liniile urmtoare: # du k | tail 1 28474 . ne lmurete c este vorba despre 28474 KB, deci aproximativ 27,8 MB (28474 / 1024). 3.4 Cutarea fiierelor pe disc

n momentul cnd dorim s cutm un fiier pe disc este foarte util comanda find. Comanda find este una dintre cele mai puternice comenzi ale sistemului de operare UNIX. Sintaxa de baz a comenzii este:
$ find cale_de_cautare criteriu_de_cautare [comanda]

Comanda find poate fi folosit pentru a cuta fiiere pe hard discurile locale sau chiar i pe sisteme la distan. Deoarece operaia de cutare poate solicita destul de mult procesorul, trebuie s ncercm s ncepem cutarea din directorul ct mai apropiat de fiier; doar n cazul n care nu avem nici un indiciu legat de posibila localizare a fiierului vom ncepe cutarea din rrcin ( / ). Putem face cutri ale fiierelor UNIX folosind mai multe criterii de cutare printre care: numele parial sau ntreg al fiierului, dimensiune, dat, drepturi de acces, dreptul de proprietate, etc. Calea de cutare specificat n comand (conform formatului general de mai sus) poate fi semnul special tilda (~) ce n UNIX reprezint directorul home al utilizatorului curent, punctul ( . ) ce reprezint directorul curent sau o cale ntreag de directoare, relativ sau absolut. Ultimul parametru al comenzii find l reprezint comenzi opionale ce pot fi inserate la sfrit.

UNIX

n mod implicit, opiunile de cutare sunt tratate ca o cerere i, astfel nct toate expresiile introduse trebuie s fie prezente (adevrate). De asemenea, poate fi folosit opiunea -o (or) ntre expresii pentru a specifica criterii de cutare de tip sau care sunt adevrate dac cel puin unul dintre criterii este adevrat. Majoritatea expresiilor de cutare necesit o valoare ce trebuie gsit i uneori sunt folosite metacaracterele n cadrul argumentelor comenzii. Tabelul 3.19 ne nfieaz cteva expresii de cutare; aceste expresii sunt evaluate de ctre comanda find ca fiind false sau adevrate. Criterii de cutare pentru comanda find
Tabelul 3.19
Expresia name nume_fisier type tip_fisier mtime [+|-]n Semnificaie Cutare dup nume Cutare dup tip Cutare dup data/ora ultimei modificri Cutare dup data/ora ultimului acces la fiier Cutare dup permisiuni de acces 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).

atime [+|-]n

perm mod

size [+|-]n[c]

Prezentm n continuare cteva exemple:


$ find / -name ls -print

$ find / -name seminar_unix\ -type f -print $ find /usr -name hello -type\ f -print

Se caut ncepnd din rdcin dup nume fiierul ls i se va afia rezultatul cutrii (-print) Se caut din rdcin fiierul cu numele seminar_unix. Dac este gsit, se va afia pe ecran locaia sa Se caut ncepnd din directorul usr dup nume fiierul hello i se va afia rezultatul cutrii

Administrarea fiierelor i directoarelor

$ find /usr -name sem*\ -type f -print $ find ~ -name *gif\ -type f -print

Se caut din directorul usr toate fiierele al cror nume ncepe cu sem. Se caut plecnd din directorul home toate fiierele al cror nume se termin cu gif.

n figura 3.20 este prezentat alt exemplu. Se apeleaz comanda find fr nici un argument, fapt ce determin afiarea fiierelor din directorul curent, apoi se caut ncepnd cu directorul curent fiierele al cror nume se termin n .bak, care apoi se terg, folosindu-se opiunea interactiv ok.

Figura 3.20 Exemplu mai complex de utilizare a comenzii find

n figura 3.21 este prezentat alt exemplu n care se caut ncepnd cu directorul curent fiierele deinute de un anumit utilizator (daemon) i se execut comanda ls care este ns redirectat ntr-un fiier (daemon_files) pentru a fi accesat mai trziu. Comanda urmtoare:
$ find . -name rc.conf -exec chmod o+r {} \;

va cuta n directorul curent i toate subdirectoarele sale toate fiierele cu numele rc.conf pentru care va executa comanda chmod o+r.

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

Aceast comand va cuta n directorul /usr/src precum i n toate subdirectoarele acestuia toate fiierele, cu excepia celor de forma a* i a.*. Argumentele implicate aici sunt: -not semnific negarea expresiei ce urmeaz \( semnific nceputul unei expresii complexe \) semnific sfritul unei expresii complexe -o semnific o operaie de sau logic ntr-o expresie complex

Figura 3.21 Alt exemplu de utilizare a comenzii find

Comanda urmtoare:
$ find . -exec grep infocib.ase.ro {} \; -print

Administrarea fiierelor i directoarelor

va cuta n directorul curent i n toate subdirectoarele sale i va afia toate fiierele ce conin irul de caractere specificat (infocib.ase.ro). Aceast comand poate fi util n cazul n care dorim s modificm irul de caractere specificat cu alt ir de caractere pentru toate fiierele dintr-un director (spre exemplu, putem modifica infocib.ase.ro cu www.infocib.ase.ro). n acest caz vom redirecta ieirea ctre o comand sed pentru nlocuirea irului de caractere. 3.5 Cutarea irurilor de caractere n fiiere

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

unde sir_caractere reprezint irul de caractere cutat iar nume_fisier fiierul n care se va face cutarea. Vom prezenta n continuare cteva exemple de utilizare a comenzii grep:
$ grep razvan /etc/passwd

Aceast comand caut toate apariiile irului de caractere "razvan" n fiierul "/etc/passwd". Toate liniile ce conin acest ir de caractere vor fi afiate pe ecran.
$ grep stud *

UNIX

Aceast comand caut toate apariiile irului de caractere "stud" n toate fiierele din directorul curent. Se poate folosi astfel comanda grep n cazurile n care cutm un fiier al crui nume l-am uitat dar tim un ir de caractere coninut de acel fiier. De asemenea, putem specifica opiunea -n pentru a afia i numrul liniei pe care se afl irul de caractere cutat. Cunoscnd numrul liniei, putem apoi cu un editor de texte s deschidem fiierul respectiv pentru editare la linia respectiv. n figura 3.22 se caut irul de caractere test n fiierele din directorul curent. Se gsete fiierul lista, ce conine pe linia 11 irul de caractere cutat.

Figura 3.22 Utilizarea comenzii grep cu opiunea -n

Comanda grep poate fi folosit pentru a cuta iruri de caractere ce corespund unor abloane. Metacaracterele ce pot fi utilizate n acest caz sunt:
. (punctul) * (asterisc) Acioneaz pe post de orice caracter i poate fi utilizat de mai multe ori Este folosit pentru zero, unul sau mai multe caractere Este folosit pentru a specifica nceputul liniei (se utilizeaz cnd se dorete afiarea liniilor care ncep cu un anumit ir de caractere) Este folosit pentru a specifica sfritul liniei (se utilizeaz cnd se dorete afiarea liniilor care se termin cu un anumit ir de caractere) Este folosit pentru a specifica shell-ului s trateze urmtorul caracter special dup \ n mod normal Verific apariia unei secvene de caractere din domeniul specificat

^ (caret) $ (dolar) \ (backslash) [] (paranteze ptrate)

Administrarea fiierelor i directoarelor

n figura 3.23 avem un exemplu n care comanda grep este conectat prin pipe comenzii ls:

Figura 3.23 Conectarea comenzii grep prin pipe comenzii ls

Rezultatul comenzii de mai sus va fi afiarea directoarelor din directorul curent, avnd n vedere c n listingul comenzii ls -l, caracterul d la nceput specific faptul c fiierul respectiv este director. 3.6 Sortarea fiierelor

n UNIX exist posibilitatea de sortare a liniilor unui fiier sau a ieirii unei comenzi folosind comanda sort. Comanda sort Comanda sort ofer o modalitate rapid de organizare a datelor n ordine alfabetic sau numeric. Comanda sort utilizeaz setul de caractere ASCII drept ordine de sortare, analiznd cuvintele (irurile de caractere) de la stnga la dreapta, caracter cu caracter. Comanda sort poate face sortarea pe mai multe nivele, sau pe anumite cmpuri, avnd intrare standard i oferind ieire standard. Sintaxa general a comenzii este urmtoarea:

$ sort [optiuni] [fisier_intrare]

UNIX

n continuare sunt prezentate cteva opiuni ce pot fi folosite cu comanda sort:


-n (+|-)n

Permite o sortare numeric ncepe (+) sau se termin (-) cu cmpul ce urmeaz dup al n-lea separator. Separatorul implicit este spaiul Inverseaz ordinea de sortare Utilizat pentru a ignora diferena ntre litere mari i litere mici n acest caz se utilizeaz ordinea de dicionar; sunt comparate doar literele, cifrele i caracterele white spaces iar toate celelalte simboluri sunt ignorate Sorteaz primele trei caractere ale cmpului drept prescurtri ale numelor lunilor anului Rezultatul comenzii va fi stocat n fiierul specificat de nume_fisier, n loc s fie afiat pe ecran

-r -f

-d +nM -o nume_fisier

n exemplul din figura 3.24 se folosete comanda sort pentru a realiza o sortare invers, numeric, dup alt cmp dect cel implicit (primul). Rezultatul comenzii este afiarea fiierelor al cror nume ncepe cu litera e n ordine descresctoare a dimensiunii lor.

Figura 3.24 Exemplu de utilizare a comenzii sort

Administrarea fiierelor i directoarelor

3.7

Arhivarea i compresia fiierelor

3.7.1 Comanda tar Comanda tar (tape archive) poate fi folosit pentru crearea de arhive pe suporturi magnetice (benzi sau discuri). Poate fi folosit, de asemenea, pentru crearea arhivelor de uz general pentru transferul fiierelor n reele, Internet, etc. Comanda tar poate fi utilizat i pentru crearea de copii de siguran pentru fiiere, fiind o comand standard pentru toate versiunile de UNIX. Dezvoltat iniial pentru lucrul cu arhive pe band magnetic, comanda tar poate copia ns fiiere oriunde (hard disc, floppy disc sau alte uniti de stocare externe). Comanda tar poate crea o arhiv a unui singur fiier, dar ea este, de regul, folosit pentru arhivarea de directoare ntregi ntr-un singur fiier care va fi folosit mai trziu dac este cazul. Observaie. Comanda tar nu asigur i compresia fiierelor n timp ce creeaz arhiva (precum utilitarele winzip, pkzip, winrar, arj, ace, etc. pentru PC). Cele mai ntlnite opiuni ale comenzii tar sunt c, t i x. Spre deosebire de majoritatea comenzilor UNIX, aceste opiuni nu trebuie neaprat precedate de semnul minus (-). Sintaxa general a comenzii este urmtoarea:
$ tar functie [modificator] [fis_iesire] nume_fis |nume_dir

Funciile comenzii tar sunt urmtoarele: c (create) - este utilizat pentru a crea o arhiv dintr-un singur fiier sau director sau din mai multe fiiere sau directoare; t (table of contents) - este utilizat pentru a vedea un tabel cu coninutul arhivei. Acest tabel reprezint un listing cu fiierele ce compun fiierul arhiv de tip tar; x (extract) - este utilizat pentru a extrage fiiere dintr-o arhiv i a le separa din nou. Fiierul arhiv tar exist i dup aceast extragere. Cei mai utilizai modificatori ai funciilor sunt: f (file) - permite specificarea unui fiier tar pentru creare (c), extragere (x) sau vizualizarea tabelei de coninut (t); v (verbose) - execut comanda n modul vorbre care permite s vedem rezultatele detaliate ale comenzii tar pe msur ce aceasta ruleaz.

UNIX

Prezentm n continuare cteva exemple:


$ tar cvf /dev/rct0 /home

Comanda anterioar va crea o arhiv de tip tar pe dispozitivul /dev/rct0 (band magnetic), copiind toate fiierele i subdirectoarele din directorul /home.
$ tar cvf /dev/fd0 /home/razvan

Aceast comand va crea o arhiv tar pe discheta /dev/fd0, copiind toate fiierele i subdirectoarele din directorul /home/razvan.
$ tar cvf /tmp/home.tar /home

Comanda anterioar va crea o arhiv de tip tar n fiierul /tmp/home.tar, copiind tot coninutul directorului /home.
$ tar tvf dir.tar

Aceast comand permite vizualizarea tabelului cu coninut al arhivei specificate, n modul verbose, ce afieaz n detaliu caracteristicile fiierelor, printre care drepturile de acces i dimensiunea. n figura 3.25 este prezentat listingul obinut n urma execuiei comenzii anterioare. 3.7.2 Comanda compress O operaie frecvent pe un sistem UNIX este aceea de a arhiva fiierele care nu au fost folosite o perioad ndelungat de timp i apoi a le compresa pentru a reduce spaiul ocupat pe hard disc. n acest sens, se poate folosi comanda compress. Toate fiierele, inclusiv cele arhivate cu comanda tar, pot fi compresate (sau comprimate). Operaia de compresie (comprimare) a fiierelor este o operaie deosebit de util deoarece reduce spaiul ocupat pe hard disc i n acelai timp face ca fiierele comprimate s fie disponibile pentru o utilizare ulterioar.

Administrarea fiierelor i directoarelor

Compresia fiierelor pe un sistem UNIX poate reduce dimensiunea unui fiier cu 20% pn 80%, n funcie de tipul fiierului. Dac utilitarul de compresie ajunge la concluzia c fiierul nu poate fi comprimat sau nu exist nici o reducere n dimensiune a fiierului, atunci fiierul va rmne nemodificat. Fiierele comprimate cu comanda compress sunt nlocuite cu un fiier cu acelai nume cu cel original, dar care are extensia .Z (atenie, litera mare Z). Comanda compress ofer posibilitatea compresiei mai multor fiiere o dat, precum i folosirea metacaracterelor pentru specificarea mai multor fiiere. Prezentm n continuare cteva exemple:
$ compress /tmp/home.tar

Aceast comand comprim fiierul /tmp/home.tar, nlocuindu-l cu un fiier denumit /tmp/home.tar.Z.

Figura 3.25 Exemplu de utilizare a comenzii tar


$ compress -v install.log

UNIX

Aceast comand este apelat cu opiunea verbose i va afia numele fiierului de intrare (install.log), numele fiierului de ieire (install.log.Z) precum i procentul de compresie obinut. Observaie. Fiierele comprimate sunt considerate fiiere binare, de aceea coninutul lor nu poate fi vizualizat folosind comenzile cat sau more. 3.7.3 Decompresia fiierelor Fiierele compresate pot fi aduse n starea iniial comprimrii prin utilizarea comenzii duale comenzii compress, uncompress. Deoarece fiierele comprimate nu pot fi utilizate sub aceast form, ele trebuie aduse n starea de dinaintea comprimrii, operaia purtnd numele de decomprimare sau decompresare. Formatul general al comenzii uncompress este urmtorul:
$ uncompress [optiuni] nume_fisier

unde se pot specifica anumite opiuni i numele fiierului (nume_fisier) pe care vrem s l decompresm. Nu este neaprat necesar s specificm extensia .Z, avnd n vedere c aceast comand caut automat fiierul cu extensia implicit .Z. De asemenea, se pot decompresa mai multe fiiere o dat, folosind metacaracterele * i ?. Pentru a vizualiza coninutul unui fiier comprimat fr a face efectiv decomprimarea, se poate folosi opiunea -c. De exemplu, pentru a vizualiza coninutul unui fiier comprimat cu numele install.log.Z putem folosi comanda (am utilizat comanda more pentru cazul n care fiierul decomprimat va aprea pe mai multe ecrane):
$ uncompress -c install.log.Z | more

3.7.4 Comanda jar Comanda jar (Java archive) este asemntoare cu comanda tar, dar nglobeaz i compresia fiierului ntr-un singur pas. Fiierele arhivate sunt compresate prin intermediul aplicaiei Java jar ntr-o arhiv de acest tip. Utilitarul jar reprezint un instrument de arhivare bazat pe formatele de compresie zip i zlib. Comanda jar este o comand standard pentru sistemul de operare Solaris dar este disponibil pe orice sistem ce are instalat maina

Administrarea fiierelor i directoarelor

virtual Java (JVM - Java Virtual Machine). Sintaxa general a comenzii este foarte asemntoare cu aceea a comenzii tar. Opiunile disponibile pentru comanda jar sunt urmtoarele:
c t x F V

Creeaz o nou arhiv jar Listeaz coninutul fiierului jar Extrage fiierele specificate din arhiva jar Specific fiierul jar magnetic (/dev/rmt/x) (/tmp/fisier.jar) sau banda

Specific execuia n modul verbose 3.7.5 Alte utilitare pentru compresie

Exist o sumedenie de utilitare pentru compresie/decompresie ce pot fi folosite pe UNIX. Cele mai populare sunt utilitarele gzip, gunzip i gzcat (ce deriv din proiectul GNU i sunt disponibile pe majoritatea versiunilor de UNIX). Exist, de asemenea, i programele zip i unzip (similare variantelor pentru Windows) care pot fi utilizate pentru compresia, respectiv decompresia fiierelor. Prezentm n continuare utilitarele gzip, gunzip i gzcat. Comanda gzip Sintaxa general a comenzii este:
$ gzip [-acdfhlLnNqrtvV19] [-S sufix] [nume_fisier ...]

Utilitarul gzip folosete algoritmul de compresie Lernel-Ziv (LZ77) pentru a reduce dimensiunea fiierelor specificate n comand. Pentru fiecare fiier specificat, fiierul original este ters i nlocuit cu varianta sa compresat ce are acelai nume cu fiierul original cruia i se adaug extensia .gz. Fiierul compresat are aceleai proprieti referitoare la modurile de acces, permisiuni, data/ora de acces, data/ora ultimei modificri, precum fiierul original. Atunci cnd nu se specific numele unui fiier pentru a fi compresat, gzip citete de la intrarea standard, compreseaz i afieaz la ieirea standard.

UNIX

Pentru decompresie, se pot folosi comenzile gzip -d, gunzip sau gzcat. Atunci cnd decompresia se face (cu gzip -d sau gunzip) pe un alt sistem de fiiere dect cel iniial, exist posibilitatea ca numele original al fiierului s fie un nume invalid pentru noul sistem de fiiere. n acest caz, utilitarul de decompresie creeaz un fiier cu un nume valid pentru noul sistem de fiiere. Comanda gunzip Programul gunzip citete fiecare fiier ce ncepe cu numele specificat i are o extensie de tipul .gz, .z, .Z, .bz2, apoi terge fiierul i l nlocuiete cu varianta decomprimat a fiierului, nlturndu-i extensia. Sintaxa general pentru gunzip este:
$ gunzip [-acfhlLnNqrtvV] [-S sufix] [nume_fisier ...]

De asemenea, comanda gunzip recunoate i extensiile .tgz i .taz ca prescurtri ale extensiilor .tar.gz i .tar.Z. Aceste dou extensii sunt folosite de gzip atunci cnd fiierele comprimate au extensia .tar. n plus, gunzip poate decomprima fiiere comprimate cu alte comenzi, precum: zip, compress, compress -H, pack sau mkszip, recunoscnd automat tehnica de compresie folosit. Exist ns o serie de limitri la decompresie; de exemplu, fiierele comprimate cu zip pot fi decomprimate doar dac ele conin un singur fiier care a fost comprimat cu metoda deflation. n caz contrar, trebuie folosit utilitarul unzip pentru decompresie. Comanda gzcat Programul gzcat are un comportament asemntor comenzii gunzip -c. Acest program poate decompresa fiierele specificate la linia de comand, fie, dac nu sunt specificate fiiere (sau n loc de numele fiierelor apare liniua -), intrarea este standard input. Sintaxa general pentru gzcat este:

$ gzcat -fhLV [nume_fisier...]

Algoritmul (Lempel-Ziv) de compresie utilizat de gzip este identic cu cel folosit de utilitarele zip i pkzip. Procentul de compresie depinde de tipul fiierului comprimat, dar de regul este superior celui obinut de comanda compress ce folosete metoda LZW sau de comanda pack ce folosete

Administrarea fiierelor i directoarelor

metoda de compresie Huffman. Din punct de vedere al vitezei de execuie, gzip --fast este similar cu comanda compress. gzip modific (l comprim) fiierul specificat, chiar dac rezultatul are o dimensiune mai mare dect fiierul iniial. Semnificaia opiunile comenzilor gzip, gunzip i gzcat sunt prezentate n tabelul 3.26. Opiuni pentru comanda gzip
Opiunea -a (--ascii) 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

-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)

UNIX

Exemple Putem determina dimensiunea fiierului necomprimat cu o comand de genul:


$ gzcat fisier.Z | wc -c

Atunci cnd utilizm opiunea -l n conjuncie cu opiunea -v, se afieaz informaii complete, de genul:
method: -metoda de compresie folosit crc: -crc-ul pe 32 de bii pentru datele necompresate date/time -data i ora fiierului necompresat

Cu ajutorul comenzii gzcat putem citi un fiier compresat cu gzip fr a realiza efectiv decompresia, ca n exemplul urmtor:
$ gzcat carte cap1 cap2 cap3

Compresia mai multor fiiere Putem concatena mai multe fiiere comprimate. n acest caz, gunzip va extrage toate fiierele din fiierul rezultat prin concatenare. De exemplu:
$ gzip -c fisier1 > fiscat.gz $ gzip -c fisier2 >> fiscat.gz

Dup crearea fiierului comprimat fiscat.gz, comanda:


$ gunzip -c fiscat.gz

Administrarea fiierelor i directoarelor

este echivalent cu:


$ cat fisier1 fisier2

Dac unul dintre fiierele cu extensia .gz sunt stricate, celelalte fiiere pot fi recuperate (fiierul stricat este nlturat). Putem mbunti nivelul de compresie prin comprimarea tuturor fiierelor mpreun, n loc de a le comprima individual i apoi concatena rezultatele. De exemplu:
$ cat fisier1 fisier2 | gzip > fiscat.gz

ne va oferi o mai bun compresie dect n cazul:


$ gzip -c fisier1 fisier2 > fiscat.gz