= Capitolul 4: Command Line Tricks = **Alocare de timp**: 4 ore [[https://docs.google.com/presentation/d/1R9PKby0FVFgIsKUa6kIGDHhA7YMv1pZAnJXWZ3CGEHE/pub?start=false&loop=false&delayms=3000|Slide-uri de prezentare]] == Hands on (1) == * Un proces se poate termina cu succes (status 0) sau cu eroare (status diferit de 0). * Cum putem vedea statusul ultimului proces? * ''true''și ''false'' sunt două programe care întotdeauna se termină cu succes, respectiv cu eroare. Verificați această afirmație. * Folosind operatorii ''&&'' și ''||'', putem rula un al doilea proces doar dacă primul proces a avut succes, respectiv eroare. * Testați următoarele comenzi și observați dacă se execută sau nu procesul echo: * ''true && echo "Success"'' * ''false && echo "Success"'' * ''true || echo "Fail"'' * ''false || echo "Fail"'' * Setați două variabile, a și b la “Alice” și “Bob”. * Afișați mesajul “Alice and Bob”, folosind variabilele. * Aveți grijă la ghilimele! * Rulați comenzile de mai jos și observați output-ul. * Nu dați doar copy paste, ci scrieți comenzile pentru a observa ce se întâmplă. A=42 B=28 echo "A=$A and B=$B" echo "A+B=$(($A+$B))" A=$(($A+1)) B=$(($B*10)) echo "A=$A and B=$B" * Salvați în variabila OUTPUT ieșirea de la rularea comenzii ls. * Vizualizați conținutul variabilei OUTPUT. * Aflați dimensiunea executabilului comenzii ls. * Hints: ''which ls'', ''ls -lh'' == Hands on (2) == * Aflați ce face comanda ''seq''. * Rulati ''seq 100''. * Rulati ''seq 100 200''. * Rulati ''seq 100 2 200''. * Folosind comanda ''seq'' generați toate numerele de la 1000 de la 2000, din 10 în 10. * Creați directorul the_one_dir în home-ul vostru și întrati în el. * Creați cu un one liner 100 de fișiere/directoare. * Numerele pare for fi directoare, numele impare vor fi fișiere. * Folosiți if și condiții de test pentru a afișa care dintre fișierele din ''the_one_dir'' sunt fișiere normale și care directoare. * Folosiți ls pentru a genera conținutul directorului. * Scrieți într-un editor următorul shell script cu numele ''my_first_script.sh'' și rulați-l. #!/bin/bash echo "Hello world." * Rulați întăi comanda cu comanda ''bash my_first_script.sh''. * Încercați, apoi, cu comanda ''./my_first_script.sh''. * Merge? De ce nu? Adăugați drepturile necesare pentru a-l rula în ambele moduri. * Creați un script (numit ''args_script.sh'') care afișează primul argument primit. * Adăugați drept de execuție. * Rulați scriptul prin ''./args_script.sh Hello world''. * Rulați scriptul prin ''./args_script.sh "Hello world"''. * Rulați scriptul fără nici un parametru. * Ce a afișat în fiecare caz? * Îmbunătățiți scriptul pentru a afișa toate argumentele date. * Adăugați drept de execuție și rulați cu diverși parametri. * Îmbunătățiți scriptul pentru a se verifica că se primește cel puțin un parametru. * Scrieți un script numit get_pid.sh care să afișeze PID procesului scriptului. * Rulați scriptul de mai multe ori, folosind ''bash'', respectiv ''./nume_script''. == Hands on (3) == * Vom folosi următorul text: root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh games:x:5:60:games:/usr/games:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/bin/sh gdm:x:106:114:Gnome Display Manager:/var/lib/gdm:/bin/false kernoops:x:108:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false ieu:x:1000:1000:ieu,,,:/home/ieu:/bin/bash * Copiați textul de mai sus și salvați-l într-un fișier numit passwd aflat în directorul home al utilizatorului thales. * Fișierul are o structură asemănătoare /etc/passwd (informații despre utilizatorii sistemului) * nume utilizator * dacă parola este în /etc/shadow criptată * UID, GID * informații auxiliare * care este directorul home al utilizatorului * shell-ul implicit al utilizatorului * Rulați comenzile de mai jos. Ce observați pentru fiecare din acestea? cat passwd | grep var cat passwd | grep -v var cat passwd | grep ^r cat passwd | grep h$ cat passwd | grep ^i.*h$ cat passwd | grep ^[r,i] * Realizați un script care afișează numele fișierelor din ''/usr/include'' care includ antentul ''features.h''. * Hint: grep, cut) == Resurse utile == * [[:home|Wiki-ul cursului]]