WSL2安装与卸载

273 阅读8分钟

开发人员可以在 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