cd .. sur le dossier racine


44

Pourquoi cd .., tapé au dossier racine, ne prévient pas ou échoue avec une erreur?

Je m'attendrais à:

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

Au lieu de cela, je suis parti à /. Bien sûr, c'est depuis ..qu'il existe /, et est simplement /, tout comme .. Je me demande juste pourquoi c'est comme ça.


6
Pas de réponse, mais voici une bonne lecture associée, Rob Pike sur G + discutant de l’origine du ou des fichiers.
bsd

Réponses:


53

Selon Open Group (responsable du standard POSIX):

Chaque répertoire a exactement un répertoire parent qui est représenté par le nom point-point dans le premier répertoire. [...] Ce que le nom de fichier point-point désigne par rapport au répertoire racine est défini par l'implémentation. Dans la version 7, il fait référence au répertoire racine lui-même; c'est le comportement mentionné dans POSIX.1-2008. Dans certains systèmes en réseau, la construction /../hostname/ est utilisée pour faire référence au répertoire racine d'un autre hôte et POSIX.1 autorise ce comportement.

(La source)


29

Vous n'obtenez pas d'erreur, car même le /répertoire a une entrée de répertoire valide pour .., mais contrairement à d'autres répertoires, il pointe sur le répertoire lui-même et se comporte donc comme suit .:

$ ls -lid / /. /..
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /.
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /..
$

Comme la première colonne indique, ., ..et /tous ont le même inode numéro et sont donc les mêmes entrées du système de fichiers.

Donc, même si vous restez à l’ cd ..intérieur de /vous /.


13
La question demande pourquoi l' ..entrée de répertoire est là.
Nick Matteo

3
La seule raison qui me vienne à l’esprit, c’est que vous voulez traiter /comme tout autre dossier, y compris une entrée valide pour ... Sinon, vous devrez traiter /différemment de tous les autres dossiers du système.
Dohn Joe

15

C'est là parce que le supprimer nécessiterait la création d'un code de traitement spécial dans le noyau et les bibliothèques C. À l'heure actuelle, vous pouvez supposer qu'il y aura toujours un "." et '..' dans n'importe quel répertoire où vous allez.

Le seul code spécial requis actuellement est le code de montage du système de fichiers, où le code remplace la valeur d'inode de '..' pour pointer vers le répertoire contenant le point de montage, car les répertoires racine ne sont pas toujours.


Après tout, il est impossible que la «référence parent» dans les arborescences soit exempte de toute manipulation de cas particulier, n'est-ce pas? La racine doit être spéciale par définition, et toute tentative de masquage conduisant à des cas particuliers ou à de la confusion ailleurs.
musiphil

@musiphil Sous Unix, les cas spéciaux sont mélangés à la mountcommande et à son fichier spécial associé /etc/fstab.
luser droog

1

Une autre façon de vérifier quoi .et ..en /est vraiment:

$ readlink -f ..
/home

$ readlink -f /.
/

$ readlink -f /..
/

Comme vous pouvez le voir, .et ..est pointé /.


1

Une autre raison ".." est dans / est que s'il n'y était pas, cela créerait un autre cas particulier: le répertoire racine aurait un lien dur de moins que tous les autres répertoires (tous les nœuds de répertoire ont n + 2 liens, où n est le nombre de sous-répertoires directs à l'intérieur). Cela casserait divers programmes qui reposent sur pour l'optimisation des analyses de répertoires.


0

C'est bien que ce soit là, car sinon, je ne pourrais pas ../../../../envoyer de courrier indésirable à la racine depuis un dossier. S'il n'autorisait pas ..la racine, je serais bloqué en comptant le nombre de dossiers dans le répertoire de travail.


10
Quel est le problème avec cd /?
Bach le

@ Bach Parfois, le mixage au clavier est plus amusant. En outre, dans de nombreuses circonstances, vous n'essayez pas d'aller à la racine, auquel cas il ../vaut mieux utiliser . Je fais aussi beaucoup d'opérations sur les fichiers en PHP, ce que je ne peux pas faire /pour plusieurs raisons.
Skylar Ittner le

2
Le revers de la médaille est que peut-être vous entrez accidentellement trop de ../s et opérez sur (ou supprimez) un fichier que vous n'aviez pas l'intention de faire sans erreur.
Jamesdlin

4
Répéter ../plus de fois que nécessaire et souhaiter que cela fonctionne comme prévu ressemble à une erreur de logique (en sommeil), même si le système de fichiers le permet apparemment.
musiphil

@musiphil dactylographiant les espaces entre les commandes - est une erreur de logique (hypothèse que tous les espaces entre tail -f | grep sont indispensables). La plupart des gens d'Unix en souffrent. Taper '../ ..' ressemble à un problème Windows-folk (par défaut, cmd démarre dans X: \ Windows et vous devez spammer .. depuis le début). Pourquoi guérir un petit problème quand il y en a un plus gros? (espaces)
kagali-san Le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.