如果我尝试truncate -s 0 log.log
(:>log.log
具有相同的行为),磁盘上显示的空间确实会变得可用,但文件的大小(ls -l
)仍然相同(du
显示较少)。据我了解,发生这种情况是因为指针仍然是“旧的”。
此行为导致我无法使用cat ... | grep ...
命令:CLI 说该文件是二进制的。所以唯一的方法是使用less
或其他命令。
那么,如何截断在另一个进程中以写入模式打开的文件,并在截断后具有正确的文件大小?我需要将数据log.log
截断到另一个文件,或者只删除文件中的整个数据而不删除文件本身
答案1
你不能。 “下一个要写入的块”指针保存在打开文件进行写入的进程的内存中。您无法从外部访问它。
有些程序被编写为在收到信号时关闭旧日志并打开新日志。
当程序即将写入块 1024 时,简单地删除该文件将导致 1023 个零块和块 1024 中的数据。