| 管道 · 命令传话链

上游: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 是把多余的警告扔进黑洞,让输出干净一点。 不用现在深究它,记住这个搭配就行。


节点链接

上游(先学会这些,再来串管道)

  • ls ← ls | grep 找特定文件
  • cat ← cat | grep 搜文件内容
  • grep ← 管道最常见的搭档

下游

实战


节点版本:v3.0 · 2026-05-02 下一个节点建议:grep 深入 或 shell-script