Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 50

Automatisation de la sauvegarde de fichiers par script

Recommended resources

Bonjour !

Dans notre leçon précédente, vous avez maîtrisé les boucles for et while, vous donnant le pouvoir d'automatiser des tâches répétitives. Vous avez vu comment les combiner avec des conditions if pour créer des scripts qui non seulement répètent des actions, mais prennent aussi des décisions intelligentes à chaque étape.

Aujourd'hui, nous allons assembler toutes ces pièces du puzzle. L'objectif est de créer un script pour automatiser la sauvegarde de fichiers. C'est une compétence fondamentale pour tout administrateur système, car la protection des données est une responsabilité essentielle. Ce projet concret vous permettra d'appliquer tout ce que vous avez appris : les variables, les commandes, les conditions et la logique de script.

Nous allons construire, pas à pas, un script de sauvegarde fonctionnel, réutilisable et robuste.

1. L'anatomie d'un script de sauvegarde

Une sauvegarde fiable et automatisée est comme une police d'assurance pour vos données. Pour la mettre en place, notre script aura besoin de quelques ingrédients clés :

  • Une source : Le ou les dossiers que nous voulons sauvegarder.
  • Une destination : L'endroit où nous allons stocker la sauvegarde.
  • Un format d'archive : Pour regrouper de nombreux fichiers en un seul et le compresser pour gagner de l'espace.
  • Un nom unique : Pour distinguer les sauvegardes les unes des autres, généralement en utilisant la date et l'heure.
Automatic Regular Backup of Kdenlive Project Files
Cette image illustre parfaitement notre objectif : à partir d'un fichier ou d'un dossier, notre script va générer des copies de sauvegarde datées, créant ainsi un historique de nos données que nous pourrons restaurer en cas de besoin.

Pour commencer en douceur, révisons les concepts de base en français : l'utilisation des variables et la "substitution de commande" pour capturer la date.

Les scripts shell - Niveau 1 - Formatux

Ce document du site Formatux nous rappelle les bases de l'écriture d'un script, notamment l'utilisation des variables et la capture du résultat d'une commande. Il contient un premier exemple simple de script de sauvegarde.

Lisez les sections suivantes pour vous rafraîchir la mémoire : Variables : Revoyez comment déclarer et utiliser une variable. L'exemple 01-backup.sh montre comment les utiliser pour les chemins de fichiers. La substitution de commande : Concentrez-vous sur la syntaxe variable=$(commande). C'est ce que nous utiliserons pour créer nos noms de fichiers dynamiques. Améliorations du script de sauvegarde : Analysez le script 02-backup-enhanced.sh. Observez comment il combine les variables et la commande date pour créer un dossier de sauvegarde unique chaque jour (backup-$(date +%j)).

Ce premier exemple utilise la commande cp (copier). C'est un bon début, mais pour une véritable sauvegarde, nous voulons créer une archive compressée, un seul fichier .tar.gz qui contient tout. C'est ce que nous allons faire maintenant.


2. Construire un script de sauvegarde robuste avec tar

Nous allons maintenant suivre un guide vidéo pour construire un script plus professionnel. Ce script utilisera la commande tar pour créer une archive, vérifiera que tout s'est bien passé et pourra même être débogué en direct.

La vidéo suivante vous guidera à travers toutes les étapes nécessaires. Nous la regarderons en plusieurs parties.

How To Create a Backup Script?

Cette vidéo de BugX, bien qu'en anglais, montre très clairement à l'écran la création d'un script de sauvegarde de A à Z. Elle est parfaite pour visualiser concrètement chaque étape.

Nous allons décortiquer cette vidéo. Pour l'instant, préparez-vous à la regarder par segments, de 01:07 à 11:33.

Étape 1 : Définir les variables et le nom du fichier

Tout bon script commence par définir des variables pour le rendre facile à lire et à modifier. Nous allons définir la source, la destination et surtout, le format de la date qui rendra chaque sauvegarde unique.

Action : Regardez le premier segment de la vidéo (de 01:07 à 04:27).

Concentrez-vous sur les points suivants :

  • BACKUP_SRC : La variable pour le dossier source.
  • BACKUP_DST : La variable pour le dossier de destination.
  • BACKUP_DATE=$(date +%Y-%m-%d_%H-%M-%S) : C'est la magie de la substitution de commande. La sortie de la commande date (formatée en Année-Mois-Jour_Heure-Minute-Seconde) est stockée dans la variable BACKUP_DATE.
  • BACKUP_FILENAME : Le nom final de notre archive, qui combine un préfixe, la date et l'extension .tar.gz.

Étape 2 : Créer l'archive et le répertoire de destination

Maintenant, nous allons utiliser la commande mkdir pour nous assurer que le dossier de destination existe, puis tar pour créer l'archive.

Action : Regardez le deuxième segment de la vidéo (de 04:27 à 06:37).

Points clés :

  • mkdir -p $BACKUP_DST/... : L'option -p est très utile. Elle crée le répertoire de destination et tous les répertoires parents s'ils n'existent pas, sans générer d'erreur.
  • tar -czf ... : C'est le cœur de notre script.
    • -c : create (créer une nouvelle archive).
    • -z : zip (compresser l'archive avec gzip). C'est pour cela que nos fichiers se terminent par .gz.
    • -f : file (le prochain argument est le nom du fichier d'archive à créer).

Étape 3 : Vérifier le succès de l'opération

Un script d'automatisation ne doit jamais supposer que tout s'est bien passé. Il doit vérifier. En Bash, on vérifie le code de sortie de la dernière commande exécutée.

Action : Regardez le troisième segment de la vidéo (de 06:37 à 08:07).

Ici, vous retrouvez la structure if que vous connaissez bien :

  • if [ $? -eq 0 ] : C'est une condition que vous verrez partout en administration système.
    • $? est une variable spéciale qui contient le code de sortie de la dernière commande.
    • Par convention, un code de sortie de 0 signifie "succès". Toute autre valeur signifie une erreur.
  • Le script affiche donc "Backup was successful" si tar a retourné 0, et "Backup failed" sinon.

Étape 4 : Apprendre en regardant les autres déboguer

Même les administrateurs expérimentés font des erreurs de frappe ou de logique. Regarder quelqu'un corriger son propre code est une excellente façon d'apprendre à résoudre ses propres problèmes.

Action : Regardez le quatrième segment de la vidéo (de 08:07 à 11:33).

Ne vous inquiétez pas si vous ne comprenez pas tout immédiatement. Observez simplement le processus :

  1. Il exécute le script.
  2. Il lit le message d'erreur (syntax error, command not found).
  3. Il ouvre le fichier, trouve la ligne incriminée et corrige l'erreur (un fi manquant, un espace, un caractère mal placé).
  4. Il ré-exécute le script pour vérifier la correction.
    C'est exactement le cycle de débogage que vous suivrez.

3. À vous de jouer !

Il est temps de mettre en pratique ces concepts en créant votre propre script de sauvegarde.

Votre mission :

  1. Dans votre machine virtuelle Linux, créez un répertoire pour vos projets et un autre pour vos sauvegardes :
    mkdir -p ~/projets/importants
    mkdir ~/sauvegardes
    
  2. Créez quelques fichiers de test dans le répertoire importants :
    touch ~/projets/importants/rapport.txt
    touch ~/projets/importants/plan.doc
    echo "Contenu secret" > ~/projets/importants/secret.txt
    
  3. Créez un script nommé mon_backup.sh.
  4. Inspirez-vous de la vidéo et écrivez le script qui :
    • Définit une variable SOURCE pour ~/projets/importants et DEST pour ~/sauvegardes.
    • Crée un nom de fichier d'archive unique basé sur la date et l'heure (ex: backup-2023-10-27_15-30-00.tar.gz).
    • Utilise tar -czf pour archiver le contenu du dossier SOURCE dans un fichier placé dans le dossier DEST.
    • Utilise une condition if [ $? -eq 0 ] pour vérifier si la commande tar a réussi.
    • Affiche un message clair indiquant si la sauvegarde a réussi ou échoué.
  5. Rendez votre script exécutable (chmod +x mon_backup.sh) et testez-le ! Vérifiez que l'archive est bien créée dans ~/sauvegardes.

Conclusion

Félicitations ! Vous avez créé un outil d'administration système concret et extrêmement utile. Vous avez combiné des variables pour la flexibilité, la substitution de commande pour des noms de fichiers dynamiques, la commande tar pour l'archivage, et des conditions pour la robustesse.

Les points clés de cette leçon :

  • Structure d'un script de sauvegarde : Définir des variables pour la source, la destination et le nom du fichier.
  • Timestamping : Utiliser BACKUP_DATE=$(date +%Y-%m-%d_%H-%M-%S) pour créer des sauvegardes uniques et horodatées.
  • Archivage : La commande tar -czf NOM_ARCHIVE.tar.gz DOSSIER_SOURCE est votre outil principal pour créer des archives compressées.
  • Vérification : Toujours vérifier le succès d'une opération critique avec if [ $? -eq 0 ].

Notre script est maintenant fonctionnel, mais il nécessite encore une exécution manuelle. Comment faire pour qu'il s'exécute tout seul, tous les jours à minuit ?

C'est là qu'intervient l'outil de planification de tâches de Linux : cron. Dans notre prochaine leçon, nous nous concentrerons entièrement sur la planification de l'exécution automatique de scripts avec cron, transformant ainsi votre script de sauvegarde en un véritable système de sauvegarde automatisé.