Ниже приведен список параметров, доступных по состоянию на 2018-05 гг., С несколькими обновлениями, относящимися к WSL в 2019-01 гг., А также немного подробностей по каждому из них.
Варианты, которые выделяются
Cygwin обеспечивает следующее:
- оболочка bash и терминал Mintty,
- широкий спектр общих утилит Linux, скомпилированных для работы в Windows
- комплексный уровень совместимости, позволяющий запускать программы для 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 обеспечивает следующее:
- оболочка bash,
- изрядное количество утилит Linux,
- инструментарий разработки ПО для создания приложений, которые будут работать без уровня совместимости с Linux (или с минимальным уровнем).
MinGW - это прежде всего дистрибутив программного обеспечения и платформа для Windows. В частности, это порт Windows для инструментов компилятора GNU, таких как GCC, make, bash и так далее. Он включает в себя достаточное количество инструментов GNU и минимальный уровень совместимости с Unix.
Основное различие между Mingw-w64 и Cygwin заключается в приоритетах: Cygwin стремится обеспечить полный уровень совместимости с POSIX, включающий полную реализацию всех основных системных вызовов и библиотек Unix; производительность является вторичной по отношению к совместимости. MinGW стремится к производительности, поэтому он не будет предоставлять определенные API POSIX, которые не могут быть реализованы легко и / или достаточно быстро под Windows. Также основной целью MinGW являются S / W разработчики. Тем не менее, обычные пользователи могут также наслаждаться его оболочкой и утилитами общего назначения.
MSYS2 обеспечивает следующее:
- оболочка bash и терминал Mintty,
- изрядное количество утилит Linux,
- полнофункциональный менеджер пакетов командной строки для установки программ ОС
- части от Cygwin и MinGW для поддержки создания приложений с полным уровнем совместимости Linux или без него.
- хранилище программного обеспечения и менеджер пакетов (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.
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 .
Другие вопросы
Две самые важные вещи, которые нужно иметь в виду, это:
есть компромисс между властью и трудными для устранения проблем. Чем более мощное решение, тем больше вещей может пойти не так, даже если это будет казаться изначально не связанным с вашим уровнем Linux.
если у вас недостаточно опыта работы с 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. Я знаю, что они не одинаковы, но очень трудно различить их при подходе к теме с такого большого расстояния. Даже когда это не сложно, мне нужно время, которого у меня нет ;-)
putty
для подключения к реальному серверу Linux. на окнах я всегда неохотно и соблазнительно использовалcygwin
, неохотно из-за моего неуклюжего опыта установки. Но лично я нашел, что это более удобно использовать, чем msys и быстрее, чем vm. После установки Cygwin оказывается каким-то портативным, достаточно просто скопировать его каталог, однако он создаст новое имя пользователя на каждом компьютере / пользователе на основе имени пользователя Windows (по крайней мере по умолчанию). Но имейте в виду, что поскольку cygwin / msys можно рассматривать как пользовательский «дистрибутив», некоторые [необязательные] переключатели команд могут отсутствовать. проверить их.