Petit topo sur les liens Unix
Introduction
Un fichier Unix est en réalité composé de 3 éléments:
- NomFichier (pointe vers l’inode)
- Inode , contient des infos comme les droits, le propriétaire..(pointe vers les données)
- Données
Rien n’empêche donc de créer un autre “élément” NomFichier2
qui pointe lui aussi vers l’inode déja pointé par NomFichier
.. C’est le lien “normal”.
Si NomFichier3
pointe, non pas vers l’inode, mais vers NomFichier… c’est un lien symbolique..
Exemples
$ echo totoot > toto
$ cat toto
totoot
L’option -i
permet de voir l’inode:
$ ls -i
923134 toto
On créé un lien (non symbolique)
Autrement dit, on donne un second nom au même inode (donc aux mêmes données)
(La commande semble faire pointer vers le nom… alors qu’elle fait pointer vers l’inode pointé par le nom..bref..)
$ ln toto hardlink
$ ls -i
923134 hardlink
923134 toto
Le nouveau nom de fichier affiche bien les mêmes données :
$ cat hardlink
totoot
On créé un lien symbolique qui pointe non plus sur l’inode de toto
, mais sur le nom toto
.
On peut voir que l’inode est différent:
$ ln -s toto symbolink
$ ls -i
923134 hardlink
923140 symbolink
923134 toto
L’option -l
permet de voir que c’est un lien symbolique (le l
juste après l’inode et la flèche à la fin de la ligne)
$ ls -il
total 8
923134 -rw-r--r-- 2 yannick yannick 7 2005-12-07 17:31 hardlink
923140 lrwxrwxrwx 1 yannick yannick 4 2005-12-07 17:35 symbolink -> toto
923134 -rw-r--r-- 2 yannick yannick 7 2005-12-07 17:31 toto
Concrètement, on obtient bien le contenu de toto en appelant symbolink
$ cat symbolink
totoot
Par contre cette fois, si en enlève toto, symbolink ne fonctionne plus… alors que hardlink oui
$ mv toto toto2
$ cat symbolink
cat: symbolink: Aucun fichier ou répertoire de ce type
$ cat hardlink
totoot
On remet toto et symbolink refonctionne
$ mv toto2 toto
$ cat symbolink
totoot
La 3ème colonne indique combien de liens (hard) pointent vers un inode (ci dessous 2 pour 923134)
$ ls -li
total 8
923134 -rw-r--r-- 2 yannick yannick 7 2005-12-07 17:31 hardlink
923140 lrwxrwxrwx 1 yannick yannick 4 2005-12-07 17:35 symbolink -> toto
923134 -rw-r--r-- 2 yannick yannick 7 2005-12-07 17:31 toto
Si on en créé un autre… cela passe donc à 3:
$ ln toto hardkinleretour
$ ls -li
total 12
923134 -rw-r--r-- 3 yannick yannick 7 2005-12-07 17:31 hardkinleretour
923134 -rw-r--r-- 3 yannick yannick 7 2005-12-07 17:31 hardlink
923140 lrwxrwxrwx 1 yannick yannick 4 2005-12-07 17:35 symbolink -> toto
923134 -rw-r--r-- 3 yannick yannick 7 2005-12-07 17:31 toto
Les données ne sont donc supprimées que si l’on supprime le dernier nom poitant vers l’inode.
A noter également que si 2 noms poitent vers le même inode, le sytème affiche la même taille pour chacun des 2… Cela ne signifie pas que les données sont en double!