mc — консольный клиент S3
S3-хранилища — стандарт де-факто для объектных бакетов, бэкапов и статики. Когда AWS CLI кажется избыточным, а веб-консоль неудобной, выручает MinIO Client (mc). Это консольный инструмент для любого S3-совместимого хранилища: MinIO, Yandex Cloud, AWS S3, Backblaze B2. Работает из коробки, не требует Python и настраивается за минуту.
Установка
Скачиваю бинарник и делаю исполняемым:
Проверяю версию:
Для macOS аналогично, через Homebrew:
mc — один статический бинарник без зависимостей. Прекрасно работает в контейнерах и на минимальных образах.
Добавление алиаса
Алиас — это именованное подключение к S3-эндпоинту. Без него каждая команда требует полного URL.
После этого myminio заменяет URL во всех командах. Список алиасов:
В production не храни ключи в истории команд. Используй переменные окружения: mc alias set prod ${S3_ACCESS_KEY} ${S3_SECRET_KEY} --api API-S3v4 и подставляй через env.
Для S3-совместимых сервисов с самоподписанными сертификатами:
Просмотр и навигация
Вывести список бакетов:
Рекурсивный листинг с содержимым:
Информация об объекте:
mc ls без --recursive показывает только бакеты верхнего уровня. Для навигации по папкам внутри бакета используй префиксы.
Работа с бакетами
Создать бакет:
Если бакет уже существует, mc сообщит об ошибке. Флаг --ignore-existing подавляет её:
Удалить пустой бакет:
Для непустого бакета — с флагом force:
Работа с объектами
Посмотреть содержимое объекта в stdout (не скачивая):
Удалить объект:
Рекурсивное удаление по маске:
mc rm без --force запрашивает подтверждение. В скриптах всегда используй --force.
Найти объекты по критерию:
Комбинация с удалением:
Загрузка и выгрузка файлов
Скопировать локальный файл в бакет:
Множественная загрузка:
Скачать объект локально:
Скопировать между бакетами (или между алиасами):
Флаги для управления потоком:
| Флаг | Назначение |
|---|---|
--recursive | Обработать директории рекурсивно |
--force | Перезаписать без вопросов |
--preserve | Сохранить атрибуты файла (mtime, ACL) |
--if-not-exists | Пропустить уже существующие объекты |
--disable-multipart | Загрузить одним PUT-запросом |
Зеркалирование
Односторонняя синхронизация директорий:
С флагами для прода:
| Флаг | Назначение |
|---|---|
--overwrite | Перезаписать изменившиеся файлы |
--delete | Удалить в приёмнике файлы, отсутствующие в источнике |
--watch | Режим отслеживания изменений в реальном времени |
--md5 | Проверять MD5 после загрузки |
--delete опасен: удалит файлы в приёмнике, которых нет в источнике. Тестируй с --dry-run или с флагом --preserve для резервных копий.
Dry-run — показать, что будет сделано, без изменений:
Политики доступа
Установить публичный доступ на бакет:
Типовые политики:
Посмотреть текущую политику:
Сгенерировать пресигненную ссылку (работает и для приватных бакетов):
Вывод содержит URL с подписью и время жизни.
Полезные флаги
Глобальные флаги, работающие для любой команды:
| Флаг | Назначение |
|---|---|
--debug | Подробный вывод HTTP-запросов и ответов |
--json | Вывод в JSON (удобно для парсинга в скриптах) |
--no-color | Отключить цветной вывод |
--insecure | Не проверять TLS-сертификат |
--config-dir | Путь к конфигурации (по умолчанию ~/.mc) |
--limit | Ограничить скорость (например, --limit 10MiB/s) |
JSON-вывод для автоматизации:
Прогресс при копировании больших файлов:
Shell-completion
Автодополнение в bash/zsh экономит время:
После подключения набираешь mc и два раза Tab — видишь доступные команды и алиасы.
mc покрывает 90% задач при работе с S3. Для сложных сценариев (версионирование, жизненные циклы, шифрование) — API или Terraform-провайдер. Но базовые операции с бакетами и объектами закрываются этим инструментом быстрее, чем через любой SDK.