別のプロセスで開かれたファイルを切り捨てる

別のプロセスで開かれたファイルを切り捨てる

truncate -s 0 log.log(同じ振る舞いで)試してみると、:>log.logディスクに表示されているスペースが利用可能になりますが、ファイルサイズ(ls -l)はまだ同じです(du少ない表示)。私が理解したのは、ポインタがまだ「古い」ので、これが起こります。

この動作により、コマンドは使用できませんcat ... | grep ...。 CLIでは、ファイルはバイナリであると言います。したがって、唯一の方法は、lessまたは他のコマンドを使用することです。

それでは、他のプロセスで書き込みモードで開かれたファイルを切り取り、切り捨てて正しいファイルサイズを持つようにするにはどうすればよいですか?log.logデータを別のファイルに切り捨てたり、ファイル自体を削除せずに、ファイルのデータ全体を削除する必要があります。

答え1

あなたはできません。 「書き込み次のブロック」ポインタは、書き込みのためにファイルを開いたプロセスのメモリに保持されます。外部からはアクセスできません。

いくつかのプログラムは、シグナルが受信されると、古いログを閉じて新しいログを開くように書かれています。

プログラムがブロック1024を書き込もうとすると、単にファイルを削除すると、1023個のゼロブロックが生成され、データはブロック1024に格納されます。

関連情報