This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
medium-unix:capitole:capitol-06 [2016/05/19 11:59] razvan [Fișiere ordonate după dimensiune] |
medium-unix:capitole:capitol-06 [2016/05/19 13:04] (current) razvan [Generare parole aleatoare] |
||
---|---|---|---|
Line 239: | Line 239: | ||
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. | 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. | ||
+ | |||
+ | <note tip> | ||
+ | Folosim opțiunile ''skip'' și ''seek'' ale ''dd'' pentru a putea sări peste regiuni din fișierul de la intrare și din fișierul de la ieșire. Mai multe informații mai jos. | ||
+ | </note> | ||
+ | |||
+ | <note tip> | ||
+ | Sintaxa comenzii poate fi la modul | ||
+ | <code> | ||
+ | dd if=/dev/zero of=myfile.out bs=512 count=4 | ||
+ | </code> | ||
+ | Comanda de mai sus copiază din fișierul de intrare (''if'': //input file//) ''/dev/zero'' la fișierul de ieșire (''of'': //output file//) ''myfile.out'', un număr (//count//) de ''4'' blocuri de dimensiune ''512'' (''bs'': //block size//). | ||
+ | |||
+ | Pentru exercițiul curent este recomandat să folosiți dimensiunea blocului de ''2048'' de octeți (''bs=2048''). | ||
+ | </note> | ||
+ | |||
+ | <note tip> | ||
+ | Ca să investigăm conținutul binar al unui fișier folosind comanda ''xxd'' într-o construcție de forma | ||
+ | <code> | ||
+ | xxd myfile.out | ||
+ | </code> | ||
+ | Output-ul este pe două zone: prima zonă (din stânga) sunt afișate datele în format hexazecimal, iar în a doua zonă (din dreapta) în format ASCII, acolo unde se poate. | ||
+ | </note> | ||
<note important> | <note important> | ||
Argumentul pentru opțiunile ''skip'' și ''seek'' ale comenzii ''dd'' este dat în număr de blocuri, **nu** în număr de octeți. | Argumentul pentru opțiunile ''skip'' și ''seek'' ale comenzii ''dd'' este dat în număr de blocuri, **nu** în număr de octeți. | ||
- | </note> | ||
+ | Opțiunea ''seek'' este pentru a sări peste zone din fișierul de ieșire, iar opțiunea ''skip'' este pentru a sări peste zone din fișierul din intrare. | ||
+ | </note> | ||
==== Generare fișiere multiple și conținut aleator ==== | ==== 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''. | 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> | <note tip> | ||
Line 252: | Line 286: | ||
''split'' poate citi de la standard input dacă se folosește construcția ''-'' (semnul minus) pentru numele fișierului. | ''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> | </note> | ||
==== Căutare cu grep ==== | ==== Căutare cu grep ==== | ||
- | Folosiți ''grep'' pentru a selecta alias-urile cu destinația de forma ''nume.prenume@gmail.com'' din fișierul ''liases'' din [[http://koala.cs.pub.ro/training/res/medium-unix/arc/cap-06-res.zip|arhiva capitolului]]. Intrările din fișierul ''aliases'' se consideră de forma ''alias: destinație''. | + | Folosiți ''grep'' pentru a selecta alias-urile cu destinația de forma ''nume.prenume@gmail.com'' din fișierul ''aliases'' din [[http://koala.cs.pub.ro/training/res/medium-unix/arc/cap-06-res.zip|arhiva capitolului]]. Intrările din fișierul ''aliases'' se consideră de forma ''alias: destinație''. |
==== Generare parole aleatoare ==== | ==== Generare parole aleatoare ==== | ||
Line 269: | Line 319: | ||
Actualizați comanda de mai sus pentru a genera ''20'' de parola a câte ''16'' caractere. | Actualizați comanda de mai sus pentru a genera ''20'' de parola a câte ''16'' caractere. | ||
+ | |||
+ | <note important> | ||
+ | Recomandăm să **nu** folosiți ''for'' (merge, dar vrem să folosim ''fold'' :-P). Vedeți indicațiile legate de folosirea comenzii ''fold'' de mai jos. | ||
+ | </note> | ||
<note tip> | <note tip> | ||
- | Extrageți ''20*16 = 320'' caractere aleatoare și apoi folosiți comanda ''fmt'' cu opțiunea ''-w'' pentru a le grupa în seturi de câte ''16''. | + | 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''. | ||
+ | |||
+ | 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> | </note> |