Introduction
Rsync, qui signifie « synchro à distance », est un outil de synchronisation de fichiers locaux et distants. Il utilise un algorithme qui minimise la quantité de données copiées en ne déplaçant que les portions de fichiers qui ont été modifiées.
Dans ce guide, nous couvrirons l’utilisation de base de ce puissant utilitaire.
Qu’est-ce que Rsync ?
Rsync est un outil de synchronisation très flexible activé par le réseau. En raison de son omniprésence sur Linux et les systèmes de type Unix et de sa popularité en tant qu’outil pour les scripts système, il est inclus par défaut sur la plupart des distributions Linux.
Syntaxe de base
La syntaxe de base de rsync
est très simple, et fonctionne d’une manière similaire à ssh, scp et cp.
Nous allons créer deux répertoires de test et quelques fichiers de test avec les commandes suivantes :
- cd ~
- mkdir dir1
- mkdir dir2
- touch dir1/file{1..100}
Nous avons maintenant un répertoire appelé dir1
avec 100 fichiers vides dedans.
- ls dir1
Outputfile1 file18 file27 file36 file45 file54 file63 file72 file81 file90file10 file19 file28 file37 file46 file55 file64 file73 file82 file91file100 file2 file29 file38 file47 file56 file65 file74 file83 file92file11 file20 file3 file39 file48 file57 file66 file75 file84 file93file12 file21 file30 file4 file49 file58 file67 file76 file85 file94file13 file22 file31 file40 file5 file59 file68 file77 file86 file95file14 file23 file32 file41 file50 file6 file69 file78 file87 file96file15 file24 file33 file42 file51 file60 file7 file79 file88 file97file16 file25 file34 file43 file52 file61 file70 file8 file89 file98file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Nous avons également un répertoire vide appelé dir2
.
Pour synchroniser le contenu de dir1
à dir2
sur le même système, tapez :
- rsync -r dir1/ dir2
L’option -r
signifie récursif, ce qui est nécessaire pour la synchronisation des répertoires.
Nous pourrions également utiliser le drapeau -a
à la place:
- rsync -a dir1/ dir2
L’option -a
est un drapeau combiné. Elle signifie « archive » et se synchronise de manière récursive et préserve les liens symboliques, les fichiers spéciaux et de périphérique, les heures de modification, le groupe, le propriétaire et les permissions. Elle est plus couramment utilisée que -r
et est généralement ce que vous voulez utiliser.
Une note importante
Vous avez peut-être remarqué qu’il y a une barre oblique de queue (/
) à la fin du premier argument dans les commandes ci-dessus :
- rsync -a dir1/ dir2
Ceci est nécessaire pour signifier « le contenu de dir1
« . L’alternative, sans la barre oblique de fin, placerait dir1
, y compris le répertoire, dans dir2
. Cela créerait une hiérarchie qui ressemblerait à :
- ~/dir2/dir1/
Toujours vérifier deux fois vos arguments avant d’exécuter une commande rsync. Rsync fournit une méthode pour le faire en passant les options -n
ou --dry-run
. Le drapeau -v
(pour verbeux) est également nécessaire pour obtenir la sortie appropriée:
- rsync -anv dir1/ dir2
Outputsending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .
Comparez cette sortie à celle que nous obtenons lorsque nous retirons la barre oblique de fin:
- rsync -anv dir1 dir2
Outputsending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .
Vous pouvez voir ici que le répertoire lui-même est transféré.
Comment utiliser Rsync pour se synchroniser avec un système distant
La synchronisation avec un système distant est triviale si vous avez un accès SSH à la machine distante et rsync
installé des deux côtés. Une fois que vous avez vérifié l’accès SSH entre les deux machines, vous pouvez synchroniser le dossier dir1
de plus tôt vers un ordinateur distant en utilisant cette syntaxe (notez que nous voulons transférer le répertoire réel dans ce cas, donc nous omettons la barre oblique de fin):
- rsync -a ~/dir1 username@remote_host:destination_directory
Cette opération est appelée « push » car elle pousse un répertoire du système local vers un système distant. L’opération inverse est appelée « pull ». Elle est utilisée pour synchroniser un répertoire distant vers le système local. Si le dir1
était sur le système distant au lieu de notre système local, la syntaxe serait :
- rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
Comme cp
et les outils similaires, la source est toujours le premier argument, et la destination est toujours le second.
Options utiles pour Rsync
Rsync fournit de nombreuses options pour modifier le comportement par défaut de l’utilitaire. Nous avons déjà discuté de certains des drapeaux les plus nécessaires.
Si vous transférez des fichiers qui n’ont pas déjà été compressés, comme des fichiers texte, vous pouvez réduire le transfert réseau en ajoutant la compression avec l’option -z
:
- rsync -az source destination
Le drapeau -P
est très utile. Il combine les drapeaux --progress
et --partial
. Le premier vous donne une barre de progression pour les transferts et le second vous permet de reprendre les transferts interrompus:
- rsync -azP source destination
Outputsending incremental file list./file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)file100 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)file11 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101). . .
Si nous exécutons à nouveau la commande, nous obtiendrons une sortie plus courte, car aucun changement n’a été effectué. Cela illustre la capacité de rsync à utiliser les temps de modification pour déterminer si des changements ont été effectués.
- rsync -azP source destination
Outputsending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00
Nous pouvons mettre à jour le temps de modification sur certains des fichiers et voir que rsync ne recopie intelligemment que les fichiers modifiés:
- touch dir1/file{1..10}
- rsync -azP source destination
Outputsending incremental file listfile1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101). . .
Pour que deux répertoires soient vraiment synchronisés, il est nécessaire de supprimer les fichiers du répertoire de destination s’ils sont supprimés du répertoire source. Par défaut, rsync ne supprime rien du répertoire de destination.
Nous pouvons modifier ce comportement avec l’option --delete
. Avant d’utiliser cette option, utilisez l’option --dry-run
et faites des tests pour éviter la perte de données :
- rsync -a --delete source destination
Si vous souhaitez exclure certains fichiers ou répertoires situés à l’intérieur d’un répertoire que vous synchronisez, vous pouvez le faire en les spécifiant dans une liste séparée par des virgules à la suite de l’option --exclude=
:
- rsync -a --exclude=pattern_to_exclude source destination
Si nous avons spécifié un motif à exclure, nous pouvons remplacer cette exclusion pour les fichiers qui correspondent à un motif différent en utilisant l’option --include=
.
- rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
Enfin, l’option --backup
de rsync peut être utilisée pour stocker des sauvegardes de fichiers importants. Elle est utilisée conjointement avec l’option --backup-dir
, qui spécifie le répertoire où les fichiers de sauvegarde doivent être stockés.
- rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
Conclusion
Rsync peut simplifier les transferts de fichiers sur les connexions en réseau et ajouter de la robustesse à la synchronisation des répertoires locaux. La flexibilité de rsync en fait une bonne option pour de nombreuses opérations différentes au niveau des fichiers.
Une maîtrise de rsync vous permet de concevoir des opérations de sauvegarde complexes et d’obtenir un contrôle fin de ce qui est transféré et comment.