Pourquoi créer un lien comme celui-ci: ln -nsf?

42

Qu'est-ce que cela fait?

ln -nsf

Je sais que ln -scrée un lien symbolique, pas un lien dur qui signifie que vous pouvez le supprimer et il ne supprime pas la pensée à laquelle il est lié. Mais que signifient les autres choses? (-nf)

Mise à jour: d' accord ... je me suis donc rappelé que vous pouvez trouver ces informations à partir de la ligne de commande. Voici ce que j'ai découvert en tapant 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

Mais ce n’est toujours pas très clair pour moi quelles en sont les implications. Pourquoi voudrais-je créer un lien soft / sym comme celui-ci?

Andrew
la source
1
Même si vous n'utilisez pas, -svous pouvez supprimer le lien sans supprimer le fichier d'origine. Les liens physiques augmentent le nombre de liens du fichier afin qu'il ne soit pas supprimé lorsque vous supprimez un seul des liens.
Amok
Ce n'est pas tout à fait la différence entre un lien dur et un lien symbolique. Un lien physique pointe vers les mêmes octets (inode) sur le disque. Un lien symbolique pointe vers un autre fichier par nom de fichier .
Greg Hewgill
Il y a aussi des pages de manuel. c'est-à-dire Run Man ln. Ou homme, pour en savoir plus sur ce système d'aide. Vous pouvez également obtenir des pages de manuel en ligne ...
Peter Cordes

Réponses:

43

Depuis la page de manuel 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.
Stimms
la source
32

l' -noption (avec -f) oblige lnà mettre à jour un lien symbolique vers un répertoire. Qu'est-ce que ça veut dire?

supposons que vous ayez 2 annuaires

  • foo
  • bar

et un lien symbolique existant

  • baz -> bar

maintenant vous voulez mettre à jour baz pour indiquer foo à la place. si vous faites juste

ln -sf foo baz

vous auriez

  • baz / foo -> foo
  • baz -> bar (inchangé), et donc
  • bar / foo -> foo

si vous ajoutez -n

ln -sfn foo baz

vous obtenez ce que vous voulez.

  • baz -> foo

c'est ce que «non-déréférence» signifie: ne résolvez pas un lien existant et ne placez pas le nouveau lien dans ce répertoire, mais simplement le mettre à jour.

Marian Theisen
la source
2
Réponse de loin la plus utile.
Kobejohn
1

Voici toutes les options pour ln. Vous trouverez -n et -f ici.

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

Vous pouvez taper "man ln" pour trouver de telles choses:

   -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
la source
20
Je ne comprends toujours pas exactement ce que cela signifie
Andrew
-1

-f, --force supprime les fichiers de destination existants

-n, --no-dereference traite la destination qui est un lien symbolique vers un répertoire comme s'il s'agissait d'un fichier normal

ennuikiller
la source
-5

-f indique que si la cible de votre commande est un fichier existant, il doit être supprimé et remplacé par le nouveau lien. (Notez que dans les systèmes influencés par Unix, "fichier" peut inclure des répertoires, des liens, des pipes, etc.)

-n modifie -f, en disant que si la cible que vous spécifiez est un lien symbolique existant, il ne doit pas être supprimé.

CarlF
la source
3
Votre description de -nest fausse. -fpar lui-même ne remplacera pas un lien symbolique vers un répertoire. Lors du remplacement d'un lien symbolique vers un répertoire, il -nest nécessaire de traiter le lien symbolique existant comme un fichier normal au lieu d'un répertoire.
Brian