【发布时间】:2025-12-20 21:55:11
【问题描述】:
我正在尝试提出一个 unix 命令管道,它允许我仅将程序输出的最新 n 行记录到文本文件中。
文本文件的长度不得超过 n 行。 (第一次填文件的时候可能会少)
它将在内存/资源有限的设备上运行,因此保持较小的文件大小是当务之急。
我试过这样的东西(n=500):
program_spitting_out_text > output.txt
cat output.txt | tail -500 > recent_output.txt
rm output.txt
或
program_spitting_out_text | tee output.txt | tail -500 > recent_output.txt
显然这两种方法都不适合我的目的......
任何人有一个很好的方法来做到这一点?还是我必须编写脚本/实用程序?
注意:我不想与 dmesg 有任何关系,并且必须使用标准的 BSD unix 命令。 “program_spitting_out_text”每秒打印大约 60 行。
提前致谢!
【问题讨论】:
-
program_spitting_out_text是保持文件打开还是打开/关闭每个日志行输出? -
更重要的是 - 假设您想要日志,为什么您只想要一些临时行。假设您遇到错误情况。你打算实时阅读吗?这就是这个设计所需要的。您需要考虑将数据移到其他地方。否则根本不要理会日志。
-
第二个选项有什么问题? (当然省略了
tee部分) -
@paxdiablo 好问题,我不知道答案。由于 program_spitting_out_text 只是将文本打印到屏幕上,“ > output.txt”的行为真的取决于程序吗?我会假设这一行 program_spitting_out_text > output.txt 将使文件保持打开状态。
-
@jimmcnamara program_spitting_out_text 会在某个时候死掉。我想先捕获 500 行输出。
标签: unix logging pipeline tail