Linux 管道与重定向入门:把小命令拼成流水线

举报
yd_271806766 发表于 2026/10/28 06:08:05 2026/10/28
【摘要】 刚学 Linux 时,很多人只会一条命令一条命令地敲。真正让命令行好用的,是“管道”和“重定向”:它们能把简单命令组合成强大的处理流程。一、三个标准流每个进程默认有三条数据通道:标准输入 stdin(编号0)、标准输出 stdout(1)、标准错误 stderr(2)。命令正常结果走1,报错走2,默认都显示在终端。二、输出重定向ls > list.txt:把结果写入文件,覆盖原内容。ls >...

刚学 Linux 时,很多人只会一条命令一条命令地敲。真正让命令行好用的,是“管道”和“重定向”:它们能把简单命令组合成强大的处理流程。

一、三个标准流
每个进程默认有三条数据通道:标准输入 stdin(编号0)、标准输出 stdout(1)、标准错误 stderr(2)。命令正常结果走1,报错走2,默认都显示在终端。

二、输出重定向

  • ls > list.txt:把结果写入文件,覆盖原内容。
  • ls >> list.txt:追加到文件末尾。
  • ls /nonexist 2> err.txt:只把错误写入文件。
  • command > all.log 2>&1:正常输出和错误都写入同一个文件,写脚本、定时任务时非常常用。
  • command > /dev/null 2>&1:丢掉所有输出,/dev/null 就是“黑洞”。

三、输入重定向
wc -l < list.txt 让命令从文件读取输入。还有 here-document:cat <<EOF > hello.txt,然后写若干行,最后以 EOF 结束,适合在脚本里直接生成配置文件。

四、管道 |
管道把前一个命令的 stdout 接到后一个命令的 stdin。例如:

  • ps aux | grep nginx:查找 nginx 进程。
  • cat access.log | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head:统计访问最多的前10个IP。
  • docker ps | wc -l:粗略统计容器数量(含表头)。
  • history | tail -20:看最近20条命令。
    每个命令只做一件事,组合起来就能完成复杂任务,这就是 Unix 哲学。

五、tee:边看边存
make 2>&1 | tee build.log 既在屏幕显示输出,又保存到文件。需要追加用 tee -a。

六、常见坑

  1. 会直接清空文件,sort a.txt > a.txt 会把文件变空,应写到临时文件再替换。

  2. 管道默认只传 stdout,想让错误也进管道要写 2>&1 |。
  3. sudo echo x > /etc/file 无效,因为重定向由当前 shell 完成,应使用 echo x | sudo tee /etc/file。
  4. 在脚本里加 set -o pipefail,才能发现管道中间命令的失败。

七、小练习
统计当前目录下各类扩展名的文件数量:ls | sed ‘s/.*.//’ | sort | uniq -c | sort -nr。动手改一改,换成自己的目录试试。掌握这些,日常查日志、处理文本就能快很多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。