This shows you the differences between two versions of the page.
uso:laboratoare:new:05-cli:demo [2018/10/30 22:10] razvan.deaconescu [Demo] |
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 24: | 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 49: | 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 | ||
</code> | </code> | ||
<code bash> | <code bash> | ||
- | student@uso:/uso.git/$ ping 192.12.12.1 | + | 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> | ||