一、基础重定向操作符
|-------------|-----------|---------------------|----------------------------|------------------|
| 类别 | 操作符 | 含义 | 示例 | 备注 |
| 标准输出 | >
| 覆盖写入 stdout 到文件 | ls > file.txt
| 文件不存在则创建,存在则清空内容 |
| | >>
| 追加 stdout 到文件末尾 | date >> log.txt
| 保留原有内容 |
| 标准错误 | 2>
| 覆盖写入 stderr 到文件 | rm not_exist 2> err.log
| 仅捕获错误信息 |
| | 2>>
| 追加 stderr 到文件末尾 | make 2>> err.log
| 错误日志持续累积 |
| 输入重定向 | <
| 从文件读取 stdin | sort < data.txt
| 替代键盘输入 |
| | <<
| 多行输入(Here Document) | cat << EOF
...
EOF
| 自定义结束标记 |
二、组合重定向技巧
|------------|-----------------|----------------------|-------------------------------------------|------------------|
| 类别 | 操作符/组合 | 含义 | 示例 | 备注 |
| 流合并 | &>
或 &>>
| 合并stdout和stderr到同一文件 | sh script.sh &> command.log
| 简写形式(新版 Bash 支持) |
| | 2>&1
| 将stderr合并到stdout流 | sh script.sh > command.log 2>&1
| 顺序敏感(必须写在普通重定向后) |
| 流分离 | > file 2> err
| 分离stdout和stderr | python app.py > out.log 2> err.log
| 独立记录两种输出类型 |
| 管道结合 | |
+ 2>
| 过滤错误后传递有效输出 | grep "error" syslog 2>/dev/null | wc -l
| 丢弃错误信息以提高管道效率 |
| 黑洞设备 | >/dev/null
| 丢弃所有输出 | nohup ./start.sh >/dev/null 2>&1 &
| 常用于后台静默执行 |
关键注意事项:
- 操作符顺序 :合并操作
2>&1
必须写在普通重定向之后,否则无法生效 - 覆盖风险 :
>
会直接覆盖文件内容,敏感操作建议先备份 - 追加 :
>>
适用于日志累积,可以避免历史数据丢失