Stratégies de sauvegarde de répertoires

ShellBeginner
Pratiquer maintenant

Introduction

Imaginez que vous preniez chaque jour une photo d’une plante qui grandit. Si vous nommez chaque photo plant.jpg, la nouvelle photo écrasera constamment l’ancienne et vous perdrez l’historique. Pour toutes les conserver, vous devez les nommer plant_2023-01-01.jpg, plant_2023-01-02.jpg, et ainsi de suite.

Le même problème se pose avec les sauvegardes système. Si vous utilisez toujours le même nom de fichier, chaque nouvelle sauvegarde peut écraser la précédente et supprimer votre historique de restauration.

Dans ce lab, vous apprendrez à automatiser ce processus de nommage. Les sauvegardes horodatées sont très courantes dans la pratique, car les fichiers de sauvegarde ne sont utiles que si vous pouvez savoir quand ils ont été créés et conserver plusieurs générations.

Vous apprendrez à :

  1. Demander à Linux la date du jour dans un format précis.
  2. Stocker cette date dans une « boîte » (une variable).
  3. Utiliser cette date pour créer un fichier de sauvegarde unique et horodaté.

Obtenir la date du jour

Dans cette étape, vous apprendrez à utiliser la commande date pour formater la date actuelle. Il s’agit du premier élément nécessaire à la création de notre nom de fichier dynamique.

La commande date standard affiche la date et l’heure actuelles dans un format long et détaillé. Pour les noms de fichiers, nous voulons généralement un format propre et facile à trier, comme YYYY-MM-DD. Linux vous permet de personnaliser la sortie à l’aide du symbole + suivi d’un code de format. Le code %F est un raccourci pratique pour obtenir la « date complète » (année-mois-jour).

Ce format n’est pas seulement esthétique. Il est utile en pratique, car les noms de fichiers triés par ordre alphabétique seront également triés par ordre chronologique lorsque vous utilisez YYYY-MM-DD.

Commencez par vérifier que vous vous trouvez dans votre dossier de projet :

cd ~/project

Demandez maintenant au système d’afficher la date dans le format souhaité :

date +%F

Vous devriez obtenir une sortie semblable à 2023-10-27, mais avec la date réelle du jour.

Pour utiliser ce résultat dans un nom de fichier, nous devons le récupérer. Nous pouvons le faire avec la substitution de commande. Imaginez qu’une commande soit placée dans une bulle $(...). Le shell exécute d’abord la commande située dans la bulle, récupère son résultat, puis remplace la bulle par ce texte.

La substitution de commande est l’un des concepts fondamentaux du shell. Elle permet de relier l’utilisation simple de la ligne de commande à l’automatisation. La sortie d’une commande peut ainsi devenir une donnée utilisée par une autre commande.

Essayons de stocker cette date dans une variable. Une variable est simplement une boîte de stockage portant un nom. Nous allons créer une boîte nommée current_date et y placer la sortie de notre commande.

current_date=$(date +%F)

Important : remarquez qu’il n’y a AUCUN espace autour du signe =. Il s’agit d’une règle stricte du shell. variable = value échouera ; variable=value fonctionne.

Affichons maintenant le contenu de notre boîte pour vérifier que la date y est bien stockée. Nous utilisons la commande echo avec le signe $ devant le nom de la variable pour « ouvrir » la boîte :

echo $current_date

Si la date du jour s’affiche, vous avez réussi à récupérer la date.

Créer un fichier de sauvegarde

Maintenant que la date est stockée dans une variable, nous pouvons l’utiliser pour créer un fichier de sauvegarde portant un nom explicite.

Nous avons préparé dans votre répertoire un fichier nommé project_plan.txt. Vérifiez qu’il est bien présent :

ls -l project_plan.txt

Notre objectif est de créer une copie de ce fichier nommée project_plan_YYYY-MM-DD.bak. La copie sera ainsi « marquée » avec la date du jour.

Nous utiliserons la commande standard cp (copie). Mais au lieu de saisir la date manuellement, nous laisserons le shell l’insérer à l’aide de notre variable $current_date.

Exécutez la commande suivante :

cp project_plan.txt "project_plan_$current_date.bak"

Le shell repère $current_date entre les guillemets doubles et le remplace immédiatement par la date réelle stockée dans la variable, par exemple 2023-10-27, avant d’exécuter la commande de copie.

Cette opération s’appelle l’expansion de variable. Le shell développe les variables avant de lancer réellement la commande cp. C’est pourquoi la commande paraît dynamique, même si cp ne comprend pas directement les variables du shell.

Astuce : vous pouvez aussi ignorer l’étape de création de la variable et tout faire sur une seule ligne. Cette méthode est très courante dans les scripts d’automatisation. Il suffit de placer directement la bulle de commande $(...) dans la commande cp :

cp project_plan.txt "project_plan_$(date +%F).bak"

Cette commande indique au shell : « Exécute la commande date, insère son résultat ici, puis exécute la commande de copie. » Les deux méthodes produisent exactement le même résultat.

Vérifier la sauvegarde

Vérifions que l’opération a réussi. Nous devrions maintenant voir deux fichiers : l’original et sa copie horodatée.

Affichez la liste des fichiers du répertoire :

ls -l

Vous devriez obtenir une sortie semblable à celle-ci :

-rw-rw-r-- 1 labex labex 65 Oct 27 10:00 project_plan.txt
-rw-rw-r-- 1 labex labex 65 Oct 27 10:05 project_plan_2023-10-27.bak

Remarquez que le nouveau fichier contient la date dans son nom.

Vérifions enfin que son contenu est intact. Vous pouvez utiliser la commande cat pour lire le nouveau fichier. Comme vous ne souhaitez peut-être pas saisir à nouveau la date complète, vous pouvez réutiliser la substitution de commande :

cat project_plan_$(date +%F).bak

Vous devriez voir le texte d’origine :

Phase 1: Initialization
Phase 2: Development
Phase 3: Deployment

Bravo ! Vous avez créé une sauvegarde parfaitement horodatée. Si vous exécutiez la même commande demain, elle créerait un nouveau fichier portant la date de demain et préserverait ainsi votre historique de manière sûre et organisée.

Cette simple habitude de nommage peut être utilisée dans de nombreux contextes. De nombreux mécanismes de rotation des sauvegardes commencent exactement par cette idée : intégrer la date dans le nom du fichier afin de conserver plusieurs générations au lieu d’écraser la dernière copie.

Résumé

Félicitations ! Vous maîtrisez désormais une compétence importante en matière d’automatisation.

Dans ce lab, vous avez appris à :

  • Formater la date : utiliser date +%F pour obtenir une chaîne de date adaptée aux ordinateurs.
  • Effectuer une substitution de commande : utiliser $(...) pour transmettre le résultat d’une commande à une autre.
  • Créer des noms dynamiques : créer des fichiers dont le nom dépend de la date actuelle.

Cette astuce apparemment simple constitue la base de nombreuses stratégies professionnelles de sauvegarde. Vous pouvez désormais éviter que vos fichiers soient écrasés accidentellement.