Table of Contents

3. Operații avansate 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

Utilitare folosite

Bune practici

Slide-uri

Slide-uri capitol 3

Exerciții

Demo-uri

Folosirea comenzii find cu diverși parametri pentru a parcurge sistemul de fișiere. Afișarea executabilelor cu bitul de setuid activat din directoarele ce conțin executabile (/bin, /sbin, /usr/bin, /usr/sbin).

Folosirea comenzii dd pentru a copia chunk-uri de fișiere. Opțiunile bs, count, skip, seek.

Exemplificarea globbing-ului

Exercițiu 1

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).

Exercițiu 2

Listați primele 10 fișiere obișnuite (regular files) din ierarhia /etc (adică din toate directoarele, subdirectoarele și subdirectoarele acestora etc.) sortate în ordinea dimesiunii ocupate de fiecare fișier.

Folosiți find cu opțiunea -exec, stat (cu opțiunea -c și formatul necesar pentru afișarea dimensiunii și numelui ca argument către opțiunea -exec a lui find), sort și head.

Exemplu de rulare pentru find cu -exec este

find /etc/ -type f -exec ls -l {} \;

Exercițiu 3

Creați un fișier care să conțină 2048 de octeți de zero (din /dev/zero) urmați de 2048 de octeți aleatori (din /dev/urandom) urmați de 2048 de octeți de zero și apoi urmați de 2048 de octeți din fișierul /bin/false de la offsetul 4096 al fișierului.

Argumentul pentru opțiunile skip și seek ale comenzii dd este dat în număr de blocuri, nu în număr de octeți.

Exercițiu 4

Folosiți /dev/urandom, dd și split pentru a genera, într-un one liner, 100 de fișiere a câte 100 de octeți aleatori cu numele partXYZ.dat unde XYZ sunt valorile 000, 001, …, 099. Adică part000.dat, part001.dat, …, part099.dat.

dd poate scrie la standard output în absența opțiunii of.

split poate citi de la standard input dacă se folosește construcția - (semnul minus) pentru numele fișierului.

Exercițiu 5

Am văzut în secțiunea de Demo că putem folosi anumite caractere ce țin locul unor bucăți de text, de exemplu caracterul *. De exemplu, dacă dorim să listăm toate fișierele din /etc care încep cu stringul ssh putem folosi comanda:

training@box:~$ ls /etc/ssh*

După cum observați, caracterul * ține loc pentru "oricâte și orice caractere". Procedați asemănător și afișați fișierele sau directoarele din /etc cu extensia .conf.

Realizați o arhivă de tipul zip în directorul home al utilizatorului training (/home/training) care să conțină toate fișierele și directoarele din /etc/ care conțin stringul conf în numele lor.

Este foarte probabil ca printre fișierele și directoarele găsite să existe directoare care nu sunt goale. Pentru a arhiva și conținutul acestora trebuie să specificăm acest lucru explicit comenzii zip. Căutați în output-ul comenzii

zip --help

după opțiunea care trece recursiv prin directoare (recurse into directories).

Comanda unzip dezarhivează o arhivă .zip dar are și o opțiunea de listare a conținutului acelei arhive fără a o dezarhiva însă. Identificați acea opțiune.