当前位置:首页>Linux>Linux 重定向与管道以前我手抄命令结果写报告,学会了这些符号以后一个回车就搞定

Linux 重定向与管道以前我手抄命令结果写报告,学会了这些符号以后一个回车就搞定

  • 2026-10-11 05:51:06
Linux 重定向与管道以前我手抄命令结果写报告,学会了这些符号以后一个回车就搞定

Linux 重定向与管道

以前我手抄命令结果写报告,学会了这些符号以后一个回车就搞定

Linux基础  实战课 

Linux 基础实战课 · 进阶篇

————————————————

💬 毕业设计那会儿,导师让我把服务器上各应用的 CPU、内存、磁盘占用汇总成一份报告。我的做法是:ps aux 跑一遍,手动抄 CPU 和内存的数字到 Excel;df -h 再跑一遍,手动抄磁盘数据……

后来师兄看我操作,丢过来一行命令:

ps aux --sort=-%mem | head -6 > report.txt && echo '---' >> report.txt && df -h >> report.txt

一条命令生成一份报告

三秒出结果。从那之后我才真正理解什么是「命令行之美」——不是一条命令多强,是把简单命令像积木一样拼起来的力量。

今天把重定向和管道的玩法一次讲透,这是我整个基础课系列里最想写的一篇。

————————————————

一、五个符号,记住就不用查了

符号

作用

例句

>

覆盖输出到文件(文件会被清空重写)

echo hello > file.txt

>>

追加到文件末尾

echo line2 >> file.txt

2>

把错误输出重定向到文件

cmd 2> error.log

|

管道:把左边命令的输出喂给右边命令

ps aux | grep nginx

tee

输出到屏幕 + 同时存到文件

ps aux | tee ps.txt

二、> vs >>:覆盖还是追加

这两个是最容易搞混的:

echo '第一行' > log.txt

写入(覆盖原文件)

echo '第二行' >> log.txt

追加到末尾

cat log.txt 会看到:

第一行 第二行

两行都在

⚠️ 用 > 之前想清楚:文件里原来的内容会被清空!好多人的配置文件就是这么丢的。不确定的时候就先用 >>,追加总比覆盖安全。

三、管道 |:命令组合的灵魂

管道符号 | 把前一个命令的输出变成后一个命令的输入。这是 Linux 命令行的核心思想——小工具组合出大效果。

几个经典用法:

ps aux | grep nginx

在所有进程中过滤 nginx

ls -la | wc -l

统计目录下有多少文件

cat /var/log/syslog | grep ERROR

从日志中过滤 ERROR 行

du -sh /* | sort -rh | head -5

找出磁盘占用最大的 5 个目录

管道可以串联多个:

cat access.log | grep '500' | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

找访问日志中哪些 IP 触发了最多的 500 错误(Top 10)

💡 管道串联的精髓:每一步只做一件事,但组合起来能做任何事。像搭乐高一样——grep 负责过滤,awk 负责提取字段,sort 负责排序,uniq 负责去重。

四、tee:边看边存

管道的问题是数据流进去了就看不到了。tee 解决了这个问题——它把水龙头劈成两条路,一条继续流向下一级管道,一条存到文件:

ps aux | tee processes.txt | grep nginx

保存完整进程列表,同时只看 nginx

df -h | tee disk_report.txt

看磁盘的同时保存报告

五、2>&1:错误也一起收了

有时候你写了个脚本 > log,结果却发现错误信息没有入日志,全喷在屏幕上了。

原因:Linux 有两条输出流——标准输出(stdout,文件描述符 1)和标准错误(stderr,文件描述符 2)。> 默认只重定向 stdout。

要把错误也一起收进来:

./backup.sh > log.txt 2>&1

stdout 和 stderr 都进 log.txt

拆开看:./backup.sh > log.txt 把正常输出写到 log.txt,2>&1 把错误输出(2)重定向到标准输出(1)——也就是同一个 log.txt。

💡 2>&1 必须写在 > file 后面,不能反过来。先 > file 开了重定向的路,再 2>&1 跟着走。反过来写的话 2>&1 不知道要指向哪里。

六、实战组合技:运维日常高频用法

① 查看到底哪些进程在吃内存:

ps aux --sort=-%mem | head -6

内存 Top 5

② 看 80 端口是谁在用:

ss -tlnp | grep :80

监听 80 的进程

③ 系统信息一键快照保存:

(echo '===DISK===' && df -h && echo '===MEM===' && free -h && echo '===CPU===' && uptime) | tee system_report.txt

保存系统状态快照

④ 日志实时监控 + 存档:

tail -f /var/log/nginx/access.log | tee -a /tmp/nginx_monitor.txt

边看日志边存档

⑤ 找最大的 10 个文件:

find / -type f -size +100M 2>/dev/null | xargs ls -lhS | head -10

找出大于 100MB 的文件,忽略没权限的报错

看到了吗:2>/dev/null 把「权限不够」的报错丢到黑洞(/dev/null),输出清清爽爽只显示重要的。

掌握重定向和管道之后,你的命令行效率能提高一个数量级。从「运行命令 → 看结果 → 手动处理 → 运行下一个命令」变成「一条管道五个命令 → 出结果」。

这也是我基础课系列想传递的最核心的东西——Linux 不是靠记住几百个命令,是靠学会把简单的东西组合出复杂的威力。

————————————————

至此,Linux 基础实战课全部完结。从最基本的命令速查到重定向管道,这个系列涵盖了日常运维中最核心的技能。

如果你一路跟下来了,现在应该能独立登录服务器、管理用户、操作文件、分析日志、写脚本、配定时任务、管防火墙。恭喜你,已经比 90% 的「会用电脑」的人强了。

下一阶段,我准备开一个「运维实战翻车记录」番外系列,聚焦真实故障排查——Nginx 502 是怎么找出来的、磁盘满了怎么紧急处理、数据库连接池被打爆了怎么办……全是真金白银的实战经验。

————————————————

下期预告:《docker系列》

后续都是两天更新一篇文章了,感谢大家支持

💬 基础课系列完结了,你最喜欢哪一篇?

还想看哪个专题?番外篇你最想了解什么故障场景?评论区告诉我

👍 点赞💬 留言🔄 转发给需要的朋友

有问题欢迎评论区留言,看到都会回复

最新文章

随机文章