Владислав Карасьов, Software Engineer
WSL: Як інтегрувати Linux у Windows
Завдяки 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.
Пам’ятайте:
- Правильне завершення роботи WSL звільняє системні ресурси.
- Ви можете налаштувати ресурси, виділені для WSL.
- 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:
- Сервер потрібно відкрити не для localhost, а для мережі, де знаходиться WSL, тобто на IP-адресу Windows (або для всіх мереж через 0.0.0.0).
- Підключатися до сервера з WSL також потрібно за допомогою IP-адреси Windows.
- Mirrored:
- Якщо сервер відкритий на 127.0.0.1, з WSL до нього можна під’єднатися як localhost, так і 127.0.0.1.
- Якщо сервер відкритий на 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 у фоновому режимі? Так! Є два корисних ресурси, які допоможуть вам зрозуміти, як це зробити:
Висновок
WSL — це потужний інструмент, який може покращити ваш досвід роботи з Windows. Завдяки WSL ви можете отримати доступ до найкращого з двох світів: користувацької зручності Windows та розробницьких інструментів Linux.
Автор:
Підписатися на новини
-
Огляд подій
Як створити Kubernetes-оператори за допомогою Operator Framework
Operator Framework надає потужний набір інструментів для створення, тестування та розгортання операторів.
-
Думка експерта
Еволюція AI-асистентів у SDLC: виклики, досягнення та майбутні перспективи
-
Соціальна відповідальність
«Ми повинні бути першими у сфері цифрової інклюзивності», Ігор Процюк, інженер з тестування в EPAM
-
Лайфхаки
Графові бази даних: революція в управлінні складними зв'язками
-
Лайфхаки
Testcontainers: інноваційний підхід до інтеграційного тестування
Testcontainers — інноваційний інструмент, що має значний вплив на спосіб проведення інтеграційних тестів у Java-проєктах.
Вакансії 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 вакансії Луцьк