====== 9. Aplicații practice ======
Ne propunem să folosim comenzi și înlănțuirea comenzilor pentru a realiza funcționalități practice la niveul liniei de comandă.
===== Resurse utile =====
* TODO
* TODO
===== Exerciții =====
==== Fișiere ordonate după dimensiune ====
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 pentru a extrage fișierele. Apoi folosiți expandarea comenzii și ''stat'' pentru a afișa doar numele și dimensiunea fișierului. Adică o construcție de forma
stat -c ... $(find ...)
Apoi filtrați output-ul comenzii de mai sus cu ajutorul comenzii ''sort'' pentru a sorta **numeric** în funcție de dimensiunea fișierului. Adică o construcție de forma:
stat -c ... $(find ...) | sort ...
Apoi filtrați output-ul prin comanda ''tail'' pentru a extrage doar primele ''10'' fișiere, în ordinea dimensiunii. Adică o construcție de forma:
stat -c ... $(find ...) | sort ... | tail
==== Generare fișiere multiple și conținut aleator ====
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''.
**Nu** este nevoie să creați fișiere. Le creează comanda ''split''.
**Nu** este nevoie de ''for'', ''seq'' sau ''touch''.
Pentru a genera ''100'' de fișiere a câte ''100'' de octeți va trebui să generați cu comanda ''dd'' conținut de ''100 x 100 = 10000'' (zece mii) de octeți.
''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.
Adică veți trece output-ul comenzii ''dd'' în input-ul comenzii ''split''.
Adică trebuie să aveți o construcție de forma
dd if=/dev/urandom bs=... count=... | split ... -
Folosiți ca **ultimele** două argumente pentru comanda ''split'' construcția ''-'' (semnul minus) însemnând că citește de la standard input și '''' reprezentând prefixul pe care vreți să îl puneți fișierelor nou create, adică șirul ''part''.
Pentru ''split'' trebuie să folosiți opțiunile care:
* specifică cât de mulți octeți să fie în fiecare fișier generat
* specifică prefixul fișierelor nou create (în cazul nostru ''part'')
* specifică sufixul suplimentar al fișierelor nou create (în cazul nostru ''.dat''
* specifică faptul că se folosește sufix numeric (''XYZ'' este numeric)
* specifică faptul că se folosește sufix pe 3 caractere (''XYZ'' are trei caractere)
==== Generare parole aleatoare ====
Folosiți conținutul fișierului ''/dev/urandom'' pentru a genera o parolă aleatoare de 16 caractere.
Folosiți comanda ''tr'' cu opțiunile ''-d'' și ''-c'' pentru a extrage doar caractere tipările (litere mici, litere mari, numere).
Folosiți comanda ''head'' cu opțiunea ''-c'' pentru a extrage doar ''16'' caractere din output-ul anterior.
Actualizați comanda de mai sus pentru a genera ''20'' de parola a câte ''16'' caractere.
Pentru a sparge un șir lung în linii, puteți folosi comanda ''fold''.
Comanda ''fold'' împarte informațiile primite la intrarea standard în linii pe care le afișează la ieșirea standard. Poate să extragă linii de dimensiune dată. Uzual se folosește în forma
| fold
unde '''' este o comandă care generează informații pe care apoi să le prelucreze comanda ''fold''.
Extrageți ''20*16 = 320'' caractere aleatoare și apoi folosiți comanda ''fold'' cu opțiunea ''-w'' pentru a le grupa în seturi de câte ''16''. Adică o construcție de forma
cat /dev/urandom | ... | fold -w 16
==== Arhiva .tar.bz2 ====
tar -c -j -f top-files.tar.bz2 $(stat -c "%n %s" $(find /usr/share/man -type f) | sort -k 2n | tail -20 | cut -d ' ' -f 1) $(stat -c "%n %s" $(find /etc -type f) | sort -k 2n | tail -30 | cut -d ' ' -f 1)