Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | |||
rsync [Le 23/03/2024, 12:44] 86.202.8.12 |
rsync [Le 25/03/2024, 09:08] (Version actuelle) bcag2 user -> $USER, <code> -> <code bash> |
||
---|---|---|---|
Ligne 25: | Ligne 25: | ||
L'appel de base : | L'appel de base : | ||
- | <code>rsync source/ destination/</code> | + | <code bash>rsync source/ destination/</code> |
- | En __local__, cela peut donner cela pour une copie/synchro de votre répertoire vidéo vers un disque dur externe (de sauvegarde) [[montage|monté]] dans **/media/user/** | + | 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 -av /home/user/Vidéos/ /media/user/film_music/Vidéos/</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. | L'option "**v**" affiche les fichiers sauvegardés au fur et à mesure. Pour l'option "**a**", voir plus bas. | ||
- | //user// est à remplacer par votre identifiant Ubuntu.\\ | + | //$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. | 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 : | En __réseau__, **rsync** utilise [[SSH]] par défaut. Un exemple : | ||
- | <code>rsync -az source/ login@serveur.org:/destination/</code> | + | <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 41: | 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 58: | 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 67: | 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 75: | 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 85: | 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 ==== | ||
Ligne 152: | 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é |