NAME ln -- make a link
SYNOPSIS ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1.
If name2 is given, the link has that name;
Ab 1971 Unix First Edition-Handbücher .
Es gibt eine zweite , einfache Syntaxform.
edit: Ich habe FILE oder die Dateinamen anstelle von TARGET --- siehe Kommentare usw. siehe auch sehr lange hinaus an der Unterseite, die Adressierung Eisberg, hart und weich von ln
, nicht nur die Spitze davon.
Also hat GNU folgendes ln
:
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
wo du den Linknamen nicht brauchst. Nachdem ln -s /usr/lib/modules
Sie eine bekommen
modules -> /usr/lib/modules
mit dem gleichen Namen wie FILENAME ("Ziel" oder "Quelle"), genau dort, wo Sie sind. Keine Wahl, keine Verwirrung.
Wenn Sie anspruchsvoller sind und den Link unter einem anderen Namen und / oder an einem anderen Ort erstellen möchten , fügen Sie diesen Wunsch als Namen oder Pfad hinzu. Das eigentliche Ziel steht an erster Stelle, der neue Linkname an zweiter Stelle.
Oder Sie sagen: "Ich kenne diese Pfeilnotation ls -l
für Links. Ich habe keinen Pfeil in der Shell, der die Richtung meines Links anzeigt. Also muss ich ihn umdrehen."
Sie erstellen es in die eine Richtung, damit Sie es in der anderen verwenden können.
(ENDE DES ANTWORTEN-DER-FRAGE-TEILS)
Auf einer anderen Ebene hat das Wort "Verbindung" selbst eine tief verborgene doppelte Bedeutung. Symbolische Links kamen später, so dass ein Link in den Anfängen nur ein Link war. Es gab keine weichen und harten, keine -s
Option. Und jetzt verwende ich sogar die Quell-Ziel-Symbolik:
mv A B --- move the whole file to B (dir or new name)
cp A B --- copy whole file (mv and cp are "the same" here)
ln A B --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping
Zu diesem Zeitpunkt gibt es Verknüpfungen, aber keine harten und weichen, und ls -l
es werden keine Pfeile angezeigt, da es in einer (harten) Verknüpfung keine Richtung gibt. Eine "Verknüpfung" in dieser Phase der Unix-Entwicklung bedeutete, dass der Dateiname "B" (Verzeichniseintrag "B") im Dateisystem auf denselben Inode verweist, auf den der Dateiname "A" verweist.
Die Dateien A und B sind miteinander "verknüpft", da sie dieselben Blöcke verwenden. Nun muss der Kernel bei jedem rm überprüfen: Lösche / befreie ich die Blöcke dieser Datei auf der Festplatte oder gibt es eine andere Datei, die mit denselben Blöcken verknüpft ist? Dafür wird ein Linkzähler verwendet.
Angenommen, Sie möchten eine große Datei auf / tmp grom behalten, die gelöscht werden soll, und tun dies ln /tmp/bigfile
. Jetzt haben Sie eine große Bigfile in Ihrem Arbeitsverzeichnis. Nachdem Sie / tmp gesäubert und das "Original" entfernt haben, können Sie weiterhin dieselben Datenblöcke verwenden. Sie bekommen keinen toten oder baumelnden Link, Sie haben eine normale Datei. Der Verweis auf keine Datei, sondern nur das Dateisystem blockiert, wie es jeder Verzeichniseintrag tut. Erst jetzt ist "cleaning" / tmp nicht mehr so effektiv wie es war. Es sieht leer aus und ist es auch, aber die Blöcke auf der Partition werden nicht freigegeben.
Auch wenn eine harte Verbindung nicht wie cp indirekt Speicherplatz kostet, kann sie dies.
Hinzufügen ln -s
zu der obigen Sequenz:
ln -s A B --- copy only the file's name to "B"
Jetzt hat "B", der Softlink, nur eine Zeichenfolge mit einem Pfadnamen. Das ist "soft" info. Technisch gesehen sind "A" und "B" nicht miteinander verbunden. Dennoch ist B ein "Link" in dem neuen Sinne, dass Sie diesen gespeicherten Pfadnamen als Verknüpfung zu "A" verwenden können. Jetzt ist es "eine Verknüpfung zu A" (Punkt) und nicht "verknüpft mit der Inode von Datei A".
Beide Arten von Links können nicht nur Menschen verwirren, sondern auch den Kernel / fs. In der Manpage von 1971 heißt es: "BUGS: Links werden zweimal gesichert und als separate Dateien mit separaten Inodes wiederhergestellt."
Harte Links zu Verzeichnissen (selten / nicht erlaubt) können leicht zu einem Verstopfen führen.
Softlinks zu Verzeichnissen (sehr häufig) können zu ewigen Schleifen führen - müssen von Utilities / Kernel erkannt werden.
Praktisches Beispiel in Bash
Beginnend mit einer regulären Datei "F" ...
ln F Fhard
... macht Fhard genauso groß wie F, aber beide erscheinen jetzt in einem dunklen Rot OHNE Pfeile ls -l --color
. Wegen der stat
Anzeige von "Links: 2" in Verbindung mit "Inode: xyz". Feste Verknüpfung F macht F selbst zu einer festen Verknüpfung. Beide sind / stay Dateityp "reguläre Datei". Beide haben jedoch eine Inode mit einer Linkanzahl über 1.
ln -s F Fsoft
... erstellt eine winzige "unregelmäßige" Datei "Fsoft" mit dem Dateityp "symbolischer Link" - noch platzsparender als ein leeres Verzeichnis. A ls -l
zeigt nichts spezielles für "F". Für Fsoft beträgt die angezeigte Größe 1 Byte, da die Zeichenfolge 'F' ist und Fsoft -> F
als Name angezeigt wird. Es ist nicht erforderlich, einen Softlink einzufärben, um einen zu erkennen. Weil in der Kurzform ls -F
eine aufgerollte Kette @
angehängt wird:Fsoft@
Damit ls -l
sieht es so aus:
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root 1 Sep 16 16:31 Fsoft -> F
Fhard hat Fs Größe und Typ.
Fsoft hat den Namen von F und die Länge von F als Größe und einen anderen Dateityp.
Kurz ls -sF
:
5932 F 5932 Fhard 0 Fsoft@
das Hinzufügen --block-size=1
ergibt auch nicht die gleichen Größen. Fsoft hat die Größe "ein Byte, null Blöcke". F und Fhard weichen parallel ab:
6074368 F 6074368 Fhard 0 Fsoft@
Um zu sehen, ob Fsoft baumelt oder nicht, ls
können Sie Farben verwenden.
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
a
und nennen Sie esb
"