管道才是灵魂 · the Unix philosophy
| 把它们串成大能力。会管道的人,10 条命令能拼出 1000 种用法;只会背命令的人,背 200 条也只能解决 200 个固定问题。
Unix 最伟大的发明不是某条命令,是那个竖线 |——管道。它做了一件极简单又极 powerful 的事:
把上一个命令的输出,变成下一个命令的输入。
这一条规则让每个命令都成了"积木"。你不需要一个"找出最大文件"的命令,你只需要 du(算大小)+ sort(排序)+ head(取前几条),用 | 串起来。工具各做各的,组合由你决定。
对比 Windows 早期:每个程序自己造轮子,"找最大文件"得装专门软件。Unix 的管道让 1000 个小工具组合出 100 万种用法——这就是"灵魂"。
选一关,把下面的命令块按正确顺序点进管道,组成能完成任务的命令。点错了可以点管道里的块移除。
管道能成立,是因为每个 Unix 命令都有三个标准通道:
理解这三件事,你就能解释一堆"奇怪现象":ls 不存在 2>&1 | grep 为什么能 grep 到错误(把 stderr 合并进 stdout);cmd < file 为什么等价于 cat file | cmd(都喂 stdin);tee 为什么能在管道中间"分叉"(同时写 stdout 和文件)。
| 串出所有用法。2>&1 合并进 stdout。head 看中间输出,定位坏在哪一节。tee 分叉:想既看结果又存文件,cmd | tee out.log。