人人都会AI编程

、>>、< 重定向、管道符 |

更新时间:2026-07-12

在 Linux 命令行环境中,每个程序启动时都会默认打开三个数据流:标准输入(stdin,文件描述符 0)标准输出(stdout,1)标准错误(stderr,2)。重定向和管道的核心作用,就是灵活改变这些数据流的来源和去向,让原本只与键盘、屏幕交互的程序可以读写文件或与其他程序协作。

1. 输出重定向 >>>

  • >:将命令的标准输出写入指定文件。若文件不存在则创建,若已存在则清空其原有内容(覆盖)。
  • >>:同样将标准输出写入文件,但采用追加方式,新内容会添加在文件末尾,不会删除已有数据。

实用示例:

ls -l /home > files.txt        # 把 /home 目录的文件列表保存到 files.txt(覆盖原内容)
echo "备份完成" >> log.txt    # 在 log.txt 末尾追加一行日志

⚠️ 注意:> 只重定向标准输出,错误信息仍会打印到屏幕。若需同时保存错误,可使用 2>(重定向标准错误)或 &>(将标准输出和标准错误都重定向到同一文件)。

2. 输入重定向 <

  • <:将文件内容作为命令的标准输入,代替从键盘读取。很多命令(如 sortwc)既可以接受文件名参数,也可以通过 < 从标准输入读取数据,两种写法通常等效,但 < 能配合其他重定向实现更灵活的组合。

实用示例:

sort < data.txt          # 将 data.txt 的内容作为 sort 的输入并排序
wc -l < access.log       # 统计 access.log 的行数(输出纯数字,不含文件名)

3. 管道符 |

管道是 Linux 命令行的灵魂。| 将左边命令的标准输出直接变为右边命令的标准输入,二者几乎可以无限串联,像流水线一样处理数据。

实用示例:

cat /var/log/syslog | grep "error" | less
# 查看系统日志中所有含 "error" 的行,并用 less 分页浏览

ps aux | grep nginx | awk '{print $2, $11}'
# 列出所有 Nginx 进程的 PID 和命令路径

find . -name "*.txt" | xargs wc -l
# 找到当前目录下所有 .txt 文件并统计每个文件的行数

管道与重定向经常组合使用,唯一要记住的规则是:管道传递的是两个命令之间的数据流,重定向则是命令和文件之间的数据流。例如:

grep "ERROR" app.log | sort | uniq -c > error_count.txt

这条命令先用 grep 找出错误行,经 sort 排序后由 unig -c 去重计数,最后将结果保存到文件。输入、过滤、处理和存储一气呵成,完全没有临时中间文件。

掌握这几种机制,意味着你可以把任何命令行工具当作可组装的零件,按需搭建出强大且即时的数据处理流程。