使用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

 

个结果匹配 ""

    无结果匹配 ""