
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.