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. NU SE ACCEPTA POZE FACUTE CU TELEFONUL (se poate recurge la depunctări, sunt imposibil de urmărit).
Actualizări. Urmăriți în special forumul, în topic-urile dedicate taskurilor respective. Urmăriţi ş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. Studenţii cu o atitudine pozitivă, activă şi care îşi ajută colegii pot fi răsplătiţi cu puncte karma sau un PIN USO.
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 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 a putea începe tema, nu uitați să rulați comanda:
student@uso-teme:~$ sudo uso start 3
Tema poate să conțină doar scripturi bash și fișiere text.
Înainte de a vă apuca, intrați in directorul acesta.
Scrieți un script bash script_user.sh care automatizează procesul de creare a unui utilizator nou în sistem, incluzând configurarea directorului home și logging-ul datelor.
sudo ./script_user.sh username password cale_director_copiat
Scriptul trebuie să verifice dacă argumentele primite sunt corecte. Scriptul trebuie să primescă 3 argumente la linia de comandă, parola trebuie să aiba minim 8 caractere, iar folderul specificat în argumentul 3 trebuie să fie existent.
Mesajele de eroare standard pentru neîntâlnirea uneia dintre cele 3 condiții:
1. “Eroare: Numar incorect de argumente”
2. “Eroare: Parola trebuie sa aiba minim 8 caractere”
3. “Eroare: Folderul <cale> nu exista”
Scriptul trebuie să se ocupe de crearea utilizatorului (cu home directory și shell) și cu setarea parolei utilizatorului.
Scriptul trebuie să copieze corect în /home/username/ directorul dat ca al treilea argument.
Scriptul trebuie să extragă informații despre user din /etc/passwd și să pună datele pe câte o linie în fișierul user_info.log din /home/username
Shell-ul implicit pentru utilizatorul nou trebuie să fie /bin/bash
Fișierul de log: /home/username/user_info.log
Formatul log-ului trebuie să conțină pe câte o linie: username, UID, GID, home directory, shell
Scriptul trebuie să gestioneze corect erorile și să se oprească imediat dacă o verificare eșuează
Înainte de a vă apuca, intrați in directorul acesta.
Scrieți un script bash animatie.sh care ne arată cât timp s-a scurs din taskul pe care îl rulăm, în cazul nostru o să fie procese sleep.
./animatie.sh timp_total interval1 interval2 ...
Scriptul trebuie să verifice dacă argumentele primite sunt corecte. Scriptul trebuie să primescă măcar două argumente. Primul argument este timpul total al taskului, iar următoarele sunt durata intervalelor.
Mesajele de eroare standard pentru neîntâlnirea condiției:
1. “Numar gresit de argumente”, când sunt mai puțin de 2 argumente.
2. “Intervalele sunt prea mari”, când suma intervalelor este mai mare decât durata totală.
Scriptul trebuie să citească intervalele, și să afișeze la finalul fiecăruia bara de progres actualizată. Durata intervalului este dată în secunde. Progresul este notat cu ”=”, iar timpul rămas este notat cu ”-”. Un exemplu de rulare a scriptului este următorul:
$ ./animatie.sh 5 2 1 2 [-----] [==---] [===--] [=====]
Scriptul trebuie să verifice dacă taskul s-a finalizat cu succes, sau dacă a dat crash. Dacă totalul intervalelor este mai mic decât timpul total atunci taskul nu a ajuns la final, și se afișează un mesaj. Un exemplu de rulare a scriptului în care procesul nu ajunge la final este următorul:
$ ./animatie.sh 5 2 1 1 [-----] [==---] [===--] [====-] Taskul a dat crash
Scriptul trebuie să întoarcă un cod potrivit pentru execuția lui. Codurile de întoarcere sunt următoarele:
- Dacă taskul a fost rulat cu succes până la final, codul de întoarcere este 0.
- Dacă task a fost rulat cu succes, dar nu și-a terminat execuția, codul de întoarcere este numărul de secunde rămase.
- Dacă scriptul a primit un număr greșit de argumente, atunci codul de întoarcere este 1.
- Dacă suma intervalelor este mai mare decât timpul total, atunci codul de întoarcere este 2.
Înainte de a vă apuca, intrați in directorul acesta.
my_menu.sh care creează un meniu de bază pentru realizarea operațiilor pe fisiere si directoare într-un sistem cu Linux, conform diagramei:Ieșire la fiecare pas, pentru a va facilita testarea. Acest pas nu are însă niciun efect asupra puncajului obținut la acest task.
Înainte de a vă apuca, intrați in directorul acesta.
La taskul 4 trebuie să scrieți 2 scripturi. Primul script, numit extract_url.sh, ne filtrează URLuri, iar al doilea script, numit generate_mails.sh, ne generează mailuri pe baza rezultatului primului script.
./extract_url.sh urls.txt ./generate_mails.sh correct_urls.txt
Fișierul “urls.txt” conține multe URLuri pe care trebuie să le extrageți folosind scriptul extract_url.sh. Sunt 3 tipuri de URLuri care ne interesează:
URLuri Web (http://, https://)
URLuri de transfer (ftp://)
Adrese de mail formatate ca link (mailto:)
Scriptul trebuie să extragă din fișierul primit ca argument toate URLurile valide. Vom considera că un URL este valid dacă:
- Este compus din Protocol + Separator + Domeniu + Cale(Opțională)
- Protocoalele acceptate sunt cele precizate mai sus, unde le sunt precizate și separatoarele, mai exact ”//” pentru http, https și ftp, și ”:” pentru mailto.
- Domeniul poate să conțină litere mici sau mari, cifre, puncte și cratime. Domeniul trebuie să se termine cu un top level domain de minim 2 litere (ex: .ro, .com).
- Conține caracterul ”@” dacă e mail, și nu îl conține dacă nu e mail.
- Opțional poate să aibă și o cale. Calea este la final, după un /. Calea poate să conțină cifre, litere și caractere uzuale pentru cai (., _, ?, =, &, %, -). URLul poate să aibă o cale de maxim un nivel adâncime. În cazul în care are mai mult decât un nivel adâncime, se returnează URLul doar cu primul nivel ( exemplu: https://www.exemplu.ro/files/curs1.pdf devine https://www.exemplu.ro/files ).
Rezultatul scriptului trebuie salvat în fișierul /home/student/tema3-task4/correct_urls.txt.
În urma rularii scriptului precedent am obținut o lista de URLuri, dintre care și mailuri.
Scriptul generate_mails.sh extrage toate mailurile pentru @pub și generează echivalentul său pentru @studenti.upb.
De exemplu, mailto:uso-team@pub.ro devine uso-team@studenti.upb.ro.
Rezultatul scriptului trebuie salval în fișierul /home/student/tema3-task4/mails.txt.
Înainte de a vă apuca, intrați in directorul acesta.
./parole_gaming.sh common_words.txt passwords.txt
Scrieți un script care primește ca argumente două fișiere. Primul este un dicționar de parole cunoscute, iar al doilea este plin cu potențiale parole.
Scriptul parole_gaming.sh verifică fiecare parolă din cele potențiale, și scrie în fișierul cleaned_passwords.txt toate parolele valide, adică cele care trec toate cele 8 criterii de validitate:
- Conține cel puțin o literă mare.
- Conține cel puțin o literă mică.
- Conține cel puțin o cifră.
- Conține cel puțin un semn de punctuație din setul: ”!@#$%^&*?-_=+”.
- Nu conține spații.
- Are lungimea între 8 și 128 de caractere.
- Nu are mai mult de 3 caractere identice consecutive (Ex: “aabaa” îndeplinește acest criteriu, dar “aaaab” nu îl întâlnește).
- Nu conține niciun cuvânt din dicționar (Ex: “aA!1test” nu îndeplinește acest criteriu, deoarece “test” este un cuvânt din dicționar).
Rezultatul scriptului trebuie salvat în fișierul /home/student/tema3-task5/cleaned_passwords.txt
Finalizați tema si asigurați-vă că ați submis tema cu sudo uso submit.