All posts

Go based Amazon S3 CLI

MinIO Client “mc” is a tool for Amazon S3 compatible cloud storage and POSIX compatible filesystems. It implements basic Unix commands such as ls, cp, cat and diff. mc is entirely written in Golang and released under Apache License, Version 2.0.

Project is hosted at Github — https://github.com/minio/mc

NAME:
 mc - MinIO Client for cloud storage and filesystems.

USAGE:
 mc [global flags] command [command flags] [arguments...]

COMMANDS:
 ls            List files and folders.
 mb            Make a bucket or folder.
 cat           Display contents of a file.
 cp            Copy files and folders from many sources to a
               single destination.
 mirror        Mirror folders recursively from a single source
               to many destinations.
 session       Manage sessions for cp and mirror.
 share         Share documents via URL.
 diff          Compute differences between two files or folders.
 access        Set access permissions.
 config        Modify, add, remove alias from default
               configuration file [~/.mc/config.json].
 update        Check for new software updates.
 version       Print version.
 
GLOBAL FLAGS:
 --config-folder, -C "/home/harsha/.mc"       Path to
configuration folder.
 --quiet, -q                                  Suppress chatty console output.
 --mimic                                      Behave like operating system tools. Use with shell aliases.
 --json                                       Enable json formatted output.
 --debug                                      Enable debugging output.
 --nocolor                                    Disable console coloring.
 
VERSION:
 Wed, 26 Aug 2015 19:58:04 GMT

Too many options

The number of options implement in cp, ls and cat from the GNU coreutils (8.23) package:

cat - 12 options
cp - 31 options
ls - 58 options
rsync - 127 options (not part of coreutils)

It is hard to remember more than 3 to 4 of these options.

Desktops are equipped with 8TB SATA disks

ls, cp like tools do not scale for the TB sized disks. Users often end-up using rsync over cp command to resume failed copy operations. Also rsync does not scale for TB sized disks.

POSIX is dead

POSIX based filesystems from Ext4, XFS to NFS v4.x do not scale to meet the demands of the Cloud. Amazon, Facebook and Google have all moved away from POSIX to more simpler GET/PUT style API over HTTP. Unix tools need a rewrite to support these modern APIs (Amazon S3, Google Cloud Storage, Azure Blob Storage)

Why we wrote ‘mc’?

We ditched Unix standards where they do not make sense and replaced them with new useful features. Thanks to Golang for replacing C as the systems language of choice.

Progress Bar
Progress bar is a must have feature when you transfer large quantities of data.

Suspend / Resume
Ability to safely resume failed mirroring and copy operations.

Amazon S3 API Support
Amazon S3 API is the industry standard for Cloud Storage. mc bridges Amazon S3 and POSIX.

Site to Site Mirroring
Mirror command computes diff’s across multiple sites and synchronizes only the missing files.

Color coded human readable output
Colored human readable output is enabled by default on modern terminals.

Scriptable JSON API
Large sites automate common operations through scripting around common unix tools. mc supports JSON formatted output for consistent scriptability for python, bash, perl, ruby …

Share documents via URL
Similar to Dropbox and box.net, user can share documents on Amazon S3 from command line. Share command generates a URL with a user specified expiry. This URL is accessible from anywhere without special credentials.

Other miscellaneous features
Single static binary with no dependencies for GNU/Linux, Mac OS X and Microsoft Windows operating systems. Update notification. Amazon S3 HTTP tracing.

Community

We hangout on gitter - https://gitter.im/minio/minio. Please send us feedback and patches.