This is an old revision of the document!


Tema 2 - Mini-busybox

Informații generale

Deadline: 18 Martie, ora 23:55
Punctaj: 1 punct din notă
Încărcarea temei: vmchecker.cs.pub.ro
Încărcarea cu întârziere: 1 punct / zi (maxim 4 zile)

Cunoștințe evaluate

  • Folosirea limbajului Python
  • Modul de funcționare a liniei de comandă

Reguli

  1. Tema trebuie să conțină un fișier Readme în care să explicați cum ații făcut tema (-0.1p).
  2. Tema trebuie implementată folosind limbajul Python și doar folosind funcții POSIX (biblioteca Python os). Orice alte implementări vor duce la anularea temei (0 puncte).

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 repository cu titlul de forma [busybox] <titlul întrebări voastre>. Aveți nevoie de un cont de github pentru a scrie întrebări.

NU PUBLICAȚI COD SURSĂ. Acesta va fi considerată copiere și se va penaliza cu 0 puncte pe temă pentru voi.

Dacă doriți să primiți un email când se pun întrebări noi sau cand apar răspunsuri, accesați github 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:

python busybox.py cp file folder

Programul va fi rulat folosind Python 3.

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.

În cazul în care comanda primită de utilitar a fost rulată cu succes, acesta va returna valoarea 0. În caz contrar, acesta va returna valoarea 1.

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.

Comenzile suportate de aplicația mini-busybox sunt:

Exemplu:

$ python busybox.py pwd
/home/pi/my_directories    
  • echo [opțiune] argumente - Afișează argumentele în consolă urmate de linie nouă. (https://linux.die.net/man/1/echo)
    • -n nu adaugă o linie nouă la final

Exemplu:

$ python busybox.py echo a b c
a b c
$ python busybox.py echo -n a b c
a b c$    

Exemplu:

$ 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 
  • mkdir directoare - Crează directoarele pasate ca parametru, dacă nu exista deja. Dacă operația de creare a directoarelor eșuează, scriptul va întoarce valoarea 1. (https://linux.die.net/man/1/mkdir)

Exemplu:

 python busybox.py mkdir my_drectory
 python busybox.py mkdir my_drectory1 my_drectory2 my_drectory3

Exemplu:

python busybox.py mv my_file my_directory
python busybox.py mv my_directory1 my_drectory2 
  • 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)
    • -s, –symbolic creează un link simbolic în locul unui link hard

Exemplu:

python busybox.py ln my_file my_file_link
python busybox.py ln -s my_file my_file_link3

Exemplu:

python busybox.py rmdir my_empty_directory
python busybox.py rmdir my_empty_directory1 my_empty_directory2
  • 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 1. (https://linux.die.net/man/1/rm)
    • -r, -R, –recursive șterge directoarele și tot conținutul acestora
    • -d, –dir șterge directoarele goale

Exemplu:

python busybox.py rm my_file1 my_file2
python busybox.py rm -R my_directory
python busybox.py rm --dir my_empty_directory
  • 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ă. (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:

$ python busybox.py ls
  directory1
  Directory2
  File1
  file2
$ python busybox.py ls -a
  .
  ..
  directory1
  Directory2
  File1
  File2
$ python busybox.py ls Directory2
  f1
  f2
  • 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)
    • -R, -r, –recursive copiază recursiv; se folosește pentru copierea directoarelor și copiază directorul cu tot conținutul acestuia

Exemplu:

python busybox.py cp my_file my_directory
python busybox.py cp -r my_directory1 my_directory2
  • 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)
    • -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:

python busybox.py touch my_file
python busybox.py touch -a --no-create my_file

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:

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

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.

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:

  1. 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
  2. Logați-vă pe vmchecker
  3. Selectați cursul Systemes d'Explotation(FILS)
  4. Selectați 2. Mini-BusyBox
  5. 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:

unzip archive.zip homework
cd homework
python3 busybox.py comanda parametrii
sde/teme/tema_ro_2_busybox.1583171168.txt.gz · Last modified: 2020/03/02 19:46 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