Recherche de site Web

16 exemples pratiques de commande Rsync sous Linux


Rsync (Remote Sync) 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.

À l'aide de la commande rsync, vous pouvez copier et synchroniser vos données à distance et localement sur des répertoires, des disques et des réseaux, effectuer des sauvegardes de données et mettre en miroir 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 sur 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

Il offre plusieurs avantages, notamment :

  • Transfert de fichiers efficace – rsync utilise un algorithme de transfert delta, ce qui signifie qu'il transfère uniquement les différences entre les fichiers source et de destination, ce qui réduit considérablement la quantité de données transférées, ce qui le rend efficace pour la synchronisation de fichiers ou de répertoires volumineux.
  • Synchronisation de fichiers à distance – rsync prend en charge les transferts de fichiers locaux et distants via SSH, ce qui permet la synchronisation entre les systèmes locaux et distants ou la mise en miroir de répertoires sur plusieurs machines.
  • Sauvegardes incrémentielles – rsync est bien adapté aux sauvegardes incrémentielles, car il crée et met à jour efficacement des sauvegardes en transférant uniquement les fichiers nouveaux ou modifiés.
  • Préserve les autorisations des fichiers – rsync peut conserver divers attributs de fichiers, 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 pendant les 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 aux deux extrémités.
  • Plus rapide – rsync peut être plus rapide que scp (Secure Copy) pour le transfert de fichiers, en particulier lors de la synchronisation de grands répertoires ou lorsqu'il s'agit de fichiers qui ont déjà été partiellement transférés ou 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 détaillée, affichant des informations détaillées sur le transfert.
  • -r – copie les données de manière récursive (mais ne conserve pas les horodatages et les autorisations lors du transfert des données.
  • -a – mode d'archivage, qui permet de copier des fichiers de manière récursive et préserve également les liens symboliques, les autorisations de fichiers, les propriétés des utilisateurs et des groupes et les horodatages.
  • -z – Compressez les fichiers pendant le transfert pour réduire l'utilisation du réseau.
  • -h – numéros de sortie lisibles par l'homme dans un format lisible par l'homme.
  • -P – Afficher la progression pendant le transfert.
  • SOURCE – Spécifie le(s) fichier(s) ou répertoire source à 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. Semblable à la source, il peut s’agir d’un chemin local ou d’un emplacement distant.

Installer Rsync dans le système Linux

Nous pouvons installer le package rsync à l'aide du gestionnaire de packages suivant selon 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 le fichier localement

Pour copier ou synchroniser un fichier localement, vous pouvez utiliser la commande suivante qui synchronisera un seul fichier sur une machine locale d'un emplacement à un autre.

Ici, dans cet exemple, un nom de fichier 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 le répertoire localement

La commande suivante transférera ou synchronisera tous les fichiers d'un répertoire vers un autre répertoire de la même machine.

Ici, dans cet exemple, /root/rpmpkgs contient des fichiers de package RPM et vous souhaitez que ce répertoire soit copié dans le 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. Copiez un répertoire du serveur local vers le serveur distant

Pour copier un répertoire d'un serveur local vers un serveur distant, vous pouvez utiliser la commande suivante, qui synchronisera un répertoire d'une machine locale vers une machine distante.

Par exemple, s'il existe un dossier sur votre ordinateur local « rpmpkgs » qui contient des packages RPM et si vous souhaitez que le contenu de ce répertoire local soit envoyé à un serveur distant, vous pouvez utiliser la commande suivante.

rsync -avzh /root/rpmpkgs [email :/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 '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. Copiez un répertoire du serveur distant vers le serveur local

Cette commande vous aidera à synchroniser un répertoire distant avec un répertoire local. Ici, dans cet exemple, un répertoire /root/rpmpkgs qui se trouve sur un serveur distant est copié sur votre ordinateur local dans /tmp/myrpms.

rsync -avzh [email :/root/rpmpkgs /tmp/myrpms

[email '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 sur 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 dans une connexion sécurisée. avec cryptage afin que personne ne puisse lire vos données pendant leur transfert par fil sur Internet.

De plus, lorsque nous utilisons rsync, nous devons fournir le mot de passe utilisateur/root pour accomplir cette tâche particulière, en utilisant donc le SSH L'option enverra vos identifiants de manière cryptée afin que votre mot de passe soit en sécurité.

Pour utiliser rsync sur 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. Copiez 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 le « ssh » avec l'option « -e » et effectuerons le transfert de données.

rsync -avzhe ssh [email :/root/anaconda-ks.cfg /tmp

[email '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 à l'aide de SSH, vous pouvez utiliser la commande suivante comme indiqué.

rsync -avzhe ssh backup.tar.gz [email :/backups/

[email '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 du transfert des données d'une machine à une autre machine, 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 :/root/rpmpkgs

[email '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 des fichiers avec une extension particulière avec Rsync

Pour inclure des fichiers ou des modèles spécifiques lors d'une opération 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 /path/to/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 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/

Dans l'exemple fourni, rsync exclura les fichiers avec l'extension spécifiée (*.ext) pendant le transfert, tout en incluant tous les autres fichiers et répertoires.

11. Inclure et exclure des fichiers avec Rsync

Pour inclure et exclure des fichiers ou des modèles spécifiques lors d'une opération rsync, vous pouvez utiliser les options --include et --exclude avec les modèles génériques appropriés.

Ces deux options nous permettent d'inclure et exclure des fichiers en spécifiant des paramètres. Cette option nous aide à spécifier les fichiers ou répertoires que vous souhaitez inclure dans votre synchronisation et à exclure des fichiers et des dossiers. avec lequel vous ne souhaitez pas être transféré.

Ici, dans cet exemple, la commande rsync inclura uniquement les fichiers et répertoires commençant par 'R' et exclura tous les autres fichiers et répertoires.

rsync -avze ssh --include 'R*' --exclude '*' [email :/var/lib/rpm/ /root/rpm

12. Utilisation de l'option –delete avec Rsync

Si un fichier ou un répertoire n'existe pas à la source, mais existe déjà à la destination, vous souhaiterez peut-être supprimer ce fichier/répertoire existant sur la cible lors de la synchronisation.

Nous pouvons utiliser l'option '--delete' pour supprimer les fichiers qui ne sont pas présents dans le répertoire source.

La source et la cible sont synchronisées. Créez maintenant un nouveau fichier test.txt sur la cible.

[root@tecmint:~]# cd /root/rpm/
[root@tecmint:~/rpm]# touch test.txt
[root@tecmint:~/rpm]# rsync -avz --delete [email :/var/lib/rpm/ /root/rpm/

[email '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

Target 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 la limite de transfert de fichiers avec Rsync

Vous pouvez spécifier la taille Max 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 200 ko, cette commande ne transférera donc que les fichiers égaux ou inférieurs à 200 ko.

rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email :/root/tmprpm

[email '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

Supposons maintenant que vous disposiez du serveur Web principal et d'un serveur de sauvegarde de données, que vous ayez créé une sauvegarde quotidienne et que vous l'ayez synchronisée avec votre serveur de sauvegarde, mais que vous ne souhaitiez plus conserver cette copie locale de la sauvegarde sur votre serveur Web.

Alors, allez-vous attendre la fin du transfert, puis supprimer manuellement ce fichier de sauvegarde local ? Bien sûr que non. Cette suppression automatique peut être effectuée à l'aide de l'option '--remove-source-files'.

rsync --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email '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. Effectuez un essai à sec avec Rsync

Si vous êtes un débutant utilisant rsync et que vous ne savez pas exactement ce que va faire votre commande. Rsync pourrait vraiment gâcher les choses dans votre dossier de destination, puis effectuer une annulation peut être un travail fastidieux.

L'utilisation de cette option n'apportera aucune modification aux fichiers et affichera le résultat de la commande. Si le résultat affiche exactement la même chose que vous souhaitez faire, vous pouvez supprimer le '--dry-run ' de votre commande et exécutez-la sur le terminal.

rsync --dry-run --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email '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. Rsync définit la limite de bande passante et transfère le fichier

Vous pouvez définir la limite de bande passante lors du transfert de données d'une machine à une autre à l'aide de l'option '--bwlimit'. Cette option nous aide à limiter la bande passante E/S.

rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  [email :/root/tmprpm/
[email '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 l'intégralité du fichier, vous 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 une exploration plus approfondie de ses options et fonctionnalités étendues, je vous encourage à vous référer aux pages de manuel complètes (pages de manuel) disponibles.