基于WSL的开发环境
官方文档WSL2
https://learn.microsoft.com/zh-cn/windows/wsl/
适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能,可用于在 Windows 计算机上运行 Linux 环境,而无需单独的虚拟机或双引导。
- 使用 WSL 安装和运行各种 Linux 发行版,例如 Ubuntu、Debian、Kali 等。 安装 Linux 发行版并从 Microsoft Store 接收自动更新、导入 Microsoft Store 中没有的 Linux 发行版,或构建你自己的定制 Linux 发行版。
- 将文件存储在独立的 Linux 文件系统中,具体取决于安装的发行版。
- 运行命令行工具,例如 BASH。
- 运行常用的 BASH 命令行工具(例如
grep
、sed
、awk
)或其他 ELF-64 二进制文件。 运行 Bash 脚本和 GNU/Linux 命令行应用程序,包括:
- 工具:vim、emacs、tmux
- 语言:NodeJS、JavaScript、Python、Ruby、C/C++、C# 和 F#、Rust、Go 等。
- 服务:SSHD、MySQL、Apache、lighttpd、MongoDB、PostgreSQL。
- 使用自己的 GNU/Linux 分发包管理器安装其他软件。
- 使用类似于 Unix 的命令行 shell 调用 Windows 应用程序。
- 在 Windows 上调用 GNU/Linux 应用程序。
- 运行直接集成到 Windows 桌面的 GNU/Linux 图形应用程序
- 使用你的设备 GPU 加速 Linux 上运行的机器学习工作负载。
适用于 Linux 的 Windows 子系统文档
https://learn.microsoft.com/zh-cn/windows/wsl/
WSL1/2兼容性
安装 Linux 发行版时,WSL 2 是默认发行版类型。
WSL 2 使用虚拟化技术在轻量级实用工具虚拟机 (VM) 中运行 Linux 内核。 Linux 发行版作为独立的容器在 WSL 2 托管 VM 内运行。
通过 WSL 2 运行的 Linux 发行版将共享同一网络命名空间、设备树(而非 /dev/pts)、CPU/内核/内存/交换空间、/init 二进制文件,但有自己的 PID 命名空间、装载命名空间、用户命名空间、Cgroup 命名空间和 init 进程。
WSL 1 和 WSL 2 之间的主要区别在于:
- 在托管 VM 内使用实际的 Linux 内核、支持完整的系统调用兼容性以及跨 Linux 和 Windows 操作系统的性能。
- WSL 2 是安装 Linux 发行版时的当前默认版本,它使用最新最好的虚拟化技术在轻量级实用工具虚拟机 (VM) 内运行 Linux 内核。
- WSL2 将 Linux 发行版作为托管 VM 内的隔离容器运行。
功能 | WSL 1 | WSL 2 |
---|---|---|
Windows 和 Linux 之间的集成 | ✅ | ✅ |
启动时间短 | ✅ | ✅ |
与传统虚拟机相比,占用的资源量少 | ✅ | ✅ |
可以与当前版本的 VMware 和 VirtualBox 一起运行 | ✅ | ❌ |
托管 VM | ❌ | ✅ |
完整的 Linux 内核 | ❌ | ✅ |
完全的系统调用兼容性 | ❌ | ✅ |
跨 OS 文件系统的性能 | ✅ | ❌ |
systemd 支持 | ❌ | ✅ |
IPv6 支持 | ✅ | ✅ |
WSL 2 仅在 Windows 11 或 Windows 10 版本 1903、内部版本 18362 或更高版本中可用。
通过按 Windows 徽标键 + R,检查你的 Windows 版本,然后键入 winver,选择“确定”。
使用WSL1的情况
你的项目文件必须存储在 Windows 文件系统中。 WSL 1 可以更快地访问从 Windows 装载的文件。
- 如果你将使用 WSL Linux 分发版来访问 Windows 文件系统上的项目文件,并且这些文件无法存储在 Linux 文件系统上,那么,通过使用 WSL 1,你将跨 OS 文件系统实现更快的性能。
一个项目要求对相同的文件使用 Windows 和 Linux 工具进行交叉编译。
- 在 WSL 1 中,跨 Windows 和 Linux 操作系统的文件性能比 WSL 2 中更快,因此如果要使用 Windows 应用程序来访问 Linux 文件,则目前通过 WSL 1 可实现更快的性能
- 你的项目需要访问串行端口或 USB 设备。 但是,现在可通过 USBIPD-WIN 项目为 WSL 2 提供 USB 设备支持。
- WSL 2 不支持访问串行端口。 有
兼容性具体看文档
https://learn.microsoft.com/zh-cn/windows/wsl/faq
WSL命令
设置默认 WSL 版本
wsl --set-default-version <Version>
设置默认 WSL 发行版本
wsl --set-default <Distribution Name>
列出已安装的 Linux 发行版
wsl --list --verbose
列出可用的 Linux 发行版
wsl --list --online
# OR
wsl -l -v
--all(列出所有发行版)、--running(仅列出当前正在运行的发行版)或 --quiet(仅显示发行版名称)
将 WSL 版本设置为 1 或 2
wsl --set-version <distribution name> <versionNumber>
设置默认 WSL 版本
wsl --set-default-version <Version>
设置默认 Linux 发行版
wsl --set-default <Distribution Name>
将目录更改为主页
wsl ~
运行特定的 Linux 发行版
若要通过特定用户运行特定 Linux 发行版,请将 <Distribution Name>
替换为你首选的 Linux 发行版的名称(例如 Debian),将 <User Name>
替换为现有用户的名称(例如 root)。
如果 WSL 发行版中不存在该用户,你将会收到一个错误。 若要输出当前用户名,请使用 whoami
命令。
wsl --distribution <Distribution Name> --user <User Name>
更新 WSL
wsl --update
检查 WSL 状态
wsl --status
检查 WSL 版本
wsl --version
特定用户的身份运行
wsl --user <Username>
发行版的默认用户
<DistributionName> config --default-user <Username>
关闭重启
wsl --shutdown
终止指定的发行版或阻止其运行
wsl --terminate <Distribution Name>
导入导出
wsl --export <Distribution Name> <FileName>
# - `--vhd`:指定导出分发版应为 .vhdx 文件而不是 tar 文件(这仅在使用 WSL 2 的情况下受支持)
wsl --import <Distribution Name> <InstallLocation> <FileName>
# - `--vhd`:指定导入分发版应为 .vhdx 文件而不是 tar 文件(这仅在使用 WSL 2 的情况下受支持)
# - `--version <1/2>`:指定将分发版导入为 WSL 1 还是 WSL 2 分发版
就地导入
将指定的 .vhdx 文件导入为新的发行版。 虚拟硬盘必须采用 ext4 文件系统类型格式。
wsl --import-in-place <Distribution Name> <FileName>
注销或卸载
wsl --unregister <DistributionName>
WSL 磁盘
装载磁盘或设备
wsl --mount <DiskPath>
通过将 <DiskPath>
替换为物理磁盘所在的目录\文件路径,在所有 WSL2 发行版中附加和装载该磁盘。
--vhd
:指定<Disk>
引用虚拟硬盘。--name
:使用装入点的自定义名称装载磁盘--bare
:将磁盘附加到 WSL2,但不进行装载。--type <Filesystem>
:装载磁盘时使用的文件系统类型默认为 ext4(如果未指定)。 此命令也可输入为:wsl --mount -t <Filesystem>
。可以使用blkid <BlockDevice>
命令检测文件系统类型,例如:blkid <dev/sdb1>
。--partition <Partition Number>
:要装载的分区的索引号默认为整个磁盘(如果未指定)。--options <MountOptions>
:装载磁盘时,可以包括一些特定于文件系统的选项。
卸载磁盘
路径中给定的磁盘,如果未提供磁盘路径,则此命令将卸载并分离所有已装载的磁盘。
wsl --unmount <DiskPath>
WSL 网络
https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands#identify-ip-address
WSL-CUDA-VPGU
Windows 11 和 Windows 10 版本 21H2 支持运行在适用于 Linux 的 Windows 子系统 (WSL) 实例内使用 NVIDIA CUDA 进行 GPU 硬件加速的现有 ML 工具、库和常用框架。
这包括 PyTorch 和 TensorFlow 以及本机 Linux 环境中提供的所有 Docker 和 NVIDIA Container Toolkit 支持。
在 WSL 中启用 NVIDIA CUDA
https://learn.microsoft.com/zh-cn/windows/ai/directml/gpu-cuda-in-wsl
CUDA on WSL User Guide
https://docs.nvidia.com/cuda/wsl-user-guide/index.html
CUDA installation on WSL2 Ubuntu 20.04 and Windows11
https://github.com/ashishpatel26/Cuda-installation-on-WSL2-Ubuntu-20.04-and-Windows11