<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1278"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1278/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1278/atom/feed</id>
  <updated>2008-07-11T09:28:59+02:00</updated>
  <entry>
    <title>Les liens dans les systèmes *nix</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1278" />
    <id>http://artisan.karma-lab.net/node/1278</id>
    <published>2007-12-03T10:26:42+01:00</published>
    <updated>2008-07-11T09:28:59+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Systèmes de fichier" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  Le concept de lien est présent sur beaucoup d'OS mais sous *nix (et donc linux) c'est une religion. Les liens sont partout et il suffit de taper un <kbd>ls -la /etc</kbd> pour s'en convaincre. Ce petit tutorial a donc pour objectif d'expliquer un peu les différents liens et leur utilisation possible.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Le concept de lien est présent sur beaucoup d'OS mais sous *nix (et donc linux) c'est une religion. Les liens sont partout et il suffit de taper un <kbd>ls -la /etc</kbd> pour s'en convaincre. Ce petit tutorial a donc pour objectif d'expliquer un peu les différents liens et leur utilisation possible.
</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>Le lien symbolique</h2>
	
<p>
  Clairement le plus utilisé, il est possible, de loin, de comparer le lien symbolique au .lnk sous Windows, mais de très loin alors...</p>
<p>
  Le lien symbolique est un "faux fichier" ou un "faux dossier" qui contient le chemin d'un "vrai fichier" ou d'un "vrai dossier". Une fois un lien symbolique établi, pour la majorité des applications, le fichier ou dossier cible est bien réel. Et lorsqu'on supprime un lien symbolique, le fichier ou dossier d'origine n'en est en rien modifié. Dans l'autre sens, si l'on détruit le fichier/dossier source d'un lien symbolique, celui-ci ne disparaît pas pour autant, et lors d'un <kbD>ls</kbD>, il va apparaître clignotant et en erreur, ce sera un lien "cassé". 
</p>
<p>
  Une utilisation naturelle du lien symbolique est de "bouturer" un dossier/fichier venant d'un bout de l'arborescence du système de fichier vers un autre dossier, mais en le laissant "physiquement" là où il est.
</p>
<p>
  La syntaxe du lien symbolique est <kbd>ln -s source [cible]</kbd>. Si la "cible" est omise, c'est le dernier élément du chemin de "source" qui est utilisé, dans le dossier courant. Par exemple :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>gaston$</span># Lien d'un dossier vers un autre</div><div class='command'><span class='prompt'>gaston$</span>ln -s /home/mon_dossier /home/worspace/mon_dossier</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># Sans différence, lien d'un fichier vers un autre fichier</div><div class='command'><span class='prompt'>gaston$</span>ln -s /home/fichier.txt /home/worspace/fichier.txt</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># Les mêmes syntaxe en omettant le chemin cible</div><div class='command'><span class='prompt'>gaston$</span>cd /home/workspace</div><div class='command'><span class='prompt'>gaston$</span>ln -s /home/mon_dossier</div><div class='command'><span class='prompt'>gaston$</span>ln -s /home/fichier.txt</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># Voir le résultat des liens effectués</div><div class='command'><span class='prompt'>gaston$</span>ls -la</div><div class='result'>fichier.txt -> /home/fichier.txt</div><div class='result'>mon_dossier -> /home/mon_dossier</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># la même chose avec la commande stat</div><div class='command'><span class='prompt'>gaston$</span>stat /etc/alternatives/gcc</div><div class='result'>File: `/etc/alternatives/gcc' -> `/usr/bin/gcc-4.2.2'</div><div class='result'>Size: 18              Blocks: 0          IO Block: 4096   lien symbolique</div><div class='result'>...</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  Dans un script, il peut être important d'avoir le chemin réel d'un lien symbolique, c'est le rôle de la commande <kbd>readlink</kbd>. Le script suivant permet donc de tester si le paramétre est un lien symbolique et de le résoudre si c'est le cas pour renvoyer le véritable chemin :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co0">#! /bin/sh</span><br />
<span class="re2">file=</span>$<span class="nu0">1</span><br />
<span class="kw1">while</span> <span class="br0">&#91;</span> -L <span class="re1">$file</span> <span class="br0">&#93;</span> ; <span class="kw1">do</span><br />
&nbsp; <span class="re2">file=</span>$<span class="br0">&#40;</span><a target="blank" href="http://pwet.fr/man/linux/commandes/readlink"><span class="kw2">readlink</span></a> <span class="re1">$file</span><span class="br0">&#41;</span><br />
<span class="kw1">done</span><br />
<span class="kw3">echo</span> <span class="re1">$file</span>
  </div>
  
  </div>
</p>
<p>
  L'autre utilisation classique des liens consiste à s'en servir pour choisir une version de logiciel. Par exemple si l'on a plusieurs version de mon_utilitaire (1.0, 2.0, etc...), si chacune, dans le dossier <kbd>/usr/bin</kbd> est nommée avec sa version comme suffixe (mon_utilitaire-1.0, mon_utilitaire-2.0, etc.), il suffit de faire un lien sur la bonne version au grès des besoins :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>gaston$</span># lien sur la version 1.0</div><div class='command'><span class='prompt'>gaston$</span>ln -s /usr/bin/mon_utilitaire_1.0 /usr/bin/mon_utilitaire</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># Utilisation de mon utilitaire, en version 1.0</div><div class='command'><span class='prompt'>gaston$</span>mon_utilitaire</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># changement de version</div><div class='command'><span class='prompt'>gaston$</span>rm -f /usr/bin/mon_utilitaire</div><div class='command'><span class='prompt'>gaston$</span>ln -s /usr/bin/mon_utilitaire_2.0 /usr/bin/mon_utilitaire</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># Utilisation de mon utilitaire, en version 2.0</div><div class='command'><span class='prompt'>gaston$</span>mon_utilitaire</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  Cette aspect est déjà implémenté dans beaucoup de distribution pour choisir ce que l'on appelle les "alternatives", c'est à dire la bonne version de <kbd>gcc</kbd>, de <kbd>vi</kbd>, de <kbd>smb</kbd>, etc... Sur la Mandriva, la liste des alternatives est disponible dans le dossier <kbd>/etc/alternatives</kbd> et la commande <kbd>update-alternatives</kbd> permet de gérer les liens symboliques pour vous :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>gaston$</span>ls -la /etc/alternatives</div><div class='result'>...</div><div class='result'>gcc -> gcc -> /usr/bin/gcc-4.2.2</div><div class='result'>...</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span>update-alternatives --list gcc</div><div class='result'>/usr/bin/gcc-4.2.2</div><div class='result'>/usr/bin/gcc-3.3.6</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span>update-alternatives --config gcc</div><div class='result'>There are 2 programs which provide `gcc'.</div><div class='result'>Selection    Command</div><div class='result'>-----------------------------------------------</div><div class='result'>*+    1        /usr/bin/gcc-4.2.2</div><div class='result'>2        /usr/bin/gcc-3.3.6</div><div class='result'>Enter to keep the default[*], or type selection number:</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>

<p>
   Dernier aspect du lien symbolique, il peut relier des systèmes de fichiers différents. C'est à dire que l'on peut faire un lien symbolique entre n'importe lesquelles des dossiers/fichiers sans se préoccuper du type de montage du dossier parent (clef usb, cd-rom, nfs, etc..).  
</p>

<p>  
  Maintenant, l'inconvénient des liens symboliques reste leur relative lenteur. En effet, à chaque entrée dans un dossier lié, le fichier du lien symbolique va devoir être lu par le système, interprété, puis celui ci va devoir le fermer pour aller ouvrir le "vrai" fichier ou dossier. Il n'est donc pas très conseillé sur un serveur web par exemple où un dossier va être accédé des centaines de fois par minutes. Un aspect réglé par un autre type de lien, le <kbd>hard-link</kbd>.
</p>

<h3>Le lien "hard"</h3>
<p>
  Si le lien symbolique est géré par le système d'exploitation et ne dépend donc pas du système de fichier utilisé, Le lien "hard" quant à lui est directement géré par un système de fichier. Cela veut déjà dire qu'il ne fonctionnera donc pas pour tous les systèmes de fichier. Un volume monté en FAT par exemple ne passera pas, mais tous les FS sérieux disposent du hard-link (ext3, reiser, xfs, etc..).
</p>
<p>
 Pour bien saisir ce que sont les hard-links, il faut comprendre que, pour les systèmes de fichiers qui le supportent, tous les fichiers/dossiers <em>sont</em> des liens hard. En effet, il faut ici distinguer deux notions : le <em>nom du fichier</em> (avec son nom, son chemin, etc.) et le <em>bloc de données</em> (un paquet de 0 et de 1 localisé à une position N du disque dur). Lorsque l'on crée un fichier, le système va d'abord allouer un <em>bloc de donnée</em> sur le disque dur, puis faire un <em>hard-link</em> entre ce <em>bloc de donnée</em> et le <em>nom de fichier</em>.
</p>
<p>
  Ainsi, si vous avez un fichier qui s'appelle <kbd>toto.txt</kbd> dans le dossier <kbd>/mes_dossiers</kbd>, le nom de fichier <kbd>/mes_donnees/toto.txt</kbd> est en réalité un hard-link entre d'un côté le bloc de données du fichier toto.txt (les 0 et les 1) et le nom de fichier que vous lui avez donné (comprenant son chemin). Il y a donc toujours au moins 1 hard-link entre toto.txt et les données qu'il représente. Ainsi, faire un hard-link sur toto.txt, consiste en réalité à en créer un deuxième...
</p>
<p>
  Cette caractéristique octroie une propriété très utile au hard-link : le bloc de données d'un fichier continue à exister (n'est pas détruit) tant qu'au moins un hard-link pointe dessus. Ainsi si j'ai, pour reprendre l'exemple précédent, mon bloc de donnée pointé par <kbd>/mes_donnees/toto.txt</kbd> et <kbd>/autre_chemin/tutu.txt</kbd>. Si je détruit toto.txt, le bloc de donnée n'est pas détruit et pour le système, c'est comme s'il s'était toujours appelé <kbd>tutu.txt</kbd> et qu'il a toujours été dans le dossier <kbd>/autre_chemin</kbd>. En revanche, si je détruit tutu.txt, le bloc de donnée est perdu, le fichier est physiquement détruit... 
</p>
<p>
  En conséquence, contrairement aux liens symboliques, les hard-links ne peuvent pas être réalisés entre deux fichiers systèmes de fichiers différents, et à fortiori, entre deux volumes d'origine différente (usb, cd-rom, etc.). Autre conséquence, nous ne pouvons créer un <kbd>hard-link</kbd> qu'en deux systèmes de fichiers. 
</p>
<p>
  La commande pour créer un hard-link est <kbd>ln</kbd>, la même donc que pour un lien symbolique mais sans l'argument <kbd>-s</kbd>. Le code suivant reprends le brillant exemple de toto et tutu sur mon disque :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>gaston$</span># création du fichier toto</div><div class='command'><span class='prompt'>gaston$</span>mkdir ~/mes_données</div><div class='command'><span class='prompt'>gaston$</span>echo "Ces données sont celle de toto.. à l'origine ;-)" > ~/mes_données/toto.txt</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># Regardez la deuxième colonne du résultat, le 1 signifie que l'on a 1 hard-link sur</div><div class='command'><span class='prompt'>gaston$</span># le bloc de données toto.txt</div><div class='command'><span class='prompt'>gaston$</span>ls -l ~/mes_données</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># Création du hard-link</div><div class='command'><span class='prompt'>gaston$</span>mkdir ~/autre_chemin</div><div class='command'><span class='prompt'>gaston$</span>ln ~/mes_données/toto.txt ~/autre_chemin/tutu.txt</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># En exécutant cette commande, la deuxième colonne du résultat du ls donne 2, on a donc</div><div class='command'><span class='prompt'>gaston$</span># bien maintenant 2 hard-links sur le bloc de données (toto.txt et tutu.txt) !!</div><div class='command'><span class='prompt'>gaston$</span>ls -l ~/mes_données</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># En exécutant cette commande, la deuxième colonne du résultat du ls donne 2, on a donc</div><div class='command'><span class='prompt'>gaston$</span># bien maintenant 2 hard-links sur le bloc de données (toto.txt et tutu.txt) !!</div><div class='command'><span class='prompt'>gaston$</span>ls -l ~/mes_données</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># Destruction du premier fichier, et donc du premier hard-link</div><div class='command'><span class='prompt'>gaston$</span>rm -f ~/mes_donnes/toto.txt</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># On vérifie que l'on a bien le contenu de toto.txt "transféré" sur tutu.txt</div><div class='command'><span class='prompt'>gaston$</span>cat ~/autre_chemin/tutu.txt</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<h3>Une application du hard-link, l'historisation du pauvre</h3>
<p>
  Une application du hard-link est donc l'historisation. Imaginons que l'on veuille faire la copie de sauvegarde d'un grand de fichiers. Et imaginons aussi que l'on veuille historiser cette sauvegarde sur 10 jours, c'est à dire disposer en permanence 10 dossiers contenant la même copie de ces fichiers, mais représentant chacune l'état du dossier à sauvegarder pour chacun des 10 derniers jours passés. Alors Comment faire ? </p>
<p>
  Tout d'abord, nous allons créer 10 dossiers nommés <kbd>jour.J</kbd>,<kbd>jour.J-1</kbd>,<kbd>jour.J-2</kbd>, ..., <kbd>jour.J-9</kbd>, représentant le backup du jour pour <kbd>jour.J</kbd> à celui d'il y a 9 jours avec <kbd>jour.J-9</kbd>
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>gaston$</span>mkdir ~/historisation</div><div class='command'><span class='prompt'>gaston$</span>cd ~/historisation</div><div class='command'><span class='prompt'>gaston$</span>mkdir jour.J</div><div class='command'><span class='prompt'>gaston$</span>mkdir jour.J-1</div><div class='result'>...</div><div class='command'><span class='prompt'>gaston$</span>mkdir jour.J-9</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>  
  Ensuite, il va falloir copier les fichiers à sauvegarder dans le dossier <kbd>jour.J</kbd> :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/rsync"><span class="kw2">rsync</span></a> -a --delete <span class="sy0">/</span>chemin<span class="sy0">/</span>vers<span class="sy0">/</span>mes_donnees_importantes jour.J
  </div>
  
  </div>
</p>  
<p>Le <kbd>-a</kbd> voulant dire <em>tout</em>-<em>récursivement</em> et le <kbd>--delete</kbd> pour supprimer les fichiers cibles qui ne sont plus dans source). C'est tout pour aujourd'hui, la suite s'effectue le lendemain matin.
</p>
<p>
  Le lendemain donc, nous allons faire descendre tous nos dossiers d'un cran. Tout d'abord nous allons commencer par détruire le dossier <kbd>jour-J-9</kbd> (notre historisation ne portant que sur 10 jours). Puis, nous allons renommer le dossier <kbd>jour.J</kbd> en <kbd>jour.J-1</kbd>, <kbd>jour.J-1</kbd> en <kbd>jour.J-2</kbd>, etc jusqu'à <kbd>jour-J-8</kbd> en <kbd>jour-J-9</kbd>. Ensuite nous allons recréer un nouveau dossier <kbd>jour.J</kbd>. 
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>gaston$</span># On détruit le 9° jour</div><div class='command'><span class='prompt'>gaston$</span>rm -rf jour-J-9</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># renommage des dossiers précédent</div><div class='command'><span class='prompt'>gaston$</span>for jour in $(seq 8 -1 1) ; do</div><div class='command'><span class='prompt'>gaston$</span>let jour_avant=${jour}+1;</div><div class='command'><span class='prompt'>gaston$</span>echo mv jour-J-$jour jour-J-$jour_avant</div><div class='command'><span class='prompt'>gaston$</span>done</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>gaston$</span># création de l'espace pour la nouvelle sauvegarde</div><div class='command'><span class='prompt'>gaston$</span>mkdir jour-J</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>  
<p>
  Ensuite, et c'est là que la magie commence, nous allons, pour chaque fichier du dossier <kbd>jour.J-1</kbd>, faire un hard-link dans le dossier <kbd>jour.J</kbd>. Pour cela nous utilisons la simple commande <kbd>cp</kbd>
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>gaston$</span>cp -lr jour.J-1/* jour.J/</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>  
<p>   
   Le paramètre <kbd>-r</kbd> indique à <kbd>cp</kbd> que la copie <em>recursive</em>. <kbd>-l</kbd> indique quant à lui que <kbd>cp</kbd> ne doit pas copier mais fait des hard-link à la place.
</p>
<p>
  Ceci fait, il suffit de refaire l'opération du jour précédente, à savoir notre rsync  
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>gaston$</span>rsync -a --delete /chemin/vers/mes_donnees_importantes jour.J</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>  
<p> 
 Alors que se passe t-il exactement lors du rsync ? Au moment de faire cette 2nd sauvegarde, nous avons en fait 4 cas de figure : 
  <ol>
    <li>Les fichiers qui n'ont pas changé entre J et J-1 : Je vais donc avoir au moins 2 hard-link sur le même bloc de donnée physique.</li>
    <li>Des fichiers modifiés par rapport à hier : Je vais donc avoir un hard-link sur le nouveau fichier dans le dossier <kbd>Jour.J</kbd> et un autre sur l'ancien dans <kbd>Jour.J-1</kbd></li>
    <li>Des fichiers détruits (option <kbd>--delete</kbd> de rsync) : Le bloc de donnée existe encore grâce à leur hard-link conservé dans <kbd>jour.J-1</kbd> mais n'existe plus dans <kbd>Jour.J</kbd>.</li>
    <li>Des nouveaux fichiers : ils ne sont en hard-link QUE dans <kbd>Jour.J</kbd>.</li>
  </ol>
</p>
<p>
  Ainsi nous avons déjà l'historique sur 2 jours sans prendre plus d'espace disque que la différence de volume entre ces deux jours.
</p>
<p>
 Le 3ième jour nous recommençons à l'étape du renommage des <kbd>jour.J-1</kbd> à <kbd>jour.J-9</kbd>, à nouveau le rsync, et ainsi de suite... jusqu'au 9ieme jour.
</p>
<p>
 Arrivé au 9ieme jour, tous nos dossiers sont plein, nous avons une historisation sur 10 jours et lors de la quotidienne séance de renommage, le dossier <kbd>jour-9</kbd> est supprimé. Du coup tous les fichiers qu'il contient vont voir leur compteur de hard-link décrémenté de 1. Pour ceux qui atteignent 0, c'est la fin, ils disparaissent, mais pour tous les autres, ils continuent de vivre, soit dans le dossier d'origine, soit dans une des 9 sauvegarde précédente. 
</p>

	<a name='chapter_2'></a>
  <h2>Le binding</h2>
	
<p>
  Comme nous l'avons vu, le hard-link souffre de deux contraintes. On ne peut hard-linker QUE des fichiers et toujours de la même partition. C'est à cela que sert le binding. Cette technique sort un peu du cadre du lien (elle n'est pas gérée par la commande <kbd>ln</kbd> mais permet de lier n'importe quel objet sur n'importe quel système de fichier. Cette fonction est assurée par la commande <kbd>mount</kbd> :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>mount --bind dossier_source dossier_cible</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  L'avantage par rapport aux liens symboliques (qui fonctionellement répondent au même besoin), c'est qu'il trompe totalement les applications. Autant une application peut vérifier que le dossier est un lien symbolique et préférer aller sur le vrai dossier (ce que l'on ne veut pas), autant avec un binding elle n'y voit que du feu. Une application pratique de cette technique est de créer rapidement un sous-linux en vue d'un <a class='external' target='_blank' href='//node/1055' >chrootage</a> par exemple. En effet, si l'on cré un dossier <kbd>mon_linux</kbd> dans lequel on bind chaque dossier du linux hôte (/bin, /dev, /lib, /usr, etc...) et que l'on tapes <kbd>chroot mon_linux</kbd>, on est dans un sous linux complétement autonome. Le binding, lien de bas niveau par excellence, est en général à utiliser lorsque le lien symbolique est "trop léger" pour être utilisé et le hard-link par trop "définitif". 
</p>
<p>
  Enfin, comme tous les montages, le bind peut être effectué de manière automatique en l'inscrivant dans le fichier <kbd>/etc/fstab</kbd>
  <code type="text">
     /mon/dossier/source /mon/dossier/cible none bind
  </code
</p>

	<a name='chapter_3'></a>
  <h2>Conclusion</h2>
	
<p>
  Les liens sont sans aucun doute très important sous tous les systèmes *nix, ils permettent rapidement d'adapter, assouplir et étendre en fonctionnalité le concept de base de ces systèmes d'exploitation, à savoir <blockquote><p>Tout n'est que fichier sous *nix, sauf lorsque ce n'est pas le cas <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/></p></blockquote>
</p>    ]]></content>
  </entry>
</feed>
