Windows 10 install linux terminal

Cover image for How to Install a Linux Terminal on a Windows PC using Windows Subsystem for Linux

Introduction:

You may have used the linux terminal once, currently have a linux OS running on your computer or new to the term «Linux» and haven’t used the OS (operating system) before because you use a Mac or Windows but curious as to how it works, what it looks like, how to interract with it and the likes, this article is just exactly what you need.

This article will focus on how you can install a «Linux Terminal» into your Windows OS which will thereby enable you to use «Linux Terminal Commands» to perform tasks, script processes and so on without having to install a whole Linux OS just to do basic and complex linux processes or tasks. In addition, this causes no issues in our Windows Operating System and it is safe to say:

The Installation of a Linux Terminal into your windows OS causes no harm whatsoever to your Computer or Files. Infact, latest releases of the Windows OS such as 11 and 10 (The versions i have tried it in) are in support of it as you will see later in the article

What is WSL?

WSL simply means Windows Subsystem For Linux and it is a functionality being provided by Windows themselves but hidden to most basic Windows users. This is what I am referring to when I said installing the linux terminal into Windows. Yes.. Yes.. Yes.. and I know some of us are already saying «I know how to do it». 🙂🙂

If you are still reading this then you are interested in knowing how it works. Now that you know what we are about to do, Let’s not waste any more time and let’s dive right in.

System Requirements for WSL:

To run WSL here are the system requirements needed.

  • Windows Version: WSL is available on Windows 10 and later versions, including Windows Server.

  • 64-bit Windows: WSL requires a 64-bit version of Windows.
    Windows Build Version: Different versions of WSL have different requirements:

  • Virtualization: WSL 2 requires virtualization technology to be enabled in the BIOS/UEFI settings of your computer.

  • Hardware Virtualization: Your CPU should support hardware virtualization

  • Minimum RAM: While there isn’t a strict minimum, having at least 2GB of RAM is recommended for smooth operation.

  • Disk Space: The space required depends on the Linux distribution you install, but you should have a minimum of 1GB of free space.

Let us Install:

The very first step in the installation process is to open up your Windows Start Menu and search for «Turn Windows Features On or OFF» and click on it.

Search Windows Features:

Search For Windows Fetaures

Now that you have clicked on it, you should be presented with a window that look like the image below. Scroll down till you find the option for «Windows Subsystem for Linux». Turn it On.

Activate WSL:

Activate WSL

We now have the option turned on. The next step will be to restart your computer and open your windows powershell as an administrator.
in the powershell, type in this command: wsl --install -d Ubuntu

Note: For advanced and Experienced users, after the -d you can specify any Linux Distro of choice. Example: wsl --install -d Debian and to get a list of avaiable Distros to install, use this command: wsl --list --online

Here is a Visual:

Install The Terminal and follow the installation guide

Install WSL

At this point if you followed the installation process from the promt, you should have no issues.
you can now start your Linux terminal by calling the bash shell from your powershell using bash or by calling wsl -d (Distro name)

Starting your terminal

Start Your Terminal

Congratulations

You have now installed the a linux terminal on your Windows OS without the need for downaloading a whole Linux OS.
Spread the information 💡💡

Статья о настройке функциональности и внешнего вида bash-терминала Windows Subsystem for Linux (WSL) в Windows 10.

Введение

Я постоянно использую терминал для работы с git и автоматизации сборки проектов (вёрстка/фронтенд: компиляция pug и scss, обработка изображений, транспиляция js…). На моём рабочем компьютере стоит Windows 10, а на ноутбуке — OSX и мне хочется использовать одни и те же консольные команды на обеих системах, поэтому я использовал GitBash (терминал, устанавливающийся вместе с Git) внутри эмулятора (Cmder). Такая связка работала заметно медленнее терминала на OSX, поэтому я был воодушевлён новостью «В Windows 10 встроили подсистему Linux» (март 2016 г.), но тогда, в 2016 году, её использование разочаровало: нельзя было запускать из bash-терминала программы Windows, подсистема не определяла изменение файла, если изменение было сделано из Windows. Сейчас эти проблемы решены.

Спойлер

Главный выигрыш для меня — скорость. В моём стартовом репозитории есть трудоёмкая задача полной сборки проекта (компиляция, транспиляция, спрайты, шрифты, картинки…), с Gitbash она занимает 17 секунд, с bash-терминалом WSL — 10 секунд.

Упоминаемые в статье файлы

  • .bashrc
  • .dircolors
  • .bash_aliases
  • .inputrc
  • .vimrc

Установка Windows Subsystem for Linux (WSL)

В сети полно статей с инструкциями (по большей части, устаревших). Пользуйтесь официальной инструкцией с docs.microsoft.com и всё получится. Я установил Ubuntu, т.к. имею небольшой опыт ее использования.

После успешной установки можно запустить терминал подсистемы Linux командой bash в cmd.exe (или PowerShell) или кликом по иконке в меню «Пуск».

bash-терминал сразу после установки

Основы использования терминала Ubuntu в Windows 10

Это подсистема внутри Windows, чтобы использовать nodeJS и git, нужно поставить их в подсистему (даже если они уже установлены в Windows). Я выбрал вариант с Ubuntu, поэтому при установке nodejs пользовался этой инструкцией, а git установил командой sudo apt-get install git (не забудьте указать git-у своё имя пользователя и email).

Можно запускать приложения Windows. Попробуйте notepad.exe — запустится Windows-блокнот.

Диски Windows расположены в /mnt/ . Попробуйте cd /mnt/c/ && ls для перехода к диску С:/ и вывода его корневых директорий (по умолчанию вывод выглядит уныло, но это настраивается).

Директория пользователя расположена в ~ (cd ~ для переходя в неё). Просто напоминаю.

В Linux-системах заглавные и строчные символы — разные символы. При использовании автодополнения (Tab ) важно вводить символы в правильном регистре.

Директория пользователя подсистемы Linux физически у меня расположилась по довольно длинному пути (см. ниже). Сегмент nicothin — имя пользователя системы (как в начале пути (Windows), так и в конце (Ubuntu)).

c:\Users\nicothin\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\nicothin\

Если редактировать файлы Linux-подсистемы из Windows, то Linux в некоторых случаях не сможет получить к ним доступ (не хватит прав). После такого редактирования нужно в bash-терминале подсистемы выполнить что-то вроде chmod 777 ~/.bashrc (где ~/.bashrc — редактированный из Windows файл) и перезапустить терминал. Или можно использовать команду source ~/.bashrc (укажите редактированный файл) для применения внесённых изменений.

Как запускать Sublime Text из консоли Ubuntu

Если используете Sublime Text, добавьте путь к subl.exe в PATH в Windows, чтобы по команде в терминале subl.exe запускался Sublime Text:

  1. В проводнике сделайте правый клик на Этот компьютер, выберите Свойства, потом Дополнительные параметры системы.
  2. На вкладке Дополнительно нажмите кнопку Переменные среды.
  3. Сделайте двойной клик по Path для перехода к её редактированию.
  4. Нажмите кнопку Создать и добавьте путь к subl.exe.
    В моем случае это c:\Program Files\Sublime Text 3\.
  5. Перезапустите терминал.

Вконтакте ВКонтакте вконтакте вконтактов

Как добавить вызов Sublime Text из консоли

Настройка консоли Ubuntu

Цвета

Увы, сразу после установки консоль (особенно вывод команды ls ) выглядит «бородато» и «носит свитер».

bash-терминал WSL по умолчанию

Можно добавить файл с настройками цветового оформления (touch ~/.dircolors для создания файла) с этим содержимым.

Содержимое удобно добавлять из Windows, но тогда после сохранения файла в bash-терминале выполните chmod 777 ~/.dircolors и перезапустите терминал.

bash-терминал WSL после настройки цветов директорий и файлов

Переход к нужной директории при старте

Если при запуске терминала хочется попадать в директорию проектов, можно вписать в самом верху ~/.bashrc команду cd /mnt/d/projects/ (укажите путь к нужной директории).

Алиасы

Добавим файл (touch ~/.bash_aliases ) c этим содержимым и перезапустим bash-терминал.

Теперь по команде subl . откроется Sublime Text (текущая папка будет показана как проект), а по команде наподобие subl filename.txt можно быстро открывать файлы.

Странная проблема с алиасами

Я настраивал bash-терминал на двух домашних компьютерах с Windows 10 и на одном из них после добавления файла терминал при рестарте выводил 4 сообщения : command not found . Из-за чего — я так и не понял (права доступа были и владелец файла — я), но нашел строки в ~/.bashrc, которые к этому приводили. Это было подключение файла с алиасами:

if \[ -f ~/.bash_aliases \]; then
    . ~/.bash_aliases
fi

Решил проблему, закомментировав эти строки и вписав алиасы прямо в ~/.bashrc (в самом низу).

Показ git-ветки в командной строке

Шаг 1: добавим в начале ~/.bashrc функцию для показа ветки:

git_branch() {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

Шаг 2: определим переменную, отвечающую за приглашение командной строки, добавим в неё показ результата работы этой функции (см. .bashrc ). Получится что-то вроде:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]: \[\033[01;34m\]\w\[\033[00m\]\e[32m$(git_branch)\e[0m \$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

Мелкие улучшения

Есть довольно много действий в bash-терминале, на которые Windows 10 отреагирует звуковым сигналом (нажатие Backspace, когда уже нечего стирать, например). Чтобы это отключить, создайте ~/.inputrc со строкой set bell-style none .

Vim по умолчанию показывает довольно тёмный текст, что на тёмном фоне смотрится плохо. Можно создать ~/.vimrc со строкой set background=dark, чтобы текст стал более читаемым.

Замеченные баги

Работать с буфером обмена по умолчанию не комфортно (Ctrl + V, Shift + Insert не работают, приходится кликать (!!!) ПКМ по заголовку окна и выбирать ИзменитьВставить). Решается использованием терминала не самостоятельно, а внутри Cmder.

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

На одном из домашних компьютеров работает сохранение истории команд между сеансами, на другом не работает (хотя права доступа и владелец файла ~/.bash_history — активный пользователь и сохранение истории включено). Не критично.

Не работают инструменты копирования в буфер. К примеру, при настройке SSH для github.com, есть инструкция для Linux:

sudo apt-get install xclip
# Downloads and installs xclip. If you don't have `apt-get`, you might need to use another installer (like `yum`)
xclip -sel clip < ~/.ssh/id_rsa.pub
# Copies the contents of the id_rsa.pub file to your clipboard

Но её невозможно выполнить, т.к. xclip работать не будет. Решается использованием виндовской утилиты: clip.exe < ~/.ssh/id_rsa.pub

После загрузки Windows иногда (было всего дважды) отказывается работать. Помогает перезагрузка (это же Windows).

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

Баг bash-терминала: как будто он не установлен

Как заходить на сервер, запущенный в WSL, со сторонних устройств в одной локальной сети

Я пишу много html-страниц. В процессе работы у меня запущен локальный сервер, собирающий разметку, стили, javascript, спрайты и т.п. Бывает удобно запустить на основном компьютере сервер и зайти на него с помощью ноутбука, телефона, планшета (сервер доступен по IP, наподобие http://192.168.1.207:8080). Однако, встроенный в Windows 10 фаервол по умолчанию блокирует такие соединения.

Чтобы попасть на такой сервер, нужно добавить правило для брандмауэра:

WSL и локальный сервер: добавление правила в фаервол

  1. Найти с помощью поиска «Брандмауэр защитника Windows», открыть, нажать слева «Дополнительные параметры».
  2. В открывшемся окне Монитора брандмауэра выбрать (слева) «Правила для входящих…», нажать «Создать правило» (справа).
  3. Выбрать «Для порта», нажать «Далее».
  4. Выбрать «Определенные локальные порты», ввести номер порта (мой локальный сервер работает на порту 8080, его я и ввёл), нажать «Далее».
  5. Выбрать «Разрешить подключение», нажать «Далее», выбрать профили (я выбрал все), «Далее».
  6. Ввести какое-либо имя, нажать «Готово».

После этого получится зайти с любого устройства (в одной локальной сети) на запущенный в WSL на рабочем компьютере сервер.

Комфортное использование с Cmder

Для более тонкой настройки внешнего вида и комфортной работы с буфером обмена (привычное сочетание Ctrl + V для вставки) удобно использовать bash-терминал подсистемы Linux внутри cmder (эмулятор терминала, внутри которого можно запустить один из установленных в Windows терминалов). Для этого нужно добавить возможность старта WSL-консоли в настройках Cmder:

  1. Правый клик по иконке бургера в нижнем правом углу для перехода к настройкам.
  2. В разделе Startup выбрать радиокнопку Auto save/restore opened tabs, чтобы при рестарте не создавать вкладки заново.
  3. В разделе Startup, подразделе Tasks проверить наличие задачи WSL::bash. Если её нет, нажать кнопку Add/refresh default tasks… и согласиться на добавление задач.
  4. В списке задач появится пункт WSL::bash, при создании новой вкладки терминала нужно выбрать его.

bash-терминал внутри cmder

Если в списке задач есть пункт WSL::bash, но WSL не запускается при его выборе (в момент создания новой вкладки Cmder), то в настройках можно попробовать нажать Add/refresh default tasks… и согласиться на обновление списка задач (см. п. 3). Если и после этого не получается запустить терминал подсистемы (Cmder сообщает о проблеме и пишет, что по нажатию Enter закроет вкладку), то можно добавить свою собственную задачу, которая будет запускать cmd.exe и сразу вызывать в ней команду bash. Команда запуска терминала будет выглядеть так:

*cmd /k ""%ConEmuDir%..init.bat" " && bash

Запуск bash-терминала командой bash в cmd.exe

Вместо заключения

Я скачал и установил в систему шрифт Ubuntu Mono для большей аутентичности внешнего вида терминала.

Although Windows is the most widely used and most popular operating system for desktops and laptops, it is not as secure and open-sourced as Linux OS. That’s is why a lot of software developers and professionals prefer Linux OS.

Microsoft has started a partnership with Canonical, creators of Ubuntu Linux. This paved way for Linux users to use Linux on Windows. Yes, you can run Linux on top of Windows 10 without the need for a dual boot, or using VMWare/VirtualBox, or installing it as your main Operating System.

You can access various Linux commands and software from the Linux terminal in Windows 10. In this article, we’ll give you step-by-step instructions on how to install and run the Linux terminal on Windows 10 OS.

Enable Windows Subsystem for Linux (WSL) and Install Ubuntu in Windows 10

If you intend to run a Linux terminal on Windows 10, you must first turn on the ‘Windows Subsystem for Linux’ feature. Then you can download and install your choice of Linux distribution.

The Windows Subsystem for Linux (WSL) is a feature that creates a GNU/Linux environment that allows you to run core Linux command-line tools and services directly on Windows, alongside your desktop and modern store apps.

By enabling Windows 10’s Linux subsystem, you can install and run various Linux distributions (distros) such as Ubuntu, OpenSuse, SUSE Linux, Fedora, etc.

First, Check your Windows Version

But before we get into how to enable Windows Subsystem for Linux (WSL) and install Linux, you need to check if you are running a compatible version of Windows 10. WSL is only supported on both Windows 10 64-bit (from version 1607) and Windows Server 2019.

 To check your Windows version and build, go to ‘Settings’ from Windows Start menu.

Next, click ‘System’ setting.

Then, scroll down and select ‘About’ option at the bottom of the left pane to view About section.

On the About page, under Windows specifications, you can see the ‘Version’ and ‘OS build’ of your Windows 10.

Enable Windows Subsystem for Linux

There are two different types of WSL versions: WSL 1 and WSL 2. While they both provide smooth and continuous integration of Linux within Windows, WSL 2 is the latest and fastest version with supports full Linux kernel and system call compatibility. WSL 1 runs a translation layer which bridges the gap between Linux kernal and Windows.

  • To run WSL 2, you must be running Windows 10 x64 bit systems: Version 1903 or higher, with Build 18362 or higher.
  • To run WSL 1, you will need Windows 10 x64 bit systems: Version 1709 or higher, with Build 16215 or higher.

It doesn’t matter which version of WSL you want to run you must enable it first to use it. To do this, start type typing ‘Turn Windows features on and off’ into the Start Menu search field.

Select ‘Turn Windows features on and off’ control panel from the search result.

Then, scroll down to ‘Windows Subsystem for Linux’, tick the box in front of it, and click the ‘OK’ button.

Once the changes are applied, click ‘Restart now’ to restart your computer

If you want to only install WSL 1, you can now restart your computer and install your Linux distro.

Enable WSL 1 via PowerShell

You can also enable WSL via the ‘PowerShell’ command-line tool. This does the same job as the Windows Features control panel. For that, open ‘PowerShell’ as an Administrator and run the below command.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

Enable WSL 2

We recommend you upgrade your WSL to version 2 for faster performance speed, and to run a real Linux kernel directly on Windows 10. All you need to do is enable the ‘Virtual Machine Platform’ feature in addition to the ‘Windows Subsystem for Linux’ feature on the Windows features control panel (see below).

Wait for the changes to be applied, then restart your computer.

Enable WSL 2 via PowerShell

This first step to enable WSL 2 is enabling the Virtual Machine Platform feature component on Windows. You can also enable WSL 2 via the ‘PowerShell’ command-line tool. To do that, open ‘PowerShell’ as an Administrator and run the following additional command with the WSL 1 command.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Set WSL 2 as the Default Version

Before setting up WSL 2 as your default version for all Linux distributions, download the WSL Linux kernel package update for x64 systems.

Run the .msi installer downloaded and install it. It will take only seconds.

To set WSL 2 as your default version when installing a new Linux distribution, open PowerShell and run this command the following command:

wsl –set-default-version 2

Then restart your system to switch the feature from WSL 1 to WSL 2.

Install your Linux distribution of choice

WSL is enabled, now we will install a Linux distribution. First, search for ‘Microsoft Store’ in the Start Menu search field. Then, open it from the search result.

You’ll see a list of every Linux distributions currently available in the Windows Store which are supported by WSL.  

  • Ubuntu 16.04 LTS
  • Ubuntu 18.04 LTS
  • Ubuntu 20.04 LTS
  • openSUSE Leap 15.1
  • SUSE Linux Enterprise Server 12 SP5
  • SUSE Linux Enterprise Server 15 SP1
  • Kali Linux
  • Debian GNU/Linux
  • Fedora Remix for WSL
  • Pengwin
  • Pengwin Enterprise
  • Alpine WSL

All of theses distributions are available for free. For our tutorial, we’ll select ‘Ubuntu’.

From the Ubuntu distribution’s page, Click the ‘Get’ button.

Now, Ubuntu distribution will be downloaded and installed automatically on your computer.  

Once the installation finished, click the ‘Launch’ button to launch the terminal. You can also launch the app from the Windows Start Menu.

A new Ubuntu terminal window will appear. The first launch will take a few minutes to register the Ubuntu environment with WSL. Once that’s finished, the terminal will prompt you to create a ‘new Unix username’ and ‘new password’. Enter the new username and password and complete the setup.

Once, the set up finished, it will take you to the bash command line. It’s better to update the software right away. In Ubuntu, you can search for, download, and install software updates, all from the apt command.

Enter the below command to update the software. And you’ll be prompted for the password, enter the newly created password to run the command as an administrator.

sudo apt update

This ‘update’ command will update the Ubuntu repositories.

Ubuntu will download a series of package lists.

But they are not upgraded yet. To upgrade all available packages, enter the following command:

sudo apt upgrade

Enter ‘Y’ at the prompt to continue the installation.

The ‘dist-upgrade’ command upgrade packages to their latest versions.

Upgrade WSL1 to WSL 2 for Ubuntu

If you wish to upgrade the existing WSL 1 version to WSL 2 for a specific distribution. Then, run the below command in PowerShell.

wsl –set-default-version <Distro> 2

Replace ‘<Distro>’ argument with the name of whichever distribution (Ubuntu in our case) your WSL 1 install runs.

Now, you can access Linux commands and software on a Windows 10 system using this Ubuntu Environment.

bash shell on Windows 10

You now have a full command-line ‘bash’ shell on your system based on the Linux distribution. You can access all the Linux commands and applications via that bash shell.

To run bash shell, type ‘bash’ into the Start Menu search field and click to open the bash command-line tool.

Now, you can start running commands there.

Enjoy Linux on Windows!

Есть люди, которые большинство рабочего времени проводят в консоли, есть те, кто пользуются терминалом при необходимости, запуская что-то по инструкциям. Но я думаю, что каждый айтишник, будь он разработчиком, сисадмином, сетевым инженером, или даже senior yaml developer`ом, пользуется command line interface. Далеко не все задумываются об улучшении рабочего окружения в CLI и повышении продуктивности работы в терминале. Мне хотелось бы поделиться своим опытом настройки окружения для работы с Linux из Windows.

Из статьи вы узнаете, какими средствами и каким терминалом актуально пользоваться в настоящее время для запуска Linux приложений в Windows 10. Речь пойдёт о WSL 2 и Windows Terminal, набирающим всё большую популярность у пользователей, которым для работы нужен Linux. Так как большинство use-case`ов у меня связаны с удалённым подключением через SSH, большая часть информации будет релевантно для случаев удалённых подключений, со всеми особенностями, связанными с этим (пробросом ssh ключей через ssh agent, пробросом X-сервера, управлением подключениями etс).

Внимание! Под катом много картинок и ужатого, но местами объёмного, gif`а, рекомендуется открывать статью при наличии соответствующего доступа к интернету. Заходите под кат, если вам актуален запуск Linux утилит под Windows, оптимизация работы в окружении CLI, или вы просто любите технические тексты и цветные терминалы. Текст я постарался скрасить скринкастами и скриншотами терминала, чтобы было не скучно.

Введение

Как на домашнем, так и на рабочем ноутбуке, единственная ОС сейчас у меня Windows 10, и в этом году я окончательно перешёл на использование только WSL вместо VM / dualboot / Cygwin / MinGW. Теперь мой терминал по умолчанию — это локальный шелл WSL, где я могу запускать практически любые задачи, как в нативном Linux. Кроме этого, в домашней сети работает мини-сервер Intel NUC, на котором развёрнут Proxmox с LXC контейнерами и KVM, в котором крутится Docker. На все VM хожу по SSH, с ключами из директории Windows. Очень много времени в профессиональной деятельности проходит в CLI, с домашним сервером и сетью тоже самое. Поэтому всегда возникает желание разобраться с инструментами для более комфортной работы в терминале, а в Windows всегда с этим были проблемы. Но сейчас всё меняется.

Эта и последующие статьи больше ориентированы на энтузиастов, которые ищут свежие решения и желают прокачать свой шелл. Но и новичкам должно быть что-то интересно, хотя статья получилась с достаточно глубоким погружением в тему и предполагает, что у читателя есть какие-то фундаментальные знания в Linux. Вся информация собрана на основе личного опыта использования WSL, терминала, а так же бесконечного листания Stack Overflow и Github issues в процессе постоянного усовершенствования конфигов и поиска удобных тулов для работы.

Windows Subsystem for Linux (WSL) 2

В интернете и на Хабре есть несколько нормальных статей про WSL (раз статья про установку/настройку WSL с X-сервером, два заметка про WSL 2, три статья про Python разработку в VSCode с WSL), описывающих установку и настройку системы. Однако не все действия по установке уже актуальны, так же как и ограничений с подводными камнями становится меньше. Я не буду подробно останавливаться на установке, инструкция по установке актуальной (второй) версии WSL есть на сайте Microsoft, также в интернете можно найти краткие туториалы.

Сейчас WSL ещё находится в стадии активной разработки и недавно (июнь 2019) вышла новая версия WSL 2, которая на данный момент доступна только для свежих версий Windows участникам Windows Insiders. При возможности советую сразу проапгрейдить WSL до версии 2, так как в ней улучшили работу системных вызовов, работу с сетью, ФС, и в целом она построена на другой архитектуре и по некоторым данным даёт 20-кратный прирост скорости по сравнению с первой версией.

Посмотреть версию Windows 10 и OS build можно в Start -> Settings ->System -> About, для установки WSL 2 требуется версия Windows 1903 и, как минимум, версия билда 18917. Если вы не участник Windows Insider Program, вероятнее всего, обновления не прилетят до выхода стабильного релиза. Так что если хочется обновиться до последней сборки, можно включить ранний доступ (Fast) в Start -> Settings -> Update & Security -> Windows Insider Program, обновиться и отключить дальнейшие обновления. Стоит учитывать, что устанавливаться будут ещё не оттестированные массово обновления, что может сказаться на стабильности. 

Стоит иметь ввиду, что до билда версии 18995 WSL имеет баг при работе с файлами на примонтированных дисках Windows, выражающийся в Input/output error, помогает только перезагрузка WSL (wsl —shutdown в PowerShell). В целом сейчас пофиксено много багов, которые до сих пор присутствуют в WSL версии 1 (который ставится по дефолту) и не-preview дистрибутивах Windows. Если у вас обновления ОС регулируются корпоративными политиками, скорее всего самые свежие обновления прилетать не будут и нужно иметь это ввиду. На одном из ноутбуков у меня стоит билд 18956 и обновлений нет, не смотря на то, что выбрана опция Fast в настройках Insider Program. На другом ноутбуке была установлена чистая система несколько месяцев назад и обновления периодически прилетают и устанавливаются.

Установка WSL 2

Для работы WSL требуется включить Hyper-V, потому что дистрибутивы Linux запускаются в легковесных VM с помощью виртуализации Hyper-V.

Далее я приведу краткую инструкция установки из CLI PowerShell дистрибутива WSL на примере Kali Linux). При предпочтении Ubuntu или другого дистрибутива Linux из доступных, заменить ссылку и названия на соответствующие.

Проверить версию билда Windows:

Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | Select CurrentBuild

Активировать компоненты VirtualMachinePlatform и Microsoft-Windows-Subsystem-Linux:

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

Перезагрузка.
Дальше либо установить дистрибутив из Microsoft Store (https://aka.ms/wslstore), либо дальше выполнить в PowerShell:

curl.exe -L -o kali.appx https://aka.ms/wsl-kali-linux-new
Add-AppxPackage .\kali.appx
rm .\kali.appx

Запустить консоль WSL (дистрибутив должен был появиться в меню Start, поиск по названию дистра), дождаться приглашения установить нового пользователя, закрыть консоль.

Теперь дистрибутив должен появится в списке, если выполнить в PowerShell:

wsl -l -v

При необходимости преобразовать дистрибутив в формат WSL версии 2:

wsl --set-version kali-linux 2
wsl --set-default-version 2

Сделать root пользователем по умолчанию (опционально):

kali config --default-user root

Если вы получили ошибку «A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.», значит у вас стоит билд, в котором проявляется очередной (уже исправленный в последних релизах) баг. Как обычно, есть воркэраунд, либо использовать дистрибутив Ubuntu, с ним у меня не было проблем на той же не последней версии билда.

При необходимости, переместить виртуальный диск WSL на другой раздел (отличный от C:) можно по инструкции. Делать это лучше сразу, так как не всё может пройти гладко.

Disclaimer про безопасность. В WSL и на других Linux-серверах в домашней сети я не запускаю никаких критически важных систем, и других пользователей (кроме меня), в сети нет, поэтому я почти везде хожу под root, с ssh аутентификацией через ключи. Я знаю, что это не лучшая практика, однако речь про личное dev-окружение и я не вижу смысла создавать не-root пользователя. Вопросы безопасности в этой статье рассматриваться не будут, об этом я собираюсь когда-нибудь написать отдельно (про то, как в домашней сети без боли организовать взаимодействие сервисов через TLS с централизованным обновлением сертификатов; о синхронизации ~/.ssh/config между серверами, пробросе портов и ключей и т.д.).

Конфигурация WSL

Начиная с билда 17093, основной файл конфигурации WSL находится на ФС дистрибутива по адресу /etc/wsl.conf, в нём описываются настройки, которые будут применять при каждой загрузке дистрибутива:

  • Automount — автомонтирование дисков Windows
  • Network — генерировать файлы resolv.conf, hosts
  • Interop — запуск процессов Windows и добавление Windows $PATH в Linux $PATH

Изначально WSL идёт без этого конфига, его нужно прописать вручную:

[automount]
enabled = true
root = /mnt
options = "metadata,umask=22,fmask=11"
mountFsTab = true

[network]
generateHosts = true
generateResolvConf = true

[interop]
enabled = true
appendWindowsPath = true

Некоторые настойки применяются со значением по умолчанию и с пустым /etc/wsl.conf , но для корректной работы с файлами нужно прописать как минимум параметр options, иначе файлы Windows будут с правами 777 и это нельзя будет изменить из Linux.

Сделать ребут дистрибутива можно из PowerShell командой:

wsl -t kali-linux

После этого можно обновить пакеты и заняться настройкой ОС под себя. Я пока не буду касаться настроек шелла и окружения в Linux, оставлю это для следующей статьи.

apt -y update && apt -y upgrade

Файловая система WSL 2 и производительность

Файлы внутри WSL версии 2 хранятся на виртуальном диске VHDX, в качестве файловой системы используется ext4. Получить доступ к rootfs WSL можно через путь такого формата:

\\wsl$\{DistroName}\

Либо, можно набрать «explorer.exe .» в CLI и откроется обозреватель Windows в текущей директории.

В WSL версии 1 не использовался VHDX и был простой доступ к директории, в которой находились файлы Linux, и Microsoft строго не рекомендовали изменять Linux файлы из Windows. В новой версии WSL доступ к ФС на виртуальном диске обеспечивается с помощью файлового сервера Plan 9 Filesystem Protocol.

В предыдущих версиях WSL были проблемы с производительностью файловой системой, потому что системные вызовы эмулировались через API Windows, доступ к файлам был медленный и нестабильный. В концу 2019 года в WSL 2 архитектура поменялась и используется нативное ядро Linux. Судя по слайду из youtube-презентации The new Windows subsystem for Linux architecture: a deep dive, производительность дисковых операций выросла в 2-5 раз.

Максимальный объём диска ограничен 256GB, при превышении этого объёма необходимо будет делать ресайз, инструкция есть в документации.

Изначально, у WSL были проблемы с тем, чтобы высвобождать ресурсы после использования RAM. В билде 19013 эту проблему решили. Если запускать ресурсоёмкие задачи (например, сборка rust приложения) можно заметить, что процесс Vmmem будет в топе Диспетчера задач, однако потребление памяти значительно снизилось в последних версиях WSL.

Сеть 

Имя хоста (hostname) в Linux берётся из имени PC в Windows, независимо от того, что прописать в /etc/hostname или командой hostnamectl set-hostname.

В отличии от первой версии, в WSL 2 сеть работает через виртуальный Hyper-V свитч:

❯❯ ipconfig.exe | grep IPv4
   IPv4 Address. . . . . . . . . . . : 192.168.88.200
   IPv4 Address. . . . . . . . . . . : 172.31.160.1
   IPv4 Address. . . . . . . . . . . : 172.27.144.1

❯❯ ip -br -4 ad show dev eth0
eth0             UP 172.27.150.196/20
❯❯ ip ro list default
default via 172.27.144.1 dev eth0

В данном случае сеть 172.27.144.0/20 используется под WSL, её первый адрес (172.27.144.1) — это хостовая система Windows.

Из Linux обращаться по сети к хостовым сервисам (запущенным в Windows) можно, например, так:

❯❯ nmap -p 3389 $(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')

IP-адрес Windows тут берётся из /etc/resolv.conf, где он генерируется автоматически согласно настройкам wsl.conf.

Наоборот, если нужен коннект к Linux сокету из приложения Windows, необходимо обращаться к IP-адресу WSL. При этом есть нюанс — в Linux сервис необходимо запускать не на localhost (127.0.0.1), а на адресе 0.0.0.0. Например, чтобы быстро поднять SOCKS5 proxy до своего VPS, нужно запустить SSH с параметром dynamic port forwarding:

❯❯ ssh -D 0.0.0.0:2299 -N -f proxy.example.com

После этого в приложении Windows, например Chrome, в качестве адреса SOCKS5 прописать не localhost, а адрес WSL, в данном случае 172.27.150.196. Кстати, таким нехитрым способом туннелирования трафика через VPS в Хроме появляется возможность использовать доступ к сайтам через IPv6. 

IP-адрес в Linux после перезагрузки будет каждый раз меняться, так что в сценариях, когда нужно иметь постоянно работающий и автоматически запускающийся port forwarding, нужно искать воркэраунд. Есть много способов решения этой проблемы, разной степени костыльности, почитать подробнее можно в этом issue на github. Я воспользовался утилитой go-wsl2-host, которая реализует Windows Service, добавляющий автоматически IP-адрес WSL в файл hosts Windows, таким образом на хостовой системе можно прописать хостнейм типа ubuntu.wsl и по нему обращаться к Linux. Однако всё это костыли и работает не очень хорошо, остаётся ждать, когда Microsoft пофиксят эти проблемы.

UPD. Пока я писал эту статью, обнаружил, что вышли обновления (билд 18945), в которых появилась возможность достучаться через localhost до сервисов, запущенных в WSL. Правда, оказалось, что есть баг, из-за которого всё равно это не работало у всех, фикс в августовском билде 18970. Так как не всем прилетают обновления, даже если быть участником программы Windows Insiders, я не стал корректировать информацию, может кому-то это поможет настроить сетевое взаимодействие.

OpenSSH в Windows и автозапуск сервисов

Windows 10, как и Windows Server 2019, комплектуется форком OpenSSH, включающем все знакомые утилиты ssh-keygen, ssh-add, scp и другие, а том числе ssh-agent и сам сервер sshd. И клиент, и сервер поставить можно через Apps > Apps and Features > Manage Optional Features, но версия клиента ssh будет не последняя. Я столкнулся с багом, не позволяющим коннектиться к хосту через jump-хост с опцией ProxyJump и оказалось, что эту проблему пофиксили, но нужно вручную обновить SSH клиента. Установить актуальную версию Win32 OpenSSH можно, скачав zip из раздела Releases на гитхабе, и распаковав, к примеру, в C:\Program Files\OpenSSH. Сторонним софтом ssh.exe (например, при использовании Remote Development режима в VSCode) вызывается из $PATH (%SYSTEMROOT%\System32\OpenSSH\), нужно изменить переменную среды. Environment variables изменяются через GUI в Start > Edit the system environment variables (Пуск > Изменение системных переменных среды), там необходимо новый путь поставить выше старой версии. 

Так как в WSL не работает Systemd, есть проблема с автозапуском сервисов со стартом системы. Есть несколько способов настроить автостарт ssh сервера в WSL, самый простой — это создать задачу в Task Scheduler, где прописать команду старта сервера. В интернете можно найти разные инструкцииавтозапуска через скрипты vbs, ps1 или bat. Проблема почти всех способов в том, что триггером является запуск основной ОС Windows, то есть, если произойдёт сбой WSL и придётся перезапускать систему (wsl -t), то Linux запустится без запущенного сервиса. При старте Windows дистрибутив WSL запускается только в момент первого обращения к нему.

Я использую SSH-сервер на ноутбуке внутри WSL для того, чтобы удалённо можно было ходить с машины на машину. И, благодаря тому, что я использую техники ssh port forwarding и продуманно настроенный централизованный конфиг SSH клиентов, я могу прозрачно ходить по всем своим серверам, вводя хостнейм вместо адресов. То есть, если даже подключить какой-то из ноутбуков к мобильной сети, autossh демон подключится к jump-хосту и я всё равно смогу зайти на компьютер, никакой NAT не будет помехой. Поэтому мне важно, чтобы sshd всё время был в состоянии up.

Единственный рабочий способ попасть по SSH в WSL — это пробросить порт SSH. Это можно сделать с самого WSL с помощью RemoteForward, либо с другого сервера в домашней сети. Мало лишь кому это надо, да и это уже advanced level, так что просто приведу рабочую команду:

❯❯ ssh -R '*:2363:*:22' -N -f mt.example.com

Теперь при коннекте на адрес mt.example.com:2263 можно попасть прямо в WSL.

Если планируется поднимать SSH-сервер в WSL, нужно не забыть сконфигурировать необходимые параметры запуска сервера в /etc/ssh/sshd_config. Чтобы не было конфликта при бинде сервиса на порт 22, OpenSSH сервер в Windows следует отключить или вовсе удалить, если он установлен (Apps > Apps and Features > Manage Optional Features). 

X forwarding

Приятным моментом оказалось, что в Windows 10 есть утилита clip.exe, позволяющая перенаправлять stdout напрямую в буфер обмена Windows. Это удобно использовать в таких программах как tmux, а благодаря пробросу X-сервера текст можно копировать и с удалённых хостов. Чтобы всё работало, необходимо иметь всегда запущенный X-сервер в Windows и правильно прописанную переменную $DISPLAY

Немного скучной теории. На *nix системах с запущенным X имеются разные типы буферов обмена (primary, secondary, clipboard), в контексте этой статьи это не так важно, но важно для общего понимания механизма работы. Для работы с буферами обмена на Linux есть две утилиты (xclip и xsel). Обе утилиты имеют схожий функционал, в xsel его немного больше, но базовый функционал, необходимый для проброса содержимого буфера, одинаков. В X приложениях выделенный текст попадает в primary selection, вставляется при этом средней кнопкой мышки, в xclip и xsel используется по умолчанию primary selection.

Например, чтобы скопировать в буфер по умолчанию содержимое переменной, нужно передать stdout на stdin утилиты xclip, без дополнительных параметров:

❯❯ echo -n $DISPLAY | xclip

А чтобы вывести содержимое буфера по умолчанию, запустить xclip с ключом -o:

❯❯ xclip -o
172.20.160.1:0

Чтобы буфер обмена перенаправлялся через X-сервер и графические приложения запускались на локальном сервере X, необходимо в переменную $DISPLAY прописать IP-адрес, являющийся default gateway для WSL. Пока что ничего лучше того, чтобы брать его из resolv.conf (который генерируется автоматически Windows), не придумали. Поэтому, самый простой способ — прописать экспорт переменной $DISPLAY в профайле шелла (например, ~/.zshrc для zsh).

❯❯ echo "export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0" >> ~/.zshrc

В качестве X-сервера я выбрал бесплатный VcXsrv, он умеет работать с буфером, имеет разные режимы отображения окон и запускается из командной строки с прописанными опциями. По ссылке на gist можно посмотреть все опции.

Создать задачу автозапуска X-сервера можно в Task Scheduler примерно таким образом:

Triggers: At startup
Actions: Start a program
____Program: "%ProgramFiles%\VcXsrv\vcxsrv.exe"
____Arguments: -wgl -dpi auto -ac -multiwindow

SSH ключи

Чтобы программы из Windows могли использовать SSH ключи (например, редактор при работе с удалённым репозиторием GitHub), и в то же время не было второй копии ключей в WSL, лучше всего сгенерировать ключи в Windows %HOMEPATH%/.ssh и создать симлинки в домашней директории WSL.

ssh-keygen -f /mnt/c/Users/${WIN_USER}/.ssh/id_rsa -b 4096
ln -sf /mnt/c/Users/${WIN_USER}/.ssh/id_rsa ${HOME}/.ssh/id_rsa
ln -sf /mnt/c/Users/${WIN_USER}/.ssh/id_rsa.pub ${HOME}/.ssh/id_rsa.pub

Либо, в ~/.ssh/config можно прописать параметр IdentityFile, указав путь к ключам на диске Windows:

Host * 
    IdentityFile /mnt/c/Users/${WIN_USER}/.ssh/id_rsa

Если ключи были скопированы откуда-то и права на файлы не выставлены правильно, поправить permissions:

chmod 600 /mnt/c/Users/${WIN_USER}/.ssh/id_rsa
chmod 644 /mnt/c/Users/${WIN_USER}/.ssh/id_rsa.pub
chmod 700 /mnt/c/Users/${WIN_USER}/.ssh

Таким образом, при дальнейшей настройке доступа по ключам SSH пользователь идентифицируется однозначно одним набором ключей в одном месте, как при использовании приложений Windows, так и Linux. Теперь можно добавить публичный ключ на сервера/сервисы, куда необходимо будет ходить с этого компьютера. Если в домашней сети есть другие устройства, на которые требуется доступ по SSH, то правильно будет скопировать свой публичный ключ на эти сервера (ssh-copy-id), но не надо копировать ключи одного сервера на другой. Так как при работе через SSH можно (и нужно) использовать ssh-agent, то при коннекте с одного сервера на другой, агент заботится, чтобы авторизация происходила по проброшенному ключу. Чтобы всё работало правильно и ожидаемо, нужно позаботиться о файле ~/.ssh/config, в котором надо прописать все необходимые опции.

Host *
    TCPKeepAlive                         yes
    ServerAliveInterval                  30
    ServerAliveCountMax                  3
    ForwardAgent                         yes
    AddKeysToAgent                       yes
    ForwardX11                           yes
    ForwardX11Trusted                    yes

Какой терминал выбрать для работы в Linux на Windows

Сначала хочется сделать небольшое ревью существующих терминальных оболочек под Windows, умеющих запускать WSL. Среди пользователей популярен функциональный комбайн MobaXterm, который умеет создавать различные сессии, в том числе графические (WSL, bash/zsh, Mosh, RDP, VNC и т.п.), позволяет делать макросы и запускать скрипты, имеет много настроек и функциональных возможностей, ssh agent, автозапускаемый ssh port forwarding, и даже имеет встроенный сервер ftp/tftp/http, но продукт closed source и, к тому же, платный. Hyper — другой, более современный эмулятор терминала, позволяющий запускать WSL shell, терминал построен на HTML/JS/CSS и расширяется с помощью плагинов в виде node.js модулей (awesome list). Есть и другие терминалы, позволяющие запускать WSL с разной степенью костыльности (ConEmu, его форк Cmder, WSLtty и др.), но их я оставлю без внимания.

Дальше в этой статье речь пойдёт про Windows Terminal, на который я перешёл с недавних пор, и пока что испытываю только положительные эмоции. Terminal пока что ещё в статусе бета, но работает достаточно стабильно. Из фич на данный момент реализован мультитаб, разделение панелей (splitting), настраиваемые профили терминальных подключений, цветовые схемы, ну и больше нечего перечислить. Но этого функционала вполне хватает, мне даже нравится, что софт не перегружен лишним — как будто бы разработчики придерживаются принципа KISS.

Terminal эволюционировал из проекта Windows Console (ConPTY), научившись поддерживать ANSI/VT последовательности, 24-bit RGB true color и UTF-8. По ссылкам (начало, продолжение) на Хабре замечательный перевод серии постов блога Windows Command-Line: Inside the Windows Console, где рассказывается про историю создания терминалов, связанные с этим стандарты передачи управляющих последовательностей, кодовые страницы, юникод, появление эмуляторов терминалов и в дальнейшем уже эволюцию командной строки Windows. Техногикам это может быть интересно. Инженерный состав, работающий над этим opensource проектом, ведёт девблог Windows Command Line, который более, чем полностью посвящён WSL и Windows Terminal. Никогда бы до этого момента не поверил бы, что буду с интересом наблюдать за развитием продуктов MS, но что они делают в рамках развития WSL, Terminal и VSCode, действительно заслуживает уважения. Как начиналось развитие WSL, описано в Microsoft Open Source Stories (перевод есть на Хабре). Кстати, Microsoft с 2016 года является платиновым участником Linux Foundation .

Установка и настройка Windows Terminal

Установить Windows Terminal можно из Windows Store, либо скачав бинарник из раздела Releases на гитхабе проекта, там же и вся актуальная информация, инструкции и FAQ. Терминал требует, как минимум, версию Windows 1903 и билд 18362. Предпочтительнее устанавливать через Windows Store, так как обновлять в этом случае проще, прямо из стора. Обновления выходят регулярно, на гитхабе выложен план развития (roadmap) первой версии терминала. На данный момент все фичи версии 1 уже реализованы (по плану до конца 2019 года реализовать все улучшения), дальше несколько месяцев работы над устранениями багов и в апреле 2020 планируется официальный релиз Terminal v1.0. Приятно, что MS теперь есть на гитхабе, их софт научился показывать логи, внятные ошибки и любые проблемы легко гуглятся.

Настроек в терминале пока не много, но их хватает для комфортной работы, продукт активно развивается, есть на github, где пользователи могут создать feature request или bug report. Разработчики принимают участие в обсуждении проблем с пользователями, зачастую предлагая воркэраунды, когда обнаруживается баг.

Конфиг хранится в json формате, после сохранения применяется сразу же. Это удобно хотя бы потому, что можно применять хорошие практики управлением конфигурациями рабочего окружения — все линуксовые конфиги я храню в git репозитории, на Windows из рабочего инструмента использую только VSCode, который умеет синхронизировать конфиг через github gist, а локальный конфиг воркспейса сохранять отдельно в dotfiles. Вот и Terminal движется в ту же сторону, используя те же хоткеи и формат конфига, как VSCode. Править конфиг, кстати, удобно через VSCode, особенно если уже пользуетесь этим отличным редактором от MS. Файл конфигурации терминала уже содержит многие дефолтные настройки, а правильный редактор позволяет посмотреть все опции с описанием key и вариантами value из schema (особенно это удобно, когда у проекта ещё нет полноценной документации). Плюсом доступны все фишечки IDE в виде автодополнения, intellisense, проверкой синтаксиса, форматированием и т.д. 

Документация для разработчиков доступна тут, а здесь пока что небольшая страничка документации для пользователей. Отдельная страница посвящена настройкам, которые прописываются в json файле конфигурации. Оттуда можно узнать, что структурно настройки делятся на:

  • Global (профиль по умолчанию, изначальный размер окна терминала, тема и т.д.)
  • Key Bindings (настройки сочетаний клавиш)
  • Profiles (настройки, специфичные для каждого терминала)
  • Schemes (цветовые схемы)

Есть такое понятие, как динамические профили, они появляются в конфиге автоматически и имеют свойство source. Это касается дистрибутивов WSL и Azure Cloud Shell. Чтобы создать дубликат профиля одного и того же дистрибутива WSL (например, Ubuntu), необходимо сгенерировать GUID и прописать все желаемые настройки, кроме source, а в качестве commandline прописать wsl -d {DistroName}.

Шрифты

Чтобы терминал по-настоящему радовал пользователя, обязательно надо инсталлировать шрифты с поддержкой спец символов и лигатур. Выбрать можно из:

  • Fira Code
  • Hack
  • любые другие патченые шрифты

Я использую программерский шрифт Fira Code как в терминале, так и в редакторе. Им поддерживаются большинство символов, используемых в в оформлении CLI программ и консольных интерфейсов, лигатуры, а также нет никаких проблем с отображением эмодзи в терминале.

Устанавливается шрифт в Windows с помощью установщика шрифтов ОС. Для этого надо скачать последнюю версию понравившегося шрифта с github releases архивом и вручную установить шрифт в системе.

Посмотреть название шрифта (настройка терминала fontFace) можно при установке или после в приложении Character Map (Таблица Символов). Кроме этого, в Start -> Settings -> Personalization -> Fonts можно посмотреть, как шрифт рендерится в разных режимах, и заодно проверить, как рисуются лигатуры.

Заключение

Получилась очень объёмная статья, в одном месте собрана вся актуальная информация по установке, настройке и использованию Windows Terminal совместно с WSL. В дальнейшем я хочу так же оформить статьёй заметки о ZSH и tmux, и расписать свой опыт деплоя конфигураций на VM и синхронизации dotfiles между хостами. Всё в рамках автоматизации домашней сети, но это будет полезно и для разработчиков / девопсов / системных инженеров. Ещё из нераскрытых тем остался запуск Docker в WSL 2, но у меня нет необходимости запускать докер на персональном компьютере, так как для этого есть выделенный сервер.

Я надеюсь, что никто не пожалел, что дочитал статью и вынес для себя какие-то новые знания. Если кому-то есть, что добавить, давайте делиться мыслями в комментариях. Если есть какие-то замечания по тексту, пишите в ЛС, хочется поддерживать этот гайд в актуальности.

References

  • Announcing WSL 2 (devblogs.microsoft.com)
  • WSL 2 is now available in Windows Insiders (devblogs.microsoft.com)
  • Memory Reclaim in the Windows Subsystem for Linux 2 (devblogs.microsoft.com)
  • Automatically Configuring WSL (devblogs.microsoft.com)
  • wsl2-tutorial (github.com)
  • Terminal v1.0 Roadmap (github.com)
  • Editing Windows Terminal JSON Settings (github.com)

В Windows 10 появилась новая возможность для разработчиков — оболочка Ubuntu Bash, позволяющая запускать, устанавливать приложения Linux, использовать скрипты bash прямо в Windows 10, все это называется «Подсистема Windows для Linux». В версии Windows 10 1709 Fall Creators Update доступны уже три дистрибутива Linux для установки. Во всех случаях требуется 64-разрядная система для установки.

В этой инструкции — о том, как установить Ubuntu, OpenSUSE или SUSE Linux Enterprise Server в Windows 10 и некоторые примеры использования в конце статьи. Следует также учитывать, что есть некоторые ограничения при использовании bash в Windows: например, нельзя запускать GUI приложения (правда, сообщают об обходных путях с помощью X server). Кроме этого, командами bash нельзя запустить Windows-программы, несмотря на наличие полного доступа к файловой системе ОС.

Установка Ubuntu, OpenSUSE или SUSE Linux Enterprise Server в Windows 10

Начиная с версии Windows 10 Fall Creators Update (версия 1709) установка подсистемы Linux для Windows несколько изменилась по сравнению с тем, что было в предыдущих версиях (для предыдущих версий, начиная с 1607, когда функция была представлена в бета-версии, инструкция — во второй части этой статьи). Также обратите внимание, что в Windows 10 2004 можно установить Kali Linux с графическим интерфейсом.

Теперь необходимые шаги выглядят следующим образом:

  1. Прежде всего, необходимо включить компонент «Подсистема Windows для Linux» в «Панель управления» — «Программы и компоненты» — «Включение и отключение компонентов Windows». 
    Включение компонентов Linux для Windows 10

  2. После установки компонентов и перезагрузки компьютера, зайдите в Магазин приложений Windows 10 и загрузите оттуда Ubuntu, OpenSUSE или SUSE Linux ES (да, теперь доступно три дистрибутива). При загрузке возможны некоторые нюансы, о которых далее в примечаниях. 
    Дистрибутивы Linux в магазине Windows 10

  3. Запустите загруженный дистрибутив как обычное приложение Windows 10 и выполните первоначальную настройку (имя пользователя и пароль). 
    Настройка Ubuntu Linux в Windows 10 1709

Для включения компонента «Подсистема Windows для Linux» (первый шаг) можно использовать команду PowerShell:

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

Теперь несколько примечаний, которые могут быть полезны при установке:

  • Вы можете установить сразу несколько дистрибутивов Linux.
  • При загрузке дистрибутивов Ubuntu, OpenSUSE и SUSE Linux Enterprise Server в русскоязычном магазине Windows 10 заметил следующий нюанс: если просто ввести название и нажать Enter, то нужных результатов в поиске не оказывается, но если начать вводить и затем нажать по появляющейся подсказке, автоматически попадаешь на нужную страницу. На всякий случай прямые ссылки на дистрибутивы в магазине: Ubuntu, OpenSUSE, SUSE LES.
  • Запускать Linux можно и из командной строки (не только с плитки в меню Пуск): ubuntu, opensuse-42 или sles-12

Установка Bash в Windows 10 1607 и 1703

Для того, чтобы установить оболочку bash, выполните следующие простые действия.

  1. Зайдите в параметры Windows 10 — Обновление и безопасность — Для разработчиков. Включите режим разработчика (должен быть подключен Интернет для загрузки необходимых компонентов). 
    Включение режима разработчика в Windows 10

  2. Зайдите в панель управления — Программы и компоненты — Включение или отключение компонентов Windows, отметьте пункт «Подсистема Windows для Linux». 
    Установка подсистемы Linux в Windows 10

  3. После установки компонентов, введите в поиске Windows 10 «bash», запустите предлагаемый вариант приложения и выполните установку. Вы можете задать свое имя пользователя и пароль для bash, либо использовать пользователя root без пароля. 
    Установка Ubuntu bash

По завершении установки вы можете запускать Ubuntu Bash на Windows 10 через поиск, или создав ярлык для оболочки там, где вам требуется.

Примеры использования Ubuntu Shell в Windows

Для начала отмечу, что автор не является специалистом по bash, Linux и разработке, а примеры ниже — просто демонстрация того, что в Windows 10 bash работает с ожидаемыми результатами для тех, кто разбирается в этом.

Приложения Linux

Приложения в Windows 10 Bash можно устанавливать, удалять и обновлять с помощью apt-get (sudo apt-get) из репозитория Ubuntu.

apt-get install в Windows 10

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

Использование bash git в Windows 10

Скрипты bash

Вы можете запускать скрипты bash в Windows 10, создать их можно в имеющемся в оболочке текстовом редакторе Nano.

Скрипты bash в Windows 10

Скрипты bash не могут вызвать программы и команды Windows, но возможен запуск скриптов и команд bash из bat файлов и сценариев PowerShell:

bash -c "команда"

Также вы можете попробовать запускать приложения с графическим интерфейсом в Ubuntu Shell в Windows 10, на этот счет в Интернете уже имеется не одна инструкция и суть способа сводится к использованию Xming X Server для вывода GUI приложения. Хотя официально возможность работы с такими приложениями Майкрософт не заявлена.

Как было написано выше, я не тот человек, который может в полной степени оценить ценность и функциональность нововведения, но вижу как минимум одно применение для себя: различные курсы Udacity, edX и другие, связанные с разработкой проходить будет куда проще, работая с необходимыми инструментами прямо в bash (а в этих курсах обычно демонстрируется работа именно в терминале MacOS и Linux bash).

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Не стартует windows 10 после обновления
  • 0xc004c060 ошибка активации windows 10 как исправить
  • Перестроить индекс поиска windows
  • Как изменить имя пользователя в windows 10 через командную строку
  • Sink to receive что это за процесс windows 10