ディレクトリに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。