Dans cette leçon, tu vas découvrir rsync, l'outil de synchronisation de fichiers le plus puissant sous Linux. Il permet de copier et synchroniser des fichiers localement ou à distance, en ne transférant que les différences pour optimiser la bande passante.
Comparé à cp ou scp, rsync offre plusieurs avantages :
rsync [options] source destination| Option | Description |
|---|---|
-a | Mode archivage (preserve permissions, timestamps, symlinks, etc.) |
-v | Mode verbeux (affiche les fichiers traités) |
-z | Compression pendant le transfert |
-P | Affiche la progression et conserve les fichiers partiellement transférés |
--delete | Supprime dans la destination les fichiers qui n'existent plus dans la source |
-n ou --dry-run | Simulation (aucun fichier n'est réellement modifié) |
--exclude | Exclut certains fichiers ou répertoires |
-r | Copie récursive (sous-répertoires) |
-u | Ne remplace pas les fichiers plus récents sur la destination |
# Synchroniser /home/user/documents vers /backup/documents
rsync -av /home/user/documents/ /backup/documents/
# Le slash à la fin de la source est important :
# /home/user/documents/ → copie le contenu du répertoire
# /home/user/documents → copie le répertoire lui-même# Supprime aussi dans destination les fichiers qui n'existent plus dans la source
rsync -av --delete /home/user/documents/ /backup/documents/--delete peut détruire des données si elle est mal utilisée. Toujours tester d'abord avec --dry-run.
# Exclure tous les fichiers .log
rsync -av --exclude="*.log" /source/ /dest/
# Exclure plusieurs patterns
rsync -av --exclude="*.log" --exclude="node_modules/" --exclude=".git/" /source/ /dest/
# Exclure un répertoire précis
rsync -av --exclude="cache/" /home/user/ /backup/user/# Tester sans rien modifier
rsync -avn --delete /source/ /dest/
# Ajouter -P pour voir ce qui serait fait
rsync -avnP /source/ /dest/
# La sortie indique :
# >f+++++++++ fichier_nouveau.txt (fichier serait créé)
# >f..t....... fichier_existant.txt (timestamps seraient mis à jour)
# >deleting fichier_supprime.txt (fichier serait supprimé)# Syntaxe avec SSH
rsync -avP -e ssh /local/path/ user@serveur:/remote/path/
# Spécifier un port SSH différent
rsync -avP -e "ssh -p 2222" /local/ user@serveur:/remote/
#Télécharger depuis un serveur distant
rsync -avP user@serveur:/remote/backup.tar.gz /local/backup/# Avec compression (réduit la bande passante, ralentit le CPU)
rsync -avzP /source/ user@serveur:/dest/
# Sans compression (rapide pour les fichiers déjà compressés comme .zip, .mp4, .jpg)
rsync -avP /source/ /dest/
# Taille du buffer (par défaut 8192 octets,augmenter pour gros fichiers)
rsync --block-size=32768 -avP /source/ /dest/# Synchroniser et supprimer les fichiers absents de la source
rsync -av --delete /home/user/ /backup/user/
# Pour une vraie sauvegarde avec historique, utiliser --backup
rsync -av --backup --backup-dir=/backup/old /source/ /dest/# Voir ce qui diffère entre deux répertoires
rsync -avn /source/ /dest/ | grep "^[<>]"
# Ou utiliser l'option -i pour un affichage détaillé
rsync -avni /source/ /dest/# Limiter à 500 Ko/s (utile pour ne pas saturer la connexion)
rsync -avzP --bwlimit=500 /source/ user@serveur:/dest/
# --bwlimit en Ko/s (kilobytes), pas kb/s (kilobits)# Monter le disque et synchroniser
sudo mount /dev/sdb1 /mnt/backup
rsync -av --delete /home/ /mnt/backup/home/
sudo umount /mnt/backup# Envoyer les fichiers du site vers le serveur de production
rsync -avzP -e ssh --exclude="node_modules/" --exclude=".git/" \
/local/website/ user@monserveur.com:/var/www/html/# Mirror complet (supprime tout ce qui n'existe plus à la source)
rsync -avzP --delete -e ssh user@serveur:/remote/dossier/ /local/dossier/#!/bin/bash
# script_backup.sh
SOURCE="/home/user/documents"
DEST="/backup/documents"
SERVER="user@serveur.example.com"
REMOTE_PATH="/backup/user-documents"
# Sync local
rsync -av --delete "$SOURCE/" "$DEST/"
# Sync distant via SSH (compression + progress)
rsync -avzP -e ssh --delete "$SOURCE/" "$SERVER:$REMOTE_PATH/"
echo "Sauvegarde terminée le $(date)"Pour automatiser, ajoute-le dans crontab :
# Sauvegarde quotidienne à 2h du matin
0 2 * * * /home/user/script_backup.sh >> /home/user/logs/backup.log 2>&1| Commande | Description |
|---|---|
rsync -av source/ dest/ | Synchronisation locale avec détails |
rsync -avP source/ dest/ | Avec barre de progression |
rsync -avz source/ dest/ | Avec compression |
rsync -av --delete source/ dest/ | Supprime les fichiers absents de la source |
rsync -avn source/ dest/ | Simulation (dry-run) |
rsync -av --exclude="*.tmp" source/ dest/ | Exclure certains fichiers |
rsync -avzP -e ssh source/ user@host:dest/ | Transfert distant chiffré |
rsync -avzP --bwlimit=500 source/ dest/ | Limiter la bande passante (Ko/s) |
Objectif : Créer une sauvegarde de ton répertoire ~/Documents vers un dossier de backup.
# 1. Créer le dossier de backup
mkdir -p ~/backup_test
# 2. Synchroniser avec dry-run pour voir ce qui serait fait
rsync -avn ~/Documents/ ~/backup_test/
# 3. Si tout est correct, exécuter réellement
rsync -avP ~/Documents/ ~/backup_test/
# 4. Vérifier que les fichiers sont copiés
ls ~/backup_test/
# 5. Ajouter un fichier dans Documents et resynchroniser
echo "Nouveau fichier de test" > ~/Documents/test_sync.txt
rsync -avP ~/Documents/ ~/backup_test/
# 6. Vérifier que le nouveau fichier est présent
ls ~/backup_test/test_sync.txt
Bonus : Exclure tous les fichiers temporaires (*.tmp) et vérifier avec -n que le pattern fonctionne avant de lancer la vraie sync.
rsync est l'outil indispensable pour toute sauvegarde ou synchronisation sous Linux. Sa capacité à ne transférer que les différences en fait l'outil le plus efficace pour maintenir des copies synchronisées, que ce soit en local ou à distance via SSH.