WSL2 是什麼

WSL2(Windows Subsystem for Linux)在 Windows 裡跑一個真正的 Linux kernel(不是模擬層),讓你在 Windows 上有完整的 Linux 環境。

和 WSL1 的差異:WSL2 用輕量 VM,有完整 Linux kernel,相容性大幅提升(可以跑 Docker、PostgreSQL、Redis 等需要 kernel 支援的工具)。


安裝

# PowerShell(管理員)
wsl --install
 
# 預設安裝 Ubuntu,也可以指定
wsl --install -d Ubuntu-22.04
 
# 查看可用的發行版
wsl --list --online

安裝後重開機,Ubuntu 初始化(設定用戶名和密碼)。


基礎配置

Windows Terminal

比內建的 cmd 和 PowerShell 好得多——支援多分頁、自定義 profile、字體和主題:

  1. 從 Microsoft Store 安裝 Windows Terminal
  2. 設定預設啟動 WSL Ubuntu
  3. 安裝 Nerd Font(如 JetBrains Mono NF)供 shell prompt 使用

WSL2 基本設定

# 在 WSL Ubuntu 裡
sudo apt update && sudo apt upgrade -y
 
# 安裝開發常用工具
sudo apt install -y build-essential curl wget git unzip zsh
 
# 切換到 zsh
chsh -s $(which zsh)
 
# 安裝 Oh My Zsh(可選,但很常用)
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

開發環境

Node.js

# 用 nvm 管理 Node.js 版本(不要直接 apt install,版本太舊)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.zshrc
 
nvm install --lts
nvm use --lts

Python

# 用 pyenv 管理 Python 版本
curl https://pyenv.run | bash
 
# 加入 .zshrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
 
pyenv install 3.12.0
pyenv global 3.12.0

Docker

選項一:Docker Desktop for Windows(最簡單)

安裝 Docker Desktop,啟用 WSL2 backend(Settings → General → Use WSL2 based engine)。WSL 裡可以直接用 docker 指令。

選項二:直接在 WSL2 裡安裝 Docker Engine(不需要 Docker Desktop,沒有付費限制)

# 在 WSL Ubuntu 裡
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
 
# 啟動 Docker daemon(WSL2 預設不會自動啟動)
sudo service docker start
 
# 加入 .zshrc 自動啟動
echo 'sudo service docker start > /dev/null 2>&1' >> ~/.zshrc

Windows / WSL 之間的文件

不要把 code 放在 /mnt/c/——Windows 文件系統掛載進 WSL 的 IO 效能非常差(比 WSL native 文件系統慢 10 倍以上)。

把 projects 放在 WSL native 文件系統(如 ~/work/),用 VS Code 的 Remote WSL extension 從 Windows 編輯 WSL 文件:

# 在 WSL 裡,用 VS Code 開啟當前目錄
code .
# VS Code 會自動用 Remote WSL extension 連進 WSL

在 Windows File Explorer 裡,可以用 \\wsl$\Ubuntu\home\你的用戶名\ 瀏覽 WSL 文件系統。


常見問題

WSL2 記憶體佔用太高

建立 %UserProfile%\.wslconfig

[wsl2]
memory=4GB
swap=2GB
processors=4

Port forwarding:WSL2 的 port 在 Windows 上也可以用 localhost 存取(Windows 會自動轉發),大多數情況不需要額外設定。

檔案權限:WSL 裡用 chmod 設定的權限,在 Windows 那側不會對應——保持 code 在 WSL native 文件系統可以避免大部分問題。