Warum einen Link wie diesen erstellen: ln -nsf?

42

Was macht das?

ln -nsf

Ich weiß, dass ln -sein symbolischer Link erstellt wird, kein fester Link, was bedeutet, dass Sie ihn löschen können und der Gedanke, mit dem er verknüpft ist, nicht gelöscht wird. Aber was bedeuten die anderen Dinge? (-nf)

Update: Okay ... also ich erinnere mich, dass Sie dieses Zeug über die Befehlszeile finden können. Folgendes habe ich beim Tippen herausgefunden 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

Aber mir ist immer noch nicht ganz klar, welche Auswirkungen dies hat. Warum sollte ich so einen Soft / Sym-Link erstellen wollen?

Andrew
quelle
1
Auch wenn Sie nicht verwenden -s, können Sie den Link löschen, ohne die Originaldatei zu löschen. Harte Links erhöhen die Linkanzahl der Datei, sodass diese nicht gelöscht wird, wenn Sie nur einen der Links zu dieser Datei löschen.
Amok
Das ist nicht ganz der Unterschied zwischen einem festen Link und einem symbolischen Link. Ein fester Link verweist auf dieselben Bytes (Inode) auf der Festplatte. Ein Softlink verweist anhand des Dateinamens auf eine andere Datei .
Greg Hewgill
Es gibt auch Manpages. dh man läuft ln. Oder man man, um mehr über dieses Hilfesystem zu erfahren. Manpages können auch online abgerufen werden ...
Peter Cordes

Antworten:

43

Aus der BSD-Manpage:

 -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
quelle
32

Die -nOption (zusammen mit -f) erzwingt lndie Aktualisierung einer symbolischen Verknüpfung zu einem Verzeichnis. was bedeutet das?

Angenommen, Sie haben 2 Verzeichnisse

  • foo
  • Bar

und eine bestehende symbolische Verbindung

  • baz -> bar

Jetzt wollen Sie aktualisieren baz Punkt auf foo statt. wenn du es einfach tust

ln -sf foo baz

du würdest bekommen

  • baz / foo -> foo
  • baz -> bar (unverändert) und damit
  • bar / foo -> foo

wenn Sie hinzufügen -n

ln -sfn foo baz

Sie bekommen, was Sie wollen.

  • baz -> foo

Das ist es, was "keine Dereferenzierung" bedeutet: Lösen Sie keine vorhandene Verknüpfung auf und platzieren Sie die neue Verknüpfung in diesem Verzeichnis, sondern aktualisieren Sie sie einfach.

Marian Theisen
quelle
2
Die mit Abstand hilfreichste Antwort.
Kobejohn
1

Hier sind alle Optionen zu ln. Sie finden -n und -f hier.

 -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.
margulies
quelle
-1

Sie können "man ln" eingeben, um solche Dinge zu finden:

   -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
quelle
20
Ich verstehe immer noch nicht genau, was das bedeutet
Andrew
-1

-f, --force entferne vorhandene Zieldateien

-n, --no-dereference Ziel behandeln, das ein Symlink zu einem Verzeichnis ist, als wäre es eine normale Datei

Ennuikiller
quelle
-5

-f sagt, dass, wenn das Ziel Ihres Befehls eine vorhandene Datei ist, diese entfernt und durch die neue Verknüpfung ersetzt werden sollte. (Beachten Sie, dass "Datei" in Unix-beeinflussten Systemen Verzeichnisse, Links, Pipes usw. enthalten kann.)

-n ändert -f und gibt an, dass das angegebene Ziel, wenn es sich um eine vorhandene symbolische Verknüpfung handelt, nicht entfernt werden sollte.

CarlF
quelle
3
Ihre Beschreibung von -nist falsch. -fallein ersetzt keinen Symlink zu einem Verzeichnis. Beim Ersetzen eines Symlinks in ein Verzeichnis muss -nder vorhandene Symlink wie eine normale Datei anstelle eines Verzeichnisses behandelt werden.
Brian