凡亿助教-小云
凡事用心,一起进步
打开APP
公司名片
凡亿课堂 | 面试指南
当前位置: 首页 面试指南
grep接了管道却看不到错误日志?stdin、stdout、stderr究竟怎么走
浏览量:21
2026-10-29 22:31:33

这道题可以用一条命令看出候选人是否真正理解Linux命令行的文件描述符与流向。

核心判断

管道符“|”默认连接左侧进程的标准输出stdout到右侧进程的标准输入stdin,并不会自动把stderr也送过去。

POSIX管道标准流示意:程序间传递标准输出,标准错误仍指向终端          
图中stdout在程序间串联,stderr却仍流向终端;因此“只接管道”可能过滤不到错误内容。

0101 / 最小例子

执行 make 2>&1 | grep -i error 时,先让make的标准错误重定向到当时的标准输出,再由管道接入grep;如果仅写 make | grep -i error,默认只过滤标准输出。

0202 / 为什么重定向顺序有差别

cmd >out.log 2>&1:先把stdout指向文件,再让stderr复制stdout当前位置,因此两者都进文件。cmd 2>&1 >out.log:先让stderr复制原stdout(通常是终端),随后才把stdout指向文件,因此stderr仍可能打印在终端。

0303 / 生产环境注意事项

管道调试既要关注stderr是否进入下游,也要关注退出码。默认Shell中流水线退出状态通常取最后命令;Bash可用 set -o pipefail 避免前面的失败被末尾成功掩盖。日志量大时还需考虑缓冲行为。

0404 / 面试参考回答

“我先确认错误日志究竟走stdout、stderr还是服务自己的日志系统;对于Shell流水线明确处理2号文件描述符,必要时启用pipefail,并用最小命令复现重定向顺序。”

容易失分的回答

看到 2>&1 不能机械解释成“两个文件合并”,它是对文件描述符的复制重定向,顺序很重要。

追问

为什么执行 cmd | tee out.log 时,有些报错没有写进out.log?


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。 侵权投诉

相关文章

面试官问“你还有什么想问我的”,电子工程师怎么回答?求职反问策略

2026-09-01 13:51:07

HTTPS、SSH 公钥、秘钥、对称加密、非对称加密、hash算法 ​

2024-01-30 16:40:03

EMC面试:屏蔽线到底单端接地还是双端接地?360°端接和地环路怎么回答

2026-10-15 20:54:05

工程师面试前准备清单:从材料到心态全流程指南

2026-08-04 15:54:13

PCB电磁仿真EM仿真怎么做?PCB仿真面试电磁仿真原理与应用场景

2026-08-24 10:04:48