Por que ln -s diz que falha ao criar um symlink em um diretório simbolizado existente?

6

Ao executar (no linux diferentes variações do ubuntu):

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

Ele falha sem dizer que ele falha. Mas se você fizer a mesma coisa em um arquivo ou adicionar v à opção, ele diz que ele falha:

>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

Ele falha com a mensagem de erro:

ln: failed to create symbolic link

Para mim, isso parece ser um comportamento muito estranho? Existe uma razão para isso?

    
por giZm0 16.10.2012 / 09:39

3 respostas

14

Porque no segundo ln não falha, cria um

symlink_dir/dir_2 -> dir_2

link simbólico

Faça um:

ls -l symlink_dir/dir_2

E você verá um link simbólico (provavelmente quebrado) lá.

É assim que ln deve funcionar se o destino for um diretório (ou um link simbólico para um diretório).

Um terceiro ln pode falhar porque já existe um dir_2 dentro de symlink_dir (também conhecido como dir_2 ).

    
por 16.10.2012 / 09:47
1

Conforme desejado, a especificação -n fará com que ln falhe no segundo comando:

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

Note que -v é obviamente irrelevante para o resultado.

    
por 02.04.2014 / 22:12
0

Você pode ver o que acontece e alcançar o comportamento desejado com as opções ln . Use este alias para ln :

alias ln='\ln -vsn'

ln opções:

   -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
    
por 16.10.2012 / 10:07