ln - Créer des liens entre fichiers.
Sous Unix, il existe deux types de `liens' entre fichiers, que l'on
nomme généralement liens matériels (ou physiques) et liens symboliques
(ou logiques).
Un lien matériel est simplement une manière de nommer
un fichier. Un fichier peut avoir plusieurs noms. Un fichier n'est effacé
réellement que lorsque son dernier nom est supprimé. Le nombre de noms
d'un fichier est indiqué par la commande
ls(1).
Il n'y a pas de notion de nom `original' : tous les noms d'un fichier ont
exactement la même importance. Tous les noms d'un fichier se trouvent
généralement - mais ce n'est pas obligatoire - dans le système de fichiers
contenant les données du fichier.
Un lien symbolique est d'un tout autre genre. Il s'agit d'un petit fichier
spécial, qui contient un chemin d'accès. Ainsi un lien symbolique peut
pointer vers un système de fichier différent de celui qui l'accueille.
Il peut également pointer, grâce à NFS, vers un système de fichiers
appartenant à une autre machine. Enfin, un lien symbolique ne pointe
pas nécessairement vers un fichier existant.
Lorsque l'on accède à un lien symbolique (avec les appels systèmes
open(2)
ou
stat(2)),
le nom du lien symbolique est remplacé, par le noyau Unix, par une
référence au fichier vers lequel le lien pointe.
Toutefois, avec les appels
rm(1)
et
unlink(2)
le lien lui-même est supprimé, et non pas le fichier visé.
Il existe des appels systèmes spéciaux
lstat(2)
et
readlink(2)
qui renvoient le statut du lien symbolique, et le nom du fichier vers
lequel il pointe. Pour de nombreux autres appels-systèmes, il existe
une frange d'incertitudes et de variations entre les différents systèmes
pour savoir si la fonction s'applique au lien symbolique lui-même, ou au
fichier cible.
ln
crée des liens entre fichiers. Par défaut il s'agit de liens matériels.
Si l'on utilise l'option
-s,
les liens seront symboliques (logiques).
Si l'on n'indique qu'un seul nom de fichier, un lien vers ce fichier
est créé dans le répertoire courant. Le nom de ce lien sera le même
que celui du fichier visé (il s'agit là d'une extension GNU).
Sinon, si le dernier argument indique un répertoire existant,
ln
créera des liens sur chacun des fichiers
source
indiqués dans ce répertoire. Les noms seront égaux à ceux des fichiers
source
visés. (Consultez toutefois l'option
--no-dereference
plus bas).
Si l'on indique seulement deux noms de fichiers, un lien sera créé avec
le nom
dest
pointant vers le fichier
source.
Il est interdit d'indiquer plus de deux arguments si le dernier nom n'est
pas un répertoire.
Par défaut,
ln
ne supprime pas les fichiers ni les liens symboliques existants.
(Ainsi on peut l'utiliser à des fins de verrouillage, il échouera
si
dest
existe déjà).
On peut toutefois forcer l'écrasement avec l'option -f.
Avec les implémentations existant actuellement, seul le Super-User peut
créer un lien matériel sur un répertoire, et encore, c'est souvent totalement
impossible. POSIX interdit aux appels système
link(2)
et à l'utilitaire
ln
de créer des liens physique sur un répertoire (mais n'interdit pas les liens
matériels entre différents systèmes de fichiers).
Les variables LANG, LC_ALL, LC_CTYPE et LC_MESSAGES
ont leurs significations habituelles.
POSIX 1003.2. Toutefois, POSIX 1003.2 (1996) ne parle pas des liens symboliques.
Ceux-ci ont été introduits par BSD, et n'existent pas dans System V release 3
et antérieurs.
Christophe Blaess, 1998-2003.