如何将Amazon S3 CLI删除命令的输出(含拒绝信息)写入文本文件?
为什么AWS S3删除命令的错误信息没写入文件?解决方法看这里
刚接触命令行遇到这种情况很正常,我来给你掰扯清楚问题出在哪,以及怎么解决:
核心问题:错误信息和正常输出是两个“通道”
在Linux/Unix类系统里,程序的输出分两种流:
- 标准输出(stdout,编号1):用来输出正常的执行结果,比如删除成功的提示
- 标准错误(stderr,编号2):专门用来输出错误信息,比如你遇到的
AccessDenied提示
你用的>> test.txt默认只把标准输出追加到文件里,而错误信息走的是标准错误流,还是会直接打印到终端,所以test.txt里看不到这些报错。
解决方法:把错误流也重定向到文件
根据你的需求,有几种常用的写法:
1. 把所有输出(正常+错误)都写入同一个文件
用2>&1把标准错误流(2)的内容重定向到标准输出流(1)的目标(也就是test.txt)里:
aws s3 rm s3://xxxxxxxxxxx --recursive >> test.txt 2>&1
这样不管是成功的删除提示,还是权限拒绝的错误,都会被追加到test.txt里。
2. 只捕获错误信息(正常输出仍显示在终端)
如果你只想记录失败的操作,正常的成功输出还想在终端看,可以单独把标准错误流追加到文件:
aws s3 rm s3://xxxxxxxxxxx --recursive 2>> test.txt
这样终端只会显示成功的信息,所有错误都会被存到test.txt里,方便后续排查权限问题。
3. 分开存储成功和错误记录
进阶玩法:把成功的操作写到一个文件,错误写到另一个,更清晰:
aws s3 rm s3://xxxxxxxxxxx --recursive >> success_log.txt 2>> error_log.txt
额外小提示
如果执行命令后提示permission denied(不是S3的权限,是本地写文件的权限),可以检查一下当前目录你有没有写入权限,或者换个你有权限的路径存日志文件(比如~/test.txt,也就是你的用户目录下)。
内容的提问来源于stack exchange,提问作者Conor McCarthy
相关产品推荐
相关产品推荐

