我们天天都在使用的管道命令,Shell 在里面到底动了什么手脚?

Linux系统Rootkit检测实战:chkrootkit安装、使用与结果深度解析 Rootkit是一种高级恶意软件技术,通过在操作系统内核或应用层隐藏自身活动,实现对系统的持久化控制。其工作原理通常涉及挂钩系统调用、篡改关键系统命令(如ps、netstat)或直接操纵内核数据结构,从而逃避常规检测。在Linux安全运维中,Rootkit检测技术对于保障服务器安全至关重要,它能帮助管理员发现隐藏的后门、恶意进程和网络连接。chkrootkit作为一款经典的轻量级Rootkit检测工具,通过对比已知Rootkit特征、检查系统二进制文件完整性及扫描异常系统痕迹,广泛应用于服务器安全巡检、入侵 阅读详情

管道命令我们经常使用,将一个指令的输出导入另一个指令的输入,也就是屁股对上嘴,这个原理连编程小学生都知道。但是如果要深入问进去,一个指令的输出是如何导入到另一个指令的输入,管道又起到什么角色,估计能回答这个问题的人不足 1%。下面我们来深入分析一下管道指令的实现原理,对于下面的这条指令,shell 到底干了些什么


$ cmd1 | cmd2


首先我用下面这张图来描述最终形态,然后再一步一步来分解最终形态的形成过程

       640?wx_fmt=png      


上图我们看到了进程描述符表、管道、进程的父子关系。


fork 和 exec

shell 每次执行指令, 需要 fork 出一个子进程来执行,然后将子进程的镜像替换成目标指令,这又会用到 exec 函数。比如下面这条简单的指令


$ cmd

       

640?wx_fmt=png      


exec 函数不会改变当前进程的进程号,不会改变进程之间的父子关系。可以将进程看成一个带壳的球体,exec 之后,外面的壳不会变,球里面的东西被完全替换了。而输入输出文件描述符默认在壳上面,这意味着指令 cmd 的输入输出继承了 shell 进程的输入输出。


$ cmd1 | cmd2


当指令里面包含一个管道符,意味着需要并行执行两个指令,这时候 shell 需要 fork 两次生成两个子进程,然后分别 exec 换成目标指令。

       640?wx_fmt=png      

我们注意到图里面还有一个 pipe,它就是负责父子进程通信的管道。


pipe

管道用于父子进程的通信,在 fork 之前创建 pipe,pipe将成为 fork 之后父子进程之间的纽带。pipe 函数会返回两个描述符(pipe_in, pipe_out),一个用于读,一个用于写。

       640?wx_fmt=png      



dup2

下面我们就需要调整图中描述符的尖头,将 cmd1 进程的 stdout 描述符指向管道写,将 cmd2 进程的 stdin 描述符指向管道读,这就需要神奇的 dup2(fd1, fd2) 函数,它的作用是将 fd1 描述符关联 fd2 指向的内核对象,之前 fd1 指向的内核对象引用计数减一,如果减到零就销毁。注意平时我们调用 close 方法本质上只是递减引用计数,同一个内核对象是可以被多个进程共享的。当引用计数减到零时就会正式关闭。

       640?wx_fmt=png      

下面我们将 dup2 函数的规则应用一下,对两个进程分别调用 dup2 方法得到

       640?wx_fmt=png      

然后再将不需要的描述符关闭掉,就得到了下面的终极图,完美!

       640?wx_fmt=png      

如果是两个管道符三个命令如下,就会生成两个管道


$ cmd1 | cmd2 | cmd3

       

640?wx_fmt=png      

如果任意一端的进程突然挂掉了会发生什么?

假设 cmd1 先挂掉,管道写被动关闭,cmd2 在读取管道内容时会遭遇 EOF,然后正常结束。

假设 cmd2 先挂掉,管道读被动关闭,cmd1 继续写管道,这时候进程会收到一个 SIGPIPE 信号,默认动作是进程直接退出。


下一节我们将使用酷炫的代码来实现上面的整个过程,我们不仅要知道其中的原理,而且还需要通过亲手实验来了解其中更多的细枝末节。

640?wx_fmt=jpeg

阅读更多深度技术文章,扫一扫上面的二维码关注微信公众号「码洞」


2026大模型工程师实战指南:从本地部署到Agent开发 大模型技术正从概念验证走向行业落地,企业对AI应用工程师的需求也随之从“会调API”升级为具备系统级工程能力。理解Transformer原理、上下文窗口与推理机制,是驾驭模型行为边界的基础;而真正决定项目成败的,往往是数据清洗、评测体系与私有化部署等工程环节。RAG与参数高效微调(如QLoRA)是连接通用模型与业务知识的双引擎,前者解决知识实时更新与成本问题,后者重塑输出格式与行业术语的表达习惯。随着Function Calling与MCP协议成熟,Agent从演示走向生产,稳定性与安全评测成为不可回避的挑 阅读详情

相关推荐

OpenClaw仿冒恶意程序GhostClaw攻击解析:从MCP到数据窃取的全面安全加固指南

本地AI助手正在成为开发者的新型数字员工,随着模型上下文协议(MCP)与工具调用能力的普及,以OpenClaw为代表的多智能体框架能高效调度系统资源、对接消息通道,极大提升了自动化效率。然而这类“本地优先+高权限”的工具一旦落入攻击者之手,就会演变为数据窃取的完美跳板。近期出现的GhostClaw恶意程序,正是利用开源信任链与一键部署脚本的盲区,伪装成OpenClaw仿冒项目,定向窃取SSH私钥、云平台凭据、.env配置文件等高价值资产。从供应链投毒到二维码钓鱼,从WSL2到Termux环境,攻击面覆盖开发

weixin_42533120的博客 136

一个小小的 Shell 管道符,内部实现可真不简单!

管道命令我们经常使用,将一个指令的输出导入另一个指令的输入,也就是屁股对上嘴,这个原理连编程小学生都知道。但是如果要深入问进去,一个指令的输出是如何导入到另一个指令的输入,管道又起到什么角色,估计能回答这个问题的人不足 1%。下面我们来深入分析一下管道指令的实现原理,对于下面的这条指令,shell 到底干了些什么 $ cmd1 | cmd2 复制代码首先我用下面这张图来描述最终形态,然后再一步一步...

weixin_33753003的博客 617

本地AI智能体部署指南:基于ChatGPT Work与Ollama搭建私有对话平台

大语言模型(LLM)的本地部署已成为AI应用开发的重要趋势,它解决了数据隐私、网络延迟和成本控制等核心问题。其技术原理在于将预训练模型部署在本地硬件,通过量化、优化等技术实现高效推理。本地部署不仅保障了数据安全,还为定制化AI应用开发提供了基础。在实际应用场景中,开发者常面临交互体验简陋、功能单一等挑战。AI Agent(智能体)框架通过引入工具调用、会话管理和任务规划等能力,将本地模型从简单的问答引擎升级为可执行复杂任务的智能助手。本文以开源框架ChatGPT Work(OpenClaw)为例,结合Oll

weixin_30516243的博客 418

Linux shell:按行读取文件,有变量操作时,避免使用管道符?

Linux的Shell程序时,如果需要按行读取,常见的有两种办法,但是如果涉及到变量的赋值操作,则两种方法是有区别的。 以下两面的wc1.sh和wc2.sh为例子,两个程序都试图统计文件的行数: wc1.sh #!/bin/sh let i=0 cat /etc/passwd | while read line do let i=i+1 done echo "$i" wc2.sh #!/bin/sh let i=0 while read line do let i=i+1 don

匿_名_用_户的专栏 624

show命令管道符深入解析

show命令管道符深入解析,常用的in b sess 等等

myshell.cpp

操作系统实验,尝试实现一个简单的shell,只实现了简单的功能,支持内部命令和外部命令,其他的功能可以慢慢完善。

管道符的工作原理

总之,管道符是Linux/Unix系统中非常实用的命令连接符号,可以将多个命令连接起来,实现复杂的操作。例如,可以使用ls命令列出文件列表并将其传递给grep命令进行搜索,也可以使用sort命令对文件进行排序。(3)管道连接:当用户使用管道符将两个命令连接起来时,管道符会将第一个命令的标准输出作为第二个命令的标准输入。在Linux/Unix系统中,管道符是常用的命令连接符号,用于将一个命令的输出作为下一个命令的输入。(1)命令执行:首先,用户在终端上输入一个或多个命令,这些命令将在当前进程中依次执行。

m0_59902592的博客 342

R语言分段回归

1.利用虚拟变量进行线性回归 (MEdata.csv的数据来源:https://github.com/ChenQihome9/优快云-Data-Library/blob/master/MEdata.csv) 问题13:针对TAX~GDP,使用分段回归方法,找到其回归方程。编程,并根据程序结果叙述如下几方面问题:(1)分几段最佳?(不超过5段内)(2)分段位置定在哪儿最佳?(3)写出最佳方...

ChenQihome9的博客 1万+

操作系统实验二:shell的实现

即实现 command1 | command2,该函数实现思路是将管道前后的命令分别由不同的进程执行,即 command1和 command2 分别通过子进程执行。再通过管道把两个进程的标准输入输出连接起来,把管道前的子进程的标准输出作为后面的输入,即重定向到管道数据入口,把管道后的标准输入重定向到管道数据出口就实现了管道。参数argv是原始的参数向量,out是分割“>”之后剩下的字符串,即重定向输出的位置。实现具有管道、重定向功能的shell,能够执行一些简单的基本命令,如进程执行、列目录等。

XLYcmy的博客 1296

3种六轴IMU姿态解算算法对比:互补滤波、Mahony与卡尔曼滤波性能实测

本文深入对比了三种六轴IMU姿态解算算法:互补滤波、Mahony与卡尔曼滤波的性能表现。通过实测数据分析了各算法在精度、计算复杂度和适用场景上的差异,为无人机、机器人等运动控制系统提供了选型建议。重点探讨了六轴陀螺仪与加速度传感器的数据融合技术,帮助开发者根据项目需求选择最优解算方案。

weixin_29054245的博客 339

微信本地数据解密实战:从AES加密原理到EnMicroMsg.db恢复指南

数据加密是保障信息安全的核心技术,其中对称加密算法AES因其高效可靠,被广泛应用于各类本地数据保护场景。其原理是通过特定密钥对数据进行混淆转换,确保未经授权者无法读取原始内容。在移动应用领域,本地数据库加密对于保护用户隐私、防止数据泄露具有重要价值。微信作为国民级应用,对其本地存储的聊天记录数据库(EnMicroMsg.db)采用了基于设备标识和用户UIN生成的AES-256-CBC加密方案。理解这一机制,不仅有助于在合法合规前提下进行个人数据备份与恢复,也为开发者进行客户端安全分析、兼容工具开发提供了基础

weixin_30764883的博客 571

linux之管道符详解

linux管道符

bleauchat的博客 2514

基于MATLAB的特征模式分解(FMD)算法详解

本文详细介绍了基于MATLAB的特征模式分解(FMD)算法实现。FMD是一种新型自适应信号分解方法,通过自适应FIR滤波器组和相关峭度优化目标,有效解决传统方法(如EMD、VMD)的模态混叠问题。文章系统阐述了FMD的算法原理、数学模型和实现步骤,包括自适应FIR滤波器设计、相关峭度优化和模态选择机制。与现有方法相比,FMD在旋转机械故障诊断中展现出更强的特征提取能力和噪声鲁棒性。MATLAB实现部分包含核心函数、参数优化和可视化工具,并通过轴承故障等案例验证了算法的有效性。

qq_42212808的博客 193

自己动手实现 Shell多进程套套符

一篇技术文章如今仅仅是理论上讲得天花乱坠,却不能自己撸出东西来,那么它写的再好,也只能算纸上谈兵。继上一篇 《我们天天都在使用的套套符命令,Shell 在里面到底动了什么...

codehole_的博客 156

高德地图API如何使用

通过以上步骤,您可以成功接入并使用高德地图API来为您的应用添加丰富的地图功能。

QQ_778132974的博客 4790

YOLOv8改进策略【损失函数篇】| 替换Powerful-IoU(PIoU),增强对中等质量锚框的关注力,引导锚框更直接、高效地回归

现有基于IoU的损失函数存在不合理的惩罚因子,导致锚框在回归过程中出现面积扩大的问题,使得回归效率降低、收敛速度变慢。同时,这些损失函数在反映锚框与目标框之间的差异、考虑目标框大小以及某些情况下的性能表现等方面存在局限性。在目标检测任务中,边界框回归的损失函数对检测性能至关重要。Powerful-IoU(PIoU)及其升级版PIoU v2正是为解决现有损失函数存在的问题而设计的。本文利用PIoU改进YOLOv8的损失函数,提高模型精度。

Limiiiing的博客 673

Linux 进阶 alias 技巧:提升终端效率的实用指南

本文深入探讨了Linux系统中alias命令的进阶使用技巧,旨在帮助用户大幅提升终端操作效率。从基础的命令别名配置到封装复杂脚本和动态条件判断,文章详细介绍了如何将alias从简单的输入简化工具,转变为创造个性化高效命令的利器,并提供了实用的管理维护指南。

weixin_29201933的博客 354

最新Python爬虫实战(入门爬虫篇)——案例3:爬取二次元cos图片批量下载到本地(附上完整爬虫代码)

本次案例通过Python爬虫技术实现了二次元图片的批量下载。代码采用模块化设计,函数实现cookies的自动解析,简化了配置流程,涵盖“请求列表页→提取详情页URL→请求详情页→提取图片链接→保存图片”的完整流程,与豆瓣案例的核心逻辑和格式完全对齐。学习重点包括:抓包工具定位多层级数据源、正则表达式匹配复杂链接、模拟请求头绕过反爬机制、文件名安全处理及自动化文件管理。需要注意控制请求频率并遵守网站使用规范,适用于入门爬虫实践,帮助学习者掌握多层级页面爬取的核心逻辑。

努力让自己发光,对的人才能迎着光而来 14万+

网站备份全攻略:从备份策略到工具选型,确保数据可恢复

在网站运营中,数据丢失往往源于备份方案的不完善或执行缺失。理解全量备份、增量备份与差异备份的差异,是制定合理备份策略的基础。逻辑备份工具如mysqldump适合跨版本迁移,而物理备份则能更高效地处理海量数据恢复。备份的本质不仅在于选择软件,更在于遵循3-2-1原则,并定期进行恢复演练来验证备份的真实可用性。对于站长而言,兼顾备份频率、保留周期与异地副本,是应对勒索、误删等风险的坚实屏障。真正可靠的方案,是能长期坚持执行并验证过的备份习惯,才能在关键时刻保障业务数据的安全与完整。

weixin_34293059的博客 358

058、时域降噪(Temporal Denoise):运动补偿与递归滤波在视频降噪中的应用

本文深入探讨了时域降噪(Temporal Denoise)技术在视频处理中的应用。作者通过车载环视项目案例,揭示了空域降噪的局限性,提出利用帧间信息进行降噪的核心思路。文章详细解析了递归滤波和运动补偿两大关键技术,指出递归滤波简单但易产生拖影,而运动补偿通过计算运动矢量解决此问题。作者还分享了多帧降噪方案的优势与算力挑战,并总结了噪声模型匹配、运动矢量一致性等实战调优经验。最后强调时域降噪需要与空域降噪平衡,指出调试工具的重要性,提出"在保证运动区域无鬼影的前提下追求信噪比"的实践原则,体现了算法复杂度与效

zzfmlxs的博客 93

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

本地LLM联网实战:安全隔离的AI Agent工具调用方案

AI Agent的核心能力在于感知外部世界并执行动作,而‘联网’是其实现动态交互的基础前提。其技术本质是将大语言模型的推理能力与可控、可审计的工具调用解耦,避免模型进程直接发起网络请求带来的安全失控、证书管理混乱、调试不可见等工程风险。通过进程隔离+协议抽象(如JSON-RPC)+中间件代理(如LangChain Tool Server)三层设计,可在本地环境(笔记本、NAS、树莓派)中构建低延迟、高安全、易维护的联网能力。该方案特别适用于Ollama等轻量级LLM运行时,支撑实时天气查询、网页搜索、本地文

weixin_33889245的博客 455

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Claude Code MCP 实战教程:从配置到自建服务器

模型上下文协议(MCP)作为连接 AI 应用与外部工具的事实标准,正在重塑编程助手的交互方式。它通过 Host、Client、Server 的角色分工和 JSON-RPC 消息传递,让大模型不再局限于对话,而是能够调用文件系统、数据库、浏览器等真实工具。这一机制不仅降低了工具接入的复杂度,也为 AI Agent 的开发提供了统一范式。在实际开发中,无论是配置 Claude Code 读取本地项目、在 VSCode 中安装扩展并管理 MCP,还是在 Windows 11 下调试路径与编码问题,核心都是理解这条

weixin_30952479的博客 56

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 见微知著 —— Redis 字符串内部结构源码分析
下一篇: 自己动手实现 Shell多进程套套符
codehole_
博客等级 码龄7年 34粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值