This shows you the differences between two versions of the page.
school:uso:lab-05 [2014/11/04 16:12] razvan [Suport laborator] |
school:uso:lab-05 [2020/07/20 09:16] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | = Laborator 05 - Gestiunea sistemului de fișiere = | ||
- | == Suport laborator == | ||
- | |||
- | * [[http:// | ||
- | * [[http:// | ||
- | |||
- | |||
- | Pentru început clonați repository-ul de USO:< | ||
- | git clone https:// | ||
- | </ | ||
- | == Demo == | ||
- | |||
- | === 1. Permisiuni === | ||
- | |||
- | În laboratorul precedent am aflat că într-un sistem pot exista mai mulți utilizatori. Totuși, fiecare utilizator trebuie sa poată avea fișierele lui personale care să nu poată fi modificate de un alt utilizator fără permisiunea sa, iar unele fișiere sau resurse trebuie să nu poată fi accesate decât de către utilizatorul privilegiat (//root//). În alte cuvinte trebuie să avem o metodă de a controla accesul utilizatorilor la diversele elemente ale sistemului. | ||
- | |||
- | Abordarea utilizată în Linux este de a folosi permisiuni. Acestea dictează ce operații (de scriere, citire sau executare) poate să efectueze un utilizator asupra unui fișier sau director. Ele sunt împărțite în trei categorii: | ||
- | * // | ||
- | * //grup (group)//: un grup de utilizatori care sunt deținătorii fișierului/ | ||
- | * //ceilalți (others)//: utilizatorii care nu intră în niciuna dintre categoriile dinainte | ||
- | |||
- | Pentru fiecare dintre cele trei categorii există trei permisiuni: | ||
- | * //de citire//: utilizatorul poate citi conținutul fișierului respectiv poate lista conținutul directorului (dacă are și drept de execuție) | ||
- | * //de scriere//: utilizatorul poate modifica conținutul fișierului/ | ||
- | * //de execuție//: | ||
- | |||
- | Ordinea în care se aplică aceste permisiuni este: dacă utilizatorul este deținătorul fișierului, | ||
- | |||
- | ==== Vizualizarea permisiunilor ==== | ||
- | |||
- | Pentru a vedea conținutul unui director folosim comanda '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | student@uso: | ||
- | student@uso: | ||
- | a b | ||
- | student@uso: | ||
- | total 0 | ||
- | -rw-rw-r-- 1 student student 0 oct 6 23:58 a | ||
- | -rw-r--r-- 1 root root 0 oct 6 23:58 b | ||
- | </ | ||
- | |||
- | Să ne uităm mai indeaproape la rezultatul rulării comenzii '' | ||
- | |||
- | ^ - ^ rw- ^ rw- ^ r-- ^ 1 ^ student | ||
- | | Tipul intrării | ||
- | |||
- | * Tipul intrării indică dacă intrarea respectivă este un fișier normal ('' | ||
- | * Permisiunile indică ce drepturi au anumiți utilizatori asupra fișierului. Sunt împărțite în trei grupuri, primul ('' | ||
- | * Numărul de hardlink-uri indică câte hardlink-uri există către acest fișier. | ||
- | * Deținătorul fișierului este, în general, utilizatorul care a creat fișierul, dar poate fi modificat. | ||
- | * Grupul fișierului este, în general, grupul utilizatorului care a creat fișierul, dar poate fi modificat. | ||
- | |||
- | ==== Modificarea permisiunilor ==== | ||
- | |||
- | Pentru a modifica permisiunile unui fișier folosim comanda '' | ||
- | * mod literal: specificăm căror utilizatori vrem să le modificăm permisiunile ('' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | total 0 | ||
- | -rw-rw-r-- 1 student student 0 oct 6 23:58 a | ||
- | -rw-r--r-- 1 root root 0 oct 6 23:58 b | ||
- | student@uso: | ||
- | student@uso: | ||
- | total 0 | ||
- | -rwxrw-r-- 1 student student 0 oct 6 23:58 a | ||
- | -rw-r--r-- 1 root root 0 oct 6 23:58 b | ||
- | student@uso: | ||
- | student@uso: | ||
- | total 0 | ||
- | -rwxrw--w- 1 student student 0 oct 6 23:58 a | ||
- | -rw-r--r-- 1 root root 0 oct 6 23:58 b | ||
- | </ | ||
- | |||
- | * mod octal: specificăm permisiunile pentru deținător, | ||
- | |||
- | ^ r w x ^ r - x ^ r - - ^ | ||
- | | 1 1 1 | 1 0 1 | 1 0 0 | | ||
- | | 7 | 5 | 4 | | ||
- | |||
- | < | ||
- | student@uso: | ||
- | total 0 | ||
- | -rwxrw--w- 1 student student 0 oct 7 21:48 a | ||
- | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
- | student@uso: | ||
- | student@uso: | ||
- | total 0 | ||
- | -rwxr-xr-- 1 student student 0 oct 7 21:48 a | ||
- | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
- | student@uso: | ||
- | student@uso: | ||
- | total 0 | ||
- | -rw-rw-r-- 1 student student 0 oct 7 21:48 a | ||
- | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
- | </ | ||
- | |||
- | ==== Modificarea utilizatorului și a grupului ==== | ||
- | |||
- | Pentru a modifica utilizatorul deținător al unui fișier folosim comanda '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | total 0 | ||
- | -rw-rw-r-- 1 student student 0 oct 7 21:48 a | ||
- | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
- | student@uso: | ||
- | student@uso: | ||
- | total 0 | ||
- | -rw-rw-r-- 1 gigi student 0 oct 7 21:48 a | ||
- | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
- | </ | ||
- | |||
- | Pentru a modifica grupul deținător al unui fișier folosim comanda '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | total 0 | ||
- | -rw-rw-r-- 1 gigi student 0 oct 7 21:48 a | ||
- | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
- | student@uso: | ||
- | student@uso: | ||
- | total 0 | ||
- | -rw-rw-r-- 1 gigi gigi 0 oct 7 21:48 a | ||
- | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
- | student@uso: | ||
- | student@uso: | ||
- | total 0 | ||
- | -rw-rw-r-- 1 student student 0 oct 7 21:48 a | ||
- | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
- | </ | ||
- | |||
- | <note tip> | ||
- | Operația de schimbare utilizatorului sau a grupului deținător ale unui fișier sunt operații privilegiate, | ||
- | </ | ||
- | |||
- | ==== Masca de permisiuni ==== | ||
- | |||
- | Să creăm un nou fișier și un nou director. Cu ce permisiuni vor fi create ele? | ||
- | |||
- | < | ||
- | student@uso: | ||
- | total 0 | ||
- | -rw-rw-r-- 1 student student 0 oct 7 21:48 a | ||
- | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
- | student@uso: | ||
- | student@uso: | ||
- | student@uso: | ||
- | total 4 | ||
- | -rw-rw-r-- 1 student student | ||
- | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
- | -rw-rw-r-- 1 student student | ||
- | drwxrwxr-x 1 student student 4096 oct 7 22:15 d | ||
- | </ | ||
- | |||
- | Observați că toate fișierele utilizatorului //student// sunt create cu aceleași permisiuni. Permisiunile de creare ale fișierelor și directoarelor sunt obținute prin efectuarea operației //și pe biți// între permisiunile implicite ('' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | 0002 | ||
- | </ | ||
- | |||
- | ^ Comandă | ||
- | | touch c | 666 | 002 | 666 & ~002 = 110110110 & 111111101 = 664 | | ||
- | | mkdir d | 777 | 002 | 777 & ~002 = 111111111 & 111111101 = 775 | | ||
- | |||
- | Masca întoarsă de '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | student@uso: | ||
- | student@uso: | ||
- | student@uso: | ||
- | total 8 | ||
- | -rw-rw-r-- 1 student student | ||
- | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
- | -rw-rw-r-- 1 student student | ||
- | drwxrwxr-x 1 student student 4096 oct 7 22:15 d | ||
- | -rw-rw---- 1 student student | ||
- | drwxrwx--x 2 student student 4096 oct 7 22:16 f | ||
- | </ | ||
- | |||
- | ^ Comandă | ||
- | | touch e | 666 | 006 | 666 & ~006 = 110110110 & 111111001 = 660 | | ||
- | | mkdir f | 777 | 006 | 777 & ~006 = 111111111 & 111111001 = 771 | | ||
- | |||
- | <note warning> | ||
- | Nu uitați că '' | ||
- | </ | ||
- | |||
- | === 2. Link-uri === | ||
- | |||
- | Link-urile sunt legături între două puncte ale sistemului de fișiere. În general le folosim când vrem să ne ușurăm accesul la un fișier sau director, sau pentru a uniformiza accesul. | ||
- | |||
- | Sistemul de fișiere folosit în Linux permite două tipuri de link-uri: | ||
- | * //link-uri simbolice (soft links)//: se comportă precum un shortcut din Windows; pointează către un alt fișier/ | ||
- | * //link-uri hard (hard links)//: nu au echivalent în Windows; simplu spus, sunt două fișiere ce împart aceleași date, însă descrierea completă și implementarea lor o veți învăța la cursul de [[http:// | ||
- | |||
- | ==== Link-uri simbolice ==== | ||
- | |||
- | Pentru a crea un link folosim comanda '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | student@uso: | ||
- | student@uso: | ||
- | total 0 | ||
- | -rw-rw---- 1 student student 0 oct 7 22:42 a | ||
- | lrwxrwxrwx 1 student student 1 oct 7 22:42 sym -> a | ||
- | </ | ||
- | |||
- | Observați că ultima linie începe cu '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | student@uso: | ||
- | abc | ||
- | student@uso: | ||
- | abc | ||
- | </ | ||
- | |||
- | Link-ul se comportă ca și fișierul către care pointează. Putem să le folosim ca fiind același fișier. Ce se întamplă totuși dacă mutăm fișierul destinație? | ||
- | |||
- | < | ||
- | student@uso: | ||
- | student@uso: | ||
- | cat: sym: No such file or directory | ||
- | </ | ||
- | |||
- | Link-ul nu mai funcționează mutat fișierul către care pointa. Această problemă nu poate fi rezolvată cu link-uri simbolice. Dacă vrem să putem muta fișierul destinație, | ||
- | |||
- | ==== Link-uri hard ==== | ||
- | |||
- | Pentru a crea link-uri hard folosim comanda '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | student@uso: | ||
- | student@uso: | ||
- | total 0 | ||
- | -rw-rw---- 2 student student 0 oct 7 22:42 a | ||
- | -rw-rw---- 2 student student 0 oct 7 22:45 hard | ||
- | </ | ||
- | |||
- | Observați că ultima linie nu mai începe cu '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | abc | ||
- | student@uso: | ||
- | student@uso: | ||
- | abc | ||
- | </ | ||
- | |||
- | Acum putem să mutăm ambele fișiere oriunde în sistemul de fișiere și totul decurge așa cum ne-am aștepta. Sau... | ||
- | |||
- | < | ||
- | student@uso: | ||
- | student@uso: | ||
- | abc | ||
- | </ | ||
- | |||
- | ... ce s-a întâmplat aici??? | ||
- | |||
- | === 3. Lucrul cu sisteme de fișiere === | ||
- | |||
- | Un sistem de fișiere reprezintă modul de organizare a fișierelor pe un mediu de stocare pentru a le face mai ușor accesibile. Sistemul de fișiere folosit, în general, pe sistemele Linux se numește //ext4//. Pentru a vedea ce sisteme de fișiere există în sistem folosim comanda '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | Disk /dev/sda: 8589 MB, 8589934592 bytes | ||
- | 255 heads, 63 sectors/ | ||
- | Units = sectors of 1 * 512 = 512 bytes | ||
- | Sector size (logical/ | ||
- | I/O size (minimum/ | ||
- | Disk identifier: 0x000de65a | ||
- | |||
- | | ||
- | / | ||
- | / | ||
- | / | ||
- | |||
- | Disk /dev/sdc: 4043 MB, 4043308544 bytes | ||
- | 114 heads, 6 sectors/ | ||
- | Units = sectors of 1 * 512 = 512 bytes | ||
- | Sector size (logical/ | ||
- | I/O size (minimum/ | ||
- | Disk identifier: 0x0002cc78 | ||
- | |||
- | | ||
- | / | ||
- | </ | ||
- | |||
- | Pentru a afla informații despre unul dintre aceste sisteme de fișiere, folosim comanda '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | Filesystem | ||
- | / | ||
- | </ | ||
- | |||
- | Pentru a afla informații despre cât spațiu ocupă pe disc un director sau fișier folosim comanda '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | 0 lab05/ | ||
- | 3.6M lab05/ | ||
- | 0 lab05/ | ||
- | 0 lab05/ | ||
- | 512 lab05/ | ||
- | 512 lab05/ | ||
- | 0 lab05/ | ||
- | 0 lab05/ | ||
- | 3.6M lab05/ | ||
- | 3.6M lab05/ | ||
- | student@uso: | ||
- | 3.6M lab05/ | ||
- | </ | ||
- | |||
- | ==== Montarea și demontarea sistemelor de fișiere ==== | ||
- | |||
- | Un sistem de fișiere nu poate fi folosit decât dacă este montat. Comanda cu ajutorul căreia putem face asta este '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | |||
- | </ | ||
- | |||
- | Pentru a putea să monteze un sistem de fișiere trebuie să îi specificăm ce tip este acesta, fișierul dispozitiv și directorul în care să îl monteze. | ||
- | |||
- | < | ||
- | student@uso: | ||
- | student@uso: | ||
- | student@uso: | ||
- | student@uso: | ||
- | stuff | ||
- | </ | ||
- | |||
- | Operația opusă montării este demontarea, care se realizează cu ajutorul comenzii '' | ||
- | |||
- | < | ||
- | student@uso: | ||
- | student@uso: | ||
- | </ | ||
- | |||
- | <note warning> | ||
- | Montarea și demontarea sistemelor de fișiere este o acțiune privilegiată. Dacă dorim să montăm/ | ||
- | </ | ||
- | |||
- | == Exerciții == | ||
- | |||
- | <note hint> | ||
- | Intrați în directorul / | ||
- | |||
- | < | ||
- | student@uso: | ||
- | </ | ||
- | |||
- | În directorul '' | ||
- | </ | ||
- | |||
- | === 1. Adăugarea unor utilizatori noi (1p) === | ||
- | |||
- | Adăugați în sistem utilizatorii '' | ||
- | |||
- | <note tip> | ||
- | Comanda folosită pentru a adăuga utilizatori în sistem este '' | ||
- | </ | ||
- | |||
- | === 2. Adăugarea unor grupuri noi (1p) === | ||
- | |||
- | Adăugați în sistem următoarele grupuri: '' | ||
- | |||
- | <note tip> | ||
- | Comanda folosită pentru a crea un grup nou este '' | ||
- | </ | ||
- | |||
- | === 3. Permisiuni 1 (2p) === | ||
- | |||
- | Intrați în directorul '' | ||
- | |||
- | <note tip> | ||
- | Nu uitați că puteți folosi '' | ||
- | </ | ||
- | |||
- | === 4. Permisiuni 2 (2p) === | ||
- | |||
- | Intrați în directorul '' | ||
- | |||
- | === 5. Link-uri (1p) === | ||
- | |||
- | Intrați în directorul '' | ||
- | |||
- | <note tip> | ||
- | Un link poate fi creat folosind atât căi relative, cât și căi absolute. | ||
- | </ | ||
- | |||
- | === 6. Montarea sistemelor de fișiere (2p) === | ||
- | |||
- | În ciuda eforturilor de securizare a datelor din directorul '' | ||
- | |||
- | <note tip> | ||
- | Montați imaginea dupa procedura descrisă în [[laborator-05# | ||
- | </ | ||
- | |||
- | === 7. Drepturi de execuție (1p) === | ||
- | |||
- | Intrați în directorul '' |