Go based Amazon S3 CLI

Harshavardhana
3 min readAug 29, 2015

--

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

POSIX IRRELEVANT!, UNIX IRRELEVANT!

Just kidding, We are Picard fans.

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.

--

--