WSL

Caution

请先通篇读完再操作!

简介

WSL(Windows Subsystem for Linux,即Windows 下的 Linux 子系统)是微软开发的一个兼容层,让你可以在 Windows 上原生运行 Linux 环境(比如 Ubuntu、Debian 等),而不需要安装虚拟机(VMware)或双系统。

三种在Windows下实现Linux方式的优缺点:(由AI总结生成)

方式 优点 缺点
WSL 轻量、启动快、与Windows文件互通 不支持图形界面应用,部分底层功能受限
虚拟机 完整Linux环境,支持图形界面 资源占用大,启动慢
双系统 性能最高,完全控制硬件 切换需重启,不能同时使用两个系统


前置准备

  1. 确认开启CPU虚拟化

    Ctrl + Shift + Esc 进入任务管理器,确保CPU虚拟化开启。
    39a2391b-4900-4198-bec0-ac65800ba52b.png

  2. 开启子系统虚拟机平台

    Win 搜索功能二字进入启用或关闭Windows功能
    ea1f8454-651b-4023-8f1b-58d32a8965ff.png

    勾选 适用于Linux 的Windows子系统虚拟机平台,按照提示重启电脑。
    b9a3b77c-c32c-4d54-8f1e-bcc0c940bf28.png



安装

  1. 以管理员身份打开PowerShell,执行以下命令查看可安装的版本。

    1
    wsl --list --online  # 缩写:wsl -l -o

5d68c8ac-40c4-43fd-b221-8425e1beaad7.png

  1. 选择一个版发行版下载,推荐 Ubuntu22.04 或者 Debin ,执行以下命令安装:

    1
    wsl --install <发行版的名字>

    最后输入用户名和密码(输密码时不会显示)即可。这时候在资源管理器里会出现Linux图标和全部的相关文件,可以从Windows从容拖放文件。
    ec62f311-c1d9-4458-955a-046659f18a90.png



启动

在终端输入 wsl 或者直接下拉选项框选择相应的发行版即可进入。
137e641c-8da0-45a3-b1ed-940b0738129a.png


迁移 WSL 下的系统到其他盘符

由于使用 wsl --install <发行版的名字> 命令来安装系统时都是默认安装在 C 盘,具体的路径是:

1
C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_xxx\LocalState

部分用户的 C 盘预分配空间很少,而一个 WSL 下长期使用的系统基本都在 10GB+ ,如果装了不止一个 WSL 下的系统,这就导致 C 盘空间很紧张。如图:
68194fc3-2035-471c-aa7a-1d7190d1eecf.png

ext4.vhdx 本质上是一个虚拟硬盘镜像,里面是完整的 Linux 文件系统,相当于把整个 Linux 的根目录(/)都打包在这一个文件里。

目前 WSL 安装系统无法实现在安装前加上某个参数就能指定盘符。一般有做法:

  1. 安装后立即 move(最简单): 装完之后马上执行 --move,趁着还没写入多少数据,迁移很快。
  2. 先导出C盘WSL下的系统的 tar 包,再把压缩包导入其他盘符,最麻烦。
  3. --import 指定路径安装(需要自己找 tar 包来源,比较麻烦,不推荐)

第一点和第二点各有优缺点:

  1. 用 move 命令迁移速度很快,但稳定性和兼容性不是最好的。
  2. 导出导入的方法繁琐,但这是官方推荐的做法,稳定性和兼容性相对更好。

⚠️ 以下两个方法任选其一即可。

1. 使用 move 命令(不推荐)

Caution

这个方法不一定能移动成功,可能会导致环境无法启动,发现在联想电脑上都会失败,其他电脑用这个命令没问题,目前没搞懂原因。导出 tar 包再安装是官方的推荐方式,更稳定,出事的可能性更小,本人也试过这种方法,不算繁琐,挺快的。参考:【硬核】全网最详细WSL迁移指南,手把手带你清理C盘】 https://www.bilibili.com/video/BV1VhAAecEYP/?share_source=copy_web&vd_source=36ed1d2e47ac14f687ed1e9f8afd9c10

  1. 更新 WSL 版本(可以不更)

    1
    wsl --update

    42fbeff9-4985-4241-b79b-a6494dbb2c2c.png

    若更新失败,可以加一个 --web-download 参数。

    1
    wsl --update --web-download
  2. 查看发行版名称

    1
    wsl -l -v
  3. 关闭 WSL

    1
    wsl --shutdown
  4. 迁移

    1
    2
    mkdir D:\WSL  # 创建 WSL 目录
    wsl --manage <发行版名称> --move D:\WSL

    <发行版名称> 必须写全,有数字也要写(对于Ubuntu来讲,比如Ubuntu-22.04、Ubuntu-24.04等)。

d45fe5fe-0597-450e-9700-aa742fae4975.png

这时候 ext4.vhdx 就会出现在 D 盘的 WSL 目录下,对应 C 盘的空间也会腾让出来。
16bf1b86-24c7-490c-9a00-6449937a3de1.png


2. 导出/导入 tar 包(推荐)

  1. 查看发行版名称

    1
    wsl -l -v
  2. 关闭 WSL

    1
    wsl --shutdown
  3. 导出 tar 包

    1
    2
    mkdir D:\wsl-backup  # 先创建一个目录存放 tar 包
    wsl --export <发行版名称> D:\wsl-backup\ubuntu.tar
  4. 注销原来在 C 盘的发行版

    1
    wsl --unregister <发行版名称>
  5. 导入新位置(D 盘)

    1
    2
    mkdir D:\WSL  # 创建 WSL 目录
    wsl --import <发行版名称> D:\WSL\Ubuntu D:\wsl-backup\ubuntu.tar

    Tip

    若执行到第五步后用户配置(用户名能正常显示)能正确加载出来,就不需要执行第六步了。重新导入新盘符后导致用户配置丢失的情况是小概率事件。

  6. 设置默认用户(否则会默认以 root 登录)

    1
    2
    3
    <发行版名称> config --default-user <你原先的用户名>
    # 或者
    wsl -d <发行版名称> -u <你原先的用户名>

与vscode配合

插件市场搜 wsl 并安装。
7388aed6-ce1a-4900-8fe2-bc9ef0667035.png

左侧会出现小电脑图标,点击右箭头即可链接到对应的文件夹。
b31f97ef-eb65-4ad7-9cad-43b93d80ca77.png

这时候底下的终端也不再是powershell了,而是WSL的Linux环境。
88a8d4e2-0b3d-4301-85e4-c45e7e316cc2.png

退出。
6327c394-d0d0-415c-b4dc-d12857cf7905.png


Note

如果把实验指导书的代码复制进去发现头文件处爆红,那么说明Linux环境缺少 c/c++ 的编译器(即 gcc 和 g++)。
请看这里:用 vscode + wsl 方案做操作系统实验

参考&致谢

blbl@技术爬爬虾:https://b23.tv/PetWC40