安装WSL
巨硬官方文档:https://learn.microsoft.com/en-us/windows/wsl/install-on-server
powershell下执行命令。
1、安装wsl
一条命令直接搞定,中间可能提示选择版本
wsl --install
列出所有可安装的版本
wsl -l -o
用wsl –install -d <发行版>选择安装的版本例如
wsl --install -d Ubuntu-22.04
若出现错误代码0x8000ffff
更新wsl
wsl --update
再开始安装
之后设置用户名及密码,安装成功,可能需要重启
2、查看wsl版本及运行状态
wsl --list --verbose
#可简写成
wsl -l -v
VERSION表示为wsl2版本。*号为当前的默认发行版
3、设置默认版本
wsl --set-default <发行版名称>
#例如:
wsl --set-default Ubuntu-22.04
之后默认版会变
4、启动另一个发行版
wsl -d <发行版名称>
#例如
wsl -d kali-linux
5、配置文件信息:
默认配置文件位置在C:\Users\用户名\.wslconfig
此配置文件为全局配置。每个linux子系统的配置文件再/etc/wsl.conf
中
配置文件官方文档https://learn.microsoft.com/en-us/windows/wsl/wsl-config
6、安装文件路径
如果是桌面系统,应用商店安装的wsl,默认安装位置是C:\Users\<用户名>\AppData\Local\Packages\<发行版包名>\LocalState\
例如这样:
C:\Users\<你的用户名>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\rootfs\
windows server 中使用命令行安装的wsl在这里
C:\Users\Administrator\AppData\Local\wsl\<发行版包名>\
里面会有vhdx虚拟硬盘文件。
基本wsl命令文档https://learn.microsoft.com/en-us/windows/wsl/basic-commands
注意!wsl默认轻量级运行,随用随开,关闭wsl的终端后也会关闭wsl服务。无法后台运行。但可通过其他设置解决此问题。
7、关闭wsl
wsl --terminate <实例名称>
#例如
wsl --terminate ubuntu
#shutdown命令是关闭所有linux子系统
wsl --shutdown
8、嵌套虚拟化
wsl本身依靠Hyper-v的虚拟化支持,如果想在Hyper-v的虚拟机中安装wsl需要启动嵌套虚拟化。属于不太正经的方案。
卸载和删除wsl
删除wsl中已安装的某个linux只需要执行wsl --unregister
<名称>即可
wsl --unregister <名称>
#例如
wsl --unregister Ubuntu-24.04
卸载wsl本身也只需一条命令
#这个命令会移除 WSL 核心组件 和 虚拟机平台依赖
wsl --uninstall
配置WSL网络
wsl提供了一个可视化的设置界面,此界修改设置后,会同步修改wsl的配置文件(.wslconfig
),所以重点还是配置文件。
网络模式有五种
- None 没有网络连接。wsl无法连接任何网络
- Net Net模式,也是默认的模式。wsl有独立的IP地址,使用windows宿主机进行网络地址转换,外网无法直接访问WSL。
- Mirrored 镜像模式,和宿主机共享相同的网络设置。(windows server不支持此模式)
- VirtioProxy 代理模式,通过 virtio 通道 + Windows Proxy 来转发网络流量,wsl同样共享宿主机的IP。
- bridged 桥接模式,图形化设置界面中没有这个模式,需要手动修改配置文件。需要Hyper-v配合使用。
修改设置后需重启wsl服务。
wsl --shutdown
#之后重新打开wsl即可
配置网络的目的主要有三个
- 一、让WSL中的linux系统能上网
- 二、让windows系统宿主机能访问WSL
- 三、让外网能直接访问WSL
Net模式,能实现一和二,无法直接实现三。需要在windows宿主机中配置端口转发或用IIS、Nginx配置反向代理。过于不方便。
Mirrored模式,当前的windows server 2022 21H2、windows server 2025 24H2均不支持此模式。在此不做讨论。
VirtioProxy模式可以实现一和二,但三依然有问题。仍然需要手动配置端口转发之类的操作。
bridged可同时实现一、二、三,且WSL有着自己的独立IP。
当年更新此功能时的文档https://github.com/microsoft/WSL/releases/tag/2.0.0
打开Hyper-v管理器——虚拟交换机管理器
名称可以随便起名,英文名字。此处命名为netowrk,选择外部网络,下拉箭头中选择你电脑的网卡。勾选“允许管理操作系统共享此网络适配器”。之后点确定。
注意,此操作会使网络断开。
打开wsl配置文件C:\Users\Administrator\.wslconfig
添加以下内容并保存。
[wsl2]
networkingMode=bridged
vmSwitch=netowrk # 之前设置的虚拟交换机
ipv6=true #启动IPv6
之后重启wsl wsl --shutdown
重启之后,wsl的窗口设置界面网络模式中多了个Bridged。
同时wsl中的linux获得了独立的IP地址。成为了传统意义上的虚拟机。
之后需要修改ubuntu的网络配置即可。参阅Netplan网络配置介绍。至少Ubuntu 24.04.2 LTS支持Netplan和systemd-networkd。
但是wsl重启后,Ubuntu 24.04.2会多出一个IPv4地址。这是因为WSL2 的网络接口eth0由 Windows Hyper-V 桥接或 NAT 管理,ubuntu系统中的网络管理无法覆盖宿主机的设置。
但只要再运行下sudo netplan apply
命令,那条多余的IPv4地址就会消失。
采用systemd服务,设置开机执行netplan apply
命令。
#创建netplan-apply.service文件
vi /etc/systemd/system/netplan-apply.service
#添加以下命令
[Unit]
Description=Apply Netplan automatically at boot
After=network.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/netplan apply
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
#保存退出
#启动服务
sudo systemctl daemon-reload
sudo systemctl enable netplan-apply.service
sudo systemctl start netplan-apply.service
#这样子每次启动后那条多余的IP地址就会消失。
#若想删除这个服务需要以下操作
#停止服务
sudo systemctl stop netplan-apply.service
#禁用开机启动项
sudo systemctl disable netplan-apply.service
#删除服务文件
sudo rm /etc/systemd/system/netplan-apply.service
重载systemd
sudo systemctl daemon-reload
sudo systemctl reset-failed
WSL文件共享
windows访问WSL文件。
windows server打开资源管理器,或者直接在资源管理器右侧选择linux。注意,windows访问wsl时是以默认用户的权限进行访问。默认情况下没有root权限。
\\wsl$
WSL访问windows文件
WSL中打开mnt目录,其中c、d均为windows系统中的盘符。
cd /mnt
WSL开机启动
首先保证wsl是最新版,老版本不支持此功能。
通过windows计划任务实现wsl开机启动。
通过任务计划启动的wsl也具备后台运行的功能,也就是说当关闭wsl的终端界面后,wsl不会退出。
如果想退出wsl需要powershell中运行wsl --shutdown
或wsl --terminate <实例名称>
但退出后再启动的wsl便没有后台常驻功能了。
打开任务计划程序,创建新任务,名称可以随便起(此处起名为wsl)。勾选“不管用户是否登录都要运行”
触发器选项卡,新建,开始任务下拉菜单中选择启动时。之后确定。
操作选项卡,新建,操作下拉菜单中选择启动程序。程序或脚本中输入"C:\Program Files\WSL\wsl.exe"
,之后确定。
如果想要指定启动版本,只需要在添加参数中写上即可。例如:-d Debian
。但这样会导致默认发行版和指定的版本同时启动。
条件选项卡中所有选项取消勾选
设置选项卡中勾选“允许按需执行任务”其余的全部取消勾选。
设置完成后点击确定。会要求你输入密码。之后可以重启计算机,测试wsl是否运行。
WSL后台运行
最简单的方法,打开wsl的终端,不要关闭,最小化即可。
另一种方法是找一个后台常驻的轻量级进程再wsl中运行,以达到后台运行的目的。例如dbus命令
#最简单的方法,使用如下命令启动wsl即可保证后台运行。
wsl --exec dbus-launch true
#搭配-d可以指定发行版,但前提是发行版中必须支持dbus命令,否则会报错
wsl -d kali-linux --exec dbus-launch true
#错误信息
PS C:\Users\Administrator> wsl -d kali-linux --exec dbus-launch true
<3>WSL (253 - Relay) ERROR: CreateProcessCommon:735: execvpe(dbus-launch) failed: No such file or directory
#解决方法很简单,在linux子系统中安装dbus-x11即可。
sudo apt update
sudo apt install dbus-x11
使用nohup、screen 或 tmux同理