WSL简介
WSL
WSL全称Windows Subsystem for Linux,官方翻译“适用于Linux的Windows子系统”(个人觉得翻译成Windows的Linux子系统更符合国人语言习惯)。以下是微软官方对WSL的描述
适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。
您可以: 在 Microsoft Store 中选择你偏好的 GNU/Linux 分发版。 运行常用的命令行软件工具(例如 grep、sed、awk)或其他 ELF-64 二进制文件。 运行 Bash shell 脚本和 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 应用程序。
WSL 2
WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的主要目标是提高文件系统性能,以及添加完全的系统调用兼容性。
这一新的体系结构改变了这些 Linux 二进制文件与Windows 和计算机硬件进行交互的方式,但仍然提供与 WSL 1(当前广泛可用的版本)中相同的用户体验。
单个 Linux 分发版可以在 WSL 1 或 WSL 2 体系结构中运行。 每个分发版可随时升级或降级,并且你可以并行运行 WSL 1 和 WSL 2 分发版。 WSL 2 使用全新的体系结构,该体系结构受益于运行真正的 Linux 内核。
简单来说WSL2是WSL的加强版,其实现方式与WSL不同,并且WSL 2拥有完整的Linux内核、更贴近真实Linux的使用场景。
为什么要使用WSL&WSL 2 ?
我们日常工作学习中有很多涉及与Linux系统的交互,学院的课程中也有大量的以Linux为基础的知识和命令,如果我们日常工作与使用环境就是Linux那还好,无需切换就可无缝对接。但Windows毕竟是市场占有率最高的操作系统,有大量的人群办公\日常环境需要Windows,而开发环境需要Linux。这就产生了一些在Windows环境下使用Linux的需求。面对这个需求目前有如下集中常用解决方案:目前我们可选择的解决方案:
WSL方案是微软近两年拥抱开源后推出的一个非常棒的解决方案;使用WSL,Windows与Linux子系统将共用同一文件系统,Windows创建的文件Linux子系统也可以访问并修改,反之亦然。我们可以在WSL中使用三剑客命令查询分析windows文档、日志、使用shell命令或者bash脚本运行存储在windows中的linux程序、甚至在WSL中创建docker容器,在windows下使用docker desktop进行可视化管理。特别方便有双系统环境来回切换需求的人。总之使用WSL既可以使用windows的图形化操作界面又可以使用Linux便捷的命令行工具,很好的满足了我在windows下使用linux的需求。接下来我将介绍如何打造及使用Winux系统。
WSL与WSL 2差异
为什么要升级到WSL2
用过 WSL 第一代的朋友一定都遇到过一些比较蛋疼兼容性的问题,这些问题是由于 WSL 并不“完整”导致的。说到底 WSL 还只是一个用于访问 Linux 环境的兼容层,并没有实现 Linux 内核的完整功能。比如,我遇到了这些情况:
- 无法启动Go的 Debug 进程,导致调试Go程序很麻烦
- 需要在 WSL 下单独安装一套 Docker 引擎,并进行额外配置
- 在 WSL 下启动 VS Code 后,会出现目录中文件被占用的情况,导致无法重命名,必须要先退出 VS Code
- 无法正常使用 Linux 下全部命令,比如netstat
而 WSL2 基于Hyper-V功能的子集提供了“真正的 Linux 内核”,因此上述问题也被解决了。同时,WSL2 也 支持 Windows 10 家庭版,因此之前家庭版不能用 Docker Desktop 的情况也已经成了历史。 这对于习惯使用 Linux 开发,但是又需要 Windows 玩游戏,同时不希望用盗版的有志青年们来说简直是天大的福音。
安装WSL 2
只有 Windows 10 版本 2004 的内部版本 19041 或更高版本中才提供 WSL 2。如果是更早期的版本,需要参照官方文档手动安装
配置WSL 2
wsl.conf/.wslconfig 配置参考
[automount]
enabled = true
root = /mnt/
## metadata 是否将元数据添加到 Windows 文件以支持 Linux 系统权限
options = "metadata,umask=22,fmask=111"
mountFsTab = true
[filesystem]
## 要对所有文件和目录排除的权限的八进制掩码
umask = 022
## 不加载Windows中的PATH内容
[interop]
appendWindowsPath = false
## 注意,WSL2默认/etc/hosts每次重启会自动改变,需要添加/etc/wsl.conf,内容如下
# 192.168.50.88 win
#[network]
## true 将 WSL 设置为生成 /etc/hosts。 hosts 文件包含主机名对应的 IP 地址的静态映射。
#generateHosts = false
## true 将 WSL 设置为生成 /etc/resolv.conf。 resolv.conf 包含能够将给定主机名解析为其 IP 地址的 DNS 列表。
#generateResolvConf = false
## Set a command to run when a new WSL instance launches. This example starts the Docker container service.
[boot]
systemd=true
#command = service docker start