使用“rm -rf 目录”时,一步一步会发生什么?

使用“rm -rf 目录”时,一步一步会发生什么?

假设我的目录中有 150 GB 的数据,并且我不小心对目录运行了此命令。

突然我意识到,我不应该将“/”放在目录的开头,几秒钟后我用Ctrl+取消了命令。C

该目录仍然存在,并且当前有从 a 到 z 的文件夹,但如果是 Windows,我会知道什么消失了,什么没有。我尝试在测试服务器中测试此命令,并假设该命令将删除以 0-9 开头的文件夹,然后是 az。在我的测试中,我无法验证这个理论,因为要么一切都消失了,要么什么都没有被删除。

不过还是很好奇。是这样吗?这个命令到底是如何一步步工作的?我丢失了一些数据吗?

答案1

这个命令到底是如何一步步工作的?

递归。rm如果目录不为空,则不会删除该目录。因此,它将首先递归到该目录中,并删除其内容(“常规”文件)。这意味着取消链接进程从目录层次结构的最深层开始,并在目录清空后向上删除目录。我想你可以这样说(即使可能略有不同):

/
---- somedir                        <-- (5)
-------- a                          <-- (4)
------------ a                      <-- (3)
---------------- a                  <-- (2)
-------------------- somefile1.txt  <-- (1)
-------------------- somefile2.txt  <-- (1)
-------------------- somefile3.txt  <-- (1)
-------------------- [...]
---------------- b                  <-- (2)
---------------- [...]              <-- (2)
------------ b                      <-- (3)
------------ [...]                  <-- (3)
-------- b                          <-- (4)
-------- [...]                      <-- (4)

     ^   ^   ^   ^   ^
    (5) (4) (3) (2) (1)

顺便说一句,rm有一个-v选项可以帮助您了解它运行时会发生什么。

-v, --verbose
    explain what is being done

我丢失了一些数据吗?

是的(很有可能),位于目录层次结构的底部。取消文件链接非常快,如果这些文件足够小,内核很快就会删除与每个文件关联的数据块。

在你的目录中尽可能地走下去:像/dir/a/e/g/r/c/somefile(假设按字母顺序排序走那么远)的文件很可能会消失......当然,你丢失的数据量取决于你按Ctrl+ 的速度C

相关内容