Linux 管道工具(|)用法
管道工具(|)是 Linux 文本处理的“核心纽带”,核心优势是“无需保存中间结果,实现多命令联动”,上手简单、实用性极强。记住核心逻辑:左边命令输出,右边命令处理,竖线一隔,数据流转。日常使用中,只需记住常用搭配(grep、less、wc、awk),就能快速处理各类文本输出,大幅提升 Linux 操作效率,尤其适合服务器管理、日志分析、容器管理等场景(如你之前清理虚拟网卡、查看容器信息时,管道能
Linux 管道工具(|)用法
一、管道工具核心概述
管道工具的核心符号是 |(竖线),是 Linux 系统中最常用的文本处理工具之一,核心作用是连接多个命令,将前一个命令的标准输出(stdout),直接作为后一个命令的标准输入(stdin),实现“数据流转、多步处理”。
简单理解:管道就像“传送带”,把第一个命令处理后的结果,直接传给下一个命令继续处理,无需手动保存中间结果(如文件),大幅提升命令执行效率,尤其适合文本筛选、统计、格式化等场景。
基础语法:
命令1 | 命令2 | 命令3 …
逻辑说明:命令1执行后输出内容 → 管道(|)将内容传递给命令2 → 命令2处理后输出内容 → 管道(|)传递给命令3(可无限串联),最终输出最终处理结果。
适用场景:文本过滤、内容统计、分页查看、排序去重、日志分析等(结合你之前查看网卡、Docker容器的场景,管道可快速精简输出内容)。
二、管道工具基础用法(必学,直接套用)
管道的核心价值的是“搭配其他文本处理命令”使用,以下是最常用、最实用的基础搭配,结合Linux日常操作场景说明,可直接复制执行。
1. 搭配 grep:过滤筛选(最常用)
grep 是 Linux 文本过滤命令,核心功能是“筛选包含指定关键字的行”,与管道结合后,可快速从大量输出中提取有用信息,也是你之前查看网卡时用到的搭配。
常用示例(贴合你的实操场景):
- 筛选网卡信息,排除虚拟网卡(vethxxx):
ip a | grep -E ‘enp|lo|inet\s’
说明:ip a 查看所有网卡 → 管道传递给 grep,过滤出包含 enp(物理网卡)、lo(回环网卡)、inet\s(IPv4地址)的行。 - 筛选Docker容器,只查看运行中的 alist 容器:
docker ps | grep alist
说明:docker ps 查看运行中容器 → 管道传递给 grep,只保留包含 alist 的行。 - 反向过滤(排除指定内容):
ifconfig | grep -v veth
说明:grep -v 表示“排除包含指定关键字的行”,此处排除所有虚拟网卡(veth开头)。
补充:grep 常用选项可结合管道使用,如 -E(多关键字过滤)、-i(不区分大小写),示例:ip a | grep -Ei ‘enp|lo’。
2. 搭配 less/more:分页查看(解决内容刷屏)
当命令输出内容过多(如查看日志、系统配置),直接执行会刷屏,无法查看完整内容,此时用管道搭配 less 或 more,可实现“分页查看”。
常用示例:
- 分页查看所有网卡详细信息:
ip a | less
操作:按空格键翻页,按 q 键退出分页。 - 分页查看系统日志(/var/log/syslog 是系统默认日志文件):
cat /var/log/syslog | more
说明:more 与 less 用法类似,按空格键翻页,按 q 键退出。
3. 搭配 head/tail:查看前几行/后几行
当只需要查看命令输出的“前N行”或“后N行”(如查看日志最新内容、文件前几行),用管道搭配 head 或 tail 即可。
常用示例:
- 查看磁盘挂载信息,只看前5行:
df -h | head -n 5
说明:head -n 5 表示“显示前5行”,n 可省略,直接写 head 5。 - 查看系统日志,只看最后10行(最新日志):
cat /var/log/syslog | tail -n 10
补充:tail -f 可实时查看日志更新(常用语排查问题),示例:tail -f /var/log/syslog。 - 查看网卡信息,只看最后3行:
ip a | tail -3
4. 搭配 wc:统计行数/字数
wc 是 Linux 统计命令,常用选项 -l(统计行数)、-w(统计字数)、-c(统计字节数),与管道结合可快速统计命令输出的内容量。
常用示例(贴合你的场景):
- 统计当前运行的 Docker 容器数量:
docker ps | wc -l
说明:docker ps 输出运行中容器 → 管道传递给 wc -l,统计行数(每行对应一个容器)。 - 统计服务器虚拟网卡(veth)的数量:
ifconfig | grep veth | wc -l
说明:先筛选出包含 veth 的行 → 再统计行数,即虚拟网卡数量。 - 统计文件字数(以 1.txt 为例):
cat 1.txt | wc -w
三、管道工具进阶用法(提升效率)
管道可无限串联多个命令,实现“多步文本处理”,以下是进阶搭配,适合更复杂的场景(如排序、去重、格式化输出)。
1. 多命令串联:过滤 → 排序 → 去重
结合 grep(过滤)、sort(排序)、uniq(去重),实现从大量文本中提取唯一内容。
示例:查看系统中所有用户,过滤出非系统用户,排序后去重:
cat /etc/passwd | grep -v nologin | sort | uniq
拆解逻辑:
- cat /etc/passwd:查看系统所有用户配置;
- grep -v nologin:排除系统用户(系统用户通常包含 nologin);
- sort:对筛选后的用户进行排序;
- uniq:去除重复的用户条目(避免重复输出)。
2. 搭配 awk:格式化输出(提取指定字段)
awk 是 Linux 文本格式化工具,可提取文本中的指定字段,与管道结合后,可快速从输出中提取关键信息(如 IP 地址、文件名等)。
常用示例(贴合你的场景):
- 只提取服务器所有 IPv4 地址(不显示其他网卡信息):
ip a | grep -E ‘inet\s’ | awk ‘{print $2}’
说明:grep 筛选出 IPv4 地址行 → awk 提取第2个字段(IP地址,如 192.168.2.101/24)。 - 提取 Docker 容器的 ID 和名称(只显示两列):
docker ps | awk ‘{print $1, $2}’
说明:awk ‘{print $1, $2}’ 表示“提取第1个字段(容器ID)和第2个字段(容器名称)”。
3. 搭配 sed:文本替换/删除
sed 是 Linux 文本编辑工具,可实现文本替换、删除等操作,与管道结合后,可快速处理命令输出的内容。
常用示例:
- 查看网卡信息,将 “inet” 替换为 “IPv4”:
ip a | grep -E ‘inet\s’ | sed ‘s/inet/IPv4/’
说明:sed ‘s/旧内容/新内容/’ 表示“替换文本中的旧内容为新内容”。 - 删除网卡信息中的空格(格式化输出):
ip a | grep enp2s0 | sed ‘s/ //g’
说明:sed ‘s/ //g’ 表示“删除所有空格”,g 表示“全局替换”。
四、管道工具使用规则(必看)
-
- 管道只传递“标准输出(stdout)”,不传递“标准错误(stderr)”:如果前一个命令执行出错(输出错误信息),错误信息不会通过管道传递给下一个命令,会直接显示在终端。
-
- 管道连接的命令,必须是“能接收标准输入”的命令:如 grep、less、wc、sort 等(可接收输入进行处理);而 ls、pwd 等命令不接收标准输入,无法作为管道的“后一个命令”(示例:ls | pwd 无效)。
-
- 管道可无限串联:只要符合“前一个命令输出 → 后一个命令输入”的逻辑,可串联任意多个命令(示例:命令1 | 命令2 | 命令3 | 命令4)。
-
- 管道不保存中间结果:所有处理都是“实时流转”,中间结果不会保存到文件,若需要保存最终结果,可在最后添加 > 文件名(重定向输出到文件),示例:ip a | grep enp2s0 > nic_info.txt(将筛选后的网卡信息保存到 nic_info.txt)。
五、注意事项
-
- 管道符号 |是竖线,不是大写的 I(I),输入时注意区分(通常在键盘左上角,与 ~ 同键)。
-
- 命令顺序不可颠倒:管道是“前输出 → 后输入”,顺序错误会导致命令执行失败(示例:grep enp | ip a 无效,因为 ip a 不接收 grep 的输出)。
-
- 特殊字符需转义:如果管道中包含特殊字符(如 |、*、$ 等),需要用转义符 \ 转义,避免被系统误解析(示例:grep ‘enp|lo’ ,未用 -E 时,| 需转义)。
-
- 适配所有 Linux 系统:管道工具是 Linux 内置功能,无需额外安装,适用于 Ubuntu、CentOS、Debian 等所有主流 Linux 发行版。
-
- 避免过度串联:虽然管道可无限串联,但过多命令串联会降低执行效率,且不易排查问题,建议根据需求精简命令。
六、常用场景汇总(直接复制使用)
结合日常 Linux 操作,整理以下高频管道用法,覆盖网卡查看、Docker 管理、日志分析等场景,贴合你的实操需求:
- 查看网卡,只显示物理网卡和 IPv4 地址:
ip a | grep -E ‘enp|lo|inet\s’ - 统计运行中的 Docker 容器数量:
docker ps | wc -l - 查看系统日志,只看包含 error 的最新10行:
cat /var/log/syslog | grep error | tail -10 - 提取服务器所有 IPv4 地址:
ip a | grep -E ‘inet\s’ | awk ‘{print $2}’ - 筛选 Docker 容器,排除已停止的容器:
docker ps -a | grep -v Exited - 分页查看磁盘挂载信息:
df -h | less
七、总结
管道工具(|)是 Linux 文本处理的“核心纽带”,核心优势是“无需保存中间结果,实现多命令联动”,上手简单、实用性极强。
记住核心逻辑:左边命令输出,右边命令处理,竖线一隔,数据流转。日常使用中,只需记住常用搭配(grep、less、wc、awk),就能快速处理各类文本输出,大幅提升 Linux 操作效率,尤其适合服务器管理、日志分析、容器管理等场景(如你之前清理虚拟网卡、查看容器信息时,管道能帮你快速精简输出)。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)