在 Windows 中使用 WSL2 搭建 Ubuntu 开发环境

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
相关推荐
0+1113 小时前
Linux --从 poll 到 epoll多路转接
linux·服务器·1024程序员节
青瓦梦滋3 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
2601_949847756 小时前
bcrypt.js 跨端三方库仓颉适配全流程
linux·运维·ubuntu
m0_639906946 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端
LannyChung7 小时前
PowerShell 下 git log 中文乱码的完整排查与解决
windows·git
水饺编程8 小时前
第2章:Linux 基础,exit 命令
linux·c语言·汇编
木子欢儿8 小时前
Debian 13 + vsftpd 搭建FTP服务
linux·服务器·前端·网络·debian
GeW9 小时前
新质生产力落地实践:企业级Linux迁移与数据库国产化
linux
雯宝9 小时前
usb_serial_generic_register
linux
疯狂的Meng10 小时前
我把第一周的 Linux 命令整理成了自己的手册(附 7 个我踩的坑)
linux