1 WSL 是什么
WSL 全称为 Windows Subsystem for Linux,可以在 Windows 内部运行 Ubuntu 等 Linux 发行版。
它不是双系统,也不需要开机时选择进入 Windows 还是 Linux。正常的使用方式是:
Windows 正常开机
├── VS Code
├── 浏览器
├── 代理软件
└── WSL2 Ubuntu
├── Linux 命令行
├── Python 环境
├── 项目代码
├── 数据库
└── Claude Code
Windows 主要负责图形界面,Ubuntu 主要负责运行 Linux 项目和开发工具。
2 检查 WSL 环境
在管理员 PowerShell 中执行:
wsl --version
wsl -l -v
如果看到:
NAME STATE VERSION
docker-desktop Stopped 2
说明 WSL2 已经安装,但 docker-desktop 是 Docker 内部使用的发行版,不适合直接作为日常开发环境。
可以继续安装独立的 Ubuntu:
wsl --install Ubuntu-24.04 `
--location E:\wsl\Ubuntu-24.04 `
--name Ubuntu-24.04
使用 --location 可以将 Ubuntu 的主要虚拟磁盘放在 E 盘,避免占用过多 C 盘空间。
安装完成后进入 Ubuntu:
wsl -d Ubuntu-24.04
首次启动需要设置 Linux 用户名和密码。输入密码时终端不会显示任何字符,这是 Linux 的正常行为。
3 WSL 中的文件到底存在哪里
WSL 内有两类路径。
第一类是 Linux 自己的文件系统:
/home/user
/usr
/etc
/var
这些文件保存在 Ubuntu 的虚拟磁盘中。如果安装 Ubuntu 时指定了:
E:\wsl\Ubuntu-24.04
那么这个虚拟磁盘主要位于 E 盘。
第二类是 Windows 磁盘的挂载目录:
/mnt/c
/mnt/e
例如:
/mnt/e/data/project
实际上对应:
E:\data\project
虽然 WSL 可以直接访问 Windows 文件,但 Python 虚拟环境、向量数据库和大量小文件更适合放在 Linux 文件系统中。
因此可以将项目复制到 Linux:
mkdir -p ~/projects
cp -a /mnt/e/data/project ~/projects/
cd ~/projects
此时项目会存在两份:
Windows 原始版本:
E:\data\project
WSL 工作版本:
/home/user/projects
第一阶段可以保留 Windows 版本作为备份。
4 WSL 代理与网络问题
Windows 开启代理软件、TUN 模式或虚拟网卡后,WSL 中解析出的 IP 可能类似:
28.0.0.156
28.0.0.157
这类地址通常是代理软件 Fake-IP 模式生成的虚拟地址。
如果代理规则没有正确覆盖 WSL 流量,可能出现:
Could not connect to archive.ubuntu.com
Could not connect to downloads.claude.ai
connection timed out
可以先将代理软件临时切换到全局模式进行测试。
在 WSL 中测试 HTTPS:
curl -I https://api.anthropic.com
如果返回:
HTTP/2 404
并不代表网络失败。它说明域名解析和 HTTPS 连接已经成功,只是访问的根路径没有对应页面。
如果 APT 使用 HTTP 源超时,可以将 Ubuntu 软件源从 HTTP 改成 HTTPS:
sudo cp /etc/apt/sources.list.d/ubuntu.sources \
/etc/apt/sources.list.d/ubuntu.sources.bak
sudo sed -i \
-e 's|http://archive.ubuntu.com/ubuntu/|https://archive.ubuntu.com/ubuntu/|g' \
-e 's|http://security.ubuntu.com/ubuntu/|https://security.ubuntu.com/ubuntu/|g' \
/etc/apt/sources.list.d/ubuntu.sources
然后重新更新:
sudo apt clean
sudo rm -rf /var/lib/apt/lists/*
sudo apt update
如果规则模式下失败、全局模式下成功,说明问题主要来自代理分流规则。安装完成后,可以在代理配置中单独让以下域名走代理:
claude.ai
downloads.claude.ai
api.anthropic.com