Linux中的“陈旧文件句柄”是什么意思?

时间:2013-11-20 19:34:33

标签: linux unix

假设我打开了一个终端,并通过该终端我cd编辑了某个目录。通过另一个终端,我删除该目录并从相同的备份恢复它。当我尝试vim来自第一个终端的文件时,在同一目录中,为什么我会收到有关陈旧文件句柄的错误?这是什么意思? (另一方面,我发现可以通过cd $(pwd)绕过此问题。)

1 个答案:

答案 0 :(得分:65)

删除目录后,将回收该目录的inode(以及其内容的inode)。 shell对该目录的inode(及其内容的inode)的指针现在不再有效。从备份恢复目录时,旧的inode (必然)重用;目录及其内容存储在随机inode中。唯一保持不变的是 parent 目录为恢复的目录重用相同的名称(因为你告诉它)。

现在,如果您尝试访问原始shell仍指向的目录的内容,它会将该请求作为对原始inode的请求传递给文件系统,该原始inode已被回收(甚至可能在现在用于完全不同的东西)。因此,您收到stale file handle消息,因为您要求提供一些不存在的数据。

当您执行cd操作时,shell会重新评估您为其提供的任何目标的inode位置。既然你的shell知道目录的新inode(以及它的内容的新inode),未来对其内容的请求将是有效的。