跳至主要内容

[MinIO] Minio Client CLI (mc)

MinIO Client (mc) 是用來操作 MinIO 或其他 S3 相容物件儲存服務的命令列工具。

前置設定

確認 mc 的 image 可以使用:

# 確認 minio 的 image 可以使用
docker run --rm <INTERNAL_REGISTRY>/minio/mc:latest --help

建立 minio alias:

# 建立 minio alias
# MINIO 的設定檔會被保留在 `~/.mc` 資料夾中。
docker run --rm -it \
-v ~/.mc:/root/.mc \
<INTERNAL_REGISTRY>/minio/mc:latest alias set <YOUR_ALIAS> \
<MINIO_ENDPOINT_URL> \
<YOUR_ACCESS_KEY> \
<YOUR_SECRET_KEY>

做成 Bash Alias:

# ~/.zshrc
alias mc='docker run --rm -it \
-v ~/.mc:/root/.mc \
-v "$PWD":/work \
-w /work \
<INTERNAL_REGISTRY>/minio/mc:latest'
提示

上面的 alias 透過 -v "$PWD":/work 把「目前所在的目錄」掛載到容器內的 /work,並用 -w /work 設為工作目錄。因此後續指令中凡是 /work/xxx 指的就是本機目前目錄下的檔案。

基本 mc 指令

設定成 Bash Alias 後,就可以使用:

$ mc alias list # 檢視所有 alias

$ mc ls <YOUR_ALIAS> # 列出所有 bucket
$ mc ls <YOUR_ALIAS>/<YOUR_BUCKET> # 列出所有 object
$ mc ls --recursive <YOUR_ALIAS>/<YOUR_BUCKET> # 遞迴列出所有 object
$ mc du <YOUR_ALIAS>/<YOUR_BUCKET> # 檢視 bucket(或 prefix)的容量大小

# 建立/刪除 bucket
$ mc mb <YOUR_ALIAS>/<YOUR_BUCKET> # make bucket
$ mc rb [--force] <YOUR_ALIAS>/<YOUR_BUCKET> # remove bucket(--force 可刪除非空的 bucket)

# 上傳
$ mc cp /work/example.txt <YOUR_ALIAS>/<YOUR_BUCKET>/example.txt

# 下載(把 source / target 對調即可)
$ mc cp <YOUR_ALIAS>/<YOUR_BUCKET>/example.txt /work/example.txt

# 複製整個資料夾需要加上 --recursive
$ mc cp --recursive /work/local-folder <YOUR_ALIAS>/<YOUR_BUCKET>/remote-folder

# 同步資料夾
# mc mirror <source> <target>
$ mc mirror [--remove] /work/local-folder <YOUR_ALIAS>/<YOUR_BUCKET>/remote-folder

# 刪除
$ mc rm [--recursive] [--force] <YOUR_ALIAS>/<YOUR_BUCKET>/remote-folder

# 檢視資料
$ mc find <YOUR_ALIAS>/<YOUR_BUCKET>/remote-folder
$ mc stat <YOUR_ALIAS>/<YOUR_BUCKET>/remote-folder
cp --recursivemirror 的差別

mc cp --recursive 是單純把來源整個複製過去;mc mirror 則是「同步」,只搬移有差異的檔案,並可加上 --remove 來刪除目標端多出來的檔案,較適合用在反覆同步的情境。

設定公開存取權限

透過 mc anonymous(舊版指令為 mc policy)可以設定 bucket 或 prefix 的匿名存取權限,例如開放公開下載:

# 開放公開下載(download / upload / public / none)
$ mc anonymous set download <YOUR_ALIAS>/<YOUR_BUCKET>

# 檢視目前的存取權限設定
$ mc anonymous get <YOUR_ALIAS>/<YOUR_BUCKET>

產生預簽章下載連結(presigned URL)

mc share 可以產生有時效性的下載連結,讓沒有帳號的人也能在期限內存取該 object:

# 預設有效期間為 7 天,可用 --expire 自訂(最長 7 天)
$ mc share download --expire 1h <YOUR_ALIAS>/<YOUR_BUCKET>/example.txt