I. Lien symbolique entre répertoires
De manière générale, un lien symbolique (ou : "symlink") est un raccourci. Voici comment utiliser la commande « ln » pour créer un lien symbolique :
ln -s dossier_cible nom_du_lien.
Dans cet exemple, nous souhaitons qu’en allant sur le répertoire /opt/jdk, nous atterrissions en réalité sur /opt/jdk1_7.2. Cela permet de facilement gérer le changement de version de Java.
Nous allons commencer par créer un lien symbolique entre deux répertoires. Nous utiliserons pour cela la commande « ln » (links) :
ln –s /opt/jdk1_7.2 /opt/jdk
Le lien symbolique « /opt/jdk » sera alors créé.
II. Lien physique vers un fichier
Un lien physique (ou : "hardlink") est utilisé pour faire un lien direct vers un fichier. Le lien physique se crée aussi via la commande "ln", cette fois-ci sans option :
ln /chemin/fichier/a/lier chemin/fichier/lié
Il existe deux types de liens qui permettent de rediriger un fichier vers un autre : les liens physiques (ou matériels) et les liens symboliques.
Avec un lien physique, les données du disque sont pointées par plusieurs entrées de répertoire, contrairement à ce qui se passe avec un lien symbolique.
Un lien matériel (ou physique) est l'information exacte elle-même, située à la même position sur le disque dur. Avec un lien physique, vous pouvez copier certaines données du fichier cible, effacer le reste du fichier, et il continuera à exister.
Un lien symbolique est un fichier qui pointe vers un autre fichier ; si vous supprimez le fichier cible, les liens symboliques pointeront vers un fichier inexistant.
Mais, d'après la documentation originale, il est plus facile de distinguer les différences entre un tout petit lien symbolique et le fichier cible, que les différences entre plusieurs liens matériels. En fait, c'est impossible à distinguer, car il s'agit exactement de la même chose.
Voici le résultat obtenu en entrant la commande ls avec l'option -i (ou –inode), qui permet d'afficher le numéro d'inode dans le système de fichiers :
dupont@dupont-pc:~$ ls -i ~/fichiersource ~/Bureau/monlienphysique 5954521 ~/fichiersource 5954521 ~/Bureau/monlienphysique
Comme dit plus haut, les différents liens physiques pointent vers un même numéro d'index.
Voici le résultat obtenu en entrant la même commande ls -i :
dupont@dupont-pc:~$ ls -i ~/fichiersource ~/Bureau/monliensymbolique 5954521 ~/fichiersource 6876911 ~/Bureau/monliensymbolique
On voit que les deux fichiers pointent vers deux numéros d'inode différents.
Réponse partielle 1 : dans les environnements graphiques (Dolphin, etc.), on ne trouve pas l'option pour créer de lien fixe … et je le regrette parfois.
Réponse partielle 2 : les liens symboliques permettent une meilleure maintenance de l'espace disque. Avec des liens en dur (physiques) partout, il deviendrait difficile de savoir si on a vraiment effacé un fichier du disque.
Réponse partielle 3 : dans le cas où le lien doit pointer vers un autre système de fichiers (autre partition ou autre support de stockage), seul le lien symbolique est possible.
Réponse partielle 4 : dans la gestion des sauvegardes, les liens symboliques ne sont généralement pas suivis, ce qui permet d'éviter de sauvegarder les mêmes fichiers plusieurs fois.
Réponse partielle 5 : inversement, dans certains cas, il faut passer par le lien physique pour que la sauvegarde fonctionne. Il faut alors passer par la console (ligne de commande ou "mc" à installer et essayer). Exemple : je sauvegarde régulièrement "/etc", mais quelques rares paquets demandent un peu de configuration dans "/var/lib/…" ; je mets alors des liens en dur dans un sous-répertoire ad hoc de mon répertoire /etc, pour que la sauvegarde de ces paquets soit aussi assurée.
Réponse partielle 6 : le système de sauvegarde "rsnapshot" utilise les liens physiques, et c'est vraiment bien, renseignez-vous. Mais dans ce cas, comme c'est géré par le script, vous n'avez pas à vous en préoccuper.
fichier source : [source]–>[secteur n du disque]
lien physique/dur : [source]–>[secteur n du disque]←- [lien_dur]
lien symbolique : [lien_symb]–>[source]–>[secteur n du disque]
lien physique/dur : [lien_dur]–>[secteur n du disque]
lien symbolique : [lien_symb]–>?
lien physique/dur : [source_modif]–>[secteur n du disque]←- [lien_dur]
lien symbolique : [lien_symb]–>? [source_modif]–>[secteur n du disque]
On montrera cela par un exemple simple :
On crée un document texte (ici la liste des paquets installés) dans le répertoire home :
dpkg -l>source
On crée un lien physique (que l'on nomme lien_dur) :
ln source lien_dur
À présent, on peut également lire le document source à partir de lien_dur :
gedit lien_dur
Il est possible de connaître le nombre de liens qui amènent au même fichier :
ls -l source ls -l lien_dur
Si on souhaite effacer le fichier source, le document existera toujours :
rm source gedit lien_dur
Pour créer un lien symbolique, on utilise aussi la commande ln, en ajoutant toutefois l'option -s.
On crée un lien symbolique (que l'on nomme ici lien_symb) :
ln -s source lien_symb
On pourra toujours lire source depuis lien_symb :
gedit lien_symb
À la différence du lien physique, après la destruction ou même simplement le renommage de source, le fichier ne sera plus accessible !
rm source gedit lien_symb
On peut repérer les liens symboliques avec ls -F, ils apparaissent avec un @ à la fin.
ls -F
Pour modifier le propriétaire ou/et le groupe d'un lien symbolique, il faut utiliser l'option -h, sinon c'est les propriétés de la cible qu'on change et non celle du lien (le sudo n'est pas indispensable, si on a les droits évidemment) :
sudo chown -h nom_utilisateur_proprio:nom_groupe lien_symb sudo chgrp -h nom_groupe lien_symb
Sur un ordinateur en double amorçage (dual-boot) avec Windows, il peut être intéressant de savoir quels liens symboliques ou physiques fonctionnent, puisque depuis Windows 7, outre les traditionnels raccourcis, Windows offre la possibilité de créer des liens (cette possibilité existait auparavant avec l'utilitaire junction ). Bien sûr, comme MS Windows ne peut pas lire les partitions ext4 et antérieures, tout lien impliquant une partition de type ext ne pourra pas être compris par Windows de manière native (à voir si cela fonctionne avec les drivers permettant de monter des partitions ext sur Windows).
Par contre, Linux lit nativement les partitions NTFS, donc tant Linux que Windows peuvent créer des liens sur des partitions NTFS. Empiriquement (d'après tests sous Windows 7 et Linux Mint 17.3), on remarque que :
—-
Contributeurs : à partir des documents cités, Matifou, pour l'explication graphique : mohican