= 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]]