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
    8
    
    s3cmd --configure \
          --access_key=<access_key> \
          --secret_key=<secret_key> \
          --region=<region> \
          --host=<endpoint> \
          --host-bucket=<endpoint> \
          --no-ssl \
          --signature-v2
    
    • 参数说明
      • access_keysecret_key:必需的认证凭证。
      • region:S3存储桶的区域(如us-east-1)。
      • hosthost-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持久化配置存储在~/.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_keysecret_key:基本认证信息(必要项)。

      • bucket_location:覆盖区域设置。

      • host_basehost_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.txts3cmd 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参数使人性化显示大小)。

其他常用参数

参数用于细调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*‘的文件到本地目录。
  • 同步输出:显示传输进度、大小和速度(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 基础确保了易用性,而同步功能使其成为备份的理想选择。建议在操作前参考官方文档测试特定环境下的行为,以避免兼容性问题。