<metaname="viewport"content="width=device-width, initial-scale=1, user-scalable=no"><title>Synchronisation fichiers avec Unison sous Linux - YannStatic</title>
<metaname="description"content="Unison est un outil de synchronisation de fichiers gratuit, open source, multiplateforme et bidirectionnel . Il est utilisé pour stocker deux répliques de fi...">
<divclass="col-main cell cell--auto"><!-- start custom main top snippet --><divid="results-container"class="search-result js-search-result"></div><!-- end custom main top snippet -->
<articleitemscopeitemtype="http://schema.org/Article"><divclass="article__header"><header><h1style="color:Tomato;">Synchronisation fichiers avec Unison sous Linux</h1></header></div><metaitemprop="headline"content="Synchronisation fichiers avec Unison sous Linux"><divclass="article__info clearfix"><ulclass="left-col menu"><li>
</details><p><strong>Unison</strong> est un outil de synchronisation de fichiers gratuit, open source, multiplateforme et bidirectionnel . Il est utilisé pour stocker deux répliques de fichiers et de répertoires sur deux systèmes différents ou sur des disques différents sur le même système.</p>
<p>Les répliques de fichiers et de répertoires sont modifiées séparément puis mises à jour en propageant les modifications de chaque réplique à l’autre.</p>
<p>Pour le dire en termes simples, toute modification apportée à un emplacement sera répliquée à un autre emplacement et vice versa.</p>
<p>Comme il s’agit d’une application multiplateforme, vous pouvez synchroniser des fichiers et des répertoires entre des ordinateurs fonctionnant avec différents systèmes d’exploitation.</p>
<p>Par exemple, vous pouvez synchroniser des fichiers stockés sur une machine Linux avec une machine Windows ou Unix et vice versa. Non seulement le contenu du fichier, même la propriété du fichier et les autorisations seront également synchronisées.</p>
<pclass="warning">Si le contenu est différent sur les deux répliques, cela provoque un conflit. Unison détectera et affichera de tels conflits. Dans ce cas, vous devez indiquer à Unison quelle réplique doit remplacer l’autre. Les mises à jour qui n’entrent pas en conflit seront propagées automatiquement.</p>
<p>Unison fonctionne bien avec n’importe quelle paire d’ordinateurs connectés à un réseau local ou à Internet. Les fichiers sont synchronisés avec un système distant via une connexion ssh cryptée .</p>
<p>Une autre caractéristique notable d’Unison est qu’il fonctionne bien sur des liaisons lentes telles que les connexions PPP. Semblable à rsync , Unison ne transférera que les parties d’un fichier qui ont été modifiées.</p>
<p>L’implémentation intégrée d’Unison de l’algorithme rsync accélère le transfert des mises à jour vers les fichiers existants.</p>
<p>Unison est un programme de niveau utilisateur, il n’est donc pas nécessaire de modifier le noyau ou d’avoir des privilèges de superutilisateur sur l’un ou l’autre hôte.</p>
<p><strong>Le programme Unison est créé par Benjamin C. Pierce et est publié sous licence GPL</strong>. Il fonctionne sous les plateformes GNU/Linux, Windows et Unix.</p>
<p>Traduction de l’article <ahref="https://ostechnix.com/how-to-synchronize-files-with-unison-on-linux/">How To Synchronize Files With Unison On Linux</a></p>
<h2id="sommaire">Sommaire</h2>
<ul>
<li><ahref="#installer-unison-sous-linux">Installer Unison sous Linux</a></li>
<li><ahref="#synchroniser-des-fichiers-avec-unison-sous-linux">Synchroniser des fichiers avec Unison sous Linux</a>
<ul>
<li><ahref="#synchroniser-les-fichiers-stockés-dans-différents-répertoires-sur-la-même-machine">Synchroniser les fichiers stockés dans différents répertoires sur la même machine</a>
<li><ahref="#ignorer-les-fichiers-de-la-synchronisation">Ignorer les fichiers de la synchronisation</a></li>
<li><ahref="#synchroniser-les-fichiers-et-répertoires-locaux-avec-unison-gtk">Synchroniser les fichiers et répertoires locaux avec unison-gtk</a></li>
</ul>
</li>
<li><ahref="#synchroniser-les-fichiers-et-répertoires-stockés-sur-différents-disques-sur-la-même-machine">Synchroniser les fichiers et répertoires stockés sur différents disques sur la même machine</a></li>
<li><ahref="#synchroniser-les-fichiers-et-répertoires-entre-les-machines-locales-et-distantes">Synchroniser les fichiers et répertoires entre les machines locales et distantes</a>
<ul>
<li><ahref="#synchronisez-les-fichiers-et-les-répertoires-entre-les-machines-locales-et-distantes-à-partir-de-la-ligne-de-commande">Synchronisez les fichiers et les répertoires entre les machines locales et distantes à partir de la ligne de commande</a></li>
<li><ahref="#configurer-lauthentification-basée-sur-la-clé-ssh-facultatif">Configurer l’authentification basée sur la clé SSH (facultatif)</a></li>
<li><ahref="#configurer-la-tâche-cron-facultatif">Configurer la tâche cron (facultatif)</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<h2id="installer-unison-sous-linux">Installer Unison sous Linux</h2>
<p>Unison est disponible dans les référentiels par défaut des référentiels officiels de nombreux systèmes d’exploitation Linux.</p>
<p>Pour installer Unison sur Alpine Linux, exécutez :</p>
<p>Une interface graphique simple nommée <strong>unison-gtk</strong> est également disponible pour ceux qui préfèrent l’interface graphique à la CLI. Il est disponible dans les référentiels par défaut de quelques distributions Linux.</p>
<p>Sur Alpine Linux, vous pouvez installer Unison-gtk à l’aide de la commande :</p>
<pclass="info">Veuillez noter que si vous souhaitez synchroniser des fichiers entre deux systèmes différents, vous devez installer <strong>Unison</strong> sur tous les systèmes que vous souhaitez conserver synchronisés. De plus, <u>la même version sur les deux systèmes est recommandée</u>.</p>
<h2id="synchroniser-des-fichiers-avec-unison-sous-linux">Synchroniser des fichiers avec Unison sous Linux</h2>
<p>Nous pouvons utiliser Unison dans les trois modes différents suivants :</p>
<ul>
<li>Synchroniser les fichiers stockés dans différents répertoires sur la même machine,</li>
<li>Synchroniser les fichiers et répertoires stockés sur différents disques sur la même machine,</li>
<li>Synchronisez les fichiers et les répertoires entre les machines locales et distantes :
<ul>
<li>Synchroniser des fichiers avec une machine distante via une connexion socket directe,</li>
<li>Synchronisez les fichiers avec la machine distante à l’aide de SSH.</li>
</ul>
</li>
</ul>
<h3id="synchroniser-les-fichiers-stockés-dans-différents-répertoires-sur-la-même-machine">Synchroniser les fichiers stockés dans différents répertoires sur la même machine</h3>
<p>Pour les besoins de ce guide, je vais créer deux répertoires racine (c’est-à-dire des répliques) à savoir directory1 et directory2.</p>
<p>Comme vous pouvez le voir, j’ai un dossier appelé <strong>dir1</strong> et deux autres fichiers à savoir <strong>file1</strong> et <strong>file2</strong> à la racine de <strong>directory1</strong>.<br/>
A l’intérieur du <strong>dir1</strong>, il y a un autre fichier appelé <strong>file3</strong>.</p>
<p>Et la réplique <strong>directory2</strong> n’a aucun contenu.</p>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>$ ls -ltRF directory2/
<p>Vous serez invité à indiquer si vous souhaitez continuer à synchroniser le contenu de <strong>directory1</strong> avec <strong>directory2</strong>. Appuyez simplement sur la touche <strong>ENTER</strong>. <br/>
Ensuite, Unison vous demandera de confirmer les fichiers et répertoires à synchroniser.<br/>
Appuyez sur <strong>ENTER</strong> ou appuyez sur la touche <strong>f</strong> pour confirmer les fichiers et dossiers que vous souhaitez synchroniser.<br/>
Enfin, appuyez sur <strong>y</strong> et appuyez sur la touche <strong>ENTER</strong> pour procéder à la propagation des mises à jour.</p>
<p>Désormais, tout le contenu de <strong>directory1</strong> sera répliqué dans <strong>directory2</strong>. Vous pouvez le vérifier en utilisant la commande <codeclass="language-plaintext highlighter-rouge">ls</code> :<br/>
<imgsrc="/images/unison002.png"alt=""/></p>
<p>Voir? Le contenu des deux répliques est identique. Comme je l’ai déjà mentionné, les autorisations de fichiers et les numéros d’inode des fichiers et des dossiers sur les deux emplacements sont également synchronisés. Vous pouvez voir que les autorisations et les inodes sont également identiques dans la sortie ci-dessus.</p>
<p>Avez-vous remarqué les flèches dans la sortie lors de la synchronisation des répertoires ? Par exemple, vous devriez avoir remarqué les lignes suivantes au milieu de la sortie :</p>
<p>Les flèches indiquent la direction dans laquelle la modification doit être propagée. Dans notre cas, les flèches pointent de gauche à droite. Signification - les dir1, file1 et file2 sont propagés à la deuxième réplique, c’est-à-dire directory2.</p>
<p>Créez maintenant un nouveau fichier dans la réplique directory2 et voyez ce qui se passe.</p>
<p>Vous verrez maintenant qu’une flèche pointe de droite à gauche. Cela signifie que les modifications apportées au deuxième réplica sont propagées au premier réplica. En d’autres termes, le contenu de directory2 est répliqué dans directory1.</p>
<p>Unison reconnaîtra automatiquement quels fichiers doivent être mis à jour dans les deux répliques. Lorsque vous exécutez Unison pour la première fois, il prend note de l’horodatage de modification, des autorisations, de la propriété et du numéro d’inode de tous les fichiers et dossiers dans les deux emplacements. Sur la base de ces informations, Unison décidera quels fichiers doivent être mis à jour lorsque vous exécuterez à nouveau la même commande. Comme indiqué précédemment, toutes les informations seront conservées dans un répertoire <strong>~/.unison</strong></p>
<p>Pour le vérifier vous-même, modifiez le contenu d’un fichier existant. Je vais modifier le contenu de file4 dans le replica directory1</p>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>$ echo "Welcome to OSTechNix" > directory1/file4
<p>Comme vous pouvez le voir dans la sortie ci-dessus, Unison a détecté qui file4 a été modifié dans le premier réplica et l’a synchronisé avec le deuxième réplica.</p>
<p>Si les deux répliques sont modifiées et que leur contenu est différent, les modifications sont en conflit. Dans de tels cas, Unison demandera à l’utilisateur comment propager les mises à jour des deux côtés. Les conflits seront affichés avec des flèches gauche et droite comme ci-dessous.</p>
<p>Si une action par défaut est indiquée par une flèche, appuyez simplement sur la touche ENTER pour passer au fichier modifié suivant. Si vous voulez faire quelque chose de différent avec ce fichier, vous pouvez appuyer sur “<codeclass="language-plaintext highlighter-rouge"><</code>” ou “<codeclass="language-plaintext highlighter-rouge">></code>” pour forcer la propagation du changement de droite à gauche ou de gauche à droite.</p>
<p>Si vous ne souhaitez apporter aucune modification, appuyez simplement sur “<codeclass="language-plaintext highlighter-rouge">/</code>” pour ignorer ce fichier et laisser les deux répliques seules.</p>
<h4id="profils-unison">Profils unison</h4>
<p>Unison utilise des profils pour synchroniser des fichiers et des dossiers entre deux répertoires sur la même machine ou sur deux machines différentes. Un profil n’est rien d’autre qu’un fichier texte dans lequel nous définissons le chemin réel des répertoires racine et les préférences de chemin qui doivent être synchronisées. Tous les profils seront stockés dans le répertoire de <codeclass="language-plaintext highlighter-rouge">.unison</code> votre répertoire <codeclass="language-plaintext highlighter-rouge">$HOME</code>.</p>
<p>Lorsque vous exécutez Unison pour la première fois, un profil par défaut nommé <codeclass="language-plaintext highlighter-rouge">default.prf</code> est créé sous le répertoire <codeclass="language-plaintext highlighter-rouge">~/.unison</code>. Le profil par défaut n’a pas de préférences définies. Ainsi, tout ce qui est stocké dans une réplique sera synchronisé avec une autre réplique.</p>
<p>Nous pouvons également créer des profils personnalisés avec la liste des préférences de chemin. Cela vous évitera de synchroniser l’ensemble des deux répliques.</p>
<p>En utilisant les profils personnalisés, nous pouvons demander à Unison :</p>
<ul>
<li>pour synchroniser des fichiers et dossiers spécifiques,</li>
<li>pour ignorer un fichier spécifique ou un type spécifique de fichiers de la synchronisation.</li>
</ul>
<p>Voyons un exemple.</p>
<p>Créez deux répliques et enregistrez certains fichiers et dossiers dans une réplique et laissez l’autre vide.</p>
<p>Définissez les répertoires racine et les chemins des fichiers et répertoires que vous souhaitez synchroniser :</p>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code># Roots of the synchronization
root = /home/sk/directory1
root = /home/sk/directory2
# Paths to synchronize
path = dir1
path = file2
</code></pre></div></div>
<p>Les deux racines peuvent être données dans n’importe quel ordre. Unison les triera dans un ordre canonique avant de faire quoi que ce soit d’autre. Si vous ne spécifiez aucun chemin, Unison synchronisera simplement les deux répliques entières, en commençant par la paire de racines donnée. Si une ou plusieurs préférences de chemin sont données, Unison synchronisera uniquement ces chemins et leurs enfants.</p>
<p>Dans l’exemple ci-dessus, j’ai défini que dir1 et file2 doivent être synchronisés avec un autre répertoire racine. Enregistrez et fermez le fichier.</p>
<p>Après avoir créé le profil, démarrez le processus de synchronisation à l’aide de la commande :</p>
<p>Vous serez invité à indiquer si vous souhaitez continuer à synchroniser le contenu de directory1 avec directory2. Appuyez simplement sur la touche ENTER puis appuyez sur la touche f pour confirmer les chemins à synchroniser. Enfin, appuyez sur y et appuyez sur la touche ENTER pour procéder à la propagation des mises à jour.</p>
<p>Allez maintenant au deuxième réplica directory2 et voyez si le contenu est synchronisé.</p>
<h4id="ignorer-les-fichiers-de-la-synchronisation">Ignorer les fichiers de la synchronisation</h4>
<p>Parfois, vous ne souhaitez peut-être pas synchroniser un fichier spécifique ou un type de fichiers spécifique. Si tel est le cas, vous pouvez définir les fichiers à ignorer dans le profil comme ci-dessous.</p>
<p>Pour plus d’exemples de profils, reportez-vous <ahref="https://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#profileegs">ici</a></p>
<h4id="synchroniser-les-fichiers-et-répertoires-locaux-avec-unison-gtk">Synchroniser les fichiers et répertoires locaux avec unison-gtk</h4>
<p>Certains d’entre vous ne sont peut-être pas à l’aise avec la ligne de commande. Heureusement, Unison possède une interface graphique simple qui permet aux utilisateurs de créer facilement des profils et de synchroniser des fichiers basés sur les profils via une fenêtre graphique.</p>
<p>Assurez-vous d’avoir installé le package <strong>unison-gtk</strong> comme indiqué dans la section d’installation ci-dessus.</p>
<h3id="synchroniser-les-fichiers-et-répertoires-stockés-sur-différents-disques-sur-la-même-machine">Synchroniser les fichiers et répertoires stockés sur différents disques sur la même machine</h3>
<p>Les fichiers de synchronisation entre deux disques sont exactement les mêmes que ci-dessus. Assurez-vous simplement que vous avez mentionné le chemin correct du répertoire racine dans le lecteur externe.</p>
<p>Vous savez maintenant comment synchroniser des fichiers entre deux répertoires sur le même disque dur et un disque différent sur un système local. La section suivante explique comment synchroniser des fichiers entre deux systèmes différents.</p>
<h3id="synchroniser-les-fichiers-et-répertoires-entre-les-machines-locales-et-distantes">Synchroniser les fichiers et répertoires entre les machines locales et distantes</h3>
<p>Comme indiqué précédemment, Unison peut synchroniser des fichiers entre des systèmes locaux et distants via une connexion socket directe et via une connexion SSH cryptée. Comme vous le savez déjà, SSH est bien meilleur et plus sécurisé que la méthode socket. Pour les besoins de ce guide, j’utiliserai la méthode SSH pour synchroniser les fichiers.</p>
<p>Assurez-vous d’avoir <strong>installé openSSH et Unison sur les deux systèmes</strong> . Assurez-vous également que les deux systèmes peuvent communiquer via SSH. Veuillez noter que <strong>vos systèmes locaux et distants doivent avoir la même version d’Unison</strong></p>
<p>Pour vérifier la version d’Unison, exécutez la commande suivante sur votre système local et distant :</p>
<p>Étant donné que les fichiers seront synchronisés via SSH, peu importe que le système distant ait unison-gtk ou non. L’interface de ligne de commande Unison est juste suffisante sur une machine distante ! Sur votre ordinateur local, vous pouvez utiliser une interface textuelle ou graphique pour unison</p>
<h4id="synchronisez-les-fichiers-et-les-répertoires-entre-les-machines-locales-et-distantes-à-partir-de-la-ligne-de-commande">Synchronisez les fichiers et les répertoires entre les machines locales et distantes à partir de la ligne de commande</h4>
<p>Maintenant, synchronisons le directory1 depuis notre système local vers le système directory1 distant à l’aide de l’unisson en exécutant la commande suivante :</p>
<p><codeclass="language-plaintext highlighter-rouge">ostechnix@192.168.225.52</code> avec le nom d’utilisateur et l’adresse IP de mon système distant.</p>
<p>Vous serez invité à entrer le mot de passe de votre utilisateur distant. Appuyez ensuite sur ENTER pour accepter de synchroniser le contenu de directory1 de la machine locale avec directory1 de la machine distante. Appuyez ensuite sur la touche f pour confirmer les chemins à synchroniser. Enfin, appuyez sur y et appuyez sur la touche ENTER pour procéder à la propagation des mises à jour.</p>
<p>La commande ci-dessus répliquera le contenu de directory1 du système local vers le directory1 sur le système distant. Ajoutez maintenant un nouveau fichier ou mettez à jour un fichier existant et essayez de synchroniser à nouveau. Vous devriez voir des résultats similaires des deux côtés.</p>
<p>Si vous souhaitez synchroniser le contenu ailleurs que dans le répertoire personnel du système distant, vous devez spécifier le chemin absolu du répertoire distant en <strong>ajoutant une barre oblique supplémentaire entre le nom d’hôte distant et le début du chemin</strong> comme ci-dessous :</p>
<h4id="configurer-lauthentification-basée-sur-la-clé-ssh-facultatif">Configurer l’authentification basée sur la clé SSH (facultatif)</h4>
<p>Chaque fois que vous synchronisez des fichiers entre deux systèmes différents via SSH, vous devez entrer le mot de passe de l’utilisateur distant. Si vous ne souhaitez pas saisir le mot de passe à chaque fois, vous pouvez configurer l’authentification SSH sans mot de passe comme décrit dans le lien ci-dessous. Ne générez pas de paire de clés SSH avec la phrase secrète. Sinon, vous devez toujours entrer le mot de passe lors de la synchronisation des fichiers entre les systèmes.<br/>
<ahref="https://ostechnix.com/configure-ssh-key-based-authentication-linux/">How To Configure SSH Key-based Authentication In Linux</a></p>
<h4id="configurer-la-tâche-cron-facultatif">Configurer la tâche cron (facultatif)</h4>
<p>Nous pouvons synchroniser automatiquement les fichiers à un intervalle de temps spécifique à l’aide de tâches cron.</p>
<p>Par exemple, ajoutez l’entrée suivante dans votre crontabfichier pour exécuter la synchronisation tous les jours (elle s’exécutera à 00h00) :</p>
<divclass="article__section-navigator clearfix"><divclass="previous"><span>PRÉCÉDENT</span><ahref="/2022/09/20/Sauvegarde_Restauration_systeme_Linux_avec_rsync_ou_cya.html">Sauvegarde restauration système complet Linux avec Rsync ou snapshots (CYA)</a></div><divclass="next"><span>SUIVANT</span><ahref="/2022/09/27/Debian_11_Fail2ban_UFW.html">Installer et configurer Fail2ban + UFW sur Debian 11/12</a></div></div></div>
</div>
<script>(function(){
var SOURCES = window.TEXT_VARIABLES.sources;
window.Lazyload.js(SOURCES.jquery, function() {
$(function() {
var $this ,$scroll;
var $articleContent = $('.js-article-content');
var hasSidebar = $('.js-page-root').hasClass('layout--page--sidebar');
var scroll = hasSidebar ? '.js-page-main' : 'html, body';