Differences

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

Link to this comparison view

sde:teme:tema_fr_2 [2020/03/09 15:48]
ioana_maria.culic
— (current)
Line 1: Line 1:
-====== Devoir 2 - Mini-busybox ====== 
  
-===== Informations générales ===== 
- 
-<note important>​ 
-Date limite: **15 Mars, 23:55**\\ 
-Points: **1 point** de la note finale\\ 
-Téléchargement du devoir: [[https://​vmchecker.cs.pub.ro|vmchecker.cs.pub.ro]]\\ 
-Télécharger en retard: **1 points / jour** (maximum 4 jours)\\ 
-</​note>​ 
- 
- 
-===== Connaissances évaluées ===== 
- 
-  * Utiliser le langage Python 
-  * Comprendre le mode de fonctionnement de la ligne de commande 
- 
-===== Règles ===== 
- 
-  - Le devoir doit contenir un fichier nommé //Readme// avec des explications concernant la manière choisie pour résoudre le devoir (-0.1p) 
-  - Le devoir doit être implémenté en Python et seulement en utilisant des fonctions POSIX (la bibliothèque **[[https://​docs.python.org/​3/​library/​os.html|os]]** de Python). Toute autre implémentation conduira à l'​annulation du devoir.(**0 points**) 
- 
-<note warning> 
-Utilisez uniquement la bibliothèque Python ** [[https://​docs.python.org/​3/​library/​os.html|os]] **, pas la bibliothèque Python posix. 
-</​note>​ 
-===== Copiage ===== 
- 
-Le devoir est individuel. Toute tentative de copier entraînera ** 0p ** pour les devoirs. On utilisera un système automatisé pour détecter le copiage. Si on a des doutes, on va vous adresser des questions supplémentaires concernant le devoir. ​ 
- 
-===== Questions ===== 
- 
-Si vous avez des questions concernant le devoir, posez-les en publiant un //issue// sur le github [[https://​github.com/​upb-fils/​sde|repository]] avec le format // [busybox] <le titre de votre question>​ //. Vous aurez besoin d'un compte github pour publier des questions. 
- 
-<note warning> 
-**NE PUBLIEZ PAS DE CODE SOURCE**. Cela est considéré comme copiage et vous aller recevoir **0p** pour le devoir. 
-</​note>​ 
- 
-Si vous voulez recevoir un e-mail lorsque des problèmes sont signalés ou lorsqu'​il y a de nouveaux messages, accédez au site github [[https://​github.com/​upb-fils/​sde|repository]] et cliquez sur //Watch//. 
- 
- 
-===== Mini-busybox ===== 
- 
-Le but de ce devoir est d’implémenter un utilitaire capable d'​exécuter des commandes de type Linux bash. 
- 
-Pour résoudre le devoir, vous allez réaliser un script de Python qui reçoit comme arguments la commande qu'on désire d'​exécuter,​ suivie par ses paramètres. Le script exécutera la commande et après il finira son exécution. 
- 
-**Exemple:​** 
- 
-<code bash> 
-python busybox.py cp file folder 
-</​code>​ 
- 
-<​note>​ 
-Le programme sera exécuté en utilisant Python 3. 
-</​note>​ 
- 
-===== Commandes acceptées ===== 
- 
-En ce qui suit, on va définir les commandes supportées par l'​utilitaire,​ ainsi que le comportement caractéristique et les parametres acceptés. Pour toute autre commande ou pour un format différent, le script va afficher le message **Invalid command** et il va retourner la valeur **-1**. 
- 
-Si la commande reçue par l'​utilitaire a été exécutée sans erreur, le script va retourner la valeur 0. Si non, il va retourner un code d'​erreur spécifique,​ mentionné dans la description de la commande. 
- 
-<​note>​ 
-Pour vous aider à comprendre le mode fonctionnement de chaque commande, on a attaché la page de mannuel de celle-ci. On de demande pas l'​implémentation de tous les parametres précisés dans le manuel, mais seulement de ceux qui seront précisés dans l'​énoncé du devoir. ​ 
- 
-Les parametres qui ont la forme [param] sont optionnels. 
-</​note>​ 
- 
-Les commandes supportées par l'​application mini-busybox sont: 
-   * **pwd** - Affiche le chemin complet du directoire courant ([[https://​linux.die.net/​man/​1/​pwd]]). En cas d'​erreur il renvoie la valeur -10. 
- 
-**Exemple:​** 
- 
-<code bash> 
-$ python busybox.py pwd 
-/​home/​pi/​my_directories 
-</​code>​ 
-   * ** echo [option] arguments** - Affiche les arguments de la console, suivies par une nouvelle ligne ([[https://​linux.die.net/​man/​1/​echo]]) 
-     ​* ​ **-n** on n'​ajoute pas une nouvelle ligne 
- 
-**Exemple:​** 
- 
-<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 fichiers** - Concatène le contenu des fichiers et l'​affiche a la sortie standard ([[https://​linux.die.net/​man/​1/​cat]]). En cas d'​erreur il renvoie la valeur -20. 
- 
-**Exemple:​** 
- 
-<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 directoires** - Crée les directoires envoyés comme parametre, s'ils n'​existent pas. Si l'​opération de création des directoires échoue, le script va retourner la valeur -30. ([[https://​linux.die.net/​man/​1/​mkdir]]) 
- 
-**Exemple:​** 
- 
-<code bash> 
- ​python busybox.py mkdir my_drectory 
- ​python busybox.py mkdir my_drectory1 my_drectory2 my_drectory3 
-</​code>​ 
- 
-   * **mv source destination** - Déplace/​Renomme le fichier/​directoire source dans la destination ([[https://​linux.die.net/​man/​1/​mv]]). En cas d'​erreur il renvoie la valeur -40 
- 
-**Exemple:​** 
- 
-<code bash> 
-python busybox.py mv my_file my_directory 
-python busybox.py mv my_directory1 my_drectory2 ​ 
-</​code>​ 
- 
-   * **ln [option] source nom_lien** - Crée un lien symbolique avec le nom nom_lien vers le fichier source. On peut créer ​ un lien seulement vers un fichier ([[https://​linux.die.net/​man/​1/​ln]]). En cas d'​erreur il renvoie la valeur -50. 
-     ​* ​ **-s, -symbolic** crée un lien symbolique a la place d'un lien hard 
- 
-**Exemple:​** 
-<code bash> 
-python busybox.py ln my_file my_file_link 
-python busybox.py ln -s my_file my_file_link3 
-</​code>​ 
-   * **rmdir directories** - Supprimez les répertoires vides passés comme arguments (https://​linux.die.net/​man/​1/​rmdir). En cas d'​erreur,​ il renvoie la valeur -60. 
-**Exemple:​** ​ 
-<code bash> 
-python busybox.py rmdir my_empty_directory 
-python busybox.py rmdir my_empty_directory1 my_empty_directory2 
-</​code>​ 
-   * **rm [options] fichiers/​directoires** - Supprime les fichiers ou les directoires passés comme arguments. Sans options, il ne peut pas supprimer des directoires. S'il recoit comme parametres aussi des fichiers, que des directoires,​ il va supprimer seulement les fichiers et il va retourner la valeur -70. ([[https://​linux.die.net/​man/​1/​rm]]) 
-     ​* ​ **-r, -R, -recursive** - Supprime les idrectoires et leur contenu 
-     * **-d, -dir** - Supprime les directoires sans contenu 
- 
-**Exemple:​** 
- 
-<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 [options] [directoire]** - Liste le contenu di directoire. Si on ne spécifie aucun directoire, il va lister le contenu du directoire courant; sans l'​option **-a/​-all**,​ on n'​affiche pas les fichiers/​directoires cachés (dont le nom commence par . ). S'il recoit comme parametre le chemin vers un fichier, il va afficher le fichier. Chaque fichier/​directoire sera affiché sur une nouvelle ligne ([[https://​linux.die.net/​man/​1/​ls]]). En cas d'​erreur il renvoie la valeur -80. 
-     ​* ​ **-a, -all** - Affiche aussi les fichiers/​directoires cachés, dont le nom commence par "​." ​ 
-     ​* ​ **-R, -recursive** - Liste le contenu de chaque directoire de l'​hiérarchie. Pour les fichiers/​directoires qui ne se trouvent pas directement dans le point de lecture, il va afficher le chemin complet, ex: output/​test/​file. 
- 
- 
-**Exemple:​** 
- 
-<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 [option] source destination** - Copie un fichier ou un directoire de la source dans la destination. Si on ne mentionne pas le nomme de la destination,​ le fichier sera copié sous le nom de la source ([[https://​linux.die.net/​man/​1/​cp]]). En cas d'​erreur il renvoie la valeur -90. 
-     ​* ​ **-R, -r, -recursive** - Copie de maniere récursive; il est utilisé pour copier des directoires avec tout leur contenu 
- 
- 
-**Exemple:​** 
- 
-<code bash> 
-python busybox.py cp my_file my_directory 
-python busybox.py cp -r my_directory1 my_directory2 
-</​code>​ 
- 
-   * **touch [options] fichier** - Met à jour la date et l'​heure d'​acces et de modification d'un fichier à la date et heure courantes. Si le fichier n'​existe pas, il est créé au moment de l'​exécution du programme (([[https://​linux.die.net/​man/​1/​touch]]). En cas d'​erreur il renvoie la valeur -100. 
-     ​* ​ **-a** - Change seulement la date et l'​heure d'​acces 
-     ​* ​ **-c, -no-create** - On ne crée pas le fichier s'il n'​existe pas 
-     ​* ​ **-m** - Change seulement la date et l'​heure de modification 
- 
-**Exemple:​** 
- 
-<code bash> 
-python busybox.py touch my_file 
-python busybox.py touch -a --no-create my_file 
-</​code>​ 
- 
-   * ** chmod permissions fichier/​directoire** - Change les bits de permission (rwx) d'un fichier/​directoire ([[https://​linux.die.net/​man/​1/​chmod]]). En cas d'​erreur il renvoie la valeur -25. 
-Les permissions peuvent etre spécifiées en 2 modes: 
- 
-   - numérique: un numéro formé de 3 chiffres, chacun représentant une valuer sur 3 bits; ex: 650 
-   - ajouter/​supprimer des permissions spécifiques:​ pour chacune de ces 3 catégories (user, group, others), on peut ajouter ou supprimer des permissions. Les catégories sont: u - user, g - group, o - others, a - all. Le format générique:​ **u/g/o/a +/- r/w/x** 
- 
-**Exemple:​** 
- 
-<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>​ 
- 
-Pour plus de détails sur le mode de fonctionnement de chaque commande, vous pouvez consulter le manuel spécifique du terminal de Linux: **man commande**. La commande peut etre exécutée en chaque terminal d'un système Linux ou dans le lien attaché a la commande. 
- 
-===== Règles d'​implémentation ===== 
- 
-   * Dans l'​implémentation du devoir, vous allez utiliser l'​environnement de programmation Python3. 
-   * Le fichier principal doit avoir le nom **busybox.py**,​ car c'est le seut fichier que le systeme de test va prendre en compte. 
-   * Pour implémenter les commandes supportées,​ toutes les opérations seront effectuées seulement en utilisant des fontions POSIX de la bibliotheque **os** caractéristique a Python ([[https://​docs.python.org/​3/​library/​os.html]]). 
-   * Le programme réalisé doit avoir un comportement générique. Si on observe que le devoire est résolu seulement pour passer certains tests, les points correspondant a ces tests seront annulés. 
- 
-<note warning> 
-Utilisez uniquement la bibliothèque Python ** os **, pas la bibliothèque Python posix. 
-</​note>​ 
- 
- 
-===== Télécharger les devoirs ===== 
-Les devoirs doivent être téléchargés sur [[https://​vmchecker.cs.pub.ro|vmchecker]]. ​ 
-Connectez-vous avec votre nom d'​utilisateur moodle, sélectionnez le cours //Systemes d'​Explotation (FILS)// et téléchargez [[#​archivage-de-devoir | l'​archive de devoir]]. 
- 
-==== Readme ==== 
-Le fichier //readme// a le format suivant: 
- 
-<​code>​ 
-Nom complet 
-Groupe 
- 
-Une explication comment vous avez écrit le devoir, ce que vous avez utilisé, les idées principales. 
-</​code>​ 
- 
- 
-==== Archivage de devoir ==== 
-Pour télécharger votre devoir, suivez les instructions suivantes: 
- 
-  - Créez une archive zip (pas rar, ace, 7zip ou autre) contenant: 
-    * Le fichier Python busybox.py 
-    * Tout autre fichier python supplémentaire dont vous avez besoin 
-    * le fichier Readme 
-  - Connectez-vous avec [[https://​vmchecker.cs.pub.ro|vmchecker]] 
-  - sélectionner le cours //Systemes d'​Explotation (FILS)// 
-  - sélectionnez //2. Allocator// 
-  - télécharger l'​archive 
- 
- 
-L'​archive doit contenir tous les fichiers principaux dans la racine, pas dans des sous-directoires. NE PAS archiver le directoire du devoir, mais les fichiers DIRECTEMENT. 
-Lorsque l'​archive est téléchargée,​ //​vmchecker//​ va exécuter: 
- 
-<code bash> 
-unzip archive.zip homework 
-cd homework 
-python3 busybox.py commande parametres 
-</​code>​ 
sde/teme/tema_fr_2.1583761700.txt.gz · Last modified: 2020/03/09 15:48 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