Outils pour utilisateurs

Outils du site


tp3

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tp3 [2019/01/22 10:45] gillestp3 [2021/03/01 10:34] (Version actuelle) – [Q.1 - Création de l'environnement de travail] gilles
Ligne 21: Ligne 21:
    working_directory=tp-corbeille    working_directory=tp-corbeille
    if ! pwd | grep $working_directory; then    if ! pwd | grep $working_directory; then
 +      echo "Vous n'êtes pas dans le dossier $working_directory !!"
 +      exit 1
 +   fi
 +</code>
 +
 +ou sans écho écran
 +
 +<code bash>
 +   #!/bin/bash
 +   working_directory=tp-corbeille
 +   if ! pwd | grep $working_directory > /dev/null 2>&1 ; then
       echo "Vous n'êtes pas dans le dossier $working_directory !!"       echo "Vous n'êtes pas dans le dossier $working_directory !!"
       exit 1       exit 1
Ligne 151: Ligne 162:
  
      
-  $> ./recursive-ls.sh file-3+  $> ./recursive-ls.sh dir-1 dir-2 file-1 file-2 file-3
   /users/etud/michu/tp-corbeille/dir-1/dir-3/file-4   /users/etud/michu/tp-corbeille/dir-1/dir-3/file-4
   /users/etud/michu/tp-corbeille/dir-1/dir-3/file-5   /users/etud/michu/tp-corbeille/dir-1/dir-3/file-5
Ligne 162: Ligne 173:
 ---- ----
  
-  * 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: +==== Q.Effacement d'un fichier ====
-     - 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 nom **''N.gz''** (remplacer **''N''** 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 remplace **''N''** par la valeur **''N+1''**+
  
-Ce processus sera itéré à chaque supression.+On souhaite maintenant écrire le ''bash''-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 où le fichier n'existe pas. ''delete-uniq.sh'' a 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 est la suivante: 
 + 
 +  - Lister le nom fichier à l'aide de ''my-ls.sh'' afin de prendre connaissance de son adressage absolu. 
 +  - 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
 +  - Lecture du numéro d'ordre en cours dans la corbeille **''N''** contenu dans ''~/.sh-trashbox/ID'' 
 +  - 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) 
 +  - Suppression effective de ''FILENAME'' du SGF, son nom réel étant forcément ''DIRNAME/FILENAME'' 
 +  - Calcul de la date de suppression sous la forme d'un nombre de la forme **YearMonthDayHourMinuteSecond** soit **''YYYYMMDDHHMMSS''** (cf. ''man date''
 +  - Ajout dans ''INDEX'' de la ligne << **''N:FILENAME:DIRNAME:YYYYMMDDHHMMSS''** >> 
 +  - Incrémentation de la valeur contenue dans ''~/.sh-trashbox/ID''. On remplace **''N''** par la valeur **''N+1''** 
 + 
 +Cette séquence sera réalisée à chaque suppression d'un fichier.
  
 ---- ----
  
-  * 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.filtrage ====
  
 +Le principe du filtrage, vu en TD vous permet d'agir sur chaque ligne de la sortie standard d'une commande. Une << structure >> générique pour un filtre écrit en ''bash'' peut ainsi être : 
 +
 +<code bash>
 +  #!/bin/bash
 +  while read line
 +  do
 +    # do something with $line
 +    ...
 +    # ... and go to next line until stdin is flushed 
 +  done
 +</code>
 +
 +Une telle structure se traduit de la façon suivante sur la ligne de commande.
 +
 +<code bash>
 +  $> cmd
 +  a b c d
 +  e f
 +  g h i j k
 +  l
 +  
 +  $> cmd | while read l
 +   > do
 +   >   echo "ligne : $l"
 +   > done
 +  ligne : a b c d
 +  ligne : e f
 +  ligne : g h i j k
 +  ligne : l
 +</code>
 +
 +Grâce à votre réponse de la question 6, 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 cette technique du filtrage, écrivez une commande ''my-first-filter.sh'' qui permet affiche sur la sortie standard, pour chacune des entrées (arborescente ou non) le nombre de caractères, le nombre de lignes et le nombre de mots pour chacun d'entre eux. (cf. ''man 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 SGFEcrivez << ''delete-multiple.sh'' >>. Vous serez alors en mesure de réaliser des suppressions multiples et récursives.+==== Q.Vers la corbeille ... ====
  
 +A partir de vos réponses aux questions 6, 7 et 8, vous êtes en mesure d'écrire le ''bash''-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 qui seront transférées vers votre corbeille.
  
 ---- ----
  
-  * 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.10 - Lister le contenu de la corbeille ==== 
 + 
 +Ecrivez le ''bash''-script ''list-box.sh'' qui affiche sur la sortie standard 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.11 - Restauration de contenu ==== 
 + 
 +On souhaite écrire le ''bash''-script ''restore.sh''. ''restore.sh'admet un nombre variable de paramètre correspondant à autant d'entrées de la corbeille que l'on souhaite restaurer. A vous de définir les modalités de fonctionnement de votre paramétrageA noter que sans autre précision de l'utilisateur, la restauration se fera par défaut dans le dossier originel du fichier. Dans tous les cas, la reconstruction d'une branche pourra être envisagée (cf. option '-p' de la commande ''mkdir'').
  
 ---- ----
  
-  * 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.+==== Q.12 - Finalisation du TP - A FAIRE SI VOUS ETES CONFIANT ==== 
 + 
 +Vous êtes suffisamment confiant du travail réalisé et vous souhaitez désormais faire en sortes que votre gestion de corbeille soit << transparente >> et se substitue à la commande ''rm''. Pour ce faire, les étapes à réaliser sont les suivantes : 
 + 
 +  - Changez dans vos ''bash-script'' la seconde ligne en ''working_directory=$HOME'' ou supprimez toute forme de vérification faite à la question 1. 
 +  - Dans votre dossier ''.sh-trash'' se trouvent vos ''bash''-script. Déplacez ce dossier à la racine de votre compte. 
 +  - Editez le fichier de configuration ''.bashrc'' se trouvant à la racine de votre compte. 
 +  - Ajoutez à la fin de ce fichier la ligne : ''PATH=$PATH:$HOME/.sh-trash'' 
 +  - Ajoutez à la fin de ce fichier la ligne : ''alias rm='delete-multiple.sh' 
 +  - redémarrer un terminal ou reconnectez-vous 
 + 
 +Désormais, chaque frappe de la commande ''rm'' place de façon transparente le fichier effacé dans la corbeille. 
  
 ---- ----
tp3.1548153915.txt.gz · Dernière modification : 2019/01/22 10:45 de gilles