= Interacțiunea cu sistemul de fișiere = [[https://docs.google.com/presentation/d/1z8R_IewLTI2Txo49TA-H2qifuKDDBzF4RptG5tgMvlo/pub?start=false&loop=false&delayms=3000|Slide-uri de prezentare]] == Tutorial == === Vizualizarea sistemului de fișiere === Deschideți un terminal. * Rulați comanda ''ls''. ** Ce fișiere se află în directorul curent? * Aflați directorul curent. Folosiți comanda ''pwd''. * Afișați în format lung fișierele din directorul curent. (hint: ''man ls'') ** Observați diferențele dintre un director și un fișier normal. * Schimbați directorul curent în rădăcina sistemului de fișiere. ** Folosiți ''cd /'' ** Rulați din nou comanda ''pwd''. Ce s-a schimbat? * Aflați fișierele din directorul actual. * Aflați printr-o comandă care este utilizatorul curent. ** hint: capitolul anterior * Care este directorul ''home'' al acestuia? * Fără a schimba directorul curent, afișați fișierele din home-ul acestuia prin două metode. ** cale absolută ** simbol special: ''~'' * Schimbați directorul curent în ultimul director din care ați navigat. ** ''cd -'' ** Ce apare pe ecran? ** Rulați din nou comanda ''pwd''. ** Ultimul director este directorul home al utilizatorului curent. * Ce face comanda ''cd .''? ** Rulați apoi ''pwd''. * Ce face comanda ''cd ..''? ** Rulați apoi ''pwd''. === Informații despre sistemul de fișiere === * Ce face comanda ''ping''? ** Rulați comanda ''ping -c 1 localhost''. ** Rulați comanda ''ping -c 1 google.com''. * Rulați comanda ''which ping''. ** Observați calea absolută a executabilului în sistemul de fișiere. * Rulați comanda ''file /bin/ping''. ** Sistemul de operare este pe 32-biți sau 64-biți? * Rulați comanda ''stat /bin/ping''. ** Când a fost accesat ultima dată executabilul? ** Când a fost modificat ultima dată executabilul? * Care este dimensiunea fișierului ''/bin/ping''? ** folosiți ''ls'' și ''stat'' === Operații cu sistemul de fișiere === ==== Operații de creare ==== * Asigurați-vă că sunteți în home-ul utilizatorului curent. ** Rulați ''pwd''. ** Dacă nu sunteți acolo, folosiți ''cd'' pentru a naviga până acolo. * Rulați comanda ''mkdir first_root''. ** Listați în format lung fișierele din directorul curent. ** Observați linia corespunzătoare directorului nou creat. * Navigați în interiorul directorului ''first_root''. ** Creați fișierul ''first_file''. *** ''touch first_file'' ** Rulați comanda ''mkdir long/name/goes/here''. *** Ce observați? *** Puteți crea directoarele pe rând, sau puteți rula comanda ''mkdir -p long/name/goes/here''. **** Cițiți în ''man'' ce face parametrul ''-p''. ** Creați directorul ''dir''. ** Creați fișierul ''second_file''. * Navigați în interiorul directorului ''dir''. ** Creați fișierul ''file''. * Folosiți o cale absolută pentru a naviga în directorul ''first_root'' din home-ul utilizatorului curent. ** Listați fișierele din directorul curent. ** Listați recursiv întreaga ierarhie de fișiere pornind din directorul curent. *** hint: ''man ls'' *** Obțineți mai multe informații folosind formatul lung de afișare. ==== Operații de mutare/redenumire/copiere ==== * Rulati comanda ''mv dir new_name''. ** Listați conținutul directorului curent. ** Ce observați? * Rulați comanda ''cp new_name dir''. ** Listați conținutul directorului curent. ** Ce observați? * Rulați comanda ''cp -r new_name dir''. ** Listați conținutul directorului curent. ** Listați conținutul directorului ''dir'' folosind o cale relativă. ** Ce observați? * Rulați comanda ''echo text > dir/file'' ** Comanda scrie cuvântul "text" în fișierul specificat în dreapta operatorului ''>''. *** O să discutăm mai pe larg în capitolele următoare. * Rulați comanda ''cat dir/file''. ** Ce observați? * Rulați comanda ''cat new_name/file''. ** Ce observați? ==== Operații de ștergere ==== * Rulați comanda ''rm new_name'' pentru a șterge directorul. ** Ce observați? * Rulați comanda ''rmdir new_name''. ** Listați conținutul directorului curent. ** Ce observați? * Rulați comanda ''rm new_name/file''. * Listați conținutul directorului ''new_name''. * Rulați comanda ''rmdir new_name''. ** Listați conținutul directorului curent. ** Ce observați? * Rulați comanda ''rm dir/file''. * Listați conținutul directorului ''dir''. * Rulati comanda ''rm dir'' ** Ce observați? * Rulați comanda ''rm -r dir'' ** Ce observați? * Creați un director și un fișier în interiorul acestuia. ** Folosiți ''rm -r'' pentru a șterge direct întreg directorul. ** Funcționează? ==== Editare fișiere ==== * Asigurați-vă că sunteți în directorul ''first_root'' din home-ul utilizatorului curent. * Creați fișierul ''file'' în directorul ''long/name/goes/here''. * Utilizați comanda ''echo text > long/name/goes/here/file''. ** Folosiți cat pe fișier pentru a vizualiza conținutul. Pentru a edita mai ușor fișiere o să folosim un editor text trivial, ''nano''. * Rulați comanda ''nano long/name/goes/here/file''. ** Pentru a da comenzi speciale (ce apar în partea de jos a editorului) trebuie folosită combinația Ctrl-Literă, unde Literă este litera corespunzătoare. *** Simbolul ''^'' este de fapt reprezentarea grafică a simbolului Ctrl * Încercați să scrieți ''Thales'' în fișier. ** Apăsați ''Ctrl-X'' pentru ''exit''. ** Editorul o să observe că ați modificat fișierul și o să vă întrebe dacă doriți să salvați modificările *** Apăsați tasta ''Y'' corespunzătoare răspunsului ''yes''. *** Editorul o să vă întrebe în ce fișier de pe disc doriți să salvați modificările. *** Implicit, o să vă sugereze numele fișierului pe care l-ați dat ca parametru când ați deschis editorul ''nano''. *** Apăsați tasta ''enter'' pentru confirmarea numelui. * Vizualizați conținutul fișierului tocmai editat folosind comanda ''cat''. Există multe alte editoare mult mai avansate pentru linia de comandă (''vim'', ''emacs''), însă o să ne concentrăm momentan doar pe editarea simplificată a fișierelor. ==== Operații cu link-uri ==== * Rulați comanda ''ln long/name/goes/here/file hard''. ** Listați fișierele din directorul curent în format lung. ** Modificați conținutul fișierului ''hard''. Folosiți editorul ''nano''. ** Vizualizați conținutul fișierului ''long/name/goes/here/file''. *** Ce observați? * Rulați comanda ''ln -s long/name/goes/here/file symbolic''. ** Listați fișierele din directorul curent în format lung. *** Ce este diferit față de fișierul ''hard''? ** Ce face parametrul ''-s''? Utilizați ''man ln''. ** Vizualizați conținutul fișierelui ''symbolic''. *** Folosiți ''cat'' sau ''nano''. ** Editați conținutul fișierului ''symbolic''. ** Vizualizați conținutul fișierului ''long/name/goes/here/file''. ** Vizualizați conținutul fișierului ''hard''. * Rulați comanda ''mv hard ../'' pentru a muta fișierul mai sus în ierarhie. * Rulați comanda ''mv symbolic ../'' pentru a muta fișierul mai sus în ierarhie. * Schimbați directorul curent folosind ''cd ..''. * Listați fișierele din directorul curent în format lung. ** Ce observați? ** Vizualizați conținutul fișierului ''hard'' și fișierului ''symbolic''. * Mutați cele două fișiere înapoi în directorul ''first_root''. ** Asigurați-vă că cele două link-uri funcționează din nou. * Asigurați-vă că vă aflați din nou în directorul ''first_root''. * Ștergeți fișierul ''long/name/goes/here/file''. ** Vizualizați conținutul fișierului ''hard''. ** Vizualizați conținutul fișierului ''symbolic''. ** Ce observați? * Rulați comanda ''cp hard long/name/goes/here/file'' * Modificați conținutul fișierului ''long/name/goes/here/file''. ** Vizualizați conținutul fișierului ''hard''. ** Vizualizați conținutul fișierului ''symbolic''. ** Ce observați? == Exerciții == Creați următoarea structură de fișierele în home-ul utilizatorului curent: * dir1 (director) ** link (link hard către fișierul long/new/dir/file) * dir2 (director) ** link (link symbolic către fișierul long/new/dir/file) * long (director) ** new (director) *** dir (director) **** file (fișier) * test (director) Scrieți ceva în fișierul ''long/new/dir/file'' și verificați funcționalitatea corectă a link-urilor din ''dir1'' și ''dir2''. Dacă nu funcționează corect, ștergeți link-urile și refaceți până când funcționează. * De ce au apărut/ar fi putut să apară probleme? Afișați recursiv ierarhia creată mai sus. * Folosiți comanda ''ls''. * Folosiți comanda ''tree''. Listați în format lung director-ul ''long''. * Încercați să afișați în format lung informații **doar** despre directorul ''long''. ** Folosiți ''man ls''. * Cât spațiu ocupă directorul ''long''? ** Folosiți ''du'' pentru a afla dimensiunea reală. Încercați să creați link-uri simbolice și hard pentru * directoare * link-uri simbolice * link-uri hard Arhivați întreg conținutul directorului ''long''. * Mutați arhiva într-un alt director * Dezarhivați arhiva ca un director numit ''unzip_long''. == Recapitulare == === Structură de directoare și fișiere === Creați, în directorul home al utilizatorului ''student'', 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 === Find the secret messages === Folosiți fișierul de la link-ul http://swarm.cs.pub.ro/~razvan/r și aflați mesajele secrete. Pentru a descărca fișierul de link-ul de mai sus folosiți comanda wget http://swarm.cs.pub.ro/~razvan/r Folosiți-vă de comanda ''file'' urmată de numele unui fișier pentru a afla informații despre acel fișier. Pentru fișiere comprimate LZOP instalați programul ''lzop'' folosind comanda: sudo apt-get install lzop