This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
linux-admin:capitole:capitol-07 [2016/09/29 09:47] mihaic [7. Redirectări] |
linux-admin:capitole:capitol-07 [2016/10/03 09:18] (current) mihaic [Exercițiu 2] |
||
---|---|---|---|
Line 20: | Line 20: | ||
==== Demo-uri ==== | ==== Demo-uri ==== | ||
+ | === Lucrul cu redirectari === | ||
Redirectare ''stdout'' (standard output, în general mesaje afișate prin comenzi similare cu ''printf'' din C). De exemplu, într-un sistem în care avem multe procese, e greu sa urmărim direct în consolă output-ul comenzii ''ps'': | Redirectare ''stdout'' (standard output, în general mesaje afișate prin comenzi similare cu ''printf'' din C). De exemplu, într-un sistem în care avem multe procese, e greu sa urmărim direct în consolă output-ul comenzii ''ps'': | ||
Line 74: | Line 75: | ||
</note> | </note> | ||
+ | === Investigarea redirectărilor === | ||
+ | |||
+ | Putem folosi ''lsof'' pentru a verifica modul în care redirectarea afectează descriptorii unui proces. | ||
+ | |||
+ | Într-un tab de terminal porniți un proces ''sleep'' folosind comanda: ''sleep 100''. | ||
+ | |||
+ | În alt tab, pentru a investiga descriptorii procesului sleep folosim comanda ''lsof -p $(pidof sleep)''. | ||
+ | |||
+ | Observăm că descriptorii standard referă terminalul în care a fost rulată comanda, moșteniți de la terminalul din shell-ul folosit. | ||
+ | |||
+ | Acum să invesigăm procesul sleep cu redictări în diverse fișiere. Folosiți comanda ''sleep 100 < /dev/zero > /dev/null 2> error.txt'' | ||
+ | |||
+ | Folosim comanda lsof anterioară pentru a investiga descriptorii procesului sleep. Putem observa unde pointează descriptorii standard de fișier pentru procesul pornit. | ||
==== Exercițiu 1 ==== | ==== Exercițiu 1 ==== | ||
Line 87: | Line 101: | ||
==== Exercițiu 2 ==== | ==== Exercițiu 2 ==== | ||
+ | Schimbați directorul curent în directorul /home/training. Folosiți comanda ''echo'' pentru a afișa pe ecran textul ''al doilea exercițiu''. Redirectați acest text într-un fișier numit ''ex2.txt''. | ||
+ | Folosiți comanda echo pentru a adăuga textul ''e mai lung decat primul'' în fișierul ''ex2.txt'', fără a șterge conținutul său. | ||
+ | Scriind comanda gcc fără niciun parametru, veți primi un mesaj de eroare. Redirectați acest mesaj de eroare folosind un operator de redirectare într-un fişier numit ''gcc_error.txt''. Afișați conținutul fișierului pentru a confirma. | ||
+ | |||
+ | Redirectați ieșirea standard a comenzii ''strace -e open ls /lib'' în fișierul ''strace.out''. | ||
+ | |||
+ | Redirectați ieșirea de eroare standard a comenzii ''strace -e open ls /lib'' în fișierul ''strace.err''. | ||
+ | |||
+ | Redirectați atât ieșirea standard cât și ieșirea de eroare standard a comenzii ''strace -e open ls /lib'' în fișierul ''strace.both''. | ||
+ | |||
+ | Filtrați (folosind ''grep libc'') ieșirea standard a comenzii ''strace -e open ls /lib'' și apoi redirectați-o în ''strace-new.out'' iar ieșirea de eroare standard în ''strace-new.err''. | ||
+ | |||
+ | Filtrați (folosind ''grep proc'') ieșirea de eroare standard a comenzii ''strace -e open ls /lib'' și apoi redirectați-o în ''strace-newer.err'' iar ieșirea standard în ''/dev/null''. | ||
+ | |||
+ | Adăugați output-ul generat la ieșirea de eroare standard și ieșirea standard a comenzii ''strace -e open ls /lib'' în fișierul ''strace.log''. O nouă rulare a comenzii va conduce la adăugarea de informații la sfârșitul acestui fișier. | ||
+ | |||
+ | Folosiți utilitarul ''tee'' atât pentru a afișa la ieșirea standard cât și a scrie în fișierul ''free.txt'' ieșirea comenzii ''free''. Scrierea în fișier trebuie făcută fără a suprascrie ce era deja scris. (Hint: ''man tee'', append) | ||
+ | |||
+ | Explicați diferența de comportament între următoarele două comenzi: | ||
+ | <code bash> | ||
+ | cat / 2>&1 > error.txt | ||
+ | cat / > error.txt 2>&1 | ||
+ | </code> |