Ceci est une ancienne révision du document !
Table des matières
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 scriptcheck-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 parcheck-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 initialisationID
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 initialisationINDEX
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 nommy-ls-bis.sh
. Modifiezmy-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:- Récupération du nom du fichier à supprimer (on le note
FILENAME
par la suite) - Récupération de l'arborescence précédant le nom du fichier à supprimer (on le note
DIRNAME
dans la suite de ce processus) - Récupération du numéro d'ordre
N
contenu dans~/.sh-trashbox/ID
- Copie et compression par
gzip
du fichier à supprimer dans le dossier~/.sh-trashbox
sous le nomN.gz
(remplacerN
par sa valeur bien entendu) - suppression effective de
FILENAME
du SGF - calcule de la date de suppression sous la forme d'un nombre de la forme YearMonthDayHourMinuteSecond soit
YYYYMMDDHHMMSS
- ajout dans
INDEX
de la ligne «N:FILENAME:DIRNAME:YYYYMMDDHHMMSS
» - incrémentation du nombre contenu dans
~/.sh-trashbox/ID
. On remplaceN
par la valeurN+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 commandewc
)
- 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 commanderm
soit désormais sécurisée.