Stellen Sie sich ein Dateisystem vor, das auf einige eingebettete Geräte ausgerichtet ist und nur Dateien in einer hierarchischen Verzeichnisstruktur speichert. In diesem Dateisystem fehlen viele der Vorgänge, die Sie möglicherweise in Systemen wie Unix und Windows gewohnt sind (z. B. sind die Zugriffsberechtigungen völlig unterschiedlich und nicht an in Verzeichnissen gespeicherte Metadaten gebunden). Dieses Dateisystem erlaubt keine Art von Hardlink oder Softlink, daher hat jede Datei einen eindeutigen Namen in einer strengen Baumstruktur.
Hat das Speichern eines Links zum Verzeichnis selbst und zu seinem übergeordneten Element in der Datenstruktur auf der Festplatte, die ein Verzeichnis darstellt, einen Vorteil?
Die meisten Unix-Dateisysteme haben .
und ..
Einträge auf der Festplatte. Ich frage mich, warum sie diese auf der VFS-Ebene (Generic Filesystem Driver) nicht verarbeiten. Ist das ein historisches Artefakt? Gibt es einen guten Grund und wenn ja, welchen genau, damit ich feststellen kann, ob er für mein eingebettetes System relevant ist?
quelle
Antworten:
Links zum übergeordneten Verzeichnis zu haben, macht für mich Sinn. Wenn Sie sie nicht hätten, müssten Sie immer mit einer ganzen Liste von Verzeichnissen arbeiten. So
/home/svick/Documents/
müsste zum Beispiel dargestellt werden als{ /, /home/, /home/svick/, /home/svick/Documents }
. Wenn Sie das nicht tun würden, könnten Sie das übergeordnete Verzeichnis überhaupt nicht finden (oder es wäre sehr teuer). Dies ist nicht nur ineffizient, sondern auch gefährlich. Wenn Sie zwei solcher Listen haben, die sich überschneiden, können sie leicht desynchronisiert werden, wenn Sie ein Verzeichnis verschieben.Wenn Sie jedoch einen Verweis auf das übergeordnete Verzeichnis haben, ist dies effizienter und sicherer.
Ich sehe keinen Grund, tatsächlich einen Link zum aktuellen Verzeichnis zu haben. Wenn Sie eine Struktur haben, die ein Verzeichnis darstellt, und auf dieses Verzeichnis zugreifen möchten, ist die Verwendung
.
immer völlig unnötig. Aus diesem Grund würde ich erwarten, dass der.
Link in der Dateisystemstruktur nicht vorhanden und nur virtuell ist.quelle
.
und..
Einträge.Sie erhalten weniger Sonderfälle. In vielen Situationen kann VFS ".." wie jeden anderen Verzeichnisnamen behandeln.
quelle
Der einzige Grund, den ich mir vorstellen kann, ist das folgende Szenario:
Eine ursprüngliche Implementierung eines Dateisystems existierte mit demselben Verzeichnisformat, aber die Begriffe Dateipfade und Unterverzeichnisse wurden zu diesem Zeitpunkt nicht berücksichtigt (siehe Das PDP-7-Unix-Dateisystem ).
Dann dachten die Leute, dass Pfadauflösung und Unterverzeichnisse nützlich wären!
Um ein gewisses Maß an Abwärtskompatibilität mit älteren Implementierungen zu gewährleisten, wurde beschlossen, dass das
.
und..
wie jedes andere Verzeichnis auf der Festplatte gespeichert wird.Vielleicht bleiben uns diese nutzlosen Artefakte, nur um die Abwärtskompatibilität mit 40 Jahre alter Software zu gewährleisten? Glaubwürdiges Szenario?
Hinweis: Es war auch nicht ganz dumm, diese Einträge zur Verzeichnisliste hinzuzufügen, da Sie die Inode-Nummer Ihres echten übergeordneten Verzeichnisses ohnehin irgendwo speichern müssen (denken Sie daran, dass zu diesem Zeitpunkt Hardlinks zu Verzeichnissen zulässig waren) und einen Verweis auf Ihre Eine eigene Inode-Nummer könnte eine gute Überprüfung der Gesundheit sein.
quelle
Ich sehe keinen Grund , zu implementieren
.
und..
zu beiden Ebenen eher als die andere. Wenn Sie jedoch auf eingebettete Systeme abzielen, kann jede Ebene, die Sie sparen können, Geld verdienen. Daher ist es möglicherweise sinnvoll, alles so niedrig wie möglich zu implementieren.Wie für die allgemeine Notwendigkeit von
.
und..
betrifft, wie würden Sie relative Pfade ohne sie ausdrücken? Zumindest..
für Pfade, die den aktuellen Teilbaum verlassen, unverzichtbar. Wenn Sie solche Pfade nicht benötigen (möglicherweise ist der Baum eine primitive Methode zum Codieren von Zugriffsberechtigungen?), Benötigen Sie diese nicht..
.quelle