web-dev-qa-db-fra.com

Utilisation de/en utilisant cd

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

$ pwd
/Users/lukas

Lorsque je cd autour, je ne commence pas (et ne peux pas) démarrer le chemin avec /:

$ cd Documents/
/Users/lukas/Documents

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

Sauf quand je suis en /:

$ pwd
/
$ cd Users
/Users

$ cd /Users
/Users

Pourquoi puis-je utiliser / devant le chemin lorsque je passe de / à /Users, mais pas dans les niveaux suivants? Est-ce spécifique à macOS ou s'agit-il d'un comportement Unix standard?

12
LukasKawerau

C'est le comportement Unix standard.

Le / au début du chemin représente la racine du disque (ou le niveau de début/le plus haut de l’arborescence du système de fichiers). Documents n'étant pas à la racine, /Documents est introuvable.

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

Vous pouvez utiliser cd /Users/lukas/Documents pour changer ce chemin.

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

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

Si vous êtes dans /Users/lukas, cd ./Documents vous amènerait au bon endroit.

Supposons que vous êtes dans /Users/Lukas/Documents et que vous souhaitez accéder à /Users/Janes/Documents, vous pouvez émettre une commande cd ../../Janes/Documents - utiliser .. vous ramènerait à un niveau - vous le feriez donc deux fois, avant d'entrer dans le nouveau chemin relatif.

45
davidgo

/Users/lukas est un chemin "absolu". Le / en tête 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 ceci dans le répertoire actuel _". Sauf si le répertoire en cours est /Users (ou un autre répertoire contenant un lukasname__), cela échouera.

Explorons donc vos exemples, en supposant que vous êtes dans /Users/lukas:

$ cd Documents/
/Users/lukas/Documents

Chemin relatif donné => accédez au répertoire "Documents" qui se trouve dans /Users/lukas.

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

Chemin absolu donné => accédez au répertoire /Documents.

$ pwd
/

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

$ cd Users
/Users

Chemin relatif donné => accédez au répertoire "Utilisateurs" qui se trouve dans /.

$ cd /Users
/Users

Chemin absolu donné => accédez au répertoire /Users.

La clé à chaque fois est ce / en tête. Avec cela, 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 de manière lâche cet algorithme:

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

L'argument que vous passez à cdpasse par cet algorithme; le répertoire que vous modifiez est le chemin renvoyé par l'algorithme.


Lectures complémentaires:

13