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 "root"
Reprezintă nivelul cel mai de sus din sistemul de 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 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:
(vezi poza)
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 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ă 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.
SISTEMUL DE FIŞIERE UNIX ŞI COMENZI – poza de epic, in n00bs · 33.1KB
_______________________________________ :< 4 8 15 16 23 42 *execute* TOATA LUMEA ESTE INVITATA PE NOUL FORUM! http://hackpedia.info/
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.
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.
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.
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.
_______________________________________ :< 4 8 15 16 23 42 *execute* TOATA LUMEA ESTE INVITATA PE NOUL FORUM! http://hackpedia.info/
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 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:
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).
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.
_______________________________________ :< 4 8 15 16 23 42 *execute* TOATA LUMEA ESTE INVITATA PE NOUL FORUM! http://hackpedia.info/
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
/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.
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 dea 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).
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/epic/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]
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
made by epic. greetz to enigma
TUORIALUL ESTE FACUT DE MINE! Daca vreti sa-l copiati, va rog sa nu stergeti "Made by epic" pentru ca m-am chinuit foarte mult sa-l fac.
_______________________________________ :< 4 8 15 16 23 42 *execute* TOATA LUMEA ESTE INVITATA PE NOUL FORUM! http://hackpedia.info/