= 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