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 表示“全局替换”。

四、管道工具使用规则(必看)

    1. 管道只传递“标准输出(stdout)”,不传递“标准错误(stderr)”:如果前一个命令执行出错(输出错误信息),错误信息不会通过管道传递给下一个命令,会直接显示在终端。
    1. 管道连接的命令,必须是“能接收标准输入”的命令:如 grep、less、wc、sort 等(可接收输入进行处理);而 ls、pwd 等命令不接收标准输入,无法作为管道的“后一个命令”(示例:ls | pwd 无效)。
    1. 管道可无限串联:只要符合“前一个命令输出 → 后一个命令输入”的逻辑,可串联任意多个命令(示例:命令1 | 命令2 | 命令3 | 命令4)。
    1. 管道不保存中间结果:所有处理都是“实时流转”,中间结果不会保存到文件,若需要保存最终结果,可在最后添加 > 文件名(重定向输出到文件),示例:ip a | grep enp2s0 > nic_info.txt(将筛选后的网卡信息保存到 nic_info.txt)。

五、注意事项

    1. 管道符号 |是竖线,不是大写的 I(I),输入时注意区分(通常在键盘左上角,与 ~ 同键)。
    1. 命令顺序不可颠倒:管道是“前输出 → 后输入”,顺序错误会导致命令执行失败(示例:grep enp | ip a 无效,因为 ip a 不接收 grep 的输出)。
    1. 特殊字符需转义:如果管道中包含特殊字符(如 |、*、$ 等),需要用转义符 \ 转义,避免被系统误解析(示例:grep ‘enp|lo’ ,未用 -E 时,| 需转义)。
    1. 适配所有 Linux 系统:管道工具是 Linux 内置功能,无需额外安装,适用于 Ubuntu、CentOS、Debian 等所有主流 Linux 发行版。
    1. 避免过度串联:虽然管道可无限串联,但过多命令串联会降低执行效率,且不易排查问题,建议根据需求精简命令。

六、常用场景汇总(直接复制使用)

结合日常 Linux 操作,整理以下高频管道用法,覆盖网卡查看、Docker 管理、日志分析等场景,贴合你的实操需求:

  1. 查看网卡,只显示物理网卡和 IPv4 地址:
    ip a | grep -E ‘enp|lo|inet\s’
  2. 统计运行中的 Docker 容器数量:
    docker ps | wc -l
  3. 查看系统日志,只看包含 error 的最新10行:
    cat /var/log/syslog | grep error | tail -10
  4. 提取服务器所有 IPv4 地址:
    ip a | grep -E ‘inet\s’ | awk ‘{print $2}’
  5. 筛选 Docker 容器,排除已停止的容器:
    docker ps -a | grep -v Exited
  6. 分页查看磁盘挂载信息:
    df -h | less

七、总结

管道工具(|)是 Linux 文本处理的“核心纽带”,核心优势是“无需保存中间结果,实现多命令联动”,上手简单、实用性极强。
记住核心逻辑:左边命令输出,右边命令处理,竖线一隔,数据流转。日常使用中,只需记住常用搭配(grep、less、wc、awk),就能快速处理各类文本输出,大幅提升 Linux 操作效率,尤其适合服务器管理、日志分析、容器管理等场景(如你之前清理虚拟网卡、查看容器信息时,管道能帮你快速精简输出)。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐