GNU/Linux >> Tutoriels Linux >  >> Linux

Exemples Rsync pour transférer des fichiers sous Linux

Sur le système d'exploitation Linux, le 'rsync' signifie R émoticône S ync. C'est un utilitaire utilisé pour synchroniser (copier) des fichiers et des répertoires d'une source (SRC) vers une destination (DEST).

Les fichiers et répertoires peuvent être synchronisés sur un hôte local ou vers/depuis un hôte distant. Sur le SRC, les fichiers et répertoires seront synchronisés. Alors que, sur le DEST, les fichiers et répertoires synchronisés auront lieu.

De plus, la commande rsync peut copier de manière récursive des fichiers et des répertoires, copier des liens symboliques, préserver (autorisations, groupe, heure de modification et propriété) l'identité des fichiers.

Rsync peut utiliser deux manières différentes pour synchroniser/copier des fichiers ou des répertoires :

  • Utiliser le shell distant :ssh ou rsh
  • Utiliser le démon rsync directement via TCP

De plus, rsync utilise un algorithme de transfert delta qui copie/synchronise uniquement les différentes données entre SRC et DEST.

Ce tutoriel passera en revue de nombreuses façons d'utiliser la commande rsync à travers des pratiques pratiques et des exemples. Nous expliquerons également le détail des options les plus courantes de la commande rsync.

Syntaxe de la commande Rsync

Avant d'approfondir les manières d'utiliser la commande rsync, examinons sa syntaxe :

rsync [options] <SRC_PATH> <DEST_PATH>

1. Copier/synchroniser le fichier sur la machine locale

La commande Rsync peut être utilisée pour copier/synchroniser le fichier sur votre machine locale.

En supposant que vous souhaitiez copier un fichier du répertoire personnel de l'utilisateur 'linoxide' nommé '/home/linoxide' vers le dossier '/opt/test'.

$ sudo rsync -zvh /home/linoxide/computer-networking.pdf /opt/test/
computer-networking.pdf

sent 1.01K bytes  received 35 bytes  2.10K bytes/sec
total size is 3.03K  speedup is 2.89

Où :

-z :compresser

-v :verbeux la sortie

-h :lisible par l'homme

2. Copier/Synchroniser le répertoire sur la machine locale

Pour transférer tous les fichiers du répertoire local SRC vers le répertoire DEST, exécutez la commande rsync avec l'option -zavh .

En supposant que vous souhaitiez copier le répertoire personnel de l'utilisateur 'linoxide' nommé '/home/linoxide' dans le dossier '/opt/backup'.

$ sudo rsync -zavh /home/linoxide/ /opt/backup/

sending incremental file list
./
.bash_history
.bash_logout
.bashrc
.lesshst
.profile
.sudo_as_admin_successful
.viminfo
computer-networking.pdf
.ssh/
.ssh/known_hosts

sent 4.85K bytes  received 198 bytes  10.10K bytes/sec
total size is 9.59K  speedup is 1.90

Où :

-a :archiver les données pendant le processus de copie/synchronisation

Vous pouvez vérifier si la commande rsync a réussi ou non ? Exécutez la commande ci-dessous :

$ ls /opt/backup/ -la
total 40
drwxr-xr-x 3 linoxide linoxide 4096 Thg 6 15 16:02 .
drwxr-xr-x 4 root     root     4096 Thg 6 15 16:25 ..
-rw------- 1 linoxide linoxide  817 Thg 6 15 16:01 .bash_history
-rw-r--r-- 1 linoxide linoxide  220 Thg 6 11 15:58 .bash_logout
-rw-r--r-- 1 linoxide linoxide 3771 Thg 6 11 15:58 .bashrc
-rw-rw-r-- 1 linoxide linoxide 3028 Thg 2 25  2017 computer-networking.pdf
-rw------- 1 linoxide linoxide   40 Thg 6 15 15:51 .lesshst
-rw-r--r-- 1 linoxide linoxide  807 Thg 6 11 15:58 .profile
drwx------ 2 linoxide linoxide 4096 Thg 6 13 17:58 .ssh
-rw-r--r-- 1 linoxide linoxide    0 Thg 6 15 16:02 .sudo_as_admin_successful
-rw------- 1 linoxide linoxide  680 Thg 6 14 16:50 .viminfo

3. Rsync sur ssh avec un port spécifique

Vous pouvez utiliser ssh (shell sécurisé) pour copier/synchroniser les données, vos données seront transférées dans une connexion sécurisée avec cryptage. Personne ne peut lire vos données pendant leur transfert sur Internet. Lorsque vous utilisez la commande rsync, vous devez fournir le mot de passe utilisateur/racine pour accomplir la tâche particulière. L'utilisation de l'option SSH enverra vos identifiants de manière cryptée afin que votre mot de passe soit sécurisé.

Copiez un fichier d'un distant vers un local avec un port ssh spécifique. Afin de spécifier un protocole avec la commande rsync, vous devez utiliser -e option avec le nom du protocole que vous souhaitez utiliser.

Par exemple, la commande rsync suivante copiera le fichier "deploy.yaml" via un shell distant depuis une machine distante vers le répertoire personnel de l'utilisateur "linoxide".

$ rsync -avz -e "ssh -p 22" [email protected]:/home/cas/deploy.yaml /home/linoxide/
[email protected]'s password: 
receiving incremental file list

sent 20 bytes  received 60 bytes  32.00 bytes/sec
total size is 239  speedup is 2.99

4. Copier/synchroniser des fichiers et des répertoires d'une machine locale vers une machine distante

Supposons que vous souhaitiez copier/synchroniser le dossier 'test-data' dans le répertoire personnel de l'utilisateur 'linoxide' de l'hôte local vers le répertoire personnel d'une machine distante '[email protected]', exécutez la commande :

$ rsync -azrvh /home/linoxide/computer-networking.pdf [email protected]: 
[email protected]'s password: 
sending incremental file list
computer-networking.pdf

sent 1.04K bytes  received 35 bytes  430.80 bytes/sec
total size is 3.03K  speedup is 2.81

Où :

-r :copie récursive

5. Copier/synchroniser des fichiers et des répertoires d'une machine distante vers une machine locale

La commande rsync vous aide à transférer un "document" de répertoire distant à copier sur votre hôte local.

En supposant que vous souhaitiez copier/synchroniser des fichiers/répertoires d'un hôte distant '[email protected]' vers le répertoire personnel de l'utilisateur 'linoxide'.

Par exemple :

$ rsync -zavhr [email protected]:document /home/linoxide
[email protected]'s password: 
receiving incremental file list
document/
document/kubernetes.txt

sent 47 bytes  received 139 bytes  74.40 bytes/sec
total size is 0  speedup is 0.00 

6. Options Rsync -include et -exclude

Ces deux options nous permettent d'inclure et d'exclure des fichiers en spécifiant des paramètres avec ces options nous aident à spécifier les fichiers ou répertoires que vous souhaitez inclure dans votre synchronisation et à exclure les fichiers et dossiers avec lesquels vous ne souhaitez pas être transférés.

Ici, dans cet exemple, la commande rsync inclura uniquement les fichiers et répertoires qui commencent par 'k' et exclura tous les autres fichiers et répertoires.

$ rsync -avhz -e "ssh -p 22" --include 'k*' --exclude '*' [email protected]: /home/linoxide

[email protected]'s password: 
receiving incremental file list
./
k8s.yaml
kubernetes.yaml
kuber/

sent 88 bytes  received 280 bytes  147.20 bytes/sec
total size is 73  speedup is 0.20

7. Définir la taille maximale des fichiers

Vous pouvez spécifier la taille maximale du fichier à transférer ou à synchroniser. Vous pouvez le faire avec l'option '--max-size'.

Dans l'exemple suivant, la taille maximale du fichier est de 200 Ko, donc cette commande ne transférera que les fichiers qui sont égaux ou inférieurs à 200 Ko.

$ rsync -zavhr --max-size='200k' [email protected]: /home/linoxide
[email protected]'s password: 
receiving incremental file list
.bash_history
.bash_logout
.bashrc
.profile
.sudo_as_admin_successful
.viminfo
computer-networking.pdf

sent 2.58K bytes  received 51.60K bytes  21.67K bytes/sec
total size is 113.24K  speedup is 2.09

8. Supprimer les fichiers source après un transfert réussi

Maintenant, supposons que vous ayez un serveur Web et un serveur de sauvegarde de données, vous avez créé une sauvegarde quotidienne et l'avez synchronisée avec votre serveur de sauvegarde, maintenant vous ne voulez pas conserver cette copie locale de sauvegarde sur votre serveur Web. Alors, allez-vous attendre que le transfert soit terminé, puis supprimer manuellement ce fichier de sauvegarde local ? Bien sûr que non. Cette suppression automatique peut être effectuée à l'aide de l'option '--remove-source-files'.

$ ls /home/directory
computer-networking.pdf  deploy.yaml  document  k8s.yaml  kuber  kubernetes.yaml

------
$ rsync -azvh --remove-source-files /home/linoxide/deploy.yaml [email protected]:
[email protected]'s password: 
sending incremental file list

sent 70 bytes  received 20 bytes  36.00 bytes/sec
total size is 239  speedup is 2.66

Exécutez à nouveau la commande 'ls', vous pouvez voir que le fichier 'deploy.yaml' a été supprimé sur SRC.

$ ls
computer-networking.pdf  document  k8s.yaml  kuber  kubernetes.yaml

9. Trouvez la différence dans les fichiers et les répertoires entre SRC et DEST

Afin de trouver toute différence dans les fichiers des répertoires entre SRC et DEST, vous pouvez exécuter la commande rsync avec l'option '-i'.

$ rsync -avzi /home/linoxide/cloud [email protected]:
[email protected]'s password: 
sending incremental file list
cd+++++++++ cloud/
<f+++++++++ cloud/computer-networking.pdf
<f+++++++++ cloud/k8s.yaml
<f+++++++++ cloud/kubernetes.yaml
cd+++++++++ cloud/document/
<f+++++++++ cloud/document/kubernetes.txt
cd+++++++++ cloud/kuber/
<f+++++++++ cloud/kuber/test.txt

sent 1,472 bytes  received 127 bytes  1,066.00 bytes/sec
total size is 3,101  speedup is 1.94

10. Limitez la bande passante

Vous pouvez définir la limitation de la bande passante lors de l'exécution de la commande rsync avec l'option '--bwlimit='.

En supposant que vous souhaitiez limiter le taux de transfert de données à 300 Ko/s, exécutez la commande :

$ rsync -avzh --bwlimit=300 /home/linoxide/coursera.png [email protected]:

[email protected]'s password: 
sending incremental file list
coursera.png

sent 2.93M bytes  received 35 bytes  234.48K bytes/sec
total size is 3.00M  speedup is 1.02

11. Reprendre le transfert en cas d'échec dans scp

Parfois, vous devez transférer un fichier très volumineux via la commande scp, mais vous rencontrez une erreur lors de la copie et vous ne pouvez pas recommencer le transfert à l'aide de la commande scp en raison de la taille importante du fichier et de la consommation de temps.

Dans cette situation, vous pouvez utiliser la commande rsync pour commencer à copier le fichier à partir duquel il a obtenu l'erreur. Par exemple, copier un gros fichier ISO dans le répertoire personnel vers l'hôte distant '[email protected]'

$ scp /home/linoxide/ubuntu-18.04.4-live-server-amd64.iso [email protected]:

[email protected]'s password: 
ubuntu-18.04.4-live-server-amd64.iso                                                                                                                                              32%  278MB  86.7MB/s   00:06 ETA

Le processus a été tué par l'utilisateur. A cette époque, 32% du dossier a été transféré. Maintenant, vous pouvez continuer le travail en cours en exécutant rsync :

$ rsync -P -avzh ubuntu-18.04.4-live-server-amd64.iso [email protected]:

[email protected]'s password: 
sending incremental file list
ubuntu-18.04.4-live-server-amd64.iso
        912.26M 100%   15.89MB/s    0:00:54 (xfr#1, to-chk=0/1)

sent 541.25M bytes  received 132.44K bytes  9.25M bytes/sec
total size is 912.26M  speedup is 1.69

12. Afficher la progression lors du transfert de données

Si vous souhaitez voir la progression du transfert lors de l'exécution de la commande rsync, vous pouvez utiliser l'option '--progress'.

Il affichera les fichiers et le temps restant pour terminer la copie.

Par exemple :

$ rsync -avh --progress /home/linoxide/cloud/ [email protected]:
[email protected]'s password: 
sending incremental file list
./
computer-networking.pdf
          3.03K 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=8/10)
coursera.png
          3.00M 100%  114.38MB/s    0:00:00 (xfr#2, to-chk=7/10)
k8s.yaml
             39 100%    1.52kB/s    0:00:00 (xfr#3, to-chk=6/10)
kubernetes.yaml
             34 100%    1.33kB/s    0:00:00 (xfr#4, to-chk=5/10)
ubuntu-18.04.4-live-server-amd64.iso
        912.26M 100%   89.60MB/s    0:00:09 (xfr#5, to-chk=4/10)
document/
document/kubernetes.txt
              0 100%    0.00kB/s    0:00:00 (xfr#6, to-chk=1/10)
kuber/
kuber/test.txt
              0 100%    0.00kB/s    0:00:00 (xfr#7, to-chk=0/10)

sent 915.49M bytes  received 164 bytes  79.61M bytes/sec
total size is 915.26M  speedup is 1.00

Conclusion

Dans ce tutoriel, nous avons appris à utiliser la commande rsync avec quelques exemples pour copier ou synchroniser des fichiers/répertoires.

Merci d'avoir lu et s'il vous plaît laissez votre suggestion dans la section des commentaires ci-dessous.


Linux
  1. 25 exemples pratiques de commande de recherche utiles sous Linux

  2. 14 exemples de commandes SCP pour transférer des fichiers en toute sécurité sous Linux

  3. Exemples pratiques de la commande rsync sous Linux

  4. Comment transférer des fichiers sous Linux avec SCP et Rsync

  5. diff Exemples de commandes sous Linux

Commande de recherche Linux avec des exemples pratiques

Commande lsof sous Linux (10 exemples)

15 exemples pratiques de commande Rsync sous Linux

Exemples de commandes Linux rsync

Commande lsof sous Linux avec exemples

Commande comm Linux avec exemples