10. Mai, 2017 – 5 min read

Hallo noch mal. In dieser Einführung in harte Links und symbolische Links werden wir zunächst versuchen zu lernen und zu definieren, was die beiden Begriffe bedeuten. Dann werden wir die Unterschiede zwischen den beiden erörtern.

Was ist also ein Hardlink und was genau macht er in der Shell?

Ein Hardlink ist lediglich ein zusätzlicher Name für eine bestehende Datei unter Linux oder anderen Unix-ähnlichen Betriebssystemen.

Bei jeder Datei können beliebig viele Hardlinks und damit beliebig viele Namen erstellt werden. Harte Links können auch zu anderen harten Links erstellt werden. Sie können jedoch nicht für Verzeichnisse erstellt werden, und sie können keine Dateisystemgrenzen überschreiten oder sich über Partitionen erstrecken.

Die vielleicht nützlichste Anwendung für Hardlinks ist es, Dateien, Programme und Skripte (d.h. Kurzprogramme) in einem anderen Verzeichnis als der Originaldatei oder der ausführbaren Datei (d.h. der lauffähigen Version eines Programms) leicht zugänglich zu machen. Die Eingabe des Namens des Hardlinks führt dazu, dass das Programm oder Skript auf die gleiche Weise ausgeführt wird wie unter seinem ursprünglichen Namen. (http://www.linfo.org/hard_link.html)

Wollen Sie diese Geschichte später lesen? Speichern Sie ihn im Journal.

Was bedeutet diese Definition nun wirklich? Nun, Sie können einen Hardlink zu einer bestehenden Datei erstellen, indem Sie den Befehl ln Dateiname Hardlink verwenden. Nachfolgend finden Sie ein Beispiel für die Erstellung eines Hardlinks in Aktion. Im folgenden Beispiel habe ich einen Hardlink, also eine Verknüpfung zu der Datei mit dem Namen file1, mit dem Hardlink hlink1 erstellt.

Nun lassen wir ls -i. Damit es alle Dateien mit Inode auflistet.

INODE Definition: Die Inode ist eine Datenstruktur in einem Dateisystem im Unix-Stil, die ein Dateisystemobjekt wie eine Datei oder ein Verzeichnis beschreibt. Jede Inode speichert die Attribute und den/die Speicherort(e) der Daten des Objekts. Die Attribute von Dateisystemobjekten können Metadaten (Zeitpunkt der letzten Änderung, Zugriff, Modifikation) sowie Eigentümer- und Berechtigungsdaten enthalten.

Verzeichnisse sind Listen von Namen, die Inodes zugeordnet sind. Ein Verzeichnis enthält einen Eintrag für sich selbst, seine Eltern und jedes seiner Kinder. (https://en.wikipedia.org/wiki/Inode)

Wenn man sich file1 und hlink1 anschaut, kann man sehen, dass der Inode auf der linken Seite derselbe ist. Im Wesentlichen fungieren Hardlinks als Verknüpfung zu der Datei, die hart verlinkt ist.

Weiter zu „Soft Links“

Soft Links sind eine spezielle Art von Dateien, die auf eine andere Datei verweisen, ähnlich wie eine Verknüpfung. Im Gegensatz zu einem Hardlink enthält ein symbolischer Link nicht die Daten der Zieldatei. Er verweist einfach auf einen anderen Eintrag irgendwo im Dateisystem. Dieser Unterschied verleiht symbolischen Links bestimmte Eigenschaften, die harte Links nicht haben, z. B. die Fähigkeit, auf Verzeichnisse oder Dateien auf entfernten Computern zu verweisen, die über NFS vernetzt sind. Wenn Sie eine Zieldatei löschen, werden symbolische Links zu dieser Datei unbrauchbar, während bei harten Links der Inhalt der Datei erhalten bleibt. (https://kb.iu.edu/d/abbe)

Lassen Sie uns nun einen Soft-Link erstellen, um ihn mit dem Hard-Link zu vergleichen, den wir oben erstellt haben.

Öffnen wir also ein Terminal. Gehen Sie zum Finder oder zur Suche und geben Sie Terminal ein, es sollte auftauchen, klicken Sie darauf und öffnen Sie es.

Für unser Beispiel wollen wir zuerst eine Datei erstellen. Wenn wir touch example1 eintippen und Enter drücken. Wir können eine Datei erstellen. Nun erstellen wir den Softlink.

Wenn wir in der Shell ln -s example1 softlink1 eingeben, erstellen wir einen Softlink zwischen den Dateien. Siehe das Beispiel unten.

softlink

Wenn wir nun ls -i eingeben, werden wir auch feststellen, dass nur die Hardlink-Datei den gleichen Inode wie der Hardlink hat, während die Softlink-Datei unterschiedliche Inodes hat.

Was sind die Unterschiede zwischen Hard- und Softlinks?

Ein Softlink enthält nicht die Daten der Zieldatei.

Ein Softlink verweist auf einen anderen Eintrag irgendwo im Dateisystem.

Ein Softlink kann auf Verzeichnisse oder auf Dateien auf entfernten Computern verweisen, die über NFS vernetzt sind.

Das Löschen einer Zieldatei für einen symbolischen Link macht diesen Link unbrauchbar.

Ein Hardlink bewahrt den Inhalt der Datei.

Ein Hardlink kann nicht für Verzeichnisse erstellt werden, und sie können keine Dateisystemgrenzen überschreiten oder sich über Partitionen erstrecken.

Bei einem Hardlink können Sie jeden der erstellten Hardlink-Namen verwenden, um ein Programm oder Skript auf die gleiche Weise auszuführen wie den angegebenen Originalnamen.

Im Wesentlichen:

„Unter dem Dateisystem werden Dateien durch Inodes repräsentiert

Eine Datei im Dateisystem ist im Grunde ein Link zu einem Inode.
Ein Hardlink erzeugt dann einfach eine weitere Datei mit einem Link zu demselben zugrunde liegenden Inode.

Wenn Sie eine Datei löschen, wird ein Link zu dem zugrunde liegenden Inode entfernt. Der Inode ist erst dann gelöscht (oder löschbar/überschreibbar), wenn alle Links auf den Inode gelöscht wurden.

Ein symbolischer Link ist ein Link auf einen anderen Namen im Dateisystem.

Wenn ein harter Link erstellt wurde, ist der Link auf den Inode. Das Löschen, Umbenennen oder Verschieben der ursprünglichen Datei hat keinen Einfluss auf den harten Link, da er auf den zugrunde liegenden Inode verweist. Jede Änderung der Daten auf dem Inode wird in allen Dateien reflektiert, die auf diesen Inode verweisen.

Hinweis: Harte Links sind nur innerhalb desselben Dateisystems gültig. Symbolische Links können Dateisysteme überspannen, da sie einfach der Name einer anderen Datei sind.“

(http://stackoverflow.com/questions/185899/what-is-the-difference-between-a-symbolic-link-and-a-hard-link)

Untersuchung der Shell und wie sie einen Befehl ausführt

  • Die Shell liest ihre Eingaben aus einer Datei, aus einer Zeichenkette oder aus dem Terminal des Benutzers.
  • Die Eingaben werden in Wörter und Operatoren aufgeteilt, die den Quoting-Regeln gehorchen. Diese Token werden durch Metazeichen getrennt. Alias-Expansion wird durchgeführt.
  • Die Shell parst (analysiert und ersetzt) die Token in einfache und zusammengesetzte Befehle.
  • Die Shell führt verschiedene Shell-Expansionen durch und zerlegt die expandierten Token in Listen von Dateinamen, Befehlen und Argumenten.
  • Notfalls wird eine Umleitung durchgeführt, Umleitungsoperatoren und ihre Operanden werden aus der Argumentliste entfernt.
  • Befehle werden ausgeführt.
  • Optional wartet die Shell auf die Beendigung des Befehls und sammelt ihren Exit-Status.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.