Как я могу использовать Bash-подобную оболочку в Windows?

53

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

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

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

Майкл Даррант
источник
3
Мы использовали puttyдля подключения к реальному серверу Linux. на окнах я всегда неохотно и соблазнительно использовал cygwin, неохотно из-за моего неуклюжего опыта установки. Но лично я нашел, что это более удобно использовать, чем msys и быстрее, чем vm. После установки Cygwin оказывается каким-то портативным, достаточно просто скопировать его каталог, однако он создаст новое имя пользователя на каждом компьютере / пользователе на основе имени пользователя Windows (по крайней мере по умолчанию). Но имейте в виду, что поскольку cygwin / msys можно рассматривать как пользовательский «дистрибутив», некоторые [необязательные] переключатели команд могут отсутствовать. проверить их.
n611x007
5
Microsoft только что объявила, что следующее обновление Windows 10 будет включать Bash.
Дмитрий Нестерук

Ответы:

42

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

faffaffaff
источник
Я использовал Cygwin, который был 135 МБ (25 МБ в упаковке), скопированный с другого компьютера (портативного). он создал новое имя пользователя на основе текущего компьютера новых пользователей и работал совершенно иначе. Мой текущий Cygwin - 800 МБ, со средой сборки, исходным кодом 200-300 МБ и некоторыми другими вещами.
n611x007
2
Примечание: теперь вы можете установить «Подсистему Windows для Linux», которая позволяет запускать встроенную оболочку Linux и пользовательский режим в Windows. Смотрите ответ ниже ...
Мистер Хинш - Мартин Хиншелвуд
48

Теперь вы можете установить подсистему 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 (видео)

Nemo
источник
Мне больше нравится этот ответ!
Питер
1
@Peter Спасибо, вчера попробовал это вкратце, смог запустить gcc / g ++, смог заставить Firefox работать через xserver (довольно медленно, может быть, они ограничивают загрузку процессора?), Chrome и браузер по умолчанию зависали и некоторые команды, такие как 'screen' не работает, все должно быть исправлено в следующем обновлении для bash, поскольку он все еще находится в бета-версии. Сказав это, просто иметь доступ к bash в Windows - это просто фантастика! Это открывает много возможностей. Слава Microsoft!
Немо
Вы также можете запустить это в Powershell (запускать от имени администратора): Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"и установить любое из следующего из хранилища Windows: Ubuntu, Debian, OpenSUSE, Kali Linux
Zhenhir
18

Ниже приведен список параметров, доступных по состоянию на 2018-05 гг., С несколькими обновлениями, относящимися к WSL в 2019-01 гг., А также немного подробностей по каждому из них.

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

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

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 сняла бета-предупреждение . Поскольку WSL не был доступен на Windows Server до 2018 года, я не особо задумывался над этим. В любом случае вы получите отличную оболочку bash с большинством полезных свойств CLI, которую вы ожидаете найти в стандартной установке Ubuntu. Microsoft официально заявляет, что «WSL не стремится поддерживать десктопы или приложения с графическим интерфейсом»однако есть неофициальные инструкции о том, как это сделать. Кажется, что в настоящий момент (в начале 2018 года) основные недостатки WSL заключаются в следующем: а) рендеринг экрана и доступ к диску очень медленный; б) вы не должны редактировать файлы WSL (Linux) из Windows в) он работает только на 64-битной Windows. Вот старое, но приятное сравнение с Cygwin (обратите внимание, что Рич Тернер является членом команды 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 произойдет сбой, поскольку timeout также является командой 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. Я знаю, что они не одинаковы, но очень трудно различить их при подходе к теме с такого большого расстояния. Даже когда это не сложно, мне нужно время, которого у меня нет ;-)

ndemou
источник
2
Это превосходный ответ, спасибо, что поделились своими выводами и опытом.
Даниэль Соколовский
Комплексный ответ, но это pacmanне такpackman
Адриан Гюнтер
Как это не может быть принятым ответом. Спасибо за детализацию всего этого.
42.
10

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

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

DejanLekic
источник
10

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

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

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

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

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

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

Andreas
источник
Clink на самом деле меняет язык или только что-то улучшает в cmd.exe? Это не совсем понятно из ответа.
Сардж Борщ
Он позволяет использовать некоторые из обычных функций оболочки * nix, такие как обратный поиск с использованием Ctrl + R, завершение команды поиска PATH и т. Д.
Andreas
Так что это не реализация bash, верно?
Сардж Борщ
Хм, нет Расширение cmd.exe, как описано на сайте;)
Андреас
7

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

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

удвоить
источник
Кстати: ConEmu также распознает установки MSYS2 и допускает некоторую интеграцию Clink.
Андреас
1

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

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

insidepower
источник
Бабун включает в себя целый Cygwin, он действительно безумно огромен. Процесс установки немного хакерский (в настоящее время zip-архив заблокирован chrome как опасный файл). Но пока лучшая замена терминала, которую я нашел.
Томбарт
Бабун был очень медленным для меня. Я переключился на использование conemu и git shell
wordsforthewise