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:18] razvan [TODO 2] |
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 122: | Line 135: | ||
ls practic/*/*.png | ls practic/*/*.png | ||
</code> | </code> | ||
- | Pentru redirectare într-un fișier folosiți operatorul ''>''. | ||
</note> | </note> | ||
+ | ==== Expandarea comenzii ==== | ||
+ | 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'', | ||
+ | |||
+ | <note tip> | ||
+ | Folosiți opțiunea ''-r'' a comenzii ''grep'' pentru a căuta recursiv într-o ierarhie. Folosiți opțiunea ''-l'' a comenzii ''grep'' pentru a afișa doar numele fișirelor găsite. | ||
+ | </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> |