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

jch*_*ger 4 ubuntu terminal rm files

对 /home/user/ 目录中的下一个简单文件结构进行映像:

/home/user 
       |--dir0 
           |--dir1
               |--file1
Run Code Online (Sandbox Code Playgroud)

我当前的目录是“dir1”,我使用以下命令从内部删除目录:

rm -r ../dir1
Run Code Online (Sandbox Code Playgroud)

之后(并且在终端上没有出现任何错误),工作目录仍然相同,并且在使用命令pwd 时,输出为:

user@ubuntu:~/dir0/dir1$ pwd
/home/user/dir0/dir1
user@ubuntu:~/dir0/dir1$
Run Code Online (Sandbox Code Playgroud)

如果已经从文件系统中删除了工作目录,为什么操作系统会返回工作目录是“dir1”?

yae*_*shi 7

我认为pwd您运行的是内置的 bash shell。它只是打印出它在内存中保存的路径,而无需查找文件系统。

$ type pwd
pwd is a shell builtin
$ /bin/pwd
/bin/pwd: couldn't find directory entry in '..' with matching i-node
Run Code Online (Sandbox Code Playgroud)

  • 这个答案(yaegashi 的答案,关于`pwd` 是内置的 shell)是这个问题的正确答案,但是 Fabby 的答案和 unxnut 的答案(inode 在它不再使用之前不会被完全删除)对他们来说也有一些道理. 如果你在 `rm` 之前执行 `ls -lai` 并在 `rm` 之后执行 `ls -ldi`,你会看到当前目录(以前名为 `dir1` 的目录)仍然存在,并且相同的 inode 编号,但链接计数为 0,大小为 0(因此,没有内容)。……(续) (2认同)
  • (续)……另外,如果你在 `rm` 之前和之后执行 `df -i .`,你会看到 `IUsed`(已使用的 inode 计数)减少了 *n*,其中 *n*是 `dir1` 中的文件数。在你从目录中 `cd` 出来后,`df -i` 显示 `IUsed` 又下降了一个,因为目录 inode 终于被释放了。 (2认同)

Fab*_*bby 7

为什么电影被删了还能继续看?

因为文件描述符可能已经消失了,但是 inode 还在!只有当 inode 被删除时,文件才会永远消失!

所以你的情况:当你cd/在那树中的所有文件都将关闭的i节点被回收,将目录消失forever¹...

请记住:这不是 Windows,这是一个专业的操作系统!

;-)

¹除非它在被回收之前被取消删除。