什么是 WSL
Windows 中 的WSL(Windows Subsystem for Linux)是可以在 Windows 计算机上运行 Linux 环境,而无需单独的虚拟机或双重启动。
WSL 旨在为想要同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。
WSL1 与 WSL2 对比
默认启用 WSL 的时候,是使用的 WSL2, 因为 WSL2 在性能和兼容性方面做了很多优化,具体区别如下
| 功能 / 特点 | WSL 1 | WSL 2 |
|---|---|---|
| Windows 与 Linux 之间的集成 | ✅ | ✅ |
| 快速启动时间 | ✅ | ✅ |
| 与传统虚拟机相比,资源占用很小 | ✅ | ✅ |
| 使用 VMware 和 VirtualBox 的当前版本运行 | ✅ | ❌ |
| 托管 VM | ❌ | ✅ |
| 完整 Linux 内核 | ❌ | ✅ |
| 完整的系统调用兼容性 | ❌ | ✅ |
| 跨 OS 文件系统的性能 | ✅ | ❌ |
| systemd 支持 | ❌ | ✅ |
| IPv6 支持 | ✅ | ✅ |
开启 WSL 功能
在 Windows 的 服务中,找到 Windows Linux 选项,并开启 Windows Linux 服务
使用如下命令验证 WSL 是否安装成功
wsl --list --verbose
WSL 启动与卸载
在使用 wsl 命令安装了 linux 版本之后,可以直接在 power shell 命令行中点击下拉列表即可,选择想要启动的 linux 系统即可
卸载对应的linux版本
wsl --unregister Ubuntu-22.04
常用命令
查看可用的版本
wsl --list --online
选择版本安装
wsl --install Ubuntu-22.04 --web-download
查看安装了哪些linux系统
wsl --list -v
如果安装了多个linux版本,可以通过如下命令进行切换
wsl --set-default Ubuntu-22.04
备份linux 系统
wsl --export Ubuntu-22.04 Ubuntu-22.04.tar
导入系统到D:/wsl,并且命名为Ubuntu-22.04-2
wsl --import Ubuntu-22.04-2 D:/wsl C\XXXX\Ubuntu-22.04.tar
# 导入成功后,可以通过如下命令查看
wsl --list -v
其他常用操作
文件共享
默认windows的磁盘会挂载到linux操作系统,例如
lin@lin:~$ df -h
Filesystem Size Used Avail Use% Mounted on
none 12G 0 12G 0% /usr/lib/modules/6.6.87.1-microsoft-standard-WSL2
none 12G 4.0K 12G 1% /mnt/wsl
drivers 501G 108G 393G 22% /usr/lib/wsl/drivers
/dev/sdd 1007G 1.2G 955G 1% /
none 12G 76K 12G 1% /mnt/wslg
none 12G 0 12G 0% /usr/lib/wsl/lib
rootfs 12G 2.7M 12G 1% /init
none 12G 472K 12G 1% /run
none 12G 0 12G 0% /run/lock
none 12G 0 12G 0% /run/shm
none 12G 76K 12G 1% /mnt/wslg/versions.txt
none 12G 76K 12G 1% /mnt/wslg/doc
C:\ 501G 108G 393G 22% /mnt/c
D:\ 454G 82G 373G 18% /mnt/d
F:\ 932G 300G 633G 33% /mnt/f
tmpfs 12G 4.0K 12G 1% /run/user/1000
windows 也可以直接查看linux的文件
端口转发
添加端口转发
如果仅想将 Linux 中的某个端口暴露出来,可以通过端口转发的方式暴露。如下是将本机的 873 端口请求转发到 Linux 虚机的 873 端口
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=873 connectaddress=localhost connectport=873
删除端口转发
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=873
Linux 使用物理机 IP
-
在 WSL setting 中设置网络模式为 Mirrored
- 重启 WSL
# 关闭 WSL
wsl.exe --shutdown
# 启动 WSL
wsl
- 查看 linux 主机 ip,此时就变成了 windows 主机 IP
root@lin:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 10.255.255.254/32 brd 10.255.255.254 scope global lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 40:b0:76:9e:80:3b brd ff:ff:ff:ff:ff:ff
3: loopback0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:2c:c9:f1 brd ff:ff:ff:ff:ff:ff
4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 60:e3:2b:fe:24:ff brd ff:ff:ff:ff:ff:ff
inet 192.168.6.10/24 brd 192.168.6.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::ab1c:85a6:81fd:1374/64 scope link nodad noprefixroute
valid_lft forever preferred_lft forever
参考
微软官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/compare-versions