BASH – оболочка пользователя подсистемы Windows для Linux (WSL) в Windows 10
Начиная с 2016 в Windows 10 появилась возможность использования подсистемы Windows для Linux
(WSL - Windows Subsystem for Linux), позволяющей легко и просто установить из
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.
-ilrsD или -c команда или -O короткие параметры ( только при запуске)
-abefhkmnptuvxBCHP или опция -o
Для получения дополнительной информации о параметрах командной строки используется команда:
bash -c "help set"
Для получения подсказки по внутренним командам bash используется команда:
bash -c help команда
В системе могут быть установлены несколько дистрибутивов Linux, и один из них является дистрибутивом по умолчанию. Утилита работает именно с данным дистрибутивом. Список зарегистрированных в системе дистрибутивов можно получить с помощью команд:
wslconfig /l
или
wsl --list
Первым в списке дистрибутивов отображается дистрибутив по умолчанию:
kali-linux (по умолчанию)
Ubuntu
SLES-15
ubuntu2
Ubuntu-18.04
Дистрибутив по умолчанию можно сменить с помощью команд wsl или
wslconfig:
wsl --setdefault kali-linux - определить дистрибутив kali-linux дистрибутивом по умолчанию.
wslconfig /setdefault ubuntu - определить дистрибутив ubuntu дистрибутивом по умолчанию.
При запуске bash.exe без параметров, программа выполняется в интерактивном режиме, ожидая ввода команд пользователем. Строка приглашения содержит имя пользователя, компьютера и текущий каталог, унаследованный из среды windows:
root@win10n:/mnt/c/WINDOWS/system32
Логические диски Windows монтируются в среде Linux в точки монтирования /mnt/c для диска C:, /mnt/d для диска D: и т.д. Путь /mnt/c/WINDOWS/system32 соответствует C:\WINDOWS\system32 в Windows. Оболочка для дистрибутива Ubuntu запускается в контексте учетной записи суперпользователя root, но, например, для kali-linux - в контексте учетной записи пользователя.
Для просмотра переменных окружения можно воспользоваться командой env. Пример выводимой информации:
Переменная WSL_DISTRO_NAME определяет имя дистрибутива Linux в подсистеме WSL. Переменная WSLENV может быть использована для обмена данными между скриптами, выполняющимися как в среде Linux, так и в среде Windows. Переменная PATH задает пути поиска исполняемых файлов в обеих ОС.
Работу в среде выбранного дистрибутива Linux следует начать с обновления пакетов программ, например, для пользователя kali-linux:
sudo apt update
sudo apt upgrade
Для случая выполнения оболочки bash в контексте учетной записи root, команда sudo не нужна: apt update
apt upgrade
Для удобства работы можно установить файловый менеджер Midnight Commander:
apt install mc
И, например, на левой панели отобразить файловую структуру Linux, а на правой – файловую структуру Windows:
Оболочка позволяет выполнять запуск программ как Linux, так и Windows:
ping yandex.ru - выполнить опрос узла yandex.ru утилитой ping из среды Linux
/mnt/c/WINDOWS/system32/notepad.exe - запустить приложение Блокнот из среды Windows
В случае запуска из текущего каталога, полный путь указывать не обязательно:
./notepad.exe
По соображениям безопасности, текущий каталог в 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 вместо стандартной консоли.