1. 程式人生 > >linux下的S3客戶端工具

linux下的S3客戶端工具

S3是線上服務,預設的基於web的客戶端對於一般應用已經足夠強大,也許對於朋友來說也許未然,例如希望脫離瀏覽器使用單獨的桌面客戶端管理工具,,又或者使用命令列和其他script進行整合操作的需求等等。

這裡簡單說一下在linux底下可以使用的兩款客戶端工具,dragonDisk 和 S3cmd。

DragonDisk

實際上,DragonDisk不僅僅是一款S3的管理工具,它還能用來管理其他的線上儲存服務,例如Google 雲端儲存和Cloudian等。你可以通過這個工具備份,共享和組織你的遠端資源,介面看著象windows下的explore和total commander,因此非常的方便易用。而且DragonDisk是一款自由軟體,沒有開源,你可以在他們的Licence範圍內隨意的使用。同時,它還是一款跨平臺的軟體,支援的系統包括Windos, Linux和Mac OS X,在linux下,還發布RPM格式和DEB格式的封包。

DragonDisk其實還有一個姊妹產品dgsync,這是一個命令列的DragonDisk,我沒試用過,如果想把桌面工具和命令列工具統一起來的朋友,可以試用試用。

安裝

# 請選擇適合自己系統的版本下載, 我的是ub10.04 64位,因此下載

wget http://download.dragondisk.com/dragondisk_1.0.0-0ubuntu_amd64.deb
dpkg -i dragondisk_1.0.0-0ubuntu_amd64.deb

安裝好後 internat > DragonDisk可以啟動,預設介面如下

配置

接下來要把你的aws帳號資訊配置進來。當然,不需要提供明文內容,註冊完aws帳號後,系統已經為你自動生成了一對密文帳號/密碼對。下面請訪問aws.amazon.com,登入後進入”Security Credentials”頁面,如下:

進入後,找到Access Credentials標題,把其中的Access Key ID和Secret Access Key複製下來

  1. 複製Access Key,這可以比作帳號名
  2. 點選show
  3. 複製彈出框的Secret Access Key,可以比作密碼

回到DragonDisk的客戶端,選擇File > Accounts… 項

選擇New進行新建

  1. 使用Amazon S3的話,預設即可
  2. 自定義一個本地帳號名,方便自己記憶
  3. 註釋
  4. 填入剛剛copy下來的Access Key
  5. 填入剛剛copy的Secret Access Key
  6. 儲存

現在回到DragonDisk主介面,拉開右邊“Root”那個下拉框,可以看到一個帶有S3小圖示的專案“sunnyplay”了吧!選擇它,即可立刻連線到S3的伺服器,進行遠端操作,進行新增/刪除桶、新增/刪除資料夾和下載檔案等等。

剩下的,就不用再說了吧,就是和操作total commander一樣。如果你想上傳檔案,在左邊那個“Root”下選好你的分割槽,然後選擇好相應的檔案,拖拉到右邊的S3網路空間,即可。下載亦然,倒過來拖拉即可。如果你想對某份檔案或目錄設定許可權,可以使用右鍵,選擇properties既可以看到。

這款工具很方便,基本不用學習就能上手。支援多個S3帳號,而跨平臺的特性是最好讓我選擇它的原因。

S3cmd

如果在debian/ubuntu環境下,可以使用apt的方式安裝。新版本的debian/ubuntu已經收錄了S3cmd。我本人是使用github的方式安裝

git clone git://github.com/s3tools/s3cmd.git

配置

為S3cmd配置S3的帳號資訊,在終端輸入 s3cmd –configure 指令

$ s3cmd --configure       # 互動式提示,讓你輸入你的Access Key和Secret Key,以及一些安全設定

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.

Access key and Secret key are your identifiers for Amazon S3
Access Key: 這裡輸入你的Key
Secret Key: 這裡是密碼

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password: 如果需要GPG加密你的key資訊,請輸入密碼
Path to GPG program [/usr/bin/gpg]: GPG工具的路徑

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP and can't be used if you're behind a proxy
Use HTTPS protocol [No]: 不需要https則回車

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't conect to S3 directly
HTTP Proxy server name: 不需要http代理則回車

如果成功,會出現下面的提示。配置資訊會儲存在~/.s3cfg

Success. Your access key and secret key worked fine  
Save settings? [y/N] y
Configuration saved to '~/.s3cfg'

使用

s3cmd命令中,定義了一個訪問物件的路徑方式,很簡單,是一種類似URL的定址方式,型如 s3://BUCKET/OBJECT。不管你是要建立桶或目錄,或是列出物件,都需要遵循。

S3的基本命令

s3cmd mb s3://BUCKET
      建立桶

s3cmd rb s3://BUCKET
      刪除桶

s3cmd ls [s3://BUCKET[/PREFIX]]
      列出物件或桶

s3cmd la
      列出所有桶中的所有物件

s3cmd put FILE [FILE...] s3://BUCKET[/PREFIX]
      把檔案(s)上傳到桶

s3cmd get s3://BUCKET/OBJECT  LOCAL_FILE
      從桶中下載某個檔案到本地

s3cmd del s3://BUCKET/OBJECT
      刪除桶中的某個檔案

s3cmd  sync  LOCAL_DIR  s3://BUCKET[/PREFIX]  or
s3cmd  sync  s3://BUCKET[/PREFIX] LOCAL_DIR
      同步本地目錄和桶中的目錄

s3cmd du [s3://BUCKET[/PREFIX]]
      統計某個桶中的空間佔用量

s3cmd info s3://BUCKET[/OBJECT]
      返回某個桶或物件的描述資訊

s3cmd cp s3://BUCKET1/OBJECT1 s3://BUCKET2[/OBJECT2]
      複製物件

s3cmd mv s3://BUCKET1/OBJECT1 s3://BUCKET2[/OBJECT2]
      移動物件

s3cmd setacl [--acl-private | --acl-public] s3://BUCKET[/OBJECT]
      為某個桶或物件設定訪問許可權 

s3cmd accesslog s3://BUCKET
      開啟/禁用桶的訪問日誌記錄 

s3cmd sign STRING-TO-SIGN
      Sign arbitrary string using the secret key

s3cmd fixbucket s3://BUCKET[/PREFIX]
      修改桶中不可用的檔名

列出帳號

資訊如果是新建的帳號,返回為空

$ s3cmd ls
2012-05-06 09:05  s3://bu.0506
2012-05-06 10:55  s3://sunnyplay

$ s3cmd ls s3://bu.0506/
2012-05-06 09:06         1550   s3://bu.0506/vim.txt

建立一個新桶

桶的名字只能使用字母數字、點“.”以及中劃線“-”

$ s3cmd mb s3://SP-project1 Bucket 's3://SP-project1/' created 

上傳檔案到桶

$ s3cmd put NEWS.txt LICENSE.txt s3://SP-project1
LICENSE -> s3://SP-project1/LICENSE.txt  [1 of 2]
 18092 of 18092   100% in    1s    16.14 kB/s  done
NEWS -> s3://SP-project1/NEWS.txt  [2 of 2]
 7651 of 7651   100% in    0s    10.98 kB/s  done

$ s3cmd ls s3://SP-project1
2012-05-14 11:18     18092   s3://SP-project1/LICENSE.txt
2012-05-14 11:18      7651   s3://SP-project1/NEWS.txt

設定訪問許可權

預設的這個桶,只有你才能訪問到,不過你可以通過設定acl,把這個檔案開放給所有人看/下載:

$ s3cmd setacl --acl-public s3://SP-project1/NEWS.txt
s3://SP-project1/NEWS.txt: ACL set to Public  [1 of 1]

# 作為選擇,你也可以上傳時設定
$ s3cmd put --acl-public --guess-mime-type NEWS.txt s3://SP-project1/NEWS.txt

別人只需要輸入

http://s3.amazonaws.com/SP-project1/NEWS.txt

就可以訪問/下載這個檔案

刪除物件和桶

$ s3cmd del s3://SP-project1/LICENSE.txt s3://SP-project1/NEWS.txt
File s3://SP-project1/LICENSE.txt deleted
File s3://SP-project1/NEWS.txt deleted

$ s3cmd rb s3://SP-project1    # rb只能刪除空的桶,如果桶不為空,返回ERROR
Bucket 'SP-project1' removed

更換操作區域(Region)

# 預設是在us-standard中,使用--bucket-location則可以更換,例如 us-west-1 代表 California

$ s3cmd --bucket-location ls
2012-05-06 10:05  s3://bu.west.05