GNU/Linux >> Linux の 問題 >  >> Linux

rm はどのように機能しますか? rm は何をしますか?

<ブロック引用>

私の理解では、「ファイル」は事実上、ファイルの内容に対応するメモリの場所へのポインターにすぎません。

用語には注意してください。ファイル (およびポインタ) は、メモリ (RAM) ではなく、ディスク上にあります。

<ブロック引用>

ファイルを 'rm' した場合、確実にそのポインターを削除しているに違いありません。

はい。何が起こるかは、ファイルシステムに大きく依存します。一部には、どのブロックがフリー/ビジーであるかのビットマップがあります。したがって、解放されたブロックごとにビットを反転する必要があります。他のファイルシステムは、より洗練された方法で空き領域を追跡します。

<ブロック引用>

これは、実際には何も上書きされていないことを示唆しています...

正しい。さまざまな「元に戻す」ユーティリティを見つけることができます。ただし、ファイルシステムによっては、かなり複雑になる可能性があります。しかし、何年も前に保存したデータがまだ残っているか、上書きされる可能性があります。それはすべて、細部に依存します。たとえば、e2fsprogs を参照してください。

<ブロック引用>

では、メモリ アドレスへのポインタを削除するのは rm だけですか?

ファイルに関するメタデータを提供する「ディレクトリ エントリ」も削除する必要があります。 (ファイル名の最初のバイトが消去されることもあります)。

<ブロック引用>

以前のように、データはまだ連続したブロックに残っていますか?

はい、データはまだあります。ただし、それが連続したブロックであると想定しないでください。ファイルはディスク全体で断片化でき、再構築方法を指示する多くのポインターを使用できます。また、RAID を使用している場合、事態は非常に複雑になります。


はい。 rm 単にポインタを削除します。ファイル (ハード リンク) への複数のポインターがある場合は、rm でそれらのポインターの 1 つを削除します。 他のものは完全に変更されず、データは引き続き利用可能です。

これらのリンクをすべて削除してもデータには影響しませんが、以前はそのデータを保存するために予約されていたブロックを OS が自由に再利用できるようになりました。

ファイルを開くプロセスは、そのファイル ハンドルを作成することに注意してください。これにより、ファイルへの参照の総数が増えます。ファイル システムからすべてのポインタを削除しても、オペレーティング システムでファイルのオープン ファイル ハンドルを使用して実行中のプロセスが残っている場合、ポインタの数はゼロにはならず、ファイルは実際には削除されません。その最終ポインタが閉じられたときにのみ、ファイルシステムはディスク領域を解放されたものとして登録し、その時点でのみ、OS は以前にそのデータを保存するために予約されたブロックを自由に上書きできるようになります。

問題のブロックの再利用が発生したかどうかに応じて、将来の任意の時点でそのデータを回復できる場合とできない場合があります。

ちなみに、そもそもデータが連続したブロックにあるという保証はありません。


Linux
  1. Awkの「!a [$ 0] ++」はどのように機能しますか?

  2. Exec 3とは何ですか?

  3. Ssh – Tcp-keepaliveはSshでどのように機能しますか?

  1. Makefileとは何ですか?どのように機能しますか?

  2. DNSとは何ですか?どのように機能しますか?

  3. 使用中のファイルを移動 -- どのように機能するのか?

  1. NGINXとは何ですか?それはどのように機能しますか?

  2. Webサーバーとは何ですか?Webサーバーはどのように機能しますか?

  3. スティッキービットはどのように機能しますか?