WSL – запуск исполняемых файлов и конфигурирование подсистемы Windows для Linux (WSL) в Windows 10 и старше.



В современных версиях операционной системы Windows 10 имеется возможность использования подсистемы Windows для Linux (WSL - Windows Subsystem for Linux), позволяющей легко и просто установить из Microsoft Store некоторые дистрибутивы Linux, в том числе Debian, Ubuntu, Kali, Suse. Подробности - Подсистема Windows для Linux в среде Windows 10. При использовании WSL, пользователь получает не изолированную виртуальную машину с Linux, а интегрированную в Windows подсистему с возможностью выполнения утилит командной строки из обеих ОС, запуск программ одной ОС из среды другой и т.п. Кроме того, WSL предоставляет пользователю Windows 10 возможность использования нескольких дистрибутивов Linux одновременно. Добавлю, что многие пользователи тратят огромные усилия на установку графической оболочки Linux в WSL, что не имеет смысла - в современных версиях Windows можно создать виртуальную машину и установить в ней любую операционную систему Linux при использовании стандартного сервера виртуализации Hyper-V, являющегося компонентом системы. Пример - Установка Linux Mint на виртуальную машину Hyper-V Windows 10. После включения компонент Hyper-V, возможна установка штатными средствами нескольких операционных систем на одном физическом компьютере и использования их одновременно с основной системой. А подсистема WSL предназначена в основном для отладочных работ с минимальным использованием ресурсов системы и интеграции возможностей командной строки Linux в сценарии Windows.

wsl.exe - утилита командной строки для выполнения программных файлов Linux и административных операций в подсистеме Windows для Linux (Windows Subsystem for Linux). Кроме функции запуска исполняемых файлов, возможности утилиты по управлению дистрибутивами Linux почти полностью соответствуют возможностям утилиты wslconfig.exe

Формат командной строки:

wsl.exe [Аргументы] [Параметры...] [командная строка]

Параметры командной строки:

Аргументы для запуска двоичного кода Linux:

- Если командная строка не указана, то wsl.exe запускает стандартную оболочку bash дистрибутива Linux, используемого по умолчанию.

- --exec, -e < командная строка > - выполнение указанной командной строки без использования стандартной оболочки Linux.

- -- - Передача оставшейся командной строки как есть.

Параметры:

--distribution, -d < DistributionName > - Запуск указанного дистрибутива Linux. Параметр DistributionName должен принимать значение имени дистрибутива Linux, присвоенное ему в подсистеме WSL, например SLES-15 для SUSE Linux Enterprise Server 15. Список зарегистрированных в системе дистрибутивов можно получить с помощью команды

wsl –list или в сокращенном варианте - wsl –l

--user, -u < UserName > - Запуск от имени указанного пользователя.

Аргументы для управления подсистемой Windows для Linux:

--export - Экспорт дистрибутива DistributionName в TAR-файл FileName

--import < DistributionName > < InstallLocation > < FileName > - Импорт указанного TAR-файла в качестве нового дистрибутива DistributionName в каталоге InstallLocation

--list, -l [[--all] –running] - отобразить список дистрибутивов Linux, зарегистрированных в системе. При указании параметра --all отображается список всех дистрибутивов, включая те, которые сейчас устанавливаются или удаляются. При указании параметра --running отображается список выполняющихся на данный момент дистрибутивов.

-setdefault, -s < DistributionName > - установить указанный дистрибутив в качестве дистрибутива по умолчанию.

--terminate, -t < DistributionName > - прекратить выполнение указанного дистрибутива.

--unregister < DistributionName > - отменить регистрацию (удалить) указанный дистрибутив.

update - обновление WSL

--upgrade < DistributionName > - дистрибутив переводится в формат файловой системы WslFs.

--help - отобразить справку по использованию wsl.exe.


Примеры использования wsl.exe

wsl --help - отобразить подсказку по использованию wsl.exe.

wsl –h - то же, что и в предыдущем примере, но с использованием синтаксиса укороченных параметров.

wsl –list - отобразить список дистрибутивов Linux, зарегистрированных в системе. Пример отображаемой информации:

Распределения подсистемы Windows для Linux:

Ubuntu (по умолчанию)
kali-linux
SLES-15
Ubuntu-18.04

wsl –l –v - отобразить список дистрибутивов с версиями WSL.

В данном случае термин ”распределение” нужно воспринимать как ”дистрибутив”. На сегодняшний день перевод сообщений утилиты wsl.exe и документации по подсистеме WSL на русский язык оставляет желать лучшего, и в некоторых случаях проще воспринимается информация на английском языке.

Первым в списке зарегистрированных в Windows 10 дистрибутивов Linux отображается дистрибутив, установленный по умолчанию. Именно этот дистрибутив используется для запуска исполняемых файлов Linux, если явно не указано имя другого дистрибутива.

wsl.exe - если параметры командной строки не заданы, выполняется запуск дистрибутива Linux, установленного по умолчанию.

wsl -d Ubuntu - запустить дистрибутив Ubuntu. Для завершения работы в консоли Linux можно использовать команды logout или exit. После запуска дистрибутива отображается стандартный эмулятор терминала Linux с приглашением к вводу команд. Пользователю предоставляется стандартная оболочка bash.

wsl -e ls -l /etc - выполнить команду ls -l /etc для дистрибутива по умолчанию (отобразить содержимое каталога /etc в подробном формате).

wsl -d sles-15 -e ls -l /etc - то же, что и в предыдущем примере, но команда выполняется в среде дистрибутива sles-15

Для идентификации дистрибутива сценариями, можно использовать стандартную для WSL переменную окружения WSL_DISTRO_NAME.

Для просмотра переменных окружения дистрибутива по умолчанию, можно воспользоваться командой:

wsl -e env - отобразить переменные окружения. В текущих версиях утилиты wsl.exe допускается форма командной строки без параметра -e:

wsl env

Пример отображаемой информации о переменных окружения:

HOSTTYPE=x86_64
LANG=C.UTF-8
WSL_DISTRO_NAME=Ubuntu
USER=root
PWD=/mnt/c/WINDOWS/system32
HOME=/root
NAME=Win10
SHELL=/bin/bash
TERM=xterm-256color
SHLVL=1
LOGNAME=root
PATH=/usr/local/sbin:/usr/local/bin: /usr/sbin:/usr/bin:/sbin:/bin:/usr/games: /usr/local/games:/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/User/AppData/Local/ Microsoft/WindowsApps
WSLENV=
_=/usr/bin/env


Как видим, текущий каталог, определяемый значением переменной PWD принимает значение, соответствующее текущему каталогу на момент запуска wsl.exe, в данном случае, C:\Windows\System32, что соответствует /mnt/c/WINDOWS/system32 в Linux.

Переменную WSLENV можно применить для совместного использования сценариями Windows и Linux.

Пути поиска исполняемых файлов включают в себя как каталоги файловой системы Windows, так и каталоги Linux.

wsl -d kali-linux -u root ifconfig - отобразить конфигурацию сетевых интерфейсов дистрибутива kali-linux от имени суперпользователя root.

Одновременное применение команд разных ОС с разными переменными окружения и различным синтаксисом может вызывать некоторые трудности, Например, нужно установить и сражу же запустить в среде WSL файловый менеджер Midnight Commander ( mc). Напрашивается решение объединить установку и запуск в контейнер:

wsl apt-get install mc && mc

Но, интерпретатор команд Windows воспримет специальный символ & как предназначенный командной оболочке Windows и интерпретирует вводимую строку как 2 команды:

Wsl apt-get install mc - установить утилиту mc в среде Linux по умолчанию
mc - выполнить команду mc в среде Windows 10

Чтобы установленная программа mc выполнялась в среде Linux, она должна запускаться с помощью wsl.exe:

wsl apt-get install mc & wsl mc

Кроме того, необходимо учитывать, что имена некоторых команд в Linux и Windows совпадают, а в путях поиска исполняемых файлов присутствуют каталоги обеих операционных систем, а также то, что текущим каталогом на момент выполнения команд Linux, будет каталог, бывший текущим на момент запуска утилиты wsl.exe.

wsl ping ya.ru - выполнение команды ping.ya.ru в среде дистрибутива Linux, установленного по умолчанию.

wsl –e /mnt/c/windows/system32/ping.exe ya.ru - выполнение команды ping.ya.ru в среде Windows 10.

Примеры использования WSL.EXE для администрирования дистрибутивов Linux.



wsl --export kali-linux D:\kali-linux.tar - экспорт дистрибутива kali-linux в TAR-файл D:\kali-linux.tar

wsl --import ubuntu2 D:\linux\ubuntu2 D:\ubuntu.tar - импорт указанного TAR-файла D:\ubuntu.tar в качестве нового дистрибутива ubuntu2, размещаемого в каталоге D:\linux\ubuntu2. При стандартной установке дистрибутивы Linux устанавливаются в каталог "C:\Users\имя пользователя\Local Settings\Packages"

wsl --list --all - отобразить список установленных дистрибутивов Linux, включая те, которые устанавливаются или удаляются в данный момент времени.

wsl --list –running - отобразить список выполняющихся в данный момент дистрибутивов.

wsl –setdefault ubuntu2 - установить дистрибутив ubuntu2, в качестве дистрибутива по умолчанию.

wsl -t Ubuntu - завершить работу дистрибутива Ubuntu

wsl --unregister ubuntu - отменить регистрацию дистрибутива ubuntu (удалить дистрибутив ubuntu)

wsl --upgrade Ubuntu - выполнить перевод дистрибутива Ubuntu в формат файловой системы WslFs.

wsl –update - проверить наличие обновлений и обновить подсистему WSL

wsl –shutdown - завершить работу подсистемы. Результат аналогичен перезагрузке компьютера с реальной ОС.

Необходимо отметить, что подсистема WSL постоянно развивается и синтаксис утилиты wsl.exe также может изменяться. Кроме того, имеется две реализации подсистемы WSL - WSL и WSL 2, которые значительно различаются своими возможностями – WSL значительно уступает WSL2, но менее требовательна к оборудованию. Для использования WSL2 кроме ”Подсистемы Windows для Linux”, должен быть включен компонент ”Платформа виртуальной машины” и должна быть включена аппаратная поддержка виртуализации.

Получить список установленных дистрибутивов Linux и проверить версию WSL, можно задав команду:

wsl -l -v

Будет отображен список установленных дистрибутивов и версия WSL:

”Список


При начальном конфигурировании подсистемы WSL командой wsl –install выполняются следующие действия:

- Включаются дополнительные компоненты WSL и платформы виртуальных машин;

- скачивается и устанавливается последняя версия ядра Linux;

- задается WSL 2 в качестве среды по умолчанию;

- Скачивается и устанавливается дистрибутив Ubuntu Linux (может устанавливаться дистрибутив с длительной поддержкой Ubuntu Linux LTS )

Соответственно, все последующие дистрибутивы будут устанавливаться с поддержкой WSL2. При необходимости, С помощью команды wsl --set-version можно перейти с версии WSL 2 на WSL 1 или обновить ранее установленные дистрибутивы Linux с версии WSL 1 до WSL 2

wsl --set-version Ubuntu-23.04 2 - настроить дистрибутив Ubuntu-23.04 на использование WSL2


Настройка дистрибутива на версию WSL2 возможна, если имеется ее программно-аппаратная поддержка. Поскольку компонент ”Платформа виртуальных машин” использует архитектуру виртуализации Hyper-V, то при включенном WSL 2 могут прекратить работу другие средства виртуализации, в том числе и VMWare Workstation и Oracle VM Virtualbox старых версий. Хотя разработчики средств виртуализации постоянно работают над совместимостью своих программных продуктов, использование WSL 2 не всегда возможно как по причине несоответствия компьютера техническим требованиям, так и по невозможности совместной работы подсистемы WSL 2 с другими средствами виртуализации.

В настоящее время компания Microsoft предлагает для разработчиков виртуальные машины с последними версиями Windows, пакетами SDK и примерами программ для использования в среде VMWare, Hyper-V, Virtualbox и Parallels, но пока не всегда совместимые с WSL 2

Скачать виртуальные машины для разработчиков с ограниченным периодом использования

В заключение добавлю, что в Windows 10 Professional и старше реализована возможность установки и использования виртуальных машин с Linux ( и не только ) с помощью стандартного сервера виртуализации от Microsoft Hyper-V. Примеры:

Установка Linux Mageia на виртуальную машину Hyper-V Windows 10.

Установка Linux Mint на виртуальную машину Hyper-V Windows 10.

Установка Linux Ubuntu на виртуальную машину Hyper-V Windows 10/11.






Весь список команд CMD Windows



Рейтинг@Mail.ru