Juste pour clarifier les choses au cas où Google voudrait bien indexer ce billet, dédié aux néophytes linuxiens sous bash dans mon genre.
Un lien ressemble un peu aux raccourcis qui sont une voie plus courte pour accéder à un emplacement dans l'arborescence géré par le système d'exploitation. Les raccourcis sont fait pour être lus par une couche logicielle conçue pour afficher le raccourci de manière graphique. Le raccourci peut contenir un lien vers l'icône qui va servir à représenter le raccourci.
Les liens, eux, ne sont pas fait pour être jolis graphiquement, ils servent basiquement à proposer une voie plus rapide (et ne servent pas à autre chose.) Il en est de deux sortes : les symboliques et les physiques. On dit aussi soft and hard links, soit en traduction littérales liens mous et durs. Un synonyme de lien physique : lien matériel.
Sous GNU/Linux, c'est la commande
ln
qui créé ces liens. Par défaut, elle créé des liens physiques lorsque cela est possible. Par exemple : ln truc machin
va créer un lien physique vers truc et qui va s'appeler machin. (Traduction : link truc with a new name : machin.) Ces liens sont physiques parce qu'une fois créé, il n'y a plus de différences entre truc
et machin
: ils pointent tous deux vers le même fichier physique. Si on supprime truc
, le fichier physique ne sera pas effacé et s'appelera machin
. La commande ls -l machin
permet de connaître le nombre de noms du fichier machin
.
Des liens symboliques sont créés avec la commande ln
lorsqu'on ne peut pas créer de lien matériel (typiquement lorsqu'on veut créer un lien d'un périphérique à un autre ou qu'on veut créer un lien vers un dossier). Il faut alors lui passer l'argument -s
de la sorte : ln -s truc machin
, qui va créer un fichier (le lien) qui va s'appeler machin, et qui sera un lien vers truc.
L'intérêt des liens symboliques résident dans le fait qu'on peut faire des liens symboliques vers un serveur distant. Par exemple, sur un réseau local, on peut créer un lien symbolique vers une ressource du réseau (le dossier qui contient les fichiers musicaux de votre voisin par exemple...)
Astuce pour aller plus vite : on peut simplement exécuter la commande ln bidule/truc
pour créer un lien physique vers bidule/truc qui s'appellera pareillement, dans le répertoire courant. On aura alors deux noms pour le fichier truc : truc et bidule/truc.
Tout lien peut être détruit par la fonction rm. Détruire un lien symbolique détruit juste le fichier idoine, mais détruire un lien matériel peut aller jusqu'à détruire le fichier lui-même si et seulement si le lien matériel supprimé était le seul lien matériel vers le fichier.
Voilà l'astuce et la raison de ce billet : malgré tout, si la fonction rm refuse de détruire un lien symbolique qui s'avère être un répertoire avec l'erreur "is a directory ou est un répertoire'', c'est que vous avez simplement écrit rm lien/
au lieu d'écrire rm lien
... Un slash de trop et c'est la mort.