import{_ as e,c as a,a as n,o as i}from"./app-CsTq_I9B.js";const l={};function d(t,s){return i(),a("div",null,[...s[0]||(s[0]=[n(`

这篇文章主要讲WSL2虚拟机核心操作哦~它基于轻量级Hyper-V运行,像贴心小精灵默默工作~还能用命令行精细控制!接下来讲启动/关闭、实例管理、资源配置、网络操作、备份迁移这五大操作,是不是很期待呢~♪

启动/关闭 WSL2 虚拟机

WSL2的虚拟机平时是由Windows自动管理的呢,不过我们也可以通过命令手动控制它的生命周期哦~

# 启动指定的发行版
wsl -d Ubuntu-20.04

# 关闭指定的发行版
wsl --terminate Ubuntu-20.04

如果想要完全关闭WSL2的所有虚拟机,也是可以的哦~

使用这个命令后,所有的发行版都会被强制终止,内存、网络、文件句柄都会被全部释放呢~

wsl --shutdown

管理正在运行的 WSL 实例

想知道当前有哪些WSL实例在运行吗?很简单哦~使用下面这个命令就可以查看啦:

wsl -l -v

输出结果大概是这个样子的哦~

  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 -> WSL2localhost:port自动端口转发(需要localhostForwarding=true
WSL2 -> Windowshost.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就可以啦~超方便的~

如果需要手动设置端口转发,可以在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是可以同时存在多个同源发行版的哦~这样我们就可以在不同的环境中进行不同的实验啦~是不是很方便呢~

`,36)])])}const r=e(l,[["render",d]]),c=JSON.parse('{"path":"/article/operate-wsl2/","title":"WSL2 核心操作指南","lang":"zh-CN","frontmatter":{"title":"WSL2 核心操作指南","createTime":"2025/09/30 16:08:32","cover":"https://image.simengweb.com/elysia_cover_image/2MEiWEhvsx8OtKeJ.png","permalink":"/article/operate-wsl2/"},"readingTime":{"minutes":3.74,"words":1123},"git":{"createdTime":1759223056000,"updatedTime":1759303270000,"contributors":[{"name":"si-meng-spec","username":"si-meng-spec","email":"simeng@simengweb.com","commits":3,"avatar":"https://avatars.githubusercontent.com/si-meng-spec?v=4","url":"https://github.com/si-meng-spec"}]},"filePathRelative":"blog/technology/Operate_WSL2.md","headers":[],"categoryList":[{"id":"126ac9","sort":10000,"name":"blog"},{"id":"750eb7","sort":10001,"name":"technology"}]}');export{r as comp,c as data};