使用命令行界面从内部删除目录

使用命令行界面从内部删除目录

想象 /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退出该目录后,该目录实际上将被删除。

相关内容