Complément UNIX

Cours de complément d'UNIX


TP1 : construire un script de sauvegarde

0 - Dans un terminal :

  1. créer un dossier “unix_tp1” et se positionner dedans
  2. créer le fichier “tp1.sh”
  3. donner la permission d'execution au propriétaire de ce fichier
  4. créer un fichier “actions.csv”
  5. créer un dossier “documents”
  6. créer un dossier “photos”
  7. créer un dossier “sauvegardes/documents”
  8. créer un dossier “sauvegardes/photos”

contenu du fichier actions.csv

documents;sauvegardes/documents;7
photos;sauvegardes/photos;5

1 - tp1.sh : utiliser le script fait en fin de cours la semaine dernière :

#!/bin/bash

cat actions.csv | while read f
do
	SOURCE=`echo $f | cut -f1 -d\;`
	DEST=`echo $f | cut -f2 -d\;`

	cp -Rf $SOURCE $DEST
done

Vérifier son bon fonctionnement

2 - loguer le fonctionnement

créer un dossier “log” rajouter une ligne en fin de boucle dans tp1.sh qui enregistre la date courante dans un fichier nommé “$SOURCE.log” dans le dossiers log vérifier le bon fonctionnement

3 - sécuriser le script

autour de la commande “cp -Rf $SOURCE $DEST” utilisez la commande “test” pour controler que les dossiers $SOURCE et $DEST existent avant de lancer la commande de copie. Si un des dossiers n'existe pas ecrire un message d'erreur dans un fichiers erreur.log dans le dossier log

4 - quelques commandes

4.1 la commande seq

dans un terminal :

  • si vous êtes réveillé taper “man seq” et lire la notice
  • puis pour essayer :
  • taper “seq 7”
  • puis “seq 0 1 7”
  • puis “seq 0 2 7”

construire la ligne seq pour aller de 6 à 0 par pas de 1 et dans ce sens (décroissant)

4.2 un peu de math

En bash la construction

 ((...))

permet une évaluation arithmétique.

Dans sa forme la plus simple,

a=$(( 5 + 3 ))

, exécutera le calcul 5 + 3, soit 8, et attribuera sa valeur à la variable a.

Un autre exemple : si la variable NBRE est égal à 7 alors

$(($NBRE-1))

sera égal à 6

5 - ajouter de l'incrémentiel

nous voulons maintenir plusieurs jours de sauvegardes. Par exemple si nous supprimons une photo le jour n et que nous nous en apercevons le jour n+3 il nous faudra une sauvegarde datant de 3 jours.

Ce nombre de jours est indiqué dans la dernière colonne de notre fichier actions.csv.

Rajouter la ligne donnant la valeur de cette colonne à une variable nommée “NBRE”

5.1 -

il nous faut NBRE dossiers de sauvegarde dans chaque sous-dossier DEST

Nous avons vu en cours la boucle for (utilisé pour télécharger des photos de Cameron Diaz)

rappel :

for i in 1 2 3 4 5
do
	.....
done

A l'aide des commandes for, seq, test, mkdir et du calcul avec deux parenthèses construire une boucle

i allant de $NBRE-1 à 0
	si $DEST/backup.$i n'existe pas
		créer un dossier $DEST/backup.$i
	fin si
fin boucle

Mettre cette boucle juste après les affectations de variables dans tp1.sh

Vérifier que l'arborescence se construit bien comme souhaité

5.2

- L'objectif est d'avoir la sauvegarde la plus récente dans backup.0

Au sortir de la boucle précédente, modifier le script tp1.sh pour supprimer le dossier de sauvegarde le plus ancien (il faut utiliser le calcul avec la double parenthèse)

5.3

- A la suite de cela dans tp1.sh : Construire une boucle qui déplace backup.(NBRE-2) vers backup.(NBRE-1), backup.(NBRE-3) vers backup.(NBRE-2) … jusqu'a backup.0 vers backup.1

Une fois cette boucle créée, si vous lancez le script, vous n'aurez plus de backup.0 (il a été renommé en backup.1)

5.4

- Au sortir de cette boucle recréer le dossier backup.0

5.5

- Modifiez la commande cp pour sauvegarder dans le dossier backup.0

Si vous êtes arrivé là dans les temps du tp, vous pouvez vous documenter sur l'algorithme de Andrew Tridgell nommé rsync et proposer des pistes pour améliorer ce script.