User Tools

Site Tools


advanced-unix:capitole:capitol-06

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
advanced-unix:capitole:capitol-06 [2016/05/09 01:21]
razvan created
advanced-unix:capitole:capitol-06 [2016/05/12 12:44] (current)
razvan [Schimbare parolă utilizatori]
Line 1: Line 1:
 ====== 6. Shell scripting ====== ====== 6. Shell scripting ======
  
-automatizare șprelucrare+Pentru funcționalitățde automatizare folosim shell scripting. Un script shell este o înlănțiure de comenzi agregate pentru un scop final. Un shell script este o formă //​quick'​n'​dirty//​ de automatizare. Pentru aspecte mai complexe, este util să se folosească forme avansate de automatizare precum Awk, Python, Perl sau altele.
  
 ===== Subiecte abordate ===== ===== Subiecte abordate =====
 +
 +  * Ce este un script shell?
 +  * Comenzi: comandă, argumente/​parametri,​ input, output, valoare de retur
 +  * Înlănțuirea comenzilor
 +  * Filtre de text
 +  * One linere
 +  * Variabile în shell, expandarea în shell
 +  * Comenzi pentru controlul fluxului
 +
 +==== Best practices ====
 +
 +  * Comenzi neinteractive în shell
 +  * Shell scripting este //​quick'​n'​dirty//​
 +  * ''​for''​ vs. argumente în listă vs. ''​while read''​
 +  * ''​if <​command>''​
 +  * ''​tr''​ vs. ''​sed''​
 +  * ''​cut''​ vs. ''​awk''​
 +
 +==== Utilitare folosite ====
 +
 +  * ''​find'',​ ''​stat'',​ ''​basename'',​ ''​dirname''​
 +  * ''​echo'',​ ''​cat'',​ ''​head'',​ ''​tail'',​ ''​nl'',​ ''​tac'',​ ''​rev''​
 +  * ''​cut'',​ ''​tr'',​ ''​sort'',​ ''​uniq'',​ ''​grep'',​ ''​awk'',​ ''​sed''​
 +  * ''​seq'',​ ''​for'',​ ''​if'',​ ''​test'',​ ''​while read''​
  
 ===== Resurse utile ===== ===== Resurse utile =====
Line 9: Line 33:
 ===== Exerciții ===== ===== Exerciții =====
  
 +==== Demo: Folosire filtre de bază ====
 +
 +Folosire head, tail, sort, uniq, cut, tr.
 +
 +==== Demo: Folosire sed și awk ====
 +
 +Folosire sed pentru substituție.
 +
 +Folosire sed pentru ștergere.
 +
 +Folosire sed pentru interschimbare.
 +
 +Folosire awk pentru afișarea unor coloane.
 +
 +Folosire awk și expresii regulate pentru afișarea unor coloane.
 +
 +==== Demo: Folosire avansată grep și sort ====
 +
 +Afișați fișierele din ierarhia ''/​usr/​include''​ în ordinea numărului de apariții ale **cuvântului** ''​FILE''​.
 +
 +==== Demo: Folosire while read ====
 +
 +Listați numele protocoalelor cu număr de port între 100 și 200. Portul se obține din fișierul ''/​etc/​services''​.
 +
 +==== Demo: Creare directoare în home-urile mai multor utilizatori ====
 +
 +Pentru început adăugați în sistem utilizatorii ''​ana'',​ ''​bogdan'',​ ''​corina'',​ ''​dan''​ și ''​elena''​ folosind utilitarul ''​adduser''​.
 +
 +Ca root, parcurgeți utilizatorii sistemului care au home-ul în ''/​home/'',​ și creați un director ''​public_html''​ în home-ul fiecăruia.
 +
 +Realizați apoi un one-liner sau un script care să șteargă directorul ''​public_html''​.
 +
 +==== Creare directoare și schimbare permisiuni ====
 +
 +Ca root, parcurgeți utilizatorii sistemului care au home-ul în ''/​home/'',​ și creați un director ''​public_html''​ în home-ul fiecăruia. Schimbați ownership-ul acelui director la utilizator folosind ''​chown''​.
 +
 +==== Creare directoare cu un alt nume ====
 +
 +Realizați pasul de mai sus doar că schimbați numele directorului nou creat în ''​public_html_<​UID>''​ unde ''​UID''​ este numele de utilizator al utilizatorului.
 +
 +==== Numele paginilor de manual dintr-o anumită secțiune ====
 +
 +Afișați numele paginilor de manual din secțiunea 5. Numele sunt partea fără extensie din fișierele existente în ''/​usr/​share/​man/​man5/''​. De exemplu, pentru fișierul ''​issue.5.gz'',​ numele este ''​issue''​.
 +
 +Recomandăm pașii de mai jos.
 +
 +Parcurgeți folosind ''​for''​ intrările din ''/​usr/​share/​man/​man5/''​.
 +
 +Folosiți comanda ''​basename''​ pentru a extrage doar numele de bază al fișierului.
 +
 +<note tip>
 +Comanda ''​basename''​ ca argumente numele fișierului și extensia care va fi **eliminată** din numele fișierului,​ rămânând doar cu numele de bază.
 +
 +Trebuie să scoateți extensia ''​5.gz''​.
 +</​note>​
 +
 +Din lista de mai sus, extrageți doar comenzile care încep cu o anumită literă. Adică din outputul de mai sus, folosiți o comandă de forma ''​grep '​^a'''​ pentru a extrage liniile care încep cu litera ''​a''​ folosind ''​grep''​.
 +
 +==== Schimbare parolă utilizatori ====
 +
 +Vrem să schimbăm parola utilizatorilor care au directorul home în ''/​home''​ și să facem asta corect :-) Vom crea un script numit ''​change-home-users-pw''​.
 +
 +Pentru început adăugați în sistem utilizatorii ''​ana'',​ ''​bogdan'',​ ''​corina'',​ ''​dan''​ și ''​elena''​ folosind utilitarul ''​adduser''​.
 +
 +În cadrul scriptului folosiți ''/​etc/​passwd'',​ ''​while''​ și ''​read''​ pentru a afișa doar numele utilizatorilor (//​username//​) care au home-ul în ''/​home''​.
 +
 +<note tip>
 +În cadrul buclei ''​while'',​ puteți folosi o construcție de forma ''​echo $var | grep '​^/​home/'''​ pentru a afla dacă variabila ''​var''​ începe cu șirul ''/​home''​.
 +
 +Sau dacă folosiți ''​awk''​ nu mai aveți nevoie de construcția de mai sus.
 +</​note>​
 +
 +Pentru parole generați o parolă folosind utilitarul ''​pwgen''​. Parola trebuie să aibă 12 caractere și să conțină numere și caractere speciale.
 +
 +<note tip>
 +Parcurgeți pagina de manual a comenzii ''​pwgen''​ sau exemplele de aici: http://​www.maketecheasier.com/​password-generators-for-linux/​
 +</​note>​
 +
 +Schimbați, în mod neinteractiv,​ folosind comanda ''​chpasswd'',​ parola pentru utilizatorii sistemului care au home-ul în ''/​home''​. După schimbarea parolei afișați la ieșirea standard, pentru fiecare utilizator, numele de utilizator și noua parolă.
 +
 +<note tip>
 +Folosiți o construcție de forma ''​%%echo ... | sudo chpasswd%%''​ pentru schimbarea parolei în mod neinteractiv. Vedeți și exemplele de aici: http://​linoxide.com/​linux-command/​change-passwords-batch-mode-chpasswd/​
 +</​note>​
  
advanced-unix/capitole/capitol-06.1462746072.txt.gz · Last modified: 2016/05/09 01:21 by razvan