Differences

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

Link to this comparison view

sde:teme:tema_ro_2_busybox [2020/03/14 13:14]
ioana_maria.culic
— (current)
Line 1: Line 1:
-====== Tema 2 - Mini-busybox ====== 
- 
-===== Informații generale ===== 
- 
-<note important>​ 
-Deadline: **15 Martie, ora 23:55**\\ 
-Punctaj: **1 punct** din notă\\ 
-Încărcarea temei: [[https://​vmchecker.cs.pub.ro|vmchecker.cs.pub.ro]]\\ 
-Încărcarea cu întârziere:​ **1 punct / zi** (maxim 4 zile)\\ 
-</​note>​ 
- 
-===== Cunoștințe evaluate ===== 
- 
-  * Folosirea limbajului Python 
-  * Modul de funcționare a liniei de comandă 
- 
-===== Reguli ===== 
- 
-  - Tema trebuie să conțină un fișier Readme în care să explicați cum ații făcut tema **(-0.1p)**. 
-  - Tema trebuie implementată folosind limbajul Python și doar folosind funcții POSIX (biblioteca Python **[[https://​docs.python.org/​3/​library/​os.html|os]]**). Orice alte implementări vor duce la anularea temei **(0 puncte)**. 
- 
-<note warning> 
-Folosiți doar biblioteca Python **[[https://​docs.python.org/​3/​library/​os.html|os]]**,​ nu biblioteca Python posix. 
-</​note>​ 
- 
-===== Copierea ===== 
- 
-Tema se rezolvă individual. Orice tentativă de copiere va rezulta în **0 puncte** pentru tema respectivă. Vom utiliza și sisteme automate de detectare a copierii. Dacă avem dubii, vă vom adresa întrebări suplimentare legate de temă. 
- 
-===== Întrebări ===== 
- 
-Dacă aveți întrebări legate de temă, vă rugăm să scrieți un issue pe repository-ul de github [[https://​github.com/​upb-fils/​sde.git|repository]] cu titlul de forma [busybox] <titlul întrebări voastre>​. Aveți nevoie de un cont de github pentru a scrie întrebări. 
- 
-<note warning> 
-**NU PUBLICAȚI COD SURSĂ**. Acesta va fi considerată copiere și se va penaliza cu **0 puncte** pe temă pentru voi. 
-</​note>​ 
- 
-Dacă doriți să primiți un email când se pun întrebări noi sau cand apar răspunsuri,​ accesați github [[https://​github.com/​upb-fils/​sde|repository]] și faceți click pe //Watch//. 
- 
-===== Mini-busybox ===== 
- 
-Scopul acestei teme este implementarea unui utilitar capabil să execute comenzi tip Linux bash.  
- 
-Pentru rezolvarea temei veți realiza un script Python care primește ca argumente comanda ce se dorește a fi executată, urmată de parametrii acesteia. Scriptul va executa comanda după care își va încheia execuția. ​ 
- 
-**Exemplu:​** 
-<code bash> 
-python busybox.py cp file folder 
-</​code>​ 
- 
-<note info> 
-Programul va fi rulat folosind Python 3. 
-</​note>​ 
- 
-==== Comenzi suportate ==== 
- 
-În continuare, vom defini comenzile suportate de utilitar, împreună cu comportamentul caracteristic și parametrii pe care acestea de suportă. Pentru orice altă comandă sau orice alt format, scriptul va afișa mesajul **Invalid command** și va returna valoarea **-1**. 
- 
-<note info> 
-Datorita unor incompatibilitati intre sistemul Linux si alte sisteme, codul de eroare intors afisat de terminalul Linux va fi egal cu 255, nu cu -1. Daca terminalul afiseaza 255 ca si cod de eroare, rezolvarea este corecta. ​ 
- 
-Acest lucru se va intampla si cu codurile de eroare specificate mai jos, pentru fiecare din ele, terminalul va afisa un numar pozitiv. 
-</​note>​ 
- 
-În cazul în care comanda primită de utilitar a fost rulată cu succes, acesta va returna valoarea 0.  În caz contrar, acesta va returna un cod de eroare specific, mentionat in descrierea comenzii. 
- 
-<note info> 
-Pentru a vă ajuta în înțelegerea modului de funcționare a fiecărei comenzi, am atașat pagina de manual a acesteia. Nu se cere implementarea tuturor parametrilor precizați în manual, doar a celor precizați în cerință. 
- 
-Parametrii de forma [parametru] sunt optionali. 
-</​note>​ 
- 
-Comenzile suportate de aplicația mini-busybox sunt: 
- 
-  *** pwd** - Afișează calea completă a directorului curent. (https://​linux.die.net/​man/​1/​pwd) 
- 
-**Exemplu:​** ​ 
-<code bash> 
-$ python busybox.py pwd 
-/​home/​pi/​my_directories ​   ​ 
-</​code>​ 
- 
-  * **echo [opțiune] argumente** - Afișează argumentele în consolă urmate de linie nouă (https://​linux.die.net/​man/​1/​echo). In caz de eroare intoarce valoarea -10 (in terminal se va afisa valoarea 246). 
-      * **-n** ​ nu adaugă o linie nouă la final 
- 
- ​**Exemplu:​** ​ 
-<code bash> 
-$ python busybox.py echo a b c 
-a b c 
-$ python busybox.py echo -n a b c 
-a b c$    ​ 
-</​code>​ 
- 
-  * **cat fișiere** - Concatenează conținutul fișierelor și îl afișează la ieșirea standard (https://​linux.die.net/​man/​1/​cat). In caz de eroare intoarce valoarea -20 (in terminal se va afisa valoarea 236). 
- 
- ​**Exemplu:​** ​ 
-<code bash> 
-$ python busybox.py cat file1 
-Text in file1                        
-$ python busybox.py cat file2 
-Text in file 2 
-$ python busybox.py cat file1 file2 
-Text in file1 
-Text in file 2  
-</​code>​ 
- 
-  * **mkdir directoare** - Crează directoarele pasate ca parametru, dacă nu exista deja. Dacă operația de creare a directoarelor eșuează, scriptul va întoarce valoarea -30 (in terminal se va afisa valoarea 226) (https://​linux.die.net/​man/​1/​mkdir) 
- 
- ​**Exemplu:​** ​ 
-<code bash> 
- ​python busybox.py mkdir my_drectory 
- ​python busybox.py mkdir my_drectory1 my_drectory2 my_drectory3 
-</​code>​ 
- 
-  * **mv sursă destinație** - Mută/​redenumește fișierul/​directorul sursă în destinație (https://​linux.die.net/​man/​1/​mv). In caz de eroare intoarce valoarea -40 (in terminal se va afisa valoarea 216). 
- ​**Exemplu:​** ​ 
-<code bash> 
-python busybox.py mv my_file my_directory 
-python busybox.py mv my_directory1 my_drectory2 ​ 
-</​code>​ 
- 
-  * **ln [opțiune] sursă nume_link** - Creează un link cu numele nume_link către fisierul sursă. Se poate crea un link doar către un fișier (https://​linux.die.net/​man/​1/​ln). In caz de eroare intoarce valoarea -50 (in terminal se va afisa valoarea 206). 
-    * **-s, --symbolic** creează un link simbolic în locul unui link hard 
- ​**Exemplu:​** ​ 
-<code bash> 
-python busybox.py ln my_file my_file_link 
-python busybox.py ln -s my_file my_file_link3 
-</​code>​ 
- 
-  * **rmdir directoare** - Șterge directoarele goale pasate ca parametru (https://​linux.die.net/​man/​1/​rmdir). In caz de eroare intoarce valoarea -60 (in terminal se va afisa valoarea 196). 
- ​**Exemplu:​** ​ 
-<code bash> 
-python busybox.py rmdir my_empty_directory 
-python busybox.py rmdir my_empty_directory1 my_empty_directory2 
-</​code>​ 
- 
-  * **rm [opțiuni] fișiere/​directoare** - Șterge fișierele sau directoarele pasate ca parametru. Fără opțiuni, nu șterge directoare, dacă se pasează ca parametrii și fișiere și directoare, fișierele se șterg și se întoarce valoarea -70 (in terminal se va afisa valoarea 186). (https://​linux.die.net/​man/​1/​rm) 
-    * **-r, -R, --recursive** șterge directoarele și tot conținutul acestora 
-    * **-d, --dir** șterge directoarele goale 
- ​**Exemplu:​** ​ 
-<code bash> 
-python busybox.py rm my_file1 my_file2 
-python busybox.py rm -R my_directory 
-python busybox.py rm --dir my_empty_directory 
-</​code>​ 
- 
-  * **ls [opțiuni] [director]** - Listează conținutul directorului. Dacă nu este specificat un director, listează conținutul directorului curent; fără opțiunea **-a/​--all**,​ nu se afișează fișierele/​directoarele ascunse (al căror nume incepe cu .). Dacă primește ca parametru calea către un fișier, va afișa însuși parametrul. Fiecare fișier/​director se va afișa pe o linie nouă. In caz de eroare intoarce valoarea -80(in terminal se va afisa valoarea 176). (https://​linux.die.net/​man/​1/​ls) 
-    * **-a, --all** afișează și fișierele/​directoarele ascunse (al căror nume incepe cu .)  
-    * **-R, --recursive** afișează conținutul fiecărui director din ierarhie. Pentru fisierele/​directoarele care nu se găsesc direct în punctul de citire, se va afișa calea completă, ex: output/​test/​file. 
- ​**Exemplu:​** ​ 
-<code bash> 
-$ python busybox.py ls 
-  directory1 
-  Directory2 
-  File1 
-  file2 
-$ python busybox.py ls -a 
-  . 
-  .. 
-  directory1 
-  Directory2 
-  File1 
-  File2 
-$ python busybox.py ls Directory2 
-  f1 
-  f2 
-</​code>​ 
- 
-  * **cp [opțiune] sursă destinație** - Copiază un fișier sau un director sursă în destinație. Dacă nu se precizează numele destinației,​ fișierul va fi copiat sub numele sursei (https://​linux.die.net/​man/​1/​cp). In caz de eroare intoarce valoarea -90 (in terminal se va afisa valoarea 166). 
-    * **-R, -r, --recursive** copiază recursiv; se folosește pentru copierea directoarelor și copiază directorul cu tot conținutul acestuia 
- ​**Exemplu:​** ​ 
-<code bash> 
-python busybox.py cp my_file my_directory 
-python busybox.py cp -r my_directory1 my_directory2 
-</​code>​ 
- 
-  * **touch [opțiuni] fișier** - Actualizează data și ora de acces și de modificare a unui fișier la data și ora curentă. Dacă fișierul nu există, acesta este creat la rularea comenzii (https://​linux.die.net/​man/​1/​touch). In caz de eroare intoarce valoarea -100 (in terminal se va afisa valoarea 156). 
-    * **-a** schimbă doar data și ora de acces 
-    * **-c, --no-create** nu creează fișierul dacă acesta nu există 
-    * **-m** schimbă doar data și ora de modificare 
- ​**Exemplu:​** ​ 
-<code bash> 
-python busybox.py touch my_file 
-python busybox.py touch -a --no-create my_file 
-</​code>​ 
- 
-  * **chmod permisiuni fișier/​director** - Schimbă biții de permisiuni (rwx) ai unui fișier/​director (https://​linux.die.net/​man/​1/​chmod). In caz de eroare intoarce valoarea -25 (in terminal se va afisa valoarea 231). 
-Permisiunile pot fi specificate în două moduri: 
-    * Numeric - un număr alcătuit din 3 cifre, fiecare reprezentand o valoare pe 3 biți; ex: 650 
-    * Adăugare/​ștergere de permisiuni specifice - pentru fiecare dintre cele 3 categorii (user, group, others) se pot adaugă sau șterge permisiuni. Categoriile sunt: u - user, g- group, o-others, a-all. ​ Formatul generic: **u/g/o/a +/- r/w/x** 
- 
- ​**Exemplu:​** ​ 
-<code bash> 
-python busybox.py chmod 570 file 
-python busybox.py chmod u+x file 
-python busybox.py chmod ug+rx file 
-python busybox.py chmod a-rx file 
-</​code>​ 
- 
-Pentru mai multe detalii despre cum modul de funcționare al fiecărei comenzi, puteți consulta manualul specific terminalului de Linux: **man comanda**. Comanda poate fi rulată în orice terminal de pe un sistem Linux sau în link-ul atașat comenzii, mai sus. 
- 
- 
-===== Reguli de implementare ===== 
- 
-  * În implementarea temei se va folosi mediul de programare Python3. 
-  * Fișierul principal trebuie să aibă numele **busybox.py**,​ acesta este fișierul pe care sistemul de testare îl va lua în considerare. 
-  * Pentru implementarea comenzilor suportate, toate operațiile vor fi efectuate folosind doar funcții POSIX din biblioteca **os** specifică Python (https://​docs.python.org/​3/​library/​os.html). 
-  * Programul realizat trebuie să aibă un comportament generic. Dacă observăm că tema este rezolvată doar pentru a trece anumite teste specifice, punctele corespondente acelor teste vor fi anulate din punctajul total. 
- 
-<note warning> 
-Folosiți doar biblioteca Python **os**, nu biblioteca Python posix. 
-</​note>​ 
- 
- 
-===== Trimiterea temei ===== 
- 
-Tema se va încărca pe vmchecker. Logați-vă pe site cu folosind utilizatorul de pe moodle, selectați cursul Systemes d'​Explotation (FILS) și încărcați arhiva temei. 
- 
-==== Readme ==== 
- 
-Fișierul readme are următorul format: 
- 
-Numele vostru întreg 
- 
-Grupa 
- 
-Descrierea rezolvării temei, de ce ați ales anumite soluții, etc. 
- 
-==== Arhiva temei ==== 
- 
-Pentru a încărca tema, urmăriți pașii: 
-  - Creați o arhivă zip (nu rar, ace, 7zip sau alt format) care să conțină: 
-    * Fișierul Python busybox.py 
-    * Alte fișiere python adiacente de care aveti nevoie (daca e cazul) 
-    * fișierul Readme 
-  - Logați-vă pe vmchecker 
-  - Selectați cursul Systemes d'​Explotation(FILS) 
-  - Selectați 2. Mini-BusyBox 
-  - Incărcați arhiva 
-  
-Arhiva trebuie să conțină toate fișierele (principale) în rădăcina, nu în subdirectoare. NU arhivați directorul temei, arhivați DIRECT fișierele. 
-După ce încărcați arhiva, vmchecker va rula: 
-<code bash> 
-unzip archive.zip homework 
-cd homework 
-python3 busybox.py comanda parametrii 
-</​code>​ 
- 
  
sde/teme/tema_ro_2_busybox.1584184492.txt.gz · Last modified: 2020/03/14 13:14 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