Jump to content
em

Linia de comandă în linux - Inlantuirea de comenzi

Recommended Posts

Posted

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 comenzilor

S? pornim cu comenzile înl?n?uite (comanda1;comanda2;comanda3 .. )

vilie@em-vm:~$ ls;ps

repos

PID TTY TIME CMD

4493 pts/5 00:00:00 bash

4508 pts/5 00:00:00 ps

Dup? 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 && comanda2

vilie@em-vm:~$ ls && echo "e bine"

repos

e bine

vilie@em-vm:~$ ps && echo "e bine"

PID TTY TIME CMD

4493 pts/5 00:00:00 bash

4516 pts/5 00:00:00 ps

e bine

vilie@em-vm:~$ mataegrasa && echo "e bine"

mataegrasa: command not found

vilie@em-vm:~$ true && echo "e bine"

e bine

vilie@em-vm:~$ ls && true && echo "e bine"

repos

e bine

Dup? 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 exemplu

vilie@em-vm:~$ mamaegrasa || echo "DA"

mamaegrasa: command not found

DA

vilie@em-vm:~$ ls || echo "DA"

repos

vilie@em-vm:~$ false || echo "DA"

DA

Putem 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 ps

vilie tty1 2015-02-19 01:13

vilie 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?ri

Majoritatea 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 exemplu

vilie@em-vm:~$ ps

PID TTY TIME CMD

4493 pts/5 00:00:00 bash

4549 pts/5 00:00:00 ps

vilie@em-vm:~$ ps > mama

vilie@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 append

vilie@em-vm:~$ echo "mata-i" > cum

vilie@em-vm:~$ echo "grasa" > cum

vilie@em-vm:~$ cat cum

grasa

vilie@em-vm:~$ echo "e mata" >> cum

vilie@em-vm:~$ cat cum

grasa

e mata

Dup? 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 > haha

gogu: command not found

vilie@em-vm:~$ cat haha

vilie@em-vm:~$ gogu 2> haha

vilie@em-vm:~$ cat haha

gogu: 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

^C

vilie@em-vm:~$ head erorile

find: `/proc/tty/driver': Permission denied

find: `/proc/1/task/1/fd': Permission denied

find: `/proc/1/task/1/fdinfo': Permission denied

find: `/proc/1/task/1/ns': Permission denied

find: `/proc/1/fd': Permission denied

find: `/proc/1/map_files': Permission denied

find: `/proc/1/fdinfo': Permission denied

find: `/proc/1/ns': Permission denied

find: `/proc/2/task/2/fd': Permission denied

find: `/proc/2/task/2/fdinfo': Permission denied

vilie@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.conf

Alte exemple

vilie@em-vm:~$ wget google.com/index.html 2> /dev/null # descarc ceva cu wget f?r? s? îmi mai apar? output

vilie@em-vm:~$ ls index.html

index.html

vilie@em-vm:~$ ls && ps && plm || echo "a" # comanda "echo a" nu a mai fost rulat? pentru c? nu exist? comanda plm

cum 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 ps

The program 'plm' is currently not installed. You can install it by typing: # lel, aparent exist? dar nu e instalat?

sudo apt-get install plm

Atât pentru azi, s?pt?mâna viitoare pipe-uri.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...