em Posted February 21, 2015 Report Posted February 21, 2015 Acest tutorial este despre automatizarea în linia de comand?. Cel mai bine ar fi s? ave?i la dispozi?ie un VM (sau server) cu linux ca s? încerca?i câteva din ele.Înl?n?uirea comenzilorS? pornim cu comenzile înl?n?uite (comanda1;comanda2;comanda3 .. )vilie@em-vm:~$ ls;psrepos PID TTY TIME CMD 4493 pts/5 00:00:00 bash 4508 pts/5 00:00:00 psDup? cum pute?i vedea în exemplul de mai sus shellul a rulat ls, apoi ps. Dac? am vrea s? rul?m o comanda doar dac? prima s-a executat cu succes am face comanda1 && comanda2vilie@em-vm:~$ ls && echo "e bine"repose binevilie@em-vm:~$ ps && echo "e bine" PID TTY TIME CMD 4493 pts/5 00:00:00 bash 4516 pts/5 00:00:00 pse binevilie@em-vm:~$ mataegrasa && echo "e bine"mataegrasa: command not foundvilie@em-vm:~$ true && echo "e bine"e binevilie@em-vm:~$ ls && true && echo "e bine"repose bineDup? cum pute?i observa în comanda "mataegrasa && echo bine" nu s-a afi?at bine. Asta pentru ca ma-ta nu e gr .... nu nu.. pentru ca "mataegrasa" nu e comanda valida. In exemplul ls && true && echo "bine" ajungem sa executam toate comenzile (cu succes)Dac? vrem s? înl?n?uim dou? comenzi ?i s? o execut?m pe a doua doar dac? prima nu s-a executat cu succes facem a?a "comand?1 || comand?2". Un mic exempluvilie@em-vm:~$ mamaegrasa || echo "DA"mamaegrasa: command not foundDAvilie@em-vm:~$ ls || echo "DA"reposvilie@em-vm:~$ false || echo "DA"DAPutem desigur s? rul?m dou? comenzi în paralel cu "comanda1 & comanda2"vilie@em-vm:~$ ps & who[1] 4613 PID TTY TIME CMD 4493 pts/5 00:00:00 bash 4613 pts/5 00:00:00 psvilie tty1 2015-02-19 01:13vilie pts/3 2015-02-19 01:17 (192.168.231.1)vilie pts/4 2015-02-19 01:23 (192.168.231.1)vilie pts/5 2015-02-19 02:46 (192.168.231.1)Redirect?riMajoritatea comenzilor primesc input de la terminal ?i vars? rezultatul tot în terminal. Intrarea se nume?te stdin, ie?irea standard stdout. Este posibil s? redirect?m intrarea sau ie?irea standard a unui proces cu operatorii "<" sau ">". De exempluvilie@em-vm:~$ ps PID TTY TIME CMD 4493 pts/5 00:00:00 bash 4549 pts/5 00:00:00 psvilie@em-vm:~$ ps > mamavilie@em-vm:~$ cat mama PID TTY TIME CMD 4493 pts/5 00:00:00 bash 4550 pts/5 00:00:00 psÎn exemplul de mai sus am redirectat output-ul comenzii ps c?tre fi?ierul mama. Dup? cum se poate observa, con?inutul fi?ierului mama este fix output-ul comenzii ps. Hai s? urm?rim alt exemplu despre redirectarea cu appendvilie@em-vm:~$ echo "mata-i" > cumvilie@em-vm:~$ echo "grasa" > cumvilie@em-vm:~$ cat cumgrasavilie@em-vm:~$ echo "e mata" >> cumvilie@em-vm:~$ cat cumgrasae mataDup? cum se poate observa, operatorul ">" gole?te con?inutul fi?ierului înainte s? scrie în el, pentru a preveni acest lucru putem folosi ">>".Cei care s-au mai jucat cu C ?tiu de fprintf(stdout / fprintf(stderr. Fiecare proces are o ie?ire standard de output ?i de eroare. Hai s? vedem un exemplu:vilie@em-vm:~$ gogu > hahagogu: command not foundvilie@em-vm:~$ cat hahavilie@em-vm:~$ gogu 2> hahavilie@em-vm:~$ cat hahagogu: command not foundÎn primul exemplu "gogu > haha" nu a avut niciun efect. Output-ul terminalului "gogu: command not found" era pe ie?irea standard de eroare, nu de output. Aceasta se face cu operatorul "2>". Putem, bineîn?eles s? redirect?m ie?irea standard undeva ?i eroarea altundeva prin "comanda >1 iesire 2> erorile"vilie@em-vm:~$ find / -name "*.conf" 2> erorile 1> rezultate^Cvilie@em-vm:~$ head erorilefind: `/proc/tty/driver': Permission deniedfind: `/proc/1/task/1/fd': Permission deniedfind: `/proc/1/task/1/fdinfo': Permission deniedfind: `/proc/1/task/1/ns': Permission deniedfind: `/proc/1/fd': Permission deniedfind: `/proc/1/map_files': Permission deniedfind: `/proc/1/fdinfo': Permission deniedfind: `/proc/1/ns': Permission deniedfind: `/proc/2/task/2/fd': Permission deniedfind: `/proc/2/task/2/fdinfo': Permission deniedvilie@em-vm:~$ head rezultate/run/thermald/thermal_set_point.cpu.conf/run/resolvconf/resolv.conf/var/lib/ucf/cache/:etc:rsyslog.d:50-default.conf/etc/debconf.conf/etc/sysctl.d/10-console-messages.conf/etc/sysctl.d/10-network-security.conf/etc/sysctl.d/10-kernel-hardening.conf/etc/sysctl.d/10-ptrace.conf/etc/sysctl.d/10-link-restrictions.conf/etc/sysctl.d/10-magic-sysrq.confAlte exemplevilie@em-vm:~$ wget google.com/index.html 2> /dev/null # descarc ceva cu wget f?r? s? îmi mai apar? outputvilie@em-vm:~$ ls index.htmlindex.htmlvilie@em-vm:~$ ls && ps && plm || echo "a" # comanda "echo a" nu a mai fost rulat? pentru c? nu exist? comanda plmcum dsa erorile haha index.html mama repos rezultate PID TTY TIME CMD 4493 pts/5 00:00:00 bash 4628 pts/5 00:00:00 psThe program 'plm' is currently not installed. You can install it by typing: # lel, aparent exist? dar nu e instalat?sudo apt-get install plmAtât pentru azi, s?pt?mâna viitoare pipe-uri. Quote