50

Я использую Linux и Mac, и скоро научу некоторым вещам из командной строки.

Что я могу установить в Windows, чтобы получить окно терминала, наиболее похожее на базовую оболочку Mac/Linux Bash?

Я хотел бы иметь возможность определить .bash_aliases, если это возможно.

8 ответов8

47

Теперь вы можете установить подсистему Windows для Linux, которая позволяет запускать встроенную оболочку Linux и пользовательский режим в Windows. Это позволяет вам запускать оболочку Bash непосредственно в Windows и на основе Ubuntu.

Это было введено в Windows 10 с Anniversary Update (2016) и по умолчанию не включено. Чтобы включить новую функцию на компьютере с летним обновлением Windows 10, выполните следующие действия.

  1. Перейдите в Настройки -> Обновление и безопасность -> Для разработчиков и выберите "Режим разработчика"
  2. Панель управления -> Программы и компоненты и нажмите "Включить или отключить функции Windows" в верхней левой панели
  3. В диалоговом окне установите флажок "Подсистема Windows для Linux" и нажмите "ОК".
  4. Перезагрузить машину
  5. Найдите "bash" и щелкните по нему, он должен открыть командную строку и спросить вас, хотите ли вы установить "Ubuntu в Windows", продолжите с "y"
  6. После установки будет предложено создать имя пользователя и пароль UNIX.
  7. Теперь вы готовы использовать оболочку bash

Немного истории, еще в 2015 году был начат проект Astoria по доставке приложений Android в Windows, и для этой цели была создана подсистема Linux под названием Windows Subsystem for Linux (WSL). В конечном итоге проект Astoria был закрыт, поскольку он подорвал их стратегию UWP (универсальная платформа Windows), но некоторые его части были сохранены и составляют основу bash для Windows. В течение этого времени Microsoft сотрудничала с Canonical (создателями Ubuntu Linux), чтобы предоставить им собственный образ со всеми поддерживаемыми инструментами / двоичными файлами.

Более подробная информация доступна здесь,
https://blogs.msdn.microsoft.com/commandline/2016/04/06/bash-on-ubuntu-on-windows-download-now-3/
https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/
https://sec.ch9.ms/sessions/build/2016/P488.mp4 (видео)

40

Вы можете установить Cygwin или MSYS/MinGW или полный дистрибутив Linux на виртуальной машине (например, с помощью VirtualBox).

17

Вот список доступных вариантов с 2018-05, а также немного подробностей относительно каждого из них.

Варианты, которые выделяются

Сигвин и Бабун

Cygwin обеспечивает следующее:

  1. оболочка bash и терминал Mintty,
  2. широкий спектр общих утилит Linux, скомпилированных для работы в Windows
  3. комплексный уровень совместимости, позволяющий запускать программы для Linux в Windows.

Cygwin стремится упростить перенос приложений Linux на Windows. Если какая-то программа на C была разработана для Unix и предполагает использовать такие функции, как каналы, доступ к файлам и каталогам в стиле Unix и т.д., Вы можете скомпилировать ее для Cygwin, и Cygwin будет выступать в качестве слоя совместимости между кодом и сторонней ОС (Windows) , Это позволяет одной и той же программе на C работать как в Linux, так и в Windows, практически без изменений. Таким образом, огромный список программ для Linux был составлен и может быть запущен при установке Cygwin. Однако вы, пользователь этих программ, вероятно, должны быть знакомы с Unix. Например, вам может потребоваться передать аргументы типа /cygdrive/c/autoexec.bat вместо c:\autoexec.bat и быть готовым к выводу с выводом строки Unix (\n) вместо завершения строки Windows (\r\n).

Коллекция всех программ Cygwin включает в себя репозиторий, и хотя Cygwin не имеет традиционного менеджера пакетов Linux, вы можете добавлять, удалять и обновлять программы из этого репозитория в любое время очень нелогичным способом (вы запускаете Cygwin setup.exe в в любое время после завершения установки)

Babun - это Cygwin с полнофункциональным менеджером пакетов (pact), oh-my-zsh для своей оболочки, git, автоматических обновлений и архитектуры, ориентированной на плагины. Хотя оболочкой по умолчанию является zsh, вы можете легко переключиться на bash. Кажется, это хорошее обновление от ванильного Cygwin, если вы не возражаете против лишнего веса.

Mingw-w64

Mingw-w64 обеспечивает следующее:

  1. оболочка bash,
  2. изрядное количество утилит Linux,
  3. инструментарий разработки ПО для создания приложений, которые будут работать без слоя совместимости с Linux (или с минимальным уровнем).

MinGW - это прежде всего дистрибутив программного обеспечения и платформа для Windows. В частности, это порт Windows для инструментов компилятора GNU, таких как GCC, make, bash и так далее. Он включает в себя достаточное количество инструментов GNU и минимальный уровень совместимости с Unix.

Основное различие между Mingw-w64 и Cygwin заключается в приоритетах: Cygwin стремится обеспечить полный уровень совместимости с POSIX, включающий полную реализацию всех основных системных вызовов и библиотек Unix; производительность является вторичной по отношению к совместимости. MinGW нацелен на производительность, поэтому он не будет предоставлять определенные API POSIX, которые не могут быть легко и / или быстро реализованы в Windows. Также основной целью MinGW являются S / W разработчики. Тем не менее, обычные пользователи могут также наслаждаться его оболочкой и утилитами общего назначения.

MSYS2 и Git для Windows

MSYS2 обеспечивает следующее:

  1. оболочка bash и терминал Mintty,
  2. изрядное количество утилит Linux,
  3. полнофункциональный менеджер пакетов командной строки для установки программ ОС
  4. части от Cygwin и MinGW для поддержки создания приложений с полным уровнем совместимости Linux или без него.
  5. хранилище программного обеспечения и менеджер пакетов (pacman), которые упрощают установку, использование, сборку и перенос программного обеспечения в Windows.

MSYS2 также является в первую очередь дистрибутивом программного обеспечения и платформой для Windows, такой как MinGW, но она сочетает в себе как Cygwin, так и MinGW. Вы можете использовать MSYS2 для создания "программ MinGW" или "программ MSYS2". Более поздняя ссылка на уровень совместимости MSYS2 (msys-2.dll), который сам близко следует за развитием уровня совместимости Cygwin с несколькими дополнениями / модификациями. Однако репозитории двух проектов совершенно не связаны между собой. Таким образом, хотя MSYS2 и Cygwin предоставляют grep.exe они могут иметь совершенно другую версию.

Git для Windows - это либо просто MSYS2 с установленным git, либо, по крайней мере, в значительной степени основанный на MSYS2. Он предоставляет ту же оболочку (bash), терминал (Mintty) и менеджер пакетов (pacman). Похоже, что это самый популярный способ запуска доминирующего Git в Windows, и вместе с этим вы получаете отличную среду Unix.

Подсистема Windows для Linux(WSL)

WSL решает ту же проблему, используя совершенно другой метод. Вы запускаете точно такой же код, как и в системе Linux на WSL, которая перехватывает вызовы ядра и переводит их в вызовы ядра Windows (это противоположно Wine). Конечно, перевод далеко не идеален. Microsoft заявляет, что «она намеренно обозначена как" бета "- еще не завершена!Вы должны ожидать, что многие вещи будут работать, а некоторые вещи потерпят неудачу!" (2017-05-08). Однако это развивается здоровым с тех пор, как это вступило. Из-за этого и того факта, что он не был доступен на Windows Server до 2018 года, я не слишком много смотрел на WSL. В любом случае вы получите отличную оболочку bash с большинством полезных свойств CLI, которую вы ожидаете найти в стандартной установке Ubuntu. Microsoft официально заявляет, что "WSL не стремится поддерживать десктопы или приложения с графическим интерфейсом", однако есть неофициальные инструкции о том, как это сделать. Похоже, что в настоящий момент (в начале 2018 года) основные недостатки WSL заключаются в следующем: а) рендеринг экрана и доступ к диску очень медленный; б) совместный доступ к файлам с Windows труден; в) он работает только на 64-битной Windows. Хорошее сравнение с Cygwin здесь: https://askubuntu.com/questions/813848/what-are-the-differences-between-windows-bash-and-cygwin/814004 (не то, что Рич Тернер является членом WSL команда, и он опубликовал много полезной информации о WSL)

Общий язык

За исключением WSL, большинство вышеперечисленных инструментов используют много общих технологий (библиотеки, исполняемые файлы, концепции). Например, оболочка bash, которая поставляется с MinGW, зависит от msys-2.dll, которая сама по себе является веткой cygwin.dll. Так что да, есть много места для путаницы :-)

Больше вариантов

Cmder предоставляет просто хороший терминал и оболочку, похожую на bash, для Windows. Его основным компонентом является Conemu (терминал). Кроме того, он добавляет Clink, который обеспечивает редактирование командной строки в стиле Powerful Bash, настраиваемый макет приглашения и цветовую схему Monokai. Он очень (или, возможно, полностью) совместим с консольными программами Windows.

Scoop предоставляет менеджер пакетов командной строки для многих известных кроссплатформенных программ, включая множество инструментов GNU. Он загружает предварительно скомпилированные пакеты. Он не предоставляет ни оболочки, ни терминала, а работает под управлением Windows cmd.exe (со всеми его ограничениями, а также с полной совместимостью с собственными консольными программами Windows). В него также не входит набор компиляторов (но, разумеется, компиляторы и инструменты разработки - это типичные пакеты, которые вы можете установить с помощью scoop). Многие программы, которые устанавливает Scoop, либо взяты непосредственно из проекта MinGW/MSYS, либо были созданы с использованием их инструментов.

Еще больше вариантов

Решения ниже не кажутся активными, и я никогда не проверял их, но они, кажется, делают работу для других:

Gow (Gnu On Windows) - это легкая альтернатива Cygwin без оболочки. Он использует удобный установщик Windows, который устанавливает около 130 чрезвычайно полезных приложений Linux с открытым исходным кодом, скомпилированных в виде собственных двоичных файлов win32 и доступных через windows cmd.exe. Он спроектирован как можно меньшего размера (около 10 МБ).

UnxUtils & GnuWin32: UnxUtils - это набор портов общих утилит, похожих на Unix-подобные GNU, на собственный Win32, исполняемые файлы которых зависят только от Microsoft C-runtime msvcrt.dll. Вы должны скачать основную часть и несколько обновлений. GnuWin32 имеет более поздние версии, чем UnxUtils, но требует поддержки файлов (например, DLL)

MSYS & MinGW, похоже , устарели из MSYS2 и MinGW-W64, поэтому я никогда не смотрел на них.

Некоторые распространенные проблемы на Cygwin & MSYS2

По поводу терминала

Mintty - терминал, используемый в Cygwin, MSYS2 и их производных. Следует помнить, что если вы работаете с консольными программами Windows, это не является безболезненной заменой командной строки Windows. В то время как программы с простым выводом текста обычно работают нормально, интерактивные и полноэкранные программы часто имеют проблемы. Прочитайте больше на домашней странице Mintty, а также прочитайте статью «Некоторые нативные консольные программы не работают при запуске из Git Bash» в Git для Windows FAQ. Эта запись содержит следующие рекомендации, когда вы сталкиваетесь с такими проблемами:

Есть несколько способов обойти эти проблемы:

  • Запустите программы, которые имеют проблемы, используя утилиту winpty. Это позволяет вам продолжать использовать более удобный терминал mintty, но может стать громоздким, если вам нужен обходной путь для многих программ.
  • [используйте cmd.exe] и настройте его для «быстрого редактирования», разумного размера и прокрутки и подходящего шрифта Unicode. Вам все равно придется жить с другими причудами [cmd.exe].
  • Установите и используйте Conemu.

Другие вопросы

Две самые важные вещи, которые нужно иметь в виду:

  1. есть компромисс между властью и трудными для устранения проблем. Чем более мощное решение, тем больше вещей может пойти не так, даже если они будут изначально не связаны с вашим уровнем Linux.

  2. если у вас недостаточно опыта работы с Linux, не используйте более мощные решения, такие как Cygwin/MSYS2/MinGW

UnxUtils и GnuWin32 обладают наименьшей мощностью, но и наименьшим потенциалом причинения вам головной боли. Cygwin и подобные им будут лидировать как по силе, так и по головным болям. Cmder находится где-то посередине. Поэтому, когда вам нужны самые мощные решения, выспитесь и будьте полностью сосредоточены. Избегайте использования мощных решений при тестировании чего-то нового и, возможно, нестабильного. Также не забывайте, что решения средней сложности, такие как cmder, не безупречны.

Проблема команд Linux для теневого копирования Windows является распространенной причиной трудностей при отладке таких решений, как Cygwin/MSYS2/MinGW. Вот пример: у меня был файл .bat, который использовал команду timeout. При запуске под Cygwin это может произойти сбой, потому что тайм-аут также является командой Linux, но с другим синтаксисом. После того, как я обнаружил проблему, я обнаружил, что могу добавить PATH = ... вверху файла .bat, чтобы убедиться, что команда windows имеет приоритет. Но затем я получил еще более загадочную ошибку "Перенаправление ввода не поддерживается" и решил обходной путь, прежде чем найти причину.

Вот пример проблемы с cmder. Я запускал версию Unison для Windows под Cmder, и при некоторых особых условиях он зависал абсолютно без сообщений об ошибках. Одна и та же команда всегда отлично работала под cmd.exe. Самое смешное, что он также отлично работал под Cygwin (на самом деле, если у вас есть имена файлов Unicode, терминал Cygwin лучше, чем cmd.exe, потому что cmd.exe часто отображает Unicode-текст с искаженным текстом).

Об этом руководстве

В течение 2017-05 гг. Мне надоело не понимать различий вышеперечисленных инструментов, хотя некоторые из них я использовал уже давно (в основном CygWin и cmder, но никогда в целях разработки). Так что я потратил несколько часов, чтобы прогуляться по ландшафту. Это руководство является результатом заметок, которые я сохранил. Я не специалист в этой области, но я изо всех сил старался найти всю необходимую информацию, внимательно ее прочитать и четко представить наиболее важные части. Пожалуйста, прокомментируйте, если что-то кажется неправильным, и я сделаю все возможное, чтобы исправить это.

Наконец, извинения за некоторые проблемы с терминологией: В этом тексте я иногда использую термин Linux вместо UNIX или POSIX. Я знаю, что они не одинаковы, но очень трудно различить их при подходе к теме с такого большого расстояния. Даже когда это не сложно, мне нужно время, которого у меня нет ;-)

10

Я бы предложил вам скачать и установить минимальный набор MinGW, а также минимальный набор MSYS. Установщик MinGW предоставляет вам простой графический интерфейс для выбора пакетов, которые вы хотите установить. Если вам нужен только BASH, тогда установка займет не более нескольких мегабайт.

ОБНОВЛЕНИЕ: я перешел на MSYS2, который является гораздо более продвинутым и имеет порт ArchLinux pacman для управления пакетами. Установщик MSYS2 имеет все, что вам нужно, плюс он использует Mintty, что абсолютно идеально.

10

Есть также Clink, доступный на GitHub. Он интегрируется в командную строку Windows, используя библиотеки подключений.

Из описания проекта:

Clink сочетает в себе встроенную оболочку Windows cmd.exe с мощными функциями редактирования командной строки библиотеки GNU Readline, которая обеспечивает богатые возможности завершения, истории и редактирования строк.

(так что он не предоставляет возможности языка bash-as-a-a-программирования или каких-либо других полезностей Unix)

Я использую Linux на работе и иногда сталкиваюсь с cmd, который не работает так, как я ожидаю от Bash. С Clink я могу преодолеть некоторые из этих недостатков.

В последнее время я также обнаружил многообещающий, но еще не « универсальный » проект под названием flinux, который эмулирует системные функции Linux и предоставляет какую-то систему поверх него (в настоящее время основанную на Arch Linux)

7

В дополнение к тому, что сказал faffaffaff, Git для Windows включает в себя Bash и некоторые распространенные программы командной строки Linux (например, Vim, sed и gawk). Это основано на MSYS. Версия программ старая, хотя, например, Bash версии 3.1. У Cygwin были бы более свежие версии утилит.

Я также использую ConEmu в качестве эмулятора терминала (в основном для подсветки синтаксиса в Vim, вкладок и более простого копирования). console2 - еще один популярный эмулятор терминала, хотя я не пробовал его.

2

Это одна из первых вещей, которую я делаю, когда настраиваю новую машину Windows:

Функциональная и гладкая консоль в Windows

1

Я только что попробовал с Бабуном, который интегрировал Cygwin внутри, и на мой вкус приятный :)

Файл для загрузки немного большой, около 250 МБ. Но установка проста; ничего настраивать не нужно и все работает!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .