Skip to content
Jacky Chan edited this page Sep 24, 2012 · 33 revisions

阿里云弹性存储终端控制台

阿里云弹性存储终端控制台(Aliyun OSS Console):在控制台操作Aliyun OSS云端的Bucket和Object。OSS控制台主要涉及: 本地配置,本地仓库和Console控制台。 本地配置保存Aliyun OSS的密钥信息,用户配置等; 本地仓库主要保存本地和Aliyun OSS上的部分文件; OSS控制台就是你看到的这个应用啦。

如何下载安装

  • 检查你的计算机是否已经安装了Java,在控制台执行 java -version,如果成功表示安装,如果没有,执行第二步骤,安装Jdk。
  • 访问 http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载你对应平台的JDK。
  • 下载OSS Console安装包:访问 https://github.com/linux-china/ali-oss-java-cli/downloads 下载对应平台的安装包即可。Windows下载zip包,Mac和Linux请下载tar.gz包
  • 执行解压: Windows用户执行解压目录下的 bin/ali_oss.bat 即可,Mac和Linux用户在控制台执行 sh bin/ali_oss 即可。
  • 参考后续手册,进行Access Token设置。

基本说明

Aliyun OSS是一个云存储的平台,但是还是和我们平时理解的磁盘系统有些不一样,这里我们做一些说明:

  • 名词解释: OSS中存储的文件称之为Object,而文件是指文件系统中的文件,下面的手册都会按照这个术语约定引用
  • Object:OSS中的存储单元,同时包含一些关联的属性,如文件大小、类型、创建和修改时间等等。
  • Bucket: Object桶,负责存储Object,方便你对Object进行归类。理解为Windows不同的磁盘可能牵强点,但是理解为MySQL下的不同database可能最相像
  • 虚拟目录和Object Key:在OSS中是没有目录这个概念的,所有的Object都是以一个key进行唯一标示的,只是你在key中加入斜杠(/)后,在展现的时候处理为目录,方便你浏览 由于OSS Console还需要和本地文件系统打交道,如果下载或同步到本地文件系统,所以我们针对Object key做出一些约定:
    • key为普通字符串,可以包含斜杠(处理为虚拟目录),不要包含一些特殊字符。如“备份目录“,"@#$%^&*()" 这些中文或特殊字符;

    • 由于斜杠(/)担任目录分割的任务,所以key不要以斜杠开头,文件名称也不要以斜杠结尾。如 "/backup"和"/backup/file1/"这样的key虽然可以使用,但是不方便处理和理解;

    • 识别虚拟目录: 在某些操作中,如copy,我们将一个Object移动到另外一个虚拟目录下,这个时候就需要识别一个目录。由于OSS中没有目录概念,所以我们约定以斜杠结尾表示目录,如:

      cp demo/first.jpg  backup/
      

      表示将“demo/first.jpg"Object拷贝到虚拟的"backup/"目录下,那么新的key就是”backup/first.jpg",如果没有斜杠结尾,那么新的key就是"backup”啦。

  • OSS URI: 每一种资源都可以以URI方式进行定位,当然OSS中的文件也不例外。 OSS的URI方式为:oss://bucket_name/xxxx/yyyy/filename.ext,其中bucket_name就是bucket的名称, key为"xxxx/yyyy/filename.ext"。 下面是一些常用的OSS URI:
    • oss://bucket_name 标识bucket的引用
    • oss://bucket_name/backup/ 虚拟目录的引用,前面介绍过,以斜杠结尾表示虚拟目录,不表示真实存在的文件
    • oss://bucket_name/backup/2012-08/demo.jpg 对OSS的object引用

本地文件仓库

文件保存到OSS云端后,但是由于实际的操作需要,我们还需要建立一个本地磁盘的文件仓库(就是一个目录)完成对OSS的各个bucket的映射,这样的目的主要是便于我们的一些操作。如同步,上传和下载等。 本地文件仓库的目录结构如下:

    /home/user1/aliyun_oss/
                        bucket1
                           demo.jpg
                        bucket2
                           backup
                              database1-2012-08-18.sql.tgz

如一个BBS论坛,用户上传了很多的附件,我们可以在后台设置所有的附件都保存到/home/user1/aliyun_oss/bucket1目录下,这样我们可以定时将这些附件同步到OSS进行备份和保存。 同时我们晚上执行mysqldump,将dump文件保存到/home/user1/aliyun_oss/bucket2/backup目录下,同样定时同步到OSS上进行备份和保存。 另外一方面,我们可能需要从OSS同步一些文件进行测试,也需要存放于本地。 所以一个本地的文件仓库,同时和OSS进行映射,会让我们的操作变得非常简单。 在config指令执行完后,OSS Console会自动在本地仓库中创建各个bucket对应的子目录。

注意: 从OSS同步到本地文件仓库时,要提前对文件容量的进行评估。OSS通常用于保存大量的文件,而非个人网盘,所以从云端同步到本地要谨慎,如磁盘容量不够,单个目录下超多文件等问题。

闲扯Object Key

Object Key的命名规范并不是OSS Console要解决的问题,但是出于对Object管理的需要,我们还是要了解一些常用的Object Key命名方法。

  • 时间+随即数:这种方法很简单,就是以“年月日”形成目录,如“12/08/02",然后文件名以随机数+后缀名方式。由于单个目录下的文件数就很少,所以随即算法不用特别强,管理方便。
  • Domain ID+随机数: 基于domain的ID + 随机数,如 "photo_id_random.jpg"。如果你不增加虚拟目录名,一个目录下可能有上百万的文件,如果你不同步到本地目录那没有问题,同步是一个问题。
  • 用户目录:为每一个用户创建一个目录,接下来是用户的内容。如用户相册,可以采用这个策略,如"user_id/album_id/random_key.jpg"这种方式。这种方式管理也比较方便。
  • 完全随机数:如UUID,确保文件不重名。由于文件名没有实际意义,管理有些复杂。

出于保护数据防止他人轻易获得,通常建议object key都要加上随机数方式,虽然object key长了一点,但是还是值得的。在增量备份方面,如果你的key设计合理,如时间或者domain id方式, 都比较容易实现增量备份。

注意: 在OSS Console中,Object Key是可以自动提示的,如 file object_key,如果你的key命名满足特定的规范,按下Tab键后就可以自动补齐,省去你录入较长的object key。

本地文件自动提示

OSS Console不可避免涉及到本地文件路径,如上传和下载等,但是要记住这些文件的路径是比较麻烦的,在OSS Console中,本地的文件路径都是可以代码提示的,你只需要输入部分路径,然后按下tab键 即可,如在linux下输入 ~/ 然后按下tabl键就可以提示用户目录下的文件列表,如下图: 本地文件路径提示

设置Aliyun API Access Key

进入控制台后,第一步要进行的操作就是设置Aliyun API Access Key,然后才能进行其他操作。设置Access Key的命令如下:

config --id yourid --key yourkey --repository /home/user1/aliyun_oss

id和key分别对应Access Key的id和secret。--repository就是我们前面介绍的本地文件仓库,目录如果不存在会自动创建。 获取密钥的步骤很简单,登陆阿里云后,点击用“户中心”,然后选择“安全认证”,URL链接为:http://i.aliyun.com/access_key ,截屏如下: Aliyun API Access Key

Bucket列表

密钥设置完成后,就是列出OSS上的Bucket啦,使用 df 命令即可。bukcet列表信息主要包括:

  • 权限:-- 表示私有(private), R-表示公共读(PublicRead),RW表示公共读写(PublicReadWrite)
  • 创建时间
  • bucket的URI: bucket的地址

创建Bucket

创建bucket很简单,执行:

 create --acl private bucket_name

其中acl的参数可以为 private, R-和RW,分别表示私有、公共读和公共读写,RW请慎重使用。 bucket name的命名规范为 [a-z][a-z0-9-_]{5,15}: 6-16位字符,包含小写字母、数字、中划线和下划线,且以字母开头。

删除Bucket

如果你想删除掉刚刚创建的bucket,执行:

 drop bucket_name

这里注意,一个bucket还包含Object时,你是不能删除的,一定要确保bucket不在包含任何Object,你才可以删除该bucket.

切换Bucket

我们经常进行的操作都是在一个bucket内部完成的,所以我们设计了一个bucket切换机制,切换到某一bucket后,接下来的所有操作都会在bucket下进行,如ls, put, get等操作。 这一机制借鉴于mysql console,你切换到某一数据库下,接下来的操作就在该数据库下啦。 当然Aliyun OSS控制台也支持 OSS URI方式操作,后面会介绍。切换bucket命令如下:

 use bucket_name

该命令执行后,就切换到指定bucket上。你下次再进入Aliyun OSS Console会自动切换到该bucket下。再次执行"df"命令时,控制台会给你当前bucket标示,你可以知道当前在哪个bucket下, 当然更直观的就是动态prompt.

提示: 如果你的bucket名称很长,这样输入会容易出错,你可以使用tab键进行代码提示,补齐bucket名称。

注意: OSS Console使用动态prompt,也就是你选择不同的bucket,prompt会不一样,主要是方便你了解当前选择了哪一个bucket,同时prompt也包含当前虚拟目录信息。

更改虚拟目录

前面我们讲到Object的Key设计,如果你的Key包含虚拟目录结构,那么你一定希望能够象真实操作系统中切换当前工作目录。OSS支持这一特性。在选择某一bucket后, 你可以使用cd命令更改虚拟目录,那么接下来的一些操作,如ls,get等操作,你都可以使用相对的object key,这样简化你的操作。虚拟目录的信息会显示在prompt中,方便你查看。 如果你想取消虚拟目录的选择,直接cd即可,相当于回到bucket起始目录。

  [oss://linux_china]#cd album
  [oss://linux_china]#cd ..

如上述命令,表示进入album虚拟目录,如果你再执行 ls,那么只会列出"album"虚拟目录下的文件和子虚拟目录。如下图: 更改虚拟目录

上传文件

上传文件到bucket中,只需执行put操作,如下:

put --source /home/user1/demo.jpg  demo/

关于目录的处理,请参考目录处理规范,这里以斜杠结尾,表示最终的object key为 object虚拟目录名+本地文件名。非斜杠结尾,直接以输入的路径为key进行保存。 注意: 如果你更改了虚拟目录,则还会加上虚拟目录名。

put会直接覆盖文件,当然你可以使用使用sync命令,这样如果有文件没有改变,则不会上传到OSS。

sync --source /home/user1/backup  backup/

如果你想将本地repository中的bucket目录下的内容全部同步到OSS,则执行:

sync --source /home/user1/repository/bucket_name

下载文件

将OSS上的文件下载到本地目录。 我们前面介绍过本地文件仓库,如果不提供绝对路径,则会下载到本地的文件仓库,如果提供本地文件绝对路径,则会下载到指定的路径下。 典型用法如下:

  • 下载到指定目录: get --dest /home/user1/demo.jpg first/demo.jpg 或者 get --dest /home/user1/demo.jpg oss://bucket_name/first/demo.jpg
  • 下载到本地文件仓库 get first/demo.jpg
  • 模糊下载: get --dest /home/user1/first/ first/* 所有匹配的文件,都会保存在指定的目录下。 如果 是 get first/* 则会同步到到本地文件仓库中。

自动压缩处理(Content-Encoding)

Aliyun OSS目前并不支持自动压缩处理,如你通过浏览器访问OSS Object时,并不会自动进行压缩,而是原样输出内容。当然这不会有什么问题,但是如果你使用OSS提供的CDN服务访问静态文本文件, 那么带宽浪费还是巨大的,如访问JavaScript和CSS文件。这个时候就需要进行压缩处理,这样网络传输速度快,同时带宽费用你就可以节省下来。具体的步骤就是上传前先gzip压缩, 然后设置"Content-Encoding"的值为"gzip",最后上传压缩后内容到OSS上,这样浏览器访问的就是压缩后的内容,同时会自行解压。 压缩处理在OSS Console中非常简单,只要加上--zip 标识即可,如:

put --zip --source jquery.js jquery-1.8.1.js
sync --zip --source /home/user1/repository/bucket_name

在使用get命令下载object到本地时,OSS Console会自动根据"Content-Encoding"进行解压缩,你也不用担心。

注意: 对于二进制文件,如图片、安装包等,你不需要进行压缩处理,这些格式已经压缩的很好啦,自动压缩处理效果不大。

设置Object属性

某些情况下,我们需要给Object添加一些属性,如HTTP的Cache-Control,可以设置浏览器的缓存;或者自定义的Tags属性,可以方便了解Object的特性。这个时候我们需要使用set命令,如下:

 set --key Cache-Control --value max-age=604800 cms/demo2.png
 set --key tags --value "People Woman" cms/demo2.png

这样就可以为Object添加属性啦。如果你要检查Object是否被更新啦,你可以增加一个MD5的属性。 如果你的value包含空,请使用双引号。 注意: 由于key的值有一些固定值,当你不知道如何输入,请按下tab键会自动提示。

Bucket下的常用操作

下面的命令是一些常用的操作,和文件系统的类似,这里做一下简要说明:

  • ls: 显示bucket或者虚拟目录下的object列表,支持前缀通配符(其他方式不支持),如ls demo* 表示显示所有以demo开头的Object,每次最多显示100条记录。
  • file: 显示某一object的详情,如 file demo.jpg,则显示该object详细信息
  • cat:显示Object内容,这里请确保你的文件为文本类型
  • open:调用浏览器打开该Object
  • rm: 删除Object,支持模糊匹配,和ls命令一样,如 rm demo.jpg, rm oss://bucket_name/demo.jpg 或者 rm backup/demo*
  • cp: copy Object,如 cp demo.jpg second.jpg
  • mv: 移动Object,如 mv demo.jpg second.jpg
  • set: 设置Object属性, 如 set --key Content-Type --value image/jpeg demo.jpg 可以添加自定义属性,如 set --key tags --value people demo.jpg
  • cd: 更改OSS的虚拟目录。如:cd path , 然后调用 ls,则只会显示指定目录前缀的object。 如果想要取消path选择,执行 cd 回车即可。
  • pwd: 显示当前工作的虚拟目录信息。因为cd会更改当前工作的虚拟目录,所以我们有时需要调用该命令显示当前工作的虚拟目录信息。

OSS Console命令参数名称

OSS Console中命令需要使用到各种参数名称,这些参数通常都是约定好的,记忆起来并不麻烦,这里做一个说明:

  • --bucket: 选择bucket
  • --source: 设置本地文件路径或者目录路径
  • --object: object key或者uri
  • --key: key名称
  • --value: key对应的value
  • --o 或者 --output: 输出的文件路径
  • --dest: 目标路径,通常是OSS上的object key或者uri、object虚拟目录等。
  • --zip: 启动压缩

OSS Console颜色列表

整个OSS Console主要涉及四种颜色:绿色、白色、黄色和红色。

  • 绿色: Spring Shell的默认颜色,显示命令返回的字符串,通常是内容,提示消息等。
  • 白色: Console在操作中输出的文本,如批量上传、下载和删除等。
  • 黄色: 用于提示,如提示用户选择bukcet,设置必需参数等。
  • 红色: 系统中的错误信息,如和Aliyun OSS通讯异常、非法操作等。

OSS Console命令脚本

在实际的使用中,我们有时需要通过命令行方式来执行一些命令,如在凌晨3:00执行本地磁盘到OSS的上传,这个时候我们需要创建一个脚本 文件,然后将我们需要执行的命令一行行写出来即可。如有一个脚本文件为sync2oss.txt,内容如下:

  use linux_china
  put --source /home/user1/ali_oss/linux_china/demo demo/

最后我们只需要执行以下命令即可:

  ali_oss --cmdfile /home/user1/sync2oss.txt

你可以在Shell脚本或者cron中使用OSS Console执行命令脚本。