为什么删除目录后密码不更新?

为什么删除目录后密码不更新?

我尝试了一个小实验,在桌面目录中创建了 2 个文件夹 Dir1 和 Dir2,这样 Dir1 是 Dir2 的父级。 /home/用户名/桌面/Dir1/Dir2

然后,我使用 cd 将我的密码设置为 /home/username/Desktop/Dir1/Dir2。接下来我使用 rm -r /home/username/Desktop/Dir1 删除 Dir1。现在,如果我使用 pwd,它仍然显示为 /home/username/Desktop/Dir1/Dir2,但现在它不存在。另外,此时如果我使用 ls 或 cd .. 它会生成一个错误,提示“无法访问 /home/username/Desktop/Dir1/Dir2:没有这样的文件或目录”,这绝对是正确的,但我认为生成此问题是因为删除文件夹后密码未更新。

据我所知,解决这个问题的方法也很简单,您可以转到父目录,然后删除请求的目录。

我想知道是否有某些特定原因导致 pwd 未更新,我的解决方案是否正确和/或我刚刚发现了一个错误?

答案1

实际上,Dir2 存在,但是姓名 Dir2才不是。使困惑? :) shell 的当前目录仍然是 name 引用的目录Dir2,这使该目录保持不变。这类似于匿名文件。通常,当一个文件链接数变为零,则文件被删除,inode 被释放。但是,如果某个进程仍打开该文件,则内核不会删除该文件,直到该进程显式或隐式地通过退出关闭该文件。在Dir2这种情况下,只要 shell 不更改其当前目录,它仍会“打开”该目录。

什么Dir1目录中的名称Desktop及其下面的整个名称层次结构(包括...条目)都消失了。以前称为的目录Dir1也消失了(假设没有其他进程将其作为当前目录)。索引节点级别的文件和目录不形成层次结构,即,没有从索引节点到父项、子项或同级条目的链接。层次结构是由目录条目单独构建的,目录条目本质上是(名称,索引节点)对,指向文件和其他目录。

在这个冗长的介绍之后,我们可以重新表述您原来的问题,使其内容如下:“当目录条目Dir2被删除时,为什么 shell 不将其当前目录更改为其他目录Dir1?”原因之一是 shell 甚至不知道这一点。其他一些进程已运行该rm程序并删除了目录,但没有任何机制可以告知 shell 相关信息。其次,shell 将选择哪个目录作为其新的当前目录?使用系统调用更改目录chdir,该系统调用采用包含新目录的字符串作为参数。 shell 可以尝试 a chdir(".."),但正如我们在上面看到的,我们已经销毁了该..条目!三、为什么shell要改变当前目录?它没有理由这样做,它所处的位置很舒服,而且它不习惯在没有明确告知的情况下神奇地更改目录。

诚然,这种情况有点病态,但用户应该避免这种情况。

相关内容