User Tools

Site Tools


basic-unix:capitole:capitol-09

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

Folosiți ca ultimele două argumente pentru comanda split construcția - (semnul minus) însemnând că citește de la standard input și <prefix> 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

<command> | fold

unde <command> 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)
basic-unix/capitole/capitol-09.txt · Last modified: 2016/05/27 11:22 by razvan