Differences

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

Link to this comparison view

uso:teme:tema-2 [2020/12/11 15:05]
ioana_maria.culic [Task 04 (20 p)]
uso:teme:tema-2 [2023/11/14 16:46] (current)
rares.constantin02 [Task 07 (20p)]
Line 1: Line 1:
 ====== Tema 2 ====== ====== Tema 2 ======
- 
  
 <​note>​ <​note>​
 **Ce trebuie să știu?** Studiați secțiunea de [[#​cunostinte_evaluate|Cunoștințe evaluate]] și suportul agregat necesar temei. **Ce trebuie să știu?** Studiați secțiunea de [[#​cunostinte_evaluate|Cunoștințe evaluate]] și suportul agregat necesar temei.
-Nu contactaţi responsabilii de temă pe mail privat decât dacă aceştia vă cer explicit (e.g. pentru debugging local, vizualizarea unor comenzi din rezolvare)+Nu contactaţi responsabilii de temă pe mail privat decât dacă aceştia vă cer explicit (e.g. pentru debugging local, vizualizarea unor comenzi din rezolvare).
 Pentru orice fel de întrebare **VĂ RUGĂM SĂ FOLOSIŢI FORUMUL!!!** Pentru orice fel de întrebare **VĂ RUGĂM SĂ FOLOSIŢI FORUMUL!!!**
  
Line 11: Line 10:
 **Căutare.** Căutați pe forum informația pe care doriți să o obțineți, înainte să puneți o întrebare. De cele mai multe ori, cineva a mai întrebat același lucru. În fiecare thread al forumului aveți informații despre cum puteți căuta în forum. **Căutare.** Căutați pe forum informația pe care doriți să o obțineți, înainte să puneți o întrebare. De cele mai multe ori, cineva a mai întrebat același lucru. În fiecare thread al forumului aveți informații despre cum puteți căuta în forum.
  
-**Printscreen/​poză?​ Nu.** În cazul în care doriți să publicați un printscreen pe forum, recomandăm folosirea site-urilor pentru partajarea gratuită a imaginilor, precum [[http://​imgur.com/​|imgur]] sau [[http://​www.makeuseof.com/​tag/​4-imgur-alternatives-for-uploading-sharing-images/​|alternativele]] sale, publicând pe forum doar link către printscreen. Pozele inserate în răspunsurivor fi șterse. ​+**Printscreen/​poză?​ Nu.** În cazul în care doriți să publicați un printscreen pe forum, recomandăm folosirea site-urilor pentru partajarea gratuită a imaginilor, precum [[http://​imgur.com/​|imgur]] sau [[http://​www.makeuseof.com/​tag/​4-imgur-alternatives-for-uploading-sharing-images/​|alternativele]] sale, publicând pe forum doar link către printscreen. Pozele inserate în răspunsuri vor fi șterse. ​
  
 **Actualizări.** Urmăriți atât forumul cât și modificările aduse enunțului/​checker-ului,​ modificări ce sunt publicate și explicate în paragrafele de mai jos. **Actualizări.** Urmăriți atât forumul cât și modificările aduse enunțului/​checker-ului,​ modificări ce sunt publicate și explicate în paragrafele de mai jos.
Line 17: Line 16:
 **Regulament.** Înainte și în timpul realizării temei, vă rugăm să parcurgeți [[uso:​regulament#​realizarea_temelor|indicațiile legate de realizarea temelor]], încluzând ce înseamnă o temă copiată și cum penalizăm temele copiate. Folosiți cu încredere forumurile de pe [[http://​acs.curs.pub.ro/​|acs.curs.pub.ro]] pentru întrebări și neclarități legate de teme. **Regulament.** Înainte și în timpul realizării temei, vă rugăm să parcurgeți [[uso:​regulament#​realizarea_temelor|indicațiile legate de realizarea temelor]], încluzând ce înseamnă o temă copiată și cum penalizăm temele copiate. Folosiți cu încredere forumurile de pe [[http://​acs.curs.pub.ro/​|acs.curs.pub.ro]] pentru întrebări și neclarități legate de teme.
  
-**Întrebări frecvente.** În timpul realizării temei, când vă loviți de probleme și aveți nevoie de suportul echipei de USO, parcurgeți și lista de [[uso:​teme:​intrebari-frecvente|întrebări frecvente întâlnite în cadrul temelor]]. Să țineți cont, va rugăm, și de [[uso:​regulament#​recomandari_de_comunicare_electronica|recomandările de comunicare electronică]].+**Întrebări frecvente.** În timpul realizării temei, când vă loviți de probleme și aveți nevoie de suportul echipei de USO, parcurgeți și lista de [[uso:​teme:​intrebari-frecvente|întrebări frecvente întâlnite în cadrul temelor]]. Să țineți cont, vă rugăm, și de [[uso:​regulament#​recomandari_de_comunicare_electronica|recomandările de comunicare electronică]].
  
-**Ajutor reciproc.** Vă încurajăm ca atunci când găsiți soluția la o problemă pe care ați postat-o anterior pe forum să postați și soluția găsită. De asemenea dacă știți răspunsul la întrebările colegilor sunteți încurajați să le răspundeți.+**Ajutor reciproc.** Vă încurajăm ca atunci când găsiți soluția la o problemă pe care ați postat-o anterior pe forumsă postați și soluția găsită. De asemeneadacă știți răspunsul la întrebările colegilorsunteți încurajați să le răspundeți.
 </​note>​ </​note>​
  
Line 25: Line 24:
  
 <note important>​ <note important>​
-Deadline: **16 Decembrie ​2019 ora 23:55**\\ +Deadline: **Decembrie ​2023 ora 23:55**\\ 
-Timp de lucru: **14 zile**\\ +Timp de lucru: **21 zile**\\ 
-Punctaj: **1.0 puncte** din nota finală\\+Punctaj: **1.0 punct** din nota finală\\
 </​note>​ </​note>​
  
 <​note>​ <​note>​
 Actualizări enunț:\\ Actualizări enunț:\\
-  * 6 decembrie - **update cerinta task 3**+  * **Task 4** Configurarea identității trebuie sa aiba scop local
 </​note>​ </​note>​
  
 <​note>​ <​note>​
 Actualizări checker:\\ Actualizări checker:\\
-Versiunea curentă: <​color ​red>**versiunea 1.0.0**</​color>​ +  * 19:00, 12 Noiembrie 2023 
- +  * <​color ​green>**Rulați ''​sudo uso update''​**</​color>​
-  * 3 decembrie - **update checker task 1** +
-  * 4 decembrie - **update checker task 2** +
-  * 6 decembrie - **update checker task 3**+
 </​note>​ </​note>​
- 
 ===== Cunoștințe evaluate ===== ===== Cunoștințe evaluate =====
  
-  * folosirea corectă a redirectării+  * cunoștințe networking
-  * înlănțuiri de comenzi ​și comunicare eficientă interprocese+  * utlizarea Git și GitHub
-  * scripturi Bash. +  * lucrul în linia de comandă 
-  * suport agregat: +  * basic scripting 
-    [[http://​linuxcommand.org/​lc3_writing_shell_scripts.php|LinuxCommand.org - Writing Shell Scripts]] +  procese; 
-    * [[https://www.tldp.org/LDP/Bash-Beginners-Guide/html/|TLDP The Linux Documentation Project - Bash beginners guide]] +  * Recomandări de informații utile pentru rezolvarea temei
-        Pentru cei curioşi există şi un [[https://www.tldp.org/LDP/abs/html/|advanced Bash guide]] cu filtre de text mai exotice, I/O redirection cum s-a făcut la laborator, dar în care stdout/​stderr sunt unite. +    * [[https://docs.github.com/en/get-started/quickstart/hello-world|Hello World GitHub Docs]] 
-    * [[https://bash.cyberciti.biz/​guide/​Main_Page|Bash Guide - Cyberciti]] +    * [[https://ocw.cs.pub.ro/courses/uso/laboratoare/laborator-05|05. Conectarea la Internet]] 
-    * Tot pentru curioşi: puteţi să faceţi analiză statică a codului scris de voi în shell-script şi să vedeţi dacă aveţi erori general întâlnite care pot cauza diverse problemeExistă utilitarul [[https://github.com/koalaman/shellcheck|shellcheck]] care să vă ajute să scrieţi cod Bash de calitate mai bună. Puteţi să folosiţi tool-ul online [[https://​www.shellcheck.net/​|https://​www.shellcheck.net/​]] +    * [[https://ocw.cs.pub.ro/courses/uso/laboratoare/laborator-06|06. Îmbunătățirea lucrului în linia de comandă]] 
-    ​* **Suport de curs vechi** +    * [[https://ocw.cs.pub.ro/courses/uso/laboratoare/laborator-08|08Dezvoltarea aplicațiilor]]
-      ​* [[http://books.google.com/​books?​id=_JFGzyRxQGcC | Introducere în sisteme de operare]] +
-       * [[http://​books.google.com/​books?​id=_JFGzyRxQGcC&​pg=PA36 | Capitolul 12 - Shell scripting]] +
-    * [[http://​elf.cs.pub.ro/​uso/​res/carte/​uso_cap-07-cli.pdf|Capitolul 7 din carte: Interfața în linia de comandă]]+
  
  
-<note warning>se recomandă citirea cu atenție a întregului enunț înainte de rezolvarea task-urilor sau de a pune întrebări pe forum sau colegilor din jur</​note>​+<note warning>Se recomandă citirea cu atenție a întregului enunț înainte de rezolvarea task-urilor sau de a pune întrebări pe forum sau colegilor din jur!</​note>​
  
 ===== Testarea temei. Finalizarea temei. Mașină virtuală. ===== ===== Testarea temei. Finalizarea temei. Mașină virtuală. =====
  
-Verificaţi toate indicaţiile din [[uso:​teme:​tema-0|Tema 0]] cu privire la maşina virtuală şi configuratiile necesare. Dacă aveţi probleme postați pe forum!+Verificaţi toate indicaţiile din [[uso:​teme:​tema-0|Tema 0]] cu privire la maşina virtuală şi configuratiile necesare. Dacă aveţi probleme postațipe forum!
  
 /* /*
Line 71: Line 63:
 */ */
  
- 
- 
-<note warning> 
-Orice shell script pe care îl creaţi **trebuie** să înceapă cu ''​shebang''​-ul ''#​!/​bin/​bash'',​ adică: 
- 
-<code bash> 
-#!/bin/bash 
- 
-#aici puneţi comenzile voastre 
-</​code>​ 
- 
-FOARTE IMPORTANT: Asiguraţi-vă că aţi dat drept de execuţie pentru toată lumea: ''​chmod a+x /​path/​to/​my/​script.sh''​ 
-</​note>​ 
- 
-<note important>​In cazul task-urilor,​ scripturile scrise de voi sunt rerulate ​ 
-la ''​sudo uso check''​ si ''​sudo uso submit''​. ​ 
-Rularea unui script este echivalenta cu ''/​cale/​catre/​script.sh'' ​ 
-In cazul in care scriptul face ceva ce nu ar trebui, aveti grija sa corectati inainte sa dati  
-''​sudo uso check''​ sau ''​sudo uso submit''​. De asemenea ''​sudo uso check''​ si ''​sudo uso submit'' ​ 
-șterg orice fisier ce trebuie creat de scripturile voastre înainte de a rula scriptul ​ 
-(de exemplu la primul task, fisierul ''​users''​ va fi sters de fiecare data pentru a ne asigura ca  
-scriptul îl genereazaă corect) 
- 
-Pentru validarea tuturor celor 6 task-uri durata totală a checker-ului in cazul in care totul e corect e de aproximativ **1 minut** 
-pe un sistem cu 8 GB RAM si CPU i5 cu 2.5GHz 
-</​note>​ 
  
  
Line 108: Line 74:
 ==== Task obligatoriu pentru toate temele la final ==== ==== Task obligatoriu pentru toate temele la final ====
  
-Când finalizați tema si asigurați-vă că ați submis tema cu ''​sudo uso submit''​. ​                                                                                                                 ​+Când finalizați temaasigurați-vă că ați submis tema cu ''​sudo uso submit''​. ​                                                                                                                 ​
  
 <note warning> <note warning>
Line 116: Line 82:
 ===== Cerinţele temei ===== ===== Cerinţele temei =====
  
-==== Task 00 (0p) - Pregătire ​====+=== Pregătire ​checker ​===
  
-Creaţi în ''/​home/​student''​ un director numit ''​tema2-scripts''​ și un altul numit ''​tema2-scripts-output''​. În primul director veți pune toate fişierele necesare rezolvării temei, iar în al doilea veți genera toate fișierele după rularea scripturilor. Porniti ​lucrul la tema 2+Porniţi lucrul la tema 2
  
 <code bash> <code bash>
Line 124: Line 90:
 </​code>​ </​code>​
  
-Verificarea temei+După ce vă conectați cu user-ul și parola de pe moodle pe [[https://​temeuso.cs.pub.ro|platforma de teme]], introduceți codul primit mai sus când ați rulat ''​sudo uso start 2''​ pentru a porni tema!
  
-    * verificare toate task-urile +<note tip>​Dacă vom anunţa pe forum că apar modificări la checker trebuie rulată comanda ​următoare. Mai jos vedeți cum trebuie să arate outputul la succes:
-<code bash> +
-student@usohomework:​~$ sudo uso check +
-</​code>​ +
- +
-    * verificare task X, unde ''​X = (1..5)''​. Tema are 6 task-uri: +
- +
-<code bash> +
-student@usohomework:​~$ sudo uso check 5 +
-</​code>​ +
- +
-<note tip>​Dacă vom anunţa pe forum că apar modificări la checker trebuie rulată comanda ​''​sudo uso update''​. Mai jos aveți un exemplu de update de chacker.+
  
 <code bash> <code bash>
Line 147: Line 102:
 </​note>​ </​note>​
  
-==== Punctarea temei ====+=== Conexiune SSH ===
  
-Fiecare task are număr de puncte pe care checker-ul îl acordă în mod automat. Din nota maximă pe care o veţi obţine se pot 
-scădea 10 puncte. Asistenţii vor evalua conţinutul scripturilor cerute şi a configuraţiilor de sistem din task-uri. ​ 
  
-<note warning>​Citiţi de asemenea notele despre teme copiate: https://ocw.cs.pub.ro/​courses/​uso/​regulament#​penalizare_pentru_teme_copiate</​note>​+Conectaţi-vă la maşina virtuală folosind SSH**ESTE RECOMANDAT SĂ LUCRAŢI FOLOSIND SSH LA ACEASTA TEMĂ**, veţi avea nevoie de lucru în mai multe terminale!
  
 +<code bash>
 +mihai@wormhole:​~$ ssh -l student -p 2222 localhost
  
 +Warning: Permanently added '​[localhost]:​2222'​ (ECDSA) to the list of known hosts.
 +student@localhost'​s password: ​
 +Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.19.0-041900rc8-generic x86_64)
 +(...)
 +Last login: Sun Nov 25 21:01:19 2018 from 10.0.2.2
  
-==== Task 01 (10 p) ====+student@usohomework:​~$  
 +</​code>​
  
-În directorul ''​home/student/tema2-scripts'',​ creați un script numit ''​users.sh''​ ce sortează alfabetic utilizatori din fișierul ''​/etc/passwd''​ care lansează servicii în sistem șafișează numele șserviciile aferente acestora pentru primii 10Numele utilizatorilor șserviciul aferent vor fi separate prin '':'' ​(ex. irc:irc). Scriptul va afișa informațiile în fișierul ''​/home/student/tema2-scripts-output/users.out''​.+Pentru cei la care host-ul pe maşina fizică este Windows puteţi folosi utilitarul [[https://www.putty.org/​|Putty]]. Aveţaici un [[https://​www.ssh.com/ssh/putty/​windows/​|tutorial de Putty]]. Pur şsimplu alegeţca IP 127.0.0.1, protocol SSH, port 2222. Open and have fun. Deschideţatâtea instanţe de Putty câte terminale aveţi nevoie ​(recomandăm minim 5 - 4 containere, 1 pentru maşina de USO). De asemenea, puteți folosi client-ul built-in de ssh al Windows-ului (mai multe detalii [[https://www.howtogeek.com/​336775/how-to-enable-and-use-windows-10s-built-in-ssh-commands/|aici]])
  
-<note info> Vom considera că toți utilizatorii care lansează servicii în sistem au atribuit shell-ul /​usr/​sbin/​nologin.</​note>​ 
  
-==== Task 02 (20p) ====+<note tip> 
 +Revedeţi şi [[https://​ocw.cs.pub.ro/​courses/​uso/​teme/​tema-0#​task_03_0p|Task-ul 3 de la Tema 0]] 
 +</​note>​
  
-Se apropie sărbătorile așa că trebuie să ne pregătim să dăm mesaje celor dragi în mod inteligent! Drept urmare, în cadrul acestui exercițiu veți crea un script care va genera automat mesajele pentru prieteni și familie. 
  
-Pentru început, vom porni de la mesajul din fișierul numit "​template.txt" ​(fișier regăsit la următorul link de [[https://​github.com/​Petruc-Rares/​TemplateEx2.git| github]]).+==== Task 01 (10p====
  
-<note info>​Formatul fișierului template.txt este următorul:+=== Verificarea conexiunii la Internet pe mașina virtuală [4p] ===
  
-<​formula_adresare>​ <​nume>,​+Găsiți prin orice comandă interfața disponibilă si verificați că aveți IP pe interfața găsită. 
 +Salvați acest output într-un fișier numit: "/​home/​student/​tema2/​task1/​conexiune_internet.txt"​
  
--continut mesaj-+=== Verificați conectivitatea către un IP din Internet [3p] === 
  
-<​formula_incheiere>,​\\ +Trimiteți exact 8 pachete la un interval de 4 secunde fiecare către serverul DNS Google 8.8.8.8 folosind utilitarul ping. 
-<​semnatura>​+Salvați outputul într-un fișier numit: "/​home/​student/​tema2/​task1/​conexiune_server.txt"​
  
-</​note>​+=== Verificați conectivitatea către un site [3p] === 
  
-Scriptul va primi prin redirectare un fisier în care informațiile pentru ​fiecare ​contact se găsesc pe o linie diferită sub forma: +Trimiteți exact 5 pachete la un interval de 2 secunde ​fiecare ​la adresa www.google.com folosind utilitarul ping. 
-''<​NouaFormaDeAdresare>,<​NumeleDestinatarului>,<​UrareaDeFinal>,<​SemnaturaExpeditor>''​+Salvați outputul într-un fișier numit: "/​home/​student/​tema2/​task1/​conexiune_web.txt"​
  
-Noile fișiere create în urma rulării scriptului se vor afla într-un folder numit ''​ChristmasMessages'',​ aflat in ''/​home/​student/​tema2-scripts-output'',​ iar fiecare fișier din folder va avea următoarea denumire: ''​MesajPentru<​NumeleDestinatarului>''​. 
  
-==== Task 03 (20 p) ====+==== Task 02 (5p) ====
  
-<​note>​ Pentru rezolvarea acestui task veți avea nevoie de pachetele ''​genisoimage''​ si ''​tree''​.</​note>​ 
  
-Gigel și-a cumpărat un Raspberry Pi șar vrea să îl folosească pentru diferite scopuriGigel încă nu a auzit de virtualizare așa că s-a gândit să își țină copii ale sistemului de fișiere pe sistemul fizic. Astfelpentru o sarcină anume, Gigel poate încărca în spațiul de stocare al Raspberry Pi-ului o imagine a sistemului de fișiere pentru a îndeplini o anumită sarcină.+GitHub este o platforma de stocare ​și versionare a codului. Folosind informațiile obținute în laboratorul "​08 ​Dezvoltarea aplicațiilor",​ obținețrepository-ul următor la voi pe calculator: https://​github.com/​RaresCon/​USO-TEMA-2 ​și salvați-l la adresa: ''/​home/​student/​tema2/​task2''​astfel rezultând folderul ''/​home/​student/​tema2/​task2/​USO-TEMA-2''​.
  
-Ajutați-l pe Gigel să creeze ​fișierul ''/​home/​student/​tema2-scripts/​mount_images.sh''​ care, primind ca argument tipul operațiunii, face următoarele:​+După ce ați obținut repository-ul, extrageți ​fișierele în același folder și ștergeți arhiva!
  
-     - Dacă tipul operațiunii este ''"​MOUNT"''​+<​note>​ 
-        * Primește încă un paramentru în linia de comandă care reprezintă calea către imaginea ce trebuie montată +Hintgit clone 
-        * Montează temporar imaginea și copiază conținutul imagininii în ''​/home/​student/​extracted/​$NUME_IMAGINE''​ +</note>
-        * Dacă primește și argumentul opțional lung ''​--destination'',​ destinația devine calea ce succedă parametrul +
-        * Dacă se primește și parametrul lung ''​--directories'',​ copiază doar directoarele din lista care succedă parametrul. Usage: ''​--directories=”dir1 dir2 dir3”''​ +
-     - Dacă tipul operațiunii este ''"​CREATE"'':​ +
-        * Primește doi parametri: calea către sistemul de fișiere ce trebuie copiat și nume pentru imaginea ce vă fi creată+
  
-<note tip> Hint: getopt </​note>​+==== Task 03 (15p) ====
  
-==== Task 04 (20 p) ==== 
  
-În fișierul ​''/​home/​student/​tema2-scripts/weather.sh'' ​creațun one-liner ​care primește argumente în linia de comandă. Argumentele sunt de forma <Oras temperatura vreme> (ex. Bucuresti 10 soare). Scriptul ​va realiza următoarele acțiuni: +În urma rezolvării task-ului 02, aveți în folderul ​''/​home/​student/​tema2/​task2/​USO-TEMA-2'' ​un fișier care conține un text foarte lung, ''​long_story_short.txt'',​ pe care va trebui să îl copiațîn folderul ​''/​home/​student/​tema2/​task3/''​. ​Pentru că doriți să aflați anumite informații din acest textveți folosi diverse acțiuni asupra acestuia, acțiuni pe care le puteți găsi și în cadrul laboratoarelor "06 - Îmbunătățirea lucrului în linia de comandă"​ ș"07 - Automatizarea în linia de comandă"​. 
-  - (5 p) Va adăuga o intrare de forma <Oras temperatura vreme> ​în fișierul ​''/​home/​student/​tema2-scripts-output/weather.info''​. + 
-<note info>Ex: La rularea comenzii ''​./weather.sh Bucuresti 10 soare'' ​fișierul ''​weather.info''​ va conține linia ''​Bucuresti 10 soare''​.</​note>​ +<​note ​important
-<note warning> Pentru ​acest one-linernu adăugați linia ''#​!/​bin/​bash''​ în fișier.</note> +Pentru ​primi punctajul, trebuie să faceți următoarele task-uri folosind **o singură comandă** în terminal!\\  
-  - (10 p) Va memora starea actuală ​vremii și a temperaturii pentru fiecare oraș în fișierul ''​live.info''​ (dacă un oraș există, informațiile vor fi actualizate,​ dacă nu există, se va adăuga o intrare nouă). Fiecare linie din fișierul ''​live.info'' ​va fi de forma ''​Oras temperatura vreme''​+Se acceptă și comenzi înlănțuite prin ''​;''​.\\  
-<note info>​Ex: ​După rularea comenzilor ''​./​weather.sh Bucuresti 10 soare''  ​și ''​./​weather.sh Bucuresti 8 ploaie'' ​fișierul ''​live.info'' ​va conține linia ''​Bucuresti 8 ploaie''​.+Fiecare subtask depinde ​de cel anterior, mai puțin 1 ;).\\  
 +După fiecare subtask, atașla finalul ​fișierului **output.txt** comanda folosită, altfel punctajul primit ​va fi 0.
 </​note>​ </​note>​
-  - (5 p) Modificati one-liner-ul într-un script numit ''/​home/​student/​tema2-scripts/​weather_script.sh''​ care realizează aceleași acțiuni, dar poate primi argumentele în orice ordine. 
-<note warning>​În rezolvarea acestei cerințe, păstrați și fișierul inițial, ''​weather.sh''​.</​note>​ 
-<note info>Ex: După rularea comenzilor ''​./​weather_script.sh soare 10 Bucuresti'' ​ și ''​./​weather_script.sh Bucuresti ploaie 8''​ fișierul ''​weather.info''​ va conține liniile ''​Bucuresti 10 soare''​ și ''​Bucuresti 8 ploaie'',​ iar fișierul ''​live.info''​ va conține linia ''​Bucuresti 8 ploaie''​.</​note>​ 
  
 +[5p] 1. Vreți să vedeți rândurile care conțin cel puțin un cuvânt care începe cu substringul **"​con"​** sau se termină cu substringul **"​to"​**,​ căutarea nu este case sensitive. Înțelegem prin cuvinte care **încep/se termină** cu un substring, cuvinte care au la început/​final doar whitespace/​new line/semne ortografice sau de punctuație înainte/​după substringul respectiv. În urma aplicării căutării, veți stoca rândurile rezultate în urma comenzii într-un fișier **task3_1.txt** în folderul ''/​home/​student/​tema2/​task3/''​.
  
-==== Task 05 (20 p) ====+<note important>​ 
 +Exemplu: //​Recontopire//​ și //topit// **nu sunt** cuvinte acceptate.\\  
 +Dacă pe un rând apar mai multe cuvinte acceptate, acel rând trebuie să apară **o singură dată** în output! 
 +</​note>​
  
-Creați un script ​în directorul ''/​home/​student/​tema2-scripts/''​ numit ''​animals.sh''​ care generează cu ajutorul utilitarului ''​cowsay''​ toate imaginile din fișierul ''/​home/​student/​tema2-scripts/cows.txt''​, alături de mesajul primit, **sortate lexicografic** după mesaj.\\ +[6p] 2. Acum că aveți toate rândurile care conțin cuvintele potrivite, vreți să le sortați alfabetic folosind primul cuvânt al fiecărui rând, iar apoi să salvați primele 10 rânduri și ultimele 10 rânduri rezultate ​în urma sortării, în această ordine. Output-ul comenzii va fi salvat întru-un ​fișier **task3_2.txt** în folderul ​''/​home/​student/​tema2/​task3/''​.
-Dacă un ''​cowfile''​ nu se găsește la calea specificată în variabila de mediu ''​COWPATH'',​ atunci nu se va genera imagine cu acesta+
  
-Imaginile trebuie sa fie afișate una sub alta în fișierul ''/​home/​student/​tema2-scripts-output/cows-results.txt''​.+[4p] 3. Deși acum aveți un fișier mult mai scurt, nu vreți să luați fiecare rând în parte pentru a verifica dacă cel de-al doilea cuvânt are la început litera **"​m"​** sau **"​e"​**,​ așa că, folosind și aici **o singură comandă în terminal**, extrageți toate rândurile care respectă condiția anterioară **în ordinea în care acestea apar** ​în fișierul ​**task3_2.txt** și redirectați-le în fișierul **task3_3.txt** în folderul ​''/​home/​student/​tema2/​task3/''​. Prin cel de-al doilea cuvânt al rândului întelegem stringul între primul și al doilea whitespace ale rândului.
  
-<​note ​info>Fișierul ''/​home/​student/​tema2-scripts/​cows.txt''​ o să fie generat automat de către checker. Acesta este alcătuit din mai multe linii în formatul ''<​cowfile>​,<​message>''​ unde fiecare linie reprezintă o imagine specificată în variabila ​de mediu ''​COWPATH'' ​și un mesaj pe care să îl afișeze.+<​note ​tip> 
 +Aveți ​în vedere laboratoarele menționateîn care găsiți noțiuni despre loop-uri ​în Bash și comenzi ​de împărțire a stringurilor precum ​''​awk''​. 
 +</​note>​
  
-Utilitarul ''​cowsay''​ se folosește de variabila de mediu ''​COWPATH''​ pentru căutarea tuturor fișierelor ''​cowfile''​.</​note>​+==== Task 04 (16p) ====
  
-<spoiler Exemplu fișier cows.txt> +Multe proiecte mari sunt realizate folosind git
-turtle,"​aaaaaaaaa"​\\ +Acest mod de a realiza proiecte permite unor zeci sau sute de persoane să contribuie în același timp la proiectfără a se încurca unul pe celălalt
-dragon,"​b"​\\ +Acest task își propune să va familiarizeze cu modul în care cineva poate contribui la un proiect pe git.
-</​spoiler>​ +
-<spoiler Exemplu execuție>​ +
-<code bash> +
-[student@uso]$ /​home/​student/​tema2-scripts/​animals.sh +
-[student@uso]$ cat /​home/​student/​tema2-scripts-output/​cows-results.txt +
- ​_____________ +
-< "​aaaaaaaaa"​ > +
- ​------------- +
-    \                                  ___-------___ +
-     ​\ ​                            ​_-~~ ​            ​~~-_ +
-      \                         ​_-~ ​                   /~-_ +
-             /​^\__/​^\ ​        /​~ ​ \                   / ​   \ +
-           /​| ​ O|| O|        /      \_______________/ ​       \ +
-          | |___||__| ​     /       / ​               \          \ +
-          |          \    /      /                    \          \ +
-          |   ​(_______) /​______/ ​                       \_________ \ +
-          |         / /         ​\ ​                     /            \ +
-           ​\ ​        ​\^\\ ​        ​\ ​                 /               ​\ ​    / +
-             ​\ ​        ​|| ​          ​\______________/ ​     _-_       //​\__//​ +
-               ​\ ​      ​||------_-~~-_ ------------- \ --/~   ​~\ ​   || __/ +
-                 ​~-----||====/​~ ​    ​|==================| ​      ​|/​~~~~~ +
-                  (_(__/ ​ ./     / ​                   \_\      \. +
-                         ​(_(___/ ​                        ​\_____)_) +
- ​_____ +
-< "​b"​ > +
- ​----- +
-      \                    / \  //\ +
-       ​\ ​   |\___/​| ​     /   ​\// ​ \\ +
-            /0  0  \__  /    //  | \ \     +
-           / ​    / ​ \/_/    //   ​| ​ \  \   +
-           ​@_^_@'/ ​  ​\/​_ ​  // ​   |   ​\ ​  \  +
-           //​_^_/ ​    \/_ //     ​| ​   \    \ +
-        ( //) |        \///      |     ​\ ​    \ +
-      ( / /) _|_ /   ​) ​ //       ​| ​     \     _\ +
-    ( // /) '/,_ _ _/  ( ; -.    |    _ _\.-~        .-~~~^-. +
-  (( / / )) ,-{        _      `-.|.-~-. ​          ​.~ ​        `. +
- (( // / ))  '/​\ ​     /                 ~-. _ .-~      .-~^-. ​ \ +
- (( /// ))      `.   ​{ ​           }                   / ​     \  \ +
-  (( / ))     ​.----~-.\ ​       \-' ​                ​.~ ​        ​\ ​ `. \^-. +
-             ///​.----..> ​       \             _ -~             ​`. ​ ^-`  ^-_ +
-               ///​-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~ +
-                                                                  /.-~ +
-</​code>​ +
-</​spoiler>​+
  
 +Vom folosi un proiect open-source,​ existent pe Github, numit ([[https://​github.com/​unikraft/​unikraft|Unikraft]]).
 +Proiectele de asemenea anvergură permit doar unor anumite persoane să facă modificări direct în repository.
 +Celelalte persoane, care vor să contribuie, trebuie să treacă prin mai mulți pași pentru a adaugă o contribuție:​
 +  * realizarea unui fork, adică a unei copii a repository-ului,​ pe contul propriu
 +  * crearea unui branch, în care să fie făcute modificările dorite
 +  * în cazul Unikraft, semnarea fiecărui commit
 +  * crearea unui Pull Request, prin care se solicită integrarea branch-ului creat înainte în repository-ul original
  
 +La acest task vi se cere să realizați pașii de mai sus, //fără crearea unui Pull Request.//
  
-<note warning>​Programul nu trebuie să afișeze mesaje ​de eroare.</​note>​+Astfel, aveți de realizat următoarele:​ 
 +  * un fork propriu al proiectului Unikraft, care apoi va fi clonat în mașina de teme [4p] 
 +  * configurarea git, pe mașina de teme, adăugând o identitate (nume și email) [4p] 
 +  * crearea unui branch nou, pe fork-ul clonat; numele branch-ului ​trebuie să fie același cu username-ul ​de pe GitHub [4p] 
 +  * un commit semnat, care să aducă o modificare repository-ului (excreați un fișier gol) [4p] 
 + 
 +<note important>​ 
 +  * configurarea identității trebuie sa aiba scop **local** 
 +  * repository-ul clonat se va afla in folderul /​home/​student/​tema2/​task4/​ 
 +  * cautati informatii despre ''​git config''​ si ''​Sign Off''​ pentru a realiza task-urile 
 +</​note>​
  
 <note tip> <note tip>
-Hint!\\ +  ​Fisierul ''​CONTRIBUTING.md''​ din Unikraft contine informatii utile, care va pot ajuta in rezolvarea cerintelor.
-  ​man cowsay\\ +
-  * redirectare+
 </​note>​ </​note>​
  
-==== Task 06 (10 p) ====+<​note>​ 
 +Aveți în vedere și să marcați proiectul ca fiind **starred**. 
 +</​note>​
  
-Realizați un script în directorul ''/​home/​student/​tema2-scripts''​ numit ''​backup_task.sh''​ care creează un director cu numele ''/​home/​student/​tema2-scripts-output/​backup-confs''​ și salvează în acesta toate fișierele cu extensia ''​.conf'' ​ din ''/​etc'' ​(**în mod recursiv**), indiferent de tipul acestora. \\+==== Task 05 (10 p====
  
-<note info>​Toate erorile vor fi raportate în fișierul ''/​home/​student/​tema2-scripts-output/​backup-confs/​errors.txt''​.</​note>​+Un prieten vă cere ajutorul cu un virus. 
 +El vă spune că, de fiecare dată când pornește sistemul său, acesta se blochează după câteva minute. 
 +Virusul acesta se multiplică la un anumit interval de timp, umplând memoria sistemului cu procese, care nu fac nimic util.
  
-Mai departe, scriptul va realiza modificările necesare, astfel încât ​toate fișierele din directorul ''/​home/​student/​tema2-scripts/​backup-confs''​ de dimensiune mai mare de **1K**  să fie redenumite prin adăugarea sufixului ​''​_large''​. ​\\+Task-ul vostru este să opriți ​toate procesele malițioase, ​**folosind o singură comandă**
 +Prin "o singură comandă" se înțelege ceva executat în terminal, după o singură apăsare a tastei enter, care nu conține comenzi înlănțuite prin ''​;''​.
  
-<note warning>​Atenție! Verificarea se va face rulând scriptul drept utilizatorul ​''​student''​.</note>+Pentru acest task, aveți de realizat următoarele:​ 
 +  * căutați cum pot fi oprite, cu o singură comandă, mai multe procese 
 +  * rulați ​''​sudo /home/student/​tema2/​task5/​task5''​ 
 +  * gășiți procesele pe care trebuie să le opriți si opriți-le 
 +  * scrieți în fișierul ​''/​home/​student/​tema2/​task5/​sol.txt''​ comanda folosită
  
 +<note warning>
 +  * Dacă nu sunteți suficient de rapizi în oprirea proceselor, mașină virtuală se va bloca!
 +  * Rulați script-ul de start doar când sunteți siguri că știți cum să opriți procesele.
 +  * Dacă script-ul este gol, dezactivați orice antivirus, mai puțin Firewall-ul Windows.
 +</​note>​
  
 +==== Task 06 (14p) ====
  
-==== Task 07 (0p) ====+Fiind studenți la UPB, aveți unele beneficii. 
 +Unul dintre ele posibilitatea de a folosi mașini din cloud-ul facultății. 
 +Vă puteți conecta la aceste mașini folosind username-ul și parola de pe Moodle în felul următor: ''​ssh <​user>​@fep.grid.pub.ro''​
  
-Creați un fișier numit ''​readme.txt''​ în folder-ul ''​/​home/​student/​tema2-scripts'' ​(același în care ați pus și script-urile)Conținutul acestuia este:+Aveti de realizat urmatoarele task-uri: 
 +  - faceți configurația necesară pentru a vă putea conecta la fep **fără a vi se cere parola**, prin ssh[7p] 
 +  ​faceti configuratia necesara pentru a va conecta la fep folosind doar comanda ​''​ssh fep''​. ​Din nou, conectarea trebuie sa fie fara parola. [7p]
  
-Prima linie: nume,​prenume,​grupa+<note hint> 
 +Acest lucru se poate realiza prin folosirea unei perechi de chei. 
 +</​note>​
  
-Urmatoarele linii: +<note important>​ 
-Task0X ​descriere succinta (maxim 3 randuri) ​modului in care ai rezolvat + erorile raportate ​de checker si de ce considerați că e correct cum ați făcut.+  * Pentru ca checker-ul să poată verifica că ați făcut configurația corectă, va trebui să scrieți în fișierul ''/​home/​student/​tema2/​task6/​user.txt''​ username-ul vostru ​de pe moodle. 
 +  * La generarea cheilor, folosiți setările default. Checker-ul se așteaptă ca fișierele care conțin cheile să aibă denumirea șlocația implicită (//~/.ssh/​id_rsa[.pub]//​) 
 +  * Task-ul va trebui să fie rezolvat fără folosirea unui alias al comenzii! 
 +</​note>​
  
-La finalalte probleme generale ​pe care le-ați avut la checker independent de un task specificNu scrieți prea multfiți clari, succinți șpunctați strict problema ​și ce ați încercat+==== Task 07 (20p) ==== 
 + 
 +Creați un fișier ''/​home/​student/​tema2/​task7.sh''​ care să conțină comenzile ce realizează următoarele: 
 +    * Trimite o cerere HTTP de tip GET la ''​141.85.232.81:​5000/​uso/​part1/​$USERNAME''​. Prin USERNAME vom simula modul de acces utilizand un username ​pe un server. USERNAME va trebui setat de voi ca variabila de mediu la username-ul personal de Teams (e.g. marcel.gigel02) pentru ca checker-ul sa functioneze. Token-ul primit prin aceasta cerere va fi disponibil un minut, dupa aceea va fi resetat si username-ul va fi sters. 
 +    * Trimite o cerere HTTP de tip POST la ''​141.85.232.81:​5000/​uso/​part2''​ cu un body de tip JSON de forma ''​{"​token":​ <​token_primit>​}''​. 
 + 
 +La final, dacă se rulează comenzile din fișier, ar trebui să fie afișat doar rezultatul primit după doua cerere, fără ''​newline''​ (''​\n''​). 
 + 
 +[[https://​linuxhint.com/​http-get-vs-post-methods/​|GET vs POST methods]] 
 + 
 +==== Task 08 (10p) ==== 
 + 
 +[2p] 1. Obțineți repository-ul următor ​la voi pe calculator: https://​github.com/​andreistan26/​server-data și salvați-l la adresa ''/​home/​student/​tema2/​task8''​rezultând directorul ''/​home/​student/​tema2/​task8/​server-data''​. Apoi copiați fisierul **connection-logs.txt** in directorul ''/​home/​student/​tema2/​task8''​. 
 + 
 +[4p] 2. Dupa ce ați rezolvat pasul anterior vețavea in director fișierul **connection-logs.txt**,​ care conține in formatul **<​user-id>​ <​inactive/​active>​ <​duration>​** date despre conexiunile utilizatorilor la un serviciu. Afișați conexiunile **inactive** in formatul **<​user-id>​ <​duration>​** si pe ultima linie **Total: <numar conexiuni inactive>​** in fișierul  **inactive_connections_out.txt**. Salvațoneliner-ul in fișierul **inactive_connections.sh**. 
 + 
 +[4p] 3. Gasiti cei 8 utilizatori care au cea mai lunga conexiune activă. Afișarea se va face in formatul **<​index>​. <​user-id>​ <​duration>​** si salvată in fișierul **longest_connections_out.txt**. Salvați oneliner-ul in fișierul **longest_connections.sh**. 
 + 
 +<note important>​ 
 +  * toate căile din fișierele **"​.sh"​** trebuie sa fie căi absolute 
 +  * fișierele **"​.sh"​** trebuie sa conțină o singura linie, nu este nevoie de ''#​!/​bin/​bash''​ 
 +  * taskurile 2 si 3 se vor rezolva exclusiv in directorul ''/​home/​student/​tema2/​task8/''​ 
 +</​note>​
  
-<note important>​Ca să nu pierdeți ce ați muncit lăsați toate scripturile în ''/​home/​student/​tema2-scripts''</​note>​ 
  
 ==== Task obligatoriu pentru toate temele la final ==== ==== Task obligatoriu pentru toate temele la final ====
  
-Când finalizați tema asigurați-vă că ați submis tema cu ''​sudo uso submit''​.  ​+<note important>​
  
-<note important>​Ca să nu pierdeți ce ați muncit lăsați toate scripturile în ''​/​home/​student/​tema2-scripts''​. ​Verificați înainte de submit că ele sunt acolo!</​note>​+Când finalizați tema asigurați-vă că ați submis tema cu ''​sudo uso submit''​. ​ </​note>​
uso/teme/tema-2.1607691916.txt.gz · Last modified: 2020/12/11 15:05 by ioana_maria.culic
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0