Aller au contenu principal
Version: 2024

Devoir 1 - Rustybox

Informations générales​

info

Date limite: 26 mars, 23:59
Points: 2 points de la note finale
Lien: Devoir 1 - Rustybox
Télécharger en retard: 1 points / jour (maximum 4 jours)

Connaissances évaluées​

  • Utiliser le langage Rust
  • Comprendre le mode de fonctionnement de la ligne de commande

Règles​

  1. Le devoir doit contenir un fichier nommé Readme.md avec des explications concernant la manière choisie pour résoudre le devoir (-0.1p)
  2. Le devoir doit être implémenté en Rust et seulement en utilisant des fonctions de la bibliothèque standard Rust. Toute autre implémentation conduira à l'annulation du devoir.(0 points)
astuce

Exception: Vous pouvez utiliser la bibliotheque chrono pour l'affichage de date et heure et la bibliotheque regex pour le bonus.

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-SdE2/questions avec le format [rustybox] "le titre de votre question" . Vous aurez besoin d'un compte github pour publier des questions.

danger

NE PUBLIEZ PAS DE CODE SOURCE. Cela est considéré comme copiage et vous aller recevoir 0p pour le devoir.

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 repository et cliquez sur Watch.

Rustybox​

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 program en Rust qui reçoit comme arguments la commande qu'on désire d'exécuter, suivie par ses paramètres. Le program exécutera la commande et après il finira son exécution.

Exemple​
  rustybox cp file folder
remarque

Vous pouvez trouver les tests dans le repository d'ici.

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 program va afficher le message Invalid command et il va retourner la valeur -1.

remarque

En raison d'incompatibilités entre le système Linux et d'autres systèmes, le code d'erreur renvoyé affiché par le terminal Linux sera égal à 255, pas -1. Si le terminal affiche 255 comme code d'erreur, la solution est correcte. Cela se produira également avec les codes d'erreur spécifiés ci-dessous, pour chacun d'eux, le terminal affichera un nombre positif.

Si la commande reçue par l'utilitaire a été exécutée sans erreur, le program va retourner la valeur 0. Si non, il va retourner un code d'erreur spécifique, mentionné dans la description de la commande.

remarque

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.

pwd​

Affiche le chemin complet du directoire courant

Exemple​
$ rustybox pwd
/home/pi/my_directories

echo​

Affiche les arguments de la console, suivies par une nouvelle ligne

Syntaxe​
rustybox echo [parameters] arguments
Parametres​
  • -n - on n'ajoute pas une nouvelle ligne
Exemple​
$ rustybox echo a b c
a b c
$ rustybox echo -n a b c
a b c$

cat​

Concatène le contenu des fichiers et l'affiche a la sortie standard. En cas d'erreur il renvoie la valeur -20 (la valeaur 236 sera affiché dans le terminal).

Syntaxe​
rustybox cat fichier1 fichier2...
Exemple​
$ rustybox cat file1
Text in file1
$ rustybox cat file2
Text in file 2
$ rustybox cat file1 file2
Text in file1
Text in file 2

mkdir​

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 (la valeaur 226 sera affiché dans le terminal).

Syntaxe​
rustybox mkdir directeur1 directeur2...
Exemple​
rustybox mkdir my_drectory
rustybox mkdir my_drectory1 my_drectory2 my_drectory3

mv​

Déplace/Renomme le fichier/directoire source dans la destination. En cas d'erreur il renvoie la valeur -40 (la valeaur 216 sera affiché dans le terminal).

Syntaxe​
rustybox mv fichier1_ou_directeur1_source fichier2_ou_directeur_destination
Exemple​
rustybox mv source destination

ln​

Syntaxe​
rustybox ln [parameters] 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. En cas d'erreur il renvoie la valeur -50 (la valeaur 206 sera affiché dans le terminal).

Parameters​
  • -s ou --symbolic crée un lien symbolique a la place d'un lien hard
Exemple​
rustybox ln my_file my_file_link
rustybox ln -s my_file my_file_link3

rmdir​

Supprimez les répertoires vides passés comme arguments. En cas d'erreur, il renvoie la valeur -60 (la valeaur 196 sera affiché dans le terminal).

Syntaxe​
rustybox rmdir directeur1 directeur2...
Exemple​
rustybox rmdir my_empty_directory
rustybox rmdir my_empty_directory1 my_empty_directory2

rm​

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 (la valeaur 186 sera affiché dans le terminal). [doc].

Syntaxe​
rustybox rm [parameters] fichier_ou_directeur
Parametres​
  • -r, -R ou --recursive - Supprime les idrectoires et leur contenu

  • -d ou --dir - Supprime les directoires sans contenu

Exemple​
rustybox rm my_file1 my_file2
rustybox rm -R my_directory
rustybox rm --dir my_empty_directory

ls​

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. En cas d'erreur il renvoie la valeur -80 (la valeaur 176 sera affiché dans le terminal).

Syntaxe​
rustybox ls [parametres] [director]
Parameters​
  • -a ou -all - Affiche aussi les fichiers/directoires cachés, dont le nom commence par ”.”

  • -R ou --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​
$ rustybox ls
directory1
Directory2
File1
file2
$ rustybox ls -a
.
..
directory1
Directory2
File1
File2
$ rustybox ls Directory2
f1
f2

cp​

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. En cas d'erreur, il renverra la valeur -90 (la valeur 166 sera affichée dans le terminal).

Synatxe​
rustybox cp [parameters] fichier1_ou_directeur1_source fichier2_ou_directeur_destination
Parameters​
  • -R, -r ou --recursive - Copie de maniere récursive; il est utilisé pour copier des directoires avec tout leur contenu

Exemple​
rustybox cp my_file my_directory
rustybox cp -r my_directory1 my_directory2

touch​

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 [doc]. En cas d'erreur il renvoie la valeur -100 (la valeaur 156 sera affiché dans le terminal).

Syntaxe​
rustybox touch [parameters] fichier
Parameters​
  • -a - Change seulement la date et l'heure d'acces

  • -c ou --no-creat - On ne crée pas le fichier s'il n'existe pas

  • -m - Change seulement la date et l'heure de modification

Exemple​
rustybox touch my_file
rustybox touch -a --no-create my_file

chmod​

Change les bits de permission (rwx) d'un fichier/directoire [doc]. En cas d'erreur il renvoie la valeur -25 (la valeaur 231 sera affiché dans le terminal).

Syntaxe​
rustybox chmod permissions fichier/directeur

Les permissions peuvent etre spécifiées en 2 modes:

  1. numérique: un numéro formé de 3 chiffres, chacun représentant une valuer sur 3 bits; ex: 650

  2. aajouter/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​
rustybox chmod 570 file
rustybox chmod u+x file
rustybox chmod ug+rx file
rustybox chmod a-rx file

astuce

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.

Bonus​

grep​

Afiche toutes les lignes du fichier qui contiennent l'expression régulière.

Syntaxe​
rustybox grep [parameters] regex nom_fichier
Parameters​
  • -i - Répertorie toutes les lignes du fichier qui ne contiennent pas l'expression régulière.
Exemple​
$ rustybox grep '[0-9]+' File
this line 99
this line is another 7

ls​

  • -l - Afficher toutes les informations sur les fichiers
Exemple​
$ rustybox ls -l
drwxr-xr-x alexandru staff 960 Feb 12 22:40 Desktop
-rw-r--r-- alexandru staff 372944 Nov 29 2020 Title Hello Wyliodrin STUDIO.jpg

# file_type (-, l - link, d - directory) properties user group size modified_date name
$ rustybox ls -l Desktop
drwxr-xr-x alexandru staff 960 Feb 12 22:40 Desktop