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?
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.
/Users/lukas
est un chemin "absolu". Le /
en tête représente le répertoire racine de votre système de fichiers.
lukas
est 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 lukas
name__), 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 cd
pour 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 à cd
passe par cet algorithme; le répertoire que vous modifiez est le chemin renvoyé par l'algorithme.
Lectures complémentaires: