HQY

×

WSL 完整教程:从零入门到熟练掌握

hqy hqy 发表于2026-05-27 23:20:40 浏览6 评论0

抢沙发发表评论

WSL 完整教程:从零入门到熟练掌握


图片


目录

  • • 第一章:前置知识——搞清楚这些概念
  • • 第二章:WSL 是什么?深入理解 WSL 1 和 WSL 2
  • • 第三章:安装 WSL——从零开始,实操成功
  • • 第四章:第一次启动——搞定初始化配置
  • • 第五章:进阶命令——管道、查找与进程管理
  • • 第六章:文件系统与跨系统互操作
  • • 第七章:网络配置——理解并解决连接问题
  • • 第八章:GPU 加速计算——在 WSL 里跑机器学习
  • • 第九章:Linux GUI 应用——在 WSL 里运行桌面程序
  • • 第十章:Docker 容器——在 WSL 里使用容器
  • • 附录:命令速查表

第一章:前置知识——搞清楚这些概念

1.1 什么是 Linux?

Linux 是一种操作系统,和 Windows、macOS 是同类东西。但与 Windows 不同的是:

  • • Windows 用图形界面(点点鼠标)为核心
  • • Linux 以命令行(敲命令)为核心,更适合开发者和工程师

Linux 有很多"发行版"(distributions,简称 distros),就像不同的手机品牌都基于 Android 一样。常见的 Linux 发行版包括:

发行版
特点
适合人群
Ubuntu
用户最多,文档最全
初学者首选
Debian
最稳定,社区庞大
服务器、专业开发
Kali
网络安全专用
安全研究人员
Arch
极度定制化
高级用户

在 WSL 里,默认安装的就是 Ubuntu。

1.2 什么是 Bash?

Bash 是一种命令行 shell(解释器),你可以把它理解为 Linux 的"命令输入窗口"。当你打开 WSL 终端时,看到的 $ 或 # 提示符就是 Bash。

Ubuntu 默认使用 Bash 作为命令行解释器,有些发行版默认用 ZSH(功能更强),但原理一样:都是用来接收并执行你输入的命令。

1.3 什么是终端(Terminal)?

终端是一个程序,用来显示命令行界面(CLI)。在 Windows 上,你有几种选择:

  • • Windows Terminal(强烈推荐):微软官方出品,支持多标签,体验最好
  • • PowerShell:Windows 内置,功能强大
  • • 命令提示符(CMD):最老最经典

WSL 安装后,你可以在任何一个终端里输入 wsl 命令来启动 Linux Bash。

1.4 什么是发行版(Distribution)?

在 WSL 语境下,"发行版"就是一个独立的 Linux 系统实例。你可以同时安装多个发行版,比如同时有 Ubuntu 22.04、Debian、Kali,它们互相独立、各自有自己的文件系统和软件。


第二章:WSL 是什么?深入理解 WSL 1 和 WSL 2

2.1 WSL 是什么

WSL(Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统)是 Windows 10/11 内置的一个功能,它让你可以在 Windows 里直接运行 Linux 环境,无需虚拟机,也不用双系统。

WSL 的核心价值在于:同时使用 Windows 和 Linux

  • • 在 Windows 上办公、聊天、玩游戏
  • • 同时开一个 Linux 终端写代码、跑服务

两者同时运行、无缝切换,文件互通、环境互通。

2.2 WSL 1 vs WSL 2——到底有什么区别?

WSL 有两个主要版本,它们的工作原理完全不同:

技术原理

WSL 1 是"翻译层":

Windows 在内核层面实现了一个 Linux 系统调用(system call)翻译器。当 Linux 程序发出一个系统调用时(比如"读取文件"),WSL 1 会把这个调用实时翻译成 Windows NT 内核能理解的形式,然后执行。

这种方式的优点是运行 Windows 文件系统里的文件特别快(因为本来就是 Windows 的文件系统),缺点是不是所有 Linux 程序都能完美兼容(部分系统调用没有完整翻译)。

WSL 2 是"虚拟机":

WSL 2 内部运行了一个真正的轻量级 Linux 虚拟机(基于 Hyper-V),里面有一个真实的 Linux 内核。因此所有 Linux 程序都能完美运行,兼容性是 100%。

代价是:因为多了一层虚拟化,访问 Windows 文件(/mnt/c)时比 WSL 1 稍慢,但访问 Linux 自己的文件时反而更快。

详细对比

特性
WSL 1
WSL 2
运行原理
Linux 系统调用实时翻译
真实 Linux 虚拟机
内核
无真实内核
有(微软定制的 Linux 内核)
系统调用兼容性
部分(约 95%)
完全(100%)
启动速度
极快(秒级)
快(<10 秒)
内存占用
较低
动态(随使用增长)
访问 Windows 文件(/mnt/c)
稍慢
访问 Linux 文件
较快
支持 Docker
有限
完全支持
支持 GPU 加速
不支持
支持
支持 Linux GUI 应用
不支持
支持
实际使用建议
仅特殊场景
日常首选

什么时候用 WSL 1?

绝大多数人应该用 WSL 2。以下是 WSL 1 的极少数适用场景:

  • • 需要通过 SMB/Samba 共享访问 Linux 文件(WSL 2 某些特殊网络场景有兼容性问题)
  • • 内存极其有限(WSL 2 VM 会动态占用内存)
  • • 某些古老的企业内部工具只兼容 WSL 1

结论:除非有明确理由要用 WSL 1,否则无脑用 WSL 2。

2.3 WSL 的版本号和命名澄清

很多人把"WSL 2"里的"2"理解为"第二版软件",其实它是"第二个架构版本"的意思。正确的理解是:

  • • WSL 1 = 架构版本 1(翻译层)
  • • WSL 2 = 架构版本 2(虚拟机)

这和 Ubuntu 22.04 里的"22.04"是两回事,别搞混。


第三章:安装 WSL——从零开始,实操成功

前置知识: 需要 Windows 10 1903+(内部版本 18362+)或 Windows 11,或 Windows Server 2019+。WSL 2 需要 CPU 支持虚拟化(Intel VT-x / AMD-V)和 SLAT。


3.1 前置检查(三步确认)

第一步:检查 Windows 版本

  1. 1. 按 Win + R → 输入 winver → 回车
图片
  1. 2. 查看"版本"和"内部版本"
内部版本
对应 Windows 版本
能否装 WSL
≥ 19041
Windows 10 2004 及以上
✅ WSL 1 + 2
18362 ~ 19040
Windows 10 1903/1909
⚠️ 仅 WSL 1,需手动启用
18362.1049+
Windows 10 1903/1909 + 补丁
✅ WSL 2 可用
< 18362
更旧的版本
❌ 需先升级 Windows
Windows 11
✅ WSL 1 + 2,直接安装

第二步:确认虚拟化已开启

  1. 1. 按 Ctrl + Shift + Esc 打开任务管理器 → "性能" → "CPU"
  2. 2. 右下角查看"虚拟化":已启用 ✓ 没问题
虚拟化未启用?

开机按主板热键进入 BIOS(F2/Del/Esc,联想 F2、戴尔 F2、华硕 Delete、惠普 Esc),找到 "Virtualization Technology" → 设为 Enabled → 保存退出。

第三步:开启 WSL 功能(如未开启)

图形操作:按 Win + R → 输入 appwiz.cpl → "启用或关闭 Windows 功能" → 勾选 ☑ "适用于 Linux 的 Windows 子系统" + ☑ "虚拟机平台" → 确定 → 重启。

图片

或一条命令(管理员 PowerShell):


dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /featurename:VirtualMachinePlatform /all /norestart
图片

注意:开启"虚拟机平台"是使用 WSL 2 的必要条件。开启后必须重启。


3.2 标准安装流程(Windows 10 1903+ / Windows 11 推荐)

适用:Windows 10 2004 及以上,或 Windows 11,或 Windows Server 2022/2025 桌面体验

方式一:Microsoft Store 图形安装(最简单,无需命令)

  1. 1. 按 Win → 打开 Microsoft Store
  2. 2. 搜索并安装你想要的发行版:
    发行版
    特点
    适合人群
    Ubuntu
    用户最多,文档最全
    新手首选
    Ubuntu 24.04 LTS
    最新长期支持版
    追新用户
    Debian
    稳定可靠
    服务器/稳定环境
    Kali Linux
    网络安全专用
    安全研究人员
    Arch Linux
    滚动更新,定制化
    高级用户
    Alpine WSL
    轻量级
    资源敏感场景
3. 安装完成后,在开始菜单找到对应图标并打开
  4. 首次启动会解压文件(等待约 1 分钟),然后设置用户名和密码

方式二:一条命令安装(开发者推荐)

管理员身份打开 PowerShell 或 Windows Terminal,运行:


wsl --install
图片
图片

这条命令会自动完成所有步骤:启用 WSL 功能 → 安装 Linux 内核更新包 → 安装 Ubuntu → 设置 WSL 2。

首次安装需要重启电脑,不要跳过。

安装完成后设置用户名密码:

重启后 Ubuntu 自动打开(或从开始菜单手动打开),按提示:

  1. 1. 输入英文用户名(建议全小写,如 john
  2. 2. 输入密码(输入时屏幕无显示,Linux 安全机制,正常现象)
  3. 3. 再输一次密码确认

看到以下提示符表示安装成功:

图片

验证 WSL 版本:


wsl --list --verbose

确认 Ubuntu 对应 VERSION 列为 2(WSL 2)。

3.3 WSL 常用命令详解

安装与初始化命令

命令
功能
wsl --install
一键安装 WSL(含 Linux 内核 + Ubuntu,默认 WSL 2)
wsl --install -d <发行版>
安装指定发行版,如 wsl --install -d Debian
wsl --list --online
列出所有可从 Microsoft 在线安装的发行版
wsl --list --verbose
列出已安装的发行版(含状态、版本信息)
wsl --update
更新 WSL Linux 内核到最新版本
wsl --version
显示当前 WSL 版本信息

示例:

# 查看可用发行版
wsl --list --online

# 安装 Ubuntu

wsl --install -d Ubuntu

# 安装 Debian

wsl --install -d Debian

# 更新 WSL 内核

wsl --update

发行版管理命令

命令
功能
wsl -d <发行版>
启动指定发行版
wsl --shutdown
关闭所有正在运行的 WSL 发行版
wsl --terminate <发行版>
强制终止指定发行版
wsl --unregister <发行版>
卸载指定发行版(清除所有数据)
wsl --set-default <发行版>
设置默认发行版(运行 wsl 时启动的版本)
wsl --import <名称> <安装路径> <tar文件>
导入离线发行版
wsl --export <发行版> <tar路径>
导出发行版为 tar 归档

示例:

# 启动 Ubuntu
wsl -d Ubuntu

# 关闭所有 WSL

wsl --shutdown

# 终止 Ubuntu

wsl --terminate Ubuntu

# 将 Ubuntu 从 WSL 1 切换到 WSL 2

wsl --set-version Ubuntu 2

# 设置默认发行版

wsl --set-default Ubuntu

# 导出 Ubuntu 为备份

wsl --export Ubuntu D:\Backup\ubuntu.tar

# 从备份导入 Ubuntu

wsl --import Ubuntu D:\WSL\Ubuntu D:\Backup\ubuntu.tar

在 WSL 里执行的命令

命令
功能
wsl --command "<命令>"
从 Windows 直接在 WSL 里执行单条命令
wsl -- <命令>
同上,简写形式
wsl --distribution <发行版> <命令>
对指定发行版执行命令
exit
退出当前 WSL 发行版

示例:

# 从 PowerShell 在 WSL 里执行命令
wsl --command "ls -la"
wsl --command "sudo apt update"

# 查看 WSL 系统信息

wsl --command "uname -a"

# 在指定发行版里执行

wsl --distribution Debian uname -a

WSL 系统运维命令

命令
功能
wsl --status
显示 WSL 整体状态和配置信息
wsl --debug-shell
打开 WSL 调试 shell(排错专用)
wsl --manage <发行版> <选项>
修改发行版启动设置
wsl -e <命令>
启动默认发行版并执行命令(同 --command

示例:

# 查看 WSL 详细状态
wsl --status

# 打开调试 shell

wsl --debug-shell

# 用默认发行版执行命令

wsl -e bash -c "echo hello"

3.4 安装 Windows Terminal(强烈推荐)

Windows 自带终端体验差,建议安装微软官方 Windows Terminal

  1. 1. 打开 Microsoft Store → 搜索 "Windows Terminal" → 安装
图片
  1. 2. 打开后点击左上角  → "设置" → "启动" → 默认配置文件选 Ubuntu → 保存
图片

Windows Terminal 支持多标签页(同时开 Ubuntu/PowerShell/CMD)、快捷键自定义、主题美化,体验远比默认终端好。


3.5 安装多发行版 / 更换默认发行版

查看可安装的发行版列表:

wsl --list --online

安装额外的发行版:【安装完后重启下电脑】

wsl --install -d Debian   # 安装 Debian

wsl --install -d kali-linux     # 安装 Kali Linux

设置默认发行版(运行 wsl 时启动哪个):

wsl --set-default Ubuntu

设置默认 WSL 版本(新建发行版用 WSL 1 还是 2):

wsl --set-default-version 2   # 推荐默认 WSL 2

切换已有发行版的 WSL 版本:

wsl --set-version Ubuntu 2    # Ubuntu 改为 WSL 2
wsl --set-version Ubuntu 1    # Ubuntu 改为 WSL 1

3.6 验证安装成功

打开 PowerShell 或 CMD,运行:

wsl --list --verbose

预期输出示例:

含义说明:

字段
含义
NAME
发行版名称
STATE
运行状态(Running = 运行中,Stopped = 已停止)
VERSION
1 = WSL 1,2 = WSL 2
*
星号
默认发行版(运行 wsl 命令时启动的版本)

3.7 提示:安装过程中常见错误

错误
原因
解决
提示"找不到命令 wsl"
WSL 功能未开启
按 3.1 节步骤开启 WSL 功能
错误 0x80070003
分发版只能在系统盘(C:)运行
确认 Store 下载位置在 C 盘
错误 0x8007019e
WSL 可选组件未启用
在"启用或关闭 Windows 功能"中勾选
错误 0x80370102
CPU 虚拟化未开启
进入 BIOS 开启 VT-x/AMD-V
错误 0x800704ec
组策略阻止 WSL
更新到最新版 Windows Store 版 WSL
虚拟硬盘压缩/加密错误
VHD 文件被压缩
取消 %LocalAppData%\Packages\ 下 LocalState 文件夹的"压缩内容"勾选


第四章:第一次启动——搞定初始化配置

4.1 更新系统软件包

第一次启动 Ubuntu 后,第一件事是更新软件包列表和已安装的软件。这和 Windows Update 类似,Linux 需要定期做这件事。

在 Ubuntu 终端里输入:

sudo apt update && sudo apt upgrade -y

解释一下这条命令:

  • • sudo = 以管理员(root)权限执行(类似 Windows 的"以管理员身份运行")
  • • apt = Ubuntu 的软件包管理器
  • • update = 从服务器获取最新软件包列表
  • • upgrade = 把已安装的软件升级到最新版本
  • • -y = 自动确认所有提示,无需手动输入 yes

为什么先 apt update 再 apt upgrade
apt update 只是"刷新软件包目录",apt upgrade 才是真正升级。顺序不能颠倒。

4.2 设置默认用户

WSL 使用安装时创建的第一个用户账号。如果有多个账号,可以设置默认登录用户:

# 编辑配置文件
sudo
 nano /etc/wsl.conf

在文件中添加:

[user]
default
 = your_username

按 Ctrl + O 保存,Ctrl + X 退出。然后关闭 WSL(exit),在 PowerShell 里执行:

wsl --shutdown

下次启动时就会以默认用户登录。

4.3 安装开发工具

刚装好的 Ubuntu 是一个"最小系统",默认只有基础工具。按需安装:

Python(机器学习/数据分析):

sudo apt install python3 python3-pip python3-venv -y
python3 --version

Node.js(前端/后端开发):

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 重启终端后

nvm install --lts
node --version

Git(代码版本控制):

sudo apt install git -y
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

Go(后端开发):

sudo apt install golang-go -y
go version

4.4 认识终端和基础命令

4.4.1 理解终端提示符

打开终端后,你看到类似这样的内容:

john@DESKTOP-ABC123:~$

含义如下:

  • • john = 当前用户名
  • • DESKTOP-ABC123 = 计算机名
  • • ~ = 当前所在目录(~ 代表用户主目录,即 /home/john
  • • $ = 普通用户提示符(如果是 # 代表 root 管理员用户)
图片

4.4.2 目录操作命令

Linux 里没有 Windows 的"C 盘 D 盘",所有文件都在一棵目录树里。

命令
功能
pwd
显示当前目录
ls
列出当前目录文件
ls -l
详细列表(大小、时间、权限)
ls -la
详细列表 + 隐藏文件(. 开头)
cd 目录
切换目录
cd ~
 或 cd
回到主目录
cd ..
切换到上一级目录
cd -
切换到上一次所在的目录

小技巧: 按 Tab 键可以自动补全目录/文件名。

4.4.3 文件操作命令

命令
功能
mkdir 目录
创建目录
mkdir -p a/b/c
递归创建(父目录不存在也自动创建)
touch 文件
创建空文件
cp 文件 目标
复制文件
cp -r 目录 目标
递归复制整个目录
mv 文件 目标
移动或重命名
rm 文件
删除文件
rm -rf 目录
强制递归删除(危险!三思而后行)
cat 文件
在终端输出文件内容
less 文件
分页查看(空格翻页,q 退出)
head -n 20 文件
查看前 20 行
tail -n 20 文件
查看最后 20 行

警告: Linux 没有"回收站",rm -rf 删除的文件无法恢复。


第五章:进阶命令——管道、查找与进程管理

5.1 管道和重定向

管道和重定向是 Linux 命令行最强大的特性。

管道 | —— 把一个命令的输出送给另一个命令:

# 找出当前目录中最大的 5 个文件
ls
 -lh | sort -k5 -h | tail -5

# 在文件中搜索包含 "error" 的行

cat
 app.log | grep "error"

# 统计文件总行数

cat
 readme.md | wc -l

重定向 > —— 把输出写入文件:

echo "Hello" > greeting.txt   # 覆盖写入
echo
 "More" >> greeting.txt    # 追加写入

stderr 重定向 2> —— 错误信息也能单独保存:

command > output.txt 2> error.txt   # 正确输出和错误分别保存

5.2 查找文件

find —— 在目录树中查找文件:

find . -name "app.py"           # 查找文件
find /var/log -name "*.log"    # 查找所有 .log 文件
find . -mtime -7                # 查找 7 天内修改过的文件

grep —— 在文件内容中搜索:

grep "function" app.py           # 在文件中搜索关键词
grep -r "TODO" ./src/           # 在目录递归搜索
grep -i "error" app.log         # 忽略大小写
grep -n "main" app.py           # 显示行号
grep -v "debug" app.py          # 反向搜索(显示不包含的行)

5.3 系统信息命令

uname -a              # 查看系统信息(内核版本等)
hostname              # 查看主机名
whoami
                # 查看当前用户名
top                   # 查看进程和资源占用(q 退出)
df
 -h                 # 查看磁盘空间
free -h               # 查看内存使用情况

5.4 进程和服务管理

后台运行程序:

./my_script.sh &     # 在命令后加 &,后台运行
nohup
 ./script.sh &   # 关闭终端后继续运行

查看和杀死进程:

ps aux                # 查看所有进程
ps aux | grep python  # 查找 python 相关进程
kill
 PID              # 温柔地结束进程(推荐)
kill
 -9 PID           # 强制杀死(极端情况)

systemd 服务(Ubuntu 22.04+):

sudo systemctl start nginx      # 启动服务
sudo
 systemctl stop nginx       # 停止服务
sudo
 systemctl restart nginx    # 重启服务
sudo
 systemctl status nginx     # 查看状态
sudo
 systemctl enable nginx     # 开机自启动

第六章:文件系统与跨系统互操作

6.1 WSL 的文件系统结构

WSL 有两个文件系统:

Linux 根文件系统 /

这是 WSL 自己的文件系统,存储在 Windows 的一个虚拟硬盘文件里(ext4.vhdx),完全由 Linux 管理。

重要目录:

目录
用途
/home/用户名
 或 ~
用户主目录,存放个人文件
/root
root 用户的主目录
/etc
系统配置文件
/usr
系统程序和库
/var
日志、数据库等可变文件
/tmp
临时文件

Windows 驱动器挂载 /mnt/

Windows 的硬盘驱动器被"挂载"到 Linux 文件系统的 /mnt/ 目录下:

Windows 路径
WSL 路径
C:\/mnt/c
D:\/mnt/d
你的用户目录 C:\Users\用户名
/mnt/c/Users/用户名
图片

6.2 在 Windows 里访问 Linux 文件

方式一:通过网络路径(推荐)

在 Windows 文件资源管理器的地址栏输入:

\\wsl$\Ubuntu\home\john
这会直接访问 Ubuntu 里 john 用户的主目录。你可以像操作普通文件夹一样复制粘贴文件。
图片

注意:修改 WSL Linux 文件系统里的文件时,不要使用 Windows 的编辑器直接修改(比如不要在 Windows 里用 Notepad++ 直接编辑 /home/john 下的文件),这可能导致文件损坏。正确做法是通过 WSL 终端里的编辑器(如 nano、vim、或者 code 命令调用 VS Code)来编辑。

6.3 在 Linux 里访问 Windows 文件

在 WSL 终端里:


cd
 /mnt/c/Users/YourName/Documents   # 访问 Windows 文档目录

WSL 会把 Windows 文件系统当作外部挂载的驱动器来对待,所以操作时要小心:不要用 chmod/chown 修改 Windows 文件的权限(在 /mnt/c 里的文件),这可能产生意外结果。

6.4 文件权限基础

Linux 有严格的权限模型。每个文件有三组权限:

  • • 所有者(Owner):文件属于哪个用户
  • • 所属组(Group):文件属于哪个用户组
  • • 其他人(Others):除所有者和组之外的任何人

每组有三种权限:

  • • r(Read):读取
  • • w(Write):写入
  • • x(Execute):执行(对于目录来说是"进入")

查看权限:


ls
 -l

输出示例:

图片

分解:

字符
含义
-
文件类型(- = 普通文件,d = 目录)
rwx
所有者权限(可读可写可执行)
r-x
组权限(可读可执行,不可写)
r--
其他人权限(仅可读)
john john
所有者:所属组
4096
文件大小
May 7 22:30
最后修改时间

修改权限:


chmod
 +x app.py        # 给文件添加执行权限

chmod
 755 app.py       # 设置为 rwxr-xr-x(所有者完全权限,其他人读和执行)

chmod
 600 app.py       # 设置为 rw-------(只有所有者可读写)

chmod
 -R 755 mydir/    # 递归修改目录及所有子文件(-R = recursive)

修改所有者和组:


sudo
 chown john:john app.py       # 修改文件所有者

sudo
 chgrp developers app.py      # 修改所属组

sudo
 chown -R john:developers dir/ # 递归修改

6.5 区分大小写——Windows 和 Linux 的重要差异

Linux 文件系统区分大小写,Windows NTFS 不区分大小写

这会导致一个常见问题:


# 在 Linux 里,这是三个不同的文件

touch file.txt File.txt FILE.txt   # 成功创建三个文件



# 在 Windows 里,这三个名字指的是同一个文件

反过来,如果你把一个叫 MyApp 的文件夹从 WSL 移到 Windows,然后又在 Windows 里创建了一个叫 myapp 的文件夹,再移回 WSL,就会出问题。

解决方案: 在项目里保持统一的命名规范(推荐全小写 + 连字符或下划线)。

6.6 环境变量和 PATH

环境变量是 Linux 系统的核心概念。PATH 是最重要的环境变量,它告诉系统去哪里找可执行程序。


# 查看 PATH 的内容


echo
 $PATH



# 查看单个环境变量


echo
 $HOME        # 等价于 Windows 的 %USERPROFILE%

echo
 $USER

echo
 $PWD         # 当前目录

添加一个路径到 PATH:


# 临时添加(仅当前终端有效)


export
 PATH=$PATH:/opt/myprogram/bin



# 永久添加(写入配置文件)


echo
 'export PATH=$PATH:/opt/myprogram/bin' >> ~/.bashrc

source
 ~/.bashrc    # 重新加载配置

第七章:网络与进阶配置


7.1 WSL 2 的网络架构

WSL 2 运行在一个轻量级虚拟机里,有自己的 IP 地址,和 Windows 主机不在同一个网络里。架构如下:

默认情况下,WSL 2 通过 NAT(网络地址转换)方式连接外部网络:WSL 里的程序访问互联网时,Windows 帮它做地址转换,就像普通路由器的工作方式。


7.2 从 Windows 访问 WSL 里跑的服务

最常见场景 —— 在 WSL 里跑了一个 Node.js 网站(端口 3000),想在 Windows 浏览器里访问。

WSL 2 默认支持 localhost 转发,直接访问即可:

http://localhost:3000

WSL 2 会自动把 Windows 的 localhost 请求转发到 WSL 虚拟机里。


7.3 从 WSL 访问 Windows 上的服务

例如 Windows 上跑了 MySQL(端口 3306),想从 WSL 连接:

# 先获取 Windows 主机的 IP(在 WSL 里执行)
ip route show | grep -i default | awk '{ print $3}'

# 假设输出是 172.30.96.1

# 连接 Windows 上的 MySQL

mysql -h 172.30.96.1 -u root -p

7.4 镜像网络模式(Windows 11 22H2+)

启用后 WSL 和 Windows 在同一网络,互相访问更简单。通过 .wslconfig 文件配置。

启用方法:

编辑 Windows 侧的配置文件 %UserProfile%\.wslconfig

[wsl2]
networkingMode
=mirrored

重启 WSL:

wsl --shutdown

启用后效果:

  • • WSL 和 Windows 在同一网络,可直接用 localhost 互访
  • • 支持 IPv6
  • • VPN 兼容性更好

配置文件体系

WSL 有两个配置文件,控制不同层面。掌握它们是进阶使用的关键。




7.5 两个配置文件速查

文件
路径
作用域
生效方式
.wslconfig
%UserProfile%.wslconfig(Windows 路径)
全局(所有发行版)
重启 WSL
wsl.conf
/etc/wsl.conf(Linux 路径)
单个发行版
重启该发行版

注意: 修改这两个文件后,都需要重启 WSL 才能生效。用 wsl --shutdown 关闭所有 WSL。


7.6 .wslconfig——全局配置(Windows 侧)

.wslconfig 控制 WSL 2 虚拟机的硬件资源配置(内存、CPU、交换空间等)和实验性网络功能。

文件位置: C:\Users\你的用户名\.wslconfig

创建/编辑方法:

在 PowerShell 中运行:

notepad $env:USERPROFILE\.wslconfig

或者手动到 C:\Users\你的用户名 路径下,新建一个名为 .wslconfig 的文件(注意文件名有前导点,没有扩展名)。

常用配置项:

[wsl2]
# WSL 2 虚拟机最大内存(建议留一半给 Windows)

memory
=4GB

# WSL 2 虚拟机使用的 CPU 核心数

processors
=4

# 交换空间大小(物理内存不够时用硬盘代替)

swap
=2GB

# 是否启用 localhost 转发(默认 true,WSL 2 NAT 模式需要)

localhostForwarding
=true

# 是否启用嵌套虚拟化(在 WSL 里运行虚拟机)

nestedVirtualization
=true

[experimental]

# 自动代理——自动读取 Windows 的代理设置

autoProxy
=true

# DNS 隧道——改善 VPN 兼容性(Windows 11 默认开启)

dnsTunneling
=true

# 镜像网络模式——WSL 和 Windows 在同一网络

networkingMode
=mirrored

配置生效后验证:

wsl --shutdown
wsl -d Ubuntu

然后在 WSL 里查看资源分配:

cat /proc/meminfo | head -2

7.7 wsl.conf——单发行版配置(Linux 侧)

wsl.conf 针对单个 Linux 发行版进行配置,比如启动行为、自动挂载、网络、默认用户等。

文件位置: WSL 里的 /etc/wsl.conf

创建/编辑方法:

sudo nano /etc/wsl.conf

常用配置项:

# 默认登录用户
[user]

default
=john

# systemd 初始化(Ubuntu 22.04+ 默认开启)

[boot]

systemd
=true
# 启动时运行的命令(以 root 身份)

command
=service docker start

# 自动挂载 Windows 驱动器

[automount]

enabled
=true              # 是否自动挂载(默认 true)
mountFsTab
=true          # 是否处理 /etc/fstab
root
=/mnt/               # 挂载根目录
options
="uid=1000,gid=1000,umask=22,metadata"  # 挂载选项

# 网络配置

[network]

generateHosts
=true       # 是否生成 /etc/hosts(默认 true)
generateResolvConf
=true  # 是否生成 /etc/resolv.conf(默认 true,用于 DNS)
hostname
=wsl-demo        # 设置 WSL 虚拟机的主机名

# Windows 和 Linux 互操作性

[interop]

enabled
=true                    # 是否允许从 WSL 启动 Windows 程序(默认 true)
appendWindowsPath
=true          # 是否把 Windows PATH 添加到 Linux PATH(默认 true)

systemd 特别说明:

Ubuntu 22.04 及更高版本默认使用 systemd 作为初始化系统:

# 检查 systemd 是否在运行
systemctl list-units --type=service | head -10

# 启动一个服务

sudo
 systemctl start nginx

# 设置开机自启

sudo
 systemctl enable nginx

7.8 常用配置场景

场景 1:分配更多内存给 WSL(机器学习/编译大型项目)

# .wslconfig
[wsl2]

memory
=8GB
processors
=8
swap
=4GB

场景 2:让 Docker 在 WSL 启动时自动运行

# wsl.conf
[boot]

systemd
=true
command
=service docker start

场景 3:解决 VPN 导致 DNS 解析失败

# wsl.conf
[network]

generateResolvConf
=false

然后手动创建 /etc/resolv.conf

sudo nano /etc/resolv.conf

写入:

nameserver 8.8.8.8
nameserver 8.8.4.4


第八章:GPU 加速计算——在 WSL 里跑机器学习

8.1 概述

WSL 2 支持 GPU 加速计算,这对于机器学习(ML)训练尤为重要。不同于 CPU 纯软件计算,GPU 可以并行处理大量矩阵运算,使 ML 模型训练速度提升数倍甚至数十倍。

WSL 2 支持三种主流 GPU 加速方案:

方案
支持 GPU
适用场景
NVIDIA CUDA
仅 NVIDIA
专业 ML 训练、科学计算
TensorFlow-DirectML
AMD / Intel / NVIDIA
跨平台 ML 训练
PyTorch-DirectML
AMD / Intel / NVIDIA
跨平台 ML 训练

如何选择? 如果你用的是 NVIDIA 显卡,首选 NVIDIA CUDA,性能最强。如果用的是 AMD 或 Intel 显卡,或者需要更好的兼容性,选择 DirectML 方案。

8.2 先决条件

  • • Windows 11 或 Windows 10 版本 21H2 及以上
  • • 已安装 WSL 2 和 Linux 发行版
  • • 支持的显卡(具体见上表)及对应驱动程序

8.3 NVIDIA CUDA 配置

CUDA 是 NVIDIA 官方推出的并行计算平台,在 WSL 2 中通过 Docker 容器运行效果最佳。

第一步:安装 NVIDIA 显卡驱动

从 NVIDIA 官网下载并安装最新驱动程序:
https://www.nvidia.com/Download/index.aspx

第二步:安装 Docker

# 安装 Docker(如果你还没有安装)
curl https://get.docker.com | sh
sudo
 service docker start

第三步:安装 NVIDIA 容器工具包

# 添加 NVIDIA 仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-docker-keyring.gpg
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-docker-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

# 安装

sudo
 apt-get update
sudo
 apt-get install -y nvidia-docker2

第四步:运行 TensorFlow + CUDA 容器

docker run --gpus all -it --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 nvcr.io/nvidia/tensorflow:20.03-tf2-py3

进入容器后,运行内置示例测试 GPU 是否正常工作:

cd nvidia-examples/cnn/
python resnet.py --batch_size=64

如果看到训练过程显示 GPU 内存占用,说明 CUDA 已成功配置。

8.4 TensorFlow-DirectML 配置

DirectML 是微软的 GPU 加速库,支持 AMD、Intel 和 NVIDIA 显卡。

第一步:安装显卡驱动

  • • AMD: https://www.amd.com/support/download/drivers.html
  • • Intel: https://downloadcenter.intel.com
  • • NVIDIA: https://www.nvidia.com/drivers

第二步:安装 Miniconda(Python 环境管理)

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

第三步:创建虚拟环境并安装 TensorFlow-DirectML

conda create --name directml python=3.7 -y
conda activate directml
pip install tensorflow-directml

第四步:验证安装

在 Python 中运行:

import tensorflow as tf
print
("GPU:", tf.config.list_physical_devices('GPU'))

8.5 PyTorch-DirectML 配置

第一步:安装依赖

sudo apt install libblas3 libomp5 liblapack3

第二步:安装 PyTorch-DirectML

pip install torch-directml

第三步:验证安装

import torch
torch_directml.is_available()  # 返回 True 表示可用

8.6 多 GPU 配置

如果电脑有多块显卡,WSL 默认只使用一块。如需指定特定显卡:

export MESA_D3D12_DEFAULT_ADAPTER_NAME="<设备管理器中显示的显卡名称>"

例如设置为 "NVIDIA" 会匹配第一个以 NVIDIA 开头的显卡。


第九章:Linux GUI 应用——在 WSL 里运行桌面程序

9.1 概述

WSL 2 通过 WSLg(WSL GUI)支持在 Windows 上直接运行 Linux 图形应用程序。安装后,Linux GUI 应用会:

  • • 出现在 Windows 开始菜单中(和 Windows 应用并排)
  • • 可固定到 Windows 任务栏
  • • 支持 Alt+Tab 在 Windows 和 Linux 应用间切换
  • • 支持跨平台剪切板粘贴

9.2 先决条件

  • • Windows 10 内部版本 19044+ 或 Windows 11
  • • 已安装 GPU 驱动程序(必须,否则 GUI 无法运行):
    • • Intel: https://downloadcenter.intel.com
    • • AMD: https://www.amd.com/support/download/drivers.html
    • • NVIDIA: https://www.nvidia.com/drivers

9.3 启用 Linux GUI 支持

全新安装 WSL:

在管理员 PowerShell 中运行:

wsl --install

重启后会自动安装 WSLg。

已有 WSL 安装:

更新到支持 GUI 的版本:

wsl --update
wsl --shutdown   # 重启 WSL 使更新生效

注意:Linux GUI 应用仅支持 WSL 2,WSL 1 不可用。

9.4 安装常用 GUI 应用

先更新软件包列表:

sudo apt update

Gnome 文本编辑器(gedit 替代品)

sudo apt install gnome-text-editor -y
gnome-text-editor ~/.bashrc

GIMP(图像编辑)

sudo apt install gimp -y
gimp

Nautilus(文件管理器)

sudo apt install nautilus -y
nautilus

VLC(多媒体播放器)

sudo apt install vlc -y
vlc

X11 工具集(xcalc、xclock、xeyes 等)

sudo apt install x11-apps -y
xclock   # 启动时钟
xeyes    # 启动眼睛跟随鼠标的程序

Google Chrome

cd /tmp
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo
 apt install -f ./google-chrome-stable_current_amd64.deb
google-chrome

Microsoft Edge(Linux 版)

参考官方页面选择命令行安装:
https://www.microsoft.com/edge/download/insider?platform=linux#linux-command

安装后启动命令:microsoft-edge

9.5 从开始菜单管理 GUI 应用

安装完成后,Linux GUI 应用会出现在开始菜单的发行版名称分类下,例如:

  • • 开始菜单 → Ubuntu → GIMP
  • • 开始菜单 → Ubuntu → Nautilus

应用可像 Windows 应用一样固定到任务栏或创建桌面快捷方式。

9.6 故障排除

错误:"无法打开显示"(cannot open display)

如果运行 GUI 应用时出现此类错误:

  1. 1. 确认 WSL 已更新:wsl --update
  2. 2. 确认 GPU 驱动已安装
  3. 3. 重启 WSL:wsl --shutdown

更多排查方法参考 WSLg 官方 Wiki:
https://github.com/microsoft/wslg/wiki/Diagnosing-"cannot-open-display"-type-issues-with-WSLg


第十章:Docker 容器——在 WSL 里使用容器

10.1 Docker 概述

Docker 是一种容器化平台,它允许开发者将应用及其所有依赖(库、框架、环境)打包为一个轻量级容器,确保应用在任何环境下都能一致运行。

容器 vs 虚拟机:

  • • 虚拟机需要虚拟化整个操作系统,占用大量资源
  • • 容器共享宿主 Linux 内核,轻量级、高性能

在 WSL 2 中,Docker 可以原生运行(不模拟),性能和互操作性远超 WSL 1。

10.2 先决条件

  • • WSL 版本 >= 1.1.3.0
  • • Windows 11 或 Windows 10 22H2(推荐)/ 21H2(最低)
  • • 4GB 以上内存
  • • BIOS 中已启用硬件虚拟化
  • • WSL 2 已安装并正常运行

检查 WSL 版本:

wsl --version

10.3 安装 Docker Desktop

第一步:下载并安装 Docker Desktop

从官网下载:https://docs.docker.com/desktop/install/windows-install/

安装时确保勾选"Use WSL 2 instead of Hyper-V"选项。

第二步:启动 Docker Desktop

从开始菜单启动 Docker Desktop,任务栏图标变稳定后表示启动完成。

第三步:确认安装成功

打开 Ubuntu 终端:

docker --version
docker run hello-world

如果看到 hello-world 容器正常运行,说明 Docker 安装成功。

10.4 Docker Desktop 配置

启用 WSL 2 引擎:

Docker Desktop → 设置 → General → 勾选 "Use WSL 2 based engine"

启用特定发行版的 Docker 集成:

Docker Desktop → Settings → Resources → WSL INTEGRATION → 开启对应发行版的开关

10.5 常用 Docker 命令

# 查看 Docker 版本
docker --version

# 查看所有命令

docker

# 查看详细命令帮助

docker run --help

# 列出本地镜像

docker image ls --all

# 列出容器(正在运行)

docker container ls

# 列出所有容器(含已停止)

docker container ls --all
# 或

docker ps -a

# 查看 Docker 系统信息

docker info

# 启动一个容器

docker run -it ubuntu bash

# 停止容器

docker stop <容器ID>

# 删除容器

docker rm <容器ID>

# 删除镜像

docker rmi <镜像ID>

10.6 使用 VS Code 开发容器应用

安装 VS Code 扩展:

  • • WSL 扩展:让 VS Code 连接到 WSL Linux 项目
  • • Dev Containers 扩展:在容器内进行开发
  • • Docker 扩展:在 VS Code 内管理容器

配置开发容器:

  1. 1. 在 WSL 里克隆项目:
git clone https://github.com/你的用户名/你的项目.git
cd
 你的项目
code .

注意:代码应保存在 WSL Linux 文件系统中,而非 /mnt/c,这样文件访问速度更快。

  1. 2. 确认 VS Code 左下角显示绿色远程指示器(已连接 WSL)
  2. 3. 按 Ctrl+Shift+P,输入并选择:Developer Containers: Reopen in Container
  3. 4. 选择合适的容器配置(例如 Python 3)
  4. 5. VS Code 会自动生成 .devcontainer 文件夹(含 Dockerfile 和 devcontainer.json)
  5. 6. 完成后即可在容器内进行开发、调试和运行

在容器内运行和调试:

  1. 1. Ctrl+Shift+D 打开调试视图
  2. 2. 选择合适的运行配置(如 Django / Flask / Node.js)
  3. 3. 按 F5 或 "运行 → 开始调试"
  4. 4. 在浏览器中打开显示的地址查看应用

10.7 在 WSL 里直接安装 Docker 引擎(不使用 Docker Desktop)

如果不使用 Docker Desktop,也可以直接在 WSL 里安装 Docker 引擎:

curl -fsSL https://get.docker.com | sh
sudo
 service docker start

然后安装 NVIDIA 容器工具包(如需 GPU 支持):

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-docker-keyring.gpg
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-docker-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo
 apt-get update
sudo
 apt-get install -y nvidia-docker2

注意:Docker Desktop 和 WSL 内直接安装的 Docker 不能同时运行。如需同时运行 Linux 和 Windows 容器,使用 Docker Desktop;如只需 Linux 容器,可直接安装 Docker 引擎。

10.8 故障排除

错误:docker wsl open //./pipe/docker_wsl:系统找不到指定的文件

这是旧的 WSL Docker 预览版遗留问题。检查并删除已弃用的 wsl 上下文:

docker context ls
docker context rm wsl

之后使用默认上下文即可。

查找 Docker 镜像存储位置

Docker 在 WSL 中创建两个存储文件夹:

  • • \\wsl$\docker-desktop
  • • \\wsl$\docker-desktop-data



附录:命令速查表

安装与更新

操作
命令
一键安装 WSL
wsl --install
安装指定发行版
wsl --install -d Ubuntu
查看可用发行版
wsl --list --online
查看已安装发行版
wsl --list --verbose
更新 WSL
wsl --update
检查 WSL 版本
wsl --version

发行版管理

操作
命令
启动指定发行版
wsl -d Ubuntu
关闭所有 WSL
wsl --shutdown
终止指定发行版
wsl --terminate Ubuntu
卸载发行版
wsl --unregister Ubuntu
导出发行版
wsl --export Ubuntu backup.tar
导入发行版
wsl --import Ubuntu D:\WSL\Ubuntu backup.tar
设置默认发行版
wsl --set-default Ubuntu
设置默认 WSL 版本
wsl --set-default-version 2
切换 WSL 1/2
wsl --set-version Ubuntu 2

日常使用命令

操作
命令
进入 WSL
直接打开终端,或输入 wsl
在 WSL 里执行单条命令
wsl --distribution Ubuntu 命令
从 Windows 执行 WSL 命令
wsl.exe --command "ls -la"
查看 WSL 状态
wsl --status
打开 WSL 调试 shell
wsl --debug-shell(仅排错用)


打赏

本文链接:https://kinber.cn/post/6581.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客