Pourquoi ln -s ne s’informe-t-il pas qu’il échoue lors de la création d’un lien symbolique vers un répertoire lié existant? [fermé]

2

Lors de l'exécution (sur différentes variantes d'ubuntu sous Linux):

>ln -s dir_1 symlink_dir
>ln -s dir_2 symlink_dir

Il échoue sans dire qu'il échoue. Mais si vous faites la même chose sur un fichier à la place ou, ajoutez v à l'option, elle vous avertit que cela échoue:

>ln -s file_1 symlinkg_file
>ln -s file_2 symlinkg_file

ou

>ln -sv dir_1 symlink_dir
>ln -sv dir_2 symlink_dir

Il échoue avec le message d'erreur:

ln: failed to create symbolic link

Pour moi, cela semble être un comportement très étrange? Y a-t-il une raison à cela?

giZm0
la source
La question a été transmise à Unix et Linux
Der Hochstapler

Réponses:

3

Cela n'échoue pas réellement. Il crée votre lien dans le répertoire donné:

% mkdir dir_1 dir_2
% ln -s dir_1 symlink_dir
% ln -s dir_2 symlink_dir
% ls -l
total 0
drwxr-xr-x 2 user group 60 Oct 16 12:47 dir_1
drwxr-xr-x 2 user group 40 Oct 16 12:47 dir_2
lrwxrwxrwx 1 user group  5 Oct 16 12:47 symlink_dir -> dir_1
% ls -l dir_1
total 0
lrwxrwxrwx 1 user group  5 Oct 16 12:47 dir_2 -> dir_2

Ce comportement est décrit dans la page de manuel:

 ln [OPTION]... TARGET... DIRECTORY     (3rd form)
 ...
 In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.

Cependant, ce lien ne parvient pas à renvoyer à dir_2 car il n'est pas défini correctement. Ce comportement est également attendu et ne doit pas échouer. De la page de manuel:

Les liens symboliques peuvent contenir du texte arbitraire; s'il est résolu ultérieurement, un lien relatif est interprété par rapport à son répertoire parent.

À propos, cela fonctionne de la même manière pour moi même avec -sv. Peut-être que vous utilisez une implémentation différente de ln. Êtes-vous sûr de ne pas utiliser -T? Peut-être que cela est défini dans votre ~/.bashrc/ ~/.zshrc/ etc. Essayez which ln.

dset0x
la source
-sv fonctionne de la même manière oui. Mais cela vous dit que quelque chose ne va pas. Ce qui est probablement parce que vous avez c'est un lien "borken"
giZm0
1
@ giZm0 Il ne génère aucune erreur pour moi. Comme vous pouvez le voir dans la page de manuel blockquote ci-dessus, il devrait au moins la créer, même si elle vous avertit qu'elle n'est pas liée à quelque chose qui existe:% mkdir ab% ln -sv ac 'c' -> 'a'% ln -sv bc 'c / b' -> 'b'
dset0x
Comme j'ai répondu dans le message croisé , la spécification de -nsmake lnéchoue comme vous le souhaitez. -vest sans rapport avec le résultat.
Acumenus