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

1806
giZm0

При запуске (на 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 

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

2
Вопрос был [перекрестно опубликован в Unix и Linux] (http://unix.stackexchange.com/questions/51963/why-doesnt-ln-s-tell-that-it-fails-when-creating-a-symlink -в-ан-существующего-syml) Der Hochstapler 10 лет назад 0

1 ответ на вопрос

3
dset0x

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

% 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.

-SV работает так же, да. Но это говорит вам, что что-то пошло не так. Что, вероятно, потому, что у вас есть это "borken" ссылка giZm0 12 лет назад 0
@ giZm0 Это не выводит никакой ошибки для меня. Как вы можете видеть в приведенном выше блок-цитате man-страницы, он должен, по крайней мере, создать ее, даже если он предупреждает вас о том, что он не ссылается на то, что существует:% mkdir ab% ln -sv ac 'c' -> 'a'% ln -s bc 'c / b' -> 'b' dset0x 12 лет назад 1
Как я уже ответил в [кросс-пост] (http://unix.stackexchange.com/a/122826/50855), указание `-ns` приводит к неудаче` ln`. `-v` не имеет отношения к результату. A-B-B 10 лет назад 0

Похожие вопросы