Rsync se présente comme un outil en ligne de commande, accessible et gratuit, conçu pour la synchronisation de fichiers, qu’elle soit locale ou distante. Il permet de transférer des fichiers et des dossiers avec une grande efficacité.
Son utilité est manifeste lors de migrations de données, de la création de sauvegardes et de la mise en place de mécanismes de mirroring. Il s’avère donc un allié précieux pour les webmasters et les administrateurs système, notamment pour les tâches répétitives de transfert de données.
Ce guide vise à éclairer le fonctionnement de Rsync et à fournir des exemples d’utilisation concrets.
Comment opère Rsync ?
Rsync est un utilitaire de synchronisation à distance, fonctionnant en ligne de commande, et spécifiquement conçu pour les environnements de type Unix. Il offre la possibilité aux utilisateurs de transférer ou de synchroniser des fichiers entre différentes machines ou hôtes de manière transparente.
Techniquement, Rsync s’appuie sur l’algorithme de transfert delta. Cet algorithme compare les fichiers sur deux hôtes (source et destination), qu’ils soient locaux ou distants, et ne copie que les différences. La commande Rsync peut effectuer des opérations de copie et de synchronisation de deux façons différentes :
- En utilisant SSH ou RSH pour la synchronisation entre deux hôtes.
- En utilisant le démon TCP de Rsync pour la synchronisation.
Conçu initialement pour les systèmes de type Unix, Rsync est également pleinement fonctionnel sous Linux.
Voici le processus d’utilisation de Rsync étape par étape :
- Rsync établit une connexion SSH avec l’hôte distant et demande une authentification par mot de passe.
- Une fois la connexion établie, le processus Rsync de l’hôte distant communique avec la source.
- Ces programmes identifient les fichiers et répertoires nécessitant une synchronisation. L’algorithme de transfert delta est alors utilisé pour détecter les modifications entre les fichiers.
Si Rsync ne trouve pas un fichier sur la destination, mais qu’il est présent sur l’hôte source, il le copie et le transfère. Pour les fichiers existant déjà sur les deux systèmes, Rsync ne transfère que les modifications (les parties modifiées). Enfin, il ignore les fichiers identiques sur les deux systèmes.
La commande Rsync effectue des mises à jour progressives en stockant les différences dans un fichier temporaire avant de les transférer vers la destination.
Avant de démarrer, assurez-vous d’avoir :
- Les privilèges root ou sudo.
- Un accès au terminal ou à la ligne de commande.
- Un accès SSH pour exécuter les commandes Rsync en toute sécurité.
- Deux machines pour effectuer la synchronisation.
Dans ce tutoriel, nous utiliserons Linux Mint 21.1 Vera, mais il est possible de suivre ce guide sans difficulté avec d’autres distributions Linux.
Pourquoi choisir Rsync plutôt que Scp ?
Scp (Secure copy) est un protocole en ligne de commande populaire permettant la copie de fichiers de manière sécurisée, via SSH. Scp fonctionne de manière linéaire en copiant simplement les fichiers de la source vers la destination.
La syntaxe de la commande Scp est la suivante :
scp option SOURCE DESTINATION
Mais alors, pourquoi utiliser Rsync au lieu de Scp ?
L’utilisation de Rsync présente plusieurs avantages :
- Exécution plus rapide : Rsync est plus rapide que Scp car il utilise un protocole de mise à jour à distance, ne transférant que les différences plutôt que le fichier entier. Lors de synchronisations régulières, seule une copie complète est nécessaire la première fois, les suivantes ne transférant que les modifications grâce à l’algorithme delta.
- Moins de consommation de bande passante : Rsync réduit la consommation de bande passante en ne recopiant pas les fichiers entiers. Il utilise également des algorithmes de compression et de décompression pour réduire la taille des fichiers pendant le transfert.
- Plus d’options de ligne de commande : Rsync surpasse Scp en termes d’options de ligne de commande, permettant un réglage plus fin de son comportement.
En conclusion, Rsync est un outil idéal pour la synchronisation incrémentale, tandis que Scp est utile pour le transfert sécurisé de fichiers. Dans un scénario courant, Scp est suffisant pour les tâches quotidiennes simples, tandis que Rsync est préférable pour les opérations répétitives.
Syntaxe de la commande Rsync
La structure générale de la commande Rsync est la suivante :
rsync OPTION SOURCE DESTINATION
Les termes sont définis ci-dessous :
- OPTION : Les options de la commande Rsync.
- SOURCE : Le répertoire source.
- DEST : Le répertoire de destination.
- USER : Nom d’utilisateur distant
- HOST : Nom d’hôte ou adresse IP distante.
Les options permettent d’ajouter des fonctionnalités supplémentaires à la commande. Par exemple, l’option ‘-r’ permet de synchroniser des données de manière récursive. Cependant, l’option ‘-r’ ne synchronise pas les informations telles que la propriété des groupes et des utilisateurs, les horodatages, les permissions ou les liens symboliques. Pour cela, l’option ‘-a’ (mode archive) peut être utilisée pour garantir la conservation de ces informations lors de la copie.
Autres options courantes de Rsync :
- -z : Compressser les données afin d’économiser de l’espace.
- -h : Afficher la sortie dans un format lisible par l’homme.
- -b : Effectuer une sauvegarde pendant la synchronisation des données.
- -e : Utiliser le protocole SSH pour les transferts à distance.
- –progress : Afficher la progression de la synchronisation des données.
- -v : Augmenter la verbosité de la sortie de Rsync.
- –n : Effectuer un test de simulation pour vérifier les paramètres de synchronisation.
- -q : Supprimer la sortie et les options de la commande Rsync.
Installation de Rsync
La plupart des systèmes Unix et Linux ont Rsync installé par défaut. Si ce n’est pas le cas, vous pouvez l’installer en utilisant les commandes ci-dessous.
Pour Debian/Ubuntu et Mint :
sudo apt-get install rsync
Pour Arch Linux :
pacman -S rsync
Sur Gentoo :
emerge sys-apps/rsync
Sur CentOS/Fedora/REHL :
sudo yum install rsync
Sur openSUSE :
sudo zypper install rsync
Comme nous utilisons Linux Mint, Rsync est déjà installé. Vous pouvez vérifier en exécutant la commande ‘rsync’ dans le terminal, qui affichera ses capacités, ses options et d’autres informations.
nitt ~ $ rsync rsync version 3.2.3 protocol version 31 Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others. Web site: https://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes, batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv, symtimes, prealloc, stop-at, no crtimes Optimizations: SIMD, no asm, openssl-crypto Checksum list: xxh128 xxh3 xxh64 (xxhash) md5 md4 none Compress list: zstd lz4 zlibx zlib none rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details. rsync is a file transfer program capable of efficient remote update via a fast differencing algorithm.
Voyons maintenant des exemples d’utilisation de Rsync.
Pour les besoins de ce tutoriel, nous allons créer deux répertoires :
- répertoire-source
- répertoire-dest
Utilisez les commandes suivantes pour les créer :
mkdir source-directory mkdir dest-directory
De plus, nous allons générer quelques fichiers pour tester Rsync. Créons des fichiers de test avec la commande ci-dessous :
touch source-directory/file{1..100}
Cela crée 100 fichiers vides dans le répertoire source. Vous pouvez le confirmer avec la commande ci-dessous :
ls source-directory Output: nitt rsync-tutorial $ ls dest-directory source-directory nitt rsync-tutorial $ touch source-directory/file{1..100} nitt rsync-tutorial $ ls source-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Notez que le répertoire ‘dest-directory’ est vide.
Copie récursive de répertoires localement
Bien que Rsync soit principalement utilisé pour la copie de fichiers entre un serveur local et distant, il est également très utile pour les copies locales.
Dans ce cas, nous allons utiliser la syntaxe Rsync suivante :
rsync option SOURCE DESTINATION
Copiez les fichiers de notre répertoire source vers le répertoire dest en exécutant la commande suivante :
rsync -r source-directory/ dest-directory
Ici, la commande copie ‘récursivement’ les fichiers du répertoire source vers le répertoire dest.
nitt rsync-tutorial $ ls dest-directory source-directory nitt rsync-tutorial $ ls dest-directory nitt rsync-tutorial $ ls source-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99 nitt rsync-tutorial $ rsync -r source-directory/ dest-directory nitt rsync-tutorial $ ls dest-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Cela copie chaque fichier du répertoire source vers le répertoire dest.
Copie locale d’un fichier unique
Maintenant que nous savons comment synchroniser deux répertoires, nous allons apprendre à copier un fichier seul.
Pour cela, nous allons éditer le fichier vide file1 dans le répertoire source puis le synchroniser avec le même fichier présent dans le répertoire dest.
Pour modifier un fichier, entrez la commande suivante :
nano source-directory/file1
Maintenant, copiez-collez le texte suivant dans l’éditeur nano :
We're updating file1 in the source-directory. Once we update, we'll push the new update to the dest-directory. rsync doesn't need to re-copy the file using the delta-transfer algorithm. This algorithm checks the differences and then updates destination files accordingly. So, once you save file1 in the source-directory, open file1 in the dest-directory. It'll be empty. However, if we check it after running rsync, you'll see that file1 in dest-directory is updated.
Ajouter du contenu à un fichier.
Fermez et enregistrez le fichier.
Copions maintenant le fichier en utilisant rsync :
sudo rsync -v --existing source-directory/file1 dest-directory
#Output nitt rsync-tutorial $ sudo rsync -v --existing source-directory/file1 dest-directory file1 sent 557 bytes received 35 bytes 1,184.00 bytes/sec total size is 474 speedup is 0.80 nitt rsync-tutorial $
Comme vous l’avez peut-être remarqué, nous avons utilisé l’option ‘–existing’. Cela met à jour les fichiers existants. Si vous exécutez la commande sans ‘–existing’, elle ne sera pas mise à jour, même si elle s’exécute avec succès.
Si le fichier unique que vous copiez n’existe pas dans le dossier de destination, vous devez exécuter la commande suivante :
rsync -v source-directory/newfile dest-directory
#Output nitt rsync-tutorial $ rsync -v source-directory/newfile dest-directory newfile sent 82 bytes received 35 bytes 234.00 bytes/sec total size is 0 speedup is 0.00
Copie de plusieurs fichiers
Si vous avez l’intention de copier plusieurs fichiers, vous devez mentionner les chemins source des fichiers, suivis du répertoire de destination.
Pour cela, nous allons créer deux nouveaux fichiers : newfile2 et newfile3, dans le répertoire source. Utilisez la commande suivante pour ce faire :
touch source-directory/newfile{2..3}
Maintenant, utilisez la commande suivante pour synchroniser plusieurs fichiers :
rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
#Output nitt rsync-tutorial $ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory newfile2 newfile3 sent 135 bytes received 54 bytes 378.00 bytes/sec total size is 0 speedup is 0.00 nitt rsync-tutorial $
Copie de fichiers ou de répertoires de local à distant
La syntaxe Rsync pour le transfert local vers distant est la suivante :
rsync option SOURCE [email protected]:DEST
Comme vous pouvez le voir, vous devez connaître l’adresse IP de la machine distante. De plus, vous devez ajouter l’adresse IP après le fichier source.
rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Avant de commencer le transfert, il vous sera demandé un mot de passe. Saisissez-le pour continuer. De plus, si l’utilisateur est différent sur la machine distante, vous devez le mentionner avant l’adresse IP, suivi de @.
rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory
Si vous avez l’intention de copier plusieurs fichiers ou répertoires, vous devez les répertorier. La syntaxe est ci-dessous :
rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Protocoles spécifiques pour les transferts distants
Rsync vous permet de spécifier des protocoles de transfert de fichiers spécifiques. Pour ce faire, vous devez utiliser l’option -e, suivie du protocole.
Par exemple, si vous souhaitez utiliser le protocole ssh, vous devez ajouter ‘-e ssh’ à la commande rsync.
rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Copie de fichiers ou de répertoires de distant à local
La syntaxe Rsync pour le transfert de distant à local est la suivante :
rsync option [email protected]:SRC DEST
Cela fonctionne comme une demande d’extraction. Ainsi, pour obtenir les fichiers ou répertoires requis d’un serveur distant vers votre ordinateur local, vous devez exécuter la commande suivante :
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
La commande extrait les fichiers du répertoire dest de la machine distante vers le répertoire source de la machine locale.
De même, vous pouvez extraire un fichier spécifique en le mentionnant via son chemin complet :
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory
Pour copier plusieurs fichiers ou répertoires de distant à local, vous devez spécifier le chemin entre accolades (séparés par des virgules) après l’adresse IP du serveur :
rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory
De même, vous pouvez également mentionner des fichiers.
Afficher la progression en direct pendant le transfert
Il est judicieux de surveiller la progression en direct, notamment pour les sauvegardes de données volumineuses. Pour cela, utilisez l’option ‘–progress’. Ajoutez-la à la commande Rsync pour afficher la vitesse de transfert, le temps restant et la quantité de données transférées.
rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Supprimer les fichiers sources une fois le transfert terminé
Vous pouvez utiliser l’option ‘–remove-source-files’ pour supprimer les fichiers sources après le transfert complet. Cette option peut être utile dans divers cas, notamment pour sécuriser vos fichiers sans laisser de trace ou pour libérer de l’espace.
rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Simulation Rsync (marche à blanc)
Rsync permet d’évaluer une opération avant son exécution réelle, afin d’éviter les erreurs, telles que la mise à jour ou la suppression involontaire de fichiers.
Pour effectuer une simulation, utilisez l’option ‘–dry-run’. Ajoutez-la à la commande, suivie de la source et de la destination.
sudo rsync -v --dry-run source-directory/file1 dest-directory
nitt rsync-tutorial $ sudo rsync -v --dry-run source-directory/file1 dest-directory file1 sent 43 bytes received 19 bytes 124.00 bytes/sec total size is 474 speedup is 7.65 (DRY RUN) nitt rsync-tutorial
La sortie est similaire à une exécution normale, mais vous remarquerez la mention ‘(DRY RUN)’ à la fin de la sortie.
Définir la taille de fichier minimale et maximale
Rsync permet de définir une taille de fichier minimale ou maximale pendant le transfert.
Pour transférer des fichiers d’une taille minimale de 15 Ko, utilisez ‘–min-size=15k’ :
rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
La commande ne copiera que les fichiers d’une taille minimale de 15 Ko. Les fichiers plus petits seront ignorés.
De même, utilisez l’option ‘–max-size’ pour définir une taille maximale :
rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Ici, Rsync ignorera les fichiers d’une taille supérieure à 450 Ko.
Définir une limite de bande passante
Si vous effectuez des tâches gourmandes en bande passante, vous pouvez limiter la bande passante utilisée par Rsync en utilisant le paramètre ‘–bwlimit=KB/s’ :
rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Ici, nous limitons la bande passante à 100 Ko/s pendant le transfert.
Dernières réflexions
Ceci conclut notre guide sur les commandes Rsync. Nous avons appris à utiliser Rsync et abordé de nombreuses commandes importantes.
Cependant, Rsync offre bien plus de fonctionnalités que ce que nous avons couvert ici. Consultez la page de manuel de Rsync pour une exploration plus approfondie.
N’hésitez pas également à consulter des guides de référence sur les lignes de commande pour Windows, Linux et macOS.