Que signifie «gérer les fichiers obsolètes» sous Linux?

Disons que j’ai un terminal ouvert et que, via ce terminal, j’ai cd à un répertoire. A travers un autre terminal, je supprime ce répertoire et le restaure d’une sauvegarde identique. Lorsque j’essaie de vim un fichier à partir du premier terminal, dans le même répertoire, pourquoi est-ce que je reçois une erreur concernant un descripteur de fichier obsolète? Qu’est-ce que ça veut dire? (Sur une note de côté, j’ai trouvé qu’il est possible de contourner ce problème via cd $(pwd) .)

Lorsque le répertoire est supprimé, l’ inode de ce répertoire (et les inodes de son contenu) sont recyclés. Le pointeur de votre shell sur l’inode de ce répertoire (et les inodes de son contenu) n’est plus valide. Lorsque le répertoire est restauré à partir de la sauvegarde, les anciens inodes ne sont pas (nécessairement) réutilisés. le répertoire et son contenu sont stockés sur des inodes aléatoires. La seule chose qui rest la même est que le répertoire parent réutilise le même nom pour le répertoire restauré (parce que vous l’avez dit).

Maintenant, si vous tentez d’accéder au contenu du répertoire sur lequel pointe toujours votre shell d’origine, il communique cette demande au système de fichiers en tant que demande de l’inode d’origine, qui a depuis été recyclé (et peut même être utilisé pour quelque chose). entièrement différent maintenant). Vous obtenez donc un message de stale file handle car vous avez demandé des données inexistantes.

Lorsque vous effectuez une opération cd , le shell réévalue l’emplacement de l’inode de la destination que vous lui donnez. Maintenant que votre shell connaît le nouvel inode pour le répertoire (et les nouveaux inodes pour son contenu), les futures requêtes pour son contenu seront valides.