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

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

ディレクトリ エントリは、inode への単なるポインタです。 inode には、ファイルに関するメタ情報 (名前以外) と、ファイルのデータへのポインター (存在する場合) が含まれます。ファイルのコピーを開始すると、inode へのハンドルが取得されます。

オペレーティング システムは、i ノードへの参照の数を維持します。 inode への参照がある限り、inode とファイルのデータは保持されます。 inode へのすべての参照が削除されると、inode が削除され、ファイルに必要なスペースが解放されます。

コピーのためにファイルを開いているので、プロセスがファイルを閉じるまで保持されます。これは、ファイル転送が終了したときに発生し、コピー プロセスが失敗した場合に発生します。ファイル転送が途中で失敗し、ファイルへのすべてのハード リンクを削除した場合、転送を正常に再開することはできません。

編集:他の人が指摘したように、同じデバイスでのファイルの移動は、データを移動せずに行われます。代わりに、宛先ディレクトリに新しいディレクトリ エントリが作成され、元のディレクトリ エントリは削除されます。

同じファイルに対して複数のディレクトリ エントリを持つことができます。これらはハードリンクと呼ばれます。これらは、元のエントリを削除せずに、ファイルの新しいディレクトリ エントリを作成することによって作成されます。ファイル システムの inode には、ファイルを指すディレクトリ エントリの数を記録するための参照カウントがあります。

EDIT2:プロセスがクラッシュまたは強制終了された場合、メモリ内アクセス カウントがゼロになるため、ファイルは完全に削除されます。プログラムが正常終了した場合の動作です。

停電やその他の不規則なシステム シャットダウンの場合、ディスクには fsck が必要です。 (ファイルシステムチェック) 完全にマウントする前に。ディスク上の i ノードとディレクトリ構造の状態に応じて、スペースが回復されるか、ファイルがディレクトリに残るか、新しいエントリが lost+found に作成されます。 ディレクトリ。結果は、どの変更がディスクにフラッシュされたか、またはファイル システム ジャーナルに書き込まれたかによって異なります。


Matt Jenkins が説明したように、OS (ファイルシステム) は、アプリケーションによって開かれているファイルを追跡します。プロセスがファイルを開いたままにしている限り、そのデータはディスク上に残ります (ファイルが削除され、他のプログラムから見えなくなったり、アクセスできなくなったりしても)。

この結果、ファイルが占有していたスペースは、それを使用している最後のプロセスがファイルを閉じた後にのみ再利用できることに注意してください。これは、Linux/Unix ファイル システム操作に関する FAQ です。 faq.html )。スペースを解放する必要がある場合、大きなファイル (ログファイルなど) を削除するだけでは十分ではありません。また、それらのファイルを開いたままにしておくプロセスがないことも確認する必要があります (通常、ログファイルの問題)。


実際には非常に簡単です。このファイルは、参照のリスト (ファイルにアクセスしているプロセス) を維持します。ファイルを削除すると、ディレクトリからリストが削除されるだけで、ファイル自体は削除されません。ファイルを開いているプログラムは、引き続きファイルにアクセスできます。ファイルが実際に削除されるのは、ファイルにアクセスしているすべてのプログラムがファイルを閉じたときだけです。

また、ファイルを移動すると (同じファイルシステム内にある場合)、ファイルは実際には移動しません。ファイルが存在するディレクトリへのポインターが変更されるだけです。


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

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

  3. Vimでファイルタイプを使用する方法は?

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

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

  3. Linux でデバッガーはどのように機能しますか?

  1. chmodを使用してファイルのパーミッションを変更するにはどうすればよいですか?

  2. UNIX / Linux:ディレクトリとファイルでスティッキー ビットを使用する方法

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