利用WSL2,打造Windows+Linux的开发环境

查理谈科技 2024-05-12 22:55:23

最近搞了一台搭载Windows11的笔记本电脑, 发现Win11 提供的WSL 功能比较强大, 之前就听说Visual Code + WSL的开发组合, 可以极大的提升Windows的开发体验,于是仔细研究和学习, 发现确实如此, 今天先来介绍下WSL2.

一、WSL出现的背景

在介绍WSL 之前, 先来了解一下开发人员的开发环境。一般而言, 由于开发的产品不同, 开发人员的开发工具也是各有不同。 一般而言, Web开发人员是最多的, 使用Python、JEE、JavaScript /HTML等, 这些开发人员一般是在本地搭建开发环境, 然后把产品部署到远程的服务器中, Web 应用的服务器操作系统往往是Linux, 而本地操作系统是Windows操作系统比较多, 当然, 最近10年之间, MacOS 越来越流行, 很多大厂都会给员工配备MacBook或者MacBook Pro, 但是使用Window 的开发人员应该是最多的。

但是, 苹果的笔记本毕竟价格高昂, 大多数工作还是在Windows 下开发的。 相比较而言, Windows的一些操作, 都是界面操作, 很多操作不能通过命令行来做。我之前用Java 开发比较多, Java 开发人员的第一步,安装完JDK, 就需要手工打开资源管理器-高级-变量来配置JAVA_HOME变量, 对此我是印象非常深刻, 操作不难但是步骤繁琐。

但是, Windows 也在不断为开发人员提供更好的开发环境, 努力弥补Windows 下操作Linux的不利, 这种情况下, WSL 就出现了。

二、WSL 简介

WSL, 全称是Windows Subsystem for Linux, 顾名思义,就是把Linux 视为一个Windows的子系统, 无需虚拟机或者在电脑上安装双系统,在这个WSL 子系统上, 可以非常方便的运行各种Linux的命令、工具和应用。

相比于在Windows 上通过Vmware /VirtualBox等虚拟机软件来安装Linux, WSL 所需要的资源更少, 启动更快,操作也很方便,仅仅需要在命令行中操作就可以。

可能也有人会这么说, 为什么Windows 系统能够执行一个Linux Kernal 呢? 这就得从现在Windows的内核, Windows NT 内核说起了。

从上图的Windows NT 内核中, 我们可以得出, 由于Windows NT的架构,它实际上可以在系统级别“模拟”任何操作系统(OS)。 所以理论上,Windows只是一个位于用户模式的“前端应用”,它可以改为任何其他系统。 事实上,当1993 年首次发布 Windows NT 时,它附带了 win32、POSIX、OS/2 和安全子系统的“前端”, 如上图所示。因此,如果希望 Linux 成为前端的一部分,这并不是一个大问题。

当然, WSL 并不是一下子凭空出现的,最开始是在2016年8月的Windows 10 v1607中出现, 也就是现在说的WSL1, 一开始的WSL1 很笨重很不完善,WSL1是作为一个翻译层来运行的,通过Linux 内核接口和Windows 内核交互, 是在Windows系统中模拟系统调用来运行Linux。

2019年五月, WSL2发布了, 一个重要的改变就是通过在Hyper-V 上运行一个真正的Linux 内核, 这个内核是微软专门定制的,而且还把这个项目将开源了, 项目地址:https://github.com/microsoft/WSL2-Linux-Kernel

对于WSL2, Microsoft 选择通过高度优化的 Hyper-V 功能子集进行虚拟化,以便运行Linux内核和发行版(基于内核); WSL 2 还可以通过 WSL 配置文件进行配置和调整,这个配置文件是位于 User Profile 文件夹中的一个名为.wslconfig 的 INI 文件。

WSL2的发行版安装驻留在虚拟磁盘(virtual disk)内的 ext4 格式的文件系统内,并且可以通过 9P 协议透明地访问主机文件系统,这个协议类似于 QEMU 等其他虚拟机技术。

下面是WSL2的执行交互diagram:

WSL2中, 不仅可以允许运行任意Linux 发行版,目前可以在Microsoft Appstore 中可以直接使用的Linux 版本有:

Ubuntu UbuntuDebian Debian GNU/Linuxkali-linux Kali Linux RollingUbuntu-18.04 Ubuntu 18.04 LTSUbuntu-20.04 Ubuntu 20.04 LTSUbuntu-22.04 Ubuntu 22.04 LTSOracleLinux_7_9 Oracle Linux 7.9OracleLinux_8_7 Oracle Linux 8.7OracleLinux_9_1 Oracle Linux 9.1openSUSE-Leap-15.5 openSUSE Leap 15.5SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5openSUSE-Tumbleweed openSUSE Tumbleweed

WSL还可以运行Linux GUI 应用(WSLg); 还支持运行Linux systemd, 一个Linux 初始系统和服务管理器。当然, WSL2也支持GNU, 英伟达对此也提供了专门的GPU 支持。这些在后续中加以介绍。

问题:WSL可以在Window中运行Linux, 那么在Linux中怎么运行Windows?

这里有一个有意思的事情, 既然Windows 可以方便的集成Linux, 那么在Linux中怎么能方便的使用Windows 呢?答案就是:虚拟机。

微软已经想到了这个问题,并贴心的给出了免费试用版的Win11 企业版(网址:https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/), 这相当于给广大互联网用户提供了一个免费测试之用的Windows11 Enterprise版, 大家有需要的话可以去下载试用:

三、安装和使用WSL

我目前的操作系统是Win11, 因此我以Win11为例演示一下操作。

安装WSL 非常简单,打开PowerShell,在命令行中 仅仅需要一条命令:

wsl --install

但是这条命令之下,又执行了一系列操作:

Windows 开启虚拟机平台组件,并安装WSL 核心功能代码从Microsoft 商店下载WSL 包, 包括前面我们提到的定制的Linux 核心以及补丁包等。默认下载Ubuntu Linux 分发包(distro)

当Ubuntu分发包开始安装时, 还会要求我们在命令行中提供一个用户名,并设置还有密码, 执行效果如下:

安装完成之后, 通过wsl --list 可以查看本地的wsl 实例:

wsl --list

在我本地安装了Docker Desktop而且支持Docker on WSL,因此我本地会有三个WSL 子系统:

wsl --list

而我们直接在Windows Terminal 中输入 wsl,就可以进入默认的Wsl子系统了:

从上面的执行结果中可以看出, 当我们输入wsl 之后, 就会进入默认的Ubuntu 系统中, 在这个系统中,我们就可以正常的执行Linux 各种命令了。

WSL的常用操作(command)

下面是WSL2的一些常见操作,只要对照着命令执行即可:

这里需要对wsl 里面的用户额外介绍一下, 在wsl --install 命令中会指定一个用户名和密码, 这个用户会默认有Linux的管理员权限,因此可以执行 sudo 操作(superuser do):

另外, WSL 中创建的Linux 账号, 只属于当前的Linux 系统, 不会影响其他Linux 分发版本, 也不会存在于Windows 账号中。

总结

本文简要介绍了WSL的起源,WSL1 和WSL2的区别, 以及WSL的常用操作

 

0 阅读:0

查理谈科技

简介:感谢大家的关注