使用cli管理对象存储
使用CLI管理对象存储
本节介绍如何使用CLI管理对象存储。
在使用CLI管理对象存储前,需完成CLI的安装与配置。安装请参阅《安装CLI管理工具》,配置请参阅《配置CLI管理工具》。
1. 命令结构
使用CLI管理对象存储的命令结构如下:
1.1. s3
ycloud s3 <command> [--options]
其中command为必选项,--options为可选项。 ycloud s3命令支持以下可选项:
可选项 | 含义 | 适用的命令 |
---|---|---|
--recursive | 递归操作,如列出、删除目录时同时列出、删除子目录下Object。支持简写-r | ls、cp、mv、rm、sync、restore |
--include | 包含操作,用于筛选时包含符合条件的Object | cp、mv、rm、sync |
--exclude | 排除操作,用于筛选时排除符合条件的Object | cp、mv、rm、sync |
--acl | 访问控制,用于设定Object或目录的访问权限,接受private和public-read值 | cp、mv、sync |
--delete | 删除内容,用于删除sync操作目标中比源中多的内容 | sync |
--resume | 断点续传 1、上传文件时,当大文件分片上传中断后,重新上传时无需重复上传已有的分片 2、下载文件时,当大文件range下载中断后,重新下载时无需重复下载已有的range |
cp |
--days | 1.用于归档对象取回时指定解冻状态持续天数 | restore |
--limited-num | 设定列举对象时返回结果的最大个数。您可以使用此项结合marker对返回结果进行分页展示。 | ls |
--marker | 列举名称字母序排在marker之后的对象 | ls |
1.2. s3api
ycloud s3api <command> [--options]
其中command为必选项,--options为可选项。
2. 管理Bucket
您可以使用ycloud s3命令方便地管理Bucket,包括创建、列出和删除Bucket。
2.1. 创建Bucket
使用mb命令可以创建新的Bucket。Bucket名称须在所属区域下唯一,且只能包含小写字母、数字和短横线,只能以字母开头,并以字母或数字结尾,Bucket名称长度需在3-63字符内。
$ ycloud s3 mb s3://my-bucket
make_bucket: my-bucket
2.2. 列出Bucket
使用ls命令可以列出所属项目在该区域下的Bucket。
$ ycloud s3 ls
2019-3-11 17:08:50 my-bucket
2019-3-14 14:55:44 my-bucket2
2.3. 删除Bucket
使用rb命令可以删除指定的Bucket。
$ ycloud s3 rb s3://my-bucket
remove_bucket: my-bucket
默认情况下,只能删除空的Bucket。要删除非空Bucket,请添加 --force 选项,此选项会同时将Bucket内的所有资源清空。
$ ycloud s3 rb s3://my-bucket --force
delete: s3://my-bucket/MyFile.txt
delete: s3://my-bucket/path/MyFile.txt
remove_bucket: my-bucket
3. 管理Object
您可以使用ycloud s3命令方便地管理Bucket中的Object,包括列出、上传、复制(下载)和同步Object操作。
注意
如果文件或Object大于8M,所有涉及向Bucket上传的命令(cp、mv 和 sync)都会自动执行分段上传。当上传或下载路径中有同名的文件,会将同名的文件覆盖。
3.1. ls命令
使用ls命令列出指定Bucket中的所有Object。
$ ycloud s3 ls s3://my-bucket
PRE path/
2019-3-04 19:05:48 3 MyFile1.txt
使用ls命令时,您可以通过在命令中使用前缀来列出该路径下的所有内容,但不会展开子目录。
$ ycloud s3 ls s3://my-bucket/path/
2019-3-06 18:59:32 3 MyFile2.txt
ls 命令接受 --recursive 选项,该选项会遍历目录树,包括所有子目录。
$ ycloud s3 ls s3://my-bucket/ --recursive
2019-3-06 17:39:32 3 path/MyFile2.txt
2019-3-06 17:26:43 3 MyFile1.txt
3.2. cp命令
使用cp命令可以上传(将本地文件或目录复制到Bucket)、下载(将Object复制到本地),以及复制(将Object复制到Bucket)。
上传:将本地文件或目录复制到Bucket
$ ycloud s3 cp MyFile.txt s3://my-bucket/path/
upload: .\MyFile.txt to s3://my-bucket/path/MyFile.txt
大文件上传支持断点续传
$ ycloud s3 cp MyFile.txt s3://my-bucket/path/ --resume
upload: .\MyFile.txt to s3://my-bucket/path/MyFile.txt
下载:将Object复制到本地
$ ycloud s3 cp s3://my-bucket/MyFile.txt MyFile.txt.bak
download: s3://my-bucket/MyFile.txt to .\MyFile.txt.bak
大文件下载支持断点续传
$ ycloud s3 cp s3://my-bucket/MyFile.txt MyFile.txt.bak --resume
download: s3://my-bucket/MyFile.txt to .\MyFile.txt.bak
复制:将Object复制到Bucket
$ ycloud s3 cp s3://my-bucket/MyFile.txt s3://my-bucket/path/MyFile.txt
copy:s3://my-bucket/MyFile.txt to s3://my-bucket/path/MyFile.txt
$ ycloud s3 cp s3://my-bucket/MyFile.txt s3://my-bucket/path/File1.txt
copy:s3://my-bucket/MyFile.txt to s3://my-bucket/path/File1.txt
上传、下载和复制均可对文件或Object重命名。
另外,cp命令接受一些可选项实现特有的功能。
使用 --recursive 选项,该选项会遍历目录树,允许直接复制目录或Bucket。
$ ycloud s3 cp . s3://my-bucket --recursive
upload: .\MyFile.txt.bak to s3://my-bucket/MyFile.txt.bak
upload: .\MyFile.txt to s3://my-bucket/MyFile.txt
使用 --acl 选项可设置复制到Bucket的Object读写权限:
$ ycloud s3 cp MyFile.txt s3://my-bucket --acl public-read
upload: .\MyFile.txt to s3://my-bucket/MyFile.txt
3.3. mv命令
使用mv命令可将本地文件或Bucket中的Object移动到本地或Bucket。
$ ycloud s3 mv s3://my-bucket/MyFile.txt .
move: s3://my-bucket/MyFile.txt to .\MyFile.txt
$ ycloud s3 mv s3://my-bucket/MyFile.txt.bak s3://my-bucket/MyFile.txt
move: s3://my-bucket/MyFile.txt.bak to s3://my-bucket/MyFile.txt
使用 --recursive 选项,可将本地目录或Bucket中的目录移动到Bucket。
$ ycloud s3 mv . s3://my-bucket
move failed: .\ to s3://my-bucket Parameter validation failed:
Invalid length for parameter Key, value: 0, valid range: 1-inf
$ ycloud s3 mv . s3://my-bucket --recursive
upload: .\MyFile.txt.bak to s3://my-bucket/MyFile.txt.bak
upload: .\MyFile.txt to s3://my-bucket/MyFile.txt
使用 --acl 选项可以指定移动后的操作Object的读写权限。
$ ycloud s3 mv MyFile.txt s3://my-bucket --acl public-read
move: .\MyFile.txt to s3://my-bucket/MyFile.txt
3.4. rm命令
使用rm命令可删除Bucket中的Object。如需删除Bucket或目录,请使用 --recursive 选项。
$ ycloud s3 rm s3://my-bucket/path/MyFile.txt
delete: s3://my-bucket/path/MyFile.txt
$ ycloud s3 rm s3://my-bucket/path --recursive
3.5. sync命令
sync命令使用如下语法:
ycloud s3 sync <source> <target> [--options]
可能的源-目标组合有:
本地文件系统到Bucket
Bucket到本地文件系统
Bucket到Bucket
下面的示例将当前目录与Bucket中目录的内容同步。sync将更新与目标中同名的具有不同修改时间的任何文件。
请注意,此操作也会把当前目录下的子目录及其内容递归同步到Bucket中的目录。
$ ycloud s3 sync . s3://my-bucket/path
upload: MySubdirectory/MyFile3.txt to s3://my-bucket/path/MySubdirectory/MyFile3.txt
upload: MyFile2.txt to s3://my-bucket/path/MyFile2.txt
upload: MyFile1.txt to s3://my-bucket/path/MyFile1.txt
通常,sync仅在源和目标之间复制缺失或过时的文件或Object。当目标中存在源中不存在的文件或Object时,s3 sync并不会删除这些文件或Object。您可以使用 --delete 选项来从目标中删除源中不存在的文件。
下面的示例对上一示例进行了扩展,展示其工作方式。
// Delete local file
$ rm ./MyFile1.txt
// Attempt to sync without --delete option - nothing happens
$ ycloud s3 sync . s3://my-bucket/path
// Sync with deletion,object will be deleted from bucket
$ ycloud s3 sync . s3://my-bucket/path --delete
delete: s3://my-bucket/path/MyFile1.txt
// Delete object from bucket
$ ycloud s3 rm s3://my-bucket/path/MySubdirectory/MyFile3.txt
delete: s3://my-bucket/path/MySubdirectory/MyFile3.txt
// Sync with deletion,local file will be deleted
$ ycloud s3 sync s3://my-bucket/path . --delete
delete: MySubdirectory\MyFile3.txt
可以使用 --exclude 和 --include 选项来筛选要在同步操作期间复制的文件或Object。默认情况下,指定目录中的所有项都包含将被同步。使用 --exclude 选项可以排除不需要的文件或Object。仅当需要指定 --exclude 选项的例外时,才需要使用 --include。这些选项按指定顺序应用,如下例所示。
// Local directory contains 4 files
$ ls
MyFile1.txt
MyFile2.rtf
MyFile88.txt
MyFile3.txt
// Sync local files to bucket, excluding *.txt files
$ ycloud s3 sync . s3://my-bucket/path --exclude *.txt
upload: MyFile2.rtf to s3://my-bucket/path/MyFile2.rtf
// Sync local files to bucket, excluding *.txt files but including MyFile1.txt and MyFile3.txt
$ ycloud s3 sync . s3://my-bucket/path --exclude *.txt --include MyFile?.txt
upload: MyFile1.txt to s3://my-bucket/path/MyFile1.txt
upload: MyFile2.rtf to s3://my-bucket/path/MyFile2.rtf
upload: MyFile3.txt to s3://my-bucket/path/MyFile3.txt
// Sync local files to bucket, excluding *.txt files but including MyFile3.txt
$ ycloud s3 sync . s3://my-bucket/path --exclude *.txt --include MyFile?.txt --exclude MyFile1.txt
upload: MyFile3.txt to s3://my-bucket/path/MyFile3.txt
--exclude 和 --include 选项也可以筛选要在sync操作(使用 --delete 选项)期间删除的文件或Object。在这种情况下,参数必须指定要在目标中包含或排除在删除操作中的文件或Object。
// Assume local directory and s3://my-bucket/path currently in sync and each contains 4 files
$ ls
MyFile1.txt
MyFile2.rtf
MyFile88.txt
MyFile3.txt
// Delete local *.txt files
$ rm *.txt
// Sync with deletion, excluding files that match a pattern. MyFile88.txt is deleted, while remote MyFile1.txt and MyFile3.txt is not.
$ ycloud s3 sync . s3://my-bucket/path --delete --exclude MyFile?.txt
delete: s3://my-bucket/path/MyFile88.txt
// Delete MyFile2.rtf
$ ycloud s3 rm s3://my-bucket/path/MyFile2.rtf
// Sync with deletion, excluding MyFile2.rtf , local file will not be deleted
$ ycloud s3 sync s3://my-bucket/path . --delete --exclude MyFile2.rtf
download: s3://my-bucket/path/MyFile1.txt to MyFile1.txt
download: s3://my-bucket/path/MyFile3.txt to MyFile3.txt
// Sync with deletion, local copy of MyFile2.rtf will be deleted
$ ycloud s3 sync s3://my-bucket/path . --delete
delete: MyFile2.rtf
使用 --acl 选项可以对同步到Bucket中的Object设置访问权限。
$ ycloud s3 sync . s3://my-bucket/path --acl public-read
3.6. restore命令
使用restore命令可取回归档Bucket对象。如需取回整个Bucket或目录,请使用 --recursive 选项。
$ ycloud s3 restore s3://my-bucket/MyFile.txt
MyFile.txt have submit to restore
$ ycloud s3 restore s3://my-bucket/ --recursive --days 2
10 objects have submit to restore
4. 管理lifecycle
您可以使用ycloud s3api命令方便地管理Bucket中的lifecycle,包括创建、查看、和删除操作。
4.1. 创建lifecycle
使用put-bucket-lifecycle-configuration命令可以创建bucket lifecycle。
$ ycloud s3api put-bucket-lifecycle-configuration --bucket my-bucket --lifecycle-configuration /home/my_lifecycle.json
lifecycle-configuration 指定本地配置生命周期规则的本地文件名称,文件内容参考如下:
- 匹配整个bucket示例
{ "rules": [ { "status": "Enabled", "expirationInDays": 1, "filter": { "predicate": { "prefix": "" } }, "abortIncompleteMultipartUpload": { "daysAfterInitiation": 6 } } ] }
- 按前缀匹配示例
{ "rules":[ { "status":"Enabled", "filter":{ "predicate":{ "prefix":"a/" } }, "expirationInDays":1 }, { "status":"Enabled", "expirationInDays":1, "filter":{ "predicate":{ "prefix":"b/" } }, "abortIncompleteMultipartUpload":{ "daysAfterInitiation":1 } } ] }
- 标准Bucket的对象向归档Buckt转换,如下所示:标准存储文件在7 天后转换为归档存储类型,目标Bucket为Bucket1,文件覆盖方式为全覆盖
{ "rules":[ { "status":"Enabled", "filter":{ "predicate":{ "prefix":"a/" } }, "transitions":[ { "days":7, "destinationBucketName":"Bucket1", "policy":"overwrite" } ] } ] }
- expiration_in_days 文件保留天数取值范围 1-1825
- days_after_initiation 碎片保留天数取值范围 1-7
- prefix 前缀不可以包含 #$%&*<>{}[]'"|;@=:+,?^\
- days 解冻数据保留天数1-7
- poliy 覆盖规则 overwrite、dup-rename、dup-skip
4.2. 查看lifecycle
使用get-bucket-lifecycle-configuration命令可以查看bucket lifecycle。
$ ycloud s3api get-bucket-lifecycle-configuration --bucket my-bucket
4.3. 删除lifecycle
使用delete-bucket-lifecycle命令可以删除bucket lifecycle。
$ ycloud s3api delete-bucket-lifecycle --bucket my-bucket