-
Notifications
You must be signed in to change notification settings - Fork 2
Home
阿里云弹性存储终端控制台(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的命名规范并不是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,然后才能进行其他操作。设置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 ,截屏如下:
密钥设置完成后,就是列出OSS上的Bucket啦,使用 df 命令即可。bukcet列表信息主要包括:
- 权限:-- 表示私有(private), R-表示公共读(PublicRead),RW表示公共读写(PublicReadWrite)
- 创建时间
- bucket的URI: bucket的地址
创建bucket很简单,执行:
create --acl private bucket_name
其中acl的参数可以为 private, R-和RW,分别表示私有、公共读和公共读写,RW请慎重使用。 bucket name的命名规范为 [a-z][a-z0-9-_]{5,15}: 6-16位字符,包含小写字母、数字、中划线和下划线,且以字母开头。
如果你想删除掉刚刚创建的bucket,执行:
drop bucket_name
这里注意,一个bucket还包含Object时,你是不能删除的,一定要确保bucket不在包含任何Object,你才可以删除该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/* 则会同步到到本地文件仓库中。
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添加一些属性,如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键会自动提示。
下面的命令是一些常用的操作,和文件系统的类似,这里做一下简要说明:
- 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中命令需要使用到各种参数名称,这些参数通常都是约定好的,记忆起来并不麻烦,这里做一个说明:
- --bucket: 选择bucket
- --source: 设置本地文件路径或者目录路径
- --object: object key或者uri
- --key: key名称
- --value: key对应的value
- --o 或者 --output: 输出的文件路径
- --dest: 目标路径,通常是OSS上的object key或者uri、object虚拟目录等。
- --zip: 启动压缩
整个OSS Console主要涉及四种颜色:绿色、白色、黄色和红色。
- 绿色: Spring Shell的默认颜色,显示命令返回的字符串,通常是内容,提示消息等。
- 白色: Console在操作中输出的文本,如批量上传、下载和删除等。
- 黄色: 用于提示,如提示用户选择bukcet,设置必需参数等。
- 红色: 系统中的错误信息,如和Aliyun OSS通讯异常、非法操作等。
在实际的使用中,我们有时需要通过命令行方式来执行一些命令,如在凌晨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执行命令脚本。