Auteur : Dannie Junior FIENI (JuFiSec)
Étudiant en Master 1 Cybersécurité & Cloud Computing à l'IPSSI Nice
Ce projet contient un script Bash robuste conçu pour automatiser la sauvegarde de répertoires sur un système Linux. L'objectif est de fournir un outil fiable, configurable et facile à utiliser pour la gestion des backups, en intégrant des fonctionnalités essentielles en environnement de production comme la journalisation et la rotation.
Ce projet a été réalisé dans le cadre de ma montée en compétences sur les systèmes Linux et les pratiques DevOps.
Suivez ces étapes pour télécharger et exécuter le script sur votre machine.
1. Cloner le dépôt
Ouvrez votre terminal et clonez ce dépôt GitHub :
git clone https://github.com/JuFiSec/linux-backup-script.git
2. Naviguer dans le dossier du projet
cd linux-backup-script
3. Rendre le script exécutable
Cette commande donne au système la permission d'exécuter le fichier. Vous n'avez besoin de le faire qu'une seule fois.
chmod +x backup.sh
4. Lancer le script
Exécutez le script en spécifiant le dossier source à sauvegarder et le dossier de destination où l'archive sera créée.
# Syntaxe
./backup.sh /chemin/vers/votre/source /chemin/vers/votre/destination
# Exemple concret
./backup.sh ~/Documents /var/backups/mes_documents
L'opération se lance, et tous les détails seront enregistrés dans le fichier logs/backup.log
.
Le script backup.sh
intègre plusieurs fonctionnalités pour garantir sa flexibilité et sa fiabilité :
-
Paramètres dynamiques : Le script prend le dossier source et la destination en arguments, le rendant réutilisable pour n'importe quel besoin.
./backup.sh /chemin/vers/source /chemin/vers/destination
-
Horodatage précis : Chaque archive est nommée avec le nom du dossier source et un horodatage au format
ANNEE-MOIS-JOUR-HEUREMINUTE
(ex:documents-20250721-1130.tar.gz
), ce qui rend chaque sauvegarde unique et facile à trier. -
Journalisation complète (Logging) : Toutes les actions sont enregistrées dans le fichier
logs/backup.log
. Chaque ligne de log est horodatée, ce qui permet de suivre précisément le déroulement de chaque sauvegarde, de diagnostiquer les erreurs et de vérifier que tout s'est bien passé. -
Rotation des sauvegardes : Pour éviter de saturer l'espace disque, le script ne conserve que les
X
sauvegardes les plus récentes (configurable via la variableRETENTION_COUNT
). Les archives plus anciennes sont automatiquement supprimées. -
Gestion d'erreurs : Le script vérifie si le dossier source existe et arrête l'exécution si la création de l'archive échoue, en enregistrant l'erreur dans le fichier de log.
-
Création automatique des dossiers : Les répertoires de backup et de logs sont créés automatiquement s'ils n'existent pas, ce qui simplifie la première utilisation.
La capture d'écran ci-dessous montre le déroulement complet : la gestion d'erreur (quand les arguments manquent), la création d'un dossier de test, l'exécution réussie du script, et le contenu final du fichier de log qui confirme le bon fonctionnement.
Cron est un planificateur de tâches intégré aux systèmes Unix/Linux qui permet d'exécuter des scripts automatiquement à des heures précises. C'est l'outil parfait pour automatiser vos sauvegardes.
* * * * * commande-à-exécuter
│ │ │ │ │
│ │ │ │ └─── Jour de la semaine (0-7, où 0 et 7 = Dimanche)
│ │ │ └───── Mois (1-12)
│ │ └─────── Jour du mois (1-31)
│ └───────── Heure (0-23)
└─────────── Minute (0-59)
0 2 * * * /chemin/complet/vers/backup-script/backup.sh /home/dannie/documents /mnt/backups_externes
0
= À la minute 02
= À 2h du matin*
= Tous les jours du mois*
= Tous les mois*
= Tous les jours de la semaine
Résultat : Le script s'exécute tous les jours à 2h00 du matin.
crontab -e
Ajoutez cette ligne à la fin du fichier :
0 2 * * * /home/votre-utilisateur/linux-backup-script/backup.sh /home/dannie/documents /mnt/backups_externes
/home/votre-utilisateur/linux-backup-script/
par le chemin réel où vous avez cloné le projet.
- Nano :
Ctrl+X
, puisY
, puisEntrée
- Vim :
:wq
puisEntrée
crontab -l
# Toutes les 6 heures
0 */6 * * * /chemin/vers/backup.sh /source /destination
# Tous les lundis à 3h du matin
0 3 * * 1 /chemin/vers/backup.sh /source /destination
# Le 1er de chaque mois à minuit
0 0 1 * * /chemin/vers/backup.sh /source /destination
# Du lundi au vendredi à 1h du matin (jours ouvrables)
0 1 * * 1-5 /chemin/vers/backup.sh /source /destination
❌ Mauvais :
0 2 * * * ./backup.sh ~/documents /mnt/backups
✅ Bon :
0 2 * * * /home/dannie/linux-backup-script/backup.sh /home/dannie/documents /mnt/backups_externes
Avant d'automatiser, assurez-vous que votre script fonctionne :
/home/dannie/linux-backup-script/backup.sh /home/dannie/documents /mnt/backups_externes
# Le script doit être exécutable
chmod +x /home/dannie/linux-backup-script/backup.sh
# Vérifiez l'accès aux dossiers
ls -la /home/dannie/documents
ls -la /mnt/backups_externes
Les logs du script sont dans logs/backup.log
. Vous pouvez aussi rediriger les sorties de cron :
0 2 * * * /chemin/vers/backup.sh /source /destination >> /var/log/cron-backup.log 2>&1
- Vérifiez que le service cron tourne :
sudo systemctl status cron
-
Vérifiez la syntaxe cron : Utilisez un validateur en ligne comme crontab.guru
-
Consultez les logs système :
sudo grep CRON /var/log/syslog
Ajoutez les permissions complètes :
chmod 755 /home/dannie/linux-backup-script/backup.sh
Utilisez la commande which
pour trouver les chemins :
which bash
# Ajoutez #!/bin/bash en première ligne de votre script
Cron a un environnement limité. Ajoutez ces lignes au début de votre crontab si nécessaire :
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/home/votre-utilisateur
0 2 * * * /chemin/vers/backup.sh /source /destination
# Voir toutes les tâches
crontab -l
# Modifier les tâches
crontab -e
# Supprimer toutes les tâches (attention !)
crontab -r
Cette configuration vous garantit des sauvegardes automatiques et fiables de vos données importantes !