Подсистема Windows для Linux (WSL) в Windows 10: Полное руководство

Подсистема Windows для Linux или Windows WSL – отличное решение для разработчиков, позволяющее им нативно работать в среде Linux прямо на своем компьютере под управлением Windows 10.

Если вы потратили слишком много времени на разделение жестких дисков, чтобы установить несколько систем Linux вместе с Windows, вам повезло с этой статьей.

Фея-кодер в Microsoft решила предоставить вам еще один вариант: Подсистема Windows для Linux (WSL). WSL значительно упрощает запуск системы Linux наряду с Windows и делает это более гибким.

В этом руководстве вы узнаете, как начать работу с WSL. Вы узнаете, как начать использовать некоторые удобные инструменты, делая WSL еще более универсальным, чем использование bash или PowerShell по отдельности.

Уменьшите количество вызовов на службу поддержки и обновляйте учетные данные кэша для удаленных пользователей, даже вне VPN, с помощью решения самостоятельного сброса пароля. Получите демонстрацию Specops uReset!

Что такое WSL?

WSL или C:\Windows\System32\wsl.exe – это инструмент Windows, который позволяет установить дистрибутив Linux как приложение из магазина Windows.

Поскольку WSL представляет собой обычный исполняемый файл Windows, вы можете вызвать его из командной строки или терминала PowerShell. Мы рассмотрим эту тему более подробно позже. А пока важно немного больше узнать о том, что делает WSL под капотом.

wsl.exe

Как включить WSL

Установка и включение WSL включает в себя установку дистрибутива Linux наряду с Windows 10. Но таким образом, чтобы обеспечить взаимодействие двух различных операционных систем друг с другом.

Предварительные требования

Если у вас проблемы с сбросом пароля при работе с Active Directory, обратите внимание на Specops uReset, безопасное решение для сброса пароля.

Для установки WSL на Windows у вас есть одно требование; у вас должен быть компьютер с Windows 10 64-бит, сборка 18917 или более поздняя.

Вы можете найти версию Windows 10, запустив утилиту winver.

Windows build 1809

Включение функции WSL Windows

Включение WSL – это процесс, который не требует загрузки. Это всего лишь одна функция Windows.

Чтобы включить WSL, откройте PowerShell от имени администратора и выполните следующую команду:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux 

Связано: Как запустить PowerShell от имени администратора

После завершения перезагрузите компьютер, и вы готовы!

Загрузка дистрибутива Linux для WSL

WSL не устанавливает дистрибутив Linux сам по себе. Вам нужно установить один. После перезапуска Windows 10 начните настройку выбранного вами дистрибутива Linux.

Сначала откройте Магазин Microsoft и поищите ‘WSL’. Вы скоро увидите список дистрибутивов Linux.

Затем выберите нужный вам дистрибутив и установите его. В этом руководстве будет использоваться Ubuntu 18.04. На момент написания этого урока у вас также есть несколько других доступных дистрибутивов, таких как:

  • Ubuntu 16.04 LTS
  • Ubuntu 18.04 LTS
  • OpenSUSE Leap 15
  • OpenSUSE Leap 42
  • SUSE Linux Enterprise Server 12
  • SUSE Linux Enterprise Server 15
  • Kali Linux
  • Debian GNU/Linux
  • Fedora Remix для WSL
  • Pengwin
  • Alpine WSL

Настройка версии WSL

Возможно, вам придется включить Linux для работы с WSL версии 2. Если это так, вы можете сделать это, следуя инструкциям ниже.

В консоли PowerShell:

  1. Узнайте, какие версии Linux у вас установлены, запустив wsl -l или wsl --list.
  2. После получения списка скопируйте название дистрибутива, с которым вы хотите работать в WSL2, и выполните wsl --set-version <Distro> 2, заменив <Distro> на скопированное вами название.
  3. Подтвердите успешность выполнения команды, запустив wsl -l -v или wsl --list --verbose. Эта команда вернет полный список дистрибутивов WSL и версию каждого дистрибутива.
Setting WSL Linux distro

Вы также можете установить версию WSL2 по умолчанию для любых дистрибутивов, которые вы установите в будущем, выполнив команду wsl --set-default-version 2

Запуск WSL

Чтобы начать использовать WSL, откройте терминал PowerShell и введите команду wsl. Если вы настроили WSL правильно, вы войдете в терминал bash, работающий на выбранном дистрибутиве WSL. Отсюда вы можете выполнять любые команды Linux по вашему желанию.

Ниже вы найдете ссылку на все опции, которые предоставляет wsl.exe при запуске.

Command Explanation Example
exec, -e Will run command using without using default shell wsl -e curl google.com
Passes anything after this parameter to default shell. Leaving the operator out will also work. wsl — curl google.com, wsl curl google.com
distribution, -d Opens a terminal in the specified distribution’s shell wsl -d Ubuntu-18.04
user, -u Runs WSL command as the specified user as long as user exists on that distro wsl -d Ubuntu-18.04 -u tux_user
export Exports the specified distribution to a tar file on your local system. wsl –export Ubuntu ./Test-Ubuntu.tar
import [–version] Imports a tar file as a new WSL distribution. Can specify WSL version with the –version option wsl –import Test-Ubuntu C:\data\Test-Ubuntu .\Test-Ubuntu.tar
list, -l [Options] wsl –list
all List all installed WSL distributions wsl -l –all
running List only WSL distributions that are currently running wsl -l –running
quiet, -q Only show WSL distribution names wsl -l -q
verbose, -v Show detailed information about all WSL distributions wsl -l -v
set-default, -s Sets the specified WSL distribution as the default distribution for WSL commands. wsl -s Test-Ubuntu
set-default-version Changes the default WSL version for all new distributions installed to that system wsl –set-default-version 2
set-version Changes the WSL version of the specified distribution wsl –set-version Test-Ubuntu 2
shutdown Immediately terminates all running WSL distributions wsl –shutdown
terminate, -t Terminates the specified WSL distribution wsl -t Test-Ubuntu
unregister Unregisters the specified WSL distribution wsl –unregister Test-Ubuntu
help Display information about using WSL wsl –help

Когда вы освоите использование этих параметров, вы обнаружите, что запуск и управление приложениями через WSL намного проще, чем управление виртуальными машинами Linux самостоятельно.

Быстрый совет: Узнайте все флаги и аргументы для WSL, выполнив команду wsl --help.

Когда закончите, введите команду exit, чтобы вернуться обратно в терминал PowerShell.

Обмен ресурсами Windows/Linux через WSL

Одна из лучших особенностей WSL заключается в том, что он может бесшовно обмениваться ресурсами Windows и Linux между собой. В настоящее время вы можете обмениваться файловыми системами, переменными среды, сетевыми ресурсами и инструментами командной строки, такими как cmd и PowerShell.

Все примеры, которые вы увидите в этом разделе, выполнены с использованием дистрибутива WSL Ubuntu Linux. Ваши возможности могут отличаться, если вы выбрали другой дистрибутив.

Обмен файловыми системами

Файловая система – одна из самых полезных вещей для обмена с WSL. WSL позволяет вам работать с обеими файловыми системами, как если бы они были одной.

Система файлов Windows 10 смонтирована как каталог в Linux, в то время как файловая система Linux будет смонтирована как папка в Windows.

Поиск файловой системы Linux из Windows с использованием переменных окружения

При установке дистрибутива Linux с подсистемой Windows для Linux (WSL) иногда добавляется переменная окружения Windows. В случае дистрибутива Ubuntu для WSL, будет создана переменная окружения с именем UBUNTU_HOME. Эта переменная окружения указывает на каталог Linux /home/ubuntu как из Windows, так и из WSL Ubuntu.

Путь, определенный в UBUNTU_HOME, можно использовать для запуска сценариев, использующих ресурсы между ними, или установки значения по умолчанию для терминала Windows (рассматривается далее).

Inspecting the WSL UBUNTU_HOME environment variable

Другие дистрибутивы могут определять аналогичную переменную окружения. После установки нового дистрибутива Linux вы можете проверить переменные окружения Windows с помощью команды PowerShell Get-ChildItem -Path $Env:\, чтобы узнать, были ли добавлены какие-либо переменные окружения.

Этот ярлык переменной окружения удобен, если вы хотите поместить все в /home/ubuntu. Но давайте немного глубже узнаем, как это произошло, и как еще можно к нему обратиться.

Нахождение файловой системы Linux из Windows через папку пакетов Microsoft Store

Не каждый дистрибутив WSL гарантирует простой способ ссылки на него. Важно научиться находить файловую систему Linux альтернативным способом.

Поскольку большинство дистрибутивов WSL Linux устанавливаются из магазина Microsoft, вы можете искать файловую систему Linux в том же месте, что и другие приложения из магазина Windows. Перейдите в %USERPROFILE%\AppData\Local\Packages\, чтобы найти каталог, куда идут ваши приложения из магазина Windows. Затем получите контроль над этим каталогом, так как он обычно защищен по умолчанию.

Вы увидите много подкаталогов в папке Packages, где может быть представлена файловая система вашего дистрибутива Linux. Для дистрибутива WSL Ubuntu, например, он находился в папке CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc для меня.

Если вы перейдете в папку Packages, вы найдете файловую систему Linux. Для WSL Ubuntu она находится в папке LocalState\rootfs. Это корневой каталог вашего дистрибутива Linux.

Linux filesystem under %USERPROFILE%/AppData/Local/Packages/

Поиск файловой системы Windows из Linux

Чтобы найти файловую систему Windows 10 из Linux, откройте WSL в Windows. WSL затем откроет терминал bash. Этот терминал bash начнется в вашем каталоге UBUNTU_HOME по умолчанию.

Вы также можете найти корень томов вашего хранилища Windows. Каждый из ваших буквенных дисков Windows (C, D, E и так далее) рассматривается как примонтированный диск из файловой системы Linux WSL. Вы найдете каждый том примонтированным как /mnt/c, /mnt/d и так далее, пока у вас есть права администратора.

Bash equivalent of running Get-ChildItem C:\Windows\System32 | Select-Object -First 5 running on WSL

Файловая система WSL2

Навигация по файловой системе WSL довольно простая. Любой, кто не знаком с структурой файловой системы Linux, оценит возможность перемещаться по ней с помощью Проводника Windows. Но если вы хотите перейти на WSL2, то это будет немного сложнее.

В WSL2 изменяется все, что касается обмена файловыми системами. Прежде всего, файловая система теперь представлена в виде виртуального жесткого диска в формате vhdx, а не каталога.

Файл vhdx можно найти в папке %USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState для дистрибутива WSL Ubuntu.

Вы обнаружите, что файлы VHDX можно монтировать в Windows с помощью инструмента Disk Manager. Однако виртуальные диски нельзя монтировать, когда дистрибутив WSL зарегистрирован.

Общие переменные среды

Переменные среды – это важная часть любой операционной системы, которая облегчает ссылку на программы и исполняемые файлы в любом месте вашего приложения.

До сборки Windows 10 17063 единственной общей переменной среды между Windows 10 и WSL Linux была переменная PATH. С тех пор возможно общение переменных среды с помощью переменной среды WSLENV.

Использование переменной среды WSLENV для обмена другими переменными среды может показаться немного мета. Чтобы обмениваться переменными среды между платформами, вам фактически придется устанавливать переменные среды внутри другой переменной среды.

Обзор

Обмен переменными среды является трехэтапным процессом, описанным ниже. Единственное основное отличие при обмене между Windows/Linux – это аргумент переключения (полная ссылка ниже).

  1. Определите переменную среды в Windows или Linux.
  2. Установите переменную среды WSLENV равной ранее определенной переменной среды, за которой следует аргумент переключения (для перевода пути).
  3. Прочитайте переменную среды в Windows или Linux.

Варианты обмена

Вы можете сделать переменные доступными четырьмя разными способами в зависимости от платформы, на которой вы хотите, чтобы переменная среды появлялась с помощью переключений (таблица показана ниже).

  • Файловая система Windows доступна только из самой себя
  • Файловая система WSL доступна только из WSL
  • Файловая система WSL доступна как в WSL Linux, так и в Windows
  • Файловая система Windows доступна как в WSL Linux, так и в Windows
Flag Explanation
/p Single path. A variable set with this will be translated between the Windows and WSL Linux and made available to both.
/l List of paths. Similar to /p, except it can accept more than one path. On Windows, this list will be delimited by semicolons while on WSL Linux it will be delimited by colons.
/u Unix path. A path set with this flag can only be accessed when invoking WSL Linux from Windows. Can be used with either the /p or /l flags
/w Windows path. A path set with this flag can only be accessed when invoking Windows from WSL Linux. Can be used with either the /p or /l flags

Перевод пути

Основной причиной обмена переменными среды является перевод путей. Как вы, возможно, уже знаете, в Windows есть папки профилей пользователей, а в Linux – директории профилей пользователей, например. У каждого пользователя есть предопределенная “домашняя папка”, например, C:\Users\<username> в Windows и /home/<username> в Linux.

С помощью переключений /p и /l WSL будет выполнять перевод этих путей каталога между платформами.

Поделиться и перевести пути Windows с Linux

Вы можете поделиться одним путем или несколькими путями одновременно, используя переключатели /p и /l.

На командной строке Windows, с определенной переменной среды Windows, называемой DESKTOP, присвойте значение DESKTOP/p переменной WSLENV. Это позволит вам получить к нему доступ из WSL Linux. Приведен пример ниже.

Setting variables in Windows and accessing in Linux

Точно такая же процедура может быть выполнена для нескольких путей одновременно с использованием переключателя /l.

Поделиться и перевести пути Linux с Windows

Чтобы поделиться и перевести путь Linux с Windows, используется та же процедура, что и в Windows, хотя и с использованием команд, специфичных для Linux, для установки переменных среды.

Для более глубокого изучения совместного использования переменных среды ознакомьтесь с этой статьей Microsoft.

Поделиться сетевыми ресурсами

Компонент сетевого взаимодействия – еще один удобный ресурс для совместного использования между Windows и WSL Linux.

Физические против виртуализированных сетевых интерфейсов

В WSL2 сетевые интерфейсы виртуализированы. Виртуализированные сетевые интерфейсы означают, что экземпляры сети WSL2 могут иметь различные конфигурации IP по сравнению с экземплярами Windows 10.

На момент написания этого текста IP-адреса для WSL2 Linux используют сетевое адресное преобразование (NAT) для доступа к сетевым ресурсам на Windows, хотя Microsoft упомянула, что удаление NAT стоит высоко в списке проблем для решения.

Same comparison from earlier, but against a WSL2 distro

Разрешение DNS клиента

WSL по-прежнему будет создавать файлы /etc/resolv.conf и /etc/hosts для обеспечения разрешения DNS. Пока вы явно не переопределите это поведение в файле /etc/wsl.conf, разрешение DNS клиента будет продолжать работать как ожидается.

Вы узнаете больше о файле wsl.conf позже в этом посте.

Использование PowerShell и Bash вместе

Одной из самых крутых функций WSL является возможность бесшовно передавать информацию в PowerShell и Bash на WSL.

PowerShell –> Bash

Поскольку исполняемый файл WSL принимает ввод из конвейера, вы можете вызывать команду wsl.exe внутри PowerShell и принимать stdin. Это позволяет использовать WSL для передачи целых объектов из PowerShell в WSL, которые затем обрабатываются в терминале bash. Вот пример.

Passing PowerShell to grep

Bash –> PowerShell/Cmd

Вы также можете легко передавать информацию из bash в WSL в PowerShell и cmd. Ниже приведен пример выполнения команды Linux ls и передачи вывода командлету PowerShell Select-Object через конвейер.

Passing Bash output to PowerShell

Вы также можете вызывать некоторые утилиты Windows cmd из WSL и передавать вывод обратно в Linux, при условии, что обе команды находятся в системном пути.

Помните, что WSL знает, что такое системный путь на обеих сторонах, потому что он имеет доступ к переменной среды Windows PATH по умолчанию

Ниже вы можете видеть, что вы можете запустить ipconfig, который является командой Windows, из WSL и передать этот вывод команде Linux grep. Вы также можете увидеть противоположное вызову команды Linux which и передачу вывода команде Windows ipconfig.

Executing a Windows command in Linux

Проблемы перевода

Существуют некоторые ограничения при передаче вывода команд туда и обратно между bash и PowerShell.

Одна из крупных проблем – это то, как PowerShell и bash возвращают информацию. PowerShell является объектно-ориентированным языком программирования, в то время как bash – это инструмент манипулирования строками. Любые объекты PowerShell, переданные в bash, будут преобразованы в строку. Наоборот, любой вывод bash, переданный в PowerShell, будет преобразован в объект строки.

Вы можете частично обойти это поведение, преобразуя или явно приводя типы объектов в PowerShell, как показано в примере ниже. Но если вы ожидаете передавать объекты между PowerShell и WSL без какой-либо дополнительной работы, вы будете разочарованы.

Problems passing objects

Приведя вывод bash к классу [datetime] в PowerShell, теперь у нас есть допустимый объект PowerShell, который мы можем использовать в нашем скрипте. Если вы пишете сценарии, которые должны перемещаться из Windows в WSL и обратно, это возможно с небольшим изменением кода.

Установите графический интерфейс Windows Subsystem for Linux с Xfce4

Когда командные инструменты не достаточно, приходит время использовать графические интерфейсы. Если вам нужно запустить графическую утилиту на WSL, исследовать пользовательское дистрибутив или вы еще не знакомы с bash, вы можете установить Linux GUI.

Xfce

В Linux есть много доступных рабочих окружений. Одно из самых распространенных для установки в WSL называется Xfce. На момент написания этой статьи Xfce находится на версии 4. Другие рабочие окружения также доступны, но в этой статье вы узнаете, как настроить Xfce4.

xRDP

Когда у вас настроена Linux-среда рабочего стола, вам понадобится служба, которая понимает протокол RDP. В этой статье мы сосредоточимся на сервере xRDP. xRDP – это открытый RDP-сервер для Linux, который позволяет вам использовать клиенты RDP для подключения к Linux так же, как если бы вы подключались к хостам Windows.

Настройка

Чтобы получить доступ к Linux GUI из Windows с использованием Xfce4 и xRDP, следуйте инструкциям ниже. В терминале WSL:

  1. Загрузите и установите Xfce4 – Загрузите и установите Xfce4 с помощью команды sudo apt-get -y install xfce4 && sudo apt-get -y install xubuntu-desktop. Это займет некоторое время. Подождите.
  2. Установите сервер xRDP – Загрузите и установите xRDP, выполнив команду sudo apt-get -y install xrdp.
  3. Настройте xRDP для xfce4 – echo xfce4-session > ~/.xsession
  4. Перезапустите xRDPsudo service xrdp restart
  5. Найти IP-адрес WSL дистрибутиваifconfig | grep inet

На данном этапе вы должны быть способны открыть сеанс RDP с Windows 10. Откройте окно подключения к удаленному рабочему столу, используя mstsc и укажите IP-адрес Linux, найденный на шаге #5.

Если все пройдет успешно, вы сможете открыть соединение RDP с Linux дистрибутивом, работающим на вашей операционной системе Windows, как показано ниже.

Windows Subsystem for Linux GUI with Xfce4 and xRDP

Советы и хитрости

Теперь, когда вы знаете основы WSL и как их использовать, что дальше? К счастью, есть много инструментов, которые либо созданы для работы с WSL, либо хорошо с ним совместимы.

Настройка элементов конфигурации WSL при загрузке с wsl.conf

A configuration file exists in the WSL at /etc/wsl.conf. This file contains configuration settings that run every time the WSL distro is started. When the wsl.conf file exists, WSL will ingest any setting in this file every time the Linux distro is started.

Есть несколько разделов внутри файла wsl.conf, которые вы можете настроить.

  • Automount – Монтирование дисков из Windows при старте
  • Network – Генерация resolv.conf или файла hosts
  • Interop – Включение или отключение взаимодействия с Windows

Для получения более подробной информации о файле wsl.conf, посетите страницу Microsoft Настройка параметров запуска WSL.

Работа на WSL с Visual Studio Code (VS Code)

Похоже, что VS Code интегрируется со всем, и WSL не исключение. Изнутри VS Code вы можете настроить рабочее пространство на вашем WSL дистрибутиве, но полностью управлять им с помощью VS Code на Windows. Вам даже не нужно запускать терминал!

Для настройки VS Code в Windows для работы с WSL вам, очевидно, сначала понадобится установленный VS Code для Windows. Убедитесь также, что у вас установлено расширение Remote – WSL для VS Code.

После установки расширения вы можете подключиться к нему, открыв терминал WSL и запустив code <workspace>. <Workspace> – это каталог, из которого вы хотите запустить VS Code. VS Code затем определит, что вы находитесь в дистрибутиве WSL, откроет окно и установит соединение с рабочим пространством.

Подтвердите успешное выполнение, обратив внимание на значок соединения с WSL в левом нижнем углу VS Code. Вы должны увидеть, что он имеет название вашего дистрибутива WSL.

Working with WSL and Visual Studio Code

Вы даже можете использовать встроенный терминал для взаимодействия непосредственно с рабочим пространством WSL. Нет необходимости запускать отдельное окно для команд git bash.

Добавление подсистемы Windows для Linux в Windows Terminal

Еще одно полезное применение WSL – добавление его консоли в Windows Terminal.

Внутри Windows Terminal вы можете добавить каждый дистрибутив WSL в свою собственную вкладку. Вы также можете настроить внешний вид каждой вкладки, чтобы не потеряться.

Если вы используете дистрибутив WSL, который устанавливает переменную среды для домашнего каталога пользователя, такую как UBUNTU_HOME, вы также можете установить его в качестве начального каталога для вашего терминала.

Checking the date in PowerShell and Bash

Если вы хотите получить полное видео руководство по настройке WSL для работы с терминалом Windows, посмотрите видео-инструкцию от TechSnips ниже.

Заключительные мысли

Прекратите борьбу с вызовами сброса пароля и блокировками учетных записей в Active Directory. Получите БЕСПЛАТНЫЙ пробный период Specops uReset.

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

Похоже, что WSL станет ключевым компонентом новой стратегии Microsoft в отношении открытого исходного кода. Если Microsoft собирается конкурировать с Apple за то, чтобы быть устройством, на котором разработчики пишут свой код, это будет трудная борьба. Но WSL – это сильная карта в игре.

WSL приносит много приветственных преимуществ для разработчиков, таких как:

  • Существенно меньший вес по сравнению с запуском локальных виртуальных машин Linux
  • Исключение накладных расходов на установку и управление гипервизором
  • Нет необходимости в многопартиционных жестких дисках
  • Нет более сложных загрузчиков grub

WSL просто включается и работает, так что мы все можем кодировать счастливо до конца.

Source:
https://adamtheautomator.com/windows-subsystem-for-linux/