Ich habe diesbezüglich bei Google nachgeforscht, aber die Ergebnisse waren trübe. Warum /
kennzeichnet das Zeichen das Stammverzeichnis? Gibt es feste Gründe dafür?
linux
directory-structure
history
Ruban Savvy
quelle
quelle
cd /home
dascd /home/
Anhängen/
am Ende eines leeren Namens den Zugriff auf dieses Verzeichnis ermöglicht.chroot()
Aufruf geändert wurde. Von innen betrachtet wird dies jedoch abstrahiert./some/dir
IMMER bedeutet, dass(root)/some/dir
whilesome/dir
immer relativ zum aktuellen Arbeitsverzeichnis ist. Dieses Prinzip ist auch auf die Verwendung von Web-URLs übertragbar.Antworten:
Der Schrägstrich
/
ist das Trennzeichen, das Verzeichnisse in Pfaden in Unix-ähnlichen Betriebssystemen trennt . Dieses Zeichen scheint irgendwann in den 1970er Jahren ausgewählt worden zu sein, und laut anekdotischen Quellen könnten die Gründe damit zusammenhängen, dass der Vorgänger von Unix, das Betriebssystem Multics , das>
Zeichen als Pfadtrennzeichen verwendete, die Designer von Unix jedoch bereits reserviert hatten die Zeichen>
und<
um die E / A-Umleitung in der Shell-Befehlszeile zu kennzeichnen, lange bevor sie ein mehrstufiges Dateisystem hatten. Als es also an der Zeit war, das Dateisystem zu entwerfen, mussten sie ein anderes Zeichen finden, um die Trennung der Pfadnamenelemente zu kennzeichnen.Hierbei ist zu beachten, dass im Lear-Siegler ADM-3A-Terminal, das in den 1970er Jahren häufig verwendet wurde und aus dem unter anderem die Praxis der Verwendung des
~
Zeichens zur Darstellung des Basisverzeichnisses stammt , der /Schlüssel neben dem >Schlüssel steht:Was den Grund für die Bezeichnung des Stammverzeichnisses durch ein einzelnes Verzeichnis anbelangt
/
, so ist dies wahrscheinlich darauf zurückzuführen, dass das Stammverzeichnis das oberste Verzeichnis der Verzeichnishierarchie ist. Andere Verzeichnisse befinden sich möglicherweise darunter, in der Regel jedoch nicht. Ein Grund, auf etwas außerhalb des Stammverzeichnisses zu verweisen. Ebenso hat der Verzeichniseintrag selbst keinen Namen, da er die Grenze des sichtbaren Verzeichnisbaums darstellt.quelle
/
. Unix-Dateisysteme sind ein einzelner Baum mit Einhängepunkten für die verschiedenen Laufwerke.chroot
und so - Sie können auf nichts außerhalb der neuen Wurzel zugreifen , aber das bedeutet nicht, dass sie nicht da sind.chroot()
als es eingeführt wurde, hatte es überhaupt keine gefängnisähnlichen Eigenschaften , es wirkte sich lediglich auf die Auflösung von Pfadnamen aus. Auch heute privilegierte Prozesse können von einem chroot ausbrechen durch Design . Ich habe es auchchroot()
in einem früheren Kommentar erwähnt .>
als Verzeichnis-Trennzeichen verwendet, sondern auch<
, um auf das übergeordnete Verzeichnis zu verweisen:<
an sich war sie gleichbedeutend mit..
, während sie<foo
gleichbedeutend mit war../foo
. Das fand ich immer ästhetisch ansprechend.Das erste hierarchische Dateisystem, wie wir es heute kennen, wurde für Multics entwickelt . Das Design wird in „Ein universelles Dateisystem für die sekundäre Speicherung“ von RC Daley und PG Neumann beschrieben. Ein hervorstechendes Merkmal dieses Dateisystems ist, dass ein Verzeichnis eine Datei ist, die wie jede andere Datei in einem Verzeichnis enthalten sein kann. Die Dateistruktur bildet einen Baum, in dem alle Nicht-Blattknoten Verzeichnisse sind. Die Wurzel des Baumes ist immer ein Verzeichnis. Jede Datei hat einen Namen (den Eintragsnamen ), der innerhalb des übergeordneten Verzeichnisses eindeutig ist. Das Stammverzeichnis hat keinen Namen, da es nicht in einem anderen Verzeichnis enthalten ist.
Um eine Datei zu bestimmen, müssen Sie den Pfad vom Stamm des Baums beschreiben. Multics verwendete eine natürliche Syntax für Pfadnamen, wobei wenn
P
der Pfad zu einem Verzeichnis undF
der Name einer Datei ist, dann ist dies die Syntax für die Datei, die in dem Verzeichnis aufgerufen wird, dessen Pfad ist .P>F
F
P
Für jene Zeiten, in denen Sie sich nicht mit Verzeichnissen belasten möchten, hatte Multics eine Vorstellung von Arbeitsverzeichnissen . Ein leerer Dateiname ohne Verzeichnisangabe wird als Datei im Arbeitsverzeichnis interpretiert.
Wenn Sie diese Regeln kombinieren,
foo
befindet sich eine Datei im Arbeitsverzeichnis.foo>bar
ist eine Datei im untergeordneten Verzeichnisfoo
des Arbeitsverzeichnisses und so weiter. Diese Regeln beschreiben relative Pfade, es ist jedoch eine zusätzliche Regel erforderlich, um absolute Pfade ausgehend vom Stammverzeichnis zu erstellen. Da das Lesen eines Pfadnamens von links nach rechts der Bewegung von der Wurzel zu den Blättern des Baums entspricht, sollte die Wurzel durch einen speziellen Marker links vom Pfadnamen gekennzeichnet werden. Da Dateinamen niemals leer sind (da dies oft verwirrend wäre), beginnt kein relativer Pfadname mit dem Zeichen>
, was es zu einer praktischen Markierung für absolute Pfadnamen macht. Ist>foo
also die Dateifoo
im Stammverzeichnis aufgerufen ,>foo>bar
wird die Dateibar
im Verzeichnis aufgerufenfoo
im Stammverzeichnis usw. Dadurch bleibt das Stammverzeichnis erhalten, bei dem es sich möglicherweise um eine leere Zeichenfolge handelt. Oft ist es jedoch nicht bequem, die leere Zeichenfolge als Pfadnamen zu verwenden. Stattdessen wird sie geschrieben.>
Dies hat den zusätzlichen Vorteil, dass ein Pfadname genau dann absolut ist, wenn er das erste Zeichen enthält>
.Unix hat dieses Design von Multics übernommen. Da Unix das Zeichen bereits
>
für die Ausgabeumleitung in seiner Befehlsshell verwendet hatte, wählten die Designer ein anderes Zeichen/
, um Verzeichnisse in Pfadnamen zu trennen.quelle
In Pfadnamenskomponenten unter Unix dürfen nur zwei Zeichen nicht verwendet werden: das Nullzeichen, das Zeichenfolgen in C (der Sprache des Kernels) abschließt, und der Schrägstrich, der als Pfadtrennzeichen reserviert ist. Außerdem können Pfadkomponenten keine leeren Zeichenfolgen sein.
In einem Pfadnamen gibt es also nur zwei Arten von Token: einen Schrägstrich und eine Komponente.
Angenommen, ohne neue Token hinzuzufügen , möchten wir zwei Arten von Pfaden unterstützen, relative und absolute. Außerdem möchten wir in der Lage sein, auf das Stammverzeichnis zu verweisen, das keinen Namen hat (es hat kein übergeordnetes Verzeichnis, das ihm einen Namen geben würde).
Wie können wir relative Pfade und absolute Pfade darstellen und auf das Stammverzeichnis verweisen, indem wir nur den Schrägstrich verwenden?
Die naheliegendste Möglichkeit, eine Sprache zu erweitern (mit Ausnahme der Einführung eines neuen Tokens), besteht darin, eine neue Syntax zu erstellen: Geben Sie Kombinationen von Tokens mit ungültiger Syntax eine neue Bedeutung.
Pfade, die mit einem Schrägstrich beginnen, sind nicht sinnvoll. Verwenden Sie daher einen führenden Schrägstrich als Markierung, die angibt, dass dieser Pfad absolut und nicht relativ ist.
Ein Pfad, der nur einen Schrägstrich enthält, ist ebenfalls ungültig. Weisen Sie ihm also die Bedeutung "das Stammverzeichnis" zu.
Diese beiden Bedeutungen hängen zusammen, weil ein absoluter Pfad im Stammverzeichnis sucht. Mit anderen Worten, ein führender Schrägstrich hat die Bedeutung:
Dann könnten wir genauso gut einen abschließenden Schrägstrich einfügen, was bedeuten kann, dass dieser Pfad besagt, dass die letzte Pfadkomponente der Name eines Verzeichnisses ist und keine reguläre Datei oder ein anderes Objekt. Dieser abschließende Schrägstrich bezeichnet dieses Verzeichnis ähnlich wie der führende Schrägstrich bezeichnet das Stammverzeichnis. "
Bei all dieser obigen Syntax haben wir immer noch eine Syntax mit einer nicht zugewiesenen Bedeutung: doppelte Schrägstriche, dreifache Schrägstriche und so weiter.
Warum nicht einfach ein anderes Token einführen und es anders machen? Dies liegt wahrscheinlich daran, dass die Designer im Allgemeinen minimalistische Ansätze gewählt haben. (Warum zeigt der
ed
Editor nur ein an,?
wenn Sie etwas falsch machen?) Der Schrägstrich ist einfach einzugeben und erfordert keine Verschiebung. Eine Pfadsprache mit nur zwei Tokentypen (Komponente und Schrägstrich) ist leicht zu merken und zu verwenden.Ein weiterer wichtiger Gesichtspunkt ist, dass einfache Manipulationen von Pfaden nur mit Zeichenfolgendarstellungen möglich sind. Zum Beispiel können wir die absoluten Pfade zu einem neuen übergeordneten Verzeichnis ganz einfach "re-rooten":
Dies würde nicht funktionieren, wenn wir absolute Pfade auf eine andere Art und Weise angeben würden, wie zum Beispiel ein führendes Dollarzeichen oder was auch immer:
Diese Art der Codierung wird in einigen Fällen noch benötigt, wenn mit Pfaden im Unix-Stil gearbeitet wird, es gibt jedoch weniger davon.
quelle
/
mit dem rechten Fuß tippen können . Genau wie beim Klavierspielen.