Translation(s): English - Français - Italiano
ln crée des liens entre des fichiers.
Il y a deux types de liens dans les systèmes d'exploitation de type Unix (ce qui inclut Linux) appelés habituellement "lien dur" (hard link) et "lien symbolique" (soft link) :
Un lien dur est juste le nom d'un fichier (et un fichier peut porter plusieurs noms). Le fichier est supprimé du disque seulement lorsque le dernier nom est suprimé. Le nombre de noms est obtenu par la commande ls(1). Il n'y a pas de nom `original' : tous les noms ont le même statut. Habituellement - mais ce n'est pas une obligation - tous les noms d'un fichiers se trouvent sur le système de fichiers qui contient aussi ses données.
Un soft link (ou "lien symbolique", ou encore symlink) est un animal complètement différent : c'est un petit fichier spécial qui contient un nom de chemin. Thus, un lien symbolique peut pointer vers des fichiers situés dans des systèmes de fichiers différents (et même avec un montage NFS, sur des machines différentes) ; ils n'ont même pas besoin de pointer vers un fichier existant vraiment. Quand on y accède (avec les appels systèmes open(2) ou stat(2)), le noyau du système d'exploitation remplace la référence à un symlink par la référence au nom de fichier à travers le nom du chemin. (Néanmoins, avec les commande rm(1) et unlink(2) c'est le lien lui-même qui est supprimé et non le fichier vers lequel il pointe. Il existe des appels systèmes spéciaux, lstat(2) et readlink(2) qui donnent le statut d'un lien symbolique et le nom du fichier vers lequel il pointe. Pour d'autres appels systèmes, il y a une certaine incertitude et variabilité selon les systèmes d'exploitations pour savoir si l'opération s'applique au lien symbolique ou au fichier cible.)
Par défaut, ln crée des liens durs entre des fichiers ; mais avec l'option -s, c'est un lien symbolique (ou `soft'link) qui est créé.
Si un seul fichier est donné en argument, le lien vise le fichier dans le répertoire courant, c'est-à-dire qu'il est créé un lien vers ce fichier dans le répertoire courant dont le nom est le même que celui du (dernier composant du) nom de ce fichier. (C'est une extension de GNU.) Autrement, si le dernier argument désigne un répertoire existant, ln crée un lien vers chacuns des fichiers sources de ce répertoire dont le nom est équivalent à celui du (dernier composant du) nom du fichier source. (Voir cependant la description de l'option --no-dereference plus loin). Sinon, si seulement 2 fichiers sont donnés, ln crée un lien nommé destination au fichier source. C'est une erreur si le dernier argument n'est pas un répertoire ou si plus de 2 noms de fichiers sont donnés.
Par défaut, ln ne supprime pas des fichiers existants ou des liens symboliques existants. (Ainsi, il peut être utilisé dans un but de verrouillage : la commande ne réussira que si le fichier destination n'existe pas déjà.) Cependant on peut forcer la commande avec l'option -f.
Dans les implémentations existantes, si il est tout à fait possible de créé un lien dur vers un répertoire, seul le super-utilisateur peut le faire. POSIX interdit l'appel système(2) et l'usage de ln pour faire des liens durs vers des répertoires (mais il n'interdit pas à des liens durs de franchir les frontières d'un système de fichier).
Liens externes
Page du Manuel ln(1).