web-dev-qa-db-fra.com

Comment UNIX gree-t-il la trace du répertoire de travail d'un utilisateur lors de la navigation dans le système de fichiers?

Dites que je me connecte à une coquille sur un système UNIX et commencez à taper des commandes. J'ai initialement commencé dans le répertoire de base de mon utilisateur ~. Je pourrais de là cd bas dans le répertoire Documents.

La commande de modifier le répertoire de travail ici est très simple de manière intuitive pour comprendre: le nœud parent a une liste de nœuds d'enfants qu'il peut accéder, et il utilise probablement une variante (optimisée) d'une recherche pour localiser l'existence d'un nœud enfant avec le Nommez l'utilisateur entré et le répertoire de travail est alors "altéré" pour correspondre à cela - corrigez-moi si je me trompe là. Il peut même être plus simple que la coque est simplement "naïvienne" essaie d'essayer d'accéder exactement au répertoire selon les souhaits de l'utilisateur et lorsque le système de fichiers renvoie un type d'erreur, la coque affiche une réponse en conséquence.

Ce que je suis intéressé, cependant, c'est comment le même processus fonctionne lorsque je navigue dans un répertoire, c'est-à-dire à un parent ou à un parent d'un parent.

Compte tenu de l'emplacement de mon inconnu, probablement "aveugle" de Documents, l'un des répertoires éventuellement de nombreux répertoires de l'arborescence du système de fichiers avec ce nom, comment UNIX détermine-t-il où je devrais être placé ensuite? Fait-il une référence à pwd et examinez cela? Si oui, comment pwd piste l'état de navigation actuel?

29

Fait intéressant, traditionnellement cd .. est beaucoup plus simple que pwd. Les annuaires nommés .. sont placés explicitement dans le système de fichiers. Le système conserve la trace du périphérique/de l'inode du répertoire actuel, de sorte cd .. ou plus précisément l'appel système chdir("..") _ Cela implique simplement de rechercher le nom "." Dans le fichier appartenant à l'inode actuel de l'annuaire et à la modification Le périphérique/l'inode du répertoire actuel à la valeur trouvée là-bas.

pwd (plus précisément /bin/pwd) suit .. Links successivement et lit les annuaires respectifs jusqu'à la recherche de l'inode à partir de l'inaction, montage de la liste de ces noms en sens inverse jusqu'à ce qu'il atteigne le répertoire racine (notamment ne contenant pas une entrée .. ).

Il s'agit maintenant du comportement de base original de bas niveau. Commandes de shell réelles pwd s'appuie plutôt sur une variété de techniques en cache le nom du chemin actuel. Mais au cœur, ce n'est que son inode qui est réellement connu. Cela implique qu'une fois que les symboles sont utilisés pour la navigation des répertoires, les notions de nom de répertoire de travail actuelles de la coque actuelle et du système /bin/pwd puissent diverger.

0
user267857