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

17

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

Por googling, eu descobri a descrição do comando ln , opção -s e -f .

(copie de link )

-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 as opções -s e -f 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 essa opção mesclada.

Para saber mais sobre o comando ln , 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 opção -f , este último comando não deve funcionar, mas funciona! foo foi removido.

Por que isso está acontecendo?

    
por casamia 26.03.2015 / 12:16

1 resposta

37

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 -s , como você disse, é tornar o link simbólico em oposição ao hard. O -f , no entanto, não é remover o link. É sobrescrever o arquivo de destino, se houver um. Para 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
    
por 26.03.2015 / 12:20

Tags