✅ Linux 输出与重定向系统总结
一、基础概念:三个文件描述符(File Descriptor)
文件描述符 | 名称 | 说明 |
| stdin | 标准输入(通常来自键盘) |
| stdout | 标准输出(正常信息,打印信息) |
| stderr | 标准错误输出(错误或异常信息) |
二、标准重定向语法
1. 重定向标准输出(stdout):
command > out.txt
等价于:
command 1> out.txt
🔹 将标准输出写入到 out.txt
中。
2. 重定向标准错误(stderr):
command 2> err.txt
🔹 将错误信息单独写入 err.txt
。
3. 同时重定向 stdout 和 stderr 到不同文件:
command 1> out.txt 2> err.txt
🔹 正常输出到 out.txt
,错误输出到 err.txt
。
4. 将 stderr 合并到 stdout:
command > all.log 2>&1
🔹 说明:
>
:表示重定向2>
:指重定向 stderr(错误输出)&1
:表示“重定向到文件描述符 1”(即标准输出)
📌 结果:所有输出(正常 + 错误)都进入 all.log
三、后台运行命令并记录日志
使用 nohup
保持后台运行,并记录所有日志到文件:
nohup java -jar myapp.jar > app.log 2>&1 &
含义总结:
片段 | 含义说明 |
| 忽略挂起信号,终端关闭程序仍运行 |
| 启动 jar 应用 |
| 将标准输出写入文件 |
| 将标准错误也重定向到标准输出(合并) |
| 放到后台运行 |
四、同时输出到控制台和文件:tee
命令
nohup java -jar myapp.jar 2>&1 | tee app.log &
📌 效果:
- 控制台能实时看到输出
- 同时写入到
app.log
文件
五、测试命令示例
echo "标准输出" # 走 stdout(1)
ls no-such-file.txt # 走 stderr(2)
# 把正常输出和错误信息都保存下来
ls exist.txt no-such.txt > all.log 2>&1
✅ 推荐实用模板总结
场景 | 推荐命令 |
后台运行 + 日志文件输出 |
|
前台运行 + 控制台输出 |
|
后台运行 + 同时控制台和日志 | `nohup java -jar app.jar 2>&1 |
✅ 拓展:&
和 文件描述符
&
:用于引用文件描述符(例如2>&1
)1
:标准输出2
:标准错误输出
💡 特别注意:
2>1
是错误写法,表示把 stderr 重定向到名为1
的文件。- 正确写法是
2>&1
:&1
表示“文件描述符 1”。