This shows you the differences between two versions of the page.
uso:laboratoare:new:05-cli:demo [2018/10/30 09:28] liza_elena.babu [Comunicarea interprocese, pipe (|)] |
uso:laboratoare:new:05-cli:demo [2019/10/28 12:22] (current) adrian.zatreanu [Demo] |
||
---|---|---|---|
Line 5: | Line 5: | ||
<code bash> | <code bash> | ||
- | student@uso:/uso.git/$ sleep 100 & | + | student@uso:~/uso-lab$ sleep 100 & |
[1] 12822 | [1] 12822 | ||
- | student@uso:/uso.git/$ ps -o pid,ppid,cmd | + | student@uso:~/uso-lab$ ps -o pid,ppid,cmd |
PID PPID CMD | PID PPID CMD | ||
22346 22345 bash | 22346 22345 bash | ||
Line 14: | Line 14: | ||
</code> | </code> | ||
- | <note> | + | <note> |
- | Observăm faptul că PPID-ul procesului este același cu PID-ul procesului ''bash'' din lista de mai sus. | + | În exemplul de rulare de mai sus observăm faptul că PPID-ul procesului este același cu PID-ul procesului ''bash'' (proces de tip shell) din lista de mai sus. Acest lucru ne demonstrează faptul că procesul ''sleep'' este un proces separat față de terminalul curent și mai mult, este proces copil al shell-ului. |
- | Acest lucru ne demonstrează faptul că procesul ''sleep'' este un proces separat față de terminalul curent | + | |
- | și mai mult, este proces copil al bash-ului. | + | |
</note> | </note> | ||
Line 26: | Line 24: | ||
<code bash> | <code bash> | ||
- | student@uso:/uso.git/$ ls | grep "lab" | + | student@uso:~/uso-lab$ ls /dev | grep "std" |
- | lab02 | + | stderr |
- | lab03 | + | stdin |
- | lab04 | + | stdout |
- | lab05 | + | |
- | lab09 | + | |
- | lab10 | + | |
- | lab12 | + | |
- | labs | + | |
</code> | </code> | ||
Aici, outputul comenzii ''ls'' va fi folosit ca intrare pentru [[https://linux.die.net/man/1/grep|grep]]. | Aici, outputul comenzii ''ls'' va fi folosit ca intrare pentru [[https://linux.die.net/man/1/grep|grep]]. | ||
- | ==== Exit code ==== | + | ==== Cod de ieșire ==== |
Orice proces care rulează în sistem se poate termina fie cu ''SUCCES'', fie cu ''EROARE''. Pentru a verifica | Orice proces care rulează în sistem se poate termina fie cu ''SUCCES'', fie cu ''EROARE''. Pentru a verifica | ||
dacă un proces s-a terminat sau nu cu succes, putem inspecta valoarea variabilei speciale ''$?''. | dacă un proces s-a terminat sau nu cu succes, putem inspecta valoarea variabilei speciale ''$?''. | ||
<code bash> | <code bash> | ||
- | student@uso:/uso.git/$ ping -c 1 8.8.8.8 | + | student@uso:~/uso-lab$ ping -c 1 8.8.8.8 |
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. | PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. | ||
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=245 ms | 64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=245 ms | ||
Line 51: | Line 45: | ||
rtt min/avg/max/mdev = 245.160/245.160/245.160/0.000 ms | rtt min/avg/max/mdev = 245.160/245.160/245.160/0.000 ms | ||
[1]+ Done sleep 100 | [1]+ Done sleep 100 | ||
- | student@uso:/uso.git/$ echo $? | + | student@uso:~/uso-lab$ echo $? |
0 | 0 | ||
- | student@uso:/uso.git/$ ping 192.12.12.1 | + | </code> |
+ | <code bash> | ||
+ | student@uso:~/uso-lab$ ping 192.12.12.1 | ||
PING 192.12.12.1 (192.12.12.1) 56(84) bytes of data. | PING 192.12.12.1 (192.12.12.1) 56(84) bytes of data. | ||
^C | ^C | ||
Line 59: | Line 55: | ||
5 packets transmitted, 0 received, 100% packet loss, time 4100ms | 5 packets transmitted, 0 received, 100% packet loss, time 4100ms | ||
- | student@uso:/uso.git/$ echo $? | + | student@uso:~/uso-lab$ echo $? |
1 | 1 | ||
</code> | </code> | ||
<note> | <note> | ||
- | Codul ''0'' ne spune că procesul s-a terminat cu succes, iar orice altceva reprezintă un | + | Codul de ieșire ''0'' ne spune că procesul s-a terminat cu succes, iar orice altceva reprezintă un |
[[https://shapeshed.com/unix-exit-codes/|cod de eroare]]. | [[https://shapeshed.com/unix-exit-codes/|cod de eroare]]. | ||
</note> | </note> | ||
Line 74: | Line 70: | ||
<code bash> | <code bash> | ||
- | student@uso:/uso.git/$ sudo apt-get install sl; ps | + | student@uso:~/uso-lab$ sudo apt-get install sl; ps |
[sudo] password for student: | [sudo] password for student: | ||
Reading package lists... Done | Reading package lists... Done | ||
Line 122: | Line 118: | ||
</code> | </code> | ||
- | ==== Execuția mai multor procese ==== | + | ==== Execuția condiționată a mai multor procese ==== |
De multe ori putem avea o situație în care 2 procese depind unul de celălalt. Pentru a realiza acest | De multe ori putem avea o situație în care 2 procese depind unul de celălalt. Pentru a realiza acest | ||
lucru folosim operatorul ''&&'' care ne asigură faptul că a doua comandă se va executa doar în cazul în | lucru folosim operatorul ''&&'' care ne asigură faptul că a doua comandă se va executa doar în cazul în | ||
Line 128: | Line 124: | ||
<code bash> | <code bash> | ||
- | student@uso:/uso.git/$ cat my_nonexisting_file.txt && ls | + | student@uso:~/uso-lab$ cat my_nonexisting_file.txt && ls |
cat: my_nonexisting_file.txt: No such file or directory | cat: my_nonexisting_file.txt: No such file or directory | ||
- | student@uso:/uso.git/$ echo $? | + | student@uso:~/uso-lab$ echo $? |
1 | 1 | ||
</code> | </code> | ||
Observăm faptul că fișierul ''my_nonexisting_file.txt'' nu există și faptul că a doua comandă nu se | Observăm faptul că fișierul ''my_nonexisting_file.txt'' nu există și faptul că a doua comandă nu se | ||
- | mai execută, exact ce am dorit să arătăm. | + | mai execută, exact ce am dorit să arătăm, codul de eroare 1 arătând că prima comandă nu s-a |
+ | terminat cu succes. | ||
Schimbăm puțin abordarea astfel încât ambele comenzi să fie executate. | Schimbăm puțin abordarea astfel încât ambele comenzi să fie executate. | ||
<code bash> | <code bash> | ||
- | student@uso:/uso.git/$ ping -c 1 8.8.8.8 && finger student | + | student@uso:~/uso-lab$ ping -c 1 8.8.8.8 && finger student |
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. | PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. | ||
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=32.4 ms | 64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=32.4 ms | ||
Line 154: | Line 151: | ||
No mail. | No mail. | ||
No Plan. | No Plan. | ||
- | student@uso:/uso.git/$ echo $? | + | student@uso:~/uso-lab$ echo $? |
0 | 0 | ||
</code> | </code> | ||
Line 162: | Line 159: | ||
<code bash> | <code bash> | ||
- | student@uso:/uso.git/$ cat my_nonexisting_file.txt || id root | + | student@uso:~/uso-lab$ cat my_nonexisting_file.txt || id root |
cat: my_nonexisting_file.txt: No such file or directory | cat: my_nonexisting_file.txt: No such file or directory | ||
uid=0(root) gid=0(root) groups=0(root) | uid=0(root) gid=0(root) groups=0(root) | ||
Line 170: | Line 167: | ||
<code bash> | <code bash> | ||
- | student@uso:/uso.git/$ cat /etc/passwd || ls | + | student@uso:~/uso-lab$ cat /etc/passwd || ls |
root:x:0:0:root:/root:/bin/bash | root:x:0:0:root:/root:/bin/bash | ||
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin | daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin | ||
Line 225: | Line 222: | ||
<code bash> | <code bash> | ||
- | student@uso:~/uso.git/$ cd labs/ | + | student@uso:~/uso-lab$ ls ; ps > out |
- | student@uso:~/uso.git/labs/$ ls ; ps > out | + | |
00-intro 02-process 04-appdev 06-hw-boot 08-net 10-sec | 00-intro 02-process 04-appdev 06-hw-boot 08-net 10-sec | ||
01-fs 03-user 05-cli 07-storage 09-vm 11-ctf | 01-fs 03-user 05-cli 07-storage 09-vm 11-ctf | ||
- | student@uso:~/uso.git/labs/$ cat out | + | student@uso:~/uso-lab$ cat out |
PID TTY TIME CMD | PID TTY TIME CMD | ||
13052 pts/2 00:00:00 ps | 13052 pts/2 00:00:00 ps | ||
Line 241: | Line 237: | ||
<code bash> | <code bash> | ||
- | student@uso:~/uso.git/labs/$ ( ls ; ps ) > out2 | + | student@uso:~/uso-lab$ ( ls ; ps ) > out2 |
- | student@uso:~/uso.git/labs/$ cat out2 | + | student@uso:~/uso-lab$ cat out2 |
00-intro | 00-intro | ||
01-fs | 01-fs | ||
Line 267: | Line 263: | ||
==== Globbing ==== | ==== Globbing ==== | ||
În cazul în care vrem să afișăm toate fișierele ale căror nume încep cu litera ''a'' și au extensia | În cazul în care vrem să afișăm toate fișierele ale căror nume încep cu litera ''a'' și au extensia | ||
- | ''.txt'', putem folosi ''globbing''. Simbolul ''*'' este un wilecard și ține locul pentru **orice | + | ''.txt'', putem folosi ''globbing''. Simbolul ''*'' este un wildcard și ține locul pentru **orice |
de oricâte ori**. | de oricâte ori**. | ||
<code bash> | <code bash> | ||
- | student@uso:~/uso.git/labs/$ cd ~/uso.git/labs/05-cli/support/demo/ | + | student@uso:~/uso-lab$ cd ~/uso-lab/05-cli/support/demo/ |
student@uso:~/.../05-cli/support/demo/$ ls a*.txt | student@uso:~/.../05-cli/support/demo/$ ls a*.txt | ||
a1.txt a3.txt a5.txt a7.txt a9.txt | a1.txt a3.txt a5.txt a7.txt a9.txt | ||
Line 301: | Line 297: | ||
<code bash> | <code bash> | ||
- | student@uso:~$ cd uso.git/ | + | student@uso:~$ cd uso-lab/ |
- | student@uso:~/uso.git/$ mouse="Jerry" | + | student@uso:~/uso-lab/$ mouse="Jerry" |
- | student@uso:~/uso.git/$ echo ${mouse} | + | student@uso:~/uso-lab/$ echo ${mouse} |
Jerry | Jerry | ||
</code> | </code> | ||
Line 311: | Line 307: | ||
<code bash> | <code bash> | ||
- | student@uso:~/uso.git/$ mouse="Jerry" | + | student@uso:~/uso-lab/$ mouse="Jerry" |
- | student@uso:~/uso.git/$ echo $mouse_the_best | + | student@uso:~/uso-lab/$ echo $mouse_the_best |
- | student@uso:~/uso.git/$ | + | student@uso:~/uso-lab/$ |
</code> | </code> | ||
Line 322: | Line 318: | ||
<code bash> | <code bash> | ||
- | student@uso:~/uso.git/$ mouse="Jerry" | + | student@uso:~/uso-lab/$ mouse="Jerry" |
- | student@uso:~/uso.git/$ echo ${mouse}_the_best | + | student@uso:~/uso-lab/$ echo ${mouse}_the_best |
Jerry_the_best | Jerry_the_best | ||
</code> | </code> | ||
Un alt caz în care expandarea este utilă este evaluarea expresiilor aritmetice. Pentru început, declarăm 2 | Un alt caz în care expandarea este utilă este evaluarea expresiilor aritmetice. Pentru început, declarăm 2 | ||
- | variabile propii în shell: | + | variabile în shell: |
<code bash> | <code bash> | ||
- | student@uso:~/uso.git/$ a=3 | + | student@uso:~/uso-lab/$ a=3 |
- | student@uso:~/uso.git/$ b=4 | + | student@uso:~/uso-lab/$ b=4 |
- | student@uso:~/uso.git/$ echo $a && echo $b | + | student@uso:~/uso-lab/$ echo $a && echo $b |
3 | 3 | ||
4 | 4 | ||
Line 341: | Line 337: | ||
<code bash> | <code bash> | ||
- | student@uso:~/uso.git/$ echo $((a+b)) | + | student@uso:~/uso-lab/$ echo $((a+b)) |
7 | 7 | ||
</code> | </code> | ||
Line 347: | Line 343: | ||
<note> | <note> | ||
Dacă am fi folosit comanda ''echo $a+$b'', shell-ul ar fi înlocuit ''$a'' cu valoarea lui a, adică ''3'' | Dacă am fi folosit comanda ''echo $a+$b'', shell-ul ar fi înlocuit ''$a'' cu valoarea lui a, adică ''3'' | ||
- | și ''$b'' cu valoarea lui b, adică ''4'', iar rezultatul comenzii va fi ''3+4'', nu ''7'' așa cum ne-am fi | + | și ''$b'' cu valoarea lui b, adică ''4'', iar rezultatul comenzii ar fi fost șirul de caractere ''3+4'', |
- | așteptat. | + | nu ''7'' așa cum ne-am fi așteptat. |
</note> | </note> | ||
Line 355: | Line 351: | ||
<code bash> | <code bash> | ||
- | student@uso:/uso.git/$ env | + | student@uso:~/uso-lab$ env |
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36: | LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36: | ||
LC_MEASUREMENT=ro_RO.UTF-8 | LC_MEASUREMENT=ro_RO.UTF-8 | ||
Line 390: | Line 386: | ||
LC_TIME=ro_RO.UTF-8 | LC_TIME=ro_RO.UTF-8 | ||
_=/usr/bin/env | _=/usr/bin/env | ||
- | OLDPWD=/home/student/uso/labs/05-cli/support/demo | + | OLDPWD=/home/student/uso-lab/05-cli/support/demo |
</code> | </code> | ||