This is an old revision of the document!


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: 24 Noiembrie, ora 23:55
Timp de lucru: 7 zile
Punctaj: 0.6 puncte din nota finală
Formular pentru trimitere temă: https://goo.gl/sQTKUl

Actualizări enunț:

  • Nu există

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

  • Nu există

Actualizări checker: versiunea 14

  • 19 noiembrie, 16:55 - A fost relaxata conditia de verificare a numarului de descriptori de fisier pentru Task 06. Valoarea acestui numar este verificata in intervalul [CorrectNrFDs - 8; CorrectNrFDs + 8]. Acest lucru inseamna ca nu e nevoie sa folositi mai mult de 8 comenzi pentru a afla numarul de descriptori de fisier.

Cunoștințe evaluate

  • lucrul cu utilizatori și grupuri
  • lucrul cu permisiuni și drepturi ale utilizatorilor sau ale grupurilor asupra fișierelor ori directoarelor
  • lucrul cu link-uri și căi în sistemul de fișiere
  • folosirea corectă a redirectării
  • înlănțuiri de comenzi și comunicare eficientă interprocese
  • noțiuni simple de scripturi Bash
  • suport agregat:
  • se recomandă citirea cu atenție a întregului enunț înainte de rezolvarea task-urilor

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.

Task 02 (25p)

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

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

Grupul ceo nu trebuie să existe în sistem la sfârșitul acestui task.

  • [4p] Adăugați utilizatorul student la grupul suplimentar qa.
  • [5p] Adăugați în sistem utilizatorul ceo aparținând grupurilor board (grup primar) și finance astfel încât directorul home să fie /home/company/.
  • [4p] Modificați grupul deținător al directorului /home/company/ în board (directorul trebuie să existe în prealabil).
  • [4p] Creați directorul /home/company/etaj2/ astfel încât utilizatorul deținător al acestuia va fi vp iar grupul deținător va fi board.
  • [4p] Modificați permisiunile directorului /home/company/ astfel încât toți utilizatorii sistemului să poată citi, scrie și executa.
  • [4p] Creați fișierul /home/company/etaj3 astfel încât:
    • utilizatorul employee să nu aibă niciun drept asupra fișierului
    • utilizatorii ceo și vp pot lansa în execuție fișierul
    • toți ceilalți utilizatori ai sistemului pot doar să citească și să scrie fișierul

În directorul /home/company/ nu trebuie să existe alte fișiere sau directoare în afară de cele menționate în enunț.

Task 03 (20p)

Faceți următoarele modificări în sistem astfel încât:

  • [0p] Utilizatorul manager să existe în sistem iar parola acestui utilizator trebuie să fie M@n4g3r.
  • [10p] Utilizatorul manager să poată executa cu drept de sudo comenzile: ls și cat, fără să îi fie cerută parola de la tastatură.
  • [10p] Pentru orice altă comandă în afară ce cele menționate la punctul anterior, utilizatorul manager nu va avea drept de sudo.

Task 04 (20p)

Lucrați într-o companie de succes și aveți o funcție de analist financiar. Unul din task-urile voastre este să găsiți angajatul cu cel mai mic salariu care are cele mai bune rezultate profesionale, pe baza unor date deja existente. În același timp trebuie să vă asigurați că datele existente sunt valide și provin din surse sigure. În cazul în care datele sau sursele nu sunt corecte va trebui să comunicați acest lucru superiorului vostru prin-un mesaj. La final, șeful vostru vă va comunica rezultatul muncii printr-o promovare la funcția de analist programator dacă ați rezolvat cu succes acest task. Multă baftă!

Din fericire, sunteți un bun utilizator al sistemului de operare Linux datorită studiului intens depus în facultate și doriți să vă ușurați această muncă. Pentru aceasta trebuie să creați scriptul /home/student/task4.sh care:

  1. Primește 2 argumente:
    1. [3p] Scriptul trebuie să verifice că s-au primit exact 2 argumente. În caz contrar scriptul trebuie să iasă cu valoarea de retur 4
    2. Primul argument reprezintă o cale către un director. În acel director se găsește un fișier ce conține date despre angajați, angajati.txt
      1. [3p] Dacă directorul nu există, atunci scriptul trebuie să iasă cu valoarea de retur 5
      2. [5p] Scriptul trebuie să verifice că primul argument primit este o cale absolută ce nu se află în afara directorului /home/student/task4/. În caz contrar scriptul trebuie să iasă cu valoare de retur 6
      3. [3p] Dacă fișierul nu există, atunci scriptul trebuie să iasă cu valoarea de retur 7
    3. Al doilea argument reprezintă numele unui angajat din compania vostră
  2. [0p] Caută în fișier, atât în lista primilor 10 de angajați cât și în lista ultimilor 10 angajați, toți angajații care au numele de familie identic cu numele primit ca al doilea argument
  3. [0p] Dintre acești angajați îl alege pe acela care are salariul cel mai mic
  4. [0p] Daca sunt mai mulți angajați care au același nume de familie și salarii egale atunci va trebui să îl găsiți pe acela care are cel mai mare scor de performanță
  5. [5p] După ce acest angajat a fost găsit, va trebui să afișați la ieșirea de eroare standard ID-ul acestui angajat.
  6. [1p] La final, scriptul trebuie să iasă cu valoarea de retur 8

Toate sub-punctele sunt dependente de sub-punctele anterioare. În concluzie, nu se acordă punctaj pentru subpunctul 1.b.I dacă sub-punctul 1.a nu este funcțional, ș.a.m.d. Această regulă este valabilă pentru orice sub-punct al acestui exercițiu.

Formatul fișierului ce conține date despre angajați este urmatorul:

ID_ANGAJAT\NUME\PRENUME\SALARIU_ANGAJAT\SCOR_PERFORMANȚĂ

Un exemplu de fișier găsiți la adresa:
https://elf.cs.pub.ro/~uso/res/teme/tema2_task4_sample.txt

Codurile de retur pe care trebuie să le returneze scriptul vostru:

  • 4 - dacă scriptul nu primește 2 argumente
  • 5 - dacă directorul primit ca prim argument nu există
  • 6 - dacă directorul primit ca prim argument nu este o cale absolută ce se află în directorului /home/student/task4/
  • 7 - dacă fișierul angajati.txt nu se găsește în directorul primit ca al doilea argument
  • 8 - dacă nu a avut loc nicio eroare

Task 05 (20p)

Pentru rezolvarea acestui task aveți nevoie de arhiva următoare:

https://elf.cs.pub.ro/~uso/res/teme/tema2_task5_partition.tgz

Dezarhivați arhiva partition.tar.gz. În urma dezarhivării va rezulta un fișier cu numele partition având dimensiunea de 10MB. Vrem să folosim fișierul partition ca suport pentru un sistem de fișiere pe care îl vom monta ulterior ca dispozitiv ce simuleaza o partiție a sistemului de operare. În cazul nostru, partiția rezultată va avea alocat un spațiu de 10MB.

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ă repatiționăm discul pe care este instalat sistemul nostru de operare.

  • Fișierul partition trebuie să se găsească în directorul /home/student/tema2/
  • [6p] Creați un sistem de fișiere de tip ext3 pe fișierul partition
  • [7p] Montați partiția partition în directorul /home/student/tema2/mnt/ (acest director trebuie să existe mai întâi), apoi creați pe această partiție un fișier gol ce va avea numele homework.txt
    • Atenție! Partiția nu se găsește pe un dispozitiv fizic ci într-un fișier. Pentru acest lucru aveți nevoie de un parametru special pe care îl transmiteți comenzii ce va fi folosită pentru montarea partiției.
    • De asemnea, pentru a putea crea fișierul homework.txt, partiția trebuie să fie montată cu drepturi de scriere.
    • După ce ați creat fișierul, demontați partiția pentru a salva modificările efectuate.
  • [7p] Montați din nou partiția partition în directorul /home/student/tema2/mnt/, dar de data aceasta fără drepturi de scriere. Partiția trebuie sa poată fi doar citită

Task 06 (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.

Scrieți one-liner-ul la calea /home/student/tema2/oneliner.sh, care realizează următoarele acțiuni:

  • verifică dacă fișierul oneliner.txt există în directorul părinte al directorului în care se află scriptul oneliner.sh (rețineți faptul că scriptul oneliner.sh poate fi rulat și din alt director din sistem, folosind o cale atât relativă cât și absolută pentru rularea sa)
  • dacă fișierul oneliner.txt există la calea specificată, atunci scriptul (one-liner) va adăuga la sfârșitul acestuia numărul total al descriptorilor de fișier cu indicele 2, al tuturor proceselor care ruleaza în sistem la momentul execuției
  • dacă fișierul oneliner.txt nu există la calea specificată, scriptul (one-liner) va trebui să-l creeze și să adauge în fișier doar 2 linii:
    • pe prima linie șirul de caractere errors:
    • pe a doua linie șirul de caractere file not found
    • Hint! man echo

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.

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

uso-ac/teme/tema-2.1479567587.txt.gz · Last modified: 2016/11/19 16:59 by tiberiu.barbu
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