s3cmd s3命令行工具
文章目录
1. 工具概述
s3cmd是Amazon S3的命令行客户端工具,用于访问和管理S3存储桶(类似于根文件夹),支持文件上传、下载、同步、删除等操作,还可用作S3备份工具。
- 核心特性:
- 跨平台兼容,支持命令行操作。
- 支持同步功能(sync),便于文件备份和维护。
- 能处理大文件上传(支持多部分上传),并提供断点续传机制。
- 可配置权限(如设置文件为公共或私有)、监控存储空间使用。
- 提供详细日志和调试选项(例如:-v、-d参数)。
2. 配置方法
配置文件是使用s3cmd的关键前置步骤,文档提供了两种配置方式:命令行一次性配置和配置文件持久化配置。配置涉及Access Key ID和Secret Access Key,这些可从S3服务提供商获取(如Amazon AWS、MinIO或其他兼容对象存储服务)。
命令行传递参数配置: 使用
s3cmd --configure命令,可指定所有必要参数。示例如下:1 2 3 4 5 6 7 8s3cmd --configure \ --access_key=<access_key> \ --secret_key=<secret_key> \ --region=<region> \ --host=<endpoint> \ --host-bucket=<endpoint> \ --no-ssl \ --signature-v2- 参数说明:
access_key和secret_key:必需的认证凭证。region:S3存储桶的区域(如us-east-1)。host和host-bucket:指定服务端点URL(如s3.amazonaws.com或自定义对象存储地址)。no-ssl:禁用HTTPS,使用HTTP连接(提升性能但降低安全性)。signature-v2:强制使用签名版本2。重要提示:- 在s3cmd 2.2.0(最高版本)下,某些不兼容AWS签名版本4(v4)的服务需加
--signature-v2选项,否则会发生自动重试签名请求(增加延迟或错误)。 - 版本要求:确保s3cmd版本≥2.0.0以避免已知bug。
- 在s3cmd 2.2.0(最高版本)下,某些不兼容AWS签名版本4(v4)的服务需加
- 参数说明:
通过配置文件配置: s3cmd持久化配置存储在
~/.s3cfg文件中:1 2 3 4 5 6 7 8 9 10[default] access_key = <access_key> secret_key = <secret_key> bucket_location = <region> host_base = <endpoint> host_bucket = <endpoint> use_https = False human_readable_sizes = True website_index = index.html signature_v2 = True关键配置项:
access_key和secret_key:基本认证信息(必要项)。bucket_location:覆盖区域设置。host_base和host_bucket:定义服务端点(e.g.,s3.amazonaws.com)。use_https:默认False表示禁用HTTPS。human_readable_sizes:启用后,文件大小显示为人性化单位(如KB、MB)。signature_v2:设为True以解决v4签名兼容性问题。针对AWS S3的简化配置:如果使用Amazon AWS原生服务,配置文件可只保留access_key和secret_key:
1 2 3[default] access_key = <access_key> secret_key = <secret_key>
3. 基本用法(常用命令)
文档详细列出了s3cmd的核心命令,支持多种操作。命令格式基于s3cmd <操作> [参数]。以下是总结的主要操作分类:
配置和认证
- 初始化配置:运行
s3cmd --configure交互式设置所有参数(引导用户输入access_key等)。
存储桶管理
存储桶(bucket)是S3中的顶级容器,相当于根文件夹,名称必须全局唯一。
- 列出所有存储桶:
s3cmd ls- 用于查看用户账户下的所有bucket。
- 创建存储桶:
s3cmd mb s3://my-bucket-name- 默认创建公开(公开可访问),可通过选项调整隐私。
- 删除空存储桶:
s3cmd rb s3://my-bucket-name- 仅当bucket为空时才能删除(若非空需先清空文件)。
- 列出存储桶内容:
s3cmd ls s3://my-bucket-name- 显示bucket内文件和子文件夹列表。
文件操作
支持文件上传、下载、删除,并包括多种参数选项和中断恢复机制。
- 上传文件:
- 基础上传:
s3cmd put file.txt s3://my-bucket-name/file.txt- 支持单个文件上传。
- 批量上传:
s3cmd put ./file1.txt ./file2.txt s3://my-bucket-name/或s3cmd put ./* s3://my-bucket-name/- 可一次性指定多个本地文件上传到指定bucket路径。
- 权限设置:
--acl-public:使文件公共可读(e.g.,s3cmd put --acl-public file.txt s3://my-bucket-name/file.txt)。--acl-private:设为私有(默认值)。
- 大文件上传和中断处理:
- 使用
--multipart-chunk-size-mb=size指定分片大小(单位MB),注意大小必须是4的倍数,否则上传报400错误(InvalidPartOrder)。 - 上传中断时(如Ctrl+C),s3cmd显示
upload-id信息;续传时带上该ID:s3cmd put ... --upload-id=<id>。
- 使用
- 基础上传:
- 下载文件:
- 基础下载:
s3cmd get s3://my-bucket-name/file.txt file.txt- 支持单个文件下载。
- 批量下载:
s3cmd get s3://my-bucket-name/file1.txt s3://my-bucket-name/file2.txt或s3cmd get s3://my-bucket-name/* ./- 下载所有文件到本地目录。
- 中断处理:下载中断时,使用
--continue选项续传:s3cmd get ... --continue。
- 基础下载:
- 删除文件:
s3cmd del s3://my-bucket-name/file.txt- 删除一个文件。
- 批量删除:
s3cmd del s3://my-bucket-name/file.txt s3://my-bucket-name/file2.txt- 可指定多个bucket对象同时删除。
- 存储空间监控:
s3cmd du -H s3://my-bucket-name- 获取bucket的总存储大小(
-H参数使人性化显示大小)。
- 获取bucket的总存储大小(
其他常用参数
参数用于细调s3cmd行为,文档列出以下常用选项:
--list-md5:结合ls命令,显示文件的MD5校验和。-H, --human-readable-sizes:文件大小以易读单位显示(如“1.2MB”)。-v, --verbose:输出详细日志,便于调试操作过程。-d, --debug:启用调试模式,提供更高级别的日志信息。--limit-rate=LIMITRATE:限制传输速率(e.g.,--limit-rate=500k,单位可指定为k/KB/m/MB)。- 这些参数可与主要命令组合使用(如
s3cmd ls -H)。
4. 高级用法:文件同步 (sync)
s3cmd支持强大的sync命令,用于在本地目录和S3存储桶之间同步文件(增量备份或恢复)。文档重点介绍了过滤选项(exclude/include):
- 排除/包含规则:支持通配符(GLOB)和正则表达式(REGEXP)过滤文件。
--exclude=GLOB:排除匹配通配符的文件(e.g.,--exclude '*.log')。--exclude-from=FILE:从文件中读取排除列表(每行一个模式)。--rexclude=REGEXP:使用正则表达式排除(e.g.,--rexclude '\.tmp$')。--include=GLOB、--include-from=FILE、--rinclude=REGEXP:类似,但用于包含文件(优先级高于exclude)。
- 同步方向示例:
- 上传同步:本地到S3:
s3cmd sync --exclude '*' --include 'link*' ./images/ s3://files- 仅同步匹配’link*‘的文件。
- 下载同步:S3到本地:
s3cmd sync --exclude '*' --include 'link*' s3://files ./images2- 从S3下载匹配’link*‘的文件到本地目录。
- 上传同步:本地到S3:
- 同步输出:显示传输进度、大小和速度(e.g., “100% in 0s, 206.34 kB/s”)。
5. ACL和生命周期管理
文档简要提及相关功能,但未深入展开:
- ACL (Access Control List):用于设置文件或bucket的访问权限,通过
--acl-public和--acl-private参数在文件操作中控制。 - 生命周期管理:涉及自动归档或删除旧文件(如S3的生命周期规则),但s3cmd的命令未具体说明,可能需结合S3原生API或其他工具使用。
6. 注意事项和最佳实践
- 中断恢复:上传和下载都支持断点续传(上传用
--upload-id,下载用--continue),适合大文件或不稳定网络。 - 安全提示:配置文件中
use_https=False可能不安全,建议生产环境启用HTTPS。
总结
s3cmd是一个多功能命令行工具,适用于日常S3文件管理(如上传、下载、同步),并支持复杂场景(如大文件分片、过滤同步)。配置灵活(命令行或文件),且需注意版本和签名细节。其 Python 基础确保了易用性,而同步功能使其成为备份的理想选择。建议在操作前参考官方文档测试特定环境下的行为,以避免兼容性问题。
文章作者 Chen Guixian
上次更新 2025-12-20