This shows you the differences between two versions of the page.
so:cursuri:curs-12 [2013/01/31 21:57] 127.0.0.1 external edit |
so:cursuri:curs-12 [2019/05/11 15:36] (current) razvan.deaconescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Curs 12 - Securitatea sistemelor de operare ====== | + | ====== Curs 12 - Implementarea sistemelor de fișiere ====== |
+ | |||
+ | * [[http://prezi.com/i7gfiypqqpje/?utm_campaign=share&utm_medium=copy&rc=ex0share|Curs 12 - Implementarea sistemelor de fișiere (Vizualizare Prezi)]] | ||
+ | * [[http://elf.cs.pub.ro/so/res/cursuri/SO_Curs-12.pdf|Curs 12 - Implementarea sistemelor de fișiere (PDF)]] | ||
+ | |||
+ | * [[https://docs.google.com/document/d/1yQIKPYfAiUehhdSf1D10f3lIH3hnd5xXVyL2ftBH3iQ/edit?usp=sharing|Notițe de curs]] | ||
+ | |||
+ | * Suport curs | ||
+ | * Operating System Concepts Essentials | ||
+ | * Capitolul 10: File-System Implementation | ||
+ | * Secțiunile 10.1 -- 10.8 | ||
+ | * Modern Operating Systems | ||
+ | * Capitolul 6: File Systems | ||
+ | * Secțiunile 6.3, 6.4 | ||
<html> | <html> | ||
- | <iframe src="https://docs.google.com/present/embed?id=dgbccfz4_815d98458d5&size=m" frameborder="0" width="555" height="451"></iframe> | + | <center> |
+ | <iframe src="https://prezi.com/embed/i7gfiypqqpje/?bgcolor=ffffff&lock_to_path=0&autoplay=0&autohide_ctrls=0&features=undefined&disabled_features=undefined" width="550" height="400" frameBorder="0"></iframe> | ||
+ | </center> | ||
</html> | </html> | ||
- | *[[https://docs.google.com/present/view?id=dgbccfz4_815d98458d5 | Curs 12 - Vizualizare]] | + | ===== Demo-uri ===== |
- | *[[https://docs.google.com/present/edit?id=0AXh5Op_iFi3jZGdiY2NmejRfODE1ZDk4NDU4ZDU | Curs 12 - Editare]] | + | |
- | *Suport curs | + | Pentru parcurgerea demo-urilor, folosiți [[http://elf.cs.pub.ro/so/res/cursuri/curs-12-demo.zip|arhiva aferentă]]. |
- | *Operating System Concepts | + | |
- | *Capitolul 14 -- Protection | + | |
- | *Capitolul 15 -- Security | + | |
- | **** Secțiunile 15.1, 15.2, 15.5 | + | |
- | *Modern Operating Systems | + | |
- | *Capitolul 9 -- Security | + | |
- | **** Secțiunile 9.4, 9.6 | + | |
- | *[[:cursuri:curs-12:quiz | Quiz curs 12]] | + | |
+ | - Folosiți comanda ''stat'' pentru a afișa informații despre inode-ul corespunzător unui fișier, director, link simbolic, char device, block device:<code bash> | ||
+ | stat /etc/passwd | ||
+ | stat /usr/lib/ | ||
+ | stat /usr/bin/cc | ||
+ | stat /dev/null | ||
+ | stat /dev/loop0 | ||
+ | </code> | ||
+ | * Afișați informații despre un socket Unix, după ce îl căutați în ierarhia ''/var/run/'':<code bash> | ||
+ | sudo find /var/run -type s | ||
+ | sudo stat /var/run/udev/control | ||
+ | </code> | ||
+ | * Aflați dimensiunea fișierului ''/sbin/init'' folosind ''stat'':<code bash> | ||
+ | stat -c %s /sbin/init | ||
+ | </code> | ||
+ | * Urmăriți modificările timpilor de acces pe fișier (//access time//, //modify time//, //change time//) folosind comenzile de mai jos:<code bash> | ||
+ | cd /tmp | ||
+ | touch a.txt | ||
+ | stat a.txt | ||
+ | cat a.txt | ||
+ | stat a.txt | ||
+ | chmod a+rw a.txt | ||
+ | stat a.txt | ||
+ | echo "abc" > stat.txt | ||
+ | stat a.txt | ||
+ | </code> | ||
+ | * //access time// este timpul de acces al fișierului, deschis pentru citire. | ||
+ | * //modify time// este timpul de modificare a datelor fișierului. | ||
+ | * //change time// este timpul de modificare a metadatelor fișierului (informații din inode). | ||
+ | - Creați un fișier simplu și urmăriți numărul de link-uri ale acestuia:<code bash> | ||
+ | cd /tmp | ||
+ | touch first.txt | ||
+ | ls -i first.txt | ||
+ | ls -l first.txt | ||
+ | </code> | ||
+ | * A doua coloana de la rularea ''ls -l'' este numărul de link-uri, inițial 1. | ||
+ | * Creați un fișier ca hard link la primul:<code bash> | ||
+ | ln first.txt second.txt | ||
+ | </code> | ||
+ | * Observați că inode-ul este același iar numărul de link-uri este egal cu doi:<code bash> | ||
+ | ls -i first.txt second.txt | ||
+ | ls -l first.txt second.txt | ||
+ | </code> | ||
+ | * Creați un al treilea link și observați numărul de link-uri egal cu 3:<code bash> | ||
+ | ln second.txt third.txt | ||
+ | ls -i first.txt second.txt third.txt | ||
+ | ls -l first.txt second.txt third.txt | ||
+ | </code> | ||
+ | * Ștergeți primele două link-uri/nume și obsevați păstrarea inode-ului și reducerea numărului de link-uri la 1 pentru ultimul nume:<code bash> | ||
+ | unlink first.txt | ||
+ | rm second.txt | ||
+ | ls -i third.txt | ||
+ | ls -l third.txt | ||
+ | </code> | ||
+ | * ''unlink'' și ''rm'' pot fi folosite interschimbabil. | ||
+ | - Urmăriți numărul de link-uri/nume aferente unui director gol. Numărul este 2: un link este numele efectiv al directorului, iar altul este referința '.' (punct, //dot//) către director însuși:<code bash> | ||
+ | cd /tmp | ||
+ | mkdir /tmp/test-d | ||
+ | ls -ld /tmp/test-d | ||
+ | </code> | ||
+ | * Creați un subdirector al directorului ''/tmp/test-d/''. Numărul de link-uri va crește la 3, cu ajutorul referinței '..' (punct punct, //dot dot//) de la subdirector:<code bash> | ||
+ | mkdir /tmp/test-d/test-subd | ||
+ | ls -ld /tmp/test-d | ||
+ | </code> | ||
+ | * Creați un subfișier al directorul ''/tmp/test-d/''. Numărul de link-uri nu se va modifica, întrucât fișierul nu are o referință la directorul părinte:<code bash> | ||
+ | touch /tmp/test-d/test-f | ||
+ | ls -ld /tmp/test-d | ||
+ | </code> | ||
+ | - Creați un director simplu și vedeți ce spațiu ocupă pe disc, folosind comanda ''stat'':<code bash> | ||
+ | cd /tmp | ||
+ | mkdir /tmp/fill-d | ||
+ | stat -c %s /tmp/fill-d | ||
+ | </code> | ||
+ | * Copiați scriptul ''create-long-filenames'' din arhivă și rulați-l în directorul proaspăt creat:<code bash> | ||
+ | cd /tmp/fill-d | ||
+ | # TODO: copy script | ||
+ | ./create-long-filenames | ||
+ | </code> | ||
+ | * Observați conținutul directorului și noua dimensiune a acestuia:<code bash> | ||
+ | ls -l /tmp/fill-d | ||
+ | stat -c %s /tmp/fill-d | ||
+ | </code> | ||
+ | * Dimensiunea directorului a crescut datorită numărului de intrări în director. | ||
+ | * Dimensiunea directorului este multiplu de dimensiunea blocului sistemului. | ||
+ | - Citirea intrărilor dintr-un director; simularea comenzii ''ls'' | ||
+ | * Intrați în directorul ''5-dirent/''. | ||
+ | * Consultați fișierul ''dirent.c''. | ||
+ | * Compilați fișierul folosind comanda ''make''. | ||
+ | * Rulați executabilul obținut dându-i ca argument un director:<code bash> | ||
+ | ./dirent tmp | ||
+ | ./dirent /usr | ||
+ | ./dirent /var/run | ||
+ | ./dirent /usr/lib | ||
+ | </code> | ||
+ | * Observați afișarea intrărilor și a tipului acestora. | ||
+ | * Structura ''struct dirent'' reține informațiile legate de o intrare dintr-un director. | ||
+ | * Un director este, pe disc, un inode ale cărui bloc-uri conține un vector de intrări asemănătoare cu ''struct dirent''. | ||
+ | * Intrările sunt citite de pe disc folosind apelul ''readdir'', similar folosirii apelului ''read'' pentru fișiere. | ||
+ | * La fel ca fișierele obișnuite (//regular files//) și directoarele folosesc intern un cursor de fișier care este actualizat după fiecare apel ''readdir''. |