読んでいるファイルにファイルを移動する

読んでいるファイルにファイルを移動する

ファイルを移動しましたが、ターゲットファイルが既に存在していて読んでいる場合、操作は成功しますか?ターゲットファイルの読み取り操作が継続する時間によって異なりますか?

答え1

読み取り操作は、完了に要する時間に関係なく成功します。

なぜそしてどのように動作しますか?

読み取り操作が開始されると、ファイルのインデックスノードファイルの内容を読み取るためのハンドルとして使用されます。

他のファイルがターゲットファイルに移動されると、結果は新しいiノードになります。つまり、ディスク上のファイルの物理的な内容が別の場所に配置され、読み取られているファイルの元の内容は変更されません。

唯一の共通点はパス/ファイル名であり、デフォルトのinodeとディスクの物理的な場所は変更されます。

読み取り操作が完了すると(他のプロセスに古いファイルへの開かれたファイルハンドルがまだなく、そのinodeを参照する他のハードリンクがないと仮定すると)、古いデータは削除されます。

移動操作が完了すると、ファイルは新しいinodeインデックス番号を持ちます。

を使用してファイルinodeインデックス番号を表示できますls -i /tmp/some-file

上記と同じ理由で、ファイルを使用するアプリケーションはファイルの内容ではなく、inode(ディスク上の実際のファイルの内容を指す)からのみ読み取るため、アプリケーションでまだ使用されているファイルを削除できます。ファイルシステムで参照されている内容が削除されました。

関連情報