删除Linux上的当前目录

删除Linux上的当前目录,linux,unix,directory,Linux,Unix,Directory,首先,举个例子: ~ $ ls ~ $ mkdir foo; cd foo foo $ pwd /Users/person/foo foo $ ls foo $ touch file1 file2 file3 foo $ ls file1 file2 file3 foo $ rm * foo $ ls foo $ rm -r ../foo foo $ pwd /Users/person/foo/ foo $ touch file4 touch: file4: No such file

首先,举个例子:

~ $ ls
~ $ mkdir foo; cd foo
foo $ pwd
/Users/person/foo
foo $ ls
foo $ touch file1 file2 file3
foo $ ls
file1    file2    file3
foo $ rm *
foo $ ls
foo $ rm -r ../foo
foo $ pwd
/Users/person/foo/
foo $ touch file4
touch: file4: No such file or directory
foo $

删除当前所在的目录时会发生什么情况?为什么我仍然在一个不存在的目录中(我假设它不存在只是因为我不能写入它)?我想它与某种指针有关。

您的shell进程将该目录作为其当前目录,它在磁盘上保持其inode的分配方式与打开的文件在断开链接后保持其inode的分配方式大致相同,直到持有该文件的打开句柄的所有进程都关闭它们。

您的shell进程将该目录作为其当前目录,该目录使其索引节点在磁盘上保持分配状态,就像打开的文件在断开链接后保持其索引节点分配状态一样,直到持有该文件的打开句柄的所有进程都关闭它们。

请参见--这是否回答了您的问题?(文件和目录之间的处理方式没有太大区别。)@rodion这很有帮助,但我不理解这个特定场景。看——这回答了你的问题吗?(文件和目录之间的处理方式没有太大区别。)@rodion这很有帮助,但我不理解这种特殊情况。因此,如果它仍然在磁盘上(即使是暂时的),为什么我不能写入它?@Whymarrh,它实际上不再在磁盘上了。就像一个僵尸进程,它只等待最后一个描述符关闭(包括您在shell当前目录中持有的描述符),但它已经死了,因此您无法再对它执行任何操作,包括创建新文件。(之前的注释在一些测试后删除)实际上,内核似乎会检查当前目录是否被删除,并且不允许在其中创建文件,以避免在删除的目录被释放以进行释放后必须删除它们。通过创建另一个与已删除目录同名的目录进行测试,同时仍将已删除的目录保持为当前目录-新文件没有进入新目录,但被拒绝。因此,如果它仍然在磁盘上(即使是暂时的),为什么我不能写入它?@Whymarrh,它实际上不再在磁盘上。就像一个僵尸进程,它只等待最后一个描述符关闭(包括您在shell当前目录中持有的描述符),但它已经死了,因此您无法再对它执行任何操作,包括创建新文件。(之前的注释在一些测试后删除)实际上,内核似乎会检查当前目录是否被删除,并且不允许在其中创建文件,以避免在删除的目录被释放以进行释放后必须删除它们。通过创建与已删除目录同名的另一个目录进行测试,同时仍将已删除的文件保持为当前文件-新文件未转到新目录,但被拒绝。