教程
🛠️

开发工具

Git、VS Code、终端与效率工具使用指南。

终端高频命令与管道:把命令串成流水线

掌握文件查看、搜索、查找、管道与重定向等高频命令组合,学会用一条命令链完成复杂任务。

· 更新于 2026-07-20 阅读量 --

会了 lscdpwd 只是刚进门。终端真正的爽点在于:把一堆小命令用管道串成流水线,前一个的输出直接喂给下一个,一行顶你点几十下鼠标。这一篇讲最常用的几类命令和”管道思维”。

把命令想成工厂里的工人,每人只干一件事(看文件、搜内容、数行数)。管道 | 就是传送带,把上一个工人的产出传给下一个。你搭好流水线,原料进去、成品出来。

看文件内容

cat app.log              # 一次性打印全部内容(短文件用)
less app.log             # 分页看,空格翻页、q 退出(大文件用)
head -n 20 app.log       # 看前 20 行
tail -n 20 app.log       # 看最后 20 行
tail -f app.log          # 实时追踪新增内容(看日志必备,Ctrl+C 退出)

tail -f 是盯日志的神器:服务跑起来后,错误实时滚出来,不用反复打开文件。

搜内容:grep

grep "error" app.log            # 找出含 error 的行
grep -i "error" app.log         # 忽略大小写
grep -rn "TODO" src/            # 递归搜 src 目录里所有文件
grep -n "func" app.js           # 显示行号

grep -rn 是”在代码里全局找某个词”的标配,比编辑器搜索有时更快,尤其远程服务器上。

找文件:find

find . -name "*.js"             # 当前目录及子目录找所有 .js 文件
find . -type f -size +10M       # 找大于 10MB 的文件
find . -name "config.*"         # 找名字含 config 的文件

管道:把命令连起来

这是核心。用 | 把前一个命令的输出,作为后一个命令的输入:

# 在日志里找 error,再只取前 10 行
grep "error" app.log | head -n 10

# 统计日志里 error 出现了多少次
grep -c "error" app.log

# 看某个接口被请求了多少次(统计含 /api 的行数)
grep "/api" access.log | wc -l

# 找出出现频率最高的前 5 个 IP
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" access.log | sort | uniq -c | sort -rn | head -5

最后这条是经典流水线:grep 抽取 IP → sort 排序 → uniq -c 去重计数 → sort -rn 按次数倒序 → head 取前 5。单独每个命令都简单,串起来就解决了”谁访问最多”这种实际问题。

重定向:把结果存起来

ls -la > filelist.txt     # 把输出写进文件(覆盖)
ls -la >> filelist.txt    # 追加到文件末尾
command 2> error.log      # 把错误输出单独存

> 是覆盖、>> 是追加,常用来把命令结果存成报告。

通配符

rm *.log              # 删所有 .log
ls src/*.js           # 列出 src 下所有 js
cp report.* backup/   # 复制所有 report 开头文件

* 匹配任意多个字符,? 匹配单个字符,[abc] 匹配其中任一个。

常见新手坑

  • cat 大文件:几万行刷屏,应该用 lesshead/tail
  • grep 忘加 -r 就搜目录:只搜单个文件,搜不到子目录里的内容。
  • > 误用覆盖重要文件:本想 >> 追加,写成 > 把原内容清空了。重要文件先备份。
  • 管道顺序搞反A | B 是 A 的输出给 B,想清楚”谁的输出喂给谁”。

小测验

  • 问题1:实时看日志新增内容用什么?答案:tail -f 文件名
  • 问题2:grep "error" log | wc -l 在干嘛?答案:统计日志里含 error 的行数。
  • 问题3:>>> 区别?答案:> 覆盖写入,>> 追加到末尾。

更多实战:用流水线排查一个慢接口

假设用户说”订单接口偶尔很慢”,你手上有访问日志 access.log,每行带响应时间。找出最慢的 5 个请求:

grep "POST /order" access.log | sort -t' ' -k3 -rn | head -5

拆解:grep 筛出订单请求 → sort 按第 3 列(假设是耗时)倒序 → head 取前 5。这条流水线把”翻几万行日志”压缩成一秒钟的结果。

重定向的坑

ls > list.txt        # 覆盖写,原内容没了
ls >> list.txt       # 追加,原内容保留
command > out.txt 2>&1   # 标准输出和错误都写进同一文件

重要提醒:> 是覆盖,误用会清空重要文件。操作前确认目标文件不重要,或先用 >>。删文件前也先 pwd 确认位置。

自测:你真的懂了吗

  • 实时看日志新增用什么?答案:tail -f 文件名
  • grep "error" log | wc -l 在干嘛?答案:统计日志里含 error 的行数。
  • >>> 区别?答案:> 覆盖、>> 追加。

常见认知误区

命令组合这块,新手常踩几个坑。第一,用 cat 看大文件——几万行刷屏根本看不过来,大文件应该用 lesshead/tail。第二,grep 忘加 -r 就搜目录——只搜单个文件,搜不到子目录里的内容,全局搜要加 -r。第三,> 误用覆盖重要文件——本想 >> 追加写成 > 把原内容清空了,重要文件操作前先备份。第四,管道顺序搞反——A | B 是 A 的输出喂给 B,想清楚”谁的输出给谁”。第五,以为命令只能单个用——其实管道把小命令串成流水线,才是终端真正的威力所在,每个命令只干一件事,组合解决复杂问题。第六,通配符用错——rm *.log 会删所有日志,执行删除类命令前先 ls 确认匹配到的是哪些文件,再动手。

这一篇你该记住的

  • 看内容:cat/less/head/tail -f(盯日志)。
  • 搜内容:grep -rn 全局搜;找文件:find -name
  • 管道 | 串联命令,前一个输出喂后一个,搭流水线解决复杂问题。
  • 重定向:> 覆盖、>> 追加。
  • 通配符 * 匹配任意,? 匹配单个。

下一篇我们讲 终端快捷键:不用死记命令,几个组合键就能让你在黑框框里健步如飞。