假设我的目录中有 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。