Что такое подсистема Windows для Linux
Подсистема Windows для Linux позволяет разработчикам запускать среду GNU/Linux с большинством программ командной строки, служебных программ и приложений непосредственно в Windows без каких-либо изменений и необходимости использовать традиционную виртуальную машину или двойную загрузку.
Можно сделать следующее.
- Выберите предпочтительные дистрибутивы GNU/Linux из Microsoft Store.
- Запускайте средства командной строки, например grep , sed , awk , или другие двоичные файлы ELF-64.
- Запускайте сценарии Bash Shell и приложения командной строки GNU/Linux, включая:
- инструменты: vim, emacs, tmux;
- Языки: NodeJS, Javascript, Python, Ruby, C/C++, C# & F#, Rust, Go и пр.
- Службы. SSHD, MySQL, Apache, lighttpd, MongoDB, PostgreSQL.
Что такое WSL 2?
WSL 2 — это новая версия архитектуры подсистемы Windows для Linux, которая поддерживает подсистему Windows для Linux, чтобы запускать двоичные файлы Linux ELF64 в Windows. Ее основными приоритетами является увеличение производительности файловой системы и добавление полной совместимости системных вызовов.
Эта новая архитектура изменяет способ взаимодействия этих двоичных файлов Linux с Windows и с оборудованием компьютера, но по-прежнему предоставляет то же взаимодействие с пользователем, что и WSL 1 (текущая общедоступная версия).
Отдельные дистрибутивы Linux можно запускать с архитектурой WSL 1 или WSL 2. Каждый дистрибутив можно обновить или использовать на более старой версии в любое время, кроме того вы можете запустить дистрибутивы WSL 1 и WSL 2 параллельно. WSL 2 использует совершенно новую архитектуру, которая дает преимущества от работы с реальным ядром Linux.
Опыт настройки и использования WSL (подсистемы Linux в Windows 10)
К написанию данной статьи меня побудил вопрос на Тостере, связанный с WSL. Я, после нескольких лет использования систем на ядре Linux, около полугода назад перешел к использованию Windows 10 на домашнем ПК. Зависимость от терминала и Linux окружения в моей работе практически сразу привели меня к вопросу: или ставить виртуалку или попробовать WSL. Я выбрал второе, и остался вполне доволен.
Под катом я расскажу как установить и настроить WSL, на какие я наткнулся проблемы и ограничения, как запускать Linux приложения из Windows и наоборот, а так же как интегрировать элементы окружения Xfce в окружение рабочего стола Windows.
Никогда не думал, что однажды вернусь на Windows, но повод попробовать мне дали стечения обстоятельств: жена, далекая от IT, дергала почти каждый раз, когда у нее возникала необходимость воспользоваться компом; проснулась ностальгия по одной игре, но она никак не хотела адекватно работать под wine; а тут еще мне подарили коробочную Windows 10 Pro. WSL я поставил чуть ли не сразу после установки системы, поигрался несколько вечеров, понял, что продукт для моих задач годный, но хочется более привычный терминал и вообще некоторых удобств.
Установка WSL и дистрибутива
Сразу оговорюсь, в интернете можно найти описание установки с помощью выполнения команды lxrun /install в командной строке или консоли PowerShell. Данный способ больше не работает (после выхода WSL в стабильный релиз). Насколько мне известно, сейчас WSL можно установить только из Microsoft Store вместе с предпочитаемым дистрибутивом.
Так же отмечу, что когда установку производил я, на выбор были доступны дистрибутивы OpenSUSE, SUSE Linux Enterprise и Ubuntu 16.04 — последний я и установил. Сейчас также доступны Ubuntu 18.04, Debian 9 и Kali Linux, возможно появятся и другие дистрибутивы. Действия по установке могут отличаться. Так же, часть проблем описанных в статье может быть уже исправлена.
Находим в магазине желаемый дистрибутив и устанавливаем. Установка пройдет быстро, так как скачает только эмулятор ядра Linux и утилиту для запуска подсистемы, которая окажется в системной папке в трех экземплярах: wsl.exe, bash.exe и ubuntu.exe (вместо ubuntu будет имя Вашего дистрибутива). Все они равнозначны и делают одно и то же — запускают собственный эмулятор терминала, в нем linux’овый bash работающий под эмулятором ядра. При первом же запуске нас попросят придумать логин и пароль для пользователя по умолчанию, а после произойдет непосредственно установка дистрибутива. В качестве пользователя по умолчанию указываем root без пароля — это потребуется для дальнейших шагов. Безопасность не пострадает, кроме того при подготовке материалов к статье, в англоязычном туториале, я наткнулся на информацию, что новые версии WSL теперь делают пользователем по умолчанию root без пароля без лишних вопросов.
Дожидаемся установки. Далее первым делом стоит обновить зеркала apt на ближайшие. Для этого понадобится CLI текстовый редактор. В комплекте только vi, я же больше предпочитаю nano, поэтому ставлю его:
sudo вводить не требуется, так как мы уже под root’ом. Отредактируем файл /etc/apt/sources.list:
У меня лучше всего работают зеркала Яндекса, поэтому мой файл выглядит так:
Нажимаем Ctrl+O для сохранения и Ctrl+X для выхода. Теперь можно обновить систему до актуального состояния:
После обновления можно создать нашего основного пользователя. В данной статье я назову его user1, Вы же можете задать привычное имя:
Далее переходим в папку юзера, зайдем под ним, установим пароль и отредактируем файл
Все, подсистема готова к использованию… почти.
Установка X-сервера, Xfce и прочих GUI’шных приложений
Первая же проблема, на которую я натолкнулся — bash-completion в предлагаемом эмуляторе терминала работал, мягко говоря, некорректно. Кроме того, данный эмулятор не умеет вкладки, а каждый его экземпляр запускает все в новом пространстве процессов, с отдельным init’ом (который кстати не заменить). Мне захотелось нормальный эмулятор терминала, некоторых других GUI приложений, а так же панельку, чтоб это все быстро запускать.
Когда я гуглил этот вопрос, я наткнулся на множество проблем, вроде необходимости перевода dbus на tcp протокол. На данный момент всех этих проблем нет. В подсистеме нормально работают unix-domain-socket’ы и все спокойно общается через них.
Первым делом нам понадобится X-сервер, притом установленный в основную систему (в Windows). Лично я использую для этих целей VcXsrv — порт X11 на Windows. Официальный сайт указанный в about самой утилиты его сейчас не предоставляет, поэтому гуглим установщик и устанавливаем все по умолчанию.
Пока идет установка возвращаемся в терминал WSL, командой exit выходим обратно в root’а. Первым делом настроим русские локали:
Далее установим некоторые компоненты Xfce. Можно конечно установить его целиком из мета-пакета, но большинство компонентов нам не понадобится, а модульная архитектура Xfce позволяет нам поставить только необходимое:
Запускать каждый раз окружение руками не очень удобно, поэтому я автоматизировал данный процесс. Для этого в основной системе создадим в удобном для нас месте папку, а в ней 3 файла для запуска:
- config.xlaunch — файл настроек для VcXsrv
x-run.vbs — WSL всегда запускается со своим эмулятором терминала, если его закрыть — завершатся все его дочерние процессы. Чтоб данное окно не мозолило глаза, неплохо его запускать скрытым. К счастью в Windows встроен интерпретатор VBScript, который позволяет это сделать в одну строчку:
Поясню, что здесь происходит. Мы говорим VBscript выполнить приложение wsl с параметром cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session , папка запуска нам не важна, поэтому пустая строка, действие open — запуск, 0 — скрытый режим. Самому wsl мы отдаем команду на выполнение: переход в папку пользователя, затем с установкой переменных окружения DISPLAY (дисплей X-сервера) и LANG (используемая локаль) мы запускаем xfce4-session от имени нашего пользователя user1 (благодаря команде su)
Далее можем запустить наш start.bat и настроить панель Xfce под себя. Замечу, что здесь я наткнулся на еще одну проблему — панель прекрасно отображается поверх всех окон, но вот выделить себе место, как панель на рабочем столе Windows она не может. Если кто знает решение данной проблемы, поделитесь в комментариях.
Ну и под конец данной части, скриншот моего рабочего стола:
Взаимодействие окружения Windows и окружения подсистемы Linux
Запускать Linux приложения напрямую из Windows можно через те же 3 команды — bash, wsl или ubuntu. Не забываем, что по умолчанию запуск идет от root, поэтому стоит понижать привилегии через su , так же нужно не забывать передавать переменную окружения DISPLAY=:0 если приложению требуется X-сервер. Так же нужно менять папку, из которой должно работать приложение, через cd внутри WSL. Пример, посчитаем md5 для file.txt на диске D средствами Linux’овой md5sum:
Доступ к файловой системе Linux так же имеется, лежит она в %localappdata%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs . Читать таким образом файлы можно, а вот писать — не желательно, можно поломать файловую систему. Думаю проблема в том, что Windows не умеет работать с правами и владельцами файловой системы Linux.
Из Linux так же можно запускать Windows приложения. Просто запускаем exe-шник и он выполнится в основной системе.
Диски Windows монтируются в /mnt в соответствии со своими буквами в нижнем регистре. Например диск D будет смонтирован в /mnt/d . Из Linux можно свободно читать и писать файлы Windows. Можно делать на них симлинки. Права у таких файлов всегда будут 0777, а владельцем будет root.
Сетевой стек у подсистемы общий с Windows. Сервер поднятый в Linux будет доступен на localhost в Windows и наоборот. Однако unix-domain-socket для Windows будет просто пустым файлом, работать с этим можно только внутри Linux. Выход во внешнюю сеть у Linux так же есть, в том числе можно слушать порты, если этого не запрещает фаервол.
ifconfig в Linux и ipconfig в Windows выдают одинаковую информацию о сетевых интерфейсах.Из диспетчера задач Windows можно спокойно прибить процесс внутри подсистемы Linux. Однако Linux увидит только свои процессы.
Особенности, ограничения и подводные камни
Ядро Linux в WSL не настоящее. Это всего лишь прослойка-эмулятор, которая часть Linux-специфичных задач выполняет сама, а часть проксирует напрямую в ядро winNT. Большая часть api в нем реализована, но не все. Свое ядро собрать не получится, как и не получится подключить модули ядра (.ko, Kernel Object).
Init процесс у WSL тоже свой и заменить его, например, на system.d не выйдет. У меня давно есть желание написать менеджер демонов на go, который бы работал с файлами юнитов system.d и предоставлял бы схожий интерфейс, да все руки не доходят.
Нет поддержки openFUSE, соответственно примонтировать виртуальную или удаленную файловую систему не получится. Так же нельзя сделать mount из файла, mount вообще ничего кроме bind здесь, похоже, не умеет.
Так же нет никакой возможности разбить файловую систему Linux на несколько разделов/дисков.
Прямой доступ к железу практически отсутствует. Все таки мы находимся в песочнице Windows, а не в полноценном Linux. /dev и /sys заметно пустуют, в них лишь проц да виртуальные устройства. Доступ к GPU — только через X-сервер, напрямую — никак, так что нейросети обучать придется в Windows.
В JS разработке столкнулся с тем, что electron.js отказался запускаться в WSL, пришлось дублировать окружение node.js в Windows.
Итоги
Статья получилась довольно длинной, надеюсь, что она окажется еще и полезной.
WSL для меня лично оказался инструментом вполне юзабельным, решающим мои задачи fullstack backend разработчика. Виртуалка с Linux за полгода так и не понадобилась. По общим ощущениям Windows+WSL намного функциональнее, чем Linux+Wine.Пока писал статью, обнаружил, что в Microsoft Store появилась сборка WSL с Debian 9.3, данный дистрибутив мне более симпатичен, чем Ubuntu, поэтому буду пробовать ставить.
Что надо знать о подсистеме Windows для Linux в 2022 году?
Статьи
Упоминаются ли Linux и Windows вместе?
Если да, то что это за объединение?
Может ли это быть чем-то, что позволит преодолеть разрыв между двумя мирами?
В прошлом люди, использующие технологический стек Microsoft, применяли Windows в качестве среды разработки, в то время как другие, более заинтересованные в сообществе разработчиков с открытым исходным кодом, предпочитали Linux.
До появления подсистемы Windows для Linux (WSL) между ними существовала четкая пропасть, и они никогда ничем не делились.
Но с появлением WSL разработчики теперь могут работать в Linux на своем настольном компьютере версии Windows 10 с помощью подсистемы Windows Subsystem for Linux или Windows WSL.
Запуск системы Linux рядом с системой Windows значительно упрощается и становится более гибким благодаря WSL.
Что такое подсистема Windows для Linux?
Подсистема Windows Subsystem for Linux (WSL) позволяет исполняемым файлам Linux 64-разрядного формата (ELF64) работать на ядре Windows в операционной системе (ОС) Windows 10.
WSL – это компонент, который позволяет использовать средства разработки Linux на компьютерах Windows, но не рабочие нагрузки.
Изначально он был разработан как вариант установки клиентской системы Windows.
Для администрирования экземпляра Linux в состав WSL входит служба управления сеансами в пользовательском режиме, уменьшенные процессы Pico для обработки системных вызовов Linux и драйверы Pico для имитации ядра Linux.
Такая архитектура позволяет ядру Windows принимать и обрабатывать системные вызовы Linux.
На прошлой неделе компания Microsoft объявила, что Windows Subsystem for Linux версии 2 (WSL2) теперь совместима с Windows Server 2022.
Основными причинами для перехода с WSL 1 на WSL 2 являются:
- Ускорение работы файловой системы
- Поддержка совместимости системных вызовов.
WSL 2 запускает ядро Linux внутри легковесной виртуальной машины с использованием новейшей технологии виртуализации (VM).
Однако WSL 2 не является типичной виртуальной машиной.
Сравнение WSL1 и WSL2
За исключением производительности в файловых системах разных ОС, которую можно решить, храня файлы проекта в той же операционной системе, что и инструменты, используемые для работы над проектом, архитектура WSL 2 по многим параметрам превосходит WSL 1.
Только Windows 11 или 10, версия 1903, Build 18362 или более поздняя поддерживают WSL 2.
Другими ключевыми различиями между обеими версиями являются:
- Архитектурное различие
- Производительность ввода-вывода файлов
- WSL 2 обеспечивает полную совместимость с системными вызовами
На Linux системные вызовы используются для доступа к файлам, запроса памяти и запуска процессов.
В отличие от WSL 1, которая была основана на слое трансляции, созданном командой WSL, WSL 2 имеет встроенное ядро Linux, которое работает со всеми системными вызовами.
Для чего нужна подсистема Windows для Linux?
С помощью подсистемы Windows для Linux вы можете:
- Выбрать дистрибутивы GNU/Linux, которые вы предпочитаете, из магазина Microsoft.
- Запустить бинарники ELF-64 или стандартные инструменты командной строки, такие как grep, sed или awk.
- Запускать программы командной строки GNU/Linux и скрипты оболочки Bash, включая: Инструменты: tmux, emacs и vi, Языки: Go, Rust, NodeJS, Javascript, Python, Ruby, C/C++, C# и F#, Сервисы: PostgreSQL, MongoDB, Apache, MySQL, SSHD и lighttpd.
- Установить дополнительное программное обеспечение с помощью менеджера пакетов в вашем собственном дистрибутиве GNU/Linux.
- Использовать оболочку командной строки, аналогичную Unix, для запуска приложений Windows.
- Запускать программы GNU/Linux на компьютере с Windows.
- Запускать Linux в оболочке Bash (Ubuntu, Debian, OpenSUSE, Kali, Alpine и т.д.). Вы можете использовать Bash для запуска утилит и программ командной строки Linux.
Зачем использовать WSL вместо Linux на виртуальной машине?
WSL использует меньше ресурсов (процессор, память и хранилище), чем целая виртуальная машина.
Наряду с запуском инструментов и приложений командной строки Linux наряду с приложениями командной строки, рабочего стола и магазина Windows, WSL также позволяет вам получать доступ к файлам Windows из Linux и запускать инструменты и приложения командной строки Linux.
Это позволяет использовать как приложения Windows, так и инструменты командной строки Linux на одном и том же наборе файлов.
Как настроить среду разработки WSL?
В составе операционной системы Windows есть подсистема для Linux, которая называется Windows Subsystem for Linux.
Вот краткое руководство по настройке среды разработки WSL:
Установите дистрибутив Linux
Перед включением WSL установите дистрибутив Linux.
Чтобы воспользоваться преимуществами команды упрощенной установки, вы должны использовать последнюю версию Windows (Build 20262+).
Чтобы узнать, какая у вас версия и номер сборки, нажмите клавишу с логотипом Windows + R, введите winver и нажмите OK.
Обновления можно выполнить через меню Настройки или помощник обновления Windows.
Создание логина и пароля Linux
После завершения процесса установки WSL откройте дистрибутив Linux (по умолчанию Ubuntu).
Для вашего дистрибутива Linux должны быть созданы имена пользователей и пароли.
Обновление и модернизация пакетов
Используйте менеджер пакетов вашего дистрибутива для частого обновления пакетов.
Windows не выполняет автоматических обновлений и модернизаций.
Большинство пользователей Linux предпочитают справляться с этой задачей самостоятельно.
Можно включить больше дистрибутивов
Если вы хотите установить больше дистрибутивов Linux через Microsoft Store, вы можете загрузить свой собственный дистрибутив, использовать команду -import или загрузить свой собственный дистрибутив из Интернета.
Кроме того, вы можете создать уникальные образы WSL и распространить их по всей компании.
Настройка терминала Windows
Любое приложение, имеющее интерфейс командной строки, может быть запущено через терминал Windows.
Механизм рендеринга текста с ускорением GPU, множество вкладок и панелей, совместимость с символами Unicode и UTF-8, возможность создания собственных тем, а также возможность изменения текста, цвета фона и ярлыков – вот лишь некоторые из его ключевых особенностей.
При установке нового дистрибутива WSL Linux внутри терминала Windows будет создан его свежий экземпляр, который можно настроить по своему вкусу.
Хранение файлов
Храните файлы проекта на том же компьютере, что и оборудование, которое вы собираетесь использовать.
Наибольшая скорость работы достигается при сохранении файлов в файловой системе WSL (Ubuntu, OpenSUSE и т.д.).
Для сохранения файлов в файловой системе Windows можно использовать командную строку Windows (PowerShell, Command Prompt) и инструменты Windows.
Хотя файлы можно просматривать из любой операционной системы, производительность может заметно снизиться.
Выберите редактор кода
Поскольку они изначально позволяют осуществлять удаленную разработку и отладку WSL, мы советуем использовать Visual Studio Code или Visual Studio.
С помощью Visual Studio Code вы можете использовать WSL как полнофункциональную среду программирования.
Visual Studio обеспечивает встроенную поддержку WSL для кроссплатформенной разработки на C++.
Использование Visual Studio Code
Вы можете использовать WSL в качестве основной среды разработки из VS Code с помощью расширения Remote – WSL и Visual Studio Code.
После установки и настройки VS Code вы можете использовать удаленный сервер VS Code для запуска вашего WSL-проекта.
Использование Visual Studio
Используя один и тот же экземпляр Visual Studio 2022, вы можете собирать и отлаживать проекты CMake на Windows, WSL-дистрибутивах и SSH-соединениях.
Использование Git для управления версиями
Наиболее распространенная программа управления версиями называется Git.
С помощью Git вы можете отслеживать изменения, которые вы вносите в файлы, чтобы иметь запись о том, что было сделано, и при необходимости вернуться к более старым версиям.
Git также облегчает сотрудничество, позволяя объединять правки нескольких авторов в одном хранилище.
Настройка Docker для удаленной разработки
Docker Desktop предлагает среду разработки для создания, распространения и запуска докеризованных приложений для Windows.
Вы можете запускать контейнеры Linux и Windows в Docker Desktop на одной машине, включив механизм на базе WSL 2.
Создание базы данных
Начните с подключения вашего проекта в WSL к базе данных. С MySQL, PostgreSQL, MongoDB, Redis, Microsoft SQL Server или SQLite вы сможете быстро приступить к работе.
Настройка GPU
Подсистема Windows для Linux (WSL) предоставляет отличную среду для запуска наиболее распространенных и популярных приложений машинного обучения с GPU-ускорением, независимо от того, являетесь ли вы специалистом по исследованию данных, инженером по ML или только начинаете работать с ML. Итак, вашим следующим шагом должна стать установка и запуск GPU.
Используйте основные команды WSL
Лучший способ администрирования дистрибутивов Linux, установленных через WSL, – это PowerShell или Windows Command Prompt (CMD).
Монтирование внешнего диска или USB
Используйте WSL 2 для монтирования диска и чтения его содержимого, если вам нужен доступ к диску формата Linux, который Windows не поддерживает.
Процедуры поиска диска и раздела для подключения к WSL2, их монтирования и получения доступа к ним рассматриваются в этом уроке.
Запуск приложений с графическим интерфейсом Linux
Чтобы запускать программы Linux GUI (X11 и Wayland) на Windows в полностью интегрированной среде рабочего стола, теперь вы можете изучить совместимость с Windows Subsystem for Linux (WSL).
Благодаря WSL 2 приложения с графическим интерфейсом Linux на Windows теперь могут ощущаться как родные и интуитивно понятные.
Плюсы и минусы использования подсистемы Windows для Linux
Вот некоторые плюсы и минусы использования Windows Subsystem для Linux.
Плюсы
Идеально подходит для разработчиков, использующих инструменты с открытым исходным кодом
Если вы разработчик, уже использующий инструменты с открытым исходным кодом, ничто не сравнится с подсистемой Windows для Linux.
Она идеально подходит для тех, кто хочет использовать существующий язык разработки и инструменты сборки, или для тех, кто хочет воспользоваться преимуществами своих любимых языков программирования, которые могут работать как в Windows, так и в Linux.
В последние годы поддержка Linux со стороны Microsoft постоянно улучшается, но она все еще не настолько совершенна, как при использовании виртуальной машины или контейнера.
Но если вам нужно запустить свой код на нескольких платформах, это один из единственных вариантов, который позволит вам сделать это без необходимости устанавливать что-либо на свой компьютер.
Совместимость Windows-Linux
Совместимость Windows и Linux обеспечивается с помощью WSL.
Файловая система как Windows, так и Linux доступна для просмотра.
Кроме того, они могут запускать программы из командных интерпретаторов друг друга.
Это может привести к появлению некоторых интригующих приложений и, возможно, к переходу от рассмотрения этих двух систем как конкурентов к рассмотрению их как взаимодополняющих параметров.
Проще, чем двойная загрузка или виртуальные машины
Вам не нужно перезагружаться или запускать виртуальную машину, поскольку WSL уже работает в Windows.
При установке системы с двойной загрузкой необходимо оставить место на жестком диске и убедиться, что у вас есть резервный носитель для загрузки в случае, если что-то пойдет не так.
Вы должны перезагрузить систему, если хотите использовать Windows для выполнения программ Linux или наоборот.
Хотя виртуальная машина (VM) является более простой и быстрой в настройке, Windows и Linux сталкиваются с трудностями при обмене данными, поскольку VM все еще является принципиально другой машиной.
На виртуальной системе часто требуется настройка файлового сервера. Кроме того, виртуальные машины имеют стоимость производительности.
Простое введение в Linux для пользователей Windows
Для тех, кто не знаком с Linux, WSL может стать лучшей отправной точкой.
Они могут познакомиться с командами Linux, не устанавливая полностью новую операционную систему. WSL можно установить всего несколькими щелчками мыши из магазина Microsoft Store.
Кроме того, это облегчит людям переход на Linux.
Минусы
Вы продолжаете использовать Windows
Поскольку использование WSL все равно подразумевает участие в этой экосистеме, ее использование вызывает возражения у тех, кто идеологически не приемлет Microsoft и проприетарное ПО.
WSL будет поддерживать участие в этой системе.
Для ярых сторонников свободного программного обеспечения не подойдет ничто иное, как ПК под управлением свободной версии GNU/Linux.
WSL создавалась не для серверов
Дистрибутивы не предназначены для работы в качестве серверов, хотя WSL может быть установлена на Windows Server.
Запустить такие серверы, как Apache или MariaDB на Ubuntu сложнее, поскольку система не поддерживается.
Большинство пользователей, которым требуются серверы, устанавливают обычные Linux-серверы, поэтому этот недостаток может быть не столь существенным.
WSL может препятствовать внедрению Linux на настольных компьютерах
Меньшему числу пользователей может понадобиться установка настольной версии Linux, поскольку WSL совместима с Windows.
Учитывая, что у них уже есть настольная система Windows и они могут запускать приложения Linux GUI на Windows, они могут не видеть необходимости в установке совершенно новой настольной ОС.
Предположим, что только крошечный процент пользователей Linux работает с полным рабочим столом.
В этом случае, возможно, не будет прилагаться столько усилий для улучшения совместимости оборудования, что может только усугубить проблемы с рабочим столом Linux.
Заключение
В своем нынешнем виде WSL – это довольно крутой прогресс в Windows.
Разработчики, работающие в Windows, могут получить доступ к среде Linux благодаря Windows Subsystem for Linux.
WSL предлагает ядро Linux и позволяет установить несколько дистрибутивов внутри среды Windows, устраняя необходимость запускать виртуальную машину или полагаться на удаленный компьютер с Linux для разработки.
Конечная цель – предоставить простой способ запуска Linux в Windows.
Самое главное, WSL не занимает много памяти (например, около 256 МБ для Bash), что означает, что ваша машина может работать быстрее и плавнее.
Записки IT специалиста
Взаимоотношения Windows и Linux долгое время были натянутыми, а совместному применению обеих систем мешало большое количество разного рода барьеров, многие из которых были возведены искусственно. Но в последнее время все поменялось и Microsoft неожиданно для многих представила подсистему Windows для Linux, более известную как «Ubuntu в Windows 10». В данной статье мы расскажем, чем данная подсистема является, чем не является и для чего ее можно использовать.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Что такое подсистема Windows для Linux (Windows Subsystem for Linux, WSL)? Это не эмулятор и не виртуальная машина, а именно подсистема, основная задача которой — создать для разработчиков и тестеров привычное Linux окружение в среде Windows. Цели создать полноценную систему у разработчиков не стояло и не стоит, поэтому не следует рассматривать WSL как полноценную замену виртуальной машине, у WSL иные задачи.
Кроме предоставления пользователям Windows привычного Linux окружения разработчики WSL поставили во главу угла вопрос максимальной интеграции двух систем, чтобы вы могли без особых затруднений работать с вашими данными из любой среды. Собственно, с этим и связан ряд ограничений.
Прежде всего это коснулось файловой системы, для работы Linux подсистемы с диском используется дополнительный слой абстракции в виде Virtual File System (VFS), которая позволяет Linux работать с собственными файлами, расположенными на NTFS, и вообще вся инсталляция Linux представляет собой обычную папку, которую вы можете открыть через проводник, точно также в среде Linux вы можете перемещаться по файловой системе Windows.
Удобно? Да. Но ради этого пришлось отказаться от собственных инструментов Linux по работе с файловой системой и дисками, также вы не сможете использовать FUSE.
Второе ограничение связано с сетью, в Windows 10 1607 сетевая подсистема Linux в WSL не реализована, частично это исправлено в Windows 10 1703, но рассчитывать на полноценную работу с сетью не стоит, потому как сетевой стек Linux в WSL заменен еще одним слоем абстракции, позволяющим использовать для работы сетевые возможности Windows.
После прочтения этих строк многим может показаться, что Microsoft подсунула им какую-то урезанную версию Linux, но здесь следует остановиться и еще раз перечитать первые абзацы данной статьи: WSL — не виртуальная машина, это — подсистема.
В чем плюсы данного подхода? Во-первых — экономия ресурсов, запущенная виртуальная машина гарантированно потребляет нужный для работы ОС объем оперативной памяти, не оптимально расходует дисковое пространство, хотя бы потому что вам придется держать две копии рабочих файлов, на хосте и внутри виртуалки. Это может быть критично для слабых машин, например, для ноутбука, который, зато удобно брать с собой для демонстрации результата работы заказчику.
Во-вторых, простой совместный доступ к данным из обоих сред. Вы можете редактировать нужный файл в любимом редакторе под Windows и тут-же видеть результаты в работающем на Linux приложении.
И наконец, это полноценная Linux среда, аналогичная производственной, поэтому вы можете быть уверены, что с переносом в рабочую среду проблем у вас не возникнет, особенно если там вы используете аналогичные версии ПО.
Как установить подсистему Windows для Linux
Установить WSL довольно просто, для начала воспользуйтесь новой Панелью управления и включите в ней Режим разработчика.
Затем в классической Панели управления откройте оснастку Программы и компоненты — Включение и отключение компонентов Windows и установите компонент Подсистема Windows для Linux (бета-версия).
Теперь откройте командную строку и выполните команду:
затем ответьте на несколько простых вопросов.
Важно! Для успешной установки WSL вы должны осуществить вход в систему с учетной записью Microsoft.
На этом установка закончена и вас встречает командная строка Linux, можете начинать обживать систему. В этом плане WSL ничем не отличается от обычного Linux, в вашем распоряжении привычный пакетный менеджер и родные репозитории Ubuntu. В Windows 10 1607 это Ubuntu 14.04 LTS, а в выпуске 1703 — Ubuntu 16.04 LTS, которая также была доступна в инсайдерских версиях.
Подсистема установлена, это хорошо, самое время рассмотреть ее типичные применения.
Администрирование Linux-систем
Как известно, для удаленного администрирования Linux нет ничего лучше Linux. Если же ваша основная система Windows, то для работы с Linux серверами вам потребуется сразу несколько инструментов, как правило джентельменский набор составляют PuTTY и WinSCP, если вы используете аутентификацию по ключам, то к ним еще добавится Pageant. Это проверенные временем и эффективные инструменты, но постоянно переключаться между ними не совсем удобно.
Используя WSL, вы окунаетесь в родную среду и вам не нужно постоянно скакать между окнами. Тем более что SSH позволяет делать много интересных вещей. Например, удаленно выполнять команды и скрипты, получая результат на свой ПК. Допустим вы хотите скопировать с рабочего сервера свой конфиг Squid, чтобы разместить его на форуме. Нет ничего проще, выполните что-то вроде:
Первая часть команды соединяется по SSH с удаленным сервером example.com под учетной записью user и выводит в стандартный поток локальной системы содержимое squid.conf. Затем мы выбираем все строки, кроме комментариев, удаляем пустые, и выводим то, что осталось в файл на рабочем столе Windows-системы.
Как видим, WSL позволяет удобно соединить в единое пространство удаленную систему, локальный Linux и вашу Windows. Никаких преград больше нет, передавайте и обрабатывайте файлы не задумываясь где они находятся и откуда и куда их надо скопировать или переместить.
Также вы можете легко выполнять на удаленном сервере локальные скрипты, особенно если их размещение в удаленной системе нежелательно (потенциально небезопасны, содержат приватные данные и т.д.). Для этого выполните:
Вообще на данную тему можно говорить бесконечно, а так как задача данной статьи познакомить вас с основными применениями WSL, то закончим на этом и пойдем дальше.
Разработка
Если вы занимаетесь разработкой на PHP, Python и т.п. языках, то вы можете отлаживать собственные проекты сразу в родной среде, продолжая при этом использовать привычные инструменты разработки. Достаточно разместить проект в контейнере WSL и одновременно работать с ним из Windows-приложений, так как все данные внутри WSL доступны через обычный проводник.
Это удобно тем, что вы сразу видите результат ваших действий, достаточно просто сохранить изменения. Не нужно передавать измененный файл на тестовый сервер, контролировать версии и т.д., и т.п.
Кроме того, можно и наоборот использовать Linux-инструменты для работы с Windows проектами, например, git. Да, он существует и под Windows, но более удобно работать с ним в его родной среде.
Чтобы создать git-репозиторий, скажем, проекта Visual Studio, достаточно перейти в в его каталог и инициализировать новый репозиторий:
Собственно, данная задача — одно из основных предназначений WSL — предоставить разработчикам удобную мультиплатформенную среду. Следует признать, что это у Microsoft получилось.
Сайтостроение
Мы сознательно не стали включать этот вид деятельности в разработку, так как при всей схожести они имеют и достаточно различий. Если разработка подразумевает написание собственного веб-приложения или серьезную доработку существующего, то сайтостроение чаще подразумевает работу с готовыми решениями, а основные изменения как правило касаются внешнего вида и вносятся на уровне шаблона или CSS.
В качестве тестового сервера для такой работы обычно используется что-то вроде XAMMP/Денвер/Open Server и т.д. Нисколько не умаляя достоинств этих пакетов следует признать и их серьезные недостатки. Главный из которых — существенное отличие тестовой среды от производственной, что может породить проблемы при переносе проекта. Это могут быть как ошибки в путях, так и более серьезные проблемы, связанные с неправильным конфигурированием веб-сервера (например, через директивы htaccess), либо отсутствием каких-либо модулей.
Кроме того данные пакеты не позволяют выполнить еще одну важную задачу — проверку производительности и ее тонкую настройку, которую придется выполнять уже в производственной среде.
Подсистема Windows для Linux будет настоящей находкой в данном случае, потому что позволяет запустить локально полную копию производственной среды и работать в условиях максимально приближенным к реальным. А дополнительное удобство обеспечивается тем, что все файлы вашего сайта также будут доступны локально в Windows-системе, что дает возможность использовать привычные инструменты для работы с ними.
Кроме того, вы можете использовать все богатство инструментов Linux для отладки вашего сайта, например, curl для работы c HTTP-запросами. Да, curl есть и под Windows, но в Linux мы легко можем передать результат по конвейеру и обработать его нужным нам образом. Довольно распространенной задачей при переходе на HTTPS является поиск небезопасного содержимого, обычно это картинки или скрипты подключенные в коде страницы по небезопасному протоколу, эту задачу легко решить, скомбинировав работу двух команд:
Как видим, для веб-разработчика WSL представляет не только удобную тестовую среду, но и является удобным инструментом по отладке, заменяя множество отдельных утилит и инструментов.
Работа с файлами и данными Windows
Мы думаем, что каждый, кто работал в Linux отмечал все богатство и широкие возможности консольных утилит в плане обработки и изменения данных. Быстро найти и отобрать по фильтру, произвести замену одного значения на другое, причем все это одновременно и с выводом результата в нужное место. Теперь все это доступно вам и в Windows.
Многие задачи, которые в Windows требуют применения стороннего софта или написания пакетных файлов в Linux часто решаются в одну строку. Например, пакетное переименование по маске:
Приведенная выше команда переименует в текущей директории все файлы JPG с именем типа DSCN1023.JPG в файлы вида My_Photo1023.JPG. Другая распространенная задача — заменить пробелы в именах файлов на подчеркивание. Тоже очень просто:
Задача посложнее. Есть некая база в формате CSV, которая содержит ФИО, телефон и еще некоторую информацию, допустим нам надо отобрать из нее записи по каждому из мобильных операторов. Отлично, набираем в консоли:
После ее выполнения получим новый файл, который содержит записи только с телефонами оператора МТС, коды которого мы указали как условие для утилиты egrep.
Естественно, возможности подсистемы Windows для Linux не исчерпываются перечисленными примерами, мы привели лишь некоторые из них, чтобы вы могли лучше понять, для чего предназначена данная подсистема и что можно делать с ее помощью. Надеемся, что данный инструмент займет достойное место в вашей системе и поможет наиболее эффективно использовать все достоинства каждой из ОС.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал: