Ich benutze Ubuntu 12.04. Wenn ich versuche, einen festen Link für ein Verzeichnis zu erstellen, schlägt dies fehl. Ich kann feste Verknüpfungen für Dateien innerhalb der Dateisystemgrenzen erstellen. Ich kenne den Grund, warum wir keine Hardlinks für Dateien außerhalb des Dateisystems erstellen können.
Ich habe diese Befehle ausprobiert:
$ ln /Some/Direcoty /home/nischay/Hard-Directory
hard link not allowed for directory
$ sudo ln /Some/Direcoty /home/nischay/Hard-Directory
[sudo] password for nischay:
hard link not allowed for directory
Ich möchte nur den Grund dafür wissen. Ist es für alle GNU / Linux-Distributionen und Unix-Versionen (BSD, Solaris, HP-UX, IBM AIX) gleich oder nur für Ubuntu oder Linux?
filesystem
directory
hard-link
Nischay
quelle
quelle
ln -F <src> <dst>
und es könnte funktionieren. In älteren Unix-Versionen funktionierte es natürlich auch für den Superuser. Weiß noch jemand, ob das UCB oder System V war? Ja, schlimme Dinge könnten passieren, aber normalerweise nicht. Soweit ich mich erinnere,rmdir
wusste ich nicht , dass ich nach einem harten Link weiter löschen musste. Benutzer könnten jedoch verwirrt werden und fehlerhafte Elemente löschen.rmdir
mit harten Links umgehen? Eine harte Verbindung ist nur eine normale Verbindung - aber eine zusätzliche. Es ist nicht einmal einfach herauszufinden, ob es ungewöhnliche zusätzliche Links ohne zusätzliche Aufzeichnungen gibt.rmdir
kann man feststellen, ob das Verzeichnis Links von anderen Orten hat. Das rekursive Entfernenrm -r
muss sorgfältig codiert werden, um sicherzustellen, dass es auch dann korrekt funktioniert, wenn Fehler wie "Berechtigung verweigert" auftreten. Übrigens, UCB = BSD, doh!ln -F
Verzeichnisse durchgearbeitet und habe es funktionieren lassen. Sie wagen es jedoch nicht, das Verzeichnis nachträglich zu löschen, da Sie befürchten, das Dateisystem zu beschädigen.Antworten:
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
:Ein Dateisystem mit einer Verzeichnisschleife hat eine unendliche Tiefe:
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:
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
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
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: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
:quelle
"Sie sollten sowieso keine festen Links verwenden" ist zu weit gefasst. Sie müssen den Unterschied zwischen festen und symbolischen Links verstehen und diese entsprechend verwenden. Jedes hat seine eigenen Vor- und Nachteile:
Symlinks können:
Harte Links können:
Harte Links sind besonders nützlich, wenn Sie Anwendungen ausführen, die beim Schreiben kopiert werden. Mit ihnen können Sie eine Sicherungskopie einer Verzeichnisstruktur aufbewahren und dabei nur Speicherplatz für die Dateien verwenden, die zwischen zwei Versionen wechseln.
Der Befehl
cp -al
ist in dieser Hinsicht besonders nützlich. Es wird eine vollständige Kopie einer Verzeichnisstruktur erstellt, in der alle Dateien durch feste Links zu den Originaldateien dargestellt werden. Anschließend können Sie Dateien in der Struktur aktualisieren. Nur die von Ihnen aktualisierten Dateien belegen zusätzlichen Speicherplatz. Dies ist besonders nützlich, wenn Sie Backups mit mehreren Generationen verwalten.quelle
ln -s "Don't use this directory" README
ist legitim. Wenn Sie darüber nachdenken, kann ein Verzeichnis tatsächlich als relationale Datenbank verwendet werden und enthält überhaupt keine tatsächlichen Dateien.Zu Ihrer Information, mit mount können Sie dasselbe erreichen wie mit harten Links für Verzeichnisse:
Dies ist sehr gefährlich, da die meisten Tools und Programme die Bindung nicht kennen . Ich habe mal so etwas wie im obigen Beispiel gemacht und bin dann weitergegangen
rm -rf /home/user
. Zum Glück gab es nichts Relevantes in/var/www
.quelle
mount --bind <src> <dest>
. Vorsichtig verwenden, um dassrc
;)mount: unknown filesystem type 'bind'
mount -o bind src dest
rm -rf
Problem vermeiden . superuser.com/questions/320415/...Der Grund, warum das Verknüpfen von Verzeichnissen nicht erlaubt ist, ist ein wenig technisch. Im Wesentlichen brechen sie die Dateisystemstruktur . Sie sollten im Allgemeinen sowieso keine festen Links verwenden. Symbolische Links ermöglichen den größten Teil der gleichen Funktionalität, ohne Probleme zu verursachen (z
ln -s target link
. B. ).quelle