This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
basic-unix:capitole:capitol-09 [2016/05/15 22:06] razvan [X. TODO] |
basic-unix:capitole:capitol-09 [2016/05/27 11:22] (current) razvan [Generare parole aleatoare] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== 9. Aplicații practice ====== | ====== 9. Aplicații practice ====== | ||
- | TODO | + | Ne propunem să folosim comenzi și înlănțuirea comenzilor pentru a realiza funcționalități practice la niveul liniei de comandă. |
- | ===== Subiecte abordate ===== | + | ===== Resurse utile ===== |
- | * TODO | ||
* TODO | * TODO | ||
* TODO | * TODO | ||
- | ==== Utilitare folosite ==== | + | ===== Exerciții ===== |
- | * TODO | + | ==== Fișiere ordonate după dimensiune ==== |
- | * TODO | + | |
- | * TODO | + | |
- | ===== Resurse utile ===== | + | 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. |
- | * TODO | + | <note tip> |
- | * TODO | + | 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 |
+ | <code> | ||
+ | stat -c ... $(find ...) | ||
+ | </code> | ||
- | ===== Exerciții ===== | + | 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: |
+ | <code> | ||
+ | stat -c ... $(find ...) | sort ... | ||
+ | </code> | ||
+ | |||
+ | 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: | ||
+ | <code> | ||
+ | stat -c ... $(find ...) | sort ... | tail | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | ==== 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''. | ||
+ | |||
+ | <note important> | ||
+ | **Nu** este nevoie să creați fișiere. Le creează comanda ''split''. | ||
+ | |||
+ | **Nu** este nevoie de ''for'', ''seq'' sau ''touch''. | ||
+ | </note> | ||
+ | |||
+ | <note tip> | ||
+ | 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. | ||
+ | </note> | ||
+ | |||
+ | <note tip> | ||
+ | ''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 | ||
+ | <code> | ||
+ | dd if=/dev/urandom bs=... count=... | split ... - <prefix> | ||
+ | </code> | ||
+ | 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) | ||
+ | |||
+ | </note> | ||
+ | |||
+ | ==== Generare parole aleatoare ==== | ||
+ | |||
+ | Folosiți conținutul fișierului ''/dev/urandom'' pentru a genera o parolă aleatoare de 16 caractere. | ||
- | ==== Demo-uri ==== | + | <note tip> |
+ | Folosiți comanda ''tr'' cu opțiunile ''-d'' și ''-c'' pentru a extrage doar caractere tipările (litere mici, litere mari, numere). | ||
- | TODO | + | Folosiți comanda ''head'' cu opțiunea ''-c'' pentru a extrage doar ''16'' caractere din output-ul anterior. |
+ | </note> | ||
- | TODO | + | Actualizați comanda de mai sus pentru a genera ''20'' de parola a câte ''16'' caractere. |
- | ==== TODO 2 ==== | + | <note tip> |
+ | Pentru a sparge un șir lung în linii, puteți folosi comanda ''fold''. | ||
- | TODO | + | 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 |
+ | <code> | ||
+ | <command> | fold | ||
+ | </code> | ||
+ | unde ''<command>'' este o comandă care generează informații pe care apoi să le prelucreze comanda ''fold''. | ||
- | ==== TODO 2 ==== | + | 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 |
+ | <code> | ||
+ | cat /dev/urandom | ... | fold -w 16 | ||
+ | </code> | ||
+ | </note> | ||
- | TODO | + | ==== Arhiva .tar.bz2 ==== |
+ | <code> | ||
+ | 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) | ||
+ | </code> |