WSL的安装与使用

First Post:

Last Update:

Word Count:
1.3k

Read Time:
5 min

前言:因为某个项目在windows下编译实在是太慢太慢太慢了

受不了了

,而在Ubuntu下编译非常非常非常快,因此需要安装 WSL 来提高编译速度。

据了解 WSL 有两个主要版本:WSL 1WSL 2,它们在架构、性能和功能上有显著差异:

特性 WSL 1 WSL 2
架构 转换层(Linux 系统调用 → Windows API) 轻量级虚拟机(基于 Hyper-V,运行完整 Linux 内核)
文件系统性能 Windows 文件系统(NTFS)访问较慢 大幅提升(Linux 文件系统 ext4 原生支持)
系统调用兼容性 部分 Linux 系统调用不支持 几乎 100% 兼容(因使用真实 Linux 内核)
启动速度 更快(无虚拟机) 稍慢(需启动轻量级 VM)
内存占用 更低 稍高(需分配固定内存)
网络模式 与 Windows 共享 IP 独立 IP(类似虚拟机,需端口转发)
GPU/Docker 支持 有限 完整支持(CUDA、Docker 等)

WSL 2 虽然性能更强、兼容性更好,但在某些硬件相关的场景下会比 WSL 1 更复杂,主要原因包括:

  1. 网络配置更复杂
  • WSL 2 使用独立的虚拟网络(NAT 模式),而 WSL 1 直接共享 Windows 的网络栈。
  • 问题示例
    • 在 WSL 2 中运行的服务(如 nginx)默认无法通过 localhost 从 Windows 直接访问,需手动配置端口转发或防火墙规则。
    • 跨设备访问 WSL 2 中的服务(如手机调试)需额外设置。
  1. 文件系统访问延迟
  • Windows 访问 Linux 文件:WSL 2 的 Linux 文件存储在虚拟磁盘(ext4)中,Windows 通过 \\wsl$ 访问时会有性能损耗。
  • Linux 访问 Windows 文件:在 WSL 2 中挂载 Windows 目录(如 /mnt/c)时,IO 性能较差(尤其是大量小文件操作)。
  1. USB/外设支持受限
  • WSL 2 默认无法直接访问 USB 设备(如 Arduino、摄像头),需通过第三方工具(如 usbipd-win)或 Windows 驱动桥接。
  • WSL 1 因直接调用 Windows 驱动,外设支持更简单。
  1. GPU 加速需额外配置
  • 虽然 WSL 2 支持 GPU(如 CUDA 开发),但需手动安装:
    1. Windows 侧:NVIDIA 驱动。
    2. WSL 2 侧:Linux 版 CUDA Toolkit。
  • WSL 1 无此需求(但 GPU 功能受限)。
  1. 内存管理问题
  • WSL 2 默认会占用固定内存(如 50% 物理内存),可能因内存不足导致 Windows 卡顿,需手动调整限制(在 .wslconfig 中配置)。

因此,我选择安装 WSL 1 ,接下来,我将开始介绍如何在windows电脑上安装 WSL 1

一、安装Windows终端

windows11自带windows终端,跳过这一步

二、启用 WSL 功能

打开 PowerShell 管理员模式 输入下面指令

1
2
# 启用 适用于Linux的Windows子系统 功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

完成后重启系统

或者也可以手动启用:

Win + S 输入搜索 控制面板 —> 打开 控制面板 —> 点击 程序和功能 —>启动或关闭Windows功能 —> 勾选适用于Linux的Windows子系统 —> 重启系统

三、安装 Linux 发行版

在 Microsoft Store 搜索 Ubuntu ,安装 Ubuntu 24.04.1 LTS

1
2
3
4
5
6
7
8
9
# cmd查看Windows系统中已安装的WSL
wsl -l -v

# 列出可用的分发(需要梯子,在 Microsoft Store 下载不需要梯子)
wsl.exe --list --online

# 进行安装(需要梯子,在 Microsoft Store 下载不需要梯子)
wsl.exe --install <发行版名称>
# 例如:wsl.exe --install Ubuntu-24.04

Ubuntu 安装完成后打开,此时会让你新建用户,按照提示输入用户名密码。

四、设置为 WSL 1

  1. 在 PowerShell 中运行:

    1
    2
    wsl --set-version <发行版名称> 1
    # 例如:wsl --set-version Ubuntu-24.04 1
  2. 等待转换完成。

五、基本使用

  1. 启动 Linux

    • 在开始菜单中点击安装的发行版名称,或命令行输入 wsl
  2. 更新软件包列表

    1
    sudo apt update
  3. 升级已安装的软件

    1
    sudo apt upgrade -y 
  4. Windows挂载目录

    在WSL(Windows Subsystem for Linux)中,/mnt目录是Windows文件系统在Linux环境中的挂载点,用于实现Windows和Linux之间的文件互通访问。

    WSL会自动将Windows的磁盘驱动器(如C:D:)挂载到Linux的/mnt目录下,形成对应子目录:

    • C:盘 → /mnt/c
    • D:盘 → /mnt/d
    • 以此类推。
    • 例如,Windows的C:\Users\YourName\Documents在WSL中路径为/mnt/c/Users/YourName/Documents

    对性能敏感的项目建议放在WSL原生文件系统内(如~/project),而非/mnt下。

    在Windows中编辑WSL文件:使用VSCode的Remote-WSL扩展或直接访问\\wsl$\

    在WSL中编辑Windows文件:注意行尾符和权限问题。

  5. 下载 neofetch htop

    1
    2
    3
    4
    # 使用sudo权限通过apt包管理器安装neofetch和htop两个软件
    # neofetch: 用于在终端显示系统信息和logo的轻量级工具
    # htop: 交互式系统监控工具,比默认的top命令更强大直观
    sudo apt install neofetch htop
  6. 把文件迁移到wsl并递归赋予权限

    1
    2
    3
    4
    5
    # 递归修改所有权(确保用户是所有者)
    sudo chown -R $USER:$USER .

    # 递归赋予读写执行权限
    sudo chmod -R u+rwx .
  7. 使用vscode中的WSL插件访问WSL中的文件与工程

  8. 退出 Linux

    • 在 Linux 终端中输入 exit
  9. 关闭 WSL

    1
    2
    3
    4
    # 会终止所有未保存的 WSL 会话,类似于强制关机。
    wsl --shutdown

    # 如果需要正常退出 Linux 系统,建议先在 WSL 终端内运行 exit 或 sudo shutdown now。