| 管道 · 命令传话链
上游:ls· cat· grep(先会单个命令,再学怎么把它们串起来) 下游:shell-script(脚本大量使用管道)
一句话是什么
|(竖线,念 “pipe”)把前一个命令说的话传给下一个命令听。
它长什么样
键盘上找这个键:反斜杠 \ 的上面,按住 Shift 就是 |。
用传话游戏来理解
想象三个同学排成一排:
小明(ls) → 小红(grep) → 小亮(wc -l)
说出所有 只传含"sh" 数数收到
文件名 的名字 了几个
- 小明负责:把文件夹里所有文件的名字大声念出来
- 小红负责:听到名字,只把含 “sh” 的传下去,其他的忽略
- 小亮负责:收到几个就报几,结束
这就是管道。每人只做一件事,串起来完成复杂的工作。
用命令写出来就是:
ls ~/mc-server/ | grep "sh" | wc -l核心公式
命令A | 命令B | 命令C
| 就是传话的箭头。左边说,右边听。
最常用的三个搭档
管道本身只是”传话的管子”,真正干活的是接在后面的命令。 最常用就这三个,先记牢:
| 接在 | 后面 | 干什么 | 记忆方法 |
|---|---|---|
| grep "关键词" | 只留含关键词的行,其他扔掉 | 筛子,漏掉不要的 |
| wc -l | 数一共有多少行 | 计数器 |
| head -10 | 只看前 10 行 | 只要头部 |
Linux 幽默
程序员的管道哲学: 我不需要一个能做所有事情的工具。 我只需要一百个各做一件事的小工具, 加上一根管子。
— 某 Unix 老程序员,大概是这么说的
例题精讲
📗 第一题:Minecraft 服务器里有多少个 .sh 脚本?
不用管道,你要这样做:
ls ~/mc-server/ # 先看所有文件(太多了,眼睛找)用管道,一行搞定:
ls ~/mc-server/ | grep ".sh" | wc -l传话过程:
ls ~/mc-server/
│ 说出所有文件名
↓
grep ".sh"
│ 只留文件名里有 ".sh" 的
↓
wc -l
数一数,比如:3
📘 第二题:服务器日志太长,只看最新 10 行
日志文件每次运行都会新增内容,直接 cat 会刷屏几百行。
cat ~/mc-server/logs/latest.log | head -10只看前 10 行。如果想看最新的内容(在文件末尾),用 tail:
cat ~/mc-server/logs/latest.log | tail -10
head= 头部,tail= 尾巴。一个看开头,一个看结尾。
📙 第三题:日志里有没有出错?有几条错误?
cat ~/mc-server/logs/latest.log | grep "ERROR" | wc -l传话过程:
cat 日志文件
│ 把整个日志念出来(几百行)
↓
grep "ERROR"
│ 只留含 ERROR 字样的行
↓
wc -l
数一数,比如:5
数字是 0 = 没有错误,皆大欢喜。 数字大于 0 = 有问题,需要查。
自检练习
在 Aaron 的笔记本上跑一下:
# 1. 系统装了多少个包?
apt list --installed 2>/dev/null | wc -l
# 2. 这些包里有多少个是 python 相关的?
apt list --installed 2>/dev/null | grep "python" | wc -l
2>/dev/null是把多余的警告扔进黑洞,让输出干净一点。 不用现在深究它,记住这个搭配就行。
节点链接
上游(先学会这些,再来串管道)
下游
- shell-script ← 脚本里大量使用管道
实战
- Minecraft-Bedrock-Server ← tail -f logs/ | grep ERROR 实时监控
节点版本:v3.0 · 2026-05-02 下一个节点建议:grep 深入 或 shell-script