我的生产服务器有atop
版本 1.23,我有一个由它编写的数据文件,我需要从中提取进程的完整命令行。
很遗憾:
- 此版本
atop
不会显示超出显示屏第 80 列的数据 - 水平滚动是在 1.27 中才引入的
- 新版本拒绝读取旧版本写入的数据文件
- 文件本身已被压缩,因此简单的
strings
搜索不起作用
有什么方法可以从我的数据文件中恢复完整的命令行吗?
答案1
编辑。检查手册页后,看起来您可以获得完整的命令行:
atop -r /var/log/atop.log -P PRG
从压缩文件中提取数据的一些通用方法:
我可以使用以下命令从顶级日志文件中提取数据:
xxd -p < /var/log/atop.log |
fold -w4 |
awk -v cmd='xxd -r -p | zlib-flate -uncompress | strings' '
/789c/{if (x) close(cmd); x=1}; x {print | cmd}' |
grep your-command
这个想法是检测 zlib 标头(以 开头789c
)并将其传递给zlib-flate -uncompress
。不能保证防弹,也不是最有效的方法,但对我来说很有效。
替代品zlip-flate -uncompress
(部分qpdf) 包括openssl zlib -d
和pigz -zd
。
答案2
在较新的版本中,有一个交互式命令 -c
显示进程的命令行及其参数。
为此,您将找到顶部日志的位置(例如/var/log/atop/atop_20191209
),并使用-r
开关将其提供给顶部,如下所示:atop -r /var/log/atop/atop_20191209
然后按下t以提前时间。要倒回时间,您可以按Shift+ t。