GNU/Linux >> Tutoriels Linux >  >> Linux

Exemples pratiques de la commande rsync sous Linux

Rsync (Remote Sync) est un outil de synchronisation pour copier des fichiers et des répertoires dans un système ou entre des systèmes. Le plus grand avantage de rsync est qu'il ne copie que les fichiers modifiés et réduit ainsi la consommation du processeur et économise la bande passante et le temps lors de la copie des fichiers.

Avantages de rsync par rapport à scp

Je vous ai déjà montré quelques exemples pratiques de la commande scp. scp, abréviation de copie sécurisée, est également utilisé pour copier des fichiers entre deux systèmes distants via ssh.

Mais rsync présente certains avantages par rapport à scp qui en font un meilleur choix.

  • rsync copie uniquement les fichiers modifiés tandis que scp copie chaque fichier et les écrase si nécessaire. Ainsi, une meilleure vitesse est garantie dans rsync.
  • rsync peut également fonctionner sans cryptage. Cela peut réduire les frais généraux. Mais cela doit être pris en compte lorsqu'il n'y a aucun risque de sécurité lié au transfert sans chiffrement.
  • On peut reprendre un transfert incomplet dans rsync alors que scp ne le permet pas.

Si vous n'avez pas rsync installé, vous pouvez l'installer à l'aide de votre gestionnaire de packages.

Dans Ubuntu et Debian, vous pouvez installer rsync avec la commande suivante.

sudo apt install rsync

Exemples pratiques de la commande rsync sous Linux

Le rsync la commande a la structure suivante

rsync [OPTIONS] Source Destination

source et destination peuvent être des chemins locaux ou des chemins distants au format [email protected]:path/to/file

Voyons comment utiliser la commande rsync avec quelques exemples utiles.

🗒️Si vous avez un répertoire A, utilisez "A" pour le mentionner et non "A/". L'utilisation de A/ fera référence à tous les fichiers du répertoire A et non au répertoire A lui-même. Ainsi, copier A créera un nouveau répertoire dans la destination, puis copiera les fichiers dans A. Mais copier A/ ne copiera que les fichiers dans A dans la destination.

1. Synchroniser les fichiers locaux [Synchronisation unidirectionnelle]

Pour copier des fichiers locaux à partir du répertoire A dans Backup-A-dir ,

rsync A/ Backup-A-dir/

Cette commande copie les fichiers (si des modifications ont été trouvées) du répertoire A dans Backup-A-dir. Cela ne copiera aucun fichier supplémentaire dans Backup-A-dir dans A qui ne se trouve pas initialement dans A. C'est pourquoi on parle de synchronisation unidirectionnelle.

2. Synchroniser les fichiers distants [Synchronisation unidirectionnelle]

Pour synchroniser des fichiers entre un système distant et un système local, la commande est similaire. Notez que l'emplacement source et l'emplacement de destination peuvent être soit des chemins d'accès au système de fichiers local, soit des chemins d'accès au système distant (ssh).

rsync dev/build [email protected]:~/Backup

3. Synchronisation bidirectionnelle

La commande ci-dessus copie les fichiers de la source vers la destination. Mais si le système avait des fichiers supplémentaires qui n'étaient pas sur la source, ceux-ci ne seront pas supprimés par la synchronisation unidirectionnelle. Si vous le souhaitez, vous devrez utiliser la synchronisation bidirectionnelle.

Pour maintenir les deux points de terminaison (répertoires ou fichiers) dans le même état avec les mêmes fichiers et aucun extra de chaque côté, ajoutez simplement le –delete option à la commande d'origine.

rsync A/ Backup-A-dir/ --delete

4. Supprimer les fichiers source après la copie

Si vous devez supprimer les fichiers dans la source une fois le transfert terminé, –remove-source-files l'option devrait être utile.

rsync A/ Backup-A-dir/ --remove-source-files

Vous devez être prudent avec la commande ci-dessus. Vous ne devez supprimer la source que si suffisamment de copies sont faites et que les données ne sont plus nécessaires dans la source.

5. Inclure et exclure des fichiers

Si vous avez besoin (ou pas besoin) de transférer des fichiers dont le nom correspond à un modèle,
–inclure et –exclure option peut être utilisée. Chaque option doit recevoir un modèle après le signe "=".

rsync A/ Backup-A-dir/ --include=*.py --exclude=*.tmp.py

La commande ci-dessus copie tous les fichiers avec l'extension .py sauf pour ceux avec une extension .tmp.py.

Vous pouvez utiliser une expression régulière comme modèle. En savoir plus ici.

Astuce :si la liste des modèles pour l'une ou l'autre des options est énorme, vous pouvez la stocker dans un fichier et vous pouvez transmettre leurs noms à la balise –include-from et –exclure-de option.

6. rsync sur SSH

Si vous souhaitez transférer les fichiers via SSH, vous devez spécifier ssh avec -e option.

rsync -e ssh A/ [email protected]:~/Backup-A-dir/

C'est le moyen le plus préféré de transférer des fichiers vers un système distant car il est crypté. Il convient de noter qu'il y aura une surcharge impliquée en raison du cryptage. Cela peut donc prendre plus de temps qu'un transfert normal.

Pour que cela fonctionne, vous devez activer les connexions ssh configurées côté serveur. La clé publique et la clé privée doivent également se trouver dans leurs chemins respectifs.

Pour en savoir plus sur ssh et sa configuration, lisez ces articles LinuxHandBook sur la configuration SSH côté client et la configuration SSH côté serveur.

7. Mode verbeux

La plupart des commandes sous Linux ont une option détaillée pour enregistrer l'action de la commande dans le terminal. rsync ne fait pas exception.

Passez soit -v option ou —verbeux option pour expliquer la commande. Il listera les actions en cours et leur avancement. Cela sera très utile lors du débogage.

rsync A/ Backup-A-dir/ -v -r

La sortie sera similaire à celle ci-dessous

$ rsync A/ Backup-A-dir/ -v -r
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 388 bytes received 168 bytes 1,112.00 bytes/sec
total size is 0 speedup is 0.00

8. Dry Run - Exécutez mais ne copiez pas

Au cas où vous voudriez connaître les fichiers qui vont être copiés sans effectuer le transfert, vous pouvez utiliser –dry-run ( ou -n ).

Il fait toutes les opérations comme le rsync normal commande le fait sauf pour la partie copie. Il listera les fichiers qui seront copiés ou supprimés (si nécessaire) puis il s'arrêtera juste avant la copie.

rsync -v A/ Backup-A-dir/ --dry-run

Ce qui entraînera

$ rsync -v A/ Backup-A-dir/ –dry-run
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 172 bytes received 72 bytes 488.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)

Notez que vous devez utiliser -v option pour voir la sortie ci-dessus de la commande de simulation. Si ce n'est pas le cas, le test aura lieu, mais il n'affichera pas les résultats.

9. Afficher la progression du transfert

Si vous souhaitez afficher la progression du transfert, utilisez le –progress option.

rsync A/ Backup-A-dir/ --progress

La commande ci-dessus affichera une barre de progression similaire à celle ci-dessous :

$ rsync -r A/ Backup-A-dir/ –progress
sending incremental file list
created directory Backup-A-dir
./
file1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=5/7)
file2.txt 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=4/7)
file3.txt 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=3/7)
file4.txt 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=2/7)
file5.txt 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=1/7)
file6.txt 0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=0/7)

10. Compresser et transférer des données

Si vous souhaitez économiser de la bande passante réseau et du temps, vous pouvez compresser les données à transférer en utilisant -z option. Il sera décompressé automatiquement dans la destination.

Cette astuce peut économiser beaucoup de temps et d'argent sur le réseau lorsque les données à transférer sont énormes. Il doit être évité pour les petits fichiers car la surcharge de traitement dépasse le temps total.

rsync -z A/ Backup-A-dir/
Notez qu'il faut éviter d'utiliser -z option tout en effectuant des transferts locaux et de petits fichiers. Cela ralentira les choses inutilement.

11. Copier récursivement les fichiers et répertoires

Toutes les commandes ci-dessus ne copient que des fichiers, pas des sous-répertoires (le même cas avec chaque commande Linux). Par conséquent, les fichiers à l'intérieur de ces sous-répertoires ne sont pas copiés. Cela peut être éliminé par copie récursive.

Pour copier récursivement les fichiers et répertoires, -r option peut être utilisée.

rsync -r A/ Backup-A-dir/

12. Archiver et conserver les métadonnées

Si vous souhaitez conserver les liens symboliques, les horodatages, les autorisations de fichiers, la propriété des utilisateurs et des groupes des fichiers, -a option peut être utilisée.

rsync -a A/ Backup-A-dir/

Cette option inclut également la fonctionnalité de -r option. Ainsi, il copie récursivement les fichiers et préserve les métadonnées des fichiers copiés.

13. Définir la limite de taille de fichier

Pour éviter de transférer les fichiers volumineux, vous pouvez définir une limite de taille de fichier à l'aide de –max-size option. Cela vous aide à garder un contrôle sur la taille du fichier qui sera copié.

rsync --max-size='100K' A/ Backup-A-dir/ 

14. Définir la limite de bande passante

Si vous avez des contraintes sur les vitesses du réseau, vous pouvez les spécifier à l'aide de –bwlimit option. bwlimit doit être exprimé en kbps .

rsync --bwlimit=100 A/ Backup-A-dir/

15. Reprendre le téléchargement avec rsync

Si le téléchargement/transfert est incomplet, vous pouvez utiliser la commande rsync pour conserver les téléchargements incomplets afin que le transfert puisse reprendre la prochaine fois que la même commande sera émise.

Pour reprendre le transfert, –append option peut être utilisée.

rsync --append A /Backup-A-dir/

Ce fil StackExchange est une très bonne ressource pour en savoir plus sur ce sujet.

Toutes les commandes ci-dessus sont basiques et copient le fichier dans un seul flux ou un processus. S'il y a 5 To de données et que le transfert de 1 To prend 2 heures, l'ensemble du transfert durera 10 heures. Mais il existe un autre moyen d'accélérer le transfert

Astuce bonus :Accélérez Rsync / Transfert parallèle

parallèle est un utilitaire GNU utilisé pour exécuter des tâches en parallèle. Rsync peut être facilement couplé avec rsync .

Installez GNU parallèle dans le système Ubuntu/Debian en utilisant

sudo apt install parallel

Avant d'aller plus loin, comprenons comment fonctionne le parallèle. Considérons une analogie.

Supposons qu'il y ait 1000 œufs et 100 paniers chacun avec un drone. La tâche est de le livrer aux clients. Le gestionnaire attribue à chaque panier 10 œufs et ordonne au drone de livrer. Chaque drone effectue une opération (dans notre cas, processus rsync de 10 fichiers). Le gestionnaire supervise tous les drones. Notez que les drones ne sauront jamais qu'il y a d'autres travaux en parallèle. Seul le gestionnaire le fait.

De même, rsync exécute le transfert de fichiers comme un drone. parallèle agit en tant que gestionnaire.

parallèle divise les fichiers à envoyer et génère un nombre spécifié de processus rsync chacun avec une liste de fichiers différente. parallèle gère simplement tout le processus. rsync n'a aucune connaissance d'autres processus en parallèle ni de fonctionnalité de transfert parallèle. Parallel fournit un transfert parallèle en regroupant les tâches.

Ainsi, la commande parallèle se compose de deux parties qui sont canalisées. L'un est les arguments (oeufs/fichiers) et l'autre est la commande parallèle (gestionnaire).

ls A/* | parallel -j 20 rsync A/{} /Backup-A-dir/

Dans la commande ci-dessus, chaque fichier/répertoire en sortie à la suite de la première commande avant le symbole '|' agit comme un argument. {} représente l'argument de gauche dans la commande parallèle.

-j n – Il est utilisé pour définir n nombre d'emplois ou de travailleurs. Dans notre cas, n vaut 20.
la partie suivante est la commande rsync habituelle pour chaque argument.
Une fois les commandes générées, elles seront regroupées en 20 processus et elles seront exécutées en parallèle.

Notez que vous pouvez ajouter n'importe quelle option à la commande rsync ci-dessus comme vous le feriez sans parallèle. Ajoutez simplement les options rsync (comme -z,-a,-e ssh) après le mot rsync dans la commande ci-dessus.

Si vous voulez en savoir plus sur le parallèle, consultez cette page.

Erreurs courantes avec rsync

Vous pouvez rencontrer des erreurs lors de l'utilisation de rsync. Vous trouverez ci-dessous quelques exemples courants ainsi que leurs conseils de dépannage.

1. autorisation rsync refusée

Il s'agit d'une erreur qui peut se produire lorsque vous utilisez des chemins pour lesquels vous ne disposez pas des droits appropriés. Par exemple :

rsync B/ /home/

La commande ci-dessus provoquera une erreur d'autorisation refusée, si vous n'avez pas les autorisations d'écriture sur /home/ (les utilisateurs normaux ne le font généralement pas)

2. rsync n'a pas réussi à définir les heures sur

Cela se produit lorsque le système de fichiers ne peut pas gérer les heures de modification des fichiers et des répertoires. Vous pouvez en savoir plus à ce sujet sur cette page.

J'espère que vous avez appris quelques bons exemples de commande de synchronisation dans cet article. Si vous avez des suggestions ou des commentaires, n'hésitez pas à les déposer ci-dessous.


Linux
  1. Commande cp sous Linux :7 exemples pratiques

  2. Commande d'arrêt de Linux :5 exemples pratiques

  3. Exemples pratiques de la commande Unzip sous Linux

  4. 5 exemples pratiques de la commande dd sous Linux

  5. Commande Linux rsync avec des exemples pratiques

12 exemples pratiques d'In Command sous Linux

15 exemples pratiques de commande Rsync sous Linux

5 exemples pratiques de la commande Tail sous Linux

commande echo sous Linux :7 exemples pratiques

Exemples de commandes Linux rsync

Commande Ping pratique dans des exemples Linux