Un lien symbolique est un petit fichier qui contient l' emplacement (c'est-à-dire le chemin et le nom de fichier) d'un fichier cible, avec un indicateur dans l'entrée de répertoire indiquant qu'il s'agit d'un lien symbolique.
Lorsque vous ouvrez un lien symbolique, le système d'exploitation suivra l'emplacement pour trouver le fichier cible. Si la cible est elle-même un lien symbolique, elle suit également son emplacement (1) (2) jusqu'à ce que l'emplacement pointe vers un fichier qui n'est pas un lien symbolique (appelons-le FinalFile ). Ensuite, le système d'exploitation obtient l' inode du FinalFile (l'inode contient des métadonnées comme le temps de modification et a également un pointeur vers les données du fichier). Enfin l'inode du FinalFile est ouvert. Désormais, le processus utilise cet inode pour lire / écrire dans le fichier. En conséquence, changer le nom ou le chemin du lien symbolique, supprimer le lien symbolique, changer le chemin ou le nom du fichier final ou même supprimer le fichier final(3) n'a aucun effet sur le processus; il lit toujours depuis le même inode.
Dans la plupart des cas, les opérations sur les données du fichier sur le lien symbolique affecteront le fichier final (par exemple, la lecture et l'écriture sur le lien symbolique lira / écrit dans le fichier final ) mais il y a des exceptions: l' readlink()
appel système lit le contenu du lien symbolique lui-même.
Les opérations de métadonnées de fichier (comme renommer ou supprimer), d'autre part, affectent généralement le lien symbolique. Mais il y a des exceptions ici aussi: l' lstat()
appel système est similaire stat()
, sauf qu'il renvoie des informations sur le lien symbolique lui-même plutôt que sur le FinalFile (2).
(1) Il y a une limite sur le nombre de niveaux et les choses deviennent un peu plus complexes si l'emplacement dans le lien symbolique est un chemin relatif.
(2) Lire le lien symbolique (7): gestion des liens symboliques pour plus de détails.man 7 symlink
(3) La rm
commande ou l' unlink()
appel système ne supprime pas physiquement un fichier. Il supprime l'entrée de répertoire qui pointe vers l'inode du fichier. Le fichier lui-même n'est supprimé que si les deux a) il n'y a plus d'entrées de répertoire (liens durs) faisant référence à son inode et b) aucun processus n'a ouvert le fichier.