====== 5. Lucrul cu fișiere ======
Sistemul de fișiere reprezintă componenta cea mai vizibilă din cadrul unui sistem de operare. Un utilizator folosește sistemul de fișiere prin operații de creare, ștergere, modificare și investigare a fișierelor. Mai mult, un utilizator poate administra sistemul de fișiere prin configurarea de permisiuni, prin stabilirea de cote de sistem de fișiere și prin acțiuni de formatare și montare de sisteme de fișiere.
===== Subiecte abordate =====
* Fișiere: definiții, tipuri, operații
* Operații pe fișiere
* Date și metadate
* Globbing
* Permisiuni
* Comenzi avansate de lucru cu fișiere: ''find'', ''stat'', ''ln''
==== Utilitare folosite ====
* ''mkdir'', ''rmdir'', ''touch'', ''ls'', ''rm'', ''cp''
* ''stat'', ''chmod'', ''chown''
* ''find''
* ''ln''
===== Resurse utile =====
* TODO
* TODO
===== Exerciții =====
==== Demo-uri ====
Despre căi relative și căi absolute
Globbing în sistemul de fișiere
Folosirea comenzii ''find'' cu diverși parametri pentru a parcurge sistemul de fișiere.
Schimbarea permisiunilor și ownerilor în sistemul de fișiere
Escaping: ghilimele, apostrof, backslash
==== Creare ierarhie de directoare ====
Creați, în directorul home al utilizatorului ''training'', structura de mai jos:
supermarket/
├── curatat/
│ ├── pronto - lemn curat
│ └── solutie curatat ferestre
└── mancare/
├── -- -> lactate/lapte batut
├── carne/
│ └── -10 grade sunca
├── fructe/
│ └── castraveti spanioli
└── lactate/
└── lapte batut
Intrarea ''%%--%%'' este un link simbolic, adică numele link-ului simbolic trebuie să fie ''%%--%%''.
Intrările care se termină în ''/'' (//slash//) sunt directoare (''supermarket/'', ''curatat/'', ''mancare/'', ''carne/'', ''fructe/'', ''lactate/'').
Restul de intrări sunt fișiere obișnuite (//regular files//).
Pentru a valida structura creată, folosiți, din directorul home al utilizatorului ''student'', comanda
tree -F supermarket
==== Actualizare timpi ====
Pe structura de directoare creată anterior configurați timpi astfel:
* pe intrările din mâncare, mai puțin link-ul simbolic, configurați ca timp de acces miezul nopții la Crăciun 2013
* pe intrări de curățat configurați ca timp de modificare miezul nopții la Revelion 2013
Nu e nevoie să folosiți o comandă specială care să se aplice pe toate intrările. Luați intrările la rând și modificați timpii.
Pentru modificarea timpilor folosiți comanda ''touch''.
Pentru a verifica timpii de acces folosiți comanda ''stat''.
==== Actualizare metadate link simbolic ====
Adăugăm în sistem utilizatorul ''ana''. Pentru aceasta, ne autenficăm ca root și apoi folosim comanda ''adduser''. Adică rulăm comenzile:
$ sudo su
# adduser ana
Ca ''root'', actualizăți următoarele metadate pe link-ul simbolic:
* modificați timpii la miezul nopții Halloween 2013
* modificați deținătorul link-ului în ''ana''
Pentru modificarea deținătorului unui link, folosiți comanda ''chown''. Comanda ''chown'' poate fi rulată doar de utilizatorul root.
Exemple de rulare a comenzii ''chown'' sunt:
chown tony mydata.iso # change owner user of file mydata.iso to tony
chown tony:players icon.bmp # change owner user of file icon.bmp to tony and owner group to players
==== Creare ierarhie de fișiere/directoare ====
Creați în home-ul utilizatorului ''training'' următoarea ierarhie de fișiere și directoare (\ = director; - = fișier):
training
\Teme
\Matematica
\Analiza
- diagrama_euler.jpg
- tema1
- tema2
- tema3.0
- tema4.2
\Algebra
\Geografie
\Continente
\Europa
\Europa de Est
\Romania
\Bulgaria
\Asia
- harta romaniei.jpg
- harta europei.png
\Istorie
\Statistica si probabilitati
- lanturi_markov.html
- transformate_fourier.pdf
- Mihai Viteazul.jpg
- A I Cuza.png
\Informatica
\Python
\C\C++
- Introducere in algoritmi.pdf
- Dennis Ritchie.jpg
- tema_backtracking.c
\JAVA
Folosiți manualul pentru a căuta argumente ale comenzilor ce v-ar putea ușura munca.
Folosiți comanda
tree ~/Teme
pentru a verifica în permanență corectitudinea ierarhiei.
Redenumiți fișierul ''tema1'' în ''tema_integrale''.
Mutați ''harta romaniei'' în directorul corespunzător țării din directorul ''Geografie''.
Ștergeți directorul ''JAVA''.
Mutați întregul director numit ''Statistica si probabilitati'' (cu tot cu fișierele conținute), în directorul ''Matematica''.
Creați în ''/home/training/Teme'' un director numit ''Imagini'' în care copiați toate fișierele cu extensia ''.jpg''.
Ștergeți fișierele, din toată ierarhia creată anterior, al căror nume se termină cu cifre.
==== Afișare fișiere ====
Dorim să afișăm fișiere după diferite considerente.
Folosiți ''find'' pentru a afișa toate **fișierele** din ierarhia ''/etc/'' (adică toate fișierele din ''/etc/'', din subdirectoarele acestuia, din subdirectoarele subdirectoarelor etc.). **Indicație**: Folosiți opțiunea ''-type'' a comenzii ''find''.
Folosiți ''find'' pentru a afișa toate fișierele din ierarhia ''/etc/'' al căror nume începe cu litere între ''a'' și ''d''. **Indicații**: Folosiți opțiunea ''-name'' a comenzii ''find''. Folosiți construcția ''[a-d]*'' pentru a indica un șir care începe cu o literă între ''a'' și ''d'' urmată de orice altceva.
Folosiți ''find'' pentru a afișa toate fișierele din ierarhia ''/etc/'' al căror nume începe cu litere între ''a'' și ''d'' și are extensia ''.conf'' (adică se încheie în șirul ''.conf''). **Indicație**: Porniți de la comanda anterioară și extindeți argumentul transmis opțiunii ''-name''.
Folosiți ''find'' pentru a afișa toate fișierele din ierahia ''/etc/'' care sunt deținute de utilizatorul ''root'' și grupul ''root''. **Indicație**: Folosiți optiunea ''-user'' a comenzii ''find''.
Folosiți ''find'' pentru a a afișa toate fișierele din ierahia ''/etc/'' care sunt deținute de utilizatorul ''root'' și un grup diferit de ''root''. **Indicație:** Folosiți ''!'' (semnul exclamării în fața opțiunii necesare pentru a o nega).
Folosiți ''find'' pentru a a afișa toate fișierele din ierahia ''/etc/'' pentru care ''others'' au permisiuni de orice fel (adică ''others'' au **oricare** dintre permisiunile //read//, //write// sau //execute//). **Indicații**: Urmăriți opțiunea ''-perm'' în pagina de manual a comenzii ''find''. Urmăriți și exemplele de folosire căutând după șirul ''EXAMPLES''.
Folosiți ''find'' pentru a a afișa toate fișierele din ierahia ''/etc/'' pentru care ''others'' nu au nici un fel de permisiuni (de orice fel: //read//, //write// sau //execute//). **Indicație:** Folosiți ''!'' (semnul exclamării în fața opțiunii necesare pentru a o nega).
==== Afișare informații despre fișiere ====
Dorim să afișăm informații despre fișiere folosind comanda ''stat'', comandă dedicată exact obținerii de informații despre fișiere.
Afișați pentru fișierul ''/etc/passwd'' doar dimensiunea. **Indicație**: Folosiți comanda ''stat'' împreună cu opțiunea ''%%--format%%'' (sau ''-c'', forma scurtă a acestei opțiuni).
Afișați pentru fișierul ''/etc/passwd'' inode-ul, dimensiunea și uid-ul, separate prin '','' (virgulă).
==== Altă utilizare find ====
Căutați, folosind ''find'', toate fișierele cu următoarele tipuri:
* symlink {{{(l)}}} în ''/usr/share/''
* block {{{(b)}}} în ''/dev''
* character {{{(c)}}} în ''/dev''
* socket {{{(s)}}} în ''/var/lib''
* pipe {{{(p)}}} în ''/var/lib''
Folosiți comenzi în forma ''%%sudo find ... -type ...%%''.
==== Altă ierarhie ====
Creați în directorul ''/home/training'' următoarea structură de directoare ''/home/training/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is''.
Folosiți opțiunea ''%%--parents%%'' a comenzii ''mkdir''.
Intrați în directorul ''/home/training/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is'' și creați trei fișiere, denumite ''ext2'', ''ext3'' și ''ext4''.
Modificați data când fișierul ''ext4'' a fost accesat și modificat la ''2010.05.23 15:25''.
Folosiți comanda ''touch'' cu parametrii corespunzători și folosiți comanda ''ls -l'' pentru verificare.