Ich bin in meinem Home-Verzeichnis auf meinem Mac:
$ pwd
/Users/lukas
Wenn ich in der cd
Nähe bin, beginne ich den Pfad nicht (und kann ihn auch nicht) mit /
:
$ cd Documents/
/Users/lukas/Documents
$ cd /Documents
-bash: cd: /Documents: No such file or directory
Außer wenn ich in bin /
:
$ pwd
/
$ cd Users
/Users
$ cd /Users
/Users
Warum kann ich /
vor dem Pfad verwenden, wenn ich von /
zu gehe , /Users
aber nicht in nachfolgenden Ebenen? Ist dies spezifisch für macOS oder ist dies das Standardverhalten von Unix?
linux
command-line
mac
terminal
LukasKawerau
quelle
quelle
Antworten:
Dies ist das Standardverhalten von Unix.
Am
/
Anfang des Pfads befindet sich das Stammverzeichnis der Festplatte (oder die oberste Startebene des Dateisystembaums). DaDocuments
ist nicht von der Wurzel,/Documents
kann nicht gefunden werden./Users
ist aus dem Stammverzeichnis, so dass dieses Problem nicht auftritt.Sie könnten verwenden
cd /Users/lukas/Documents
, um zu diesem Pfad zu wechseln.Alternativ können Sie die relative Adressierung verwenden. Unix-basierte Dateisysteme haben zwei spezielle Verzeichnisse:
.
was bedeutet "dieses Verzeichnis",..
was bedeutet, das übergeordnete Verzeichnis.Wenn Sie in sind
/Users/lukas
,cd ./Documents
würden Sie an den richtigen Ort bringen.Nehmen wir an, Sie waren in
/Users/Lukas/Documents
und wollten zu/Users/Janes/Documents
, Sie könnten einen Befehl ausgebencd ../../Janes/Documents
- mit..
würden Sie ein Level zurücknehmen - so würden Sie es zweimal tun, bevor Sie in den neuen relativen Pfad gehen.quelle
Users/lukas
,cd Documents
fordert @davidgo bei der Eingabe den relativen Pfad an .cd /Users/Lukas/Documents
ruft nach dem absoluten Pfad auf (was auch immer funktionieren würde, wenn Sie diesen Befehl aufrufen)./
durch "\" ersetzt wird), da DOS es (durch eine lange, verschlungene Geschichte) von Unix ausgeliehen hat./Users/lukas
ist ein "absoluter" Weg. Das führende steht/
für das Stammverzeichnis Ihres Dateisystems.lukas
ist ein "relativer" Pfad. Da es nicht an der Wurzel verankert ist, bedeutet es "im aktuellen Verzeichnis suchen ". Dies schlägt fehl, es sei denn, das aktuelle Verzeichnis ist/Users
(oder ein anderes Verzeichnis mit einemlukas
darin).Untersuchen wir also Ihre Beispiele, vorausgesetzt, Sie sind in
/Users/lukas
:Relativer Pfad angegeben => Wechseln Sie in das Verzeichnis "Documents", das sich darin befindet
/Users/lukas
.Absoluter Pfad angegeben => zum Verzeichnis wechseln
/Documents
.Dies zeigt, dass Sie jetzt das Arbeitsverzeichnis in das Stammverzeichnis geändert haben
/
(obwohl der entsprechendecd
Befehl nicht angezeigt wurde).Relativer Pfad angegeben => Wechseln Sie in das Verzeichnis "Users", das sich darin befindet
/
.Absoluter Pfad angegeben => zum Verzeichnis wechseln
/Users
.Der Schlüssel ist jedes Mal der führende
/
. Damit ist der Weg absolut. Ohne sie ist der Pfad relativ. Diese Regel ist eindeutig, da alle absoluten Pfade mit beginnen/
(da das Stammverzeichnis immer aufgerufen wird/
).Hier ist ein Pseudocode, der diesen Algorithmus lose beschreibt:
Das Argument, an das Sie übergeben,
cd
durchläuft diesen Algorithmus. Das Verzeichnis, in das Sie wechseln, ist der Pfad, den der Algorithmus zurückgibt.Weitere Lektüre:
Joseph L. Zachary
"Einführung in die wissenschaftliche Programmierung"
quelle