Почему ln -s не запрашивает сбой при создании символической ссылки на существующий каталог с символическими ссылками?

При запуске (в Linux разные вариации Ubuntu):

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

Это терпит неудачу, не говоря, что это терпит неудачу. Но если вы сделаете то же самое с файлом вместо этого, или добавьте v к параметру, он скажет вам, что он потерпел неудачу:

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

или же

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

Сбой с ошибкой msg:

ln: failed to create symbolic link

Для меня это кажется очень странным поведением? Для этого есть причина?

1 ответ

Решение

Это на самом деле не терпит неудачу. Он создает вашу ссылку внутри данного каталога:

% 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

Это поведение описано в man-странице:

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

Однако эта ссылка не может вернуться к dir_2, так как она не установлена ​​правильно. Это также ожидаемое поведение, и не должно провалиться. Из справочной страницы:

Символьные ссылки могут содержать произвольный текст; если позже разрешено, относительная ссылка интерпретируется относительно его родительского каталога.

Кстати, у меня так же работает даже с -sv, Может быть, вы используете другую реализацию ln, Вы уверены, что не используете -T? Может быть, это установлено в вашем ~/.bashrc/~/.zshrc/так далее. Пытаться which ln,

Другие вопросы по тегам