在 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
相关推荐
杨云龙UP3 小时前
MySQL 数据库常用备份工具对比:mysqldump、mydumper 与 XtraBackup
linux·运维·服务器·数据库·mysql·dba·备份恢复
风曦Kisaki5 小时前
Kubernetes(K8s)笔记Day06: 持久化存储(emptyDir,hostPath,NFS),PV 和 PVC,StorageClass存储类
linux·运维·笔记·云原生·容器·kubernetes
_艾伦 耶格尔.5 小时前
基础I/O
linux
fb_123458 小时前
Linux磁盘分区从入门到实操:MBR_GPT全解析+分区工具实战指南
java·linux·gpt
深念Y8 小时前
随身WiFi设备记录
linux·嵌入式·无线·射频·随身wifi·zte
柒号华仔9 小时前
【LINUX】Linux从闹钟到高精度定时器的实现
linux
初级炼丹师(爱说实话版)10 小时前
Ubuntu服务器配置docker
服务器·ubuntu·docker
深爱水瓶 血影S狂风12 小时前
函数调用过程探究
linux·运维·服务器
酷可达拉斯12 小时前
Linux操作系统-磁盘空间使用率100%如何处理?
linux·运维·服务器·云计算·bash
AIgorithmGEEK13 小时前
Linux 权限管理:从「Permission Denied」到「畅行无阻」
linux·权限·chmod·粘滞位·umask·文件权限的构成