如何使用Linux命令行访问Amazon S3云存储?

attilax 2014-04-01

Amazon S3 是Amazon网落服务(Amazon Web Services,AWS)提供的云存储。Amazon S3在众多第三方已经开发完成的商业服务或客户端软件之上,发布了一组网络服务接口。本教程描述怎样用Linux命令行访问Amazon S3云存储。

最著名的Amazon S3命令行客户端是用python写的s3cmd。作为一个简单的AWS S3命令行工具,s3cmd的思想是用于运行脚本化的cron任务,比如每天的备份工作。

在Linux上安装s3cmd

在Ubuntu或者Debian上安装s3cm

$ sudo apt-get install s3cmd 

在Fedora上安装s3cmd

$ sudo yum install s3cmd 

在CentOS或者RHEL上安装s3cm

$ s3cmd put –acl-public 4.png s3://dev99 


4.png -> s3://dev99/4.png [1 of 1] 


30778 of 30778 100% in 8s 3.34 kB/s done 

先从官方站点上下载rpm包,然后手工安装。64位CentOS或RHEL 6,用以下命令:

$ sudo rpm -ivh s3cmd-1.0.0-4.1.x86_64.rpm 

配置s3cmd

第一次运行s3cmd需要运行下面的命令做配置:

$ s3cmd –configure 

它将会问你一系列问题:

  • AWS S3的访问密钥和安全密钥
  • 对AWS S3双向传输的加密密码和加密数据
  • 为加密数据设定GPG程序的路径(例如,/usr/bin/gpg)
  • 是否使用https协议
  • 如果使用http代理,设定名字和端口

配置将以保存普通文本格式保存在 ~/.s3cfg.

s3cmd的基本用法

在你的账户中列出所有现有的bucket:

$ s3cmd ls 


2011-05-28 22:30 s3://mybucket1 


2011-05-29 00:14 s3://mybucket2 

建立新的bucket:

$ s3cmd mb s3://dev99 


Bucket ’s3://dev99/’ created 

上传文件到现有的bucket:

$ s3cmd put 1.png 2.png 3.png s3://dev99 


1.png -> s3://dev99/1.png [1 of 3] 


26261 of 26261 100% in 5s 4.33 kB/s done 


2.png -> s3://dev99/2.png [2 of 3] 


201430 of 201430 100% in 2s 98.05 kB/s done 


3.png -> s3://dev99/3.png [3 of 3] 


46630 of 46630 100% in 0s 56.62 kB/s done 

上传文件的默认访问权限是私有的(private),就是只有你自己可以访问,使用正确的访问和安全密码即可。

上传公开访问权限的文件到现有bucket:

$ s3cmd put --acl-public 4.png s3://dev99 


4.png -> s3://dev99/4.png  [1 of 1] 


30778 of 30778   100% in    8s     3.34 kB/s  done 


Public URL of the object is: http://dev99.s3.amazonaws.com/4.png 

如果上传的文件授予公开访问权限,任何人在浏览器中都可以通过http://dev99.s3.amazonaws.com/4.png 访问。

查看一个现有bucket的内容:

$ s3cmd ls s3://dev99 


2013-06-02 02:52 26261 s3://dev99/1.png 


2013-06-02 02:52 201430 s3://dev99/2.png 


2013-06-02 02:52 46630 s3://dev99/3.png 


2013-06-02 02:56 30778 s3://dev99/4.png 

下载现有bucket包含的文件(例如所有的.png文件):

$ s3cmd get s3://dev99/*.png 


s3://dev99/1.png -> ./1.png [1 of 4] 


26261 of 26261 100% in 0s 39.39 kB/s done 


s3://dev99/2.png -> ./2.png [2 of 4] 


201430 of 201430 100% in 7s 24.64 kB/s done 


s3://dev99/3.png -> ./3.png [3 of 4] 


46630 of 46630 100% in 1s 39.34 kB/s done 


s3://dev99/4.png -> ./4.png [4 of 4] 


30778 of 30778 100% in 0s 97.01 kB/s done 

删除现有bucket中的文件:

$ s3cmd del s3://dev99/*.png 


File s3://dev99/1.png deleted 


File s3://dev99/2.png deleted 


File s3://dev99/3.png deleted 


File s3://dev99/4.png deleted 

获取现有bucket的信息,包括存储位置和访问控制列表(ACL):

$ s3cmd info s3://dev99 


s3://dev99/ (bucket): 


Location: us-east-1 


ACL: dan.nanni: READ 


ACL: dan.nanni: WRITE 


ACL: dan.nanni: READ_ACP 


ACL: dan.nanni: WRITE_ACP 

在上传到现有的bucket之前,加密文件:

$ s3cmd -e put encrypt.png s3://dev99 


/tmp/tmpfile-pzT1zV3kLZlxDwqA0kwy -> s3://dev99/encrypt.png [1 of 1] 


196890 of 196890 100% in 1s 99.51 kB/s done 

当用s3cmd下载一个加密过的文件时,它会自动检测加密并在下载过程解密,因此下载和访问加密文件时,就像通常所做的一样:

$ s3cmd get s3://dev99/encrypt.png 


s3://dev99/encrypt.png -> ./encrypt.png [1 of 1] 


196890 of 196890 100% in 1s 131.29 kB/s done 

删除现有的bucket:

$ s3cmd rb s3://dev99 


Bucket ’s3://dev99/’ removed 

注意,你不能删除一个非空的bucket。

相关推荐