开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。 借助适用于 Linux 的 Windows 子系统(WSL:Windows Subsystem for Linux),开发人员可以安装 Linux 分发版(如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并在 Windows 上直接使用 Linux 应用程序、实用工具和 Bash 命令行工具(未经修改),无需传统虚拟机或双包设置的开销。
WSL 1 和 WSL 2 之间的主要区别是使用托管 VM 内的实际 Linux 内核、支持完整的系统调用兼容性,以及跨 Linux 和 Windows作系统的性能。
WSL 2 是安装 Linux 分发版时的当前默认版本,使用最新的虚拟化技术在轻型实用工具虚拟机(VM)内运行 Linux 内核。
先决条件
默认安装 WSL2 的前提是必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。
更老的系统,推荐考虑系统升级,然后使用命令安装 WSL2,它兼容 99%的情况;此外,推荐 win 家庭版用户升级到专业版、企业版或者教育版。
查看系统版本方法:打开 powershell 终端,输入 winver,弹出“关于 Windows”窗口,查看对应系统版本。
必要设置
打开任务管理器,检查是否打开 CPU 的虚拟化,如果没有开启,需要在 BIOS 中打开。
无关紧要的设置
通过控制面板→程序和功能→启用或关闭 Windows 功能,可以查看“适用于 Linux 的 Windows 子系统”和“虚拟机平台”是否开启。
这里可以开启,也可以不开启,因为安装 WSL 会自动开启开启这两个功能。
安装 WSL
这里选择两步完成,只安装 WSL 核心,然后再单独安装 Linux 发行版。
安装 WSL2 核心
步骤一:网络环境设置
大多数情况下,整个安装过程不需要设置网络代理即可完成。
如果你的安装过程非常缓慢或者持续失败,那需要为安装配置代理。
强调一下,如果使用 PowerShell 安装 WSL 会发现代理软件,即便不配置代理,也会走代理下载,这也就意味着你不用配置下面那么多麻烦的设置了。
以下命令为 PowerShell 配置会话级代理,验证代理,最后等到下面步骤中安装完 WSL 和 Linux 发行版再清除代理。
# 1. 设置当前 PowerShell 代理
$env:HTTP_PROXY = "http://YOUR_PROXY_IP:PORT"
$env:HTTPS_PROXY = "http://YOUR_PROXY_IP:PORT"
# 2. 验证代理(应返回代理IP)
curl ifconfig.me
# 测试 GitHub 连接(关键!)
curl -I https://github.com --proxy YOUR_PROXY_IP:PORT
# 应返回 HTTP/2 200
# 等全部安装完成后清除代理
Remove-Item Env:\HTTP_PROXY
Remove-Item Env:\HTTPS_PROXY
关于 IPv6 开启问题
如果电脑开启了 IPv6 那么先把 IPv6 的优先级放在 IPv4 后面(Windows 默认 IPv6 优先),因为绝大多数代理走的都是 IPv4。
首先输入netsh interface ipv6 show prefixpolicies检查一下 IPv4 和 IPv6 的优先级。
这里面最重要的有两行:
- 40 1 ::/0
-
- 前缀 ::/0 代表了所有IPv6地址,可以理解为IPv6的“默认路由”。
- 优先顺序 40 是它的优先级。数值越大,优先级越高。
- 隐含的IPv4优先级
-
- 这个列表是关于IPv6的策略,所以你看不到IPv4的策略。但是,Windows为IPv4的默认路由(0.0.0.0/0)设定了一个隐含的、固定的优先级,通常是30。
核心对比:
当你的电脑要访问一个域名(比如 github.com),而这个域名同时有IPv4和IPv6地址时,系统会比较优先级:
- IPv6的优先级是 40
- IPv4的优先级是 30
因为 40 > 30,所以你的系统会优先尝试使用IPv6去连接。
现在,输入netsh interface ipv6 set prefixpolicy ::/0 10 0去修改 IPv6 的优先级为 10,然后再验证一下。
设置完请重启终端。
后续如果想回到默认的 IPv6 优先,可以执行以下命令。然后计算机会提示重启生效。
netsh interface ipv6 reset
在重启的终端中配置代理,设置当前会话代理为你的代理地址,这里我填入http:/127.0.0.1:3067。然后验证代理,并测试 GitHub 的连接。
$env:HTTP_PROXY = "http://127.0.0.1:3067"
$env:HTTPS_PROXY = "http://127.0.0.1:3067"
验证代理(应返回代理IP)
curl ifconfig.me
测试 GitHub 连接(关键!)
curl -I https://github.com
# 应返回 HTTP/1.1 200
curl: 是一个强大的命令行工具,用来发送和接收网络数据。你可以把它想象成一个没有图形界面的、纯文本的浏览器。
ifconfig.me: 是一个非常简单的公共服务网站。它的唯一功能就是:无论谁访问它,它都会把访问者的公网IP地址显示出来。
可以看到,没有配置代理之前,访问 ifconfig.me 返回当前访问的真实IP地址 49.79.140.89(一个IPv4地址)。这说明你的电脑在没有代理的情况下,可以直接通过IPv4上网。
当配置完临时会话代理后,curl 则把请求发给 127.0.0.1:3067。代理软件收到这个请求,然后由代理软件去访问 ifconfig.me,再把结果返回。
ifconfig.me 这次看到的不再是真实IP,而是代理服务器的出口IP!这个IPv6地址 2a09:bac1... 属于你的代理服务商。IP地址变了,恰恰证明了代理生效了!
直接去访问 GitHub 也是返回 HTTP/1.1 200,表示此时会话已经可以了。
甚至强制使用 IPv4 去访问 ifconfig.me ,返回的还是这个 IPv6 地址,这更说明代理生效了。
步骤二:安装 WSL2 核心组件
不要关闭上面配置完的会话,使用以下命令安装。
wsl --install --no-distribution
这个指令只会安装 WSL2 核心组件,而不会安装任何 Linux 发行版本。
我这里没有彻底卸载 WSL,使用指令 wsl --update 。
安装 Linux 发行版-以 Ubuntu-24.04 为例
首先检查计算机中可用的 Linux 分发版,指令:wsl --list --verbose。如果按照上面只安装 WSL 组件,应该是没有安装任何 Linux 分发。
然后,执行指令wsl --list --online,查看在线商店提供的 Linux 分发版列表。
安装 Ubuntu-24.04,输入指令:wsl --install --distribution Ubuntu-24.04。安装其他发行版也是如此。
安装完后会自动启动,要求你输入账号名称和密码。这个账号的权限和 root 是一致的。
注意:输入密码是不显示的,输入完回车,再次确认一遍即可。
关闭 Ubuntu 虚拟机。
彻底卸载 WSL
这个过程包含两个部分:首先注销并卸载 WSL 中安装的 Linux 发行版,然后彻底卸载 WSL 核心组件。
注销并卸载 Linux 发行版
步骤一:查看发行版本
以管理员身份打开 PowerShell 终端。
首先,查看已安装的发行版名称,确保名称正确。
运行以下命令,确认一下你要卸载的发行版的名字(如果是使用默认安装指令wsl --install就是 Ubuntu)。
wsl --list
会看到下图的结果。
步骤二:注销并删除发行版
使用以下命令。这个命令会彻底删除该发行版的所有数据。将下面的 Ubuntu 替换为上一步中看到的确切名称(想要删除的那个)。
以下操作将会完全删除当前发行版中的所有数据(包括你创建的文件、安装的软件等)。请确保已经备份了所有需要保留的内容。
wsl --unregister Ubuntu
执行后不会有太多提示,它会立即开始删除。
步骤三:发行版图标卸载
可以看到开始菜单上还有发行版的图标。下面进行图标的卸载:
- 在图标上右键点击。
- 在弹出的菜单中,直接选择 “卸载”。
- Windows 会弹出一个确认窗口,点击“卸载”即可。
步骤四:验证卸载
再次运行 wsl --list。如果列表为空,或者已经看不到 Ubuntu 了,说明你已成功卸载。
wsl --list
# 应该会显示 "Windows Subsystem for Linux has no installed distributions."
# (适用于 Linux 的 Windows 子系统没有已安装的分发版。)
至此,WSL 环境里的 Ubuntu 已经被彻底清除了。如果只是想换一个 Linux 发行版,到这里就可以停止,然后使用 wsl --install -d <新发行版> 来安装新的了。
彻底卸载 WSL 核心组件
步骤一:卸载 WSL
如果想让整个 WSL 功能从系统中消失,请继续执行这一步。
同样,这也是最推荐的现代化方法。
确保你在管理员 PowerShell 窗口中。执行卸载命令:
wsl --uninstall
Windows 提供了一个非常方便的一键卸载命令,它会自动处理所有相关的 Windows 功能。
这个命令会卸载所有剩余的 WSL 发行版(虽然已经在第一步手动做了)。
可以看到 Windows 中对应的两个功能没有被关闭,如果考虑不再使用 WSL,可以手动关闭(建议保留)。
步骤二:重启电脑并验证
上一步骤,执行完毕后,建议重启电脑。
重启电脑后,再次打开一个 PowerShell 窗口(无需管理员),尝试运行 wsl 命令。此时系统不会提示 WSL 未安装,这就证明 WSL 没有被彻底卸载了。
当然这一点点底层组件没有被彻底删除并不影响电脑的性能,只是下次安装只需要使用指令 wsl --update。