首页/系统/Linux 运维命令速查/stdbuf 调整管道缓冲
进程与作业69 条

stdbuf 调整管道缓冲

命令进管道后输出「不是实时」的元凶是缓冲:stdbuf -oL/-o0 改 buffering 模式,让 tail/tee 场景恢复实时。

Linux 运维命令速查系统更新于 2026-10-12
用途修改被启动进程的 stdio 缓冲模式
语法stdbuf -oL -eL 命令
模式-o0 无缓冲、-oL 行缓冲(stdout);数字可指定字节大小

常用示例

常用示例
tail -f app.log | stdbuf -oL grep ERROR          # grep 实时吐行
stdbuf -o0 tail -f app.log | tee live.log        # tee 实时写文件+屏幕
stdbuf -oL long_running_cmd | ts '[%T]'          # 配合时间戳工具
stdbuf -oL python tool.py 2>&1 | grep --line-buffered -v noise
原理是 LD_PRELOAD 注入:只对动态链接且走 libc stdio 的程序有效(setuid 程序会被系统忽略注入)。

易错点

  • 对已运行进程无效:只能作用于「它启动的那一刻」,想救老进程用重启或调试器
  • Python 有自己的缓冲层:优先 python -u 或 PYTHONUNBUFFERED=1,别只怪管道

数据来源与参考

  • man 1 stdbuf(GNU coreutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌