WSL 是适用于 Linux 的 Windows 子系统,可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。
WSL 分为两个版本,一个是 WSL1,一个是 WSL2,WSL2 是 WSL1 的升级版,主要优势是:
- 提高文件系统性能。
- 支持完全的系统调用兼容性。
- 托管 VM。
- 完整的 Linux 内核。
- 完全的系统调用兼容性。
WSL2 建议不要跨操作系统使用文件,若想获得最快的性能速度,请将文件存储在 WSL 文件系统中,在存储时,使用 Linux 文件系统根目录:\wsl$Ubuntu-20.04home
访问 WSL2 文件系统,可以运行命令 WIN+R 或在文件资源管理器地址栏中键入 \wsl$,以查找相应的分发名称并访问其根文件系统。
大多数情况下我们会使用 WSL2,但在以下情况,请考虑使用 WSL1:
- 你的项目文件必须存储在 Windows 文件系统中。
- 一个项目要求对相同的文件使用 Windows 和 Linux 工具进行交叉编译。
- 你的项目需要访问串行端口或 USB 设备,WSL2 不支持访问串行端口。
- 长时间运行的 WSL 会话或访问非常大量的文件。
# 启动默认 Linux 分发版 wsl # 以指定用户身份运行 Linux 分发版 wsl -u2.2 查看# 运行指定的 Linux 分发版 wsl -d # 退出 Linux 分发版 exit # 终止指定的分发 wsl -t # 终止所有运行的分发及 WSL 轻型工具虚拟机 wsl --shutdown
# 列出已安装且可供使用的 Linux 分发版 wsl -l # 列出所有分发,包括当前不可用的分发 wsl -l --all # 仅列出当前正在运行的分发 wsl -l --running # 仅显示分发名称 wsl -l -q # 显示所有分发的详细信息 wsl -l -v2.3 安装与卸载
# 列出可安装 Linux 分发版 wsl -l -o # 安装指定 Linux 分发版 wsl --install -d2.4 导入与导出# 卸载 Linux 分发版,卸载后可以重新安装 wsl --unregister
# 导入 Linux 分发版, 可加 --version 指定要用于新分发的版本 wsl --import2.5 其它<安装位置> <文件名> # 导出 Linux 分发版,后缀名请以 tar 结尾 wsl --export <路径>
# 设置默认 Linux 分发版 wsl -s3 常用操作 3.1 从 Windows 访问 Linux 网络应用# 在不使用默认 Linux Shell 的情况下执行指定的命令 wsl -e <命令行> # 更改新分发的默认安装版本 wsl --set-default-version <版本> # 更新 WSL2 内核到最新版本 wsl --update # 还原到 WSL2 内核的先前版本 wsl --update --rollback # 更改指定分发的版本 wsl --set-version <版本>
可以使用 localhost 从 Windows 上访问 Linux 分发版中的应用。
3.2 从 Linux访问 Windows 网络应用如果要从 Linux 分发版访问 Windows 上运行的网络应用,则需要使用主机的 IP 地址。 你可以执行以下步骤来使其可行。
- 通过在 Linux 分发版中运行以下命令来获取主机的 IP 地址:cat /etc/resolv.conf 。
- 复制 nameserver 后面的 IP 地址可用于访问 Windows 上运行的网络应用。
当使用远程 IP 地址连接到应用程序时,它们将被视为来自局域网 (LAN) 的连接。 这意味着你需要确保你的应用程序可以接受 LAN 连接。例如,你可能需要将应用程序绑定到 0.0.0.0 而非 127.0.0.1。
3.4 从局域网 (LAN) 访问 WSL 2 分发版当使用 WSL 1 分发版时,如果计算机设置为可供 LAN 访问,那么在 WSL 中运行的应用程序也可供在 LAN 中访问。
这不是 WSL 2 中的默认情况,WSL 2 有一个带有其自己独一无二的 IP 地址的虚拟化以太网适配器。 目前,若要启用此工作流,你需要执行与常规虚拟机相同的步骤。下面是一个示例 PowerShell 命令,用于添加侦听主机上的端口 4000 的端口代理并将其连接到端口 4000,并使用 IP 地址 192.168.101.100 连接到 WSL 2 VM。
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.1003.5 运行 Linux 命令
使用 wsl
wsl ls -la
以这种方式运行的命令使用的是同一个工作目录,并且以 WSL 默认用户的身份运行,拥有与调用方进程和终端相同的 Windows 管理权限。
3.6 混合运行 Linux 和 Windows 命令# 组合 Linux 的 ls 命令 和 powershell 的 findstr 命令 wsl ls -la | findstr "git" # 组合 powershell 的 dir 命令和 Linux 的 grep 命令 dir | wsl grep git # 组合 Linux 的 ls 命令 和 powershell 的 > 命令 组合 Linux 的 ls 命令 和 powershell 的 findstr 命令 # 使用 Linux 命令 列出 Linux 文件 wsl ls -la /proc/cpuinfo # 使用 Linux 命令 列出 Windows 文件 wsl ls -la "/mnt/c/Program Files"3.7 从 Linux 运行 Windows 工具
WSL 可以使用 [tool-name].exe 直接从 WSL 命令行运行 Windows 工具。 例如,notepad.exe。
以这种方式运行的应用程序具有相同的工作目录,拥有与 WSL 进程相同的权限,以活动 Windows 用户的身份运行,显示在 Windows 任务管理器中。
4 总结WSL 还有一些高级用法,比如更改磁盘大小,文件权限,环境变量等,具体配置可以参考官方文档。



