Logs

截斷在另一個程序中打開的文件

  • May 10, 2021

如果我嘗試truncate -s 0 log.log:>log.log具有相同的行為)磁碟上顯示的空間確實變得可用,但ls -l文件的大小()仍然相同(但du顯示較少)。據我了解,發生這種情況是因為指針仍然“舊”。

此行為導致我無法使用cat ... | grep ...命令:CLI 說該文件是二進製文件。所以唯一的方法是使用less或其他命令。

那麼,如何截斷文件,即在另一個程序中以寫入模式打開並在截斷後具有正確的文件大小?我需要log.log將數據截斷到另一個文件,或者只是刪除文件中的整個數據而不刪除文件本身

你不能。“下一個要寫入的塊”指針保存在打開文件以進行寫入的程序的記憶體中。您無法從外部訪問它。

已經編寫了一些程序來關閉舊日誌並在收到信號時打開新日誌。

簡單地刪除文件,因為程序即將寫入塊 1024,將導致 1023 塊零,數據塊 1024。

引用自:https://unix.stackexchange.com/questions/649094