Utilisation de / lors de l'utilisation de cd

12

Je suis dans mon répertoire personnel sur mon mac:

$ pwd
/Users/lukas

Quand je suis cdautour, je ne commence pas (et ne peux pas) le chemin avec /:

$ cd Documents/
/Users/lukas/Documents

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

Sauf quand je suis dedans /:

$ pwd
/
$ cd Users
/Users

$ cd /Users
/Users

Pourquoi puis-je utiliser /devant le chemin lorsque je passe de /à /Usersmais pas dans les niveaux suivants? Est-ce spécifique à macOS ou est-ce un comportement Unix standard?

LukasKawerau
la source
11
Je pense que des questions sur les chemins relatifs et absolus ont été posées avant
adamczi
6
@adamczi Il est assez évident qu'OP ne sait pas ce qu'est un chemin relatif ni comment est sa syntaxe, il ne peut donc pas le rechercher.
Rétablir Monica
12
@ K.Gkinis Ce qui n'est pas une raison pour ne pas fermer en double. Il aide les demandeurs à obtenir de bonnes réponses (en supposant que les réponses sont bonnes) et les répondeurs à conserver moins de versions du même contenu.
user202729
9
@ K.Gkinis Et, dans un sens, c'est une grande partie du point de fermeture en double: les gens poseront des questions de différentes manières, donc beaucoup de questions (correspondant à ces façons) pointant vers une seule réponse est un Bonne chose. Dans des cas comme celui-ci (où un OP ne connaît pas le terme à rechercher), la fermeture en tant que dupe n'est pas une critique à leur encontre, c'est juste la meilleure façon de gérer les nombreuses façons dont les gens posent des questions.
TripeHound
1
@adamczi Ils ont déjà été posés (merci pour les liens!) mais ma question et surtout les bonnes réponses données ici sont bien plus détaillées et expliquent mieux le concept que les réponses que vous avez liées. Je ne sais pas si cela compte pour la fermeture en double, mais cela pourrait être une considération.
LukasKawerau

Réponses:

45

Il s'agit d'un comportement Unix standard.

Le /début du chemin représente la racine du disque (ou le niveau de démarrage / supérieur de l'arborescence du système de fichiers). Comme ce Documentsn'est pas le cas, /Documentsimpossible à trouver.

/Users est hors du répertoire racine, ce problème ne se produit donc pas.

Vous pouvez utiliser cd /Users/lukas/Documentspour passer à ce chemin.

Vous pouvez également utiliser l'adressage relatif. Les systèmes de fichiers basés sur Unix ont 2 répertoires spéciaux:

  • . ce qui signifie "ce répertoire",
  • .. ce qui signifie le répertoire parent.

Si vous êtes là /Users/lukas, vous cd ./Documentsamènerait au bon endroit.

Supposons que vous étiez dedans /Users/Lukas/Documentset que vous vouliez aller /Users/Janes/Documents, vous pourriez émettre une commande cd ../../Janes/Documents- utiliser ..vous ramènerait à un niveau - donc vous le feriez deux fois, avant d'entrer dans le nouveau chemin relatif.

davidgo
la source
1
Remarque: comme @davidgo l'a dit, lorsqu'il est dans Users/lukas, cd Documentsappelle le chemin relatif ; cd /Users/Lukas/Documentsappelle le chemin absolu (qui fonctionnerait quel que soit le répertoire dans lequel vous vous trouvez lors de l'appel de cette commande).
Shan-x
1
Bien que la question concerne un Mac, qui est un système Unix, il s'agit également d'un comportement MS-DOS / Windows standard (en le remplaçant /par `\ ') puisque DOS l'a emprunté (via un long historique compliqué) à Unix.
FreeMan
2
En fonction du shell utilisé, cd $ HOME / Documents ou cd ~ / Documents fonctionnerait également. La variable shell HOME (accessible avec $ HOME) est l'emplacement de stockage habituel de votre répertoire personnel (~ étant un alias spécial pour $ HOME).
pboss3010
13

/Users/lukasest un chemin "absolu". Le premier /représente le répertoire racine de votre système de fichiers.

lukasest un chemin "relatif". Comme il n'est pas ancré à la racine, cela signifie "recherchez-le dans le répertoire courant ". À moins que le répertoire actuel ne soit /Users(ou un autre répertoire contenant un lukas), cela échouera.

Alors, explorons vos exemples, en supposant que vous êtes dans /Users/lukas:

$ cd Documents/
/Users/lukas/Documents

Chemin relatif donné => changez pour le répertoire "Documents" qui est à l'intérieur /Users/lukas.

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

Chemin absolu donné => changez de répertoire /Documents.

$ pwd
/

Cela montre que vous avez maintenant changé le répertoire de travail en répertoire racine /(bien que la cdcommande pour ce faire ne soit pas affichée).

$ cd Users
/Users

Chemin relatif donné => changez pour le répertoire "Users" qui est à l'intérieur /.

$ cd /Users
/Users

Chemin absolu donné => changez de répertoire /Users.

La clé à chaque fois est celle qui mène /. Avec lui, le chemin est absolu. Sans cela, le chemin est relatif. Cette règle est sans ambiguïté car tous les chemins absolus commencent par /(car le répertoire racine est toujours appelé /).

Voici un pseudocode décrivant vaguement cet algorithme:

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

L'argument auquel vous passez cdpasse par cet algorithme; le répertoire dans lequel vous finissez par changer est le chemin que retourne l'algorithme.


Lectures complémentaires:

Courses de légèreté avec Monica
la source
Ceci est également une excellente procédure et aide vraiment à comprendre ce comportement. Je vous remercie! :)
LukasKawerau