Пропустити навігацію EPAM

WSL: Як інтегрувати Linux у Windows

Владислав Карасьов

Software Engineer
Лайфхаки
  • JavaScript

Завдяки Windows Subsystem for Linux (WSL) ви можете отримати повноцінне середовище Linux прямо у вашій Windows. Ця стаття допоможе вам розпочати роботу із цим потужним інструментом.

Що таке WSL

WSL — це підсистема, яка інтегрує ядро Linux у Windows. Це означає, що ви можете запускати Linux-додатки та отримувати доступ до файлів Linux безпосередньо з Windows.

Як встановити WSL

З появою Windows 10 build 2004 розпочати роботу з WSL стало неймовірно легко! Ось усе, що вам потрібно зробити:

1.  Відкрийте термінал. Запустіть його з правами адміністратора, якщо це перше використання WSL.

2.  Виконайте одну команду: wsl --install -d Debian

  • Замість Debian вкажіть назву дистрибутива, який ви хочете встановити.
  • Якщо пропустити назву дистрибутива, буде встановлено Ubuntu.
  • Переглянути повний список доступних дистрибутивів можна за допомогою команди wsl --list --online.

3.     Перезавантажте систему. Це буде запропоновано лише при першому використанні WSL.

4.     Запустіть WSL. Після перезавантаження дистрибутив запропонує створити користувача, ввівши логін та пароль.

Корисні команди:

  • wsl — Запуск дистрибутива за замовчуванням.
  • wsl -l — Перелік встановлених дистрибутивів.
  • wsl -d Debian — Запуск дистрибутива Debian (замість Debian вкажіть потрібний дистрибутив).
  • wsl --set-default <distro> — Зміна дистрибутива за замовчуванням на <distro>.
  • wsl --unregister <distro> — Видалення дистрибутива <distro> та його файлової системи.

Загальне використання

WSL може використовувати значну кількість системної пам’яті, тому важливо знати, як правильно завершувати його роботу:

  • wsl --shutdown — Завершує роботу всієї підсистеми WSL (всі дистрибутиви та ядро), звільняючи всі використовувані ресурси.
  • wsl -t Debian (або wsl --terminate Debian) — Завершує роботу конкретного дистрибутива Debian.
  • wsl -l --running — Список запущених дистрибутивів.
  • Вихід з усіх сесій дистрибутива в консолі призведе до його автоматичного завершення через 15 секунд (за умови відсутності фонових процесів).
  • Спільне ядро WSL буде завершено через хвилину після зупинки всіх дистрибутивів.
  • Затримку завершення ядра можна змінити, встановивши параметр vmIdleTimeout в wslconfig.

Налаштування ресурсів:

Ви можете налаштувати ресурси, виділені для WSL, за допомогою wslconfig.

Доступ до програм Windows:

Змінна PATH в WSL дублює змінну PATH Windows. Це дозволяє запускати програми Windows з WSL, зазвичай додаючи розширення .exe. Наприклад: wsl.exe --shutdown.

Запуск програм:

Не всі програми в PATH мають розширення .exe. Наприклад, Visual Studio Code має файл code.cmd (скрипт, який запускається в Windows) та файл code (sh-скрипт, який запускається в WSL).

Графічні програми:

У WSL також можна запускати програми з графічним інтерфейсом! Докладніше про це читайте в статті: Run Linux GUI apps on the Windows Subsystem for Linux.

Пам’ятайте:

  1. Правильне завершення роботи WSL звільняє системні ресурси.
  2. Ви можете налаштувати ресурси, виділені для WSL.
  3. WSL дає доступ до програм Windows та дозволяє запускати графічні програми Linux.
Доступ до файлової системи WSL з провідника Windows

Є декілька способів отримати доступ до файлової системи WSL з провідника Windows:

1. Використання команди explorer.exe:

  • Відкрийте термінал WSL.
  • Перейдіть до каталогу, до якого хочете отримати доступ.
  • Виконайте команду explorer.exe<пробіл><крапка>.

Ця команда відкриє провідник Windows і покаже вміст поточного каталогу WSL.

2. Використання бокової панелі провідника:

  • Відкрийте провідник Windows.
  • У боковій панелі знайдіть розділ «Linux».
  • Цей розділ буде містити всі дистрибутиви WSL, встановлені на вашому комп’ютері.
  • Виберіть дистрибутив, до якого хочете отримати доступ, і перегляньте його файлову систему.

3. Доступ до файлової системи через адресний рядок:

  • Відкрийте провідник Windows.
  • В адресному рядку введіть \\wsl$ або \\wsl.localhost.
  • Це відкриє розділ з усіма дистрибутивами WSL.
  • Звідси ви можете переходити до будь-якого каталогу у WSL.

Пам’ятайте:

Ви також можете використовувати команду wslpath в терміналі WSL, щоб конвертувати шляхи до файлів WSL у формат, зрозумілий для Windows, і навпаки.

Додаткові можливості:

  • Ви можете закріпити дистрибутиви WSL у боковій панелі провідника для швидкого доступу.
  • Ви можете використовувати контекстне меню провідника для виконання команд WSL з файлів та каталогів.
  • Ви можете використовувати програми Windows для роботи з файлами WSL.

Зручний доступ до файлової системи WSL з провідника Windows значно полегшує роботу з WSL та інтегрує його з вашим звичним робочим середовищем Windows. Але треба враховувати, що доступ до файлової системи WSL з Windows і навпаки — доволі повільний.

WSL1 та WSL2: розуміємо різницю та обираємо оптимальний варіант

У WSL дистрибутиви можуть бути двох версій: WSL1 та WSL2.

WSL1 можна уявити як шар сумісності, що дозволяє запускати Linux-програми на Windows. Натомість WSL2 — це повноцінне ядро Linux, що працює у віртуальній машині Hyper-V.

Докладніше про відмінності між версіями можна дізнатися на сторінці Microsoft.

Загалом, WSL2 значно кращий, тому він використовується за замовчуванням.

Однак, є певні ситуації, коли WSL2 може бути не найкращим вибором.

Зокрема, WSL2 може не підходити, якщо вам потрібно працювати з файлами на файловій системі Windows. Це пов’язано з тим, що у WSL2 операції з файлами Windows значно повільніші, ніж у WSL1.

Якщо ви працюєте з проєктами, які зберігаються на файловій системі Windows, рекомендується використовувати WSL1.

Щоб дізнатися, яку версію WSL використовує ваш дистрибутив, виконайте команду:

wsl --list --verbose

Або скорочено:

wsl -l -v

Змінити версію WSL можна за допомогою команди:

wsl --set-version <Distro> <Version>

Вибір між WSL1 та WSL2 залежить від ваших потреб та завдань.

Зрозумійте переваги та недоліки кожної версії, щоб обрати ту, яка буде оптимальною саме для вас.

Редагування коду в WSL

WSL пропонує два основних способи редагування коду:

1. Текстові редактори для термінала:

  • Nano, Vim, Helix: ці редактори підходять для базового редагування тексту.
  • Sudo: для редагування файлів із правами адміністратора використовуйте команду sudo nano <file>.

2. Visual Studio Code (VS Code):

Редагувати файли можна через текстові редактори для терміналу, такі як nano/vim/helix, і якщо доведеться редагувати файл який потребує прав адміністратора, то це й доведеться робити (наприклад через sudo nano <file>), але для повсякденного використання зупинимося на Visual Studio Code.

Щоб відкрити WSL у VS Code достатньо виконати code<пробіл><крапка> з файлової системи WSL, це запустить VS Code встановлений на Windows. Якщо у VS Code не встановлено розширення WSL, то відкриється звичайна сесія на шляху \\wsl$, але водночас багато функцій VS Code та встановлених розширень не будуть працювати, тому рекомендується використовувати розширення WSL.

Якщо використовувати розширення WSL, то VS Code працює в клієнт-серверному режимі, тобто сервер встановлюється на стороні WSL та клієнт встановлений на Windows підключається до нього. Важливо підкреслити, що багато розширень працюють на стороні серверу та їх треба буде встановити у WSL. Вони будуть відображатися таким чином:

Мережеві режими WSL: NAT та Mirrored

WSL може працювати у двох мережевих режимах, які контролюються параметром networkingMode у wslconfig:

  • NAT (Network Address Translation): цей режим використовується за замовчуванням. WSL має власну IP-адресу, відмінну від IP-адреси Windows.
  • Mirrored: цей новий режим з’явився у WSL 2.0.0 (не плутати з WSL2) щоб спростити використання та покращити сумісність. WSL дистрибутиви «дзеркалять» мережеві налаштування Windows.

Докладніше про режим Mirrored:

Важливо:

  • WSL 2.0.0 та WSL2 — це різні сутності. WSL 2.0.0 — це версія WSL як додатку, яку можна переглянути командою wsl --version, а WSL1 та WSL2 — це два різних режими роботи дистрибутивів WSL.
  • Оновити WSL до останньої версії можна за допомогою wsl --update.

ПРИЄДНУЙСЯ ДО НАШОЇ КОМАНДИ

Підключення до серверів

Підключення до сервера, запущеного у WSL, з Windows:

  • Через localhost або WSL IP:
  • Підключення через localhost можливе завдяки параметру localhostForwarding у wslconfig, який включено за замовчуванням.

Приклади:

  • http://localhost:3000
  • http://<WSL_IP>:3000 

Підключення до сервера, запущеного у Windows, з WSL:

  • NAT:
  1. Сервер потрібно відкрити не для localhost, а для мережі, де знаходиться WSL, тобто на IP-адресу Windows (або для всіх мереж через 0.0.0.0).
  2. Підключатися до сервера з WSL також потрібно за допомогою IP-адреси Windows.
  • Mirrored:
  1. Якщо сервер відкритий на 127.0.0.1, з WSL до нього можна під’єднатися як localhost, так і 127.0.0.1.
  2. Якщо сервер відкритий на localhost, з WSL до нього під’єднатися неможливо.

Підключення до сервера, запущеного у WSL, з локальної мережі:

  • NAT:

·       Потрібно налаштувати переадресацію портів та фаєрвол.

  • Mirrored:

·       Переадресація портів не потрібна, але фаєрвол потрібно налаштувати так само, як для NAT.

Переадресація портів
  • Переадресований порт вважається «зайнятим».
  • Наприклад, якщо порт 3000 переадресовано до WSL, запустити на ньому сервер у Windows не вийде.

Команди для переадресації портів нижче.

Переадресувати порт з усіх мереж до 3000 порту WSL:

PowerShell
netsh interface portproxy set v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=$($(wsl hostname -I).Trim())

Переглянути переадресовані порти:

PowerShell
netsh interface portproxy show all

Видалити переадресацію порту:

PowerShell
netsh interface portproxy delete v4tov4 listenport=3000 listenaddress=0.0.0.0

Важливо:

WSL IP може змінюватися. Переадресацію портів потрібно буде налаштувати знову, використовуючи актуальний IP WSL.

Інформація про мережу в WSL (режим NAT)

При роботі WSL в режимі NAT створюється віртуальна мережа, відокремлена від Windows. Отримати інформацію про цю мережу можна декількома способами:

1. Команда wsl:

Використовуючи команду wsl можна з Windows запускати команди в WSL.

  • Для прямого виконання команди в WSL, можна опустити wsl, наприклад:

hostname -I замість wsl hostname -I

2. Команда wsl ip route:

  • Ця команда показує маршрутизаційну таблицю WSL.
  • IP-адреса Windows буде вказана в першому рядку, а IP-адреса WSL — у кінці другого рядка.

3. Команда wsl hostname -I:

  • Ця команда показує IP-адресу WSL.

Важливо: ця команда повертає пробіл наприкінці, що може призвести до несподіваної поведінки програм, якщо його не видалити перед використанням. Приклад цього можна побачити в розділі про переадресацію портів вище.

4. Команда wsl cat /etc/resolv.conf:

  • Ця команда показує конфігурацію DNS-серверів WSL.
  • IP-адреса Windows буде вказана після nameserver.

5. Команда ipconfig:

  • Ця команда показує IP-адресу Windows.
  • Назва мережевого адаптера може змінюватися залежно від налаштувань WSL.
  • У цьому випадку це буде Ethernet adapter vEthernet (WSL).

Пам’ятайте:

  • Для отримання інформації про мережу WSL використовуйте команди wsl ip route, wsl hostname -I, wsl cat /etc/resolv.conf або ipconfig.
  • IP-адреса Windows буде відрізнятися від IP-адреси WSL.
  • Команда wsl hostname -I повертає пробіл наприкінці, який потрібно видалити перед використанням.
SSH в WSL: корисні ресурси

1. Переадресація SSH-запитів агента з WSL до Windows:

Forwarding SSH Agent requests from WSL to Windows — чудова стаття, яка описує, як налаштувати WSL для використання SSH Windows.

2. Git for Windows, SSH-ключі та фрази-паролі:

Fun with Git for Windows, SSH Keys and Passphrases — хоча ця стаття не стосується WSL напряму, вона доповнює попередню, оскільки Git for Windows за замовчуванням встановлюється з власним OpenSSH (сучасні версії дають можливість вибору при інсталяції). Стаття описує, як налаштувати використання вбудованого OpenSSH в Windows.

Важливі моменти:

  • Ці статті допоможуть вам налаштувати SSH в WSL для зручної та безпечної роботи з Git та іншими інструментами, що використовують SSH-аутентифікацію.
  • Переадресація SSH-запитів агента дозволяє WSL використовувати SSH-ключі, збережені у Windows, що спрощує роботу з віддаленими репозиторіями.
  • Налаштування SSH в Git for Windows дає можливість використовувати вбудований OpenSSH Windows, що в комбінації з переадресацією SSH-запитів WSL до SSH-агента Windows дозволяє використовувати один SSH агент для всіх операцій.
Фонові процеси у WSL

Чи можете ви запускати програми WSL у фоновому режимі? Так! Є два корисних ресурси, які допоможуть вам зрозуміти, як це зробити:

  1. Is it possible to run a WSL app in the background?
  2. Background Task Support in WSL

Висновок

WSL — це потужний інструмент, який може покращити ваш досвід роботи з Windows. Завдяки WSL ви можете отримати доступ до найкращого з двох світів: користувацької зручності Windows та розробницьких інструментів Linux.

Автор:

Владислав Карасьов, Software Engineer

Підписатися на новини

Чудово! Ми вже готуємо добірку актуальних новин для вас :)

Вибачте, щось пішло не так. Будь ласка, спробуйте ще раз.

* Обов'язкові поля

*Будь ласка, заповніть обов’язкові поля

Вакансії EPAM Ukraine у Київ | Львів | Харків | Дніпро | Вінниця | Івано-Франківськ | Одеса | Чернівці | Хмельницький | Рівне | Ужгород | Тернопіль | Луцьк за напрямком Java | JavaScript | .NET | DevOps | Experience Design | Software Testing | Business Analysis | Python| Big Data | Mobile | Solution Architect | Ruby on Rails у містах за напрямком Java вакансії Київ | Java вакансії Харків | Java вакансії Львів | Java вакансії Вінниця | Java вакансії Одеса | Java вакансії Івано-Франківськ | Java вакансії Чернівці | Java вакансії Хмельницький | Java вакансії Рівне | Java вакансії Ужгород | Java вакансії Тернопіль | Java вакансії Луцьк | JavaScript вакансії Київ | JavaScript вакансії Харків | JavaScript вакансії Львів | JavaScript вакансії Вінниця | JavaScript вакансії Одеса | JavaScript вакансії Івано-Франківськ | JavaScript вакансії Чернівці | JavaScript вакансії Хмельницький | JavaScript вакансії Рівне | JavaScript вакансії Ужгород | JavaScript вакансії Тернопіль | JavaScript вакансії Луцьк | DevOps вакансії Київ | DevOps вакансії Харків | DevOps вакансії Львів | DevOps вакансії Вінниця | DevOps вакансії Одеса | DevOps вакансії Івано-Франківськ | DevOps вакансії Чернівці | DevOps вакансії Хмельницький | DevOps вакансії Рівне | DevOps вакансії Ужгород | DevOps вакансії Тернопіль | DevOps вакансії Луцьк