Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
rsync [Le 09/11/2022, 23:10]
88.162.238.209 [Quelques options]
rsync [Le 25/03/2024, 09:08] (Version actuelle)
bcag2 user -> $USER, <code> -> <code bash>
Ligne 6: Ligne 6:
  
 ===== Présentation ===== ===== Présentation =====
-**rsync** (pour **r**emote **sync**hronization ou synchronisation à distance)est un logiciel ((sous licence **[[wpfr>​Licence_publique_générale_GNU|GNU GPL]]**)) de synchronisation de fichiers. Il est fréquemment utilisé pour mettre en place des systèmes de [[:​sauvegarde]] distante ou des [[points_de_restauration_pour_un_systeme_linux|points de restauration]] du système (via l'​interface [[timeshift|Timeshift]]).+**rsync** (pour **r**emote **sync**hronization ou synchronisation à distance) est un logiciel ((sous licence **[[wpfr>​Licence_publique_générale_GNU|GNU GPL]]**)) de synchronisation de fichiers. Il est fréquemment utilisé pour mettre en place des systèmes de [[:​sauvegarde]] distante ou des [[points_de_restauration_pour_un_systeme_linux|points de restauration]] du système (via l'​interface [[timeshift|Timeshift]]).
  
 rsync travaille de manière unidirectionnelle c'​est-à-dire qu'il synchronise,​ copie ou actualise les données d'une source (locale ou distante) vers une destination (locale ou distante) en ne transférant que les octets des fichiers qui ont été modifiés. rsync travaille de manière unidirectionnelle c'​est-à-dire qu'il synchronise,​ copie ou actualise les données d'une source (locale ou distante) vers une destination (locale ou distante) en ne transférant que les octets des fichiers qui ont été modifiés.
Ligne 18: Ligne 18:
  
 Pour les personnes qui n’aiment pas la ligne de commande, **il existe une interface graphique à rsync : [[grsync|Grsync]] !!** Pour les personnes qui n’aiment pas la ligne de commande, **il existe une interface graphique à rsync : [[grsync|Grsync]] !!**
 +
 ===== Utilisation ===== ===== Utilisation =====
 Comme l'​indique le manuel : Comme l'​indique le manuel :
Ligne 24: Ligne 25:
  
 L'​appel de base : L'​appel de base :
-<​code>​rsync source/ destination/</​code>​+<​code ​bash>rsync source/ destination/</​code>​
  
-L'intérêt ​est une utilisation ​à travers le réseau. **rsync** utilise [[SSH]] par défaut. Un exemple : +En __local__, pour une copie/​synchro de votre répertoire vidéo vers un disque dur externe (de sauvegarde) [[montage|monté]] dans **/​media/​$USER/​**,​ cela donne : 
-<​code>​rsync -az source/ login@serveur.org:/​destination/</​code>​+<code bash>​rsync -av /​home/​$USER/​Vidéos/​ /​media/​$USER/​film_music/​Vidéos/</​code>​ 
 +L'option "​**v**"​ affiche les fichiers sauvegardés au fur et à mesure. Pour l'​option "​**a**",​ voir plus bas. 
 +//​$USER// ​est la variable d’environnement système qui permet d'​accéder au nom d’utilisateur de la session en cours.\\ 
 +Vous pouvez relancer cette commande ​à chaque nouvelle synchro, seuls les nouveaux fichiers seront synchronisés. 
 + 
 +En __réseau__, ​**rsync** utilise [[SSH]] par défaut. Un exemple : 
 +<​code ​bash>rsync -az source/ login@serveur.org:/​destination/</​code>​
 où: où:
   * //-a// ou //​%%--%%archive//​ : est un moyen rapide de dire que vous voulez la récursivité et préserver pratiquement tout. La seule exception est que si //​%%--%%files-from//​ a été spécifiée alors //-r// n'est pas utilisée. Ceci est équivalent à //​-rlptgoD//​.   * //-a// ou //​%%--%%archive//​ : est un moyen rapide de dire que vous voulez la récursivité et préserver pratiquement tout. La seule exception est que si //​%%--%%files-from//​ a été spécifiée alors //-r// n'est pas utilisée. Ceci est équivalent à //​-rlptgoD//​.
Ligne 34: Ligne 41:
 <note important>​ <note important>​
 Attention, il convient d'​être vigilant dans l'​utilisation ou non du slash (« /​ ») dans le chemin de la source. Ainsi, les deux commandes suivantes **ne sont pas** équivalentes :​ Attention, il convient d'​être vigilant dans l'​utilisation ou non du slash (« /​ ») dans le chemin de la source. Ainsi, les deux commandes suivantes **ne sont pas** équivalentes :​
-<​code>​rsync source destination/​+<​code ​bash>rsync source destination/​
 rsync source/ destination/</​code>​ rsync source/ destination/</​code>​
  
 En effet, la première commande va **_créer_** le dossier source dans le dossier destination en ajoutant donc un niveau dans l'​arborescence. La deuxième commande copie le **_contenu_** du dossier source dans le dossier destination. En effet, la première commande va **_créer_** le dossier source dans le dossier destination en ajoutant donc un niveau dans l'​arborescence. La deuxième commande copie le **_contenu_** du dossier source dans le dossier destination.
 Autrement dit, les deux commandes suivantes sont, elles, équivalentes* :​ Autrement dit, les deux commandes suivantes sont, elles, équivalentes* :​
-<​code>​rsync source destination/​+<​code ​bash>rsync source destination/​
 rsync source/ destination/​source/</​code> ​ rsync source/ destination/​source/</​code> ​
  
 Enfin, il faut noter que l'​utilisation ou non d'un slash final dans le chemin de la destination n'a aucune incidence. Les deux commandes suivantes sont donc équivalentes :​ Enfin, il faut noter que l'​utilisation ou non d'un slash final dans le chemin de la destination n'a aucune incidence. Les deux commandes suivantes sont donc équivalentes :​
  
-<​code>​rsync source destination/​+<​code ​bash>rsync source destination/​
 rsync source destination</​code> ​ rsync source destination</​code> ​
  
Ligne 51: Ligne 58:
 <​note>​ <​note>​
 Pour une gestion du port ssh, utiliser la syntaxe suivante: Pour une gestion du port ssh, utiliser la syntaxe suivante:
-<​code>​+<​code ​bash>
 rsync -avz chemin/​source/​ -e "ssh -p port" user@ip:"/​chemin/​de destination avec espaces/"​ rsync -avz chemin/​source/​ -e "ssh -p port" user@ip:"/​chemin/​de destination avec espaces/"​
 </​code>​ </​code>​
Ligne 60: Ligne 67:
 Copie du dossier source vers le serveur : Copie du dossier source vers le serveur :
  
-<​code>​rsync -e ssh -avz --delete-after /​home/​source user@ip_du_serveur:/​dossier/​destination/</​code>​+<​code ​bash>rsync -e ssh -avz --delete-after /​home/​source user@ip_du_serveur:/​dossier/​destination/</​code>​
 où : où :
   * //<​nowiki>​--</​nowiki>​delete-after//​ : à la fin du transfert, supprime les fichiers dans le dossier de destination ne se trouvant pas dans le dossier source.   * //<​nowiki>​--</​nowiki>​delete-after//​ : à la fin du transfert, supprime les fichiers dans le dossier de destination ne se trouvant pas dans le dossier source.
Ligne 68: Ligne 75:
  
 Si les noms des chemins contiennent des espaces, on peut les écrire entre guillemet pour échapper les espaces : Si les noms des chemins contiennent des espaces, on peut les écrire entre guillemet pour échapper les espaces :
-<​code>​rsync -e ssh -avz --delete-after "/​home/​source avec espace/"​ user@ip_du_serveur:"/​dossier/​destination avec espace/"</​code>​+<​code ​bash>rsync -e ssh -avz --delete-after "/​home/​source avec espace/"​ user@ip_du_serveur:"/​dossier/​destination avec espace/"</​code>​
  
 <​note>​ <​note>​
 Attention à partir de la version 3.0, d'​après le man, le caractère espace doivent être échappés pour être compris et le chemin doit être indiqué entre apostrophe. Donc l'​instruction précédente devient : Attention à partir de la version 3.0, d'​après le man, le caractère espace doivent être échappés pour être compris et le chemin doit être indiqué entre apostrophe. Donc l'​instruction précédente devient :
-<​code>​+<​code ​bash>
 rsync -avz chemin/​source/​ -e "ssh -p port" user@ip:'/​chemin/​de\ destination\ avec\ espaces/'​ rsync -avz chemin/​source/​ -e "ssh -p port" user@ip:'/​chemin/​de\ destination\ avec\ espaces/'​
 </​code>​ </​code>​
Ligne 78: Ligne 85:
  
 Avec l'​option //-n// la commande liste ce qu'​elle va faire sans l'​exécuter : Avec l'​option //-n// la commande liste ce qu'​elle va faire sans l'​exécuter :
-<​code>​rsync -e ssh -avzn --delete-after /​home/​mondossier_source user@ip_du_serveur:/​dossier/​destination/</​code>​+<​code ​bash>rsync -e ssh -avzn --delete-after /​home/​mondossier_source user@ip_du_serveur:/​dossier/​destination/</​code>​
  
 ==== Exclure des fichiers ==== ==== Exclure des fichiers ====
 On peut exclure des fichiers/​dossiers selon beaucoup de schémas. C'est utile pour ne pas sauvegarder le cache, les fichiers temporaires,​ le répertoire //.git//, la corbeille, etc… On peut exclure des fichiers/​dossiers selon beaucoup de schémas. C'est utile pour ne pas sauvegarder le cache, les fichiers temporaires,​ le répertoire //.git//, la corbeille, etc…
 +
 +L'​exclusion d'un dossier est identique à l'​exclusion d'un fichier : il suffit d'​indiquer le chemin d'​accès relatif au répertoire source.
  
   * Liste dans la commande : <code bash>​rsync --exclude="​nom_de_dossier"​ --exclude="​- autre_nom_de_dossier"​ source/ destination/</​code>​   * Liste dans la commande : <code bash>​rsync --exclude="​nom_de_dossier"​ --exclude="​- autre_nom_de_dossier"​ source/ destination/</​code>​
Ligne 97: Ligne 106:
  
 ==== Quelques options ==== ==== Quelques options ====
-De nombreuses options existent (voir [[http://​www.delafond.org/​traducmanfr/​man/​man1/​rsync.1.html|ici]]),​ en voici quelques ​une : \\+De nombreuses options existent (voir [[http://​www.delafond.org/​traducmanfr/​man/​man1/​rsync.1.html|ici]]),​ en voici quelques ​unes : \\
  
 **-a** : archive => préserve les dates, permissions,​ etc ... des fichiers. Inclut l'​option récursivité. Option à utiliser quand on veut transférer des répertoires entiers avec leurs sous-répertoires en préservant toutes les caractéristiques des fichiers.\\ **-a** : archive => préserve les dates, permissions,​ etc ... des fichiers. Inclut l'​option récursivité. Option à utiliser quand on veut transférer des répertoires entiers avec leurs sous-répertoires en préservant toutes les caractéristiques des fichiers.\\
Ligne 143: Ligne 152:
  
 Sur le serveur distant : Sur le serveur distant :
-  * Autoriser l'​utilisateur à lancer la commande rsync sous le compte système www-data grace à [[sudo]], __sans mot de passe__: <​code>​sudo visudo</​code><​file>​utilisateurssh ALL=(www-data) NOPASSWD: /​usr/​bin/​rsync</​file>​+  * Autoriser l'​utilisateur à lancer la commande rsync sous le compte système www-data grace à [[sudo]], __sans mot de passe__: <​code ​bash>sudo visudo</​code><​file>​utilisateurssh ALL=(www-data) NOPASSWD: /​usr/​bin/​rsync</​file>​
   * Optionnel : déposer une clef publique ssh au besoin pour l'​utilisateur   * Optionnel : déposer une clef publique ssh au besoin pour l'​utilisateur
  
 Sur la machine locale : Sur la machine locale :
-  * Lancer une synchronisation en tant qu'​utilisateur www-data grace à [[sudo]]<​code>​sudo -u www-data rsync -a --progress -e ssh --rsync-path "sudo -u www-data rsync" utilisateur@serveur_distant:/​var/​www/​ /​var/​www/</​code>​+  * Lancer une synchronisation en tant qu'​utilisateur www-data grace à [[sudo]]<​code ​bash>sudo -u www-data rsync -a --progress -e ssh --rsync-path "sudo -u www-data rsync" utilisateur@serveur_distant:/​var/​www/​ /​var/​www/</​code>​
  
 [[https://​crashingdaily.wordpress.com/​2007/​06/​29/​rsync-and-sudo-over-ssh/​|Source de ce tutoriel]], adaptée pour le cas présenté [[https://​crashingdaily.wordpress.com/​2007/​06/​29/​rsync-and-sudo-over-ssh/​|Source de ce tutoriel]], adaptée pour le cas présenté
  • rsync.1668031859.txt.gz
  • Dernière modification: Le 09/11/2022, 23:10
  • par 88.162.238.209