← Linux на Windows: WSL
20 мин · intro · Урок 2 из 2

WSL: повседневная работа и грабли

Где держать файлы, почему проект в папке Windows тормозит, как открыть код в редакторе и что делать с правами доступа.

Две файловые системы

После установки у вас есть два разных хранилища, и это главный источник путаницы.

Файловая система Linux живёт внутри WSL. Домашний каталог там /home/<имя>, он же ~. Это быстрый диск, права доступа настоящие.

Файлы Windows подключены в каталог /mnt. Диск C: виден как /mnt/c, диск D: как /mnt/d. Читать и писать можно, но у этого есть цена.

Держите проекты в Linux, а не в /mnt/c

Обращения к /mnt/c идут через прослойку между Linux и Windows. На одном файле разница незаметна. На проекте, где тысячи мелких файлов, она превращается в мучение: git status думает секунды, установка зависимостей тянется в разы дольше, сборка еле шевелится.

Правило простое. Рабочие файлы держите в ~, то есть внутри Linux:

cd ~
mkdir projects
cd projects
git clone https://github.com/example/repo.git

/mnt/c оставьте для обмена: забрать скачанный файл из папки «Загрузки», положить отчёт на рабочий стол.

Как добраться до этих файлов из Windows

Файлы внутри Linux не спрятаны. Откройте проводник и введите в адресной строке:

\\wsl$\Ubuntu\home\<имя>

Откроется домашний каталог, обычной папкой. Можно перетаскивать файлы мышкой, можно закрепить в «Быстром доступе».

Обратный путь тоже работает. Из терминала WSL:

cd /mnt/c/Users/<имя_windows>/Downloads

Редактор

Ставить редактор внутрь Linux не нужно. VS Code умеет работать так: интерфейс остаётся в Windows, а вся работа идёт внутри WSL.

Поставьте VS Code в Windows и расширение WSL к нему. Дальше из терминала WSL, находясь в каталоге проекта:

code .

Откроется окно редактора, а в левом нижнем углу появится метка с именем дистрибутива. Она означает, что встроенный терминал, отладчик и расширения работают на стороне Linux. Именно это и нужно.

Права доступа на дисках Windows

У файлов на /mnt/c прав в привычном смысле нет. Windows хранит доступ иначе, и WSL показывает всё подряд как 777, то есть доступное всем.

Отсюда неприятность: chmod +x script.sh на диске C по умолчанию не запоминается. После перезапуска флаг исполнения снова пропадает.

Это ещё одна причина держать проекты в ~. Там права настоящие и ведут себя как положено.

Переносы строк

Windows завершает строку двумя символами, Linux одним. Если открыть файл редактором Windows и сохранить, в конце строк появится лишний символ.

Для shell-скриптов это ломает всё: строка #!/bin/bash превращается в #!/bin/bash\r, и система такого интерпретатора не находит. Ошибка выглядит загадочно, вроде bad interpreter: No such file or directory.

Лечится настройкой git один раз:

git config --global core.autocrlf input

Так git будет хранить в репозитории переносы в Unix-формате.

Сколько памяти забирает WSL

WSL2 работает в виртуальной машине и по умолчанию готов занять заметную часть оперативной памяти. Если Windows начал подтормаживать, ограничьте аппетит.

Создайте в Windows файл C:\Users\<имя>\.wslconfig:

[wsl2]
memory=4GB
processors=2

Затем перезапустите подсистему из PowerShell:

wsl --shutdown

systemd

Многие инструкции в интернете предполагают systemd, то есть команды вида systemctl start docker. В WSL он включается отдельно.

Откройте файл /etc/wsl.conf внутри Linux и добавьте:

[boot]
systemd=true

Затем wsl --shutdown в PowerShell и запуск заново. После этого systemctl начнёт работать.

Что важно запомнить

Чек-лист

Самопроверка

Впишите команду / ключевую строку. Регистр и пробелы не важны.

1. Перейдите в домашний каталог пользователя Linux (короткая форма).
2. Диск C: Windows виден внутри WSL. Перейдите в его корень.
3. Открыть текущий каталог в VS Code прямо из терминала WSL.

Прошли материал до конца? Отметьте урок пройденным.