Як я можу використовувати оболонку типу Bash для Windows?


53

Я використовую Linux та Mac, і незабаром буду викладати деякі елементи командного рядка.

Що я можу встановити в Windows, щоб надати мені термінальне вікно, найбільш схоже на основну оболонку Mac / Linux Bash?

Я хотів би мати можливість визначити .bash_aliases також, якщо це можливо.


3
ми використовували puttyдля підключення до реального сервера Linux. у Windows я завжди неохоче і спокусився використовувати cygwin, неохоче через мій незграбний досвід встановлення. Але особисто мені було зручніше використовувати, ніж msys та швидше, ніж vm. Після встановлення cygwin виявляється досить портативним, просто скопіювавши його каталог досить, проте він створить нове ім'я користувача на кожній машині / користувачеві на основі ім'я користувача Windows (принаймні за замовчуванням). Але майте на увазі, що оскільки cygwin / msys може розглядатися як власна "дистрибуція", деякі [необов'язкові] командні комутатори можуть бути відсутні. перевірити їх.
n611x007

5
Microsoft щойно оголосила, що наступне оновлення Windows 10 включатиме Bash.
Дмитро Нестерук

Відповіді:


42

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


Я використав cygwin, який був 135 Мб (упаковано 25 Мб), скопійований з іншого комп'ютера (портативного). він створив нове ім'я користувача на основі нових комп'ютерів поточного користувача, і працював ідеально інакше. мій поточний cygwin - 800 Мб, із середовищем збирання, вихідним кодом 200-300 Мб та деякими речами.
n611x007

2
Примітка: тепер ви можете встановити "підсистему Windows для Linux", яка дозволяє запускати в Windows оперативні оболонки та інструменти Linux в режимі користувача. Дивіться відповідь нижче ...
Містер Хінш - Мартін Гіншелвуд

48

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

Це було введено в Windows 10 за допомогою ювілейного оновлення (2016 р.) І не включено за замовчуванням. Щоб увімкнути нову функцію на машині оновлення Windows 10 Anniversary, виконайте наступне:

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

Трохи історії, ще в 2015 році проект Astoria почав приносити додатки Android для Windows, і вони створили підсистему Linux під назвою Windows підсистема для Linux (WSL) за цією метою. Врешті-решт проект Astoria був відмовлений, оскільки він підірвав їхню стратегію UWP (Universal Windows Platform), але деякі частини були збережені і складають основу 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/sesions/build/2016/P488.mp4 (відео)



Мені подобається ця відповідь краще!
Пітер

1
@Peter Дякую, вчора на короткий час спробував це, вдалося перейти на gcc / g ++, зміг Firefox працювати через xserver (досить повільно, можливо, вони обмежують використання процесора?), Chrome і браузер за замовчуванням виходили з ладу та деякі команди на кшталт "екран" не спрацював, у наступному оновлення для bash все повинно випрасувати, оскільки його все ще знаходиться в бета-версії. Сказавши це, просто фантастично мати башти, доступні в Windows, є фантастичним! Це відкриває масу можливостей. Kudos Microsoft!
Немо

Ви також можете запустити це в Powershell (запустити як адміністратор): Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"І встановити будь-яке з наведеного нижче в магазині Windows: Ubuntu, Debian, OpenSUSE, Kali Linux
Zhenhir

18

Ось список доступних варіантів станом на 2018-05 рр. З кількома оновленнями щодо WSL протягом 2019-01 років, а також трохи деталей щодо кожного з них.

Варіанти, які виділяються

Cygwin і Babun

Cygwin забезпечує наступне:

  1. оболонку баша і термінал Монетти,
  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's setup.exe на будь-який час після завершення встановлення)

Бабун - це Cygwin з повнофункціональним менеджером пакунків (пактом), ох- мі-шш за його оболонку, git, автоматичні оновлення та орієнтовану на плагіни архітектуру. Хоча оболонка за замовчуванням zsh, ви можете легко перейти на bash. Це здається приємним оновленням від ванілі Cygwin, якщо ви не заперечуєте над зайвою вагою.

Mingw-w64

Mingw-w64 забезпечує наступне:

  1. панцир,
  2. неабияка кількість утиліт Linux,
  3. ланцюжок інструментів розвитку 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 та Git для Windows

MSYS2 забезпечує наступне:

  1. оболонку баша і термінал Монетти,
  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 року, я не так багато розглядав його. У будь-якому випадку ви отримаєте приємну оболонку башмаків із більшістю смакоти 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 .

Інші питання

Дві найважливіші речі, про які слід пам’ятати, це:

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

  2. якщо у вас недостатньо досвіду 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. Я знаю, що вони не однакові, але розмежувати їх дуже важко, коли підходять до теми з такої великої відстані. Навіть коли це не важко, мені потрібен час ;-)


2
Це чудова відповідь, дякую, що поділилися своїми висновками та досвідом.
Данило Соколовський

Відповідь вичерпна, але це pacmanне такpackman
Адріан Гюнтер

Як це не може бути прийнятою відповіддю. Дякую за деталізацію всього цього.
42.

10

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

ОНОВЛЕННЯ: Я перейшов до MSYS2, який є значно досконалішим, і має порт інструменту Pacman ArchLinux для управління пакетами. В інсталяторі MSYS2 є все необхідне, а також використовується м'ята, яка абсолютно ідеальна.


10

Там також Дзвеніти доступні на GitHub . Він інтегрується у командний рядок Windows, використовуючи бібліотеки гаків.

З опису проекту:

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

(тому він не надає функцій мови bash-as-a-програмування або будь-яких інших вигод Unix)

Я використовую Linux на роботі, і іноді виявляю, що часто вкладається в cmd, але це не так, як я очікую від Bash. За допомогою Клінка я можу подолати деякі з цих недоліків.

Нещодавно я також виявив багатообіцяючий, але ще не проект " вмію робити все" під назвою flinux, який емулює системні функції Linux та забезпечує якусь систему над ним (зараз базується на Arch Linux)


Чи насправді Клінк змінює мову, або це лише щось покращує в cmd.exe? Це не зовсім зрозуміло з відповіді.
Сардж Борщ

Це дозволяє використовувати деякі звичні функції * nix оболонки, такі як зворотний пошук за допомогою Ctrl + R, завершення пошуку команди PATH тощо.
Андреас

Тож це не баш-реалізація, правда?
Sarge Borsch

Ем, ні. Розширення до cmd.exe, так само, як описано на сайті;)
Андреас

7

На додаток до сказаного faffaffff , Git для Windows включає Bash та деякі поширені програми командного рядка Linux (наприклад, Vim , sed та gawk ). Він заснований на MSYS . Версія програм хоч і стара, наприклад, Bash - версія 3.1. У Cygwin були б новіші версії утиліт.

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


BTW: ConEmu також розпізнає установки MSYS2 та дозволяє здійснити певну інтеграцію Clink.
Андреас


1

Я щойно спробував з Babun , який інтегрував Cygwin внутрішньо, і мені смак :)

Файл завантаження трохи великий, близько 250 Мб. Але установка проста; не потрібно нічого налаштовувати, і це просто працює!


Бабун включає цілу цигувін, це справді шалено величезна кількість. Процес встановлення трохи хакітний (наразі zip-архів заблокований хромом як небезпечний файл). Але поки найкраща заміна терміналу, яку я знайшов.
Томбарт

Бабун був для мене справді повільним. Я перейшов до використання конему та git shell
слів тому
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.