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-05 [2016/05/17 22:28] razvan [Utilitare folosite] |
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 24: | Line 33: | ||
* 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 85: | 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 113: | 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 129: | 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 139: | Line 154: | ||
Inițializați variabila ''text'' la un șir de caractere. | 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''. | 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 ==== | ==== Afișare fișiere localizate ==== | ||
Folosiți comanda ''locate'' pentru a afișa fișierele din sistem care au extensia ''.conf''. | 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. Eliminați duplicatele. | + | Pentru fișierele de mai sus afișați directoarele din care fac parte. |
<note tip> | <note tip> | ||
- | Folosiți comanda ''dirname'' pentru extragerea directoarelor. | + | 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> | </note> | ||
Line 155: | Line 200: | ||
<note tip> | <note tip> | ||
- | Folosiți comanda ''stat''. | + | Folosiți comanda ''stat'' cu opțiunea ''-c'' și formatul corespunzător. |
</note> | </note> | ||
Line 196: | Line 241: | ||
Între ghilimele poate apărea un șir complet. Gândiți-vă că trebuie să generați șiruri de forma ''%%myfile-XY.txt%%''. | Î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> | </note> |