Unix 命令从“less”内部清空日志文件?

Unix 命令从“less”内部清空日志文件?

我更喜欢使用“less”来读取日志文件。与“tail -f”相反,我既可以跟踪(Shift + F)、停止(Ctrl + C)、上下导航ud

现在我真正想要的是能够在程序内部清空某个日志文件。这可能吗?

答案1

我认为最简单的方法是:
!>%
即:异常标记"!"、大于号">"和百分号"%"
也许有帮助。

答案2

您只需按下 即可v在 vim 中编辑文件。在 vim 中,您应该会停留在 less 中上次所在的行,因此按下Vggd将从当前位置删除到文件顶部。按下:wq您应该会返回 less。

但是,写入日志文件的应用程序可能根本不喜欢这样,所以您的里程可能会有所不同。

答案3

我能想到的最简单的方法可能是^Z将当前进程置于后台,删除文件,然后键入fg以返回到进程。也就是说,删除日志文件并不是处理它们的最佳方法,通常最好使用logrotate压缩它们。

答案4

您可以使用!cp /dev/null %,截断当前查看的文件。但正如其他人所指出的,它可能无法正常工作(例如,如果写入文件的应用程序保持文件打开,而不是为每个条目打开/写入/关闭)。您也可以尝试!mv -f % %.old && cp /dev/null %,它会将文件移开,然后重新创建它。

不管怎样,我看到了一些奇怪的行为较少的尝试这些时。(R不从磁盘刷新,G不寻找并显示当前 EOF(通常用于“拉入”新行而不进入“尾部模式”),hqG从文件读取新行,但将文件的全部内容附加到缓冲区的末尾,而不是仅将新行添加到末尾(文件有第 1 行,然后是 1/2,然后是 1/2/3 行等。随着时间的推移,较少的如果我在每个新行后执行两次“hqG”,可能会显示 1/1/1/2/1/2/1/2/3/1/2/3/1/2/3/4/1/2/3/4/1/2/3/4/5))。

这些相同的问题似乎也发生在“使用v编辑器截断”方法中。

相关内容