刚接触Linux大家最开始是记一大堆命令,然后用完一个再敲下一个。比如想看某个端口被谁占了,先ps aux找到一堆进程,然后瞪着屏幕找到那一行,再手动复制PID,接着敲 kill 加上去。那时候觉得这很正常,命令不就一条一条敲的吗?
接触久后会意识到:不可以直接用管道吗?从那之后,很多操作方式就变了。管道这个东西,可以说是Linux里最不起眼但最实用的设计之一。它的符号是 `|`,在键盘上一般在回车键附近。作用一句话就能说清:把左边命令的输出,当成右边命令的输入。
就这么简单的一个机制,能把零散的命令串起来,变成一条流水线。今天咱们就聊聊管道到底怎么用,以及那些真正能提升效率的常见组合。
先说个最基础的例子。你想看系统里有没有跑着 nginx 进程,直接 ps aux 会输出一大堆,翻半天才找得到。用管道加上 grep 过滤一下:
ps aux | grep nginx
ps aux 列出所有进程,输出传给 grep,grep 只保留包含 nginx 的那几行。结果清晰多了,不用在满屏列表里找。
再看另一个场景:你想知道某个日志文件里有多少行出现了 "error"。用 cat 读文件,然后传给 grep 计数:
cat /var/log/syslog | grep error | wc -l
这条命令分了三段:cat 把文件内容吐出来,grep 筛出含 error 的行,wc -l 统计行数。三个命令串在一起,一步到位。
管道还可以用来处理命令输出的排序和去重。比如你想看看谁在尝试登录你的服务器,可以看 `/var/log/auth.log`,但里面条目太多。先筛选出失败登录的 IP,再排序,再去重,最后按出现次数倒排:
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr
这里用到了 awk 提取第 11 列(就是 IP 地址),然后 sort 排序,uniq -c 合并相同 IP 并计数,最后 sort -nr 按数字倒排。一条命令下来,攻击最频繁的 IP 就排在最前面了。
有时候输出太长,一滚就过去了,可以结合 less 分页查看:
dmesg | less
dmesg 输出内核日志,信息量巨大,直接看根本看不清。加个 `| less` 就能翻页、搜索,舒服多了。
管道还能跟 xargs 配合,把输出作为参数传给另一个命令。比如你想删除当前目录下所有 .tmp 文件,find 找到它们,然后传给 rm:
find . -name "*.tmp" | xargs rm
xargs 的作用是把前一条命令的输出,变成后一条命令的参数。这比用 `find . -name "*.tmp" -exec rm {} \;` 写起来简单些,但要注意文件名带空格的情况,稳妥点可以加 `-print0` 和 `xargs -0`。
还有种常见用法是筛选后统计。比如想看当前目录下各个子目录占了多少空间,用 du,但输出太多,只想看最大的几个:
du -sh * | sort -hr | head -10
du 列出大小,sort -hr 按人类可读的格式倒排,head 只取前十行。这样一眼就能看出哪些目录是磁盘空间大户。
管道也不是只能串两个命令,理论上可以串无数个,只要中间每一步的输出格式能被下一步接受就行。比如统计一个日志文件里出现最多的 IP 是哪个:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -1
这就是经典的日志分析流水线:提取 IP、排序、合并计数、按次数倒排、取第一名。一行命令搞定,不用写脚本。
还有个小技巧:有时候你想把输出既传给下一个命令,又同时保存一份到文件,可以用 tee。比如看进程列表的同时存一份日志:
ps aux | tee process.txt | grep nginx
ps aux 的输出会同时流向两个地方:一个写到 process.txt,一个继续传给 grep。这样既能看到筛选结果,又把完整列表存了下来。
管道真正厉害的地方,不是单个命令多复杂,而是把那些简单到只有一件事的小工具组合起来,解决一个复杂的问题。grep 只管过滤,sort 只管排序,uniq 只管去重,wc 只管计数——它们各司其职,通过管道串成一条生产线,最后产出你想要的结果。
这种设计哲学,也是 Linux 让人上瘾的地方。你不是在学一堆孤立的功能,而是在学怎么把积木搭起来。一开始可能只会用 `| grep`,慢慢发现还能加 sort、加 uniq、加 awk,再后来遇到新问题,第一反应不是“用什么命令”,而是“用哪几个命令串起来”。
如果你现在还是一条命令敲完,盯着输出发呆,然后手动处理,不妨试着用管道把它串起来。省下的时间不多,但那种“让机器干活”的掌控感,很值。
相关内容
