This shows you the differences between two versions of the page.
|
uso:laboratoare:new:05-cli:get-a-life [2018/10/30 10:02] liza_elena.babu |
uso:laboratoare:new:05-cli:get-a-life [2019/10/31 11:32] (current) adrian.zatreanu |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ===== Get a life ===== | ===== Get a life ===== | ||
| - | - Să scrie un script în care trebuie să schimbe directorul de lucru. (Hint: ''source'') | + | ==== Filtre de text avansate ==== |
| - | - Mutați-vă la calea ''~/uso.git/labs/05-cli/support/get-a-life/ex2/'' și rulați scriptul ''just_regular_updates_here.sh''. Continuați să folosiți comenzile de bază (ls, cat, cd). Observați ce se întâmplă și rezolvați problema. | + | |
| - | - La calea ''~/uso.git/labs/05-cli/support/get-a-life/ex3/'' se află fișierul ''image.png''. Inspectați tipul fișierului. Scopul acestui exercițiu este să aflați un mesaj secret. (Hint: ''file'') | + | Până acum am folosit câteva filtre de text precum ''tr'', ''cut'' sau ''grep'', fiecare având câte un |
| - | - În directorul ''~/uso.git/labs/05-cli/support/get-a-life/ex4/'' se află numeroase fișiere. Să creeze o arhivă cu fișierele ce au o dimensiue mai mare de 10MB. | + | scop binedefinit, însă ele nu vor putea face absolut orice operație am vrea noi să facem asupra unui text. |
| - | - Să creeze un script care pornește programul ''firefox'' doar dacă acesta nu există deja. Altfel, nu-l pornește, ci doar afișează informații depsre el. Configurați acest script să ruleze din ''cron'' la fiecare 5 minute. (Hint: [[https://www.thegeekstuff.com/2011/07/cron-every-5-minutes|cron]]) | + | Pentru asta au fost inventate câteva filtre de text mai avansate precum ''sed'' și ''awk''. |
| + | |||
| + | === sed === | ||
| + | Înainte să începeți acest tutorial, navigați către calea ''/home/student/uso-lab/05-cli/support/get-a-life/sed-tutorial''. | ||
| + | |||
| + | În acest director avem fișierul ''songs.txt'' cu următorul conținut: | ||
| + | |||
| + | <code bash> | ||
| + | student@uso:~/.../support/get-a-life/sed-tutorial$ cat songs.txt | ||
| + | 1, Justin Timberlake, Title 545, Price $6.30 | ||
| + | 2, Taylor Swift, Title 723, Price $7.90 | ||
| + | 3, Mick Jagger, Title 610, Price $7.90 | ||
| + | 4, Lady Gaga, Title 118, Price $6.30 | ||
| + | 5, Johnny Cash, Title 482, Price $6.50 | ||
| + | 6, Elvis Presley, Title 335, Price $6.30 | ||
| + | 7, John Lennon, Title 271, Price $7.90 | ||
| + | </code> | ||
| + | |||
| + | Vrem să înlocuim toate aparițiile prețului ''$6.30'' cu ''$7.30''. Vom folosi ''sed'' pentru a face acest | ||
| + | lucru. | ||
| + | |||
| + | <code bash> | ||
| + | student@uso:~/.../support/get-a-life/sed-tutorial$ sed 's/6\.30/7.30/' songs.txt > songs2.txt | ||
| + | student@uso:~/.../support/get-a-life/sed-tutorial$ cat songs2.txt | ||
| + | 1, Justin Timberlake, Title 545, Price $7.30 | ||
| + | 2, Taylor Swift, Title 723, Price $7.90 | ||
| + | 3, Mick Jagger, Title 610, Price $7.90 | ||
| + | 4, Lady Gaga, Title 118, Price $7.30 | ||
| + | 5, Johnny Cash, Title 482, Price $6.50 | ||
| + | 6, Elvis Presley, Title 335, Price $7.30 | ||
| + | 7, John Lennon, Title 271, Price $7.90 | ||
| + | </code> | ||
| + | |||
| + | === awk === | ||
| + | Mai devreme am văzut că putem extrage numele tuturor utilizatorilor din sistem folosind ''tr''. Vrem să | ||
| + | facem asta folosind și filtrul ''awk''. | ||
| + | |||
| + | Ne amintim că informațiile despre toți utilizatorii din sistem se află în fișierul ''/etc/passwd''. | ||
| + | |||
| + | <code bash> | ||
| + | student@uso:~/.../support/get-a-life/sed-tutorial$ cat /etc/passwd | ||
| + | root:x:0:0:root:/root:/bin/bash | ||
| + | daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin | ||
| + | bin:x:2:2:bin:/bin:/usr/sbin/nologin | ||
| + | (...) | ||
| + | </code> | ||
| + | |||
| + | Pentru a extrage doar prima coloană, vom folosi următoarea comandă: | ||
| + | |||
| + | <code bash> | ||
| + | student@uso:~/.../support/get-a-life/sed-tutorial$ awk -F: '{print $1}' /etc/passwd | ||
| + | root | ||
| + | daemon | ||
| + | bin | ||
| + | (...) | ||
| + | </code> | ||
| + | |||
| + | |||
| + | <note> | ||
| + | Mai sus am prezentat doar câte un exemplu pentru fiecare filtru. Puteți găsi mult mai multe informații | ||
| + | despre ''sed'', ''awk'' și multe altele [[http://coewww.rutgers.edu/linux/lessons/lesson9/shell_script_tutorial.html|aici]]. | ||
| + | </note> | ||
| + | |||
| + | ==== Exerciții ==== | ||
| + | - Scrieți un script care trebuie să schimbe directorul de lucru în ''~''. De ce nu ar merge dacă am scrie pur și simplu ''cd ~'' în script? (Hint: ''source'') | ||
| + | - Mutați-vă la calea ''~/uso-lab/05-cli/support/get-a-life/ex2/'' și rulați scriptul ''just_regular_updates_here.sh''. După rularea scriptului închideți terminalul curent și deschideți unul nou. Continuați să folosiți comenzile de bază (ls, cat). Observați ce se întâmplă și rezolvați problema. | ||
| + | - La calea ''~/uso-lab/05-cli/support/get-a-life/ex3/'' se află fișierul ''image.png''. Inspectați tipul fișierului. Scopul acestui exercițiu este să aflați un mesaj secret. (Hint: ''file'') | ||
| + | - În directorul ''~/uso-lab/05-cli/support/get-a-life/ex4/'' se află numeroase fișiere. Să se creeze o arhivă cu fișierele ce au o dimensiune mai mare de 10MB. | ||
| + | - Să se creeze un script care pornește programul ''firefox'' doar dacă acesta nu rulează deja. Altfel, nu-l pornește, ci doar afișează informații despre el. Configurați acest script să ruleze din ''cron'' la fiecare 5 minute. (Hint: [[https://www.thegeekstuff.com/2011/07/cron-every-5-minutes|cron]]) | ||
| + | - Realizați un script care să creeze câte o arhivă pentru fiecare branch al repository-ului. (Hint: ''man git'', [[https://www.cyberciti.biz/faq/bash-for-loop/|for]]) | ||
| + | - Folosind tot website-ul de [[http://ezprompt.net|aici]], modificați prompt-ul astfel încât să vă arate și branch-ul curent Git pe care vă aflați. | ||
| + | |||
| + | Înainte: | ||
| + | |||
| + | <code bash> | ||
| + | student@uso:~$ | ||
| + | </code> | ||
| + | |||
| + | După: | ||
| + | <code bash> | ||
| + | student@uso:~[lab-05-cli]$ | ||
| + | </code> | ||