Outils pour utilisateurs

Outils du site


tp3

Ceci est une ancienne révision du document !


Mise en place d'une corbeille


Présentation

Comme vous l'avez probablement déjà noté, la commande rm permet d'effacer une ou plusieurs entrées du Système de Gestion de Fichiers. Bien que très efficace, elle a pour principal défaut d'être définitive et n'offre pas la possibilité de transférer l'entrée effacée dans une zone tampon du SGF généralement appelée « corbeille ». Le but de ce TP est de réaliser un gestionnaire de corbeille qui permettra une suppression sécurisée des entrées se trouvant sur votre compte. Pour ce faire, cette nouvelle commande se substituera à rm grâce à la commande alias. Ce gestionnaire sera écrit en bourne shell bash sur le système à votre disposition.


En préalable

:!: Etant donné que ce TP est de nature assez sensible dans la mesure où vous êtes sensé effacer des fichiers pour pouvoir tester vos différentes réponses, nous vous encourageons à isoler ce travail et à créer un dossier dédié à sa réalisation.

Les fichiers nécessaires au fonctionnement de l'environnement de corbeille seront stockés dans un dossier caché nommé .sh-trash qui se trouvera à la racine de votre HOME directory. C'est dans ce dossier que vous stockerez les shell-scripts répondant aux diverses questions de ce TP.


Questions


  • Q.1: La corbeille de votre compte sera stockée dans un dossier nommé «.sh-trashbox» se trouvant à la racine de votre compte. Ecrivez un script check-config.sh qui vérifie l'existence du dossier «.sh-trashbox». S'il n'existe pas, ce dossier devra être créé. A l'issue de cette phase d'initialisation de la corbeille par check-config.sh, le dossier «.sh-trashbox» devra contenir deux fichiers:
    • ID : Un fichier texte contenant le numéro d'ordre du prochain fichier qui sera supprimé. A l'issue de cette initialisation ID devra contenir « 1 »
    • INDEX : Un fichier texte destiné à contenir l'index des correspondances entre les noms des fichiers supprimés et leur nom de stockage dans la corbeille. A l'issue de cette initialisation INDEX existera mais sera vide.

  • Q.2: Ecrivez un script my-ls.sh qui prend en paramètre une ou plusieurs entrées du SGF (fichier ou dossier) et qui liste sur la sortie standard pour l'ensemble de ces points d'entrée, leur nom précédé de leur chemins d'accès absolu.

  • Q.3: Copiez my-ls.sh sous le nom my-ls-bis.sh. Modifiez my-ls-bis.sh afin que lorsque l'entrée concernée est un dossier, l'ensemble des fichiers qu'il contient soient listés (i.e. leur nom précédé de leur chemins d'accès absolu). Pas de changement lorsque l'entrée concernée est un fichier

  • Q.4: A partir des réponses pour les deux précédentes questions, écrivez un script recursive-ls.sh qui prend en paramètre une ou plusieurs entrées du SGF (fichier ou dossier) et qui liste sur la sortie standard l'ensemble des nom de fichiers précédés de leur chemin absolu présents dans les dossiers ainsi que dans toute la branche résultante (i.e. sous-dossiers, sous-sous-dossiers, etc.) de ce point d'entrée.

  • Q.5: On souhaite maintenant écrire le script « delete-uniq.sh » qui admet en paramètre un unique nom de fichier (éventuellement précédé de son adressage dans l'arborescence). Une sortie avec erreur sera générée dans le cas contraire. Ce script aura pour objectif de supprimer l'entrée du SGF et de la transférer dans la corbeille. La procédure de suppression sécurisée sera la suivante:
    1. Récupération du nom du fichier à supprimer (on le note FILENAME par la suite)
    2. Récupération de l'arborescence précédant le nom du fichier à supprimer (on le note DIRNAME dans la suite de ce processus)
    3. Récupération du numéro d'ordre N contenu dans ~/.sh-trashbox/ID
    4. Copie et compression par gzip du fichier à supprimer dans le dossier ~/.sh-trashbox sous le nom N.gz (remplacer N par sa valeur bien entendu)
    5. suppression effective de FILENAME du SGF
    6. calcule de la date de suppression sous la forme d'un nombre de la forme YearMonthDayHourMinuteSecond soit YYYYMMDDHHMMSS
    7. ajout dans INDEX de la ligne « N:FILENAME:DIRNAME:YYYYMMDDHHMMSS »
    8. incrémentation du nombre contenu dans ~/.sh-trashbox/ID. On remplace N par la valeur N+1

Ce processus sera itéré à chaque supression.


  • Q.6: Grâce à la question 4, vous disposez d'une commande recursive-ls.sh qui affiche sur la sortie standard l'ensemble des fichiers présents dans une branche du SGF. En vous basant sur la technique du filtre vus en TD, écrivez la commande qui permet d'afficher sur la sortie standard le nombre de caractères, le nombre de lignes et le nombre de mots pour chacun d'entre eux. (cf. la commande wc)

  • Q.7: A partir de vos réponses aux questions 5 et 6, vous êtes en mesure d'écrire le script « delete-multiple.sh » qui admet en paramètre un nombre multiple (fichiers ou dossiers) d'entrées du SGF. Ecrivez « delete-multiple.sh ». Vous serez alors en mesure de réaliser des suppressions multiples et récursives.

  • Q.8: Ecrivez le script « list-box.sh » qui affiche l'ensemble des fichiers contenus dans la corbeille ainsi que leur date de suppression.

  • Q.9: Ecrivez le script « restore.sh » qui permet la restauration d'un fichier présent dans la corbeille. A vous d'en définir les modalités. La reconstruction de la branche devra être envisagée le cas échéant.

  • Q.10: Lorsque que vous êtes suffisamment confiant du travail réalisé, vous pouvez, grâce à la commande alias modifier votre fichier de configuration .bashrc afin que la commande rm soit désormais sécurisée.

tp3.1548148099.txt.gz · Dernière modification : 2019/01/22 09:08 de gilles