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.

Bach
la source
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)

Scintille
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 /.

Andreas Wiese
la source
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.

utilisateur65905
la source
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é /.

cuonglm
la source
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.

cov
la source
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.

Skylar Ittner
la source
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