Подтвердить что ты не робот

Что означает "устаревший дескриптор файла" в Linux?

Скажем, что у меня открыт терминал, и через этот терминал у меня есть cd 'ed в какой-то каталог. Через другой терминал я удаляю этот каталог и восстанавливаю его из идентичной резервной копии. Когда я пытаюсь выполнить vim файл с первого терминала, в том же каталоге, почему я получаю сообщение об ошибке с устаревшим дескриптором файла? Что это значит? (С другой стороны, я обнаружил, что эту проблему можно обойти через cd $(pwd).)

4b9b3361

Ответ 1

Когда каталог удаляется, inode для этого каталога (и inodes для его содержимого) перерабатываются. Указатель, который ваша оболочка имеет для этого каталога inode (и его содержимого inodes), теперь уже недействительна. Когда каталог восстанавливается из резервной копии, старые inodes не используются (обязательно) повторно; каталог и его содержимое хранятся в случайных инодах. Единственное, что остается прежним, - это то, что родительский каталог использует одно и то же имя для восстановленного каталога (потому что вы сказали ему).

Теперь, если вы попытаетесь получить доступ к содержимому каталога, на который указывает ваша исходная оболочка, он передает этот запрос в файловую систему в качестве запроса на исходный индексный дескриптор, который с тех пор был переработан (и может даже быть включен теперь используйте что-то совершенно другое). Таким образом, вы получаете сообщение stale file handle, потому что вы запрашивали некоторые несуществующие данные.

Когда вы выполняете операцию cd, оболочка повторно оценивает местоположение inode любого места назначения, которое вы ему даете. Теперь, когда ваша оболочка знает новый inode для каталога (и новые inodes для его содержимого), будущие запросы на его содержимое будут действительны.