设置 linux 命令缓冲模式
浏览:1623次 出处信息
默认情况下,*nix 命令的 stdout 和 stdin 如果是在终端中是行缓冲,stderr 则是无缓冲。而这些标准输入输出如果是在管道中或重定向文件则是全缓冲。有时候使用管道处理数据的时候,并不希望管道后面的命令一直阻塞等待前一个的输出填满缓冲区刷新的时候才能处理,而是希望能即时看到数据。
有些命令提供了参数来设置缓冲模式,比如 tcpdump 可以使用 -l 参数来强制设置为行缓冲,awk、grep、sed 等也有这样的参数。但是也还是有很多命令行工具并没有提供这样的功能,这时候可以利用 stdbuf 命令来设置。
比如
stdbuf -oL tcpdump ... | grep ...
就可以把 tcpdump 的 stdout 设置为行缓冲,起到同样的效果。同样可以用 -i, -e 来设置 stdin 和 stderr 的缓冲模式。可以设置为 L 表示行缓冲,0 表示无缓冲,或者设置一个指定的缓冲区大小,如 4K 。这样无论命令是否支持设置缓冲模式都可以解决这些问题了。
建议继续学习:
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:shell实现ssh自动登录
后一篇:centos误删东西的教训 >>
文章信息
- 作者:神仙 来源: 神仙的仙居
- 标签: 缓冲
- 发布时间:2016-03-21 23:44:45
近3天十大热文
-
[318] WordPress插件开发 -- 在插件使用 -
[151] 解决 nginx 反向代理网页首尾出现神秘字 -
[92] IOS安全–浅谈关于IOS加固的几种方法 -
[49] Linux Used内存到底哪里去了? -
[48] 中间件和稳定性平台 -
[48] Hacker News 排名算法工作原理 -
[48] Shell的那些事儿 -
[48] 二维码的生成细节和原理 -
[47] 浏览器的工作原理:新式网络浏览器幕后揭秘 -
[47] 到底什么是MVC?
