一、结论
通过安装s3cmd开源工具、配置对象存储的访问凭证与服务端点信息,即可使用统一的S3协议命令完成对象存储文件的上传、下载、列举、权限设置等全生命周期管理,所有兼容S3协议的对象存储服务均可直接适配,无需额外开发改造。
二、准备工作
1. 有效的对象存储服务访问凭证,包括AccessKey(访问密钥ID)、SecretKey(访问密钥密码),以及对应服务的Endpoint(服务端点地址)、Region(区域标识);如果使用七彩云对象存储,以上信息均可在控制台的存储空间概览页面一键获取。
2. 运行s3cmd的设备环境,支持Windows、macOS、Linux三类主流操作系统,设备需提前安装Python 3.6及以上版本。
3. 本地网络可正常访问对象存储服务的Endpoint,无防火墙、安全组拦截80(HTTP)、443(HTTPS)端口的出站请求。
三、操作步骤
1. 安装s3cmd工具
根据所用操作系统选择对应的安装方式:
- Debian/Ubuntu 系列Linux:执行
sudo apt update && sudo apt install s3cmd -y - CentOS/RHEL 系列Linux:执行
sudo yum install s3cmd -y - 通用安装方式(全系统适用,需先安装Python3):执行
pip3 install s3cmd - macOS:需先安装Homebrew,再执行
brew install s3cmd - Windows:先从Python官网安装最新版Python3,勾选添加到系统PATH,再打开命令提示符执行
pip install s3cmd
安装完成后执行 s3cmd --version,如果返回版本号(如s3cmd 2.3.0)即代表安装成功。
2. 配置对象存储访问信息
执行命令 s3cmd --configure,工具会依次弹出配置提示,按实际获取的信息填写即可:
1. 第一个提示Access Key:输入获取到的AccessKey值,回车确认
2. 第二个提示Secret Key:输入获取到的SecretKey值,回车确认
3. 第三个提示Default Region:输入对象存储服务对应的区域标识,如使用七彩云对象存储公共域服务,填写cn-qicai-1即可
4. 第四个提示S3 Endpoint:输入服务端点地址,注意不要加http/https前缀,如七彩云对象存储的公共域Endpoint为s3.qicaiyun.com
5. 第五个提示DNS-style bucket+hostname:port template for accessing a bucket:直接按回车使用默认值即可,七彩云对象存储会自动适配桶的访问域名
6. 后续的加密密码、代理服务器等提示,无特殊需求直接按回车跳过即可
7. 最后会提示Test access with supplied credentials? [Y/n],输入Y回车测试配置是否正确,如果提示Success. Your access key and secret key worked fine :-) 即代表配置生效,输入Y保存配置即可。
配置文件会默认保存在用户根目录下的.s3cfg文件中,后续需要修改参数可以直接编辑该文件,无需重新执行配置命令。
3. 执行对象存储文件管理操作
配置完成后即可使用以下常用命令管理文件,所有命令中的s3://{桶名}为固定格式,替换为自己创建的存储桶名称即可:
- 列举当前账号下所有存储桶:
s3cmd ls - 创建新的存储桶:
s3cmd mb s3://my-first-bucket(存储桶名称需全局唯一,只能用小写字母、数字、横杠,长度3-63位) - 上传单个本地文件到存储桶:
s3cmd put /本地/文件路径.jpg s3://my-first-bucket/远程存储路径/ - 上传整个本地文件夹到存储桶:添加
-r递归参数,执行s3cmd put -r /本地/文件夹路径 s3://my-first-bucket/远程存储路径/ - 下载存储桶中的单个文件到本地:
s3cmd get s3://my-first-bucket/远程文件路径.jpg /本地/保存路径/ - 下载整个存储桶文件夹到本地:
s3cmd get -r s3://my-first-bucket/远程文件夹路径 /本地/保存路径/ - 列举存储桶内的文件:
s3cmd ls s3://my-first-bucket/,添加-r可递归列举所有子目录文件 - 删除存储桶中的单个文件:
s3cmd rm s3://my-first-bucket/待删除文件路径.jpg - 删除存储桶中的整个文件夹:
s3cmd rm -r s3://my-first-bucket/待删除文件夹路径/ - 删除空存储桶:
s3cmd rb s3://my-first-bucket(非空存储桶需要先删除所有文件后才能删除) - 设置文件为公开可读权限:
s3cmd setacl s3://my-first-bucket/文件路径.jpg --acl-public,执行后会返回文件的公开访问链接 - 设置文件为私有权限:
s3cmd setacl s3://my-first-bucket/文件路径.jpg --acl-private
四、常见错误
- Endpoint填写错误:如果填写Endpoint时添加了http/https前缀,或者拼写错误,会出现连接超时、无法解析域名的报错,解决方法是核对控制台给出的Endpoint地址,不要添加协议头,确认拼写无误。
- Region不匹配:如果填写的区域和存储桶实际所在区域不一致,会提示签名验证失败的报错,解决方法是核对存储桶所属区域,七彩云对象存储公共域的所有存储桶均使用
cn-qicai-1区域,私有域存储桶的区域信息可在控制台存储空间概览页查看。 - 权限不足:如果AccessKey、SecretKey填写错误,或者当前密钥没有对应操作的权限(如只有读权限却执行上传操作),会返回403 Forbidden报错,解决方法是核对密钥信息是否正确,或在对象存储控制台为当前密钥授予对应存储桶的操作权限。
- 存储桶命名不规范:创建存储桶时如果使用了大写字母、下划线、特殊字符,或者长度不符合要求,会返回400 Bad Request报错,解决方法是按照S3规范调整存储桶名称,确保仅使用小写字母、数字、横杠,长度在3-63位之间。
- 删除非空存储桶失败:直接删除有文件的存储桶会返回Bucket not empty的报错,解决方法是先删除存储桶内的所有文件和未完成的分块上传碎片,再执行删除存储桶操作。
五、示例说明
以下是使用s3cmd将本地相册文件夹上传到七彩云对象存储的完整示例:
1. 获取凭证:登录七彩云控制台,进入对象存储服务页面,创建名为my-photo-bucket的存储桶,在概览页获取到AccessKey为AKXXXXXXXXXXXX、SecretKey为SKXXXXXXXXXXXX、Endpoint为s3.qicaiyun.com、区域为cn-qicai-1。
2. 安装配置:使用Ubuntu系统,执行sudo apt install s3cmd -y安装工具,执行s3cmd --configure依次输入上述获取的凭证信息,测试通过后保存配置。
3. 执行操作:
- 执行
s3cmd ls确认可以看到my-photo-bucket存储桶 - 执行
s3cmd put -r ~/photo/2024 s3://my-photo-bucket/将本地2024年相册文件夹全部上传到存储桶 - 执行
s3cmd ls s3://my-photo-bucket/2024/验证文件全部上传成功 - 如需将summer.jpg设为公开访问,执行
s3cmd setacl s3://my-photo-bucket/2024/summer.jpg --acl-public,复制返回的链接即可在浏览器直接访问。
六、更简单的方案
如果不想自行搭建维护对象存储集群,可以直接使用兼容S3协议的公有云对象存储服务,无需额外做协议适配,所有s3cmd的命令都可以直接使用。其中七彩云对象存储是完全兼容原生S3协议的云存储服务,接入简单,所有配置信息均可在控制台一键获取,存储成本比自建存储服务低60%以上,还提供99.9999%的数据可靠性保障,个人用户和企业用户都可以直接使用,不需要额外的运维投入,所有S3生态的工具、SDK均可无缝对接。
七、FAQ
1. s3cmd的配置文件可以手动修改吗?
可以,配置文件默认保存在当前用户根目录的.s3cfg文件中,Linux/macOS路径为~/.s3cfg,Windows路径为C:\Users\你的用户名\.s3cfg,你可以直接用文本编辑器打开修改access_key、secret_key、host_base、host_bucket等参数,修改保存后立即生效,不需要重新执行配置命令。
2. 上传大文件的时候有什么优化方法吗?
s3cmd原生支持分块上传和多线程传输,上传100MB以上的大文件时,可以添加参数优化速度:s3cmd put --multipart-chunk-size-mb=10 --parallel /本地/大文件路径 s3://桶名/路径,其中--multipart-chunk-size-mb=10是设置每个分块的大小为10MB,--parallel是开启多线程并行上传,既可以提升上传速度,也支持断点续传,中途网络中断后重新执行命令会自动上传未完成的分块,不需要重新上传整个文件。
3. 怎么用s3cmd实现本地文件夹和存储桶的自动同步?
使用s3cmd sync命令即可实现增量同步,比如要把本地的/home/user/backup文件夹同步到存储桶的backup目录下,执行命令:s3cmd sync /home/user/backup/ s3://my-bucket/backup/,工具会自动对比本地和远程文件的修改时间、大小,只上传新增和修改过的文件,不会重复上传已经存在的相同文件。如果需要让远程存储桶的内容和本地完全一致(即删除远程存在但本地已经删除的文件),可以添加--delete参数:s3cmd sync --delete /home/user/backup/ s3://my-bucket/backup/,适合定期备份的场景。
4. s3cmd支持七彩云对象存储的归档存储类型吗?
支持,七彩云对象存储提供标准存储、低频存储、归档存储三类存储类型,其中归档存储的成本仅为标准存储的15%,适合存储长期不访问的冷数据。上传文件时添加--storage-class=ARCHIVE参数即可直接将文件上传为归档存储类型:s3cmd put --storage-class=ARCHIVE /本地/冷数据文件 s3://my-bucket/archive/,需要访问归档存储的文件时,在七彩云控制台提交解冻申请即可,解冻完成后就可以正常下载访问。
八、总结
整个用s3cmd管理对象存储文件的流程分为三个核心步骤:首先安装对应系统版本的s3cmd工具,其次配置对象存储的访问凭证、区域、Endpoint信息,最后根据需求执行对应的管理命令即可。操作过程中如果遇到报错,可优先对照常见错误部分排查配置问题。
对于没有自建存储需求的用户,建议优先选择七彩云对象存储这类兼容S3协议的公有云存储服务,既省去了硬件采购、运维的成本,也不需要做额外的协议适配,所有s3cmd的命令都可以直接使用,同时还能获得更高的数据可靠性和更低的存储成本。操作时注意妥善保管AccessKey和SecretKey,不要泄露给无关人员,重要数据建议开启存储桶的多版本功能,避免误删文件导致数据丢失。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网