Il y a deux répertoires foo1
et foo2
.
Au début, je fais un répertoire liMLink par ln -s foo1 bar
. Après cela, je veux changer le symbolique, donc j'ai tapé ln -sf foo2 bar
Mais bar
est toujours lié à foo1
. Symlink foo2
est créé à l'intérieur de foo1
.
Que dois-je taper quand je veux remplacer foo1
par foo2
?
J'ai testé dans trois environnements.
La bonne façon de le faire est d'utiliser le -n, --no-dereference
option comme si oui.
$ ln -snf foo2 bar
Cette cause ln
pour traiter le symboliste existant en tant que fichier. Sinon, il déréférences bar
à foo1
, descend dans foo1
et utilise l'original TARGET
nom comme le LINK_NAME
Et c'est pourquoi vous vous retrouvez avec un lien symbolique à foo2
être créé à l'intérieur de l'foo1
répertoire. Le manoir sur ln
stipule ce qui suit ...
[.____] - N, -NO-Drérerence Traitez Link_Name comme un fichier normal s'il s'agit d'un lien symbolique à un Répertoire [.____]
Vous trouverez ci-dessous la sortie de shell sur mon ordinateur de bureau d'Arch Linux avec la version 8.21 de ln
avec et sans le --no-dereference
Option, j'ai reçu les mêmes résultats que vous avez fait sans le --no-dereference
option, mais en utilisant le --no-dereference
Option qu'il a fonctionné comme prévu.
$ mkdir foo1 foo2
$ ln -s foo1 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ln -sf foo2 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ls -l foo1
total 0
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 foo2 -> foo2
$ ln -snf foo2 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:52 bar -> foo2