Intereting Posts

Почему 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 

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

Потому что во втором ln это не терпит неудачу, он создает

 symlink_dir/dir_2 -> dir_2 

символическая ссылка

Сделайте:

 ls -l symlink_dir/dir_2 

И вы увидите там (возможно, сломанную) символическую ссылку.

Вот как ln предназначен для работы, если целью является каталог (или символическая ссылка на каталог).

Третий ln может потерпеть неудачу, потому что уже существует dir_2 внутри symlink_dir (aka dir_2 ).

Как желательно, указание -n сделает ln fail во второй команде:

 $ ln -ns realdir symdir $ ln -ns realdir symdir ln: creating symbolic link `symdir' to `realdir': File exists 

Заметим, что -v конечно, не имеет отношения к исходу.

Вы можете увидеть, что происходит, и добиться желаемого поведения с помощью опций ln . Используйте этот псевдоним для ln :

 alias ln='\ln -vsn' 

Опции:

  -v, --verbose print name of each linked file -f, --force remove existing destination files -n, --no-dereference treat destination that is a symlink to a directory as if it were a normal file