Linux 的 stdbuf 命令

stdbuf 是一个用于修改标准 I/O 流缓冲行为的实用程序,它允许用户控制程序的输入、输出和错误流的缓冲方式。这个命令在需要实时查看程序输出或控制 I/O 性能时特别有用。

基本语法

stdbuf OPTION... COMMAND

主要选项

  1. 输入流控制:

    • -i MODE 或 --input=MODE:设置标准输入流的缓冲模式
  2. 输出流控制:

    • -o MODE 或 --output=MODE:设置标准输出流的缓冲模式
  3. 错误流控制:

    • -e MODE 或 --error=MODE:设置标准错误流的缓冲模式

缓冲模式

可用的缓冲模式包括:

  • L:行缓冲(Line buffered)
  • 0:无缓冲(Unbuffered)
  • size:指定缓冲区大小(例如 1M 表示 1MB 的缓冲区)

使用示例

  1. 实时查看日志输出:

    bash 复制代码
    stdbuf -oL tail -f /var/log/syslog

    这将强制 tail -f 命令使用行缓冲模式,确保日志行立即显示而不是等待缓冲区填满。

  2. 无缓冲执行脚本:

    bash 复制代码
    stdbuf -i0 -o0 -e0 python script.py

    这样 Python 脚本的所有输入输出都将立即生效,没有缓冲延迟。

  3. 设置特定缓冲区大小:

    bash 复制代码
    stdbuf -o1M ./large_output_program

    为程序的输出设置 1MB 的缓冲区。

注意事项

  1. stdbuf 只对使用标准 C 库 I/O 函数的程序有效,对于直接使用系统调用的程序可能无效。

  2. 某些程序(如 grep)可能会自行管理缓冲,此时 stdbuf 的效果有限。

  3. 缓冲区大小设置需要合理,过小的缓冲区可能导致性能下降,过大的缓冲区可能导致输出延迟。

  4. 在性能关键的场景中,应测试不同缓冲设置对程序性能的影响。

替代方案

如果 stdbuf 不可用,可以考虑使用:

  • unbuffer(来自 expect 包)
  • script 命令
  • 某些编程语言提供的特定缓冲控制选项
相关推荐
qetfw28 分钟前
UOS DHCP Relay:跨网段分配与 IP、DNS、网关验证
linux·服务器·网络·tcp/ip·uos
明航咨询-陈老师1 小时前
ITSS运行维护服务能力成熟度认证技术纵深:标准模型、等级路径、2026审核趋势与CS/CMMI对比
服务器·数据库·cmmi
szxinmai主板定制专家2 小时前
X86 工控机 vs RK3588 异构主控:AMR 控制器 BOM、散热、长期运维对比
运维·stm32·单片机·嵌入式硬件·fpga开发·am62x
缓慢更新2 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
叼烟扛炮3 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip
ynchyong3 小时前
Linux 有两个 “版本“
linux·发行版·内核版本
叼烟扛炮3 小时前
Linux 学习笔记(四十四):HTTP 协议解析与极简 Web 服务器实战
linux·服务器·学习
叼烟扛炮3 小时前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip
Decay__3 小时前
09_MySQL 闪回与时间点恢复 —— binlog 回放、mysqlbinlog、PITR 与误删恢复
运维·数据库·sql·mysql·架构
久曲健的测试窝3 小时前
2026软件测试工具选型指南:双模式如何化解UI脚本维护难题
运维·人工智能·科技·aigc