Table of Contents

Tema 2

Ce trebuie să știu? Studiați secțiunea de Cunoștințe evaluate și suportul agregat necesar temei.

Thread nou? Nu. Pentru o ușoară parcurgere a mesajelor, folosiți thread-urile de discuții existente în cadrul forumului, fără a crea altele. În consecință, thread-urile (subiectele de discuții) nou create vor fi șterse.

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 imgur sau 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.

Regulament. Înainte și în timpul realizării temei, vă rugăm să parcurgeți 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 cs.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 întrebări frecvente întâlnite în cadrul temelor. Să țineți cont, va rugăm, și de 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.

Informații generale

Deadline: 9 Noiembrie 2017, ora 23:55
Timp de lucru: 7 zile
Punctaj: 0.8 puncte din nota finală
Formular pentru trimitere temă: Formular submitere

Actualizări enunț:

  • 3 Noiembrie 2017: Am adăugat clarificări în enunț legate de structura de directoare cerute.

Actualizări utilitar uso: versiunea v16 - “Gold Blackbird”

  • Nu există

Actualizări checker: versiunea 3

  • 4 Noiembrie 2017: versiunea 2: Task 2: Am corectat mesajul de eroare în cazul în care directorul koffing nu are owner-ul cerut.
  • 5 Noiembrie 2017: versiunea 3: Am actualizat checker-ul pentru task05. Se primeau puncte și pentru anumite rezolvări greșite.

Cunoștințe evaluate

Testarea temei. Finalizarea temei. Mașină virtuală.

Instrucțiuni de utilizare a checkerului uso

Descărcare mașină virtuală și informații despre aceasta

  • Mașina virtuală și link-ul de unde poate fi ea descărcată se găsesc pe pagina cu informații despre mașina virtuală.

Testarea temei se va face doar pe mașina virtulă (aici) autentificat ca utilizator student, folosind utilitarul uso. Acesta poate fi executat în orice moment pentru a verifica dacă au fost rezolvate corect task-urile. Nu lucrați autentificat ca utilizator root în sistem, la nicio temă. Din acest motiv există posibilitatea să nu vă treacă testele. Pe de altă parte, nu este o metoda de siguranță să lucrați autentificat ca utilizator root din motive de securitate și/sau permisiuni.

Utilitarul uso implementează testele doar pentru task-urile temei curente. La fiecare temă nouă, pentru a folosi utilitarul uso, primul pas este să porniți tema folosind comanda sudo uso start. În caz contrar, nu veți avea actualizat checker-ul pentru tema curentă.

Verificați versiunea utilitarului uso cât și a checker-ului, afișată la rularea comenzii sudo uso start sau sudo uso check, pe prima linie a output-ului. Asigurați-vă că aveți ultima versiune înainte de a continua lucrul pentru temă. Versiunea actuală este specificată în secțiunea Informații generale prezentă în enunțul temei. Pentru situațiile în care nu dispuneți de ultima versiune a utilitarului uso sau checker-ului, rulați sudo uso update.

Finalizarea temei se realizează prin rularea comenzii sudo uso submit și încărcarea codului returnat de această comandă (32 de caractere alfanumerice), în formularul din secțiunea Informații generale. Pentru a evita transcrierea eronată a codului returnat de checker, recomandăm copierea acestuia din interfața mașinii host conectată prin SSH către mașina guest după cum urmează:

  • În cazul în care folosiți Linux sau macOS, copierea codului se realizează din terminal selectând codul emis și apăsând combinația de taste CTRL+SHIFT+C (copy)
  • În cazul in care folosiți Windows, copierea se realizează din PuTTy selectând codul codul emis (nu este nevoie să folosiți CTRL+SHIFT+C, codul fiind automat copiat la selectare).
  • După ce a fost copiat în clipboard codul emis de checker, il puteți lipi (paste) în formularul din secțiunea Informații generale

Este interzisă publicarea pe forum a comenzilor sau pozelor care fac parte din rezolvarea parțială sau integrală a temei ori a unui task. Puteți să sugerați diferite abordări sau să dați idei generale (dar nu comenzi) celorlalți. Urmăriți 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 semestrului. Ori de câte ori se încalcă această regulă, se va ține cont de istoricul abaterilor. Abaterile vor fi actualizate în catalog.

Pentru fiecare task pentru care se cere ca rezolvarea să se realizeze într-o anumită cale, dacă acea cale nu există, atunci aceasta trebuie creată.

Checker-ul nu generează structurile de directoare cerute.

Task 01 (15p)

Vă aflați în folderul /home/student/tema02/task01.

Creați un script numit task01.sh. Scriptul primește două argumente:

Setați două variabile locale: MY_FILE și MY_PATH care să reprezinte primul și, respectiv, al doilea parametru al scriptului task01.sh.

Din interiorul scriptului task01.sh trebuie scris un nou script cu numele indicat de MY_FILE și care să se afle în locația MY_PATH. Se garantează faptul că MY_PATH este o cale validă existentă în sistemul de fișiere.

Scriptul MY_FILE trebuie să primească ca parametru un nume de utilizator și să afișeze procesele utilizatorului respectiv după următorul format: process_name pid ppid username user_id group_id

Exemplu de folosire a scriptului task01.sh:

[student@uso]$ sh task01.sh file.sh .
[student@uso]$ sh file.sh student
CMD1               PID  PPID USER       UID   GID
sshd            35911 35871 student 42596  9007
bash            35912 35911 student 42596  9007
sh              39465 35912 student 42596  9007
ps              39466 39465 student 42596  9007

Hint!

Task 02 (25p)

Pentru acest task, nu există niciun utilizator sau grup deja existent în sistem. Acestea trebuie create acolo unde este cazul.

Următoarele subpuncte trebuie realizate în ordine pentru a primi punctajul pentru acest task.

Faceți următoarele modificări în sistem astfel încât să respectați cerințele de mai jos:

Utilizatorul ash trebuie să aibă parola gotta_catch_them_all. Utilizatorul misty trebuie să aibă parola staryu, iar utilizatorul brock trebuie să aibă parola onix. Utilizatorii misty și brock trebuie adăugați în grupul gym_leaders. Utilizatorul ash trebuie să aibă home-ul în /home/ash_very_best.

Adăugați cei trei utilizatori (jessie, james și meowth) în grupul team_rocket

Atenție! Fișierele de mai sus trebuie create de către utilizatorul student.

Atenție! Grupul “specials” trebuie adăugat în sistem.

Task 03 (15p)

Atenție! Pentru a putea rezolva acest exercițiu, trebuie să rezolvați în prealabil Exercițiul 2, subpunctele a și b.

Realizați următoarele modificări asupra sistemului:

Task 04 (20p)

Task 04 nu este obligatoriu pentru USO-AC. Pentru nota maxima este de ajuns sa se obtine 80/100 puncte pe checker.

Din motive de infrastructura nu vom avea un checker diferit, se va ignora acest task.

Task 05 (15p)

Pentru început rulați comenzile în terminal și spargeți task-ul pe bucăți. Apoi încercați să puneți cap la cap comenzile utile care rezolvă task-ul.

Pentru realizarea și verificarea acestui task este nevoie de următoarea arhivă:

[student@uso]$ wget https://github.com/systems-cs-pub-ro/uso/raw/master/tema2/task05_files.tar

Vă aflați în directorul /home/student/tema02/task05/.

Dezarhivați arhiva task05_files.tar.gz.

Atenție! Fiecare fișier aflat în folder conține câte un cuvânt pe linie.

Fiind dată ierarhia de fișiere din folderul /home/student/tema02/task05/task05_files obținut în urma dezarhivării, să se realizeze un script oneliner numit oneliner.sh care afișează cuvintele unice și sortate descrescător (invers alfabetic) din fișierele care conțin în denumirea lor grupul .gr urmat de o cifră mai mare sau egală cu 6 și de către caracterele b. între liniile 5 și $EOF (end of file) din fiecare fișier și din fișierele care conțin în denumirea lor grupul .gr8b. în primele 3 linii ale fiecărui fișier. Atenție! Printre cuvinte obținute nu trebuie să se afle următoarele cuvinte: password, 123456, abcd, passw0rd, qwerty.

Cuvintele trebuie să se afle câte unul pe linie și să fie scrise în fișierul /home/student/tema02/task05/uniques.txt.

Atenție! Scriptul nu va fi rulat doar din /home/student/tema02/task05/.

Prin cuvinte unice nu se înțelege cuvinte care apar o singură dată într-un singur fișier, ci se dorește ca în fișierul final să nu existe duplicate.

Atenție! Scriptul trebuie să funcționeze pentru orice număr de fișiere. Scripturile cu valori hardcodate NU vor fi punctate.

Hint:

  • tail cu mai multe fișiere ca argument
  • redirectare

Scriptul nu trebuie să conțină instrucțiuni de decizie, interne Bash, precum test sau if și nici instrucțiuni repetitive precum for sau while, ultimele trei nefiind studiate până la acest moment. De asemenea, comenzile unui oneliner nu sunt separate de caracterul ; (punct și virgulă). Altfel, acestea pot fi la fel de bine scrise una sub alta, lucru care degradeaza noțiunea de oneliner.

Constrângerile impuse pentru acest task:

  1. oneliner.sh să fie un script de tip oneliner
  2. uniques.txt trebuie:
    1. să conțină câte un cuvânt pe linie
    2. să conțină cuvintele unice sortate descrescător din:
      1. fișierele care conțin grupul .gr urmat de o cifră mai mare sau egal ca 6 și de grupul b.. Pentru aceste fișiere se vor ignora primele 4 linii.
      2. fișierele care conțin grupul .gr8b.. Pentru aceste fișiere se vor considera doar primele 3 linii ale acestora.
    3. să nu conțină cuvintele: password, 123456, abcd, passw0rd, qwerty.
    4. să fie generat de către script
  3. oneliner.sh să nu conțină: ;, instrucțiuni for, while, test sau if.
  4. oneliner.sh să funcționeze pentru orice număr de fișiere. Scripturile cu valori hardcodate NU vor fi punctate.

Task 06 (10p)

Vă aflați în directorul /home/student/tema02/task06.

Este util să folosim fișiere ca suport pentru un sistem de fișiere atunci când nu avem la dispoziție dispozitive fizice și dorim experimentarea de noi sisteme de fișiere, fără să fie nevoie să repartiționăm discul pe care este instalat sistemul nostru de operare.

Task obligatoriu pentru toate temele (0p)

Asigurați-vă că ați submis tema și ați încărcat codul aferent submisiei în formularul din secțiunea de Informații generale. Acest lucru este necesar ori de câte ori modificați tema și o submiteți din nou (detalii aici), până la termenul limită. În caz contrar, punctajul aferent temei va fi nul (0 puncte).