Qual é o significado de 'ln -sf' no Linux?

21

Eu tenho 2 perguntas. O primeiro é para as -sfopções e o segundo é para o uso mais específico das -fopções.

Ao pesquisar no Google, descobri a descrição do comando ln, opção -se -f.

(copie de http://linux.about.com/od/commands/l/blcmdl1_ln.htm )

-s, --symbolic : make symbolic links instead of hard links
-f, --force : remove existing destination files

Eu entendo essas opções individualmente. Mas, como poderia usar isso -se -fopções simultaneamente? -sé usado para criar um arquivo de link e -fé usado para remover um arquivo de link. Não consigo entender essa situação e por que usar esta opção mesclada.

Para saber mais sobre lncomando, fiz alguns exemplos.

$ touch foo     # create sample file
$ ln -s foo bar # make link to file
$ vim bar       # check how link file works: foo file opened
$ ln -f bar     # remove link file 

Tudo funciona bem antes do próximo comando

$ ln -s foo foobar
$ ln -f foo     # remove original file

Pela descrição da -fopção, este último comando não deve funcionar, mas funciona! fooé removido.

Por que isso está acontecendo?

casamia
fonte
3
-fsignifica força ( --force); não para remover!
Pandya
3
Para adicionar um motivo à resposta de terdon ... Um dos usos é ao atualizar manualmente as bibliotecas. Se você fizer isso em duas etapas - primeiro rm para remover o link antigo, e ln -s para criar um novo - a biblioteca não funcionará entre as operações ... o que se tornará um grande problema se o comando ln precisar da biblioteca trabalhar. Portanto, com ln -sf, o link antigo é substituído por um novo, sem que o link seja quebrado.
Baard Kopperud 26/03

Respostas:

42

Primeiro de tudo, para descobrir o que as opções de um comando fazem, você pode usar man command. Então, se você executar man ln, verá:

   -f, --force
          remove existing destination files

   -s, --symbolic
          make symbolic links instead of hard links

Agora, o -sque você disse é tornar o link simbólico em vez de difícil. O -f, no entanto, não é para remover o link. É sobrescrever o arquivo de destino, se houver algum. Ilustrar:

 $ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 bar
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 foo

$ ln -s foo bar  ## fails because the target exists
ln: failed to create symbolic link bar’: File exists

$ ln -sf foo bar   ## Works because bar is removed and replaced with the link
$ ls -l
total 0
lrwxrwxrwx 1 terdon terdon 3 Mar 26 13:19 bar -> foo
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 foo
terdon
fonte