Was ist der Unterschied zwischen einer festen und einer symbolischen Verbindung?

445

Wie der Titel sagt, würde ich gerne den Unterschied zwischen einer harten Verbindung und einer weichen Verbindung kennen, die mit dem Befehl ln erstellt wurde. Der Befehl man ln liefert zwar Informationen, beantwortet aber meine Frage nicht ausreichend.

Es wäre auch schön, wenn jemand eine Einstellung bereitstellen könnte, bei der eine harte Verbindung einer symbolischen Verbindung vorzuziehen ist.

    
ste_kwr 29.02.2012, 10:03
quelle

10 Antworten

29

Unter Linux / Unix werden Verknüpfungen als Links

bezeichnet

Es gibt zwei Arten von Links: weiche Links (symbolische Links) oder feste Links.

  1. Softlinks (symbolische Links)

    Sie können Verknüpfungen zu Dateien und Verzeichnissen erstellen und Verknüpfungen (Verknüpfungen) auf verschiedenen Partitionen und mit einer anderen Inode-Nummer als im Original erstellen.

    Wenn die echte Kopie gelöscht wird, funktioniert der Link nicht .

  2. Harte Links

    Hard Links sind nur für Dateien; Sie können keine Verknüpfung zu einer Datei auf einer anderen Partition mit einer anderen Inode-Nummer herstellen.

    Wenn die echte Kopie gelöscht wird, funktioniert der Link , da auf die zugrunde liegenden Daten zugegriffen wird, auf die die reale Kopie zugreift.

Frage: Wie mache ich eine weiche Verknüpfung?

Antwort: Eine weiche Verknüpfung kann mit ln -s ; Zuerst müssen Sie die Quelle definieren und dann müssen Sie das Ziel definieren. (Beachten Sie, dass Sie die vollständigen Pfade von Quelle und Ziel definieren müssen; andernfalls funktioniert es nicht.)

 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1
             (----------Source-------)             ( Destination )

Wie Sie sehen können, hat es einen anderen Inode und kann auf einer anderen Partition erstellt werden.

Frage: Wie mache ich eine feste Verbindung?

Antwort: Eine feste Verbindung kann mit ln ; Zuerst müssen Sie die Quelle definieren und dann müssen Sie das Ziel definieren. (Beachten Sie, dass Sie den vollständigen Pfad von Quelle und Ziel definieren müssen; andernfalls wird es nicht funktionieren.)

Nehmen wir an, ich habe ein Skript im Verzeichnis /script namens firefox .

 ls -i # Shows you the inode
 5898242 firefox

 ln /scripts/firefox /scripts/on-fire
       ( Source )    ( Destination )

Wie Sie sehen können, hat es dieselbe Inode. Wenn ich das Original lösche, wird der Link funktionieren und als Original fungieren.

Oben überprüfe ich, ob der Link funktioniert, und lösche dann das ursprüngliche firefox-Skript.

Sie Frage: Es wäre schön, wenn jemand eine Einstellung bereitstellen könnte, bei der eine feste Verbindung einer symbolischen Verbindung vorzuziehen ist.

Antwort : Feste Links haben je nach Layout der Festplattenpartition die Einschränkung, dass sie sich auf derselben Partition befinden müssen (-1 Punkt) und kann nur auf Dateien (-1 Punkt) verweisen, aber +1 Punkt wenn das Original gelöscht wird, funktioniert der Link und verhält sich wie das Original.

>

Auf der anderen Seite kann eine weiche Verknüpfung auf Verzeichnisse oder Dateien (+1 Punkt) zeigen und es gibt keine Partitionsbeschränkung (+1 Punkt), aber (- 1 Punkt) wenn die Quelle ist gelöscht der Link wird nicht funktionieren.

    
Qasim 09.05.2013, 02:42
quelle
312

Ein Hardlink ist kein Zeiger auf eine Datei, sondern ein Verzeichniseintrag (eine Datei), der auf denselben Inode verweist. Auch wenn Sie den Namen der anderen Datei ändern, zeigt ein Hardlink immer noch auf die Datei. Wenn Sie die andere Datei durch eine neue Version ersetzen (indem Sie sie kopieren), zeigt ein Hardlink nicht auf die neue Datei. Sie können nur Hardlinks innerhalb desselben Dateisystems haben. Bei Hardlinks haben Sie kein Konzept der Originaldateien und Links, alle sind gleich (denken Sie daran als Referenz auf ein Objekt). Es ist ein sehr niedriges Konzept.

Andererseits zeigt ein Symlink tatsächlich auf einen anderen Pfad (einen Dateinamen); Es löst den Namen der Datei bei jedem Zugriff auf den Symlink auf. Wenn Sie die Datei verschieben, wird der Symlink nicht folgen. Wenn Sie die Datei durch einen anderen ersetzen und den Namen beibehalten, zeigt der Symlink auf die neue Datei. Symlinks können sich über Dateisysteme erstrecken. Bei Symlinks unterscheiden Sie sehr deutlich zwischen der eigentlichen Datei und dem Symlink, der neben dem Pfad zu der Datei, auf die er zeigt, keine Informationen speichert.

    
vartec 18.05.2011 11:51
quelle
287

"Ein Bild sagt mehr als tausend Worte."

Und, "Ein Beispiel ist hundert Absätze wert ..."

Erstellen Sie zwei Dateien:

$ touch blah1   
$ touch blah2

Geben Sie einige Daten in sie ein:

$ echo "Cat" > blah1
$ echo "Dog" > blah2

Und wie erwartet:

$cat blah1; cat blah2
Cat
Dog

Lassen Sie uns harte und weiche Links erstellen:

$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft

Mal sehen, was gerade passiert ist:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

Die Änderung des Namens von blah1 spielt keine Rolle:

$ mv blah1 blah1-new
$ cat blah1-hard
Cat

blah1-hard zeigt auf den Inode, den Inhalt der Datei - der nicht geändert wurde.

$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory

Der Inhalt der Datei konnte nicht gefunden werden, da die weiche Verknüpfung auf den Namen zeigt, der geändert wurde, und nicht auf den Inhalt.
Ähnlich, wenn blah1 gelöscht wird, enthält blah1-hard immer noch den Inhalt; Wenn blah2 gelöscht wird, ist blah2-soft nur ein Link zu einer nicht existierenden Datei.

Quelle: eklatant kopiert es von StackOverflow!

    
ABcDexter 21.07.2016 09:33
quelle
87

Beide sind Zeiger auf Dateien; Der Unterschied ist der Typ des Zeigers. Ein symbolischer Link verweist auf eine andere Datei nach Name . Es hat ein spezielles Modus-Bit, das es als symbolischen Link identifiziert, und sein Inhalt ist der Name der realen Datei. Da er nur einen Namen enthält, muss dieser Name nicht existieren oder auf einem anderen Dateisystem existieren. Wenn Sie die benannte Datei ersetzen (den Inhalt ändern, ohne den Namen zu ändern), enthält der Link immer noch den gleichen Namen. Jetzt zeigt er auf die neue Datei. Sie können einen symbolischen Link leicht identifizieren und den Namen der Datei sehen, auf die er zeigt.

Ein fester Link zeigt auf die Datei nach Inode-Nummer. Hardlinks unterscheiden sich daher nicht vom Vornamen einer Datei. Es gibt keinen "echten" Namen vs. Hardlink-Namen; Alle festen Links sind gleichwertige Namen für die Datei. Aus diesem Grund muss die Datei, zu der Sie eine Verknüpfung herstellen, tatsächlich vorhanden sein und sich im selben Dateisystem befinden, in dem Sie versuchen, die Verknüpfung zu erstellen. Wenn Sie den ursprünglichen Namen löschen, verweist die feste Verknüpfung immer noch auf die gleiche Datei. Da alle festen Verbindungen für die Datei gleichgültige Namen sind, können Sie nicht auf einen suchen und die anderen Namen für die Datei sehen; Um dies zu finden, müssen Sie sich jede Datei ansehen und ihre Inode-Nummer vergleichen, um die anderen Namen zu finden, die dieselbe Inode-Nummer haben.

Sie können feststellen, wie viele Namen eine Datei von der Ausgabe von ls -l hat. Die erste Nummer nach dem Dateimodus ist die Linkanzahl. Eine Datei mit mehr als einem Link hat irgendwo andere Namen, und umgekehrt hat eine Datei mit einer Linkanzahl von nur 1 keine (anderen) festen Links.

    
psusi 18.05.2011 17:23
quelle
56

Ein Hardlink kann nur auf demselben Dateisystem arbeiten, es ist einfach ein anderer Name für denselben Inode (Dateien werden intern von Inodes referenziert). Eine Datei wird nur dann von der Festplatte gelöscht, wenn der letzte Link zu ihrem Inode verschwunden ist (Sie haben rm d oder unlink d den letzten Link). Hardlinks funktionieren normalerweise nur für Dateien, nicht für Verzeichnisse.

Ein Symlink (symbolische Verbindung) ist eine spezielle Datei, die einen Pfad zu einer anderen Datei enthält. Dieser Pfad kann absolut oder relativ sein. Symlinks können über Dateisysteme hinweg funktionieren und sogar auf andere Dateien verweisen, wenn Sie beispielsweise eine externe Festplatte ausstecken und durch eine andere ersetzen, die eine andere Datei auf dem gleichen Pfad hat. Ein Symlink kann auf Dateien oder Verzeichnisse verweisen.

    
knittl 29.02.2012 10:20
quelle
20

Eine der Antworten aus dem anderen Thread (jetzt von oben auf deinen Beitrag verlinkt) erwähnt diese Seite was ich denke, ist eine ziemlich gute Erklärung auf mittlerer Ebene. Wenn du dich in der Ascii-Kunst verirrst, hier ist die tl; dr-Version:

  • Standarddateien sind ein Zeiger vom Dateisystem auf einen Inode, der wiederum auf physikalische Daten zeigt. Die Dateikomponente speichert ihre Verbindung zum Dateisystem (im Wesentlichen ihr Pfad) und eine Verbindung zum Inode.
  • Hard-Links sind genauso wie Dateien. Sie sind nur ein zusätzlicher Zeiger direkt auf einen Inode.
  • Symbolische Links sind separate Dateien (einschließlich separater Inode und Daten), die einen Dateisystempfad in einer Datei speichern.

Der Kernel und die beteiligten Dateisysteme übersetzen alles transparent.

Also basierend darauf:

  • Hard-Links erlauben nur das gleiche Dateisystem-Linking. Symlinks können auf jeden Pfad zeigen.
  • Hard-Links zeigen (im Wesentlichen) auf absolute Daten. Symlinks können auf relative Pfade zeigen (zB ../parent.file )
  • Wenn Sie den Zielzeiger einer harten Verbindung verschieben (was daran erinnert, dass selbst im Wesentlichen nur eine harte Verbindung zu einem Inode ist), funktioniert die feste Verbindung weiterhin. Das Verschieben des Ziels eines Symlinks würde normalerweise den Symlink unterbrechen.
  • Die Lösung einer harten Verbindung wäre schneller, aber unermesslich. Dieser unbedeutende Teil der Geschwindigkeit geht auf Kosten eines unflexiblen Dateisystems.

Ich habe mich vielleicht ein bisschen verwirrt, aber ich habe verschiedene Dinge durchgelesen. Ich habe Mühe, den Unterschied zwischen einer Standarddatei und einem Hardlink zu finden. Die Art, wie ich es lese, besteht darin, dass jede Datei aus einem Hardlink besteht (der den Dateinamen speichert), der mit einem Inode verknüpft ist, der auf physikalische Daten zeigt.

Das Hinzufügen eines Hardlinks bietet nur einen Inode mit einem zusätzlichen Dateisystem-basierten Zeiger. Ist das richtig?

    
Oli 18.05.2011 17:10
quelle
15

Wann Soft Link zu verwenden ist:

Verknüpfung zwischen Dateisystemen: Wenn Sie Dateien über die Dateisysteme hinweg verknüpfen möchten, können Sie nur symbolische Links verwenden.

Links zu Verzeichnis: Wenn Sie Verzeichnisse verknüpfen möchten, müssen Sie Soft-Links verwenden, da Sie keine feste Verknüpfung zu einem Verzeichnis erstellen können.

Wann man den harten Link benutzt:

Speicherplatz: Hard Links benötigen nur sehr wenig Speicherplatz, da beim Erstellen von Hardlinks keine neuen Inodes erstellt werden. In weichen Links erstellen wir eine Datei, die Speicherplatz verbraucht (normalerweise 4 KB, abhängig vom Dateisystem)

Leistung: Die Leistung wird beim Zugriff auf eine feste Verbindung etwas besser, da Sie direkt auf den Festplattenzeiger zugreifen, anstatt eine andere Datei zu durchsuchen. Dateispeicherort verschieben: Wenn Sie die Quelldatei an einen anderen Speicherort im selben Dateisystem verschieben, funktioniert die feste Verbindung weiterhin, aber die weiche Verbindung schlägt fehl.

Redundanz: Wenn Sie die Sicherheit Ihrer Daten sicherstellen möchten, sollten Sie eine feste Verbindung verwenden, da die Daten in harter Verbindung sicher sind, bis alle Verknüpfungen zu den Dateien gelöscht sind, anstatt in der weichen Verknüpfung. Sie verlieren die Daten, wenn die Master-Instanz der Datei gelöscht wird.

    
Osama 07.09.2014 01:48
quelle
7

Die Verwirrung setzt ein, wenn Sie versuchen, den Unterschied zwischen "dem Dateinamen" und einem harten Link zu finden, weil es keinen gibt.

Jede Datei, die Sie erstellen, besteht aus Daten auf der Festplatte und einer festen Verbindung . Dies ist ein Dateiname in einem Verzeichnis und ein Zeiger auf die Daten auf der Festplatte. Ende der Geschichte. Wenn die letzte (oder einzige) feste Verbindung gelöscht wird, weiß das Betriebssystem, dass die Daten nicht mehr benötigt werden.

Hier sehen Sie, dass die eigentlichen Daten niemals gelöscht werden, sondern nur die harten Links. Und wenn es auf der Festplatte ausreichend voll ist, werden die Daten möglicherweise von den Daten einer anderen Datei überschrieben. Bis dahin können die Daten aus der gelöschten Datei zwar wiederhergestellt werden, aber ohne die feste Verbindung ist es schwer, sie zu finden.

Symlinks, wie zuvor erklärt, sagen einfach "es gibt eine Datei namens <targetname> in einem Ordner namens <targetfolder> ". Sie zeigen auf die harte Verbindung. Sie wissen nicht, wo die Daten sind. Die harte Verbindung weiß das.

    
Gonesoft 01.03.2015 12:28
quelle
3

Für eine ausgezeichnete noob -und- ex-Windoze -benutzer- freundliche Erklärung mit schönen Diagrammen und eine FAQ finden Sie auf dieser Seite Pfandrecht . Ihre Urheberrechte Beschränkungen verhindern, dass ich ihre Sachen ausziehe, also genügt es, dass ich den Link hier gebe.

Dies ist mein zweiter oder sogar dritter Versuch, das weiche / harte Link-Rätsel zu erfassen, immer das Handtuch zu werfen und mein Verständnis auf einen unbestimmten Zeitpunkt in der Zukunft zu verschieben - sobald die Erklärungen und Man-Seiten mit Inodes und allem ... tief kerneled und übertechnisch zu werden ...

Viel Spaß!

    
nutty about natty 10.02.2013 17:03
quelle
0

Es ist sehr einfach. Dateien (und Verzeichnisse!) Werden unter Adressen auf dem Blockgerät (HDD oder was auch immer) gespeichert. Normalerweise haben Sie einen einzelnen Namen, der einer Adresse zugeordnet ist, und so erhalten Sie Ihre Datei. Ein fester Link ist ein zweiter, dritter usw. Name, der der gleichen Adresse zugeordnet ist. Ein symbolischer Link verweist stattdessen auf das Symbol - den Namen - und so wird ein zweiter Name dem ersten Namen zugeordnet. Soweit der Kernel betroffen ist, stoppt er, sobald er das symbolische Link-Ziel liest, und geht mit dem Zielwert als Dateiname (mehr oder weniger) an den Anfang zurück, so dass relative symbolische Verknüpfungen möglich sind, aber äußerst wenig hilfreich. Der Zielname wird nicht oberhalb der Dateisystemebene verwendet, außer wenn er explizit im Benutzerbereichscode abgefragt wird.

    
Jim Driscoll 03.07.2016 17:39
quelle

Tags und Links