Was bedeutet 'ln -sf' unter Linux?

21

Ich habe 2 Fragen. Erstens für die -sfOptionen und zweitens für die spezifischere Verwendung von -fOptionen.

Durch googeln habe ich die Beschreibung von Befehl ln, Option -sund herausgefunden -f.

(Kopie von 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

Ich verstehe diese Optionen individuell. Aber wie könnte dies -sund die -fOptionen gleichzeitig genutzt werden? -swird zum Erstellen einer Verknüpfungsdatei und -fzum Entfernen einer Verknüpfungsdatei verwendet. Ich kann diese Situation nicht verstehen und warum diese zusammengeführte Option verwendet wird.

Um mehr über das lnKommando zu erfahren , habe ich einige Beispiele angeführt.

$ 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 

Alles funktioniert gut vor dem nächsten Befehl

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

Nach der Beschreibung der -fOption sollte dieser letzte Befehl nicht funktionieren, tut es aber! fooist entfernt.

Warum passiert das?

Casamia
quelle
3
-fsteht für force ( --force); nicht zum entfernen!
Pandya
3
Um der Antwort von terdon einen Grund hinzuzufügen ... Eine der Verwendungsmöglichkeiten ist das manuelle Aktualisieren von Bibliotheken. Wenn Sie dies in zwei Schritten tun - erst die alte Verknüpfung entfernen, dann die neue Verknüpfung mit ln -s erstellen - funktioniert die Bibliothek zwischen den Operationen nicht ... was zu einem großen Problem wird, wenn der Befehl ln die Bibliothek benötigt arbeiten. Mit ln -sf wird die alte Verknüpfung durch eine neue ersetzt, ohne dass die Verknüpfung jemals unterbrochen wird.
Baard Kopperud

Antworten:

42

Um herauszufinden, was die Optionen eines Befehls bewirken, können Sie zunächst Folgendes verwenden man command. Wenn Sie also rennen man ln, werden Sie sehen:

   -f, --force
          remove existing destination files

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

Nun, -swie Sie sagten, besteht die Aufgabe darin, die Verknüpfung symbolisch und nicht hart zu machen. Der -fLink ist jedoch nicht zu entfernen. Es wird die Zieldatei überschrieben, falls eine vorhanden ist. Um zu veranschaulichen:

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