Comment utiliser la commande Rsync dans Linux : 16 exemples pratiques

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.

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.

Rsync Local Files

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
Rsync Local Directory

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
Rsync Directory Remote System

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
Rsync Remote Directory to Local

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
Rsync Copy Remote File to Local

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
Rsync Copy Local File to Remote

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
Rsync Progress While Copying Files

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
Rsync Include and Exclude Files

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.

Rsync Delete Option

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
Rsync Set Max File Transfer Size

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
Rsync Delete Source File After Transfer

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)
Rsync 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/