| 管道 · 命令流水线
上游:ls· cat· grep(先会单个命令,再学怎么把它们串起来) 下游:grep(管道最常见的搭档)· shell-script(脚本大量使用管道) 参见:find(find 的输出经常接管道)
一句话是什么
|(竖线,念 “pipe”)把前一个命令的输出直接送给下一个命令的输入——
就像工厂的流水线,上一道工序的产品直接进下一道。
为什么需要它
没有管道,你需要这样:
ls -la ~/mc-server/ > /tmp/输出.txt # 把输出存到文件
grep "sh" /tmp/输出.txt # 再搜索
rm /tmp/输出.txt # 删临时文件有了管道,一行搞定:
ls -la ~/mc-server/ | grep "sh"管道 = 跳过中间文件,命令直接对话。
ls -la ~/mc-server/
│
│ (输出给管道)
↓
grep "sh"
│
↓
只显示含 "sh" 的行
核心用法
公式
命令A | 命令B | 命令C | ...
可以串联任意多个命令,左边的输出流向右边的输入。
常用管道组合
| 组合 | 命令 | 说明 |
|---|---|---|
| 过滤输出 | 命令 | grep "词" | 只看含关键词的行 |
| 分页显示 | 命令 | less | 长输出分页翻看(q 退出) |
| 只看前N行 | 命令 | head -20 | 只显示前 20 行 |
| 只看后N行 | 命令 | tail -20 | 只显示后 20 行 |
| 统计行数 | 命令 | wc -l | 输出有多少行 |
| 去重 | 命令 | sort | uniq | 排序后去重 |
| 统计个数 | 命令 | sort | uniq -c | sort -rn | 统计每种出现次数 |
几个必会的搭档命令
| 命令 | 功能 |
|---|---|
head -N | 只显示前 N 行 |
tail -N | 只显示后 N 行 |
wc -l | 计数(多少行) |
sort | 排序 |
uniq | 去重(需要先 sort) |
less | 分页(按空格翻页,q 退出) |
Linux 笑话
Aaron 第一次运行 apt list --installed,终端疯狂滚屏,
滚了好几秒,他根本没看清有什么。
爸爸说:加管道。
apt list --installed 2>/dev/null | wc -l输出:347
Aaron:“装了 347 个软件包?!我只装了 tree 和 htop 啊!”
爸爸说:“其他 345 个是 Ubuntu 系统自带的,你装系统时一起来的。”
Aaron:“那我的电脑是不是很重?”
爸爸没有回答,默默地继续工作。
du -sh /
# 15G /15GB。Aaron 发现他笔记本装的东西比他以为的多得多。
例题精讲
📗 初探 Starter — 过滤长输出
任务:找到系统里所有以 “python” 开头的已安装包。
# 不用管道(很难看)
apt list --installed 2>/dev/null
# 用管道过滤
apt list --installed 2>/dev/null | grep "^python"
# 统计有多少个 python 相关包
apt list --installed 2>/dev/null | grep "python" | wc -l2>/dev/null 是什么?
2>= 把错误输出(stderr)重定向/dev/null= Linux 的”黑洞”,输入什么都消失(不是硬盘上的文件,是一个特殊设备)- 用人话:把报错的废话扔进黑洞,只看干净的输出
- 极客写法:
command 2>/dev/null或者更狠的command &>/dev/null(连正常输出也一起扔)
你学到了什么:| grep 过滤,| wc -l 计数,这两个是最常见的管道用法。
📘 应用 User — 实时跟踪日志
任务:Minecraft 服务器运行时,实时查看新日志,并只显示错误信息。
# tail -f = follow,实时追踪文件末尾(新内容自动显示)
tail -f ~/mc-server/logs/latest.log
# 加管道过滤,只显示 ERROR 行
tail -f ~/mc-server/logs/latest.log | grep -i "error"
# 按 Ctrl+C 停止追踪tail -f 的用处:
-f= follow(跟随),文件有新内容就立刻显示- 服务器管理员几乎每天都用这个方法实时监控日志
- 加上
| grep error就只看错误,忽略正常运行信息
你学到了什么:tail -f | grep 是服务器运维的日常操作。
📙 管理 Admin — 分析日志统计错误频率
任务:统计服务器日志里每种错误出现了多少次,找出最常见的问题。
# 提取所有 ERROR 行
grep -i "error" ~/mc-server/logs/latest.log > /tmp/errors.txt
# 或者用管道直接处理(不存临时文件)
grep -i "error" ~/mc-server/logs/latest.log \
| sort \
| uniq -c \
| sort -rn \
| head -10逐步分解这条管道:
grep -i "error" 日志文件 # 找出所有错误行
| sort # 把相同的行排在一起
| uniq -c # 统计每种行出现多少次(-c = count)
| sort -rn # 按数字从大到小排序(-r = reverse, -n = numeric)
| head -10 # 只显示前 10 名(最常见的错误)输出大概是:
45 [ERROR] Failed to authenticate player
12 [ERROR] Connection timeout
3 [ERROR] Failed to load chunk
你学到了什么:管道可以串 4-5 个命令组成一条”数据流水线”, 每个命令只做一件简单的事,组合起来完成复杂分析。
官方文档参考
管道
|是 shell 内建机制,不是独立程序,无 man page。 相关阅读:man bash(搜索 Pipelines)或info bash。Unix 哲学出处:Doug McIlroy,1978 年,Bell Labs Technical Journal。
节点链接
上游(单个命令要先会,才能串管道)
同层(常见管道搭档命令)
- grep ← 过滤 head / tail ← 截取 sort / uniq ← 排序去重 wc ← 计数
下游(管道是这些技能的基础)
- shell-script ← 脚本大量使用管道处理数据
实战
- Minecraft-Bedrock-Server ← tail -f logs/ | grep error 实时监控
节点版本:v1.0 · 2026-04-20 下一个节点建议:wget 或 shell-script