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

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

1. Описание команды WSL.

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

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

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

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

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

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

1.2.2. Параметры.

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

1.2.3. Аргументы для управления подсистемой 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 > — отменить регистрацию (удалить) указанный дистрибутив.
  • —upgrade < DistributionName > — дистрибутив переводится в формат файловой системы WslFs.
  • —help — отобразить справку по использованию wsl.exe.

2. Примеры использования WSL.EXE для запуска приложений.

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

C:\ wsl --help

2.2. То же, что и в предыдущем примере, но с использованием синтаксиса укороченных параметров:

C:\ wsl –h

2.3. Отобразить список дистрибутивов Linux, зарегистрированных в системе:

C:\ wsl –list

Пример отображаемой информации:

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

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

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

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

C:\ wsl.exe

2.5. Запустить дистрибутив Ubuntu:

C:\ wsl -d Ubuntu

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

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

C:\ wsl -e ls -l /etc

2.7. То же, что и в предыдущем примере, но команда выполняется в среде дистрибутива sles-15:

C:\ wsl -d sles-15 -e ls -l /etc

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

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

C:\ wsl -e env

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

C:\ 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.

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

C:\ wsl -d kali-linux -u root ifconfig

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

Напрашивается решение объединить установку и запуск в контейнер:

C:\ wsl apt-get install mc && mc

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

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

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

C:\ wsl apt-get install mc & wsl mc

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

C:\ wsl ping ya.ru

Выполнение команды ping.ya.ru в среде Windows 10:

C:\ wsl –e /mnt/c/windows/system32/ping.exe ya.ru

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

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

C:\ wsl --export kali-linux D:\kali-linux.tar

3.2. Импорт указанного TAR-файла D:\ubuntu.tar в качестве нового дистрибутива ubuntu2, размещаемого в каталоге D:\linux\ubuntu2:

C:\ wsl --import ubuntu2 D:\linux\ubuntu2 D:\ubuntu.tar

При стандартной установке дистрибутивы Linux устанавливаются в каталог «C:\Users\имя пользователя\Local Settings\Packages»

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

C:\ wsl --list --all

3.4. Отобразить список выполняющихся в данный момент дистрибутивов:

C:\ wsl --list –running

3.5. Установить дистрибутив ubuntu2, в качестве дистрибутива по умолчанию:

C:\ wsl –setdefault ubuntu2

3.3. Завершить работу дистрибутива Ubuntu:

C:\ wsl -t Ubuntu

3.4. Отменить регистрацию дистрибутива Ubuntu:

C:\ wsl --unregister ubuntu

3.5. Выполнить перевод дистрибутива Ubuntu в формат файловой системы WslFs:

C:\ wsl --upgrade Ubuntu