linux grep通过管道输出到head出现write error: Broken pipe错误

Linux日志排查三剑客:tail、grep、head实战精要 日志分析是Linux系统运维与故障定位的核心能力,其本质是基于文本流的实时过滤与上下文提取。理解tail的事件驱动监听机制、grep的正则匹配原理及head的数据流截断逻辑,是构建高效排查链路的基础。技术价值在于以极低资源开销实现秒级根因定位,避免依赖重型日志平台。典型应用场景包括OOM故障追踪、MySQL慢查询挖掘、SSH暴力破解识别等高压力生产环境。本文聚焦tail -F/grep -F/head -n等关键参数组合,结合日志轮转、编码兼容、管道信号等真实陷阱,提供经千次验证的命令级工程实践。 阅读详情



转载请注明地址:http://blog.youkuaiyun.com/echoutopia/article/details/51655882


之前做一个分页,利用grep加head加tail实现的:

ls /tmp/conf/usergroup/ | grep -P '^(?!auto-)'| head -n 20 | tail -n 20 | awk -F . '{print $1}'


grep出来的条数大概有6w条,然后用php的exec去执行这条命令,大概耗时1.3秒,感觉太慢,不能接受。

后面发现直接去终端执行这条命令,real time只有0.27秒,居然差了一秒,于是着手排查问题

开始以为是php派生进程耗时太多,于是exec(“echo aaa"),很快。

后面脑洞大开,会不会是报错了,于是改了下命令:

(ls /tmp/conf/usergroup/ | grep -P '^(?!auto-)'| head -n 20 | tail -n 20 | awk -F . '{print $1}') 2>&1

卧槽,打印php的exec内容,一下在出来了6w多条broken pipe的错误,简直恐怖。

但是这个错误怎么来的呢,去查了下资料,原来是head的原因。

这条命令执行过程中,会派生grep进程和head进程(其他忽略),他们通过管道传输数据,grep往管道写,head从管道读。

因为grep出来的结果又6w多条,所以grep进程会往管道写6w条数据,

但是head在取了20条后,就关闭了管道,但是grep不知道,所以还在一直往没有读端的管道一直写,导致出现了6w多条

write error: Broken pipe错误。。

解决办法:

1、可以把错误重定向到/dev/null,这样就清静了。

2、grep有个-m 参数,即查找到了规定的数目结果后,停止查找。

我改进的命令为:

ls /tmp/conf/usergroup/ | grep -P '^(?!auto-)'-m 20 | tail -n 20 | awk -F . '{print $1}'

一下子速度跟终端也差不多了

只是心里还有个疑问,为啥终端里执行这个命令不会有broken pipe这个错误,希望有人不吝赐教

看来我对linux的了解还只是scratch the surface啊

转载请注明地址:http://blog.youkuaiyun.com/echoutopia/article/details/51655882

本人出于个人兴趣,创建了一个个人公众号,每天筛选国外网友发现的有趣的事情推送到公众号,欢迎关注!


golang服务报错: write: broken pipe 文章目录一、程序报错二、问题原因2.1 连接数过大2.2 调用者在接收到服务端响应之前断开连接2.2.1 排查服务器上的连接数2.2.2 查看连接状态为CLOSE_WAIT的连接情况2.2.3 延时测试服务端未出现 CLOSE_WAIT 时的响应时间及延时服务端出现 CLOSE_WAIT 时的响应时间及延时三、解决方法 一、程序报错 发现BSC节点报错: write: broken pipe 2022/04/11 11:23:00 http: panic serving 172.31.34.109:3295 阅读详情

相关推荐

关于k8s中的node_exporter异常write: broken pipe问题排查

k8s监控node_exporter问题

sinat_31632437的博客 4642

linux 错误信息 输出到管道,linux grep通过管道输出到head出现write error: Broken pipe错误...

转载请注明地址:http://blog.youkuaiyun.com/echoutopia/article/details/51655882之前做一个分页,利用grep加head加tail实现的:ls /tmp/conf/usergroup/ | grep -P '^(?!auto-)'| head -n 20 | tail -n 20 | awk -F . '{print $1}'grep出来的条数大概有6...

weixin_33736386的博客 742

sed生产避坑指南:流式处理、跨平台兼容与原子化替换

sed是Linux流式文本处理的核心工具,其本质是基于模式空间的状态机驱动字符流转换,而非简单查找替换。理解GNU与BSD sed在-i参数、正则引擎(BRE/ERE)、地址范围匹配等关键机制上的差异,是避免CI失败、配置损坏和凌晨告警的前提。技术价值在于零拷贝修改、低内存占用与高吞吐性能,广泛应用于Nginx配置热更新、日志清洗、CI/CD脚本及嵌入式配置生成等场景。本文聚焦真实运维中高频踩坑点——如\1引用失效、^$空行匹配异常、CRLF兼容问题及多行插入竞态——结合模式空间操作、Hold Space去

long_yu2的专栏 436

[TCP] write: broken pipe 的 原因

在开发GOFLY在线客服系统的时候:https://gofly.sopans.com 可以看到日志里有一些错误信息: Error #01: write tcp 127.0.0.1:8083->127.0.0.1:41722: write: broken pipe TCP连接异常:broken pipe 这个出现的原因是: 连接建立后,如果读端或者写端关闭连接,具体分两种情况: 如果读端关...

程序员老狼专注开发aigc或客服系统应用 9881

TCP协议的‘不放弃’:可靠性设计原理与工程实践

TCP是一种面向连接、提供可靠字节流传输的传输层协议,其核心价值在于通过序列号、确认应答、超时重传、滑动窗口和拥塞控制等机制,实现端到端的数据完整性与顺序性保障。这种‘不放弃’并非简单重试,而是融合时间自适应(RTO动态估算)、空间高效利用(滑动窗口+SACK)与网络敬畏(拥塞感知)的韧性工程体系。它支撑HTTP、SSH、gRPC等关键应用稳定运行,在弱网、高丢包、长肥管道(BDP)等复杂场景下仍保持交付能力。理解TCP如何在丢包、乱序、延迟波动中持续达成使命必达,是网络调试、性能调优与协议设计的基础前提。

384

数据库之Redis运维手册(私人整理)

1、redis配置文件 #cat 8000.conf daemonize no #[yes/no]默认值no,该参数用于定制redis服务是否以守护模式运行。 pidfile /var/run/redis.pid #默认值/var/run/redis.pid,指定redis服务的进程号文件路径,以守护模式运行时需要配置本参数; port 8000 #默认值6379,指定redis服务...

企业实战系列集 ●●● https://ximenjianxue.blog.youkuaiyun.com 8635

linux忽略写入的报错信息,linux – sort:写入失败|破管

晚上好,以下是我在脚本中使用的一段代码.从SSH sesssion启动工作正常,但是,当它通过cron运行时,它会在屏幕上显示损坏的管道错误.我不能通过SSH重现它.码:IP=$(sort --random-sort /root/ips.csv | head -n 1); nc -zv -w 2 $IP 443 2>&1 | grep succeeded >> outfi...

weixin_42514540的博客 1139

linux shell 管道命令(pipe)使用及与shell重定向区别

看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了。这次我们看下管道命令了。shell管道,可以说用法就简单多了。 管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard error 信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入 standard input. 管道命令使用说明: 先看下下面图: command1正确输出,作为command2的输入 然后comand2的输出作为,comand3的输入 ,coma

C++ (week4):Linux基础:命令行

Linux简介、vim、Linux命令行、编译工具链

Edward2022的博客 1722

GD32F450以太网(1):ETH 外设接口简介

GD32F450以太网ETH MAC外设接口简介

Zhichao_Zhang的博客 1万+

别再为CAD和GIS数据对不上而头疼了!一份完整的ArcGIS for AutoCAD坐标系定义与数据套合指南

本文详细介绍了如何通过ArcGIS for AutoCAD插件解决CAD与GIS数据坐标系不匹配的问题,实现数据的精准套合。文章从坐标系冲突分析、插件核心功能解析到五步标准化工作流,提供了完整的解决方案,帮助工程师和设计师提升跨平台协作效率。

weixin_42531886的博客 216

Ubuntu 18.04 下 Kafka 数据迁移实战:备份、导入与平滑迁移三阶策略

Kafka 不是普通消息队列,而是一个强依赖偏移量(offset)、副本状态(ISR)和日志段索引结构的分布式时序存储系统。其数据迁移本质是跨环境重建数据生命周期——需区分容灾备份、集群重建、版本升级与云平台迁移四类场景。在 Ubuntu 18.04 环境中,ext4 文件系统 data=ordered 模式、systemd 的 PrivateTmp 机制、OpenJDK 11 兼容性及 rsync 对隐藏文件(.index/.timeindex)的默认忽略,共同构成迁移失败的底层技术动因。真正可靠的迁移必

weixin_33738982的博客 393

手把手教你用DLP4500和海康相机搭建双目结构光系统(附完整代码获取路径)

本文详细介绍了如何利用DLP4500投影仪和海康工业相机搭建低成本双目结构光三维测量系统。从硬件选型、软件配置到结构光编码解码实现,再到三维重建全流程,提供了完整的实战指南和优化技巧,帮助用户以不到2万元的预算实现0.05mm精度的三维扫描。

weixin_32447969的博客 316

grep: writing output: Broken pipe

ls -t $FOLDER | grep "stat"| head -$fileNum 我的python脚本里面call了一个shell脚本,里面有这一行,执行的时候就会有标题这样的warning。原因查了一下,是说head执行完了就exit了,因此grep面对的是一个没有reader的pipe,就是broken pipe了。 不会有啥坏处,不管它也没事,或者把输出的warning重定向到/d...

渴死的火烈鸟 789

LaTeX双栏浮动结构实战:用dblfloatfix解决跨栏图表排版难题

本文深入探讨了LaTeX双栏浮动结构在学术论文排版中的常见问题,特别是IEEE会议论文中的跨栏图表定位难题。通过介绍dblfloatfix包的整合解决方案,帮助用户实现精准的底部定位和浮动顺序保持,提升排版效率与质量。

weixin_30872499的博客 442

大模型辅助意图识别,更懂你的客户洞察平台

通过大量的学习和训练,大模型不仅具备庞大的知识库,更掌握着丰富的语言模式和语义规则,能够精准地理解每一段对话的含义,为每一通对话进行全面、准确的标注。主要来自客户的行为信息,将客户与机构的重要时刻以时间轴的方式呈现出来,掌握客户生命周期的完整脉络,识别一些容易被忽略的重要营销MOT(Moment Of Truth,关键时刻研究)机会,提示理财经理跟进处理。将客户的历史交易数据和埋点系统采集的客户行为数据结合起来,辅以部分内容资讯的偏好探测,综合分析和预测客户在各个维度的喜好程度,实现千人千面的客户推送。

Dezhuzhineng的博客 2156

运行报错(二)cat: write error: Broken pipe

管道中通常发生的事情是 shell 在一个进程中运行 cat 并在另一个进程中运行 grep。cat 的标准输出连接到管道的写入端,grep 的标准输入连接到读取端。发生的事情是 grep 命中了一个不存在的模式搜索并立即退出导致管道的读取端被关闭,这 cat 不喜欢,因为它有更多要写入管道的数据。当文件内容通过 grep< 的标准输入可用时,完全删除管道使用并将其作为 grep "pattern"file.txt 运行 它可以从中读取。报错:cat: write error: Broken pipe。

weixin_43564241的博客 1953

智能车复工日记【3】:图像处理——基本扫线和基本特征提取和十字补线

目录前言基本扫线(除了进入环岛状态或者坡道或者十字路口的普通扫线)基本数据和初步特征进一步特征提取1、计算并且显示前n行左右线各丢失数目(不break和break的都有)2、计算左右线方差(以右线为例)【a】计算右线曲率(选三个点:r_start、中点、break点)【b】如果右线曲率在一定的范围,就进行右线拟合,从空白行开始计算斜率,否则则从0行开始计算 前言 图像大小185*70,通过扫线获取.........

hanhan的博客 3万+

ls: write error: Broken pipe 错误信息的产生和解决

当用C调用shell命令的时候,发现打印ls:” write error: Broken pipe“,到底是什么原因产生的?对正常的程序有没有影响。 论点是:大部分情况对C程序的结果不会有影响。产生原因是当C调用shell语句的时候,语句存在多管道传递数据的时候,当管道后的条件满足后会关闭管道,如果管道前的条件还在往管道里写数据就会提示该error。但是在命令行和shell脚本执行同样的语句,不会...

zkkdcs1的博客 2万+

低代码部署与管理——OpenClaw智能助手的应用部署与运维(2026技术版)

OpenClaw智能助手的低代码部署与管理平台采用分层架构设计,包含部署工具、环境管理、版本控制等核心模块,支持从开发到生产的全流程自动化部署。该系统通过Docker、Kubernetes等技术实现应用构建和部署,利用Terraform等工具管理多环境配置,并提供完善的监控运维能力。平台针对开发、测试、预生产和生产环境提供差异化配置,确保部署效率和运行可靠性。这种架构设计遵循自动化、可扩展性和安全性原则,显著提升了智能助手应用的部署效率和运维质量。

一键难忘的博客 314

【实战项目开发技术分享】机器人安全通过狭窄区域的方案

在机器人的应用领域中,有时会遇到需要机器人通过狭窄区域的情况。无论是室内还是室外,机器人需要具备适应性和灵活性,以便在狭窄的空间中进行安全、高效的导航。本文将提供一些如何让机器人通过狭窄区域的实现方案和思路,希望帮助读者可以根据实际的开发需要进行适当调整和扩展。

xiewf的博客 2万+

Broken Pipe的解决方案

Broken Pipe” 是一个常见的网络编程错误,特别是在使用像 TCP 这样的流协议时。这个错误通常表示在数据传输过程中,客户端或服务器的一方在另一方尝试写入数据时关闭了连接。

2301_79779756的博客 5246

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

linux ssh 报错 Write failed: Broken pipe 解决方法

目录 原理 方法1:通过客户端配置 方法2:服务器端配置 方法3:临时SSH命令配置 总结 在使用SSH连接远程服务器的时候,如果长时间不操作,再次进入 Terminal 时就会有卡死一段时间没有响应。等待一段时间以后,会发现以下错误提示:Write failed: Broken pipe 同时SSH连接已经断开。有时候还会出现界面卡死没有响应的情况。最终只能重新打开终端进行连接。 原理 为了保证服务器的资源不被浪费,系统会对SSH的连接定期进行自动回收(即自动断开),其回收原则为:一个连接

whatday的专栏 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: SHELL 编程之语法基础
下一篇: python深拷贝浅拷贝
ECHOutopia
博客等级 码龄14年 11粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值