rsync ou la synchronisation à distance est un utilitaire logiciel pour les systèmes de type Unix qui synchronise efficacement les fichiers et les répertoires entre deux hôtes ou machines. L'un est la source ou l'hôte local à partir duquel les fichiers seront synchronisés, l'autre est l'hôte distant sur lequel la synchronisation aura lieu. Il existe essentiellement deux manières de rsync peut copier/synchroniser les données :
- Copie/synchronisation vers/depuis un autre hôte sur n'importe quel shell distant comme chut , rsh .
- Copie/synchronisation via le démon rsync à l'aide de TCP.
Rsync est célèbre pour son algorithme de transfert delta , dans lequel il copie uniquement les différences entre les fichiers source présents dans l'hôte local et les fichiers existants dans la destination ou l'hôte distant.
Exemple:
rsync local-file user@remote-host:remote-file>
Que se passe t-il ici:
Rsync utilisera d'abord SSH pour se connecter en tant queuser>sur l'hôte distant et demanderauser's>mot de passe. Une fois connecté, il invoquera le rsync de l'hôte distant, puis les deux programmes détermineront quelles parties du fichier local doivent être copiées afin que le fichier distant corresponde au fichier local. Veuillez noter le comportement suivant de rsync :
- Les fichiers qui n'existent pas sur l'hôte distant sont copiés.
- Les fichiers qui ont été mis à jour seront synchronisés, rsync copiera uniquement les parties modifiées des fichiers sur l'hôte distant.
- les fichiers exactement identiques ne sont pas copiés sur l’hôte distant.
Syntaxe de la commande `rsync` sous Linux
rsync [options] source [destination]>
Option disponible dans la commande `rsync` sous Linux
| Possibilités | Description |
|---|---|
| une, –archive | Cela équivaut à utiliser -rlptgoD . Le mode Archive inclut toutes les options nécessaires, telles que la copie récursive de fichiers, en préservant presque tout (comme les liens symboliques, les autorisations de fichiers, la propriété des utilisateurs et des groupes et les horodatages). |
| -v, –verbeux | Par défaut, rsync fonctionne silencieusement. L'utilisation d'une seule option -v fournit des informations sur les fichiers transférés et un résumé à la fin. L'ajout de deux options -v donne des mises à jour de l'état sur la transmission delta et les fichiers ignorés, ainsi que plus d'informations à la fin. Plusieurs options -v sont généralement utilisées pour déboguer rsync. Terminal Linux Kali |
| -h, –format lisible par l'homme | Sorties dans un format lisible par l’homme. |
| -z, –compresser | Compresser les données du fichier pendant le transfert |
Exemples
Utiliser `rsync` comme commande de liste
Si seul le chemin source est spécifié, le contenu de la source est répertorié dans un format de sortie similaire àls -l>.
rsync foo/>
La commande ci-dessus listera les fichiers et répertoires présents dans le répertoire foo .
Sortir:
Copier/Synchroniser les fichiers et le répertoire localement
Si ni le chemin source ni le chemin de destination ne spécifient un hôte distant, les commandes rsync se comportent comme une commande de copie.
rsync -avh foo/ bar/>
La commande ci-dessus copiera/synchronisera tous les fichiers et répertoires présents dans le répertoirefoo>vers le répertoire bar . Si le répertoire de destination n'est pas présent (icibar>), rsync en crée automatiquement un et copie toutes les données qu'il contient.
Sortir:
Rsync en utilisant ssh
Il existe deux manières différentes pour rsync de contacter un système distant :
- Utiliser un programme shell distant comme moyen de transport (tel que
ssh>(Secure Shell) oursh>(Coque distante)). - Contacter un démon rsync directement via TCP.
Ici, nous discuterons de rsync sur ssh.
rsync -avhze ssh /foo user@remote-host:/tmp/>
Pour préciser le type de protocole à utiliser,-e>est utilisée.
Sortir:
Rsync avec des autorisations de fichiers particulières
Si nous voulons synchroniser des fichiers avec l'hôte local ou distant avec les autorisations des fichiers en cours de modification. La commande suivante doit être utilisée.
qu'est-ce qu'une pile en Java
rsync -avhe ssh --chown=USER:GROUP /foo user@remote-host:/tmp/>
La commande ci-dessus synchronisera tous les fichiers présents dans le répertoire /foo avec les fichiers présents dans le répertoire /tmp dans leremote-host>avec tous les fichiers appartenant à USER avec le groupe GROUP.
Sortir:
Note: Leuser>etgroup>doit déjà être créé dans l'hôte distant.
Rsynchroniser avec --ignore-existing-files>
Nous pouvons également ignorer les fichiers déjà existants sur la destination. Cela peut généralement être utilisé lorsque nous effectuons des sauvegardes à l'aide du –lien-dest option, tout en poursuivant une exécution de sauvegarde interrompue.
rsync --ignore-existing -avhe /foo user@remote-host:/tmp/>
Ainsi, tous les fichiers qui n'existent pas sur la destination seront copiés. Ici, j'ai supprimé legeeksforgeeks>dossier du répertoirefoo>, il ne devrait donc copier que legeeksforgeeks>annuaire.
Note: Cela n'ignore pas les répertoires existants, sinon rien ne sera fait. Même s'il y a des modifications dans un fichier sur l'hôte local, il ne sera toujours pas synchronisé s'il est présent sur l'hôte distant.
Sortir:
Afficher la progression pendant le transfert
Pour afficher la progression du transfert des données de l'hôte local vers l'hôte distant, nous pouvons utiliser-–progress>option.
rsync -avhe ssh --progress /foo user@remote-host:/tmp/>
Lorsque le transfert est terminé pour un fichier particulier, rsync génère une ligne récapitulative comme indiqué ci-dessous.
Sortir:
Dans l'image ci-dessus, si l'on regarde le fichier/foo/file2>, cela nous dit que
- Le fichier faisait 44 octets au total.
- Le taux de transfert moyen pour l'ensemble du fichier était de 42,97 kilo-octets par seconde sur les 0:00:00 secondes nécessaires à son exécution.
- C'était le deuxième transfert au cours de l'actuel rsync session.
- Il reste 10 fichiers supplémentaires que l'hôte distant doit vérifier (pour voir s'ils sont à jour ou non) sur les 13 fichiers au total dans la liste de fichiers.
Si nous voulons copier des fichiers sur l'hôte distant qui ont été mis à jour plus récemment sur le système de fichiers local. C'est fait avec -mise à jour drapeau. Le comportement est maintenant le suivant :
- Les fichiers qui n'existent pas sur l'hôte distant sont copiés.
- Les fichiers qui existent à la fois en local et à distance mais qui ont un horodatage plus récent sur l'hôte local sont copiés sur l'hôte distant. (À l’inverse, les fichiers dont l’horodatage est plus ancien ne sont pas copiés).
Ici, j'ai fait quelques modifications dans fichier1 et fichier2 , mais les changements dans fichier2 ont été réalisés récemment. Alors seulement fichier2 sera synchronisé.
rsync -avhe ssh --progress --update /foo root@remote-host:/tmp/>
Sortir: 
Supprimer automatiquement les fichiers de l'hôte local après un transfert réussi
Maintenant, supposons que nous ayons un serveur Web et un serveur de sauvegarde et que nous ayons créé une sauvegarde quotidienne et l'avons synchronisée avec notre serveur de sauvegarde, et que nous ne souhaitons pas conserver la copie locale de la sauvegarde sur notre serveur Web. Ainsi, au lieu de le supprimer manuellement après un transfert réussi, nous pouvons utiliser le--remove-source-files>drapeau pour supprimer automatiquement les fichiers du serveur Web.
rsync -avhe ssh --remove-source-files /foo user@backup-server:/tmp>
Sortir:
Note: Cela supprimera uniquement les fichiers et non les répertoires.
Supprimez les fichiers qui ont été supprimés sur l'hôte local
Si certains fichiers sont supprimés sur l'hôte local et que nous souhaitons qu'ils soient également mis à jour sur l'hôte distant, nous devons alors utiliser le--delete>option.
nuage de printemps
rsync -avhe ssh /foo --delete user@remote-host:/tmp/>
Sortir:
Alors, ici fichier1 , fichier2 , fichier3 ont été supprimés sur l'hôte local et, comme on peut le voir, sont également mis à jour sur l'hôte distant.
Remarque : ` rsync` ne supprime pas automatiquement les fichiers pour synchroniser les répertoires présents des deux côtés.
Effectuer un essai à sec avec `rsync`
Une exécution à sec oblige `rsync` à effectuer une exécution d'essai qui n'apporte aucune modification et affiche presque le même résultat qu'une exécution réelle. Il est généralement utilisé avec les options -v, –verbose et/ou -i, –itemize-changes afin de voir ce qu'une commande `rsync` ferait avant de l'exécuter réellement.
rsync -avhe ssh --dry-run --chown=USER:GROUP /foo user@remote-host:/>
Sortir:
Conclusion
Dans cet article, nous avons discuté de la commande rsync sous Linux, qui est un outil polyvalent et puissant pour synchroniser des fichiers et des répertoires entre des hôtes ou des machines. Avec son algorithme de transfert delta et ses diverses options, il offre une synchronisation efficace des données, des capacités de sauvegarde et une gestion des transferts de fichiers. En maîtrisant la commande rsync, les utilisateurs de Linux peuvent garantir la cohérence des fichiers, optimiser la transmission des données et rationaliser leurs flux de travail de gestion des données.