Verzeichnis-Hardlinks können das Dateisystem auf verschiedene Arten beschädigen
Sie ermöglichen es Ihnen, Loops zu erstellen
Eine feste Verknüpfung zu einem Verzeichnis kann eine Verknüpfung zu einem übergeordneten Element von sich selbst herstellen, wodurch eine Dateisystemschleife erstellt wird. Diese Befehle könnten beispielsweise eine Schleife mit dem Backlink erstellen l
:
mkdir -p /tmp/a/b
cd /tmp/a/b
ln -d /tmp/a l
Ein Dateisystem mit einer Verzeichnisschleife hat eine unendliche Tiefe:
cd /tmp/a/b/l/b/l/b/l/b/l/b
Das Vermeiden einer Endlosschleife beim Durchlaufen einer solchen Verzeichnisstruktur ist etwas schwierig (obwohl POSIX find
dies beispielsweise vermeiden muss).
Ein Dateisystem mit einer solchen festen Verknüpfung ist kein Baum mehr, da ein Baum definitionsgemäß keine Schleife enthalten darf.
Sie unterbrechen die Eindeutigkeit der übergeordneten Verzeichnisse
Bei einer Dateisystemschleife existieren mehrere übergeordnete Verzeichnisse:
cd /tmp/a/b
cd /tmp/a/b/l/b
Im ersten Fall /tmp/a
ist das übergeordnete Verzeichnis von /tmp/a/b
.
Im zweiten Fall /tmp/a/b/l
ist das übergeordnete Verzeichnis von /tmp/a/b/l/b
dasselbe wie /tmp/a/b
.
Es hat also zwei übergeordnete Verzeichnisse.
Sie multiplizieren Dateien
Dateien werden nach dem Auflösen von Symlinks durch Pfade identifiziert. Damit
/tmp/a/b/foo.txt
/tmp/a/b/l/b/foo.txt
sind verschiedene Dateien.
Es gibt unendlich viele weitere Pfade der Datei. Sie sind natürlich in Bezug auf ihre Inode-Nummer gleich. Wenn Sie jedoch keine expliziten Schleifen erwarten, gibt es keinen Grund, dies zu überprüfen.
Ein Verzeichnis-Hardlink kann auch auf ein untergeordnetes Verzeichnis oder ein Verzeichnis verweisen, das weder untergeordnet noch übergeordnet ist. In diesem Fall wird eine Datei, die dem Link untergeordnet ist, in zwei Dateien repliziert, die durch zwei Pfade gekennzeichnet sind.
Dein Beispiel
$ ln /Some/Direcoty /home/nischay/Hard-Directory
$ echo foo > /home/nischay/Hard-Directory/foobar.txt
$ diff -s /Some/Direcoty/foobar.txt /home/nischay/Hard-Directory/foobar.txt
$ echo bar >> /Some/Direcoty/foobar.txt
$ diff -s /Some/Direcoty/foobar.txt /home/nischay/Hard-Directory/foobar.txt
$ cat /Some/Direcoty/foobar.txt
foo
bar
Wie können Softlinks zu Verzeichnissen funktionieren?
Ein Pfad, der Softlinks und sogar Softlink-Verzeichnisschleifen enthalten kann, wird häufig nur zum Identifizieren und Öffnen einer Datei verwendet. Es kann als normaler linearer Pfad verwendet werden.
Es gibt jedoch auch andere Situationen, in denen Pfade zum Vergleichen von Dateien verwendet werden. In diesem Fall können symbolische Verknüpfungen im Pfad zuerst aufgelöst und in eine minimale und gemeinsam vereinbarte Darstellung umgewandelt werden, um einen kanonischen Pfad zu erstellen :
Dies ist möglich, da die Softlinks alle zu Pfaden ohne Link erweitert werden können. Nachdem dies mit allen Softlinks in einem Pfad durchgeführt wurde, ist der verbleibende Pfad Teil eines Baums, in dem ein Pfad immer eindeutig ist.
Der Befehl readlink
kann einen Pfad in seinen kanonischen Pfad auflösen:
$ readlink -f /some/symlinked/path
Softlinks unterscheiden sich von dem, was das Dateisystem verwendet
Ein Softlink kann nicht alle Probleme verursachen, da er sich von den Links im Dateisystem unterscheidet. Es kann von Hardlinks unterschieden und bei Bedarf in einen Pfad ohne Symlinks aufgelöst werden.
In gewisser Weise ändert das Hinzufügen von Symlinks nicht die grundlegende Dateisystemstruktur, sondern behält sie bei, fügt jedoch eine strukturiertere Struktur wie eine Anwendungsebene hinzu.
Von man readlink
:
NAME
readlink - print resolved symbolic links or canonical
file names
SYNOPSIS
readlink [OPTION]... FILE...
DESCRIPTION
Print value of a symbolic link or canonical file name
-f, --canonicalize
canonicalize by following every symlink in
every component of the given name recursively;
all but the last component must exist
[ ... ]