rsync est un outil de ligne de commande gratuit qui vous permet de synchroniser des fichiers localement et à distance. Il vous permet de transférer des fichiers et des répertoires.

Il est donc très utile pour migrer des données, effectuer des sauvegardes et créer des miroirs, ce qui en fait un outil idéal pour les webmasters et les administrateurs pour les tâches récurrentes de transfert de données.

Cet article vous apprendra comment fonctionne Rysnc et vous donnera quelques exemples utiles.

Comment fonctionne rsync ?

rsync est un utilitaire de synchronisation à distance en ligne de commande pour les systèmes de type Unix. Il permet à l’utilisateur de transférer/synchroniser des fichiers entre des machines ou deux hôtes de manière transparente.

Sous le capot, rsync utilise l’algorithme de transfert delta. Cet algorithme consiste à copier les différences entre deux fichiers sur deux hôtes (source et destination). La source et la destination peuvent être locales ou distantes. La commande rsync peut effectuer des tâches de copie/synchronisation de données de deux manières. Ces deux méthodes sont les suivantes :

  • Utilisez ssh, rsh pour copier/synchroniser entre deux hôtes.
  • Utiliser le démon TCP rsync pour copier/synchroniser.

Conçu pour fonctionner dans des systèmes de type Unix, il fonctionne également sous Linux.

Le processus étape par étape de rsync est le suivant :

  • Rsync utilise SSH pour se connecter à l’hôte distant et demande un mot de passe.
  • Une fois connecté, le programme rsync de l’hôte distant communique avec la source.
  • Ces programmes déterminent alors les fichiers et les répertoires qui doivent être synchronisés. Il utilise un algorithme de transfert delta pour vérifier la différence entre les fichiers.
image-159

Si la commande rsync ne trouve pas un fichier sur le système distant mais pas sur le système hôte, elle le copiera et le transférera sur le système hôte. De même, pour les fichiers déjà existants (à la fois sur l’hôte et sur le système distant), elle copiera la différence entre eux (c’est-à-dire les parties modifiées). Enfin, il ignorera les fichiers existants sur les deux systèmes qui n’ont pas été modifiés.

La commande rsync réalise des mises à jour incrémentielles en stockant la différence dans un fichier temporaire avant de l’envoyer à la destination.

Avant de commencer :

  • Vous devez disposer des privilèges root ou sudo
  • Avoir accès au terminal/à la ligne de commande
  • Un accès SSH pour exécuter les commandes rsync en toute sécurité
  • Vous avez également besoin de deux machines pour faire rsync.

Pour ce tutoriel, nous allons utiliser Linux Mint 21.1 Vera. Vous pouvez suivre le guide sans problème en utilisant n’importe quelle autre distribution Linux.

Pourquoi utiliser rsync plutôt que Scp ?

Scp (secure copy) est un protocole de ligne de commande populaire qui permet aux utilisateurs de copier des fichiers. Il suit une approche linéaire de la copie. Cela signifie qu’il copie simplement les fichiers de la source à la destination. Pour le faire en toute sécurité, il utilise SSH.

La syntaxe de la commande scp est la suivante :

scp option SOURCE DESTINATION

Cependant, la question demeure : pourquoi utiliser rsync plutôt que scp ?

L’utilisation de rsync présente de nombreux avantages. Ces avantages sont les suivants :

  • Exécution plus rapide : rsync est plus rapide que scp car il utilise un protocole de mise à jour à distance. Cela lui permet de ne transférer que les différences plutôt que le fichier entier. Ainsi, si vous mettez en place une synchronisation régulière dans le temps, vous n’avez besoin d’effectuer qu’une copie complète la première fois. À partir de la fois suivante, il ne copie que les parties mises à jour à l’aide de l’algorithme de transfert delta.
  • Moins de consommation de bande passante : Comme rsync n’a pas besoin de copier à nouveau l’intégralité du fichier, il consomme moins de bande passante. De plus, il utilise également des algorithmes de compression/décompression pour minimiser la taille du fichier pendant le transfert.
  • Plus d’options de ligne de commande : rsync surpasse également scp en ce qui concerne le nombre d’options de ligne de commande. Cela signifie que vous pouvez affiner les réglages de rsync plus que ceux de scp.

En conclusion, rsync est un excellent outil de synchronisation incrémentielle. L’outil scp est également utile pour transférer/synchroniser des fichiers en toute sécurité. Dans un scénario réel, scp convient aux tâches quotidiennes si vous recherchez une approche plus simple. Toutefois, pour les tâches récurrentes, utilisez rsync.

syntaxe de la commande rsync

La commande rsync se présente comme suit :

  • Delocal à local : rsync option SOURCE DEST
  • De local à distant : rsync option SOURCE USER@HOST:DEST
  • Dedistant à local : rsync option USER@HOST:SRC DEST

Les termes sont définis ci-dessous :

  • OPTION – Il s’agit des options rsync
  • SOURCE – Répertoire source
  • DEST – Répertoire de destination
  • USER – Nom d’utilisateur distant
  • HOST – Nom d’hôte ou adresse IP à distance

Les options sont des paramètres qui offrent des fonctionnalités supplémentaires à la commande. Par exemple, vous pouvez synchroniser les données de manière récursive avec l’option -r. Cependant, l’option -r ne synchronise pas la propriété des groupes et des utilisateurs, les horodatages, les autorisations ou les liens symboliques. À la place, vous pouvez utiliser l’option -a, qui exécute la commande en mode archive, garantissant ainsi que tous les droits de propriété, autorisations et liens symboliques du fichier sont conservés lors de la copie.

Les autres options de rsync sont les suivantes

  • z : compresse les données pour économiser de l’espace
  • h : fournit un format de sortie lisible par l’homme
  • b : effectue une sauvegarde pendant le processus de synchronisation des données
  • e: utilise le protocole SSH pour les transferts de données à distance
  • progress : affiche la progression de la synchronisation des données
  • v : demande à rsync d’afficher une sortie verbeuse
  • n : effectue un essai à blanc pour tester les paramètres et la configuration de la synchronisation des données
  • q : supprimer la sortie et les options de la commande rsync

Installation de rsync

La plupart des systèmes Unix et Linux sont livrés avec rsync installé. Si ce n’est pas le cas, vous pouvez l’installer à l’aide des commandes suivantes.

Pour Debian/Ubuntu et Mint

sudo apt-get install rsync

Pour Arch Linux

pacman -S rsync

Sur Gentoo

emerge sys-apps/rsync

Sous CentOS/Fedora/REHL

sudo yum install rsync

Sur openSUSE

sudo zypper install rsync

Comme nous avons Linux Mint, rsync est pré-installé. Vous pouvez donc lancer la commande rsync dans le terminal pour voir s’il est installé. Il vous expliquera ses capacités, ses options et d’autres informations essentielles s’il est présent.

nitt ~
$ rsync
rsync version 3.2.3 protocole version 31
Copyright (C) 1996-2020 par Andrew Tridgell, Wayne Davison et d'autres.
Site web : https://rsync.samba.org/
Capacités :
    fichiers 64 bits, inums 64 bits, timestamps 64 bits, ints longs 64 bits,
    paires de sockets, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
    batchfiles, inplace, append, ACLs, xattrs, protect-args optionnels, iconv,
    symtimes, prealloc, stop-at, no crtimes
Optimisations :
    SIMD, pas d'asm, openssl-crypto
Liste de contrôle :
    xxh128 xxh3 xxh64 (xxhash) md5 md4 aucun
Liste de compression :
    zstd lz4 zlibx zlib aucun

rsync est livré avec ABSOLUMENT AUCUNE GARANTIE.  Il s'agit d'un logiciel libre, et vous
et vous pouvez le redistribuer sous certaines conditions.  Consultez la licence publique générale GNU
General Public Licence pour plus de détails.

rsync est un programme de transfert de fichiers capable d'effectuer des mises à jour à distance efficaces via un algorithme de différenciation rapide
par le biais d'un algorithme de différenciation rapide.

Voyons maintenant rsync en action avec différents cas d’utilisation.

Pour ce tutoriel, nous allons créer deux répertoires.

  • répertoire-source
  • répertoire dest

Pour cela, vous devez taper les commandes suivantes.

mkdir répertoire-source
mkdir répertoire-dest

Nous devrons également générer des fichiers pour faire fonctionner rsync. Créons donc quelques fichiers de test à l’aide de la commande ci-dessous.

touch répertoire-source/fichier{1..100}

Cette commande crée 100 fichiers vides dans le répertoire source. Vous pouvez le confirmer en entrant la commande ci-dessous.

ls répertoire-source
Résultat :
nitt rsync-tutorial
$ ls
dest-directory répertoire-source
nitt rsync-tutorial
$ touch répertoire-source/fichier{1..100}
nitt rsync-tutorial
$ ls répertoire-source
fichier1 fichier18 fichier27 fichier36 fichier45 fichier54 fichier63 fichier72 fichier81 fichier90
fichier10 fichier19 fichier28 fichier37 fichier46 fichier55 fichier64 fichier73 fichier82 fichier91
fichier100 fichier2 fichier29 fichier38 fichier47 fichier56 fichier65 fichier74 fichier83 fichier92
fichier11 fichier20 fichier3 fichier39 fichier48 fichier57 fichier66 fichier75 fichier84 fichier93
fichier12 fichier21 fichier30 fichier4 fichier49 fichier58 fichier67 fichier76 fichier85 fichier94
fichier13 fichier22 fichier31 fichier40 fichier5 fichier59 fichier68 fichier77 fichier86 fichier95
fichier14 fichier23 fichier32 fichier41 fichier50 fichier6 fichier69 fichier78 fichier87 fichier96
fichier15 fichier24 fichier33 fichier42 fichier51 fichier60 fichier7 fichier79 fichier88 fichier97
fichier16 fichier25 fichier34 fichier43 fichier52 fichier61 fichier70 fichier8 fichier89 fichier98
fichier17 fichier26 fichier35 fichier44 fichier53 fichier62 fichier71 fichier80 fichier9 fichier99

Remarque : nous avons laissé le répertoire dest vide.

Copier localement des répertoires de manière récursive

Même si rsync vise principalement à copier des fichiers entre un serveur local et un serveur distant, il est tout aussi utile pour copier des fichiers localement.

Dans ce cas, nous utiliserons la syntaxe rsync suivante.

rsync option SOURCE DESTINATION

Copiez les fichiers de notre répertoire source dans le répertoire destination en exécutant la commande suivante.

rsync -r répertoire-source/répertoire-destination

Ici, la commande copie “récursivement” les fichiers du répertoire source vers le répertoire de destination.

nitt rsync-tutorial
$ ls
dest-directory répertoire-source
nitt rsync-tutorial
$ ls dest-directory
nitt rsync-tutorial
$ ls répertoire-source
fichier1 fichier18 fichier27 fichier36 fichier45 fichier54 fichier63 fichier72 fichier81 fichier90
fichier10 fichier19 fichier28 fichier37 fichier46 fichier55 fichier64 fichier73 fichier82 fichier91
fichier100 fichier2 fichier29 fichier38 fichier47 fichier56 fichier65 fichier74 fichier83 fichier92
fichier11 fichier20 fichier3 fichier39 fichier48 fichier57 fichier66 fichier75 fichier84 fichier93
fichier12 fichier21 fichier30 fichier4 fichier49 fichier58 fichier67 fichier76 fichier85 fichier94
fichier13 fichier22 fichier31 fichier40 fichier5 fichier59 fichier68 fichier77 fichier86 fichier95
fichier14 fichier23 fichier32 fichier41 fichier50 fichier6 fichier69 fichier78 fichier87 fichier96
fichier15 fichier24 fichier33 fichier42 fichier51 fichier60 fichier7 fichier79 fichier88 fichier97
fichier16 fichier25 fichier34 fichier43 fichier52 fichier61 fichier70 fichier8 fichier89 fichier98
fichier17 fichier26 fichier35 fichier44 fichier53 fichier62 fichier71 fichier80 fichier9 fichier99
nitt rsync-tutorial
rsync -r répertoire-source/ répertoire-destination
nitt rsync-tutorial
$ ls répertoire-dest
fichier1 fichier18 fichier27 fichier36 fichier45 fichier54 fichier63 fichier72 fichier81 fichier90
fichier10 fichier19 fichier28 fichier37 fichier46 fichier55 fichier64 fichier73 fichier82 fichier91
fichier100 fichier2 fichier29 fichier38 fichier47 fichier56 fichier65 fichier74 fichier83 fichier92
fichier11 fichier20 fichier3 fichier39 fichier48 fichier57 fichier66 fichier75 fichier84 fichier93
fichier12 fichier21 fichier30 fichier4 fichier49 fichier58 fichier67 fichier76 fichier85 fichier94
fichier13 fichier22 fichier31 fichier40 fichier5 fichier59 fichier68 fichier77 fichier86 fichier95
fichier14 fichier23 fichier32 fichier41 fichier50 fichier6 fichier69 fichier78 fichier87 fichier96
fichier15 fichier24 fichier33 fichier42 fichier51 fichier60 fichier7 fichier79 fichier88 fichier97
fichier16 fichier25 fichier34 fichier43 fichier52 fichier61 fichier70 fichier8 fichier89 fichier98
fichier17 fichier26 fichier35 fichier44 fichier53 fichier62 fichier71 fichier80 fichier9 fichier99

Cette opération permet de copier tous les fichiers du répertoire source dans le répertoire dest.

Copier un seul fichier localement

Maintenant que nous avons appris à synchroniser deux répertoires, nous allons apprendre à copier un seul fichier.

Pour ce faire, nous allons éditer le fichier vide file1 dans le répertoire source et le synchroniser avec le même fichier présent dans le répertoire dest.

Pour éditer un fichier, tapez la commande suivante.

nano répertoire-source/fichier1

Copiez-collez le texte suivant dans l’éditeur nano.

Nous mettons à jour le fichier 1 dans le répertoire source.
Une fois la mise à jour effectuée, nous pousserons la nouvelle mise à jour dans le répertoire dest.
rsync n'a pas besoin de recopier le fichier en utilisant l'algorithme de transfert delta.
Cet algorithme vérifie les différences et met à jour les fichiers de destination en conséquence
en conséquence.
Ainsi, une fois que vous avez enregistré le fichier 1 dans le répertoire source, ouvrez le fichier 1 dans le répertoire de destination
dans le répertoire de destination. Il sera vide.
Cependant, si nous le vérifions après l'exécution de rsync, vous verrez que le fichier1 dans le répertoire de destination
a été mis à jour.
updating-file1-with-text
Ajout de contenu à un fichier

Fermez et enregistrez le fichier.

Copions maintenant le fichier à l’aide de rsync.

sudo rsync -v --existant répertoire-source/fichier1 /répertoire-destination
#Sortie
nitt rsync-tutorial
sudo rsync -v --répertoire-source existant/fichier1 répertoire-destination
fichier1

envoyé 557 octets reçu 35 octets 1,184.00 octets/sec
la taille totale est de 474 la vitesse est de 0.80

nitt rsync-tutorial
$ 

Comme vous l’avez peut-être remarqué, nous avons utilisé l’option –existing . Cette option met à jour les fichiers existants. Si vous exécutez la commande sans l’option –existing, la mise à jour n’aura pas lieu, même si elle s’exécute correctement.

Si le fichier que vous copiez n’existe pas dans le dossier de destination, vous devez exécuter la commande suivante.

rsync -v répertoire-source/nouveau-fichier répertoire-destination
#Sortie
nitt rsync-tutorial
$ rsync -v répertoire-source/nouveau-fichier répertoire-destinataire
nouveaufichier

envoyé 82 octets reçu 35 octets 234.00 octets/sec
la taille totale est de 0 la vitesse est de 0.00

Copie de plusieurs fichiers

Si vous avez l’intention de copier plusieurs fichiers, vous devez mentionner les chemins d’accès aux sources des deux fichiers, suivis du répertoire cible.

Pour ce faire, nous allons créer deux nouveaux fichiers : newfile2 et newfile3, dans le répertoire source. Pour ce faire, exécutez la commande suivante

touch répertoire-source/nouveaufichier{2..3}

Maintenant, utilisez la commande suivante pour synchroniser plusieurs fichiers.

rsync -v répertoire-source/nouveau-fichier2 répertoire-source/nouveau-fichier3 répertoire-destination
#Sortie
nitt rsync-tutorial
rsync -v source-répertoire/nouveaufichier2 source-répertoire/nouveaufichier3 dest-répertoire
nouveaufichier2
nouveaufichier3

envoyé 135 octets reçu 54 octets 378.00 octets/sec
la taille totale est de 0 la vitesse est de 0,00
nitt rsync-tutorial
$ 

Copier un fichier ou un répertoire de local à distant

La syntaxe de rsync pour le transfert de local à distant est la suivante.

rsync option SOURCE USER@HOST:DEST

Comme vous pouvez le constater, vous devez connaître l’adresse IP de la machine distante pour que cela fonctionne. Vous devez également ajouter l’adresse IP après le fichier source.

rsync -av /Projets/rsync-tutorial/répertoire-source 192.168.192.200 : /Projets/rsync-tutoriel/répertoire-test

Avant de commencer le transfert, le logiciel vous demandera votre 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 suivie de @.

rsync -av /Projets/rsync-tutorial/répertoire-source nithya@192.168.192.200 : /Projets/rsync-tutorial/répertoire-test

Si vous avez l’intention de copier plusieurs fichiers ou répertoires, vous devez énumérer les chemins d’accès aux fichiers ou aux répertoires. La syntaxe est la suivante

rsync -av /Projets/rsync-tutorial/source-directory/newfile1 /Projets/rsync-tutorial/source-directory/newfile2 192.168.192.200 : /Projets/rsync-tutorial/dest-directory

Protocoles spécifiques au transfert à distance

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 l’option -e ssh à la commande rsync.

rsync -e ssh /Projets/rsync-tutorial/source-directory 192.168.192.200 : /Projets/rsync-tutorial/répertoire-test

Copie d’un fichier ou d’un répertoire d’un serveur distant vers un serveur local

La syntaxe de rsync pour le transfert de local à distant est la suivante.

option sync USER@HOST:SRC DEST

Ceci agit comme une demande d’extraction. Ainsi, pour obtenir les fichiers/répertoires requis d’un serveur distant vers votre machine locale, vous devez exécuter la commande suivante.

rsync -av 192.168.192.200 : /Projets/rsync-tutorial/dest-directory /Projets/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 par son chemin d’accès complet.

rsync -av 192.168.192.200 : /Projets/rsync-tutorial/dest-directory/newfile4 /Projets/rsync-tutorial/répertoire-source

Pour copier plusieurs fichiers ou répertoires du local vers le distant, vous devez spécifier le chemin d’accès entre les crochets (séparés par des virgules) après l’adresse IP du serveur.

rsync -av 192.168.192.200 : {Projets/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projets/rsync-tutorial/source-directory

De la même manière, vous pouvez mentionner des fichiers.

Affichez la progression en direct pendant le transfert

C’est une bonne idée d’afficher la progression en direct pour les sauvegardes de données plus importantes. Pour cela, vous devez utiliser l’option –progress. Ajoutez-la à la commande rsync et vous pourrez voir la vitesse de transfert, le temps restant et la quantité de données transférées.

rsync -av --progress 192.168.192.200 : /Projets/rsync-tutorial/dest-directory /Projets/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 une fois le transfert terminé. Cela peut vous aider dans de nombreux scénarios, en particulier lorsqu’il s’agit de sécuriser vos fichiers sans laisser de traces ou simplement de les utiliser pour libérer de l’espace.

rsync -av --remove-source-files 192.168.192.200 : /Projets/rsync-tutorial/dest-directory /Projets/rsync-tutorial/source-directory

rsync à l’épreuve de la réalité

Rysnc vous permet également d’effectuer une évaluation avant de procéder à une exécution réelle. L’exécution à blanc vous permet de voir si vous faites ce qu’il faut. Après tout, vous ne voulez pas mettre à jour des fichiers par erreur ou même les supprimer.

Vous devez utiliser l’option –dry-run pour effectuer une exécution à blanc. Ajoutez-la à la commande, suivie de la source et de la destination.

sudo rsync -v --dry-run source-répertoire/fichier1 dest-répertoire
nitt rsync-tutorial
sudo rsync -v --dry-run source-directory/file1 dest-directory
fichier1

envoyé 43 octets reçu 19 octets 124.00 octets/sec
la taille totale est de 474 la vitesse est de 7.65 (DRY RUN)
nitt rsync-tutorial

La sortie est similaire à celle de l’exécution précédente. Cependant, vous remarquerez la mention (DRY RUN) à la fin de la sortie.

Définir la taille minimale et maximale des fichiers

Rysnc vous permet également de définir la taille minimale ou maximale du fichier pendant le transfert.

Ainsi, si vous souhaitez transférer avec une taille minimale de 15 Ko, vous devez utiliser –min-size=15K.

rsync -av --min-size=15k 192.168.192.200 : /Projets/rsync-tutorial/dest-directory /Projets/rsync-tutorial/source-directory

La commande ne copiera que les fichiers dont la taille minimale est de 15 Ko. Si la taille du fichier est inférieure, elle l’ignorera.

De même, vous pouvez utiliser l’option –max-size pour définir la taille maximale d’un fichier.

rsync -av --max-size=450k 192.168.192.200 : /Projets/rsync-tutorial/dest-directory /Projets/rsync-tutorial/source-directory

Ici, rsync ignorera les fichiers dont la taille est supérieure à 450K.

Définir la limite de bande passante

Si vous effectuez d’autres tâches gourmandes en bande passante, vous pouvez demander à rysnc de fixer la limite de bande passante pour le transfert. Pour ce faire, utilisez l’option –bwlimit=KB/s.

rsync -av --bwlimit=100 --progress 192.168.192.200 : /Projets/rsync-tutorial/dest-directory /Projets/rsync-tutorial/source-directory

Ici, nous avons fixé la bande passante à 100Kb/s pendant le transfert.

Mot de la fin

Nous arrivons à la fin de notre guide sur les commandes rsync. Nous avons appris à utiliser rysnc et avons couvert de nombreuses commandes de manière efficace.

Cependant, rysnc offre bien plus que ce que nous avons couvert. C’est pourquoi vous pouvez également consulter la page de manuel de rsync, où tous les aspects de rsync sont abordés.

Ensuite, consultez les fiches d’astuces sur les lignes de commande pour Windows, Linux et macOS.