"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

関連情報