想象 /home/user/ 目录中的下一个简单文件结构:
/home/user
|--dir0
|--dir1
|--file1
我当前的目录是“dir1”,我使用以下命令从内部删除该目录:
rm -r ../dir1
之后(并且在终端上没有收到任何错误),工作目录仍然相同,并且在使用命令时密码输出是:
user@ubuntu:~/dir0/dir1$ pwd
/home/user/dir0/dir1
user@ubuntu:~/dir0/dir1$
如果工作目录已从文件系统中删除,为什么操作系统会返回工作目录为“dir1”?
答案1
我认为pwd
你运行的是内置的 bash shell。它只是打印出它在内存中保存的路径,而不查找文件系统。
$ type pwd
pwd is a shell builtin
$ /bin/pwd
/bin/pwd: couldn't find directory entry in '..' with matching i-node
答案2
为什么电影被删除了还能继续看?
因为文件描述符可能消失了,但索引节点仍然存在!只有当索引节点被删除时,文件才会永远消失!
所以在你的情况下:当你cd
关闭/
该树中的所有文件时,索引节点将被回收,目录将永远消失…
请记住:这不是 Windows,这是专业操作系统!
;-)
除非它在回收之前被取消删除。
答案3
操作系统不会返回工作目录为“dir1”,但 shell 会返回。 shell 跟踪当前工作目录,并且您正在运行的“pwd”命令是 shell 中内置的命令。 shell 不知道您的“rm”命令删除了该目录。
$ type pwd
pwd is a shell builtin
尝试运行 /bin/pwd 来代替:
$ /bin/pwd
/bin/pwd: couldn't find directory in .. with matching i-node
答案4
文件(目录)已打开。当您执行rm
此操作时,操作系统会将其标记为已删除,而不实际删除它。如果您尝试cd
从另一个 shell 实例进入此目录,您将被拒绝该权限。cd
退出该目录后,该目录实际上将被删除。