Sunteți pe pagina 1din 21

2 SISTEMUL DE FIŞIERE UNIX

ŞI COMENZI

2.1 Generalităţi

Sistemul de fişiere reprezintă o construcţie logică ce oferă


posibilitatea stocării şi regăsirii informaţiei ce se află pe un dispozitiv de
stocare cu acces aleator. Un sistem de fişiere este parte integrantă a
sistemului de operare şi este format din fişiere, directoare precum şi
informaţii necesare pentru localizarea şi accesul acestora. Sistemul de fişiere
UNIX ordonează şi grupează din punct de vedere logic fişierele într-o
manieră eficientă, prin cuprinderea acestora în directoare ce sunt
asemănătoare dosarelor ce conţin mai multe documente.
UNIX posedă un sistem de fişiere ierarhic, cu o structură
arborescentă multi-nivel ce pleacă de la directorul rădăcină (root),
simbolizată prin caracterul „/” (slash), putând de fapt să fie suportate mai
multe sisteme de fişiere simultan pe acelaşi disc. Fiecare disc este divizat în
porţiuni (partiţii) ce pot găzdui un sistem de fişiere, un domeniu de swap sau
un domeniu de date speciale.
Directorul Reprezintă nivelul cel mai de sus din sistemul de
"root" fişiere şi este simbolizat de caracterul "/" (slash).
Nu poate exista decât un singur director root
într-un sistem de fişiere UNIX.
În UNIX fişierele sunt interpretate sub forma unor şiruri de octeţi;
astfel, cu toate că o aplicaţie face o cerere pentru un fişier cu o structură
specială, nucleul stochează acel fişier pe disc ca o simplă secvenţă de octeţi,
organizând fişierele în directoare. Funcţia de bază a sistemului de fişiere
este aceea de a oferi servicii de fişiere aplicaţiilor respective fără ca acestea
să fie preocupate de structura specială de stocare hardware.
Un fişier reprezintă un şir de octeţi ce aparţine unui director.
Conceptual, un fişier UNIX este precum un document îndosariat (dosarul
este directorul din care face parte). Fişierul poate stoca informaţii diverse:
text, grafică, video, sunet, imagine etc. Orice fişier din sistem are un nume;
UNIX

lungimea numelor de fişiere UNIX este în general limitată la 255 de


caractere. Caracterele valide sunt: orice caracter alfabetic, numeric, liniuţa
de subliniere underscore ( _ ) şi punctul (.). Nu se folosesc spaţii în numele
fişierelor, precum şi următoarele caractere speciale:
! " ` ' ; / \ $ * & < > ( ) | { } [ ] ~.
Directorul este un caz particular de fişier ce arată ca un cuprins de
carte. El conţine două coloane de informaţie - numerele inode ale fişierelor
şi numele fişierelor. Fiecare director conţine o referinţă către el însuşi
(identificat prin semnul „.”) şi către directorul părinte (identificat prin „..”).
Chiar şi directorul rădăcină – root – conţine o referinţă către directorul
părinte, care în acest caz este o referinţă către el însuşi. Directoarele pot
conţine subdirectoare şi fişiere. La rândul lor, subdirectoarele pot conţine
alte subdirectoare şi alte fişiere. Orice sistem de operare posedă o anumită
modalitate de structură a directoarelor pentru organizarea informaţiei pe
hard-disc; în UNIX un director se numeşte directory, iar în Windows şi
MacOS un director se numeşte folder, având însă aceeaşi semnificaţie.
Chiar dacă detaliile sistemului de fişiere pot diferi în funcţie de tipul
sistemului, următoarele componente sunt comune pentru majoritatea
sistemelor de fişiere:
Blocul de boot • Aici se află procedurile de boot
Super-blocul • Conţine mărimea şi starea sistemului de fişiere
• Informaţiile inode (numărul total alocat, total liber,
numerele inodurilor libere)
• O copie a acestuia se află în memorie şi una
pe hard-disc
Tabela de inoduri • Tipul şi permisiuni
• Numărul de hard link-uri
• UID pentru proprietar
• GID pentru proprietar
• Dimensiunea în bytes
• Indicatorii dată şi timp (creare, ultima accesare
şi ultima modificare)
• Adresele de bloc de pe disc
Blocurile de stocare • Blocuri de date
• Fişiere obişnuite - conţinut
• Fişiere director – nume de fişiere şi numerele
inodurilor

O caracteristică aparte a sistemului de fişiere UNIX o constituie


legăturile. O legătură (link) reprezintă o posibilitate a unui fişier sau de
Sistemul de fişiere UNIX şi comenzi

acces la acesta prin mai multe nume. O legătură este, de fapt, o intrare
într-un director ce face redirectarea spre un fişier stocat în alt director sau
chiar spre un întreg alt director.
Directorul root are o serie de subdirectoare (ce diferă în funcţie de
implementarea UNIX), printre care cele mai importante sunt, de regulă:
"bin", "dev", "etc", "opt", "lib","mnt", "tmp","home" şi "usr".
Aceste directoare au următorul conţinut:

/bin Comenzi UNIX


/dev Director pentru dispozitive speciale
/etc Programe şi fişiere de date suplimentare
/lib Directorul bibliotecii de programe C
/mnt Directorul mount; rezervat pentru montarea sistemelor de
fişiere
/opt Conţine aşa numitele „software storage objects” (SSO's)
/tmp Director temporar
/usr Conţine rutine utilizator
/var Fişiere obiect nepartajate
/home Directorul utilizatorilor sistemului

Unele dintre directoarele UNIX sunt mai „interesante” decât altele;


existenţa şi conţinutul acestor directoare depinde de varianta de UNIX
utilizată. Nu există practic reguli foarte stricte cu privire la localizarea
fişierelor. Spre exemplu, pentru a găsi anumite fişiere sistem binare, putem
căuta într-unul din directoarele: /bin, /usr/bin, /sbin, /usr/sbin şi chiar în /etc.
Fişierele binare moştenite se pot găsi în /usr/ucb sau /usr/bsd. Alte
fişiere executabile se pot găsi în alte locuri din structura de directoare. Şi
legăturile simbolice trebuie considerate cu atenţie; directorul /home poate fi
definit ca având propriul sistem de fişiere (montat separat) sau poate fi
definit ca subdirector al rădăcinii. Pe serverele Solaris, spre exemplu, el este
găsit ca subdirector al directorului /export; de regulă, acest director conţine
directoarele home ale utilizatorilor existenţi în sistem.
Spaţiul dedicat stocărilor temporare este localizat, de regulă, în
directorul /tmp. Acest director poate fi accesat pe majoritatea sistemelor ca
/tmp, /usr/tmp sau /var/tmp. Două dintre cele trei referinţe vor fi directoare
reale iar cea de-a treia va fi o legătură simbolică (symlink) către una din
primele două. Varianta de UNIX utilizată va influenţa care dintre aceste
referinţe este legătura simbolică. Se recomandă totuşi ca aceste directoare să
UNIX

fie reconfigurate astfel încât o singură referinţă să fie un director real, iar
celelalte două să fie legături simbolice către acest director. Mai mult, acest
director se recomandă a fi montat separat. Deoarece utilizatorii pot scrie
fişiere de dimensiuni mari în spaţiul temporar /tmp, montarea separată
asigură protecţia directoarelor „/” şi „/usr” faţă de umplerea cu fişiere
temporare. O regulă general valabilă în acest sens este aceea că utilizatorii
nu trebuie să aibă drept de creare şi ştergere de fişiere în locaţiile „/”
şi „/usr”.
Directorul /tmp trebuie să aibă permisiuni de acces 1777, nu 777.
Dreptul de acces 777 permite ca orice utilizator să aibă drepturi depline în
directorul /tmp, în timp ce 1777 setează aşa-numitul „sticky bit” ce
înseamnă că directorul poate fi modificat sau şters doar de către proprietar.
Directorul /usr poate fi montat separat sau poate fi subdirector al lui
„/”. Subdirectoarele sale pot fi:
ƒ bin – fişiere binare
ƒ include – fişiere pentru programare
ƒ lib – biblioteci de programe
ƒ local – pachete software locale, biblioteci, fişiere include, fişiere
binare (de regulă /usr/local se montează separat pentru a nu
umple directorul /usr).
ƒ sbin – fişiere de sistem binare
ƒ share – informaţie partajată, inclusiv pagini de manual.
Directorul /var poate fi montat separat (ceea ce este recomandat) sau
poate fi subdirector al lui „/” sau „/usr”. Subdirectoarele sale pot fi:
ƒ adm – stocare fişiere log (Solaris)
ƒ crash – diagnostic în situaţii de oprire bruscă
ƒ log – stocare fişiere log (Solaris şi Linux Red Hat)
ƒ mail – zona de stocare pentru poşta electronică
ƒ spool – zona de spool pentru printare, utilitarul cron şi alte servicii
ƒ yp – zona de stocare pentru fişierul de configurare NIS.

2.2 Partiţii
Partiţiile reprezintă modalitatea de organizare a spaţiului de pe disc
la nivel jos. Partiţiile sunt independente de sistemul de operare; un sistem de
operare solid recunoaşte diviziunile la nivel jos de pe disc şi adresează
fiecare partiţie ca pe un echipament logic separat.
Sistemul de fişiere UNIX şi comenzi

Toate informaţiile cu privire la partiţii sunt localizate în aşa-numita


tabelă de partiţii (partition table), stocată în eticheta de disc sau în header-ul
de volum (volume header) al discului fizic. Aceasta este modalitatea prin
care discurile păstrează propriile informaţii referitoare la modalitatea de
aranjare a datelor şi de aceea ele pot fi transferate de la un calculator la altul
fără riscul pierderii informaţiei. De asemenea, partiţiile permit existenţa mai
multor sisteme de operare pe acelaşi calculator, instalate în partiţii diferite.
Iniţial, exista o corespondenţă strictă între partiţii şi sistemele de fişiere,
partiţiile fiind considerate drept containere pentru sistemele de fişiere.
Acum un sistem de fişiere se poate întinde pe mai multe partiţii prin
utilizarea volumelor logice, astfel încât partiţiile pot fi considerate elemente
de bază pentru stocarea informaţiei în loc de a fi interpretate drept simple
containere.
Deoarece partiţiile sunt diviziuni la nivel hardware ale discurilor, ele
pot oferi o protecţie la nivel jos împotriva supra-încărcării. Utilizându-se
anumite politici de partiţionare, unele dintre partiţii pot fi supra-încărcate
fără a afecta performanţele generale ale sistemului; în orice caz, umplerea
unei partiţii nu are cum să afecteze spaţiul altei partiţii.
2.3 Spaţiul de swap
Toate varietăţile de UNIX necesită minimum două partiţii: partiţia
de root (/) şi partiţia pentru swap. În cazul (destul de puţin întâlnit în
practică) în care există doar aceste două partiţii, partiţia / va conţine întregul
sistem de operare, aplicaţiile, fişierele de configurare, conturile locale ale
utilizatorilor, etc. Spaţiul de swap sau, pe scurt, swap, permite accesul direct
al sistemului de operare la spaţiul brut de pe disc, fără implicarea sistemului
de fişiere. Swap-ul a fost construit pentru a acţiona ca o extensie a memoriei
principale (RAM – Random Access Memory) a calculatorului, permiţând,
prin implementarea mecanismului memoriei virtuale, accesul la o cantitate
de memorie ce nu este limitată de capacitatea memoriei RAM ci de spaţiul
liber de pe disc.
Principalele mecanisme utilizate de către sistemul de operare pentru
a accesa spaţiul de swap sunt paginarea (paging) şi interschimbarea
(swapping). Spaţiul liniar al memoriei unui calculator este limitat iar o parte
din acesta este rezervat pentru stocarea unor programe ce rămân rezidente în
memorie (sistemul de operare, tabelele de paginare, etc.) pentru a fi accesate
rapid când este nevoie de ele. De asemenea, multe procese şi obiecte
program nu necesită prezenţa permanentă în memorie ca în cazul
programelor rezidente. Atunci când sistemul de operare găseşte un astfel de
proces, se caută modalităţi de înlocuire a lui cu altul ce trebuie executat şi
deci încărcat în memorie.
UNIX

Procedeul de interschimbare sau swapping este unul dintre


mecanismele utilizate de către sistemul de operare pentru a administra
alocarea memoriei. Atunci când un proces este interschimbat, el este copiat
din memorie în spaţiul de swap împreună cu toate datele asociate şi alte
informaţii de stare. În acest fel, porţiunea din memorie alocată procesului
devine liberă şi poate fi utilizată pentru a stoca alt proces (program). În
momentul în care este nevoie din nou de procesul aflat în swap, acesta este
transferat rapid din swap în memoria principală pentru a fi executat. În
esenţă, procedeul de swapping constă în transferul unui proces din memorie
în spaţiul de swap şi viceversa. Atunci când procedeul de swapping este
intens utilizat înseamnă că sistemul are nevoie de resurse hardware
suplimentare (de regulă mai multă memorie RAM).
Paginarea utilizează, de asemenea, spaţiul de swap. Spre deosebire
de procedeul de interschimbare, care stochează împreună cu procesul şi o
serie întreagă de informaţii legate de starea procesului, paginarea stochează
doar porţiuni ale codului executabil al unui proces. Paginarea reprezintă o
metodă obişnuită de administrare a memoriei de către sistemul de operare,
metodă în care acesta determină în prealabil dimensiunea segmentelor de
memorie (denumite pagini) ce pot fi menţinute în memoria principală.
Referitor la spaţiul de swap, unele variante de UNIX depind mult de
acest spaţiu. Solaris-ul firmei Sun foloseşte spaţiul de swap pentru directorul
/tmp în mod implicit.
2.4 Tipuri de fişiere
Principalele tipuri de fişiere existente pe un sistem UNIX sunt:
ƒ Fişiere text
ƒ Fişiere de date
ƒ Fişiere sursă (ce conţin codul sursă al unor programe)
ƒ Fişiere executabile
ƒ Programe shell
ƒ Fişiere legătură
ƒ Fişiere asociate unor dispozitive

a) Fişiere text
Cel mai simplu tip de fişiere îl constituie fişierul text, ce conţine
doar caractere ca acelea pe care le puteţi citi în cadrul acestui capitol. Aceste
caractere ASCII (American Standard Code for Information Interchange)
sunt literale sau caractere numerice ce reprezintă manifestarea muncii pe
Sistemul de fişiere UNIX şi comenzi

care o facem. Dacă utilizăm, spre exemplu, un editor UNIX pentru a crea un
mesaj pentru poşta electronică atunci creăm un fişier text în cele mai multe
dintre cazuri. Avem în continuare un exemplu de fişier ASCII de pe un
sistem Linux:

:.Z: : :/bin/compress -d -c
%s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
: : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
: : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
: : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
: : :.tar.Z:/bin/tar -c -Z -f -
%s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
: : :.tar.gz:/bin/tar -c -z -f -
%s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP

b) Fişiere de date
Fişierele de date sunt fişierele ce conţin date utilizate de diverse
aplicaţii de pe sistem. Dacă utilizăm un program de tipul FrameMaker
pentru scrierea unei cărţi, fişierele create cu acest program vor fi de tipul
suportat de acesta (la fel ca şi fişierele speciale de date de pe un sistem
Windows). Fişierele de date conţin pe lângă informaţia în sine (de tip text)
şi informaţii speciale de formatare. Acelaşi lucru se petrece şi în cazul unui
fişier bază de date, ce conţine atât date ce pot fi citite cât şi informaţii
specifice formatării respective.
c) Fişiere cod sursă
Fişierele cod sursă sunt fişiere ce conţin date scrise într-un limbaj de
programare precum C, C++, Java, Pascal, Fortran etc. Aceste fişiere au, de
regulă, extensii conforme cu limbajul în care au fost scrise; spre exemplu,
un program sursă scris în C va avea extensia „.c”.
d) Fişiere executabile
Fişierele executabile reprezintă programe obţinute cu ajutorul unui
compilator (sau interpretor) şi editor de legături ce pot fi rulate (executate).
Dacă încercăm să citim un fişier executabil ca pe un fişier text, vom obţine o
serie de caractere ciudate şi chiar sunete; în urma unei astfel de „citiri” se
pot pierde setările ecranului. Majoritatea comenzilor UNIX sunt programe
executabile (vezi directorul /bin).
UNIX

e) Programe de tip shell


Un fişier de tip shell este atât un fişier text cât şi un fişier ce poate fi
rulat. El conţine linii text ce reprezintă instrucţiuni legate de programarea
shell; de regulă, prima linie din program este o linie ce începe cu secvenţa
de caractere “#!” şi precizează tipul de shell utilizat. De exemplu, linia:
#!/bin/sh

specifică faptul că se utilizează shell-ul Bourne care este shell-ul


clasic pentru un sistem UNIX. În general, caracterul “#” reprezintă
modalitatea de inserare a comentariilor în program; astfel, tot ce urmează
după “#” şi până la sfârşitul liniei este considerat comentariu.
f) Fişiere de tip legătură
Un fişier legătură (link) este o referinţă către un fişier stocat în altă
locaţie în sistem. În loc să avem două sau mai multe copii ale unui fişier pe
disc, putem crea o legătură către un fişier deja existent pe sistem. Un mod
deosebit de utilizare a legăturilor pe un sistem UNIX a fost acela legat de
apariţia unei noi versiuni a sistemului de operare. Cum locaţiile fişierelor se
modifică uneori la apariţia unei noi versiuni a sistemului de operare, se
folosesc legături de la locaţiile vechi către cele noi în loc de a învăţa noile
locaţii. În momentul utilizării unei comenzi folosind vechea locaţie, legătura
face referire la comanda ce acum se află în alt loc pe disc.
g) Fişiere asociate unor dispozitive
Fişierele asociate unor dispozitive, denumite în UNIX “device
special files”(sau, pe scurt, fişiere device) conţin informaţii legate de
componente hardware ale calculatorului şi sunt fişiere speciale cu referire
(de regulă) la funcţii de administrare a sistemului. Sistemul de operare
UNIX tratează dispozitivele hardware ca fişiere, avantajul acestei metode de
administrare fiind acela că permite accesul la disc precum o simplă operaţie
de acces (Input/Output) la un fişier. Dispozitivele instalate pe computer pot
fi accesate prin intermediul unor astfel de fişiere speciale. Discul, spre
exemplu, poate fi accesat fie printr-un fişier de tip bloc, fie printr-unul de tip
caracter.
Sistemul de fişiere UNIX şi comenzi

Semnificaţia subdirectoarelor din /dev la Solaris


Tabelul 2.1

Directorul Descriere
/dev/cua Director pentru dispozitive seriale
/dev/dsk Director pentru dispozitive de tip bloc
(hard-discuri, CD-ROM-uri, etc.)
/dev/fd Director pentru unităţi floppy

/dev/kmem Director pentru memoria virtuală kernel


/dev/log Director socket către login-ul sistem
/dev/mem Dispozitiv pentru memoria fizică
/dev/null Dispozitivul „null”
/dev/pts Pseudo-terminale
/dev/rdsk Director pentru echipamente device de tip
caracter
/dev/rmt Director pentru medii de stocare movibile
– bandă magnetică
/dev/swap Spaţiul de swap
/dev/tty Director pentru linii terminal
/dev/zero Sursă „null byte”

Fişierele device de tip caracter sunt cel mai des folosite pentru
proceduri de copiere de octeţi (ca în cazul comenzii dd). Majoritatea
echipamentelor de bandă au asociate doar fişiere device de tip caracter.
Fişierele device de tip bloc sunt utilizate pentru transferul de date în blocuri
de octeţi, ceea ce este mai avantajos şi mai rapid pentru majoritatea
aplicaţiilor. Pentru varianta de UNIX Solaris, hard-discurile au asociate atât
un fişier device de tip caracter cât şi unul de tip bloc. Fiecare dintre acestea
sunt folosite în cazuri diferite. Operaţiile uzuale se fac prin intermediul
fişierelor bloc, însă crearea sistemului de fişiere se face cu ajutorul fişierelor
caracter.
Toate fişierele device standard UNIX sunt păstrate în directorul /dev
(unele implementări de Linux Red Hat păstrează acest sistem). În varianta
UNIX Solaris şi în unele noi implementări de Red Hat însă, conţinutul lui
/dev tinde să fie o combinaţie de fişiere device şi de legături simbolice către
fişiere device situate în alte directoare. Într-un astfel de sistem, directorul
UNIX

/dev acţionează ca un redirector organizaţional. În Red Hat directorul se


numeşte /devfs iar sub Solaris se intitulează /devices. Fişierele şi directoarele
din directorul /dev variază foarte mult, chiar între versiuni ale aceleiaşi
variante de sistem de operare. În tabelul 2.1 sunt prezentate o serie dintre
subdirectoarele reprezentative pentru /dev întâlnite la Solaris.
În continuare vom prezenta câteva comenzi de bază referitoare la
manipularea fişierelor şi directoarelor pe un sistem UNIX.
2.5 Comenzi referitoare la fişiere şi directoare
Pentru a putea naviga în cadrul sistemului de fişiere trebuie să
cunoaştem în principiu două comenzi: prima comandă (pwd) afişează
localizarea curentă (directorul în care ne aflăm la un moment dat) iar cea de-
a doua comandă (cd) este utilizată pentru a schimba directorul curent. Să
vedem mai întâi care este sintaxa generală a unei comenzi UNIX.
În momentul în care suntem conectaţi la sistem sau atunci când
folosim o fereastră terminal, pe acran apare un prompter. În cazul
shell-urilor Bourne şi Korn, prompterul este semnul dolar ($) pentru un
utilizator obişnuit şi semnul diez (#) pentru utilizatorul root. În cazul
shell-ului C, semnul special pentru prompter pentru un utilizator obişnuit
este semnul procent (%). Odată cu apariţia prompterului, putem introduce
comenzi la linia de comandă. Formatul general al unei comenzi UNIX este:

$ comanda [optiune(optiuni)] [argument(e)]

În formatul general de mai sus, identificăm următoarele componente:


semnul dolar $ reprezintă prompterul shell, comanda reprezintă programul
executabil, optiune/optiuni identifică posibilitatea modificării programului
executabil pentru a rula în condiţii specifice iar argument/argumente
reprezintă fişier (fişiere) sau director (directoare), inclusiv cu calea către
fişierul sau directorul specificat, sau un text. Separarea acestor componente
se face prin semnul spaţiu; pe o singură linie putem introduce până la 256 de
caractere (nu se recomandă, desigur, folosirea unui număr atât de mare de
caractere pe o singură linie). Toate comenzile UNIX sunt scrise cu litere
mici. Opţiunile sunt formate din litere precedate de semnul liniuţă sau minus
(-). Se pot combina mai multe opţiuni folosind un singur semn minus.
Opţiunile pot fi atât litere mici cât şi litere mari, în funcţie de comandă. Nu
toate comenzile necesită toate cele 3 componente. Se pot scrie mai multe
comenzi pe aceeaşi linie, separate de caracterul punct şi virgulă (;).
Principala comandă de navigare în cadrul sistemului de fişiere UNIX
este cd (change directory). O altă comandă folosită pentru a afla directorul
curent este pwd (print working directory).
Sistemul de fişiere UNIX şi comenzi

Comanda pwd este des utilizată pentru a ne reaminti directorul în


care ne alfăm la un moment dat (directorul curent). Comanda pwd este
folosită fără opţiuni si fără argumente; trebuie doar să tastăm pwd la linia de
comandă şi să apăsăm tasta ENTER. Presupunând că ne aflăm în directorul
/home/serban/test, vom obţine următorul răspuns al comenzii pwd:
$ pwd
/home/serban/test

Modificarea directorului curent şi navigarea în cadrul structurii


sistemului de fişiere şi directoare se face utilizând comanda cd (change
directory). Această comandă acceptă ca argument atât căi relative cât şi căi
absolute. Sintaxa generală a acestei comenzi este:

$ cd [nume_director]

Exemple:

$ cd /tmp

Schimbă directorul curent în directorul /tmp, acest director devenind


directorul curent, iar:

$ cd /usr/stud

Schimbă directorul curent în directorul /usr/stud.

Observaţie:
Există două modalităţi de referire a unei căi în structura de fişiere
UNIX: calea absolută şi calea relativă. O cale absolută este aceea care
pleacă din rădăcină, deci începe cu "/". Un exemplu de cale absolută este:
/usr/bin. O cale relativă nu începe cu "/", ci reprezintă o localizare relativă la
directorul curent de lucru. Căile ce încep cu „../”, „./” sau altceva diferit de
„/” sunt căi relative. Căile relative au avantajul că sunt mai scurte decât căile
absolute; pentru a le utiliza însă, trebuie să cunoaştem directorul în care ne
aflăm deoarece acesta este punctul de plecare al căii relative.
Un exemplu de cale relativă întâlnim în exemplul următor:
$ cd ../../bin
UNIX

Uneori este mai uşor să utilizăm meta-caractere. În UNIX, caracterul


star (*) este un caracter special (meta-caracter) şi semnifică orice combinaţie
de caractere. Spre exemplu, comanda "cd /u*/s*" ne poziţionează în
directorul /usr/stud dacă acest director este singurul ce corespunde
şablonului specificat. Mai multe noţiuni despre meta-caractere vor fi
prezentate în cadrul capitolului curent.
Alte exemple:
$ cd

Comanda cd apelată fără nici un argument ne poziţionează în


directorul home.

$ cd ..

Această comandă ne poziţionează în directorul părinte al directorului


curent (cu un nivel mai sus în structura arborescentă de directoare).
$ cd ~

Această comandă ne poziţionează în directorul home.

$ cd ~-

Dacă se foloseşte shell-ul Korn, această comandă ne poziţionează în


directorul anterior de lucru.

$ cd ~nume_utilizator

Această comandă ne poziţionează în directorul home al utilizatorului


identificat prin nume_utilizator.

Listarea conţinutului unui director

Comanda ls (list) este folosită pentru listarea fişierelor şi


directoarelor, cu informaţii despre acestea. Comanda ls apelată simplu, fără
opţiuni, listează fişierele din directorul curent. Fişierele ale căror nume
încep cu "." sunt considerate fişiere ascunse şi nu vor fi afişate în acest caz.
Fişierele ascunse sunt, de regulă, folosite pentru a personaliza mediul de
lucru al unui utilizator. Aceste fişiere nu sunt implicit afişate deoarece nu
sunt editate frecvent. Directorul curent (.) şi directorul părinte (..) sunt şi ele
ascunse şi nu sunt afişate deoarece încep cu semnul punct (.).
Sistemul de fişiere UNIX şi comenzi

Comanda ls are o serie întreagă de opţiuni, fiind una dintre cele mai
folositoare şi flexibile comenzi UNIX.

Exemple:

$ ls -a

Această comandă este folosită pentru a afişa toate fişierele, inclusiv


cele ascunse.

$ ls -l

Această comandă ne oferă un "listing lung", adică informaţii


suplimentare legate de fişiere (nu numai numele acestora). Aceste informaţii
cuprind date referitoare la drepturile de acces la fişiere, proprietarul şi
grupul cărora aparţin, dimensiune, data şi ora ultimei modificări.
drwxr-xr-x 2 root sys 60676 Aug 22 1994 Lib
-r--r--r-- 1 root sys 60676 Aug 22 1994 README
drwxr-xr-x 2 root sys 60676 Aug 22 1994 Source
-rwxr-xr-x 2 root sys 60676 Aug 22 1994 gzexe
-rwxr-xr-x 2 root sys 60676 Aug 22 1994 gzip
-rwxr-xr-x 1 bin bin 242436 Feb 20 16:07 httpd
-rwsr-xr-x 1 uucp uucp 599604 Sep 22 1995 kermit
-rwxr-x--x 1 root sys 171195 Jan 22 12:15 memhog
-rwxr-x--x 1 root sys 5599 Jan 22 12:15 nlsym
-rwxr-xr-x 2 root sys 553836 Feb 20 16:40 perl
-rwxr-xr-x 2 root sys 553836 Feb 20 16:40 perl5.003
-rwxr-xr-x 1 root sys 13855 Feb 20 16:40 perlbug
-rwxr-xr-x 1 root sys 8984 Feb 20 16:40 perldoc
drwxr-xr-x 2 root sys 60676 Aug 22 1994 src
-rwxr-x--x 1 root sys 108781 Jan 22 12:15 u486mon

Figura 2.2 Exemplu de listare generat de comanda ls -l


UNIX

Funcţionalităţile celor două opţiuni de mai sus pot fi combinate


folosind comanda ls -al. În figura 2.2 avem un exemplu de listare a fişierelor
dintr-un director.
Alte exemple:

$ ls -al /tmp

Se poate specifica în mod explicit directorul pentru care să se facă


listarea. Astfel, comanda anterioară va lista fişierele conţinute în directorul
tmp.

$ ls -alR /usr | more

Comanda anterioară va lista informaţiile despre fişierele din


directorul /usr, precum şi din toate subdirectoarele acestuia. Opţiunea care
determină acest lucru este -R. Un exemplu de listing pentru comanda ls -alR
este prezentat în figura 2.3. Comanda more precizează că afişarea se va face
pagină cu pagină.

Figura 2.3 Exemplu de listing al comenzii ls -alR

$ ls -ld /usr
Sistemul de fişiere UNIX şi comenzi

Comanda anterioară listează informaţii despre însăşi directorul /usr


şi nu despre conţinutul acestuia. Aceste informaţiii sunt utile atunci când
vrem să verificăm drepturile de acces la un director.
În fiecare linie din listingul comenzii ls –al (ca cel din figura 2.2),
primul caracter reprezintă tipul fişierului (d pentru director, - pentru fişier
simplu, l pentru fişier legătură, etc.). Următoarele 9 caractere reprezintă
drepturile de acces la fişier pentru utilizatorul care este proprietarul
fişierului, pentru grupul din care face parte proprietarul şi pentru ceilalţi
utilizatori (în această ordine).

$ ls -F

Figura 2.4 Listing al comenzii ls -F

Această comandă afişează informaţii legate de tipul fişierelor. Dacă


fişierul afişat este director, numele acestuia este urmat de semnul slash (/).
Dacă fişierul este un fişier simplu ASCII, fără format special, nu apare nici
un simbol special după numele acestuia. În cazul unei aplicaţii, comenzi sau
fişier script ce poate fi executat, numele fişierului este urmat de caracterul
asterisk (*).
Dacă numele fişierului este urmat de simbolul at (@) înseamnă că
acest fişier este o legătură simbolică. În figura 2.4 avem un exemplu de
listing pentru comanda ls -F.
UNIX

Drepturile de acces la fişiere şi directoare

d r w x r w x r w x

d r w x r w - r - -

- r w x r - - r - -

- r w x - - - - - -

- r - x - - - - - -

Cele 10 coloane care reprezintă drepturile de acces la fişiere sunt:


Să analizăm în continuare semnificaţia acestor coloane:
Coloana 1 Coloana 2-4 Coloana 5-7 Coloana 8-10
d r w x r w x r w x
d r w x r w - r - -
- r w x r - - r - -
- r - x - - - - - -

Coloana 1: Ne arată faptul că un fişier este director(d), fişier obişnuit


(-), sau un tip special de fişier.
Coloanele 2-4: Ne arată care sunt drepturile de acces la fişier pentru
utilizatorul care este proprietarul fişierului. Drepturile de acces pot fi: de
citire (r), scriere (w), şi execuţie (x).
Coloanele 5-7: Ne arată care sunt drepturile de acces la fişier pentru
grupul proprietar al fişierului. Drepturile de acces pot fi aceleaşi: citire (r),
scriere (w) şi execuţie (x).
Coloanele 8-10: Ne arată care sunt drepturile de acces la fişier pentru
utilizatorii care nu sunt în grupul proprietar al fişierului (others). Drepturile
de acces pot fi aceleaşi: citire (r), scriere (w) şi execuţie (x).
Drepturile de acces la fişiere şi directoare se pot modifica folosind
comanda chmod (change mode). Mai multe despre această comandă în
capitolul 5.
Sistemul de fişiere UNIX şi comenzi

Tipuri de fişiere UNIX


Tabelul 2.5
Tipul de fişier b) Descriere
- Fişier simplu ("ordinary file")
d Director
b Fişier bloc ("block special")

c Fişier caracter ("character special")


l Fişier legătură ("link")
Fişier de memorie partajată ("shared
M
memory")
P Fişier pipe ("named pipe")
S Fişier semafor ("semaphore")

Tipurile de fişiere UNIX sunt prezentate în tabelul 2.5.


Caracteristici:

ƒ Fişierele simple (-)


• Nu este impusă nici o structură asupra conţinutului - acesta
reprezintă o înşiruire de octeţi;
• Aceste fişiere pot fi text (ASCII) sau binare.

ƒ Fişiere director (d)


• Reprezintă un fel de tabel de fişiere;
• Are o structură internă precis definită;
• Oferă posibilitatea organizării sistemului de fişiere.

ƒ Fişierele bloc (b)


• Identifică un dispozitiv;
• Este un bloc de I/O;
• Pot identifica unităţi floppy, hard-discuri, unităţi de bandă.

ƒ Fişiere caracter (c )
• Identifică un dispozitiv;
• Reprezintă caractere de I/O;
• Pot identifica porturi seriale, paralele (terminale, imprimante).
UNIX

ƒ Fişiere de legătură simbolică (l)


• Sunt fişiere pointer către alt fişier existent;
• Sunt de regulă folosite pentru a oferi un alias altui fişier.

ƒ Fişiere de memorie partajată (m)


• Permit mai multor programe să acceseze un spaţiu comun de
memorie;
• Folosite de regulă de programele de aplicaţii.

ƒ Fişiere pipe (p)


• Folosite pentru a transmite date între comenzi sau programe.

ƒ Fişiere semafor (s)


• Folosite pentru sincronizarea proceselor active concurente;
• Folosite de programele de aplicaţii.

Nr de legături
Proprietarul Dimensiunea în octeţi
Grupul Data Numele fişierului

drwxr-xr-x 2 root sys 60676 Aug 22 1994 Lib


-r--r--r-- 1 root sys 60676 Aug 22 1994 README
drwxr-xr-x 2 root sys 60676 Aug 22 1994 Source
-rwxr-xr-x 2 root sys 60676 Aug 22 1994 gzexe
-rwxr-xr-x 2 root sys 60676 Aug 22 1994 gzip
-rwxr-xr-x 1 bin bin 242436 Feb 20 16:07 httpd
-rwsr-xr-x 1 uucp uucp 599604 Sep 22 1995 kermit
-rwxr-x--x 1 root sys 171195 Jan 22 12:15 memhog
-rwxr-x--x 1 root sys 5599 Jan 22 12:15 nlsym
-rwxr-xr-x 2 root sys 553836 Feb 20 16:40 perl
-rwxr-xr-x 2 root sys 553836 Feb 20 16:40 perl5.003
-rwxr-xr-x 1 root sys 13855 Feb 20 16:40 perlbug
-rwxr-xr-x 1 root sys 8984 Feb 20 16:40 perldoc
drwxr-xr-x 2 root sys 60676 Aug 22 1994 src
-rwxr-x--x 1 root sys 108781 Jan 22 12:15 u386mon
Sistemul de fişiere UNIX şi comenzi

Considerând listingul anterior, putem observa şi alte informaţii


legate de fişierele şi directoarele afişate:
ƒ Numărul de legături (link-uri) – reprezintă numărul de legături
simbolice către acest fişier;
ƒ Proprietarul – reprezintă numele utilizatorului care deţine acest
fişier;
ƒ Grupul – reprezintă numele grupului de utilizatori din care face
parte proprietarul;
ƒ Dimensiunea - este exprimată în octeţi;
ƒ Data – data şi ora ultimilor modificări făcute asupra fişierului
sau data de creare a fişierului;
ƒ Numele fişierului.

Observaţie
Pe un sistem Linux, comanda ls derivă din proiectul GNU fileutils,
având o întreagă serie de opţiuni şi caracteristici speciale. Spre exemplu,
numele de fişiere pot apărea listate în culori în funcţie de tipul de fişier.
Culorile folosite la afişare sunt definite în fişierul /etc/DIR_COLORS;
acestea se pot personaliza folosind şi fişierul .dir_colors din directorul
curent home.
Formatul acestui fişier este definit în fişierul /etc/DIR_COLORS.
Pentru a afişa numele fişierelor fără culori dar cu simboluri, se pot folosi
opţiunile --color şi --classify. În mod asemănător cu opţiunea -F,
simbolurile --classify sunt următoarele: „/” pentru directoare, „*” pentru
programe, „@” pentru legături simbolice, „|” pentru fişiere de tip pipe şi „=”
pentru fişiere de tip socket.
Astfel, listingul comenzii:

$ ls --color=never --classify
studenti/ lista.sh* text.sub

semnifică faptul că studenti este director, iar fişierul lista.sh este executabil.
UNIX

2.6 Caractere speciale în UNIX


Caracterele speciale sau metacaracterele sunt caractere cu
semnificaţie specială pentru shell-ul UNIX. În general, caracterele de pe
tastatură care nu sunt alfanumerice sunt metacaractere. Metacaracterele sunt
utilizate împreună cu majoritatea comenzilor UNIX pentru a oferi o mai
mare flexibilitate.
Câteva dintre metacaracterele folosite în UNIX sunt similare cu cele
utilzate în MS-DOS. Caracterul asterisk (*) şi semnul de întrebare (?) sunt
metacaractere cunoscute şi sub numele de wildcard-uri, fiind folosite pentru
a lucra cu grupuri de fişiere într-un mod mai eficient. În tabelul 2.6 sunt
prezentate câteva dintre cele mai folosite metacaractere împreună cu o
scurtă descriere a funcţionalităţii acestora.
Fiind vorba despre nişte caractere speciale, trebuie să nu folosim
metacaractere atunci când denumim un fişier sau un director. Caracterul
punct ( . ) şi caracterul underscore ( _ ) sunt unicele caractere non
alfanumerice care nu sunt metacaractere. Din această cauză aceste două
caractere pot fi folosite în cadrul numelor de fişiere. Semnul minus ( - ), cu
toate că este metacaracter, poate fi, de asemenea, utilizat în cadrul numelor
de fişiere.

Cele mai uzuale metacaractere

Tabelul 2.6
Metacaracterul Descriere Formatul comenzii

* Reprezintă orice caracter sau secvenţă *


de caractere
? Identifică un singur caracter ?
; Permite scrierea mai multor comenzi comanda;comanda
pe aceeaşi linie
[] Identifică o mulţime sau un domeniu [domeniu]
de caractere pentru o singură poziţie
> Redirectează ieşirea unei comenzi comanda > fisier
către un fişier în loc de ecran (stdout -
fişierul standard de ieşire).
< Redirectează intrarea unei comenzi comanda < fisier
dintr-un fişier în loc de tastatură (stdin
- fişierul standard de intrare)
2> Redirectează eroarea unei comenzi comanda 2> fisier
către un fişier în locul ecranului
>> Adaugă ieşirea unei comenzi la un comanda >> fisier
fişier existent (concatenare)
Sistemul de fişiere UNIX şi comenzi

Metacaracterul Descriere Formatul comenzii

| (semnul pipe) Preia ieşierea unei comenzi şi o comanda | comanda


pasează ca intrare comenzii următoare
$ Indicatorul prompter-ului standard Nu se aplică
pentru shell-ul Bourne şi Korn
% Indicatorul prompter-ului standard Nu se aplică
pentru shell-ul C
~ Indică directorul home ~
! Re-execuţia comenzii !n, unde n este numărul
comenzii introduse

Cele mai utilizate metacaractere sunt asteriskul (*), semnul întrebării


( ? ) şi parantezele pătrate ( [ ] ).
Caracterul asterisk sau star (*) este un caracter de substituţie pentru
un caracter sau mai multe (sau nici unul !), cu excepţia caracterului punct de
început al unui fişier ascuns. Caracterul star poate fi deosebit de util în unele
situaţii, precum în cazul comenzilor ls (list), cp (copy), mv (move) sau rm
(remove). Dacă dorim să afişăm dintr-un director doar fişierele al căror
nume începe cu litera “s” putem folosi comanda ls s*. Un exemplu de listing
este în figura 2.7.

Figura 2.7 Listingul comenzii ls s*

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