Quelle est la signification de 'ln -sf' sous Linux?

21

J'ai 2 questions. Le premier est pour les -sfoptions et le second est pour l'utilisation plus spécifique des -foptions.

En recherchant sur Google, j'ai compris la description de la commande ln, de l'option -set -f.

(copie depuis 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

Je comprends ces options individuellement. Mais, comment pourrait-on utiliser cela -set les -foptions simultanément? -sest utilisé pour créer un fichier de lien et -fest utilisé pour supprimer un fichier de lien. Je ne peux pas comprendre cette situation et pourquoi utiliser cette option fusionnée.

Pour en savoir plus sur la lncommande, j'ai fait quelques exemples.

$ 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 

Tout fonctionne bien avant la prochaine commande

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

Par la description de l' -foption, cette dernière commande ne devrait pas fonctionner, mais elle le fait! fooest retiré.

Pourquoi cela arrive-t-il?

casamia
la source
3
-fsignifie force ( --force); pas pour enlever!
Pandya
3
Pour ajouter une raison à la réponse de terdon ... L'une des utilisations est lors de la mise à jour manuelle des bibliothèques. Si vous le faites en deux étapes - d'abord rm pour supprimer l'ancien lien, puis ln -s pour en créer un nouveau - la bibliothèque ne fonctionnera pas entre les opérations ... ce qui devient un gros problème si la commande ln a besoin de la bibliothèque travailler. Ainsi, avec ln -sf, l'ancien lien est remplacé par un nouveau, sans que le lien soit jamais rompu.
Baard Kopperud

Réponses:

42

Tout d'abord, pour trouver ce que font les options d'une commande, vous pouvez utiliser man command. Donc, si vous courez man ln, vous verrez:

   -f, --force
          remove existing destination files

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

Maintenant, le -s, comme vous l'avez dit, est de rendre le lien symbolique plutôt que dur. Le -fcependant, est de ne pas supprimer le lien. Il s'agit d'écraser le fichier de destination s'il existe. Pour illustrer:

 $ 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
la source