基础组合
(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 | 丢弃所有输出 |