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