J'essaie de comprendre la nature de ..
(double point). Il semble pointer vers des cibles différentes selon la façon dont vous y accédez.
Exemple:-
/outer/
middle/
inner/
inner --> ./middle/inner/
Maintenant, /outer/middle/inner/..
mène à /outer/middle/
, mais si j'y accède via le lien symbolique, /outer/inner/..
mène à /outer/
. Il semble qu'il y en ait deux différents ..
ici.
C'est quoi ..
exactement? lien symbolique? lien dur? Ou est-il généré dynamiquement en fonction du chemin d'accès au répertoire? Ou peut-être que ma compréhension des liens symboliques est fausse.
Éditer:
Autre observation connexe
/outer/
middle/
file
inner/
f --> ./../file
inner --> ./middle/inner/
Maintenant, si j'essaie d'accéder au fichier à travers /outer/inner/f
cela fonctionne. Mais cela ne devrait pas, car /outer/inner/../file
il ne pointe pas vers un fichier. le fichier est dedans /outer/middle/inner/..
. Cela semble contredire le comportement ci-dessus!?
la source
Réponses:
..
est un lien dur vers le répertoire parent qui est créé dans le cadre de l'entrée de répertoire.Si vous émettez
ls -ail
dans chacun de ces répertoires, vous devriez voir que les entrées suivantes ont toutes le mêmeinode
(premier champ) et le nombre de liens matériels (troisième champ):..
lors de l'exécutionls -ail
dansinner
.
lors de l'exécutionls -ail
dansmiddle
middle
lors de l'exécutionls -ail
dansouter
Il y a une
..
entréeinner
. Si votre répertoire de travail actuel estouter
, vous devriez voir les mêmes résultats (une liste de répertoiresmiddle
) dels -al inner/..
ls -al middle/inner/..
La seule situation dans laquelle « l' accès »
..
via le lien symbolique devrait fournir un comportement différent est si vouscd
eninner
utilisant le lien symbolique, afin que votre logique répertoire de travail (pwd -L
) diffère de votre physique répertoire de travail (pwd -P
). Dans ce cas,cd ..
vous reviendrezouter
non pas parce qu'il existe une..
entrée différente , mais parce que votre shell garde une trace de votre répertoire de travail logique et vous fait sortir d'un niveau, plutôt que de référencer l'..
entrée réelle dansinner
.Il s'agit d'une commodité fournie par exemple
bash
dans le cadre de lacd
commande intégrée . Vous pouvez remplacer cela en lui demandant de passer à l'..
entrée réelle avecoù
-P
demandecd
(commepwd
ci-dessus) d'utiliser le chemin physique.la source
cd
de vérifier. Donc, corrigez-moi si je me trompe,..
pointe toujours vers le parent physique, si un lien symbolique l'utilise,..
il sera dirigé vers le parent (physique) réel. La confusion ne se produitcd
que dans les répertoires.ls -lai
vous montre que/..
c'est le répertoire racine lui-même, à nouveau (aka/.
ou/
). Sauf si le système de fichiers est cassé, il ne devrait y avoir aucun autre cas où. == ..
; même quand un fs est monté quelque part, il obtient le bon..
parent (temporaire) (donc il y a de la magie là-dedans, ce..
n'est pas seulement une simple entrée statique dans la table du système de fichiers).