User Tools

Site Tools


medium-unix:capitole:capitol-06

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
medium-unix:capitole:capitol-06 [2016/05/19 11:55]
razvan [Afișare informații despre fișiere]
medium-unix:capitole:capitol-06 [2016/05/19 13:04] (current)
razvan [Generare parole aleatoare]
Line 221: Line 221:
  
 <note tip> <note tip>
-Folosiți ​''​find''​ cu opțiunea ''​-exec'', ​''​stat'' ​(cu opțiunea ''​-c''​ și formatul necesar ​pentru afișarea numelui ​și dimensiuni ca argument către opțiunea ''​-exec''​ a lui ''​find''​), ''​sort''​ și ''​head''​.+Folosiți find pentru a extrage fișierele. Apoi folosiți expandarea comenzii și ''​stat''​ pentru ​afișa doar numele ​și dimensiunea fișierului. Adică o construcție de forma 
 +<​code>​ 
 +stat -c ... $(find ...) 
 +</​code>​
  
-Exemplu ​de rulare pentru ''​find'' ​cu ''​-exec'' ​este<​code>​ +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: 
-find /etc/ -type f -exec ls -l {} \;+<​code>​ 
 +stat -c ... $(find ...) | sort ...
 </​code>​ </​code>​
-</​note>​ 
  
 +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>​
 ==== Construire fișier cu informații binare ==== ==== Construire fișier cu informații binare ====
  
 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 244: 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 261: 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>​
medium-unix/capitole/capitol-06.1463648133.txt.gz · Last modified: 2016/05/19 11:55 by razvan