Files
SiMengWebSite_Notes/docs/blog/technology/Operate_WSL2.md
2025-10-01 03:21:10 -04:00

120 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: WSL2 核心操作指南
createTime: 2025/09/30 16:08:32
cover: https://image.simengweb.com/elysia_cover_image/2MEiWEhvsx8OtKeJ.png
permalink: /article/operate-wsl2/
---
这篇文章主要讲WSL2虚拟机核心操作哦它基于轻量级Hyper-V运行像贴心小精灵默默工作还能用命令行精细控制接下来讲启动/关闭、实例管理、资源配置、网络操作、备份迁移这五大操作,是不是很期待呢~♪
<!-- more -->
## 启动/关闭 WSL2 虚拟机
WSL2的虚拟机平时是由Windows自动管理的呢不过我们也可以通过命令手动控制它的生命周期哦
```
# 启动指定的发行版
wsl -d Ubuntu-20.04
# 关闭指定的发行版
wsl --terminate Ubuntu-20.04
```
如果想要完全关闭WSL2的所有虚拟机也是可以的哦
使用这个命令后,所有的发行版都会被强制终止,内存、网络、文件句柄都会被全部释放呢~
```
wsl --shutdown
```
## 管理正在运行的 WSL 实例
想知道当前有哪些WSL实例在运行吗很简单哦使用下面这个命令就可以查看啦
```
wsl -l -v
```
输出结果大概是这个样子的哦~
```text
NAME STATE VERSION
* Ubuntu Running 2
docker-desktop Running 2
Ubuntu-20.04 Stopped 2
```
看到那个带星号(*)的了吗?那就是当前的默认系统哦~如果想要设置新的默认发行版,可以使用这个命令:
```
wsl --set-default Ubuntu-20.04
```
嘿嘿~接下来讲讲怎么删除一个 WSL 实例哦如果想和某个WSL实例说拜拜就可以用下面这个命令哒
```
wsl --unregister Ubuntu-20.04
```
注意,删除后无法恢复哦~请谨慎操作~
## 配置 WSL2 资源
WSL2的资源也是可以自定义配置的哦我们可以通过编辑`%USERPROFILE%\.wslconfig`文件来设置内存、CPU核心数等参数呢
```
[wsl2]
# 内存限制默认80% 物理内存)
memory=4GB
# CPU 核心数限制(默认:全部核心)
processors=2
# 交换空间大小默认25% 内存)
swap=2GB
# 是否启用 localhost 端口转发(默认 true
localhostForwarding=true
```
要注意哦修改完配置后必须重启WSL2虚拟机才能让这些设置生效呢
## 网络相关配置
WSL2使用的是虚拟NAT网络哦它和Windows主机是相互隔离的但又可以互相通信呢是不是很神奇
| 方向 | 访问方式 | 说明 |
| --- | --- | --- |
| Windows -> WSL2 | localhost:port | 自动端口转发(需要`localhostForwarding=true` |
| WSL2 -> Windows | `host.docker.internal``$(cat /etc/resolv.conf \| grep nameserver \| awk '{print $2}')` | 获取主机的IP地址 |
| 外部机器 -> WSL2 | 默认不可达 | 需要手动端口转发或使用 Windows 防火墙规则 |
想知道WSL2的IP地址吗可以用这个命令查看哦不过要注意每次启动WSL2后IP地址可能会变呢
注意哦这个命令需要进入到WSL2虚拟机内部执行才行呢
```
hostname -I
```
如果需要访问WSL2中的服务多亏了`localhostForwarding`的配置,我们直接访问[localhost:port](http://localhost:port)就可以啦~超方便的~
如果需要手动设置端口转发可以在Powershell中添加防火墙规则和端口转发哦不过要记得以管理员方式打开Powershell呢
```
# 获取 WSL2 当前IP地址
$wslIp = (wsl hostname -I).Trim()
$wslIp
# 添加端口转发(以 8000 端口为样例)
netsh interface portproxy add v4tov4 listenport=8000 listenaddress=0.0.0.0 connectport=8000 connectaddress=$wslIp
# 开放 Windows 防火墙
New-NetFirewallRule -DisplayName "WSL2 Port 8000" -Direction Inbound -LocalPort 8000 -Protocol TCP -Action Allow
# 撤销端口转发
netsh interface portproxy delete v4tov4 listenport=8000 listenaddress=0.0.0.0
# 撤销开放的防火墙规则
Remove-NetFirewallRule -DisplayName "WSL2 Port 8000"
```
## 备份和迁移
WSL2发行版也是可以备份和迁移的哦我们可以把整个发行版导出成tar文件这样就可以用于备份、迁移或者分享给其他小伙伴啦
```
# 导出指定发行版到 tar 文件
wsl --export <发行版名称> <输出文件路径.tar>
wsl --export Ubuntu-20.04 D:\backups\ubuntu-2004.tar
# 导入 tar 文件为新的发行版
wsl --import <新发行版名称> <安装目录> <tar 文件路径> [选项]
wsl --import Ubuntu-Backup C:\wsl\Ubuntu-Backup D:\backups\ubuntu-2004.tar --version 2
```
要注意哦导入完成后默认用户会变成root呢如果想要设置回原来的用户可以使用这个命令
```
ubuntu2004.exe config --default-user username
```
悄悄告诉大家一个小秘密WSL2是可以同时存在多个同源发行版的哦这样我们就可以在不同的环境中进行不同的实验啦是不是很方便呢