Differences

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

Link to this comparison view

uso:teme:tema-2 [2024/11/11 21:34]
rares.sarmasag [Informații generale]
uso:teme:tema-2 [2025/12/11 08:38] (current)
ionut.mihalache1506 [Testarea temei. Finalizarea temei. Mașină virtuală.]
Line 24: Line 24:
  
 <note important>​ <note important>​
-Deadline: **2 decembrie 2024**\\ +Deadline: ​<color red>**28 noiembrie 2025 - ora 23:59**</​color>​\\ 
-Timp de lucru: **21 zile (cred)**\\ +Timp de lucru: **17 zile **\\ 
-Punctaj: **1.punct** din nota finală\\+Punctaj: **0.4 puncte** din nota temelor (se pot acoperi punctaje pierdute de la alte teme)\\
 </​note>​ </​note>​
 +<​hidden>​
 <note important>​ <note important>​
-SUBMIT: <​color ​green>**OPEN**</​color>​\\ +SUBMIT: <​color ​red>**CLOSED**</​color>​\\ 
-Perioada de submit ​este deschisa.\\+Perioada de submit ​s-a incheiat. Niciun submit dupa deadline nu va fi luat in calcul.\\
 </​note>​ </​note>​
 +</​hidden>​
  
 <​note>​ <​note>​
Line 38: Line 39:
   * **(tba)** N/A   * **(tba)** N/A
 </​note>​ </​note>​
 +<​hidden>​
 <​note>​ <​note>​
 Actualizări checker:\\ Actualizări checker:\\
-  * (time)11 Noiembrie 2024+  * 16:1522 Noiembrie 2024
   * <color green>​**Rulați ''​sudo uso update''​**</​color>​   * <color green>​**Rulați ''​sudo uso update''​**</​color>​
 </​note>​ </​note>​
 +</​hidden>​
 ===== Cunoștințe evaluate ===== ===== Cunoștințe evaluate =====
  
Line 55: Line 57:
     * [[https://​ocw.cs.pub.ro/​courses/​uso/​laboratoare/​laborator-05|05. Conectarea la Internet]]     * [[https://​ocw.cs.pub.ro/​courses/​uso/​laboratoare/​laborator-05|05. Conectarea la Internet]]
     * [[https://​ocw.cs.pub.ro/​courses/​uso/​laboratoare/​laborator-06|06. Îmbunătățirea lucrului în linia de comandă]]     * [[https://​ocw.cs.pub.ro/​courses/​uso/​laboratoare/​laborator-06|06. Îmbunătățirea lucrului în linia de comandă]]
 +    * [[https://​ocw.cs.pub.ro/​courses/​uso/​laboratoare/​laborator-07| 07. Automatizarea în linia de comandă]]
     * [[https://​ocw.cs.pub.ro/​courses/​uso/​laboratoare/​laborator-08|08. Dezvoltarea aplicațiilor]]     * [[https://​ocw.cs.pub.ro/​courses/​uso/​laboratoare/​laborator-08|08. Dezvoltarea aplicațiilor]]
  
- +===== Linkuri utile pentru ​rezolvarea ​temei ===== 
-<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>+  * [[uso:​teme:​tema-0 | Tema 0 - indicatii VM]] 
 +  * [[https://​regexlearn.com/​ | Regex Learn]] 
 +  * [[https://explainshell.com | Explain Shell]]
  
 ===== Testarea temei. Finalizarea temei. Mașină virtuală. ===== ===== Testarea temei. Finalizarea temei. Mașină virtuală. =====
Line 70: Line 75:
  
  
-<note warning>​Este interzisă publicarea pe forum a comenzilor sau pozelor care fac parte din rezolvarea parțială sau integrală a  +<note warning>​Este interzisă publicarea pe forum a comenzilor sau pozelor care fac parte din rezolvarea parțială sau integrală a temei ori a unui task. Dacă se întâmplă acest lucru punctajul pe toate temele (trecute sau viitoare) este anulat.. Dacă e necesar acest lucru vă rog să contactaţi în privat responsabilii de temă, la specificarea explicită a acestora pe forum!
-temei ori a unui task. Dacă e necesar acest lucru vă rog să contactaţi în privat responsabilii de temă, la specificarea explicită a acestora pe forum! +
- +
-**Aveţi voie, însă, să sugerați diferite abordări pe care mergeţi sau să dați idei generale (dar nu comenzi sau fişiere shell script) celorlalți chiar direct pe forum. Încurajăm clarificarea lucrurilor între studenţi atât timp cât nu sunt rezolvate cerinţele în mod direct. ** +
  
-Urmăriți [[uso:​regulament#​realizarea_temelor|indicațiile legate de realizarea temelor]]. La prima abatere studentul primește un avertisment,​ iar punctajul obținut pe temă îi este redus cu valoarea punctajului ​pe task-ul respectiv. Începând cu a doua abatere, se va anula întregul punctaj pe tema curentă. Temele anterioare ​sau cele viitoare nu vor fi afectate. Abaterile se păstrează ​pe parcursul semestruluiOri de câte ori se încalcă această regulă, se va ține cont de istoricul abaterilor. Abaterile vor fi actualizate ​în catalog.</​note>​+**Aveţi voie, însă, să sugerați diferite abordări pe care mergeţi sau să dați idei generale (dar nu comenzi ​sau fişiere shell script) celorlalți chiar direct ​pe forumÎncurajăm clarificarea lucrurilor între studenţi atât timp cât nu sunt rezolvate cerinţele ​în mod direct**</​note>​
  
 ==== Task obligatoriu pentru toate temele la final ==== ==== Task obligatoriu pentru toate temele la final ====
Line 113: Line 115:
  
 <code bash> <code bash>
-mihai@wormhole:​~$ ssh -l student -p 2222 localhost +mihai@wormhole:​~$ ssh student@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+
  
 student@usohomework:​~$ ​ student@usohomework:​~$ ​
Line 132: Line 128:
  
  
-==== Task 01 (10p) ====+==== Task 01 - Internet ​(10p) ====
  
-=== Verificarea ​conexiunii la Internet ​pe mașina virtuală ​[4p] ===+=== a) Verificarea ​cconectivitate in Internet [4p] === 
 +Trimiteți exact 5 pachete catre adresa 8.8.8.8 la intervale regulate de 6 sec  
 +afisand TIMESTAMP-ul pachetelor si activand reserve DNS resolution 
 +Salvați outputul în: ''/​home/​student/​tema2/​task1/​PING_PONG.txt''​
  
-Găsiți prin orice comandă o interfața disponibilă si verificați că aveți IP pe interfața găsită. +=== b) Urmarind Ruta [3p] ===  
-Salvați acest output ​într-un fișier numit: "/​home/​student/​tema2/​task1/​conexiune_internet.txt"+Trimiteti un singur pachet catre adresa 1.1.1.1, salvand ​output-ul ''​/​home/​student/​tema2/​task1/​four_ones.txt''​
  
-=== Verificați conectivitatea ​către un IP din Internet [3p] === +=== cInternet ​IPv6 [3p] ===  
 +Folosind **nslookup** gasiti adresa ipv4 si adresa ipv6 a **google.com**. Salvati fiecare adresa pe cate o linie in fisierul ''/​home/​student/​tema2/​task1/​ipv6.txt''​
  
-Trimiteți exact 8 pachete la un interval de 4 secunde fiecare către serverul DNS Google 8.8.8.8 folosind utilitarul ping. 
-Salvați outputul într-un fișier numit: "/​home/​student/​tema2/​task1/​conexiune_server.txt"​ 
  
-=== Verificați răspunsul unui site [3p] === +==== Task 02 - GET (12p) ====
  
-Trimiteți exact 5 pachete la un interval ​de 2 secunde fiecare la adresa www.google.com folosind utilitarul ping. +Pentru acest task, ne vom folosi de un clasic wordlist(un leak de parole care au fost facute publice de hackeri) ​numit '​rockyou',​ unul dintre cele mai mari din istorie.
-Salvați outputul într-un fișier ​numit: "/​home/​student/​tema2/​task1/​raspuns_web.txt"+
  
- +=== a) Get Wordlists ​(6p) ==== 
-==== Task 02 (5p) ==== +b) Acum ne vom folosi(adica voi) de skill-urile dobandite pentru a descarca folosind un request de tip GET(=a obtine ​resursa ​de pe internet) fisierul **rockyou.txt.gz**un celebru wordlist cu parole din datacentere sparte. Link-ul este acesta ​https://weakpass.com/wordlists/rockyou.txt. Problema este ca va trebui sa identificati link-ul aferent **fisierului**,​ nu paginii html. Dupa descarcaresalvati parola de pe line 7777 in fisierul ​''/​home/​student/​tema2/​task2/​my_password.txt''​
- +
- +
-GitHub este platforma ​de stocare și versionare a coduluiFolosind informațiile obținute în laboratorul "08 - Dezvoltarea aplicațiilor"​obțineți repository-ul următor la voi pe calculator: ​https://github.com/rares9301/USO-TEMA-2 și salvați-l la adresa: ''/​home/​student/​tema2/​task2''​astfel rezultând folderul ​''/​home/​student/​tema2/​task2/​USO-TEMA-2''​+
- +
-După ce ați obținut repository-ul,​ extrageți fișierele în același folder și ștergeți arhiva!+
  
 <​note>​ <​note>​
-Hint: git clone+Hint: apasati F12 si folositi tabul Network pentru a investiga link-ul pe care il accesati cand incercati sa descarcati wordlistul. ​
 </​note>​ </​note>​
  
-==== Task 03 (15p) ====+=== b) Checksum ​(6p) === 
 +Dupa ce descarcati si dezarhivati wordlist-ul,​ redirectionati un checksum de tip **sha256** al acestui wordlist in fisierul ''/​home/​student/​tema2/​task2/​wordlist_checksum.txt''​ 
  
  
-În urma rezolvării ​task-ului 02aveț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ți în folderul ​''​/home/​student/​tema2/​task3/''​. Pentru că doriți să aflați anumite informații din acest text, veț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ă"​ și "07 - Automatizarea în linia de comandă"​.+==== Task 03 - Wordlists (10p) ==== 
 +Pentru acest task ne vom juca cu fisierul extras la task-ul anterior(rockyou.txt) folosind comenzi precum grepcatwc.
 +Pentru fiecare subtask veti salva output-ul aferent ​pe o linie noua in fisierul ​''​home/​student/​tema2/​task3/​values.txt''​ pe care vav 
 +trebui sa il creati voi
  
 <note important>​ <note important>​
 Pentru a primi punctajul, trebuie să faceți următoarele task-uri folosind **o singură comandă** în terminal!\\ ​ Pentru a primi punctajul, trebuie să faceți următoarele task-uri folosind **o singură comandă** în terminal!\\ ​
 Se acceptă și comenzi înlănțuite prin '';''​.\\ ​ Se acceptă și comenzi înlănțuite prin '';''​.\\ ​
-Fiecare subtask depinde de cel anterior, mai puțin 1 ;).\\  +După fiecare subtask, atașați la finalul fișierului **task3/​outputs.txt** comanda folosită ​pentru a afisa la stdout raspunsul salvat in fisierul cu valori, altfel punctajul primit va fi 0. 
-După fiecare subtask, atașați la finalul fișierului **output.txt** comanda folosită, altfel punctajul primit va fi 0. +Exemplu: 
-</​note>​ +^ values.txt ^ outputs.txt ^ 
- +| student | echo $(whoami) | 
-[5p] 1. Vreți să vedeți rândurile care conțin cel puțin un cuvânt care începe cu substringul **"po"** sau se termină cu substringul **"mp"**, 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/''​.+| 10 | echo "10" ​
 +| 99 | echo "99" ​|
  
-<note important>​ 
-Exemplu: //​Compozitie//​ și //​amplifica//​ **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>​ </​note>​
  
-[6p] 2Acum că aveți toate rândurile care conțin cuvintele potrivite, vreți să le sortați alfabetic folosind al doilea 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/''​.+=== a) Octeti wordlist (5p) === 
 +a) Scrieti pe prima linie a fisierului ''/​home/​student/​tema2/​task3/​values.txt''​ numarul de octeti ocupat de wordlist-ul **rockyou.txt**
 + 
 +=== b) Parola cringe (5p) === 
 +b) Adaugati pe a doua linie a fisierului ​''/​home/​student/​tema2/​task3/​values.txt'' ​parola aflata pe pozitia 1337 d.p.d.v. alfabetic din primele 3000 de parole aflate in wordlist-ul nesortat.
  
-[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 cincilea cuvânt are la început litera **"​d"​** sau **"​f"​**,​ 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 cincilea cuvânt al rândului întelegem stringul între primul și al cincilea whitespace ale rândului. 
  
 <note tip> <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''​.+Aveți în vedere laboratoarele menționate,​ în care găsiți noțiuni despre ​instructiuni ​precum 'tail''sort', '​grep'​. Comenzile din fisierul **outputs.txt** vor fi rulate astfel incat sa  se obtina valorile aferente din fisierul **values.txt**
 </​note>​ </​note>​
  
-==== Task 04 (16p) ====+==== Task 04 - Regex (18p) ====
  
-Multe proiecte mari sunt realizate folosind git. +Pentru acest task va trebui sa descarcam un alt wordlist mai '​domestic'​ decat acel anterior si mai relevant pentru noi ca si limba(nu ne intereseaza parole ​cu alfabete non latine) si anume: https://​github.com/​kkrypt0nn/​wordlists/​blob/​main/​wordlists/​passwords/​most_used_passwords.txt; 
-Acest mod de a realiza proiecte permite unor zeci sau sute de persoane să contribuie în același timp la proiect, fără a se încurca unul pe celălalt. +
-Acest task își propune să va familiarizeze ​cu modul în care cineva poate contribui la un proiect pe git.+
  
-Vom folosi un proiect open-sourceexistent ​pe Github, numit ([[https://​github.com/​rares9301/anomaly-detection|anomaly-detection]]). +<note important>​ 
-Proiectele de asemenea anvergură permit doar unor anumite persoane să facă modificări direct în repository. +Hint: Link-ul de mai sus duce catre pagina webiar prin wget trebuie descarcat fisierul RAW. Folositi-va de interfata GitHub sau de internet pentru a afla acest URL si ulterior sa il descrcati ​pe VM. Daca veti incerca ''​wget ​https://​github.com/​kkrypt0nn/wordlists/​blob/​main/​wordlists/​passwords/''​ NU va functiona corectNu veti primi fisierul textci pagina web aferenta. Folositi-va de interfata web a GitHub si de resursele valabile pe internet ​pentru a afla structura aferenta URL-ul 
-Celelalte persoanecare vor să contribuie, trebuie să treacă prin mai mulți pași pentru a adaugă o contribuție:​ +</​note>​
-  * 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.// +=== a) Filtre basic (6p) === 
- +Dupa ce descarcati wordlist-ulveti scrie in fisierul ''​home/student/tema2/task4/password_statistics.txt''​ urmatoarele informatii 
-Astfel, aveți de realizat următoarele:​ +  * numarul de parole ​care incep cu caractere alfabetice 
-  * un fork propriu al proiectului anomaly-detection, ​care apoi va fi clonat în mașina de teme +  * numarul ​de parola care incep cu caractere speciale 
-  * Marcati proiectul original (nu fork-ul vostru) ca **starred** +  * numarul toturor parolelor care NU fac matching ​pe niciuna din cerintele ​de mai sus
-  * configurarea git, pe mașina ​de teme, adăugând o identitate (nume și email) +
-  * crearea unui branch nou, pe fork-ul clonat; numele branch-ului trebuie să fie același cu username-ul ​de pe GitHub +
-  * un commit semnat, care să aducă o modificare repository-ului (ex. creați un fișier gol)+
  
 <note important>​ <note important>​
-  * configurarea identității trebuie ​sa aiba scop **local** +Fisierul va trebui ​sa contina un numar per linie. Orice alt format nu va fi luat in considerare. 
-  * repository-ul clonat se va afla in folderul /​home/​student/​tema2/​task4/​ +</​note>​ 
-  * cautati informatii despre ''​git config''​ si ''​Sign Off'' ​pentru ​a realiza task-urile+ 
 +=== b) Filtre avansate (12p) === 
 +Doarece subtask-ul a) a fost de incalzire, acum dorim sa scriem pe a patra liniie numarul total de parole care respecta ​**cel putin una din conditiile urmatoare**: 
 +  * are la început minim 3 vocale 
 +  * are la final minim 3 consoane 
 +  * conține la mijloc minim o cifra(nu la inceput și nu la final) 
 + 
 +<note tip>Cel putin una inseamna ca se aplica OR logic pentru ​fiecare conditie in parte, evident exista si parole care respecta mai multe reguli simultan, deci reuniunea nu va fi egala cu suma multimilor ce respecta fiecare conditie in parte, ci va fi mai multa.
 </​note>​ </​note>​
-==== Task 05 (10 p) ====+==== Task 05 - Virus (10 p) ====
  
 Un prieten vă cere ajutorul cu un virus. Un prieten vă cere ajutorul cu un virus.
Line 237: Line 233:
 </​note>​ </​note>​
  
-==== Task 06 (14p) ====+==== Task 06 - SSH fep (15p) ====
  
 Fiind studenți la UPB, aveți unele beneficii. Fiind studenți la UPB, aveți unele beneficii.
Line 243: Line 239:
 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''​ 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''​
  
-Aveti de realizat urmatoarele task-uri: +=== a) fep connection (9p) === 
-  - faceți configurația necesară pentru a vă putea conecta la fep **fără a vi se cere parola**, prin ssh. [7p] +- 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] +
- +
-<note hint> +
-Acest lucru se poate realiza prin folosirea unei perechi de chei. +
-</​note>​ +
 <note important>​ <note important>​
   * 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.   * 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.
Line 257: Line 247:
 </​note>​ </​note>​
  
-==== Task 07 (20p) ==== 
  
-Creați un fișier ''/​home/​student/​tema2/​task7.sh''​ care să conțină comenzile ce realizează următoarele:​ +=== b) Shortcut (6p) === 
-    * 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. +faceti configuratia necesara ​pentru ​va conecta ​la fep folosind doar comanda ​''​ssh fep''​. ​Din nou, conectarea trebuie sa fie fara parola. [7p]
-    * 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ă a doua cerere, fără ''​newline'' ​(''​\n''​).+<note hint> 
 +Acest lucru se poate realiza prin folosirea unei perechi de chei. 
 +</​note>​ 
 +==== Task 07 - Analyzer ​(15p====
  
-[[https://​linuxhint.com/​http-get-vs-post-methods/|GET vs POST methods]]+Avem un scenariu in care presupunem ca avem un proces care executa cod malitios pe masina noastra virtuala(fiind VM-ul facultatii probabil nu va pasa, asa ca imaginativa ca este PC-ul vostru). Acestaconsuma foarte putine resurse ​CPU si memorie ​-, asa ca este posibil ca nu fie usor detectabil. Trebuie sa scrieti un script in bash care sa identifice ​//top K// procese care consuma //cel mai putin// CPU ori MEM.
  
-==== Task 08 (10p) ====+Scriptul se va rula astfel: 
 +''​./​analyzer.sh <​RESOURCE>​ K''​
  
-[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''​.+<note tip>​Primul argument parsat de catre script va fi //MEM// sau //CPU//, iar cel de al doilea parametru va fi un numar natural KUn exemplu de rulare ar fi:
  
-[4p] 2Dupa ce ați rezolvat pasul anterior veți avea in director fișierul **connection-logs.txt**,​ care conține in formatul **<​user-id>​ <​inactive/active> <​duration>​** date despre conexiunile utilizatorilor la un serviciuAfiș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ți oneliner-ul in fișierul **inactive_connections.sh**.+''​./analyzer.sh MEM 4'' ​-> top 4 procese care consuma cea mai putina memorie 
 +Posibil output:
  
-[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**.+<​code>​ 
 +PID,%MEM 
 +2,0.0 
 +3,0.
 +4,0.
 +5,0.3</code>
  
-<note important+''​./​analyzer.sh CPU 7''​ -> top 7 procese care consuma cel mai putin CPU 
-  * toate căile din fișierele **".sh"** trebuie sa fie căi absolute +<code
-  * fișierele **".sh"** trebuie sa conțină o singura linienu este nevoie de ''#​!/​bin/​bash''​ +PID,%CPU 
-  * taskurile ​si 3 se vor rezolva exclusiv in directorul ''​/home/​student/​tema2/​task8/''​+3,0.0 
 +4,0.
 +5,0.0 
 +6,0.1 
 +7,0.2 
 +</code>
 </​note>​ </​note>​
 +
 +Scriptul trebuie sa respecte **intocmai** formatarea din exemplu a output-ului,​ si anume:
 +  - Include prima linie ce contine PID-ul si resursa(%MEM/​%CPU)
 +  - Afiseaza K linii PLUS header-ul de tabel cu numele coloanelor
 +  - Cele 2 valori de pe fiecare linie sa fie separate prin virgula
 +
 +<note important>​Pentru acest task nu exista subtask-uri,​ implicit nici punctaj partial</​note>​
 +==== Task 08 - ZAR (20p) ====
 +Pentru acest task va trebui sa combinati cunostintele de USO cu cele de PCLP1 si sa scrieti un cod care sa simuleze datul cu zarul(2 zaruri). Citit cu atentie ambele subtask-uri pentru a intelege scopul exercitiului intrucat nu sunt disjuncte, iar rezolvarea celor 2 nu se succede d.p.d.v. temporal, ci se rezolva concomitent.
 +
 +<note important>​Pentru versionarea codului cu Git este suficient sa initializati proiectul de Git in directorul **task8**. De asemenea verificati ca fisierul sa aiba extensia //.sh//, iar parametrii primiti //py// si //c// sa fie litere mici ale alfabetului</​note>​
 +
 +=== a) Implementare Zar (12p) ===
 +1. Functionalitatea proiectului consta in apelarea unui mic shell script care va primi ca argument limbajul de programare in care vom simula zarurile pe care le aruncam - ori C, ori Python in felul urmator:
 +
 +''​./​zar.sh py''​
 +
 +''​./​zar.sh c''​
 +
 +Output-ul trebuie sa arate astfel:
 +''​Dau cu zaru X Y''​ unde X si Y sunt posibile numere ce apar pe fata unui zar, si anume numere naturale nenule, cuprinse intre 1 si 6. Exista 2 situatii exceptionale:​
 +  * ''​Dau cu zaru 6 5 n-am nevoie de servici''​
 +  * ''​Dau cu zaru 6 6 ca mine nu se mai naste''​
 +
 +
 +<note tip>​Gasiti o posibila implementare pentru acest proiect la linkul https://​github.com/​Nico7777777/​tema2-sample. Va puteti inspira pentru structura branch-urilor si commit-urilor.</​note>​
 +
 +=== b) Versionare cod (8p) ===
 +Al doilea subtask consta in implementarea acestui proiect utilizand un Git repo si avand minim 3 branch-uri(//​master//​ este inclus in acestea 3). Pentru simplitate se recomanda a nu modifica fisiere sau bucati de cod simultan in 2 branch-uri simultan intrucat poate duce la conflicte(adica 2 implementari diferite)
 +
 +
 +
 +<note warning>​Implementarea trebuie sa va apartina voua si numai voua. De asemenea pentru numele commit-uri se recomanda utilizarea unor descrieri sugestive. Utilizarea unui limbaj licentios poate duce la pierderea punctajului pe tema</​note>​
  
  
uso/teme/tema-2.1731353686.txt.gz · Last modified: 2024/11/11 21:34 by rares.sarmasag
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