Как новый "Bash на Windows 10" действительно работает?
Я читал в Интернете, что Ubuntu и bash выходят на Windows 10. Я также читал, что это не эмулятор или виртуальная машина, работающая поверх Windows, а что-то еще. Так как именно все это объединяется? И действительно ли он будет таким же стабильным и удобным для пользователя, как bash в Ubuntu?
4 ответа
Это не эмулятор так же, как WINE - не эмулятор. То есть они добавили интерфейс ядра Linux к своему ядру Windows. Когда приложение пытается использовать ядро Linux, оно переводится в собственный системный вызов Windows, а любые ответы от ядра переводятся в собственный ответ Linux. Таким образом, приложение думает, что оно работает на ядре Linux и, следовательно, не нуждается в модификации.
Тем не менее, это чисто технология Windows, поэтому, если вы хотите получить больше информации, вы должны получить их из группы поддержки Windows или чего-то еще. Windows по-прежнему является проприетарной ОС, поэтому я ожидаю ограниченного количества деталей.
И действительно ли он будет таким же стабильным и удобным для пользователя, как bash в Ubuntu?
С точки зрения Ubuntu, мы просто работаем на примитивном ядре Linux, что сравнимо с работой современного рабочего стола на примитивном X-сервере. Если вы используете только функции, поддерживаемые поддельным ядром, оно будет стабильным и удобным для пользователя. Если вы используете неподдерживаемые функции, это будет нестабильно.
Это не будет где-либо рядом с полным опытом Ubuntu в ближайшее время.
Для тех, кому интересно, как работает подсистема Windows для Linux (WSL) и как она работает с собственными двоичными файлами Linux ELF-64, мы опубликовали серию постов в блоге и сопровождающих их видео, объясняющих архитектуру WSL, процессы, системные вызовы и поддержку файловой системы.,
Скотт Хансельман также сделал отличное видео о процессе установки и о том, как настроить Bash в Ubuntu для Windows:
НТН
Довольно старый вопрос, с которым я столкнулся сегодня, когда кто-то спросил, есть ли здесь где-нибудь общий вопрос «Что такое WSL». Это, вероятно, самое близкое (и первое) в этом роде.
Но я считаю, что здесь, в 2021 году, нужен обновленный ответ, чтобы быть актуальным.
Итак, немного истории, чтобы ввести нас в курс дела:
Когда был задан этот вопрос и первоначально было объявлено об этой функции, она была известна как « Bash в Ubuntu в Windows и базовая подсистема Windows для Linux». Canonical и Microsoft тесно сотрудничали при разработке этой функции.
Отличный ответ @Jo-ErlendSchinstad выше подчеркивает, что исходный WSL (теперь называемый «WSL1») работал путем «перевода» вызовов ядра/API Linux в (близко) соответствующие вызовы API/ядра Windows.
А @RichTurner из команды WSL (который очень признателен мне за его и их работу) предоставил несколько ссылок с дополнительной информацией на тот момент. ИМХО, реальный интерес, на который он указывает, - это способность WSL разрешать выполнение двоичных файлов Windows (обычно
.exe
s) непосредственно в оболочке Linux, с невероятной поддержкой вывода на консоль, перенаправления и т. д. Вы можете запустить Windowsipconfig.exe
(или любая команда вpowershell.exe
и т. д.), передать его в Linuxgrep
(или жеawk
и т. д.) и отображать результаты. К сожалению, я привожу ужасно упрощенные примеры, которые не демонстрируют реальной полезности этих функций.Вы даже можете запускать графические приложения Windows из оболочки WSL/Linux. Совсем недавно Microsoft использовала эту функцию для обеспечения запуска интегрированного кода Visual Studio из WSL. Вы можете
code .
чтобы открыть текущий (Linux) каталог в (Windows) VSCode. Или жеcode ~/.bashrc
для редактирования конфигурации запуска. И многое другое.И по умолчанию WSL автоматически монтирует любые диски Windows под
/mnt/d
, и т.д. Таким образом, у вас есть возможность работать с файлами "Windows" из Linux. (Но не раньше, чем наоборот.)В это время,
bash.exe
а такжеubuntu.exe
были основными способами запуска WSL и доступа к оболочке Bash. На данный момент (ну, за последние несколько лет) они были отнесены к «историческим» командам (согласно документу Microsoft), и рекомендуемый метод является гораздо более гибким.wsl.exe
команда.Еще одно замечание для урока истории. Непонятным моментом (особенно в вопросах, размещенных здесь на сайтах Stack) является то, что Canonical назвала эту функцию «терминалом Ubuntu» (даже в документации, все еще доступной сегодня), и... ну... некоторые люди здесь очень расстраиваются, когда люди называют «Ubuntu» «терминалом». Просто не вините пользователей, которых вы видите, использующих эту терминологию. Это, ИМХО, вина Canonical за неудачный выбор слов.
Возможно, прозвище «терминал» предназначалось для информирования пользователя о том, что WSL был «только для командной строки». Не было встроенного X-сервера, и, следовательно, не было готового способа запуска графических приложений Linux в WSL. При этом в Windows можно было установить сторонний X-сервер.
Связанный с этим «терминологический спор» заключается в том, что в настоящее время Ubuntu устанавливается из Магазина Microsoft как «Приложение». Так что не удивляйтесь, если вы увидите, что некоторые люди называют его «приложением Ubuntu», хотя мы с вами знаем, что это «операционная система/ОС». ;-)
Пропустив время вперед, после первоначального выпуска стало доступно больше дистрибутивов, кроме Ubuntu. И, конечно же, люди поняли, что вы не ограничены Bash (в то время я был пользователем Zsh, а теперь перешел на Fish). Таким образом, сама функция, о которой изначально задавался этот вопрос, теперь действительно известна как «Подсистема Windows для Linux» (WSL) с установленным в ней дистрибутивом «Ubuntu».
Так что в настоящее время немного неправильно говорить об Ubuntu Bash в Windows, но вы все еще видите, что он используется, поскольку это было исходное название. Даже самый популярный сабреддит WSL по-прежнему носит историческое название r/bashonubuntuonwindows , хотя он охватывает весь WSL в целом (любой дистрибутив, любую оболочку).
Еще одним дополнительным шагом вперед для WSL в целом стало раскрытие файловой системы WSL в псевдосетевом общем ресурсе. Так, например, файлы для дистрибутива «Ubuntu» могут быть доступны в Windows через
\\wsl$\Ubuntu
. Это здорово, но иногда это сбивает с толку новых пользователей, которые могут редактировать (т. е. «искажать») свои~/.bashrc
с помощью Блокнота в Windows, который создает окончание строки Windows (CRLF), а не только LF в стандарте Unix/Linux.Я уверен, что за прошедшие годы произошли некоторые события, которые я здесь не упомянул, но следующая важная веха для WSL произошла, когда команда подготовила и (в 2020 году) выпустила «WSL2». Вот хорошее сравнение различий.
Самая большая разница заключается в том, что, в отличие от исходного WSL (теперь WSL1), WSL2 работает виртуализированно с настоящим ядром Linux (источник доступен здесь). Это открывает множество дополнительных возможностей, но одной из самых больших является возможность запускать контейнеры (например, Docker) непосредственно в WSL2.
Хотя ядро реально, большая часть оборудования (например, сетевые интерфейсы) виртуализирована. Таким образом, хотя вы можете делать такие вещи, как создание сетевых устройств TAP/TUN, вам необходимо подключить их к виртуальному сетевому адаптеру. Вы не сможете, например, соединить две реальные сетевые карты, работающие под Windows, из WSL2, используя
brctl
.Увеличение скорости WSL2 также довольно существенно, хотя лично я никогда не проводил прямых сравнений между «настоящей Ubuntu» на том же оборудовании, что и «WSL2». Поскольку WSL2 работает с файловой системой ext4 на виртуальном жестком диске (
ext4.vhdx
), операции с файлами в этой файловой системе особенно эффективны.Тем не менее, используя
/mnt/c
тип монтирования (по протоколу 9P) под WSL2 значительно медленнее , чем WSL1. Поэтому рекомендуется хранить все файлы, которые вы собираетесь редактировать, в WSL2. Либо так, либо сохраните копию установки WSL1 (что очень просто), чтобы работать с файловой системой Windows.В настоящее время «следующая большая вещь», запланированная в Windows 11, — это WSLg , который позволяет выполнять графические приложения Linux.
WSL Windows 11 в настоящее время также планирует иметь:
- Упрощенная поддержка установки и обновления WSL (
wsl --install
) - Возможность монтировать дополнительные физические и виртуальные диски в инстанс
- Поддержка графического процессора, поэтому приложения типа CUDA могут работать в WSL.
- Упрощенная поддержка установки и обновления WSL (
И что дальше после этого? Я сам понятия не имею, но лично я надеюсь на некоторый уровень поддержки Systemd. В настоящее время WSL использует собственный
/init
для настройки взаимодействия между Windows и Linux, таких как сетевые интерфейсы и монтирования, о которых я упоминал ранее. К сожалению, многие приложения для Linux (и особенно документы) предполагают поддержку Systemd. Тем не менее, вполне возможно обойти отсутствие Systemd, если вы понимаете, что пытаетесь сделать. Но это ставит в тупик многих новых пользователей WSL.
Части bash очень хорошо работают в WSL.
Части ядра не там. Например нет /sys/class/backlight/intel_backlight/brightness
Вы можете получить доступ к настройке яркости экрана. Есть команды Powershell, которые можно легко вызвать, если вы не возражаете против очень длинных имен полей в стиле COBOL. MS Powershell можно вызывать прямо изнутри bash. Таким образом, вы можете сказать, что мощные функции Windows теперь встроены в bash. По тому же признаку MS Powershell может назвать bash. Так что если истинный Powershell получает доступ к таким функциям, как grep
, awk
, head
, tail
, так далее.
Графический интерфейс для Ubuntu Desktop (gedit
, nautilus
и т.д.) работает только после установки VcXsrv
или что-то подобное.
Обмен файлами между Linux и Windows WSL сложен в настройке. Когда при перемещении файлов между общей папкой WSL+Linux NTFS у меня возникали некоторые "странные" права доступа к файлам либо из-за моего невежества, либо из-за недостатков программного обеспечения.
Скорость в WSL намного ниже, чем в Ubuntu. На самом деле вы можете увидеть экран рисования за символом, когда вы запускаете cal
или же toilet
: Каковы различия между Windows Bash и Cygwin?
Я думаю, что WSL - хороший продукт, и мне нравится возиться с ним при двойной загрузке в Windows-World. Он никогда не станет отличным продуктом из-за отсутствия финансирования у MS, и они действительно не хотят иметь отличный дистрибутив Linux Free-Ware. Если бы у вас было достаточно оперативной памяти, вы, вероятно, были бы счастливы с виртуальной машиной. Сейчас, когда цены на оперативную память увеличатся всего на 8 ГБ, а в середине 2019 года она будет расти, я с радостью остановлюсь на WSL и пока не буду обновлять 32 ГБ ОЗУ.
Я посетил несколько форумов MS и должен сказать, что Рич Тернер и члены его команды WSL - одни из самых хороших профессионалов, которых я видел.