Windows Ubuntu WSL
- Установка Ubuntu через WSL под Windows.
- Создание пользователя - администратора
- Что такое WSL
- Настройка Git в WSL-Ubuntu && Windows
Установка Ubuntu через WSL под Windows.
Речь про WSL и дистрибутив Ubuntu.
🧱 ЧАСТЬ 1 — УСТАНОВКА WSL (правильно с нуля)
1. Установить WSL
Откройте PowerShell от администратора:
wsl --install
👉 Это:
-
включает WSL
-
включает WSL2
-
устанавливает Ubuntu (по умолчанию)
2. Перезагрузка
После установки:
👉 обязательно перезагрузи ПК
3. Проверка
wsl -l -v
Ожидаемо:
Ubuntu Stopped 2
4. Первый запуск Ubuntu
Запусти:
wsl -d Ubuntu
или через меню Пуск
👉 создаёшь:
-
username
-
password
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 — ЧТО В ИТОГЕ ПОЛУЧАЕТЕ
Было:
-
Ubuntu на C ❌
-
диск быстро забивается
Стало:
-
Ubuntu на D ✅
-
C освобождён
-
можно ставить:
-
nginx
-
MariaDB
-
PostgreSQL
-
GitLab
-
.NET
-
🚀 ЧАСТЬ 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 полностью выгружается
🎯 ИТОГ
✔ WSL ставится через wsl --install
✔ Ubuntu создаётся на C по умолчанию
✔ перенос делается через:
-
export -
unregister -
import
✔ после этого ext4.vhdx на C больше не нужен
Создание пользователя - администратора
Текущая работа от root в WSL неудобна и рискованна. Лучше создать обычного пользователя devadmin, дать ему sudo-права и перевести dev-среду на него. Создать пользователя admin не получится, так как уже есть группа с таким названием.
🏆 Что важно понять заранее
Не все сервисы нужно “переводить” на пользователя devadmin.
Системные сервисы уже работают правильно:
-
nginx → пользователь
www-data -
Apache HTTP Server →
www-data -
MariaDB →
mysql -
PostgreSQL →
postgres
Это нормально и менять не надо.
Что реально перевести на 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 права
Проверить:
Должно быть:
🏆 ШАГ 3 — проверить домашнюю папку
Должно появиться:
devadmin
🏆 ШАГ 4 — сделать default user для WSL
В Windows PowerShell:
🏆 ШАГ 5 — проверить
Закройте WSL и снова откройте:
Потом:
Должно быть:
🏆 ШАГ 6 — дать доступ к проектам
Если проекты лежат в:
или на D: — отдельно настроим.
Создайте dev-папки:
mkdir -p /home/devadmin/services
mkdir -p /home/devadmin/backups
🏆 ШАГ 7 — MinIO перевести на devadmin
Когда пользователь будет создан:
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
Оставляем как есть:
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
Плюсы:
-
быстрый запуск
-
меньше ресурсов
-
интеграция с Windows
Почему 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), можно с помощью любой из следующих команд:
Проверка версии (Самый простой способ)
Выполните в терминале:
gh --version
-
Если
ghустановлен: Вы увидите версию утилиты и архитектуру, например:gh version 2.52.0 (2024-06-20) -
Если
ghНЕ установлен:-
В WSL / Ubuntu вы получите сообщение:
Command 'gh' not found... -
В Windows PowerShell вы получите ошибку:
gh : Имя "gh" не распознано как имя командлета...
-
Проверка пути к исполняемому файлу
-
В WSL / Ubuntu / Linux:
which gh(Если установлен, вернет путь вида
/usr/bin/ghили/usr/local/bin/gh). -
В Windows PowerShell:
Get-Command gh
Как быстро установить 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