1 概述
WSL 是适用于 Linux 的 Windows 子系统,可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。
WSL 分为两个版本,一个是 WSL1,一个是 WSL2,WSL2 是 WSL1 的升级版,主要优势是:
- 提高文件系统性能。
- 支持完全的系统调用兼容性。
- 托管 VM。
- 完整的 Linux 内核。
- 完全的系统调用兼容性。
WSL2 建议不要跨操作系统使用文件,若想获得最快的性能速度,请将文件存储在 WSL 文件系统中,在存储时,使用 Linux 文件系统根目录:\\wsl$\Ubuntu-20.04\home\<user name>\Project
。
访问 WSL2 文件系统,可以运行命令 WIN+R
或在文件资源管理器地址栏中键入 \\wsl$
,以查找相应的分发名称并访问其根文件系统。
大多数情况下我们会使用 WSL2,但在以下情况,请考虑使用 WSL1:
- 你的项目文件必须存储在 Windows 文件系统中。
- 一个项目要求对相同的文件使用 Windows 和 Linux 工具进行交叉编译。
- 你的项目需要访问串行端口或 USB 设备,WSL2 不支持访问串行端口。
- 长时间运行的 WSL 会话或访问非常大量的文件。
2 常用命令
2.1 启动与停止
# 启动默认 Linux 分发版
wsl
# 以指定用户身份运行 Linux 分发版
wsl -u <username>
# 运行指定的 Linux 分发版
wsl -d <Linux分发版名称>
# 退出 Linux 分发版
exit
# 终止指定的分发
wsl -t <Linux分发版名称>
# 终止所有运行的分发及 WSL 轻型工具虚拟机
wsl --shutdown
2.2 查看
# 列出已安装且可供使用的 Linux 分发版
wsl -l
# 列出所有分发,包括当前不可用的分发
wsl -l --all
# 仅列出当前正在运行的分发
wsl -l --running
# 仅显示分发名称
wsl -l -q
# 显示所有分发的详细信息
wsl -l -v
2.3 安装与卸载
# 列出可安装 Linux 分发版
wsl -l -o
# 安装指定 Linux 分发版
wsl --install -d <Linux分发版名称>
# 卸载 Linux 分发版,卸载后可以重新安装
wsl --unregister <Linux分发版名称>
2.4 导入与导出
# 导入 Linux 分发版, 可加 --version 指定要用于新分发的版本
wsl --import <Linux分发版名称> <安装位置> <文件名>
# 导出 Linux 分发版,后缀名请以 tar 结尾
wsl --export <Linux分发版名称> <路径>
2.5 其它
# 设置默认 Linux 分发版
wsl -s <Linux分发版名称>
# 在不使用默认 Linux Shell 的情况下执行指定的命令
wsl -e <命令行>
# 更改新分发的默认安装版本
wsl --set-default-version <版本>
# 更新 WSL2 内核到最新版本
wsl --update
# 还原到 WSL2 内核的先前版本
wsl --update --rollback
# 更改指定分发的版本
wsl --set-version <Linux分发版名称> <版本>
3 常用操作
3.1 从 Windows 访问 Linux 网络应用
可以使用 localhost
从 Windows 上访问 Linux 分发版中的应用。
3.2 从 Linux访问 Windows 网络应用
如果要从 Linux 分发版访问 Windows 上运行的网络应用,则需要使用主机的 IP 地址。 你可以执行以下步骤来使其可行。
- 通过在 Linux 分发版中运行以下命令来获取主机的 IP 地址:
cat /etc/resolv.conf
。 - 复制
nameserver
后面的 IP 地址可用于访问 Windows 上运行的网络应用。
3.3 通过远程 IP 地址进行连接
当使用远程 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.100
3.5 运行 Linux 命令
使用 wsl <Linux命令>
可以在 CMD 或 PowerShell 运行 Linux 命令,示例:
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 还有一些高级用法,比如更改磁盘大小,文件权限,环境变量等,具体配置可以参考官方文档。