用2>文件名可将标准错误单独重定向至日志文件,不干扰正常输出,便于快速定位权限拒绝、路径不存在等典型错误;适用于调试单条命令或脚本初期阶段。

直接用 2> 文件名 就能把标准错误单独存进日志文件,这是排查故障最常用也最有效的方式之一。它不干扰正常输出,只捕获报错信息,方便你快速定位权限拒绝、路径不存在、配置加载失败等典型问题。
只重定向错误到独立日志文件
这是最干净的做法:错误进一个文件,正常输出仍显示在屏幕上,互不干扰。
-
命令写法:
ls /root 2> error.log—— 尝试访问受限目录,所有报错(如Permission denied)都会写入error.log,而成功结果不会被记录 -
验证方式:执行后运行
cat error.log查看是否捕获到预期错误 - 适用场景:调试单条命令、测试脚本初期阶段、不想让错误混在大量正常输出里冲掉关键线索
把错误和正常输出分开存两个文件
适合需要长期监控或做日志分析的场景,比如定时任务、服务启动脚本。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
命令写法:
find /etc -name "*.conf" > output.log 2> error.log—— 正常匹配结果进output.log,权限不足、目录不可读等错误进error.log - 注意点:两个重定向必须写在同一行,且不能颠倒顺序;目标文件会自动创建,但需确保当前用户对路径有写权限
-
排查技巧:先
cat error.log看有没有重复出现的错误模式,再对照output.log判断哪些路径实际可访问
合并标准输出和标准错误到同一日志
适合想“一锅端”保存完整执行痕迹的情况,特别是后台运行或无人值守任务。
-
两种等效写法:
•grep "timeout" /var/log/*.log &> full.log
•grep "timeout" /var/log/*.log > full.log 2>&1
后者更通用,前者更简洁;2>&1表示“把 2 号管道(stderr)重定向到当前 1 号管道(stdout)指向的位置” -
追加写入(避免覆盖):用
&>> full.log或> full.log 2>&1替换&>,防止每次运行都清空历史 -
实用建议:线上脚本推荐加时间戳,例如:
echo "[$(date)]" >> full.log && your_command &>> full.log
守护进程和服务的错误日志处理
后台运行的服务不能依赖终端屏幕,必须显式指定错误去向。
-
手动启动时:
/usr/local/bin/myapp 2>/var/log/myapp.err.log & -
systemd 服务中(推荐):在
.service文件的[Service]段添加:StandardError=append:/var/log/myapp.err.log
或更现代的方式:StandardError=journal,然后用journalctl -u myapp.service -p err查错 - 权限检查要点:确认日志目录存在、属主/组正确、进程用户有写权限;否则日志会静默失败,看似没报错,实则什么都没记下

















