基础组合
(1) 标准输出和错误合并到文件
command > output.log 2>&1
- 解释:
> output.log:将 stdout 重定向到 output.log。2>&1:将 stderr 合并到 stdout,最终所有输出(正常和错误)都写入 output.log。
- 用途:记录全部日志(如服务启动)。
(2) 仅重定向错误到文件
command 2> error.log
- 解释:仅将
stderr 写入 error.log,stdout 仍打印到终端。
(3) 分离输出和错误到不同文件
command > output.log 2> error.log
高级组合
(4) 丢弃所有输出(静默执行)
command > /dev/null 2>&1
- 解释:
> /dev/null:丢弃 stdout。2>&1:将 stderr 也丢弃。
- 用途:后台运行不需要日志的命令(如定时任务)。
(5) 实时输出并同时保存到文件
command 2>&1 | tee output.log
- 解释:
2>&1:合并 stderr 和 stdout。| tee output.log:输出到终端的同时写入文件。
- 用途:需要实时查看日志并保存的场景。
(6) 追加模式(不覆盖原有文件)
command >> output.log 2>&1
特殊用法
(7) 仅重定向错误到标准输出
command 2>&1 > output.log
(8) 交换 stdout 和 stderr
command 3>&1 1>&2 2>&3
- 解释:通过临时文件描述符
3 交换两者(罕见需求)。
常见问题
为什么 2>&1 必须在 > 之后?
在 nohup 中的典型用法
nohup command > nohup.out 2>&1 &
nohup 默认会将输出保存到 nohup.out,但显式重定向更可控。
总结
| 组合命令 | 效果 |
|---|
> file 2>&1 | 合并输出和错误到文件 |
2> error.log | 仅错误输出到文件 |
> file 2> error.log | 分离输出和错误到不同文件 |
>> file 2>&1 | 追加模式合并输出 |
2>&1 | tee file | 实时输出并保存 |
> /dev/null 2>&1 | 丢弃所有输出 |