对象存储s3cmd使用手册

本文介绍S3cmd的安装与使用方法,涵盖配置、基本操作、高级功能等,助力高效管理对象存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#s3cmd 是用于创建S3桶,上传,检索和管理数据到对象存储命令行实用程序。 通常用于对象存储服务桶和对象数据管理,包括创建桶、上传、检索、删除及本地与对象存储服务间数据同步等。

一、安装

yum install s3cmd

apt-get install s3cmd

二、使用

1. 配置方法

  • 更改$HOME/.s3cfg配置文件
  • s3cmd --configure
  • s3cmd -c FILEFILE为已完成配置的文件

推荐更改项:
access_key = <your access key id>
secret_key = <your access key secret>
host_base = host:port
host_bucket = %(bucket)s.host
use_https = False #Default is True

2. 操作

  1. 创建Bucket,且Bucket名称是唯一的。
    s3cmd mb s3://BUCKET

s3cmd mb s3://my_bucket_name

  1. 删除空Bucket
    s3cmd rb s3://BUCKET

s3cmd rb s3://my_bucket_name

  1. 列举Object或Bucket
    s3cmd ls [s3://BUCKET[/PREFIX]]

s3cmd ls s3://my_bucket_name
s3cmd ls s3://my_bucket_name/file.txt

  1. 列举所有Buckets
    s3cmd ls

  2. 上传Object到某个Bucket
    s3cmd put FILE [FILE...] s3://BUCKET[/PREFIX]

上传单个文件
s3cmd put file.txt s3://my_bucket_name/file.txt
批量上传文件(上传当前目录下的所有文件)
s3cmd put ./* s3://my_bucket_name/
递归上传文件(递归上传当前目录下的所有文件)
s3cmd put ./* s3://my_bucket_name/ -r

注:当文件大于15MB时,会采用分段上传,可通过与--multipart-chunk-size-mb=SIZE联用,设置上传块大小。也可以与--disable-multipart联用取消分段上传

  1. 从Bucket下载Object
    s3cmd get s3://BUCKET/OBJECT LOCAL_FILE

下载单个文件
s3cmd get s3://my_bucket_name/file.txt file.txt
批量下载(下载到当前目录)
s3cmd get s3://my-bucket-name/* ./

  1. 删除Object
    s3cmd del s3://BUCKET/OBJECTs3cmd rm s3://BUCKET/OBJECT

s3cmd del s3://my_bucket_name/file.txt
s3cmd rm s3://my_bucket_name/file.txt
rmdel的别名

  1. 从Glacier存储类中恢复文件
    s3cmd restore s3://BUCKET/OBJECT

s3cmd restore s3://my_bucket_name/file.txt

  1. 同步目录树(同步操作是要进行MD5校验的,只有当文件不同时,才会被传输)
    s3cmd sync LOCAL_DIR s3://BUCKET[/PREFIX] 或 s3://BUCKET[/PREFIX] LOCAL_DIR

同步当前目录下的所有文件:s3cmd sync ./ s3://my_bucket_name/

  1. 获取对应的Bucket所占用的空间大小
    s3cmd du [s3://BUCKET[/PREFIX]]

s3cmd du s3://my_bucket_name得到:
179813669 19 objects s3://my_bucket_name/
s3cmd du -H s3://my_bucket_name得到:
171M 19 objects s3://test_bucket01/

  1. 获取Bucket或Object的版本信息
    s3cmd info s3://BUCKET[/OBJECT]

s3cmd info s3://my_bucket_name
s3cmd info s3://my_bucket_name/file.txt

  1. 复制Object(从BUCKET1/OBJECT1复制到BUCKET2[/OBJECT2])
    s3cmd cp s3://BUCKET1/OBJECT1 s3://BUCKET2[/OBJECT2]

s3cmd cp s3://my_bucket_name1/file1.txt s3://my_bucket_name2/file2.txt

  1. 修改Object元数据
    s3cmd modify s3://BUCKET1/OBJECT

修改example.jpg的 --mime-typeimge/jpeg
s3cmd modify --mime-type="image/jpeg" s3://my_bucket01/example.jpg

  1. 移动Object
    s3cmd mv s3://BUCKET1/OBJECT1 s3://BUCKET2[/OBJECT2]

s3cmd mv s3://my_bucket_name1/file1.txt s3://my_bucket_name2/file2.txt

  1. 修改Bucket或对象的ACL
    s3cmd setacl s3://BUCKET[/OBJECT]

Bucket和Bucket所有Object权限私有s3cmd setacl s3://my_bucket_name -acl-private --recursive
Bucket权限私有Object权限不变s3cmd setacl s3://my_bucket_name -acl-private

  1. 修改Bucket策略
    s3cmd setpolicy FILE s3://BUCKET

本地策略policy.json

 

{

"Version": "2012-10-17",

"Statement": [

{

"Sid": "AddPerm",

"Effect": "Allow",

"Principal": "*",

"Action": [

"s3:GetObject"

],

"Resource": [

"arn:aws:s3:::volpublic/*"

]}]}

 

设置my_bucket_name的Bucket策略s3cmd setpolicy policy.json s3://my_bucket_name

  1. 删除Bucket策略
    s3cmd delpolicy s3://BUCKET

  2. 修改Bucket CORS
    s3cmd setcors FILE s3://BUCKET

  3. 删除Bucket CORS
    s3cmd delcors s3://BUCKET

  4. 修改Bucket请求者付费策略
    s3cmd payer s3://BUCKET

修改为申请方付款存储桶
s3cmd payer s3://BUCKET --requester-pays
修改为存储桶拥有者付款存储桶
s3cmd payer s3://BUCKET

  1. 显示分段上传
    s3cmd multipart s3://BUCKET [Id]

  2. 放弃分段上传
    s3cmd abortmp s3://BUCKET/OBJECT Id

  3. 列出分段上传
    s3cmd listmp s3://BUCKET/OBJECT Id

  4. 打开/关闭Bucket的access logging
    s3cmd accesslog s3://BUCKET

  5. 使用secret key生成签名
    s3cmd sign STRING-TO-SIGN

secret key"sfdserqwovbnxz2dsc"
s3cmd sign sfdserqwovbnxz2dsc得到:
Signature: G3GtIkpMWFiyd/FLVvZ2z76xC20=

  1. 提供有时间期限的公共访问S3的URL
    s3cmd signurl s3://BUCKET/OBJECT <expiry_epoch|+expiry_offset>

生成1小时后过期的带有签名的url:
s3cmd signurl s3://test_bucket01/example.jpg +3600得到:
http://test_bucket01.ceph40:7480/example.jpg?AWSAccessKeyId=ENECX2I210OUE60CE3LF&Expires=1471258746&Signature=AOHcWQlu0tFPJCKqsE6DUmF8sRU%3D
生成24小时后过期的带有签名的url:
在未来的时间节点1471344144后过期:
s3cmd signurl s3://test_bucket01/example.jpg 1471344144得到:
http://test_bucket01.ceph40:7480/example.jpg?AWSAccessKeyId=ENECX2I210OUE60CE3LF&Expires=1471344144&Signature=4%2FTlQiqvcPu8tfgCjVwjR%2BdwLDI%3D

  1. 修复Bucket中无效的文件名
    s3cmd fixbucket s3://BUCKET[/PREFIX]

  2. 创建Bucket Website
    s3cmd ws-create s3://BUCKET

  3. 删除Bucket Website
    s3cmd ws-delete s3://BUCKET

  4. 列出Bucket Website信息
    s3cmd ws-info s3://BUCKET

  5. 设置或删除Bucket过期规则
    s3cmd expire s3://BUCKET

  6. 上传Bucket的生命周期策略
    s3cmd setlifecycle FILE s3://BUCKET

  7. 移除Bucket的生命周期策略
    s3cmd dellifecycle s3://BUCKET

3. 选项

  1. -h, -help:查找帮助
  2. --configure:配置工具
  3. -c FILE, --config=FILE:配置文件名,默认为$HOME/.s3cfg
  4. --dump-config:解析配置文件后转换为当前的配置
  5. --access_key=ACCESS_KEY
    --secret_key=SECRET_KEY:设置Access Key和Secret Key
  6. -e, --encrypt:在上传前加密文件
  7. --no-encrypt:不加密文件
  8. -f, --force:强制覆盖和其他危险性操作
  9. --continue:继续获取分段下载文件(只适用于get操作)
  10. --continue-put:继续上传部分分段上传文件或分段上传部分
  11. --upload-id=UPLOAD_ID:当你想继续现有的上传,而使用的分段上传的UploadId,可以使用s3cmd multipart [URI]命令查看UploadId
  12. --skip-existing:跳过目的地址已经存在的文件(只适用于getsync操作)
  13. -r, --recursive:回归上传,下载或者移除。
  14. --check-md5:用于同步文件,比较文件时检验MD5值,默认开启。
  15. --no-check-md5:同步文件,关闭 MD5检验,只进行大小比较,加快了转化速度,但是可能失去一些更改的文件。
  16. -P, --acl-public:允许资源匿名下载(对于Object),列表(对于Bucket)
  17. --acl-private:允许拥有者拥有对象的所有权限(默认)
  18. --acl-grant=PERMISSION:EMAIL or USER_CANONICAL_ID:通过账户的邮箱或者user ID授予资源的权限,权限包含read, write, read_acp, write_acp, full_control

admin账户授予对my_bucket01资源full_control权限
s3cmd setacl s3://my_bucket01 --acl-grant=full_control:admin

  1. --acl-revoke=PERMISSION:USER_CANONICAL_ID:取消账户的权限,权限包含read, write, read_acp, wirte_acp,用法同选项18
  2. -D NUM, --restore-days=NUM:存储文件可用的时长(单位:天),只能与restore命令一起使用
  3. --delete-removed:删除远程文件,并不与本地文件关联,与sync联用
  4. --no-delete-removed:不删除远程对象
  5. --delete-after:有新资源上传后删除与sync联用
  6. --max-delete=NUM:删除不超过NUM个文件与delsync联用
  7. --add-destination=ADDITIONAL_DESTINATIONS:用于并发上传的其他地址
  8. --delete-after-fetch:在获取远程对象后,将远程对象删除,与get, sync联用
  9. -p, --preserve:保留文件系统属性(模式,所有权,时间戳),sync命令默认包含此命令
  10. --no-preserve:不保留文件系统属性
  11. --exclude=GLOB:文件名和匹配GLOB路径将同步被排除
  12. --exclude-from=FILE:从FILE中读取用于排除的GLOBs
  13. --rexclude=REGEXP:在sync时,通过正则表达式排除文件名和路径
  14. --rexclude-from=FILE:从FILE中读取用于排除的正则表达式
  15. --include=GLOB:即便先前已经排除被排除了,也能通过匹配的GLOB的文件名和路径包含进来
  16. --include-from=FILE:通过读取FILE的方式获取用于包含的GLOBs
  17. --rinclude=REGEXP:通过正则表达式获取包含的内容
  18. --rinclude-from=FILE:通过读取FILE获取用于包含的正则表达式
  19. --files-from=FILE:从FILE读取源文件名的列表
  20. --region=REGION, --bucket-location=REGION:设置创建Bucket的区域
  21. --reduced-redundancy, --rr:存储对象设置存储类型为低冗余存储,与put, cp, mv联用
  22. --no-reduced-redundancy, --no-rr:存储对象设置为非低冗余存储,与put, cp, mv联用
  23. --storage-class=CLASS:设置对象的存储类型(STANDARD, STANDARD_IA, 或 REDUCED_REDUNDANCY),与put, cp, mv联用
  24. --access-logging-target-prefix=LOG_TARGET_PREFIX:访问日志的目标前缀为S3 URI:http://acs.amazonaws.com/groups/s3/LogDelivery,与cfmodify, accesslog命令联用
  25. --no-access-logging:关闭访问日志,与cfmodify, accesslog命令联用
  26. --default-mime-type=DEFAULT_MIME_TYPE:存储对象默认是MIME类型,应用默认是binary/octet-stream类型
  27. -M, --guess-mime-type:通过文件扩展名猜测文件的MIME类型
  28. --no-guess-mime-type:使用文件的默认类型
  29. --no-mime-magic:不使用mime magic来猜测MIME类型
  30. -m MIME/TYPE, --mime-type=MIME/TYPE:强制使用设置的MIME类型,覆盖--default-mime-type--guess-mime-type类型
  31. --add-header=NAME:VALUE:增加HTTP头请求,可以使用多次。比如,使用这个选项可以设置Expires或者Cache-Control头(或者两者都可以)
  32. --remove-header=NAME:移除已有的HTTP
  33. --server-side-encryption:上传对象时,采用服务端加密,与put, sync, cp, modify联用
  34. --server-side-encryption-kms-id=KMS_KEY:上传对象时,指定 key id给服务端,服务端通过KWS进行加密,与put, sync, cp, modify联用
  35. --encoding=ENCODING:覆盖自动检测终端和文件系统编码(字符集),自动检测终端:UTF-8
  36. --disable-multipart:取消文件大小比--multipart-chunk-size-mb大的分段上传,即取消分段上传
  37. --multipart-chunk-size-mb=SIZE:分段上传块的大小,大于SIZE(单位:M)的部分会自动采用多线程上传,默认大小是15MB,块大小:最小5MB,最大5GB
  38. --list-md5:在Bucket列表中包含MD5校验,只适用于ls命令
  39. -H, --human-readable-sizes:打印出可读的形式(例如,1234显示为1kB
  40. --ws-index=WEBSITE_INDEXindex-document的名称,只适用于ws-create命令
  41. --ws-error=WEBSITE_ERRORerror-document的名称,只适用于ws-create命令
  42. --expiry-date=EXPIRY_DATE:标示到期规则何时生效,与expire联用
  43. --expiry-days=EXPIRY_DAYS:标示对象创建后,到期规则生效的天数
  44. --expiry-prefix=EXPIRY_PREFIX:用来指定一个或多个对象适用该到期规则,只适用于expire命令
  45. --progress:显示进度表(在TTY上默认显示)
  46. --no-progress:不显示进度(在non-TTY上默认不显示)
  47. --enable:启用已有的CloudFront ,只适用于cfmodify命令
  48. --disable:关闭已有的CloudFront ,只适用于cfmodify命令
  49. --cf-invalidate:上传文件CloudFront服务不可用
  50. --cf-invalidate-default-index:当使用自定义的原始文件和S3的静态网站,默认的index文件无效。
  51. --cf-no-invalidate-default-index-root:当使用自定义的原始文件和S3的静态网站,默认的index文件路径仍然生效。
  52. --cf-add-cname=CNAME:增加已有的CNAMECloudFront,只适用于cfcreate, cfmodify命令
  53. --cf-remove-cname=CNAME:从CloudFront移除CNAME,只适用于cfmodify命令
  54. --cf-comment=COMMENT:对于一个给定的CloudFront设置评论
  55. --cf-default-root-object=DEFAULT_ROOT_OBJECT:当URL中为指定对象时,设置默认的root对象用于返回。使用相关路径。比如,用default/index.html代替/default/index.html或者s3://bucket/default/index.html,只适用于cfcreate, cfmodify命令
  56. -v, --verbose:输出启用显示详细信息
  57. -d, --debug:启用调试输出,会列出调试信息
  58. --version:显示s3cmd版本信息
  59. -F, --follow-symlinks:当他们是规则文件时,跟踪链接
  60. --cache-file=FILE:包含本地源的MD5值缓存文件
  61. -q, --quiet:是标准输出时,不输出信息
  62. --ca-certs=CA_CERTS_FILESSL CA证书的路径
  63. --check-certificate:查看SSL证书是否有效
  64. --no-check-certificate:不检查SSL证书的有效性
  65. --check-hostname:查看SSL证书的hostname是否有效
  66. --no-check-hostname:不检查SSL证书的hostname的有效性
  67. --signature-v2:使用AWS签名版本2代替最新的签名版本
  68. --limit-rate=LIMITRATE:限制上传或者下载速度(单位:bytes/s),支持k, m后缀
  69. --requester-pays:对于操作 ,设置申请方付款标志
  70. -l, --long-listing:产生长列表,与ls联用
  71. --stop-on-error:如果在传输中出现错误,则停止传输
  72. --content-disposition=CONTENT_DISPOSITION:为签名的URL提供Content-Disposition,例如,"inline; filename=myvideo.mp4"
  73. --content-type=CONTENT_TYPE:为签名的URL提供Content-Type,例如,"video/mp4"
  74. -n, --dry-run:只显示应该怎样上传或下载,但实际上并没有做。仍可以进行S3请求得到Bucket列表等信息,只适用于文件传输命令
  75. -s, --ssl:使用HTTPS连接S3
  76. --no-ssl:不使用HTTPS连接S3
<think>好的,我现在要回答用户关于s3cmd和obsutil的问题。首先,我需要确认这两个工具的基本信息,它们的用途以及区别。s3cmd我记得是一个开源的命令行工具,主要用于和Amazon S3兼容的云存储服务进行交互,比如上传、下载文件,管理存储桶等。而obsutil可能是华为云的对象存储服务OBS的命令行工具,应该也有类似的功能,但可能针对华为云做了优化。 接下来,我需要详细比较两者的功能、使用场景、安装配置和适用对象。用户可能需要知道什么时候该用哪个工具,或者两者有什么不同之处。比如,s3cmd支持S3协议,所以可以用于任何兼容S3的服务,而obsutil可能专门为华为云OBS设计,可能有更深入的功能集成。 另外,用户可能关心安装步骤,例如s3cmd是用Python写的,可以通过pip安装,而obsutil可能是一个预编译的二进制文件,需要从华为云官网下载。配置方面,s3cmd需要Access Key和Secret Key,而obsutil也需要类似的认证信息,但可能针对华为云的账户体系。 还要提到两者的优缺点,比如s3cmd的跨平台性和开源特性,但可能在特定云服务上的功能支持不如专用工具;obsutil可能在华为云上性能更好,功能更全面,但可能不支持其他云服务。 需要确保回答结构清晰,分点说明,帮助用户逐步了解这两个工具。同时,要检查LaTeX格式是否正确,比如行内公式用$...$,独立公式用$$...$$,不过这个问题可能不涉及数学公式,但还是要留意用户是否有其他隐藏需求。最后,用中文自然表达,避免技术术语过于晦涩,让用户容易理解。</think>以下是关于`s3cmd`和`obsutil`的详细介绍及对比分析: --- ### 一、s3cmd #### 1. 基本介绍 `s3cmd` 是一个开源的命令行工具,用于与 **Amazon S3** 及兼容S3协议的云存储服务(如阿里云OSS、腾讯云COS等)交互。它支持文件上传、下载、存储桶管理等功能。 #### 2. 核心功能 - **文件操作**:上传 (`put`)、下载 (`get`)、删除 (`del`) 文件。 - **存储桶管理**:创建/删除存储桶 (`mb`/`rb`),设置访问权限 (`setacl`)。 - **批量操作**:支持通配符 `*` 匹配多个文件。 - **同步功能**:通过 `sync` 命令实现本地与云端文件同步。 #### 3. 安装与配置 - **安装**:通过Python包管理器安装: ```bash pip install s3cmd ``` - **配置**:运行 `s3cmd --configure`,输入Access Key、Secret Key及默认存储区域。 #### 4. 适用场景 - 需跨多个S3兼容云平台操作。 - 需要开源工具且对功能扩展有需求。 #### 5. 优缺点 - ✅ 跨平台、兼容性强。 - ❌ 对非S3协议服务支持有限。 --- ### 二、obsutil #### 1. 基本介绍 `obsutil` 是华为云对象存储服务 **OBS** 的官方命令行工具,专为高性能和大规模数据迁移优化。 #### 2. 核心功能 - **高效传输**:支持多线程、断点续传。 - **高级操作**:归档存储类型转换、跨区域复制。 - **数据统计**:提供存储用量分析报告。 - **增量同步**:通过 `sync` 命令仅同步变化文件。 #### 3. 安装与配置 - **安装**:从华为云官网下载对应系统的二进制文件。 - **配置**:通过 `obsutil config` 输入AK/SK和Endpoint信息。 #### 4. 适用场景 - 华为云OBS深度用户。 - 需处理大规模数据迁移或高频操作。 #### 5. 优缺点 - ✅ 对OBS功能支持全面,性能优化。 - ❌ 仅适用于华为云OBS。 --- ### 三、对比总结 | 特性 | s3cmd | obsutil | |---------------------|--------------------------------|-----------------------------| | **适用平台** | 所有S3兼容服务 | 仅华为云OBS | | **安装方式** | Python包管理器 (`pip`) | 官网下载二进制文件 | | **性能优化** | 基础功能 | 多线程、断点续传 | | **高级功能** | 依赖云服务兼容性 | 华为云专属功能(如归档转换)| | **开源** | ✅ | ❌ | --- ### 四、选择建议 - 若使用**多平台S3兼容存储**,选`s3cmd`。 - 若专注**华为云OBS**且需高性能,选`obsutil`。 实际使用时,建议结合具体场景和云服务商特性选择工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

io_py

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值