User Tools

Site Tools


basic-unix:capitole:capitol-08

Differences

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

Link to this comparison view

Next revision
Previous revision
basic-unix:capitole:capitol-08 [2016/05/15 21:57]
razvan created
basic-unix:capitole:capitol-08 [2016/05/26 19:09] (current)
razvan [Creare fișiere]
Line 1: Line 1:
-====== ​XTODO ======+====== ​8Înlănțuirea comenzilor ​======
  
-TODO+Comenzile în shell pot fi înlănțuite pentru a obține noi funcționalități. Anumite comenzi în shell pot primi diverse argumenter pentru a le altera funcționarea,​ în vreme ce altele primesc informații la standard input. Un one liner poate combina funcționalități precum folosirea operatorului ''​|''​ (//pipe//) sau expandarea comenzii (''​%%$(...)%%''​) pentru a crea rapid noi funcționalități în linia de comandă.
  
 ===== Subiecte abordate ===== ===== Subiecte abordate =====
  
-  * TODO +  * Expandarea comenzilor (''​%%$(...)%%''​) 
-  * TODO +  * Operatorul ''​|''​ 
-  * TODO+  * One linere 
 +  * Expresii regulate
  
 ==== Utilitare folosite ==== ==== Utilitare folosite ====
  
-  * TODO +  * ''​grep'',​ ''​tr'',​ ''​cut''​ 
-  * TODO +  * ''​basename''​ 
-  * TODO+  * ''​dd'',​ ''​split''​
  
 ===== Resurse utile ===== ===== Resurse utile =====
Line 24: Line 25:
 ==== Demo-uri ==== ==== Demo-uri ====
  
-TODO+=== Demo: Folosire filtre de bază === 
 + 
 +Folosire ''​head'',​ ''​tail'',​ ''​sort'',​ ''​uniq'',​ ''​cut'',​ ''​tr'',​ ''​wc''​ 
 + 
 +Generare parolă random 
 + 
 +=== Demo: Expresii regulate === 
 + 
 +Exemple de expresii regulate 
 + 
 +Câte directive ''#​include''​ conțin fișierele din ''/​usr/​include''?​ Câte directive ''#​include''​ conțin fișierele de tip header C++ (''​.hpp''​)?​ 
 + 
 +=== Demo: Folosire avansată grep și sort === 
 + 
 +Afișați fișierele din ierarhia ''/​usr/​include''​ în ordinea numărului de apariții ale **cuvântului** ''​FILE''​. 
 + 
 +=== Demo: Expandare comenzi === 
 + 
 +<code bash> 
 +stat -c "​%s"​ $(find /etc/ -type f -name '​*.conf'​ -size +5k) 
 +lsof -p $(pgrep bash | tr '​\n'​ ','​) 
 +</​code>​ 
 + 
 +=== Demo: Globbing === 
 + 
 +Dorim să afișăm toate fișierele cu extensia ''​.conf''​ din ''/​etc'',​ care încep cu ''​a,​ b, c, d''​ sau ''​e'':​ 
 +<code bash> 
 +ls -l /​etc/​[a-e]*.conf 
 +</​code>​ 
 + 
 +Dorim să afișăm fișierele (sau directoarele) cu extensiile ''​.conf''​ sau ''​.d''​ din ''/​etc'':​ 
 +<code bash> 
 +ls -ld /​etc/​*{.conf,​.d} 
 +</​code>​ 
 +De ce am folosit parametrul ''​-d''​ la ''​ls''?​ 
 + 
 +Dorim să afișăm fișierele (sau directoarele) cu extensiile ''​.conf''​ sau ''​.d''​ din ''/​etc''​ care nu încep cu ''​a,​ b, c'':​ 
 +<code bash> 
 +ls -ld /​etc/​[^abc]*{.conf,​.d} 
 +</​code>​ 
 + 
 +==== Expandare comenzi ==== 
 + 
 +Creați o arhivă ''​.tar.gz''​ cu toate fișierele din ''/​usr/​include''​ mai mari de ''​10KB''​. 
 + 
 +Creați o arhivă ''​.zip''​ cu toate fișierele din ''/​usr/​include''​ mai mari de ''​10KB''​. 
 + 
 +Creați o arhivă ''​.zip''​ cu toate fișierele din ''/​usr/​include''​ mai mari de ''​10KB''​ accesate în ultimele 3 zile. 
 + 
 +<note tip> 
 +Pentru accesare în ultimele 3 zile, folosiți opțiunea ''​-atime''​ a comenzii ''​find''​. 
 +</​note>​ 
 + 
 +==== Informații despre dispozitive de tip caracter ==== 
 + 
 +Pentru dispozitivele de tip caracter din ''/​dev''​ afișați numele, majorul și minorul. 
 + 
 +<note tip> 
 +Folosiți ''​find''​ cu opțiunea ''​-type''​ și parametrul corespunzător pentru a extrage dispozitivele de tip caracter. 
 + 
 +Folosiți ''​stat''​ cu opțiunile de formatare corespunzătoare și expandarea comenzii (''​%%$(...)%%''​) în conjuncție cu comanda ''​find''​ pentru afișarea numelui, majorului și minorului. 
 +</​note>​ 
 + 
 +**Bonus**: Sortați-le în funcție de major. 
 + 
 +<note tip> 
 +Pentru sortare folosiți comanda ''​sort''​. Va trebui să specificați separatorul de câmpuri (folosind opțiunea ''​-t''​) și cheia de sortare (folosind opțiunea ''​-k''​). Pentru că avem cheie de sortare un număr va trebui să faceți sortare **numerică**. 
 +</​note>​ 
 + 
 +==== Alte informații despre dispozitive de tip caracter ==== 
 + 
 +Câte dispozitive de tip caracter se găsesc în fiecare director din ierarhia ''/​dev''?​ 
 + 
 +<note tip> 
 +Folosiți ''​find''​ pentru a extrage dispozitivele de tip caracter. 
 + 
 +Folosiți ''​dirname''​ și expandarea comenzii (''​%%$(...)%%''​) în conjuncție cu comanda ''​find''​ de mai sus pentru a extrage doar numele directoarelor. 
 + 
 +Prelucrați output-ul de mai sus prin comanda ''​sort''​ pentru a-l sorta. 
 + 
 +Apoi folosiți output-ul astfel prelucrat prin comanda ''​uniq''​ cu opțiunea ''​-c''​ pentru a afișa numărul de apariții al fiecărui director. 
 +</​note>​ 
 + 
 +==== Numele paginilor de manual dintr-o anumită secțiune ==== 
 + 
 +Afișați numele paginilor de manual din secțiunea 5. Numele sunt partea fără extensie din fișierele existente în directorul ''/​usr/​share/​man/​man5/''​. De exemplu, pentru fișierul ''​issue.5.gz'',​ numele este ''​issue''​. 
 + 
 +Recomandăm pașii de mai jos. 
 + 
 +Construiți glob-ul care să afișeze toate fișierele cu extensia ''​.5.gz''​ din directorul ''/​usr/​share/​man/​man5/''​. 
 + 
 +<note important>​ 
 +**Nu** este nevoie să folosiți ''​find'',​ puteți folosi un glob. 
 +</​note>​ 
 + 
 +Folosiți comanda ''​basename''​ pentru a extrage doar numele de bază al fișierului. 
 + 
 +<note tip> 
 +Comanda ''​basename''​ ca argumente numele fișierulelor. Pentru a elimina extensia folosiți opțiunea ''​-s''​ a comenzii ''​basename''​. 
 + 
 +Opțiunea ''​-s''​ a comenzii ''​basename''​ primește ca argument extensia ce trebuie scoasă. Trebuie să scoateți extensia ''​5.gz''​. 
 +</​note>​ 
 + 
 +Din lista de mai sus, extrageți doar comenzile care încep cu o anumită literă. Adică din outputul de mai sus, folosiți o comandă de forma ''​grep '​^a'''​ pentru a extrage liniile care încep cu litera ''​a''​ folosind ''​grep''​. 
 + 
 +==== Afișare fișiere executabile pentru procese ==== 
 + 
 +Afișați procesele al căror proces părinte este ''​init'',​ procesul cu PID-ul ''​1''​. 
 + 
 +Pentru procesele de mai sus afișați **doar** comanda completă. 
 + 
 +Filtrați doar acele comenzi care încep cu ''/''​ (adică este calea completă către executabil). 
 + 
 +Selectați **doar** calea către executabil, fără argumente către acesta. 
 + 
 +Pentru executabilele de mai sus afișați numele și timpul ultimei schimbării (//change time//), separate prin virgulă ('',''​). 
 + 
 +<note tip> 
 +Folosiți comanda ''​stat''​. 
 +</​note>​ 
 + 
 +Sortați executabilele de mai sus în ordinea timpului ultimei schimbări.
  
-TODO+<note tip> 
 +Sortarea poate fi simplă, nu este nevoie de sortare numerică. Formatul datei afișat de ''​stat''​ permite sortare de orice fel. 
 +</​note>​
  
-==== TODO 2 ====+==== Creare fișiere ​====
  
-TODO+Creați 100 de fișiere cu numele ''​%%myfile-XY.txt%%'',​ unde ''​XY''​ este indexul fișierului între ''​00''​ și ''​99''​.
  
-==== TODO 2 ====+<note tip> 
 +Folosiți comenzile ''​seq''​ și ''​touch''​. 
 +</​note>​
  
-TODO+<note tip> 
 +Ca model folosiți-vă de comanda<​code>​ 
 +seq -f "​%02g"​ 1 100 
 +</​code>​
  
 +Între ghilimele poate apărea un șir complet. Gândiți-vă că trebuie să generați șiruri de forma ''​%%myfile-XY.txt%%''​.
 +</​note>​
basic-unix/capitole/capitol-08.1463338625.txt.gz · Last modified: 2016/05/15 21:57 by razvan