linux - 如果删除当前目录并再次 mkdir,则当前目录无效

标签 linux bash ubuntu mkdir

当用户位于当前目录时,例如Ubuntu bash 中的“/home/test”,如果用户删除该目录并使用另一个 bash 重新创建它,则旧 bash 中的目录无效。但它在新的 bash 中有效。有人可以解释为什么会发生吗?

最佳答案

Linux 文件系统中的文件不是通过其路径来标识的,而是通过其 inode 来标识的。 。新目录具有相同的路径,但不是同一个目录。您的 shell 很困惑,因为它引用了一个不再存在的目录;事实上,存在具有相同路径的另一个目录对此并不重要。如果您在无效目录中执行cd $(pwd)(即重新输入它),它将被认为是有效的。

想象一下与您的老板谈论升职事宜。第二天,老板被解雇了,并由其他人取代。你去问你的老板关于升职的事,他说“我不知道你在说什么”。你的旧老板和新老板都是你的老板;但不是同一个人。同样的事情。

<小时/>

这是一个有趣的实验来展示 inode-vs-filename 的差异:

( echo foo ; mv test.txt test2.txt ; echo bar ) > test.txt

人们会天真地期望我们有 test2.txtfootest.txtbar (我们将 foo 写入 test.txt,它被移动,然后我们将 bar 写入 test.txt)。但这会生成一个包含 foobar 的文件 test2.txt。原因是重定向打开 test.txt 进行写入,这涉及查找路径并找到分配给该路径的 inode,将其存储在文件描述符中。从那时起,仅使用文件描述符(以及 inode )进行写入。当我们将目录项从 test.txt 更改为 test2.txt 时,不会影响 inode。

所以发生的事情是,我们查找 test.txt,获取 inode,将 foo 写入该 inode,更改目录条目以反射(reflect)文件名的更改,将 bar 写入同一 inode。这就像和你的老板聊天一样;老板被解雇;但你发现他在家并继续和他聊天。他的头衔可能已经改变,但他仍然是同一个人。

关于linux - 如果删除当前目录并再次 mkdir,则当前目录无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57985731/

相关文章:

linux - 如何在 Linux 中使用 curl 或任何 shell 脚本或任何命令行实用程序将整个目录上传到 artifactory?

git - 在 Windows 上添加 Git 凭据

ubuntu - 删除问候语中的 Fish shell 错误消息

linux - 如何grep一个文件,它是一个从awk重定向的字符串

linux - bash 脚本中带有空格的基本名称?

linux - Ubuntu相当于yum的WhatProvides,找到哪个包提供了一个文件

amazon-web-services - 使用 Apache Airflow 编辑存储在 AWS S3 中的 CSV,无需下载

python - telnetlib.write() 不复制 telnet.interact()

ruby-on-rails - Linux 中的 Rails 2 + Paperclip + ImageMagick 不起作用?

linux - 通讯命令 - 不必要的限制?