!["rm -rfディレクトリ"を使用すると、段階的に何が起こりますか? [コピー]](https://linux33.com/image/66296/%22rm%20-rf%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%22%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E6%AE%B5%E9%9A%8E%E7%9A%84%E3%81%AB%E4%BD%95%E3%81%8C%E8%B5%B7%E3%81%93%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
ディレクトリに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。