User Tools

Site Tools


medium-unix:capitole:capitol-05

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-05 [2016/05/17 22:23]
razvan [Folosire globbing]
medium-unix:capitole:capitol-05 [2016/05/19 10:32] (current)
razvan
Line 11: Line 11:
   * Variabile shell, variabile de mediu   * Variabile shell, variabile de mediu
   * Operatori shell   * Operatori shell
 +  * Caractere speciale shell
   * Globbing   * Globbing
 +
 +==== Bune practici ====
 +
 +  * Comenzi care primesc informații la intrarea standard și comenzi care primesc informații ca parametru: operatorul ''​|''​ vs. expandarea comenzilor ''​%%$(...)%%''​
 +  * Folosire variabile de mediu doar la nevoie; de prefixat comenzi cu inițializare de variabile
 +  * Comenzi folosite pentru afișare și comenzi folosite pentru prelucrare
 +  * Măsoară de două ori și taie o dată :-)
 +  * Activare reverse search ''​tcsh'':​ http://​stackoverflow.com/​a/​7771746
  
 ==== Utilitare folosite ==== ==== Utilitare folosite ====
Line 17: Line 26:
   * ''​bash'',​ ''​lsof''​   * ''​bash'',​ ''​lsof''​
   * ''​echo''​   * ''​echo''​
 +  * ''​type'',​ ''​which''​
   * ''​env'',​ ''​set''​   * ''​env'',​ ''​set''​
 +  * ''​find'',​ ''​stat'',​ ''​pgrep''​
  
 ===== Resurse utile ===== ===== Resurse utile =====
  
   * https://​www.gnu.org/​software/​bash/​manual/​html_node/​Shell-Expansions.html#​Shell-Expansions   * https://​www.gnu.org/​software/​bash/​manual/​html_node/​Shell-Expansions.html#​Shell-Expansions
 +  * http://​tldp.org/​LDP/​GNU-Linux-Tools-Summary/​html/​x11655.htm
  
 ==== Slide-uri ==== ==== Slide-uri ====
Line 83: Line 95:
 Dorim să afișăm fișierele (sau directoarele) cu extensiile ''​.conf''​ sau ''​.d''​ din ''/​etc''​ care nu încep cu ''​a,​ b, c'':​ Dorim să afișăm fișierele (sau directoarele) cu extensiile ''​.conf''​ sau ''​.d''​ din ''/​etc''​ care nu încep cu ''​a,​ b, c'':​
 <code bash> <code bash>
-student@midgard:​~$ ​ls -ld /​etc/​[^abc]*{.conf,​.d}+ls -ld /​etc/​[^abc]*{.conf,​.d}
 </​code>​ </​code>​
  
Line 111: Line 123:
 </​code>​ </​code>​
  
 +Ca să testați deschideți un tab nou de terminal; la deschiderea terminalului vi se va crea shell-ul și vi se va afișa mesajul din ''/​etc/​bash.bashrc''​.
 ==== Folosire globbing ==== ==== Folosire globbing ====
  
Line 127: Line 140:
  
 Creați o arhivă ''​tar.gz''​ cu fișierele din ierarhia ''/​etc/''​ care au extensia ''​.conf''​ și au dimensiunea mai mare de ''​5KB''​. Creați o arhivă ''​tar.gz''​ cu fișierele din ierarhia ''/​etc/''​ care au extensia ''​.conf''​ și au dimensiunea mai mare de ''​5KB''​.
 +
 +<note tip>
 +Folosiți comanda ''​tar''​ și apoi expandare de comandă ''​find''​. Vedeți și exemplele de comenzi de la demo-ul legat de expandarea comenzilor.
 +</​note>​
  
 Creați o arhivă ''​zip''​ cu fișierele din ierarhia ''/​usr/​include''​ care conțin șirul ''​epoll'',​ Creați o arhivă ''​zip''​ cu fișierele din ierarhia ''/​usr/​include''​ care conțin șirul ''​epoll'',​
Line 134: Line 151:
 </​note>​ </​note>​
  
 +==== Afișare caractere speciale ====
 +
 +Inițializați variabila ''​text''​ la un șir de caractere.
 +
 +<note tip>
 +Adică rulați ceva de genul:
 +<​code>​
 +text="​mellon"​
 +</​code>​
 +</​note>​
 +
 +Afișați la ieșirea standard mesajul ''​%%"​Variabila text are valoarea '"​...'"​. Valorea poate fi actualizata."​%%''​. În mesaj, toate caracterele ghilimele (''"''​) și apostrof (''​%%'​%%''​) se vor afișa întocmai. Iar în loc de ''​...''​ puneți valoarea variabile ''​text''​.
 +
 +<note tip>
 +Pentru a afișa ghilimele atunci când deja vă aflați între ghilimele va trebui să le escapați. Escaparea se face folosind ''​\''​ (//​backslash//​).
 +
 +Alternativa este să închideți ghilimele inițiale și apoi să afișați ghilimelele pe care vreți să afișați între apostrofuri. Invers pentru escaparea de apostrofuri.
 +
 +Nu puteți escapa apostrofuri câtă vreme vă aflați între apostrofuri.
 +
 +De exemplu dacă vrem să afișăm șirul ''​%%ana'​are"​mere%%''​ putem folosi
 +<​code>​
 +echo ana"'"​are'"'​mere
 +</​code>​
 +
 +Urmăriți ce face comanda
 +<​code>​
 +echo "'"'"'​ana-are-mere'"'"'"​
 +</​code>​
 +</​note>​
 +==== Afișare fișiere localizate ====
 +
 +Folosiți comanda ''​locate''​ pentru a afișa fișierele din sistem care au extensia ''​.conf''​.
 +
 +Pentru fișierele de mai sus afișați directoarele din care fac parte.
 +
 +<note tip>
 +Folosiți comanda ''​dirname''​ pentru extragerea directoarelor din lista de fișiere extrasă mai sus. Folosiți expandarea comenzilor, adică construcția ''​%%$(...)%%'',​ în conjuncție cu comanda ''​locate''​ rulată mai sus.
 +</​note>​
 +
 +Eliminați duplicatele.
 +
 +<note tip>
 +Folosiți operatorul ''​|''​ pentru a redirecta comanda de mai sus către comanda ''​sort -u''​.
 +</​note>​
 +
 +Pentru directoarele de mai sus afișați numele directorului și inode-ul, separate prin virgulă ('',''​).
 +
 +<note tip>
 +Folosiți comanda ''​stat''​ cu opțiunea ''​-c''​ și formatul corespunzător.
 +</​note>​
 +
 +**Bonus**: Sortați directoarele de mai sus în ordinea inode-ului. Afișați numele directorului și inode-ul (separate prin virgulă ('',''​)).
 +
 +==== 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.
 +
 +<note tip>
 +Sortarea poate fi simplă, nu este nevoie de sortare numerică. Formatul datei afișat de ''​stat''​ permite sortare de orice fel.
 +</​note>​
 +
 +==== Creare fișiere ====
 +
 +Creați 100 de fișiere cu numele ''​%%"​myfile-XY.txt"​%%'',​ unde ''​XY''​ este indexul fișierului între ''​00''​ și ''​99''​.
 +
 +<note tip>
 +Folosiți comenzile ''​seq''​ și ''​touch''​.
 +</​note>​
 +
 +<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>​
 +
 +==== Expandare aritmetică ====
 +
 +Din fișierul de [[http://​lpic.ro/​res/​skel/​sandbox.kext_iOS9.3|aici]] dorim să extragem partea care începe de la offset-ul ''​0x13000''​ (în hexazecimal) până la sfârșit. Puneți conținutul într-un alt fișier. Afișați conținutul primilor 16 octeți din fișier în format hexazecimal;​ output-ul trebuie să fie de forma ''​0080 b67f 6a01 7900 1180 0000 b57f b57f''​.
 +
 +<note tip>
 +Pentru a extrage o parte dintr-un fișier folosiți comanda ''​dd''​. Folosiți opțiunea ''​skip''​ a ''​dd''​.
 +
 +Pentru că operați pe octeți, nu pe blocuri, va trebui să configurați pentru ''​dd''​ dimensiunea blocului la ''​1''​ folosind opțiunea ''​bs''​.
 +</​note>​
 +
 +<note tip>
 +Dacă avem un număr în hexazecimal putem folosi construcția de expandare aritmetică ''​%%$(...)%%''​ pentru a-l converti în zecimal. De exemplu:
 +<​code>​
 +user@hostname:​~$ echo $((0x10)), $((0x20)), $((0x100))
 +16, 32, 256
 +</​code>​
 +</​note>​
medium-unix/capitole/capitol-05.1463512983.txt.gz · Last modified: 2016/05/17 22:23 by razvan