用 command > stdout_file 2> stderr_file 可分别将标准输出和标准错误覆盖写入两文件;>> 和 2>> 支持追加模式;注意 2> 不能有空格,2>&1 与 2>file 含义不同。

直接用 command > stdout_file 2> stderr_file 就能分开保存正常输出和错误信息。
标准输出和错误输出分别存到两个文件
这是最常用也最清晰的做法。Shell 默认把标准输出(fd 1)和标准错误(fd 2)都送到终端,但它们彼此独立,可以各自重定向。
- > stdout_file 把命令的正常输出写入 stdout_file(覆盖原内容)
- 2> stderr_file 把命令的错误信息写入 stderr_file(同样覆盖)
- 两者顺序无关,
ls /exist /noexist > out.txt 2> err.txt和ls /exist /noexist 2> err.txt > out.txt效果一致
追加模式下分别写入
如果不想清空已有日志,而是继续追加内容,用 >> 和 2>>:
-
command >> out.log 2>> err.log—— 正常输出追加到 out.log,错误追加到 err.log - 注意:不能写成
2>>>,正确写法是2>> file
常见误区提醒
容易出错的地方往往在符号写法和顺序上:
-
command > out.log 2>err.log中,2>必须紧挨着数字 2,中间不能有空格 - 别混淆
2>&1(把错误重定向到当前标准输出目标)和2>file(错误单独写入 file) - 如果只写了
command > file,错误仍会打印在屏幕上,不会进 file
验证是否生效的小技巧
用一个必然出错的命令测试,比如 ls /missing /etc/passwd > out 2> err:
- 运行后
cat out应看到/etc/passwd的详细信息 -
cat err应看到类似ls: cannot access /missing: No such file or directory - 两个文件内容互不干扰,说明分离成功

















