Rsync (Synchronisation à distance) est la commande la plus couramment utilisée pour copier et synchroniser des fichiers et des répertoires à distance ainsi que localement dans les systèmes Linux/Unix.
Avec l’aide de la commande rsync, vous pouvez copier et synchroniser vos données à distance et localement entre des répertoires, des disques et des réseaux, effectuer des sauvegardes de données et répliquer entre deux machines Linux.
Cet article explique 16 utilisations de base et avancées de la commande rsync pour transférer vos fichiers à distance et localement dans des machines basées sur Linux. Vous n’avez pas besoin d’être un utilisateur root pour exécuter la commande rsync.
Table des matières
Avantages de la commande Rsync
Elle offre plusieurs avantages, notamment :
- Transfert de fichiers efficace – rsync utilise un algorithme de transfert delta, ce qui signifie qu’il ne transfère que les différences entre les fichiers source et de destination, ce qui réduit considérablement la quantité de données transférées, le rendant efficace pour la synchronisation de gros fichiers ou répertoires.
- Synchronisation de fichiers à distance – rsync prend en charge à la fois les transferts de fichiers locaux et distants via SSH, ce qui permet la synchronisation entre les systèmes locaux et distants ou la duplication de répertoires sur plusieurs machines.
- Backups incrémentiels – rsync est bien adapté pour les sauvegardes incrémentielles, car il crée et met à jour les sauvegardes efficacement en ne transférant que les fichiers nouveaux ou modifiés.
- Préserve les autorisations de fichier – rsync peut préserver divers attributs de fichier, tels que les autorisations, la propriété, les horodatages et les liens symboliques, ce qui garantit que les fichiers copiés conservent leurs caractéristiques d’origine sur la destination.
- Contrôle de la bande passante – rsync vous permet de limiter l’utilisation de la bande passante lors des transferts de fichiers, car il utilise une méthode de compression et de décompression lors de l’envoi et de la réception de données des deux côtés.
- Plus rapide – rsync peut être plus rapide que scp (Copie sécurisée) pour le transfert de fichiers, surtout lors de la synchronisation de répertoires volumineux ou lors du traitement de fichiers qui ont déjà été partiellement transférés ou qui existent sur la destination.
Syntaxe de la commande Rsync
La commande rsync suit la syntaxe suivante :
# rsync [OPTIONS] SOURCE DESTINATION
Voici une explication des différents composants et options utilisés avec les commandes rsync :
-v
– Sortie verbeuse, affichant des informations détaillées sur le transfert.-r
– copie de données de manière récursive (mais ne préserve pas les horodatages et les autorisations lors du transfert de données).-a
– mode archive, qui permet de copier des fichiers récursivement et préserve également les liens symboliques, les autorisations de fichier, les propriétés utilisateur et groupe, et les horodatages.-z
– Compresse les fichiers pendant le transfert pour réduire l’utilisation du réseau.-h
– lisible par l’homme, affiche les chiffres dans un format lisible par l’homme.-P
– Affiche la progression pendant le transfert.SOURCE
– Spécifie le(s) fichier(s) source(s) ou le répertoire à transférer, qui peut être un emplacement local ou distant.DESTINATION
– Spécifie le chemin de destination où les fichiers ou répertoires seront copiés. Tout comme la source, cela peut être un chemin local ou un emplacement distant.
Installer Rsync dans le système Linux
Nous pouvons installer le paquet rsync à l’aide du gestionnaire de paquets suivant en fonction de votre distribution Linux.
$ sudo apt install rsync [On Debian, Ubuntu and Mint] $ sudo yum install rsync [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] $ sudo emerge -a sys-apps/rsync [On Gentoo Linux] $ sudo apk add rsync [On Alpine Linux] $ sudo pacman -S rsync [On Arch Linux] $ sudo zypper install rsync [On OpenSUSE]
1. Copier/Synchroniser un fichier localement
Pour copier ou synchroniser un fichier localement, vous pouvez utiliser la commande suivante qui synchronisera un fichier unique sur une machine locale d’un emplacement à un autre.
Ici dans cet exemple, un fichier nommé backup.tar doit être copié ou synchronisé dans le dossier /tmp/backups/.
[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/ created directory /tmp/backups backup.tar.gz sent 224.54K bytes received 70 bytes 449.21K bytes/sec total size is 224.40K speedup is 1.00
Dans l’exemple ci-dessus, vous pouvez voir que si la destination n’existe pas déjà, rsync créera automatiquement un répertoire pour la destination.

2. Copier/Synchroniser un Répertoire Localement
La commande suivante transférera ou synchronisera tous les fichiers d’un répertoire vers un autre répertoire sur la même machine.
Ici dans cet exemple, /root/rpmpkgs contient quelques fichiers de paquets rpm et vous souhaitez que ce répertoire soit copié à l’intérieur du dossier /tmp/backups/.
[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/ sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.47M bytes received 96 bytes 2.32M bytes/sec total size is 3.74M speedup is 1.08

3. Copier un Répertoire de Local vers un Serveur à Distance
Pour copier un répertoire d’un serveur local vers un serveur à distance, vous pouvez utiliser la commande suivante, qui synchronisera un répertoire d’un local vers une machine à distance.
Par exemple, s’il y a un dossier sur votre ordinateur local « rpmpkgs » qui contient quelques paquets RPM et si vous souhaitez envoyer le contenu de ce répertoire local vers un serveur à distance, vous pouvez utiliser la commande suivante.
# rsync -avzh /root/rpmpkgs [email protected]:/root/ The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established. ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts. [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.74M bytes received 96 bytes 439.88K bytes/sec total size is 3.74M speedup is 1.00

4. Copier un Répertoire d’un Serveur à Distance vers un Ordinateur Local
Cette commande vous aidera à synchroniser un répertoire distant vers un répertoire local. Ici dans cet exemple, un répertoire /root/rpmpkgs qui se trouve sur un serveur à distance est copié sur votre ordinateur local dans /tmp/myrpms.
# rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms [email protected]'s password: receiving incremental file list created directory /tmp/myrpms rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 104 bytes received 3.49M bytes 997.68K bytes/sec total size is 3.74M speedup is 1.07

5. Rsync Via SSH
Avec rsync, nous pouvons utiliser SSH (Secure Shell) pour le transfert de données, en utilisant le protocole SSH lors du transfert de nos données, vous pouvez être assuré que vos données sont transférées via une connexion sécurisée avec un chiffrement afin que personne ne puisse lire vos données pendant le transfert sur Internet.
De plus, lorsque nous utilisons rsync, nous devons fournir le mot de passe utilisateur/root pour accomplir cette tâche particulière, donc l’utilisation de l’option SSH enverra vos connexions de manière chiffrée afin que votre mot de passe soit sécurisé.
Pour utiliser rsync via SSH, vous pouvez utiliser l’option -e
pour spécifier la commande shell distante, qui est généralement ssh comme indiqué.
# rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
6. Copier un fichier d’un serveur distant vers un serveur local avec SSH
Pour synchroniser un fichier d’un serveur distant vers un serveur local, vous pouvez spécifier un protocole avec rsync en utilisant l’option « -e » avec le nom du protocole que vous souhaitez utiliser.
Ici dans cet exemple, nous utiliserons « ssh » avec l’option « -e » et effectuerons le transfert de données.
# rsync -avzhe ssh [email protected]:/root/anaconda-ks.cfg /tmp [email protected]'s password: receiving incremental file list anaconda-ks.cfg sent 43 bytes received 1.10K bytes 325.43 bytes/sec total size is 1.90K speedup is 1.67

7. Copiez un fichier d’un serveur local vers un serveur distant avec SSH
Pour synchroniser un fichier d’un serveur local vers un serveur distant en utilisant SSH, vous pouvez utiliser la commande suivante comme indiqué.
# rsync -avzhe ssh backup.tar.gz [email protected]:/backups/ [email protected]'s password: sending incremental file list created directory /backups backup.tar.gz sent 224.59K bytes received 66 bytes 64.19K bytes/sec total size is 224.40K speedup is 1.00

8. Afficher la progression lors du transfert de données avec Rsync
Pour afficher la progression lors du transfert des données d’une machine à une autre, nous pouvons utiliser l’option ‘--progress'
, qui affiche les fichiers et le temps restant pour terminer le transfert.
# rsync -avzhe ssh --progress /root/rpmpkgs [email protected]:/root/rpmpkgs [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5) rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5) rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm 2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5) rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm 120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5) sent 3.74M bytes received 96 bytes 1.50M bytes/sec total size is 3.74M speedup is 1.00

9. Inclure les fichiers avec une extension particulière avec Rsync
Pour inclure des fichiers spécifiques ou des motifs lors d’une opération de rsync, vous pouvez utiliser l’option --include
avec une extension qui correspond à tous les fichiers.
# rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/
Dans l’exemple fourni, rsync inclura uniquement les fichiers avec l’extension .txt
du répertoire /chemin/vers/source/ pendant le transfert.
10. Exclure les fichiers avec une extension particulière avec Rsync
De même, pour exclure une extension spécifique lors d’une opération de rsync, vous pouvez utiliser l’option --exclude
avec un motif générique.
# rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/
Durant le transfert, rsync exclura les fichiers avec l’extension spécifiée (*.ext)
, tandis que tous les autres fichiers et dossiers seront inclus.
11. Inclure et exclure des fichiers avec rsync
Pour inclure et exclure des fichiers ou des patrons spécifiques lors d’une opération rsync, vous pouvez utiliser les options --include
et --exclude
avec des patterns jokers appropriés.
Ces deux options nous permettent d’inclure et d’exclure des fichiers en spécifiant des paramètres. Ces options nous aident à spécifier les fichiers ou dossiers que vous souhaitez inclure dans votre synchronisation et à exclure les fichiers et dossiers qui ne doivent pas être transférés.
Dans cet exemple, la commande rsync ne retiendra que les fichiers et dossiers qui commencent avec ‘R’
et exclura tous les autres fichiers et dossiers.
# rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm

12. Utilisation de l’option –delete avec rsync
Si un fichier ou un dossier n’existe pas à la source mais existe déjà à la destination, vous souhaiteriez peut-être supprimer ce fichier ou dossier existant à la cible lors de la synchronisation.
Nous pouvons utiliser l’option ‘--delete
‘ pour supprimer les fichiers qui n’existent pas dans le dossier source.
Les sources et la cible sont synchronisées. Maintenant, créez un nouveau fichier test.txt à la cible.
[root@tecmint:~]# cd /root/rpm/ [root@tecmint:~/rpm]# touch test.txt [root@tecmint:~/rpm]# rsync -avz --delete [email protected]:/var/lib/rpm/ /root/rpm/ [email protected]'s password: receiving incremental file list deleting test.txt ./ .dbenv.lock .rpm.lock Basenames Conflictname Dirnames Enhancename Filetriggername Group Installtid Name Obsoletename Packages Providename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.001 __db.002 __db.003 sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec total size is 71,151,616 speedup is 3.84
La cible a le nouveau fichier appelé test.txt lors de la synchronisation avec la source avec l’option ‘--delete
‘, il a supprimé le fichier test.txt.

13. Définir une limite de transfert de fichier avec Rsync
Vous pouvez spécifier la taille maximale du fichier à transférer ou à synchroniser. Vous pouvez le faire avec l’option « --max-size
« . Ici, dans cet exemple, la taille maximale du fichier est de 200ko, donc cette commande ne transférera que les fichiers égaux ou inférieurs à 200ko.
# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email protected]:/root/tmprpm [email protected]'s password: sending incremental file list created directory /root/tmprpm ./ .dbenv.lock .rpm.lock Conflictname Enhancename Filetriggername Group Installtid Name Obsoletename Recommendname Requirename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.002 sent 129.52K bytes received 396 bytes 28.87K bytes/sec total size is 71.15M speedup is 547.66

14. Supprimer automatiquement les fichiers sources après le transfert
Maintenant, supposez que vous ayez le serveur web principal et un serveur de sauvegarde de données, vous avez créé une sauvegarde quotidienne et l’avez synchronisée avec votre serveur de sauvegarde, mais maintenant vous ne voulez pas conserver cette copie locale de la sauvegarde sur votre serveur web.
Alors, allez-vous attendre que le transfert soit terminé, puis supprimer ce fichier de sauvegarde local manuellement ? Bien sûr que NON. Cette suppression automatique peut être effectuée en utilisant l’option ‘--remove-source-files
‘.
# rsync --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 795 bytes received 2.33K bytes 894.29 bytes/sec total size is 267.30K speedup is 85.40 [root@tecmint:~]# ls -l backup.tar.gz ls: cannot access 'backup.tar.gz': No such file or directory

15. Faire un essai à sec avec Rsync
Si vous êtes un débutant utilisant rsync et que vous ne savez pas exactement ce que votre commande va faire. Rsync pourrait vraiment gâcher les choses dans votre dossier de destination, et alors faire une annulation peut être un travail fastidieux.
L’utilisation de cette option ne fera aucune modification aux fichiers et affichera la sortie de la commande, si la sortie est identique à ce que vous souhaitez effectuer, vous pouvez ensuite supprimer l’option ‘--dry-run
‘ de votre commande et l’exécuter sur le terminal.
# rsync --dry-run --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 50 bytes received 19 bytes 19.71 bytes/sec total size is 267.30K speedup is 3,873.97 (DRY RUN)

16. Configurer un limite de bande passante et transférer un fichier avec rsync
Vous pouvez configurer un limite de bande passante lors du transfert de données d’une machine à une autre en utilisant l’option ‘--bwlimit
‘. Cette option vous permet de limiter la bande passante I/O.
# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ [email protected]:/root/tmprpm/ [email protected]'s password: sending incremental file list sent 324 bytes received 12 bytes 61.09 bytes/sec total size is 38.08M speedup is 113347.05
De plus, par défaut, rsync synchronise uniquement les blocs et les octets modifiés, si vous souhaitez explicitement synchroniser le fichier entier, utilisez l’option ‘-W‘ avec celui-ci.
# rsync -zvhW backup.tar /tmp/backups/backup.tar backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10
Conclusion
Ceci conclut notre aperçu de rsync et de ses capacités. Pour explorer plus à fond ses options étendues et ses fonctionnalités, je vous encourage à consulter les pages manuellement disponibles.
Source:
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/