Ось список доступних варіантів станом на 2018-05 рр. З кількома оновленнями щодо WSL протягом 2019-01 років, а також трохи деталей щодо кожного з них.
Варіанти, які виділяються
Cygwin забезпечує наступне:
- оболонку баша і термінал Монетти,
- широкий спектр поширених утиліт 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's setup.exe на будь-який час після завершення встановлення)
Бабун - це Cygwin з повнофункціональним менеджером пакунків (пактом), ох- мі-шш за його оболонку, git, автоматичні оновлення та орієнтовану на плагіни архітектуру. Хоча оболонка за замовчуванням zsh, ви можете легко перейти на bash. Це здається приємним оновленням від ванілі Cygwin, якщо ви не заперечуєте над зайвою вагою.
Mingw-w64 забезпечує наступне:
- панцир,
- неабияка кількість утиліт Linux,
- ланцюжок інструментів розвитку SW для створення додатків, які працюватимуть без шару сумісності Linux (або з мінімальним).
MinGW - це передусім розповсюдження програмного забезпечення та будівельна платформа для Windows. Зокрема, це порт Windows із інструментів компілятора GNU, таких як GCC, make, bash тощо. Він включає неабияку кількість інструментів GNU та мінімальний рівень сумісності Unix.
Основна відмінність Mingw-w64 від Cygwin полягає в пріоритетах: Cygwin прагне забезпечити повний рівень сумісності POSIX, що включає повну реалізацію всіх основних системних викликів і бібліотек Unix; продуктивність є вторинною щодо сумісності. MinGW націлений на ефективність, тому він не надаватиме певні API POSIX, які неможливо запровадити легко та / або досить швидко в Windows. Також основною ціллю MinGW є розробники S / W. Тим не менш, випадкові користувачі можуть також насолоджуватися його оболонкою, а загальні цілі включають утиліти.
MSYS2 забезпечує наступне:
- оболонку баша і термінал Монетти,
- неабияка кількість утиліт 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 року, я не так багато розглядав його. У будь-якому випадку ви отримаєте приємну оболонку башмаків із більшістю смакоти CLI, яку ви очікуєте знайти на інвентарі Ubuntu. Microsoft офіційно заявляє, що "WSL не спрямований на підтримку робочого столу або додатків GUI"однак є неофіційні інструкції, як це зробити. Схоже, що в даний момент (на початку 2018 року) основними недоліками WSL є такі: а) надання екрана та доступу до диска дуже повільні; б) ви не повинні редагувати файли WSL (Linux) з Windows c) він працює лише на 64-бітних Windows. Ось старе, але приємне порівняння з cygwin (зауважте, Річ Тернер є членом команди WSL і він опублікував багато корисної інформації щодо WSL)
Загальну підставу
За винятком WSL, більшість перерахованих вище інструментів мають багато загальних технологій (бібліотеки, виконавчі файли, концепції). Наприклад, оболонка bash, яка постачається разом з MinGW, залежить від msys-2.dll, яка сама є вилкою cygwin.dll. Так що так, багато місця для плутанини :-)
Більше опцій
Cmder забезпечує просто хороший термінал і баш-подібну оболонку для Windows. Основним компонентом є Conemu (термінал). Крім цього, він додає Clink, який забезпечує потужне редагування командного рядка в стилі 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 - це сукупність портів загальних утиліт GNU Unix, подібних до рідних Win32, з виконуваними файлами лише залежно від Microsoft C-часу виконання msvcrt.dll. Ви повинні завантажити основну частину та кілька оновлень . GnuWin32 має пізніші версії, ніж UnxUtils, але вимагає підтримуючих файлів (наприклад, DLL)
MSYS і MinGW, здається , були застаріли MSYS2 та MinGW-W64, тому я ніколи не дивився на них.
Деякі поширені проблеми щодо Cygwin & MSYS2
Щодо терміналу
Монетний двір - термінал, що використовується в Cygwin, MSYS2 та їх похідних. Потрібно пам’ятати, що якщо ви запускаєте нативну консольну програму Windows, це не безболісна заміна командного рядка Windows. У той час як програми з простим виведенням тексту зазвичай працюють добре, інтерактивно та повноекранно часто виникають проблеми. Докладніше читайте на домашній сторінці Mintty, а також читайте запис "Деякі програми, що працюють з консолі, не працюють при запуску з Git Bash" на Git для Windows . Цей запис містить ці рекомендації, які потрібно зробити, коли ви стикаєтесь з подібними проблемами:
Існує кілька методів вирішення цих проблем:
- Запускайте програми, які мають проблеми з утилітою winpty . Це дозволяє продовжувати використовувати приємніший монетний термінал, але може стати громіздким, якщо вам потрібно вирішити багато програм.
- [використовуйте cmd.exe] і налаштуйте його на "Швидке редагування", розумний розмір і прокрутку, а також відповідний шрифт unicode. Вам доведеться жити з іншими химерностями [cmd.exe].
- Встановіть і використовуйте Conemu .
Інші питання
Дві найважливіші речі, про які слід пам’ятати, це:
існує торгівля між владою та важкими налагодженнями проблем. Чим потужніше рішення, тим більше матеріалів може піти не так навіть таким чином, який спочатку здасться не пов’язаним із вашим шаром Linux.
якщо у вас недостатньо досвіду Linux, не використовуйте більш потужні рішення, такі як Cygwin / MSYS2 / MinGW
UnxUtils і GnuWin32 мають найменшу потужність, але і найменший потенціал, щоб викликати у вас головний біль. Cygwin та подібні будуть вищою ланкою як у силі, так і при головних болях. Cmder десь посередині. Тож, коли вам потрібні найпотужніші рішення, добре заспівайте і будьте повністю зосереджені. Уникайте використання потужних рішень під час тестування чогось нового і, можливо, нестабільного. Також не забувайте, що рішення середньої складності, такі як cmder, не бездоганні.
Проблема команд Linux, що тінять вікна, є частою причиною важкої налагодження проблем у таких рішеннях, як Cygwin / MSYS2 / MinGW. Ось приклад: у мене був файл .bat, який використовував команду timeout. Під час запуску під Cygwin це не вдасться, оскільки час очікування також є командою Linux, але з різним синтаксисом. Після того як я помітив проблему, я дізнався, що я можу додати PATH = ... у верхній частині файлу .bat, щоб переконатися, що команда Windows має пріоритет. Але тоді я отримав ще більш криптовану помилку "Перенаправлення вводу не підтримується" і вирішив вирішити проблему, перш ніж знайти причину.
Ось приклад проблеми з cmder. Я працював у версії Windows унісон під Cmder, і в деяких спеціальних умовах він висів з абсолютно відсутнім повідомленням про помилку . Ця ж команда завжди ідеально працювала під cmd.exe. Найсмішніше те, що він також відмінно працював під Cygwin (адже якщо у вас є імена файлів Unicode, термінал Cygwin краще, ніж cmd.exe, оскільки cmd.exe часто відображає текст Unicode неправильно).
Про цей посібник
Протягом 2017-05 рр. Мені стало погано розуміти відмінності вищезазначених інструментів, хоча деякі з них я використовував давно (в основному CygWin та cmder, але ніколи для цілей розвитку). Тому я витратив кілька годин, щоб обробляти краєвид. Цей посібник - результат записів, які я зберігав. Я не фахівець у цій галузі, але я дуже намагався знайти всю релевантну інформацію, прочитати її критично і чітко представити найважливіші частини. Будь ласка, прокоментуйте, якщо щось здається невірним, і я зроблю все можливе, щоб це виправити.
Нарешті вибачення за деякі термінологічні проблеми: У цьому тексті я іноді використовую термін Linux замість UNIX або POSIX. Я знаю, що вони не однакові, але розмежувати їх дуже важко, коли підходять до теми з такої великої відстані. Навіть коли це не важко, мені потрібен час ;-)
putty
для підключення до реального сервера Linux. у Windows я завжди неохоче і спокусився використовуватиcygwin
, неохоче через мій незграбний досвід встановлення. Але особисто мені було зручніше використовувати, ніж msys та швидше, ніж vm. Після встановлення cygwin виявляється досить портативним, просто скопіювавши його каталог досить, проте він створить нове ім'я користувача на кожній машині / користувачеві на основі ім'я користувача Windows (принаймні за замовчуванням). Але майте на увазі, що оскільки cygwin / msys може розглядатися як власна "дистрибуція", деякі [необов'язкові] командні комутатори можуть бути відсутні. перевірити їх.