rsync est un outil de ligne de commande gratuit qui vous permet de synchroniser des fichiers localement et à distance. Avec lui, vous pouvez transférer des fichiers et des répertoires.
Cela le rend très utile pour la migration des données, la réalisation de sauvegardes et la mise en miroir, ce qui le rend idéal pour les webmasters et les administrateurs pour les tâches récurrentes de transfert de données.
Cet article nous apprendra comment Rysnc fonctionne et donnera quelques exemples utiles.
Table des matières
Comment fonctionne rsync ?
rsync est un utilitaire de ligne de commande de synchronisation à distance pour les systèmes de type Unix. Il donne à l’utilisateur la possibilité 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 les 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. Ceux-ci sont:
- Utilisez ssh, rsh pour copier/synchroniser entre deux hôtes.
- Utilisez le démon TCP rsync pour la copie/synchronisation.
Comme il est conçu pour fonctionner dans des systèmes de type Unix, il fonctionne également sous Linux.
Le processus étape par étape rsync utilise comme suit :
- Rsync utilise SSH pour se connecter à l’hôte distant et demande un mot de passe.
- Une fois connecté, le rsync de l’hôte distant communique avec la source.
- Ces programmes détermineront ensuite les fichiers et répertoires qui doivent être synchronisés. Il utilise un algorithme de transfert delta pour vérifier la différence entre les fichiers.
Si la commande rsync ne trouve pas de fichier sur la télécommande mais pas sur l’hôte, elle le copie et le transfère sur le système hôte. De même, pour les fichiers déjà existants (à la fois sur l’hôte et sur la télécommande), il copiera la différence entre eux (c’est-à-dire les parties modifiées). Enfin, il ignorera les fichiers existants sur les deux systèmes sans aucune modification.
La commande rsync réalise des mises à jour incrémentielles en stockant la différence dans un fichier temporaire avant de le pousser vers la destination.
Avant de commencer:
- Vous devez avoir les privilèges root ou sudo
- Avoir accès au terminal/ligne de commande
- Accès SSH pour exécuter en toute sécurité les commandes rsync
- Vous avez également besoin de deux machines pour faire rsync.
Pour le tutoriel, nous allons utiliser Linux Mint 21.1 Vera. Vous pouvez facilement suivre le guide sans problème en utilisant n’importe quelle autre distribution Linux.
Pourquoi utiliser rsync sur Scp ?
Scp (copie sécurisée) 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 ?
Eh bien, il y a plusieurs avantages à utiliser rsync. Ces avantages comprennent :
- 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 l’intégralité du fichier. Ainsi, si vous configurez une synchronisation régulière dans le temps, il vous suffit de faire une copie complète la première fois. À partir de la prochaine fois, 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 à recopier l’intégralité du fichier, cela réduit la consommation 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 bat également scp dans le nombre d’options de ligne de commande. Cela signifie que vous pouvez affiner rsync plus que scp.
En conclusion, rsync est un excellent outil de synchronisation incrémentale. 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. Cependant, pour les tâches récurrentes, utilisez rsync.
Syntaxe de la commande rsync
La commande rsync est la suivante :
Ici, les termes sont définis ci-dessous :
- OPTION – Ce sont les options rsync
- SOURCE – Répertoire des sources
- DEST – Répertoire de destination
- USER – Nom d’utilisateur distant
- HOST – Nom d’hôte ou adresse IP distant
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. Au lieu de cela, vous pouvez utiliser l’option -a, qui exécute la commande en mode archive, garantissant que la propriété, l’autorisation et les liens symboliques de tous les fichiers sont conservés lors de la copie.
Les autres options de rsync incluent :
- -z : compresser les données pour économiser de l’espace
- -h : fournit une sortie au format 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 : demander à rsync d’afficher une sortie détaillée
- –n : effectuer un essai à blanc pour tester les paramètres et configurer la synchronisation des données
- -q : supprime 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 votre système n’a pas rsync, vous pouvez l’installer en utilisant la ou les commandes suivantes.
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 avons Linux Mint, rsync est pré-installé. Vous pouvez donc exécuter la commande rsync dans le terminal pour voir si elle est installée. Il expliquera ses capacités, ses options et d’autres informations vitales s’il est présent.
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 rsync en action avec différents cas d’utilisation.
Pour le tutoriel, nous allons créer deux répertoires.
- répertoire-source
- dest-répertoire
Pour cela, vous devez taper les commandes suivantes.
mkdir source-directory mkdir dest-directory
De plus, nous devrons générer des fichiers pour faire fonctionner rsync. Créons donc 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 en entrant 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
Remarque : nous avons laissé le répertoire dest vide.
Copier les répertoires localement de manière récursive
Même si rsync vise principalement à copier des fichiers entre un serveur local et distant, il est également utile pour copier des fichiers localement.
Dans ce cas, nous utiliserons la syntaxe rsync suivante.
option rsync SOURCE DESTINATION
Copiez les fichiers de notre répertoire source dans 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 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 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, tapez 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
Maintenant, 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
Copier plusieurs fichiers
Si vous avez l’intention de copier plusieurs fichiers, vous devez mentionner les chemins source des deux fichiers, suivis du répertoire cible.
Pour cela, nous allons créer deux nouveaux fichiers : newfile2 et newfile3, dans le répertoire source. Exécutez 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 $
Copier un fichier ou un répertoire 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 pour que cela fonctionne. 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 demandera le mot de passe. Entrez-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 /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 répertorier les fichiers ou les chemins de répertoire. 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 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 -e ssh à la commande rsync.
rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Copie d’un fichier ou d’un répertoire de distant vers local
La syntaxe rsync pour le transfert local vers distant est la suivante.
sync option [email protected]:SRC DEST
Cela agit comme une demande d’extraction. Ainsi, pour obtenir les fichiers/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 local à distant, 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
C’est une bonne idée de voir la progression en direct pour les sauvegardes de données plus volumineuses. Pour cela, vous devez utiliser l’indicateur –progress. Ajoutez-le à 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: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Supprimer les fichiers source une fois le transfert terminé
Vous pouvez utiliser l’indicateur -remove-source-files pour supprimer les fichiers source après le transfert complet. Cela peut vous aider dans de nombreux scénarios, notamment lorsqu’il s’agit de sécuriser vos fichiers sans laisser de trace ou simplement de les utiliser 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
rsync essai à blanc
Rysnc vous permet également d’évaluer avant de faire une course réelle. La simulation 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 simulation. Ajoutez-le à la commande, suivi 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 à la façon dont nous l’avons exécutée auparavant. Cependant, vous remarquerez une mention de (DRY RUN) à la fin de la sortie.
Définir la taille de fichier minimale et maximale
Rysnc vous permet également de définir la taille de fichier minimale ou maximale pendant le transfert.
Donc, 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: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
La commande ne copiera que les fichiers d’une taille de fichier minimale de 15 Ko. Si la taille du fichier est inférieure, il l’ignorera.
De même, vous pouvez utiliser l’indicateur –max-size pour définir la taille de fichier 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 au-dessus de la taille de 450K.
Définir la limite de bande passante
Si vous effectuez d’autres tâches gourmandes en bande passante, vous pouvez configurer rysnc pour définir la limite de bande passante pour le transfert. Pour ce faire, utilisez 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 fixons la bande passante à 100Kb/s pendant le transfert.
Derniers mots
Cela nous amène à la fin de notre guide de commande rsync. Nous avons appris à utiliser rysnc et couvert efficacement de nombreuses commandes.
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 couverts.
Ensuite, consultez les feuilles de triche de la ligne de commande pour Windows, Linux et macOS.