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

41

O que isso faz?

ln -nsf

Eu sei que ln -scria um link simbólico, não um link físico, o que significa que você pode excluí-lo e não excluirá o que 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 ao digitar 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á muito claro para mim quais são as implicações disso. Por que eu gostaria de criar um link macio / sym como este?

Andrew
fonte
1
Mesmo se você não usar, -svocê pode excluir o link sem excluir o arquivo original. Os links físicos aumentam a contagem de links do arquivo, para que ele não seja excluído quando você excluir apenas um dos links.
10409 Amok
Essa não é a diferença entre um link físico e um link simbólico. Um link físico aponta para os mesmos bytes (inode) no disco. Um link flexível aponta para outro arquivo por nome de arquivo .
Greg Hewgill
Existem também páginas de manual. ou seja, corra man ln. Ou homem homem, para aprender sobre esse sistema de ajuda. Você pode obter páginas de manual on-line, também ...
Peter Cordes

Respostas:

43

Na 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.
caules
fonte
31

a -nopção (junto com -f) força lna atualização de 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ê deseja atualizar o baz para apontar para foo . se você apenas fizer

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 'sem desreferência': não resolva um link existente e coloque o novo link dentro desse diretório, mas apenas atualize-o.

Marian Theisen
fonte
2
Resposta mais útil de longe.
19418 kobejohn
1

Aqui estão todas as opções para 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.
bmargulies
fonte
-1

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
Derek Slager
fonte
19
Eu ainda não compreender exatamente o que isso significa
Andrew
-1

-f, --force remove arquivos de destino existentes

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

ennuikiller
fonte
-5

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

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

CarlF
fonte
3
Sua descrição de -nestá errada. -fpor si só, não substituirá um link simbólico para um diretório. Ao substituir um link simbólico para um diretório, -né necessário tratar o link simbólico existente como um arquivo normal em vez de um diretório.
27711 Brian