Windows Ubuntu WSL

Установка Ubuntu через WSL под Windows.

Речь про WSL и дистрибутив Ubuntu.


🧱 ЧАСТЬ 1 — УСТАНОВКА WSL (правильно с нуля)

1. Установить WSL

Откройте PowerShell от администратора:

wsl --install

👉 Это:


2. Перезагрузка

После установки:
👉 обязательно перезагрузи ПК


3. Проверка

wsl -l -v

Ожидаемо:

Ubuntu    Stopped    2

4. Первый запуск Ubuntu

Запусти:

wsl -d Ubuntu

или через меню Пуск

👉 создаёшь:


5. Обновление системы

sudo apt update
sudo apt upgrade -y

⚙️ ЧАСТЬ 2 — ПОДГОТОВКА К ПЕРЕНОСУ НА D:

⚠️ Важно:
По умолчанию Ubuntu хранится на диске C:

Путь выглядит так:

C:\Users\<USER>\AppData\Local\Packages\...\LocalState\

🚚 ЧАСТЬ 3 — ПЕРЕНОС WSL НА ДИСК D (ПРАВИЛЬНЫЙ СПОСОБ)

1. Остановить WSL

wsl --shutdown

2. Экспорт Ubuntu (создание бэкапа)

wsl --export Ubuntu D:\wsl\ubuntu.tar

👉 создаётся резервная копия всей системы


3. Удаление старой Ubuntu из WSL

wsl --unregister Ubuntu

⚠️ Это удаляет привязку к старому ext4.vhdx


4. Импорт Ubuntu на диск D

wsl --import Ubuntu D:\wsl\Ubuntu D:\wsl\ubuntu.tar --version 2

👉 теперь система живёт на D:


5. Проверка

wsl -l -v

📍 ЧАСТЬ 4 — ПРОВЕРКА ПУТИ

Проверьте, где реально хранится система:

Get-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\* |
Select DistributionName, BasePath

👉 должно быть:

D:\wsl\Ubuntu\

🧹 ЧАСТЬ 5 — УДАЛЕНИЕ СЛЕДОВ НА C:

После успешного переноса:

Можно удалить:

C:\Users\<USER>\AppData\Local\Packages\...\LocalState\

(если осталась)


Также удалить архив:

D:\wsl\ubuntu.tar

(если перенос завершён успешно)


🧠 ЧАСТЬ 6 — ЧТО В ИТОГЕ ПОЛУЧАЕТЕ

Было:

Стало:


🚀 ЧАСТЬ 7 — РЕКОМЕНДАЦИИ (ВАЖНО)

После переноса:

включите systemd (для сервера):

sudo nano /etc/wsl.conf

Добавьте:

[boot]
systemd=true

Потом:

wsl --shutdown

Дополнительные сведения.

WSL запускается в окне Power Shell, после запуска вы попадаете в терминал, выйти из терминала можно через команду exit при этом WSL останется работающим, если же окно Power Shell закрыть, то WSL будет остановлен.

Если в системе есть еще установленные дистрибутивы WSL, то дистрибутив Ubuntu может оказаться не основным по умолчанию и команда 

wsl -l -v

может выдать примерно следующее:

NAME                   STATE           VERSION
  *docker-desktop        Stopped         2
  Ubuntu                 Stopped         2
  docker-desktop-data    Stopped         2

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

wsl --set-default Ubuntu

В разных окнах Power Sell можно несколько раз выполнить команду wsl но среда WSL будет запущена только один раз, все остальные команды откроют терминалы к этой среде.

❌ Остановка WSL

wsl --shutdown

👉 тогда:

🎯 ИТОГ

✔ WSL ставится через wsl --install
✔ Ubuntu создаётся на C по умолчанию
✔ перенос делается через:

Создание пользователя - администратора

Текущая работа от root в WSL неудобна и рискованна. Лучше создать обычного пользователя devadmin, дать ему sudo-права и перевести dev-среду на него. Создать пользователя admin не получится, так как уже есть группа с таким названием.


🏆 Что важно понять заранее

Не все сервисы нужно “переводить” на пользователя devadmin.

Системные сервисы уже работают правильно:

Это нормально и менять не надо.

Что реально перевести на admin

✔ вход в WSL
✔ твои проекты
✔ MinIO
✔ dotnet run / build / git / npm
✔ домашние папки


🥇 План действий

1. Создать devadmin
2. Дать sudo
3. Сделать default user
4. Перенести dev-файлы
5. MinIO запускать от admin
6. root оставить только для администрирования

🥇 ШАГ 1 — создать пользователя

Сейчас все работает под root, это удобно.

adduser devadmin

Задайте пароль.


🏆 ШАГ 2 — дать sudo права

usermod -aG sudo devadmin

Проверить:

id devadmin

Должно быть:

groups=...,sudo

🏆 ШАГ 3 — проверить домашнюю папку

ls /home

Должно появиться:

administrator
devadmin

🏆 ШАГ 4 — сделать default user для WSL

В Windows PowerShell:

ubuntu config --default-user devadmin

🏆 ШАГ 5 — проверить

Закройте WSL и снова откройте:

wsl -d Ubuntu

Потом:

whoami

Должно быть:

devadmin

🏆 ШАГ 6 — дать доступ к проектам

Если проекты лежат в:

/home/administrator

или на D: — отдельно настроим.

Создайте dev-папки:

mkdir -p /home/devadmin/projects
mkdir -p /home/devadmin/services
mkdir -p /home/devadmin/backups


🏆 ШАГ 7 — MinIO перевести на devadmin

Когда пользователь будет создан:

sudo mkdir -p /home/devadmin/minio-data
sudo mkdir -p /home/devadmin/minio-config
sudo chown -R devadmin:devadmin /home/devadmin/minio-data
sudo chown -R devadmin:devadmin /home/devadmin/minio-config

🧠 Что с nginx/apache/db

Оставляем как есть:

nginx -> www-data
apache -> www-data
MariaDB -> mysql
Postgres -> postgres

Это правильно.


Что такое WSL

WSL (Windows Subsystem for Linux) — это подсистема Linux внутри Windows, которая позволяет запускать полноценное Linux-окружение без отдельной виртуальной машины.

Что даёт WSL

Linux-команды

Можно выполнять:

ls
grep
find
ssh
curl

как на обычном сервере Ubuntu.

Разработка как на сервере

Если ваш хостинг работает на Ubuntu, то WSL очень удобен:

Продакшен: Ubuntu
Разработка: Ubuntu (WSL)

Меньше различий между средами.

Docker

Большинство разработчиков под Windows используют Docker через WSL.

.NET

Можно поставить Linux-версию SDK:

dotnet --version

и собирать проект так же, как на сервере.

React / Node.js

Обычно работают быстрее и стабильнее в WSL, чем в некоторых конфигурациях Windows.

Как это устроено

В современных версиях используется лёгкая виртуализация.

У WSL есть собственная сеть:

Windows
  172.31.32.1

WSL
  172.31.xx.xx

Именно поэтому вы можете видеть:

cat /etc/resolv.conf
nameserver 172.31.32.1

Это адрес Windows, который виден из WSL.

 

Чем WSL отличается от виртуальной машины

Виртуальная машина

Например, через Oracle VM VirtualBox или VMware Workstation:

Windows
 └─ Полноценная VM
     └─ Ubuntu

Плюсы:

Минусы:

WSL

Windows
 └─ Ubuntu

Плюсы:

Почему VS Code любит WSL

Когда открываете проект через:

Remote - WSL

VS Code устанавливает внутри Linux свой сервер:

~/.vscode-server

Поэтому вы видели каталоги вроде:

~/.vscode-server/data/logs

Именно там лежат логи Copilot и Continue.

 

Настройка Git в WSL-Ubuntu && Windows

Зайдите в папку проекта.

Проверка версии Git

Чтобы узнать, какая версия Git установлена в Ubuntu:

git --version

(Если нужно обновить Git до актуальной версии в Ubuntu: sudo apt update && sudo apt install git -y).

Проверить, установлена ли утилита GitHub CLI (gh) в вашей системе (в WSL Ubuntu, PowerShell на Windows или Linux), можно с помощью любой из следующих команд:

Проверка версии (Самый простой способ)

Выполните в терминале:

Bash
gh --version

Проверка пути к исполняемому файлу

Как быстро установить gh, если его нет:

В WSL / Ubuntu:

sudo apt update && sudo apt install gh -y

В Windows (через winget в PowerShell):

winget install --id GitHub.cli

Перед началом работы с репозиторием в GitHub вам нужно к нему подключиться с помощью команды 

gh auth login

Далее последует небольшой диалог, в приведенном примере я использую ключ GitHub для авторизации:

gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations on this host? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Paste an authentication token
Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
The minimum required scopes are 'repo', 'read:org', 'workflow'.
? Paste your authentication token: **************************************************
- gh config set -h github.com git_protocol https
✓ Configured git protocol
! Authentication credentials saved in plain text
✓ Logged in as YourGitLogin

Чтобы склонировать репозиторий с GitHub со всеми ветками и полной историей, достаточно выполнить стандартную команду git clone:

git clone git@github.com:username/repository.git

(Или через HTTPS / GitHub CLI, например: gh repo clone username/repository).

Вопреки распространенному заблуждению, стандартный git clone по умолчанию скачивает абсолютно ВСЕ ветки, теги и всю историю проекта.

Однако локально Git сразу создает текстовую указательную ветку только для главной (обычно main или master). Остальные ветки остаются в так называемом режиме отслеживания (remote-tracking branches).

Как увидеть все забранные ветки и работать с ними

1. Посмотреть список всех веток

Перейдите в папку проекта (cd repository) и выполните:

git branch -a

Вы увидите список:

* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/dev
  remotes/origin/feature-login

Все ветки с префиксом remotes/origin/ уже находятся на вашем компьютере, их не нужно скачивать заново из интернета.

2. Как переключиться на нужную ветку

Чтобы начать работать с любой из локально загруженных веток (например, dev), просто переключитесь на нее:

git checkout dev

(В современных версиях Git также можно использовать git switch dev).

Git автоматически создаст локальную ветку dev, свяжет ее с origin/dev и переключит ваш рабочий каталог.

Если вам нужно гарантированно развернуть ЛОКАЛЬНЫЕ копии ВСЕХ веток сразу

Если ваша цель — не просто скачать проект, а сделать так, чтобы команда git branch (без флага -a) сразу показывала полный список всех веток как локальных, используйте короткий однострочник прямо в терминале:

В WSL / Ubuntu (Bash):

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all

В Windows PowerShell:

git branch -r | Where-Object { $_ -notmatch '->' } | ForEach-Object {
    $branch = $_.Trim().Replace('origin/', '')
    git branch --track $branch $_.Trim()
}
git fetch --all

После выполнения этого скрипта каждая удаленная ветка превратится в полноценную локальную ветку.

Рекомендуемый файл .gitignore для проекта в связке с .NET и REACT:

# ==========================================
# .NET / C# (Правила сработают для любой подпапки)
# ==========================================
## --- Build & Output directories ---
bin/
obj/
out/
[Bb]in/
[Ob]j/

## --- Visual Studio & Rider temporary files ---
.vs/
.idea/
*.user
*.userosscache
*.sln.docstates
*.suo
*.userprefs

## --- NuGet Packages & Cache ---
*.nupkg
*.snupkg
**/packages/
project.lock.json
project.assets.json

## --- Local settings & Secrets ---
# Локальные пользовательские конфигурации (раскомментируйте, если не хотите коммитить appsettings.Development.json)
# appsettings.Development.json
# appsettings.*.local.json
secrets.json

## --- Test Results & Coverage ---
[Tt]est[Rr]esult*/
*.coverage
*.coveragexml

# ==========================================
# Node.js / Frontend (Vue, React и т.д.)
# ==========================================
node_modules/
dist/
.npm
*.log

# ==========================================
# Общие временные файлы ОС
# ==========================================
.DS_Store
Thumbs.db