Por que criar um link como este: ln -nsf?

32

O que isso faz?

ln -nsf

Eu sei que ln -s cria um link simbólico, não um link físico, o que significa que você pode excluí-lo e não excluirá o link ao qual está vinculado. Mas o que as outras coisas significam? (-nf)

Atualização: ok ... então eu lembrei que você pode encontrar essas coisas na linha de comando. Aqui está o que eu descobri digitando ln --help :

-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

Mas isso ainda não está claro para mim quais são as implicações disso. Por que eu iria querer criar um link soft / sym como este?

    
por Andrew 10.12.2009 / 03:04

6 respostas

39

Da página de manual do BSD:

 -f    If the target file already exists, then unlink it so that the link
           may occur.  (The -f option overrides any previous -i options.)

 -n    If the target_file or target_dir is a symbolic link, do not follow
           it.  This is most useful with the -f option, to replace a symlink
           which may point to a directory.
    
por 10.12.2009 / 03:06
18

a opção -n (junto com -f ) força ln a atualizar um link simbólico para um diretório. o que isso significa?

suponha que você tenha 2 diretórios

  • foo
  • barra

e um link simbólico existente

  • baz - > bar

agora você quer atualizar baz para foo . se você acabou de fazer

ln -sf foo baz

você receberia

  • baz / foo - > foo
  • baz - > bar (inalterado) e, portanto,
  • bar / foo - > foo

se você adicionar -n

ln -sfn foo baz

você consegue o que quer.

  • baz - > foo

é isso que significa "não-desreferencia": não resolva um link existente e coloque o novo link dentro desse diretório, apenas atualize-o.

    
por 04.04.2016 / 09:33
2

Aqui estão todas as opções para o ln. Você encontrará -n e -f aqui.

 -F    If the target file already exists and is a directory, then remove
       it so that the link may occur.
       The -F option should be used with either -f or -i options.  If
       none is specified, -f is implied.
       The -F option is a no-op unless -s option is specified.

 -h    If the target_file or target_dir is a symbolic link, do not
       follow it.  This is most useful with the -f option, to replace 
       a symlink which may point to a directory.

 -f    If the target file already exists, then unlink it so that the
       link may occur.  (The -f option overrides any previous -i options.)

 -i    Cause ln to write a prompt to standard error if the target file
       exists.  If the response from the standard input begins with the
       character 'y' or 'Y', then unlink the target file so that the link
       may occur.  Otherwise, do not attempt the link.  (The -i option
       overrides any previous -f options.)

 -n    Same as -h, for compatibility with other ln implementations.

 -s    Create a symbolic link.

 -v    Cause ln to be verbose, showing files as they are processed.
    
por 10.12.2009 / 03:06
0

Você pode digitar "man ln" para encontrar essas coisas:

   -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 10.12.2009 / 03:06
0

-f, --force               remover arquivos de destino existentes

-n, --no-dereference               trata destino que é um link simbólico para um diretório como se fosse um arquivo normal

    
por 10.12.2009 / 03:06
-5

-f diz que se o destino do seu comando for um arquivo existente, ele deve ser removido e substituído pelo novo link. (Note que em sistemas influenciados pelo Unix, "file" pode incluir diretórios, links, pipes, etc.)

-n modifica -f, dizendo que se o alvo especificado for um link simbólico existente, ele não será removido.

    
por 10.12.2009 / 04:02