终端中如何将strace等命令的全部控制台输出写入到文件
strace输出保存到文件的实现方法
核心原因
strace 默认将所有系统调用日志输出到标准错误流(stderr),而非普通命令使用的标准输出流(stdout)。你之前使用的 >、| tee 指令默认仅重定向标准输出流,因此无法捕获strace的输出,该问题和输出量大小无关。
最佳实现方案(推荐)
strace 自带专属输出参数 -o,直接指定日志存储路径即可,完全不会和目标命令的输出流冲突,无需额外处理流重定向逻辑:
strace -o strace_log.txt [你要执行的目标命令]
补充说明:
- 如果需要将日志追加写入到已有的文件,可添加
-a参数:strace -a -o strace_log.txt [你要执行的目标命令] - 如果是跟踪已运行的进程,直接搭配
-p参数使用即可,按Ctrl+C终止跟踪后日志会自动落盘:strace -o strace_pid_log.txt -p [目标进程PID]
其他常用场景操作
场景1:仅保存strace输出到文件,控制台不打印
使用标准错误流重定向即可:
strace [目标命令] 2> strace_log.txt
如果需要同时单独保存目标命令本身的标准输出,可分开重定向:
strace [目标命令] > command_output.txt 2> strace_log.txt
场景2:strace输出同时打印到控制台和写入文件
将标准错误流合并到标准输出流后传递给tee即可:
strace [目标命令] 2>&1 | tee strace_log.txt
如果需要分开存储目标命令输出和strace日志,可使用进程替换实现:
strace [目标命令] 2> >(tee strace_log.txt) > command_output.txt
内容的提问来源于stack exchange,提问作者Milan Lakhani
相关产品推荐
相关产品推荐

