0
点赞
收藏
分享

微信扫一扫

Linux 中标准输出、错误输出及重定向操作的系统性总结

✅ Linux 输出与重定向系统总结

一、基础概念:三个文件描述符(File Descriptor)

文件描述符

名称

说明

0

stdin

标准输入(通常来自键盘)

1

stdout

标准输出(正常信息,打印信息)

2

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 &

含义总结:

片段

含义说明

nohup

忽略挂起信号,终端关闭程序仍运行

java -jar myapp.jar

启动 jar 应用

>

将标准输出写入文件

2>&1

将标准错误也重定向到标准输出(合并)

&

放到后台运行

四、同时输出到控制台和文件: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 > app.log 2>&1 &

前台运行 + 控制台输出

java -jar app.jar

后台运行 + 同时控制台和日志

`nohup java -jar app.jar 2>&1

✅ 拓展:&文件描述符

  • &:用于引用文件描述符(例如 2>&1
  • 1:标准输出
  • 2:标准错误输出

💡 特别注意:

  • 2>1 是错误写法,表示把 stderr 重定向到名为 1 的文件。
  • 正确写法是 2>&1&1 表示“文件描述符 1”。
举报

相关推荐

0 条评论