linux中重定向错误日志用2>或2>>,分别覆盖或追加写入;&>或>file 2>&1可合并标准输出与错误;nohup配合重定向支持后台持久记录;/dev/null用于丢弃指定输出。

Linux 中把错误日志(即标准错误输出,stderr)单独输出到指定文件,核心是用 2> 或 2>> 重定向操作符。它专用于捕获命令执行时产生的报错信息,比如权限拒绝、文件不存在、命令未找到等,而不会影响正常输出(stdout)。
只保存错误信息到文件
用 2> 覆盖写入,或 2>> 追加写入:
- ls /root 2> error.log —— 把访问 /root 的权限错误写入 error.log,原文件内容会被清空
- python script.py 2>> app_errors.log —— 每次运行脚本的报错都追加到 app_errors.log 末尾,保留历史记录
同时保存正常输出和错误到同一文件
多数场景下你希望“所有输出”(含成功结果和报错)都记下来,推荐两种等效写法:
- command &> output.log —— 简洁写法,覆盖写入
- command > output.log 2>&1 —— 明确分步:先重定向 stdout 到文件,再让 stderr 指向 stdout 的目标位置
例如:./start_server.sh > server.log 2>&1,这样启动日志和崩溃堆栈都会进 server.log。
后台运行并持续记录错误
如果程序要长期运行(如服务进程),常配合 nohup 和重定向:
- nohup python app.py > app.log 2>&1 & —— 忽略挂断信号,所有输出(含错误)进 app.log,进程在后台运行
- 注意:2>&1 必须写在 > 后面,顺序不能颠倒;否则 stderr 仍会输出到终端
丢弃错误或只保留错误
调试时有时需要过滤干扰信息:
- make 2> /dev/null —— 只屏蔽错误,正常编译信息照常显示
- curl -I https://example.com 2>&1 >/dev/null —— 反过来:只显示错误(把 stdout 丢弃,stderr 合并过去再显示)











