BASH – оболочка пользователя подсистемы Windows для Linux (WSL) в Windows 10.
Начиная с 2016 в Windows 10 появилась возможность использования подсистемы Windows для Linux (WSL — W indows S ubsystem for L inux), позволяющей легко и просто установить из Microsoft Store некоторые дистрибутивы Linux, в том числе Debian, Ubuntu, Kali, Suse. Подробности — Linux в среде Windows 10. При использовании WSL, пользователь получает не изолированную виртуальную машину с Linux, а интегрированную в Windows подсистему с возможностью выполнения утилит командной строки из обеих ОС, запуск программ одной ОС из среды другой и т.п. Кроме того, WSL предоставляет пользователю Windows 10 возможность использования нескольких дистрибутивов Linux одновременно.
bash.exe — утилита командной строки в подсистеме Windows для Linux (Windows Subsystem for Linux), обеспечивающая оболочку bash пользователя (shell) операционной системы Linux. Представляет собой командный процессор, работающий, как правило, в интерактивном режиме в текстовом окне. Bash также может читать команды из файла, который называется скриптом или сценарием. Нужно отметить, что команда разработчиков подсистемы WSL, в том числе и bash.exe , проделала огромную работу над программой, и с каждым новым релизом Windows 10, ее возможности становятся все более приближенными к возможностям классической оболочки bash Linux, и приобретают дополнительные качества, направленные на обеспечение максимальной совместимости Windows и Linux.
Формат командной строки:
bash [длинные опции GNU] [опции] .
bash [длинные опции GNU] [опции] файл_со_скриптом.
Длинные опции GNU:
—debug
—debugger
—dump-po-strings
—dump-strings
—help
—init-file
—login
—noediting
—noprofile
—norc
—posix
—rcfile
—restricted
—verbose
—version
-ilrsD или -c команда или -O короткие параметры ( только при запуске)
-abefhkmnptuvxBCHP или опция -o
Для получения дополнительной информации о параметрах командной строки используется команда:
bash -c «help set»
Для получения подсказки по внутренним командам bash используется команда:
bash -c help команда
В системе могут быть установлены несколько дистрибутивов Linux, и один из них является дистрибутивом по умолчанию. Утилита работает именно с данным дистрибутивом. Список зарегистрированных в системе дистрибутивов можно получить с помощью команд:
wslconfig /l
или
Первым в списке дистрибутивов отображается дистрибутив по умолчанию:
kali-linux (по умолчанию)
Ubuntu
SLES-15
ubuntu2
Ubuntu-18.04
Дистрибутив по умолчанию можно сменить с помощью команд wsl или wslconfig :
wsl —setdefault kali-linux — определить дистрибутив kali-linux дистрибутивом по умолчанию.
wslconfig /setdefault ubuntu — определить дистрибутив ubuntu дистрибутивом по умолчанию.
При запуске bash.exe без параметров, программа выполняется в интерактивном режиме, ожидая ввода команд пользователем. Строка приглашения содержит имя пользователя, компьютера и текущий каталог, унаследованный из среды windows:
Логические диски Windows монтируются в среде Linux в точки монтирования /mnt/c для диска C: , /mnt/d для диска D: и т.д. Путь /mnt/c/WINDOWS/system32 соответствует C:\WINDOWS\system32 в Windows. Оболочка для дистрибутива Ubuntu запускается в контексте учетной записи суперпользователя root , но, например, для kali-linux — в контексте учетной записи пользователя.
Для просмотра переменных окружения можно воспользоваться командой env . Пример выводимой информации:
SHELL=/bin/bash
WSL_DISTRO_NAME=kali-linux
NAME=Win10n
PWD=/mnt/c/WINDOWS/system32
LOGNAME=user
HOME=/home/user
LANG=en_US.UTF-8
TERM=xterm-256color
USER=user
SHLVL=1
WSLENV=
PATH=/usr/local/sbin:/usr/local/bin: /usr/sbin:/usr/bin:/sbin:/bin /mnt/c/WINDOWS/system32: /mnt/c/WINDOWS: /mnt/c/WINDOWS/System32/Wbem: /mnt/c/WINDOWS/System32 /WindowsPowerShell/v1.0/: /mnt/c/WINDOWS/System32 /OpenSSH/: /mnt/c/Users/usr/AppData/Local/ Microsoft/WindowsApps
HOSTTYPE=x86_64
_=/usr/bin/env
Переменная WSL_DISTRO_NAME определяет имя дистрибутива Linux в подсистеме WSL . Переменная WSLENV может быть использована для обмена данными между скриптами, выполняющимися как в среде Linux, так и в среде Windows. Переменная PATH задает пути поиска исполняемых файлов в обеих ОС.
Работу в среде выбранного дистрибутива Linux следует начать с обновления пакетов программ, например, для пользователя kali-linux :
sudo apt update
sudo apt upgrade
Для случая выполнения оболочки bash в контексте учетной записи root, команда sudo не нужна:
apt update
Для удобства работы можно установить файловый менеджер Midnight Commander :
И, например, на левой панели отобразить файловую структуру Linux, а на правой – файловую структуру Windows:
Оболочка позволяет выполнять запуск программ как Linux, так и Windows:
ping yandex.ru — выполнить опрос узла yandex.ru утилитой ping из среды Linux
/mnt/c/WINDOWS/system32/notepad.exe — запустить приложение Блокнот из среды Windows
В случае запуска из текущего каталога, полный путь указывать не обязательно:
По соображениям безопасности, текущий каталог в Linux не включается в пути поиска исполняемых файлов, и должен быть указан явно — ./
Выполняемые командой bash скрипты (сценарии) могут находиться как в файловой системе Linux, так и в файловой системе Windows:
bash /home/user/scripts/test.sh — выполнить скрипт test.sh из домашнего каталога пользователя user Linux
bash /mnt/d/scripts/test.sh — выполнить скрипт test.sh из каталога файловой системы Windows D:\scripts
bash ./test.sh — выполнить скрипт test.sh из текущего каталога файловой системы (Windows или Linux).
Подсистема Windows для Linux не предоставляет пользователю полноценное ядро Linux, по крайней мере, на момент реализации в Windows 10.0.18362.295. По этой причине, например, невозможно установить драйверы ядра (kernel drivers), что накладывает определенные ограничения на использование программного обеспечения, которому необходим доступ к оборудованию – датчикам температуры, напряжения, контроля скорости вращения вентиляторов и т.п. (lm-sensors и ему подобное ПО).
При работе с командной строкой в Windows 10 вместо bash удобнее пользоваться новой командой wsl, а также новым Терминалом Windows вместо стандартной консоли.
Статья Оболочка BASH в Windows (Windows Subsystem for Linux)
Dragokas
Very kind Developer
Информация, которую можно получить по состоянию на текущий момент,
заставляет отнестись серьёзно к возможности появления новой командной оболочки
(a именно BASH) в новой версии (а именно #10) Microsoft Windows,
причём в самое ближайшее время (в августе).
Таким образом их (штатных инструментов ком. строки) становится в Windows уже три:
Утверждается, что это не виртуальная машина (хотя я считаю, что это именно она — вопрос терминологии).
Утверждается также, что по тем же принципам (в процессе-контейнере) можно запускать не только bash под Linux, но и любое приложение любой ОС.
Dragokas
Very kind Developer
Ubuntu интегрировали в Windows 10
Сегодня на конференции Build компания Microsoft расскажет о последних нововведениях, которые сделаны в новом билде Windows 10 Redstone. Незадолго до презентации стало известно, что на конференцию приглашены сотрудники Canonical, и этому есть веская причина.
Дело в том, что Microsoft совместно с Canonical сумели интегрировать операционную систему Ubuntu внутрь Windows 10 (что-то вроде эмулятора).видеозапись), а ещё раньше в своём блоге выложил несколько спойлеров.
«Это немного странно для меня, — пишет Дастин, — потому что я не использовал Windows уже около 16 лет. Но всё изменилось пару месяцев назад, когда погрузился в сверхсекретный (и абсолютно невероятный) проект между Microsoft и Canonical, который анонсировал сегодня во вступительной речи Кевин Галло».
Итак, в новом билде Windows 10 пространство пользователя Ubuntu и оболочка bash работают нативно в консоли cmd.exe!
Работает это следующим образом.
- Пользователь Windows 10
- Открывает меню «Пуск»
- Набирает там «bash» [enter]
- После чего открывается консоль cmd.exe
- С запущенным /bin/bash от Ubuntu
- С полным доступом ко всему пространству пользователя Ubuntu
- Да, там есть apt, ssh, rsync, find, grep, awk, sed, sort, xargs, md5sum, gpg, curl, wget, apache, mysql, python, perl, ruby, php, gcc,tar, vim, emacs, diff, patch.
- И большинство из десятков тысяч бинарных пакетов в архивах Ubuntu!
Дастин Кирклэнд говорит, что это не виртуальная машина, никаких контейнеров и не Cygwin, а нечто похожее на эмулятор, где системные вызовы Linux в реальном времени транслируются в системные вызовы Windows. Сейчас в Windows 10 используется Ubuntu 14.04 LTS.
Microsoft называет это «Windows Subsystem for Linux» (исходный код пока закрыт).
Трансляция вызовов очень эффективная: утилита sysbench показывает почти одинаковую производительность CPU, памяти и операций ввода/вывода.
Все логические диски, вроде C:, монтируются для чтения и записи в директории /mnt, то есть /mnt/c, /mnt/d и т.д. И наоборот, файловая система Ubuntu доступна через «Проводник» в C:\Users\Kirkland\AppData\Local\Lxss\rootfs\.
Из «подсистемы Linux» нормально запускается ssh.
Конечно, пока есть некоторые глюки, особенно с tty и vt100. Не очень хорошо работают byobu, screen и tmux. Но всё равно Microsoft и Canonical проделали огромную работу, что такое вообще стало возможным.
Dragokas
Very kind Developer
Windows Subsystem for Linux
Windows Subsystem for Linux (WSL) — подсистема Windows для приложений на базе Linux.
Подсистему WSL без лишних громких слов поместили в код Windows 10 (билд № 14251) в конце января 2016 года. Несколько дней спустя Алекс Ионеску высказал предположение о том, что две новые подсистемы внутри файлов lxcore.sys и lxss.sys могут стать вспомогательным средством разработки приложений под Linux для Windows-программистов. Участникам программы тестирования Windows Insider этот функционал стал доступен в Windows 10 Insider Preview Build 14316. Образ Linux был предоставлен партнером Microsoft — компанией Canonical (разработчиком Ubuntu) и загружается из Windows Store.
Главное предназначение подсистемы WSL состоит в том, чтобы эмулировать Linux (на начальном этапе — Ubuntu) в пользовательском режиме. В результате можно запускать нативную оболочку Bash для Ubuntu под операционной системой Windows. Подсистема WSL еще не готова к повсеместному использованию. Представитель компании Canonical сказал, что сейчас «она находится на ранней стадии — это всего лишь бета-версия».
Это не разновидность среды Cygwin, т.к. чтобы Linux-приложения Cygwin могли нативно работать под Windows, их код специально нужно перекомпилировать. А в WSL можно запускать «родные» ELF-бинарниках Ubuntu, с идентичной контрольной суммой, которые запускаются прямо из-под Windows. Для упрощения установки для пользователей Windows подготовлена специальная сборка Ubuntu, содержащая образ корневой системы с набором базовых приложений.
В WSL удалось полностью избавиться от использования ядра Linux, по сути пользовательское окружение Ubuntu работает поверх ядра Windows. Запуск исполняемых файлов Linux реализован путём включения специальной прослойки (код подсистемы закрыт), которая в режиме реального времени транслирует системные вызовы Linux в системные вызовы Windows. Концептуально, такой подход чем-то вроде среды WINE (только транслирует не WinAPI -> LinuxAPI, а наоборот LinuxAPI -> WinAPI).
Функциональность
Пользователю доступны apt, ssh, rsync, find, grep, awk, sed, sort, xargs, md5sum, gpg, curl, wget, apache, mysql, redis, python, perl, ruby, php, gcc, tar, vim, emacs, diff, patch и большинство бинарных пакетов из архива Ubuntu, содержащих консольные и серверные приложения. При этом некоторые приложения пока остаются неработоспособны, например, из-за неполной эмуляции терминала VT100 невозможно использовать byobu, screen и tmux.
Приложения Ubuntu выполняются в отдельном представлении файловой системы, повторяющей организацию файловой иерархии в Linux. Файловые системы Windows доступны на запись в форме разделов, примонтированных в директории /mnt. Например, директория «C:\Users\Kirkland\Downloads» доступна как «/mnt/c/Users/Kirkland/Downloads». А для Windows-приложений корневая ФС Ubuntu видна как «C:\Users\Kirkland\AppData\Local\Lxss\rootfs\». Для установки дополнительных пакетов и обновления системы применяется инструментарий apt с загрузкой штатных пакетов и обновлений из репозиториев Ubuntu.
В WSL подготовлена новая инфраструктура ядра Windows, которая предоставляет слой совместимости с Linux syscall API и специальный загрузчик, что позволяет напрямую запускать уже поставляемые в Ubuntu немодифицированные исполняемые файлы, так же как запускаются обычные программы для Windows. Для WSL в ядре Windows была специально реализована поддержка fork() и некоторых других специфичных системных вызовов POSIX и Linux, что позволило добиться реализации, более эффективной, чем при использовании эмуляции.
Система может запускать серверные приложения (поддержка графических приложений не планируется), но рассчитана скорее на их тестирование, чем на развёртывание замены Linux-серверов для промышленного применения. Однако утилита sysbench демонстрирует практически эквивалентные показатели работы процессора, оперативки и операций ввода-вывода. Система прошла подавляющее большинство LTP-тестов на производительность и работает хорошо. Проект нацелен только на предоставление инструментария командной строки для разработчиков.
По умолчанию подсистемы WSL в Windows нет. Для того чтобы ее установить, необходимо включить режим разработчика Developer Mode в секции «For developers» раздела «Update & security» системных настроек Windows. Затем необходимо найти «Windows Features», выбрать пункт «Turn Windows features on or off» и включить «Windows Subsystem for Linux (Beta)». После этого нужно запустить командную строку Windows cmd.exe и ввести в ней «bash», затем согласиться с установкой Ubuntu, когда появится соответствующий запрос. Пользователь будет уведомлен об окончании процесса установки и запуска новой среды.
Исторические корни
Идея уходит корнями в подсистему POSIX операционной системы Windows NT. NT Posix была задумана для того, чтобы запускать нативные бинарные коды для Unix внутри Windows NT. WSL не основывается на ранее доступной подсистеме POSIX (SUA), которая в NT 3.5.1 содержала лишь минимальный набор системных вызовов и позднее была заменена на систему Services for Unix (SFU), основанную на наработках Interix.
WSL является полностью новой реализацией и создавалась как проект независимый от конкретных дистрибутивов Linux. Ubuntu выбран для поставки первой версии как наиболее популярный дистрибутив в среде разработчиков, нет существенных технических причин (кроме полной и точной реализации системных вызовов), которые помешали бы поддержке пользовательских окружений других дистрибутивов в будущем.