如果删除当前目录并再次 mkdir,则当前目录无效
Current directory is invalid if you remove it and mkdir it again
当用户在当前目录中时,例如Ubuntu bash 中的“/home/test”,如果用户删除此目录并用另一个bash 重新创建它,则旧bash 中的目录无效。但它在新 bash 中有效。有人可以解释为什么会这样吗?
Linux 文件系统中的文件不是由它们的路径标识的,而是由它们的 inode 标识的。新目录路径相同,但不是同一个目录。您的 shell 感到困惑,因为它引用了一个不再存在的目录;存在具有相同路径的另一个目录这一事实对它来说无关紧要。如果您在无效目录中执行 cd $(pwd)
(即重新输入),它将被认为是有效的。
想象一下,与您的老板谈论升职。第二天老板被甩了,换人了。你去问你老板升职的事,他说"I have no idea what you're talking about"。你的老老板和新老板都是你的老板;但不是同一个人。同样的事情。
这里有一个有趣的实验来展示 inode-vs-filename 的区别:
( echo foo ; mv test.txt test2.txt ; echo bar ) > test.txt
人们会天真地期望 test2.txt
和 foo
以及 test.txt
和 bar
(我们将 foo
写成 test.txt
, 它被移动了,然后我们写 bar
到 test.txt
)。但这会生成一个文件 test2.txt
,其中包含 foo
和 bar
。原因是重定向打开test.txt
写,这涉及到查找路径,找到分配给该路径的inode,存储在文件描述符中。从那时起,只有文件描述符用于写入(因此是索引节点)。当我们将目录条目从 test.txt
更改为 test2.txt
时,它不会影响 inode。
所以发生的事情是,我们查找 test.txt
,获取 inode,将 foo
写入该 inode,更改目录条目以反映文件名的更改,写入 bar
到同一个 inode。这就像和你的老板聊天;老板被解雇;但您发现他在家并继续与他聊天。他的头衔可能已经改变,但他仍然是同一个人。
当用户在当前目录中时,例如Ubuntu bash 中的“/home/test”,如果用户删除此目录并用另一个bash 重新创建它,则旧bash 中的目录无效。但它在新 bash 中有效。有人可以解释为什么会这样吗?
Linux 文件系统中的文件不是由它们的路径标识的,而是由它们的 inode 标识的。新目录路径相同,但不是同一个目录。您的 shell 感到困惑,因为它引用了一个不再存在的目录;存在具有相同路径的另一个目录这一事实对它来说无关紧要。如果您在无效目录中执行 cd $(pwd)
(即重新输入),它将被认为是有效的。
想象一下,与您的老板谈论升职。第二天老板被甩了,换人了。你去问你老板升职的事,他说"I have no idea what you're talking about"。你的老老板和新老板都是你的老板;但不是同一个人。同样的事情。
这里有一个有趣的实验来展示 inode-vs-filename 的区别:
( echo foo ; mv test.txt test2.txt ; echo bar ) > test.txt
人们会天真地期望 test2.txt
和 foo
以及 test.txt
和 bar
(我们将 foo
写成 test.txt
, 它被移动了,然后我们写 bar
到 test.txt
)。但这会生成一个文件 test2.txt
,其中包含 foo
和 bar
。原因是重定向打开test.txt
写,这涉及到查找路径,找到分配给该路径的inode,存储在文件描述符中。从那时起,只有文件描述符用于写入(因此是索引节点)。当我们将目录条目从 test.txt
更改为 test2.txt
时,它不会影响 inode。
所以发生的事情是,我们查找 test.txt
,获取 inode,将 foo
写入该 inode,更改目录条目以反映文件名的更改,写入 bar
到同一个 inode。这就像和你的老板聊天;老板被解雇;但您发现他在家并继续与他聊天。他的头衔可能已经改变,但他仍然是同一个人。