Verwendung von / bei Verwendung von CD

12

Ich bin in meinem Home-Verzeichnis auf meinem Mac:

$ pwd
/Users/lukas

Wenn ich in der cdNä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 , /Usersaber nicht in nachfolgenden Ebenen? Ist dies spezifisch für macOS oder ist dies das Standardverhalten von Unix?

LukasKawerau
quelle
11
Ich denke , Fragen über die relative und absolute Pfade wurden gefragt befofre
adamczi
6
@adamczi Es ist ziemlich offensichtlich, dass OP nicht weiß, was ein relativer Pfad ist oder wie seine Syntax ist, daher kann er ihn nicht nachschlagen.
Setzen Sie Monica
12
@ K.Gkinis Was kein Grund ist, nicht als Duplikat zu schließen. Es hilft den Fragestellern, gute Antworten zu erhalten (vorausgesetzt, die Antworten sind gut), und den Fragestellern, weniger Versionen desselben Inhalts zu verwalten.
User202729
9
@ K.Gkinis Und in gewisser Hinsicht ist das ein großer Teil des Endpunkts als Duplikat: Die Leute stellen Fragen auf viele verschiedene Arten, so dass viele Fragen (die diesen Arten entsprechen), die auf eine einzige Antwort verweisen, a sind Gute Sache. In solchen Fällen (in denen ein OP den zu suchenden Begriff nicht kennt) ist Closing-as-Dupe keine Kritik an ihnen, sondern der beste Weg, mit den vielen Fragen umzugehen.
TripeHound
1
@adamczi Sie wurden gebeten, vor (danke für die Links!) , aber meine Frage und vor allem die großen Antworten hier gegeben sind Art und Weise detaillierter und das Konzept besser erklären als die Antworten , die Sie verknüpft. Ich weiß nicht, ob dies für das Schließen als Duplikat von Bedeutung ist, kann aber eine Überlegung sein.
LukasKawerau

Antworten:

45

Dies ist das Standardverhalten von Unix.

Am /Anfang des Pfads befindet sich das Stammverzeichnis der Festplatte (oder die oberste Startebene des Dateisystembaums). Da Documentsist nicht von der Wurzel, /Documentskann 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 ./Documentswürden Sie an den richtigen Ort bringen.

Nehmen wir an, Sie waren in /Users/Lukas/Documentsund wollten zu /Users/Janes/Documents, Sie könnten einen Befehl ausgeben cd ../../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.

Davidgo
quelle
1
Hinweis: Wie @davidgo sagte Users/lukas, cd Documentsfordert @davidgo bei der Eingabe den relativen Pfad an . cd /Users/Lukas/Documentsruft nach dem absoluten Pfad auf (was auch immer funktionieren würde, wenn Sie diesen Befehl aufrufen).
Shan-x
1
Während es sich um einen Mac handelt, bei dem es sich um ein Unix-System handelt, handelt es sich auch um ein standardmäßiges MS-DOS / Windows-Verhalten (das /durch "\" ersetzt wird), da DOS es (durch eine lange, verschlungene Geschichte) von Unix ausgeliehen hat.
FreeMan
2
Abhängig von der verwendeten Shell würde auch cd $ HOME / Documents oder cd ~ / Documents funktionieren. Die Shell-Variable HOME (auf die mit $ HOME zugegriffen wird) ist der übliche Speicherort für Ihr Home-Verzeichnis (~ ist ein spezieller Alias ​​für $ HOME).
pboss3010
13

/Users/lukasist ein "absoluter" Weg. Das führende steht /für das Stammverzeichnis Ihres Dateisystems.

lukasist 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 einem lukasdarin).

Untersuchen wir also Ihre Beispiele, vorausgesetzt, Sie sind in /Users/lukas:

$ cd Documents/
/Users/lukas/Documents

Relativer Pfad angegeben => Wechseln Sie in das Verzeichnis "Documents", das sich darin befindet /Users/lukas.

$ cd /Documents
-bash: cd: /Documents: No such file or directory

Absoluter Pfad angegeben => zum Verzeichnis wechseln /Documents.

$ pwd
/

Dies zeigt, dass Sie jetzt das Arbeitsverzeichnis in das Stammverzeichnis geändert haben /(obwohl der entsprechende cdBefehl nicht angezeigt wurde).

$ cd Users
/Users

Relativer Pfad angegeben => Wechseln Sie in das Verzeichnis "Users", das sich darin befindet /.

$ cd /Users
/Users

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:

MakePathAbsolute(path):
   if <path> starts with '/'
      return <path>
   else
      return <current directory>/<path>

Das Argument, an das Sie übergeben, cddurchläuft diesen Algorithmus. Das Verzeichnis, in das Sie wechseln, ist der Pfad, den der Algorithmus zurückgibt.


Weitere Lektüre:

Leichtigkeit Rennen mit Monica
quelle
Dies ist auch eine großartige Anleitung und hilft wirklich, dieses Verhalten zu verstehen. Vielen Dank! :)
LukasKawerau