了解Linux的Windows子系统

629 阅读10分钟

Windows Subsystem For Linux是现代Windows计算机的一个伟大的新功能,允许用户在Windows 10计算机上原生运行Linux操作系统。 除了Windows 10之外,管理员还可以在Windows Server 2019版上运行Windows Subsystem For Linux。 早在2016年,WSL首次出现在Windows周年更新中。 从那时起,微软通过Twitter、GitHub和User-voice听取了很多用户的反馈,并简化和加强了Windows Subsystem For Linux的体验。 这是真正改变游戏规则的技术,允许你最喜欢的Linux风味,无论是Ubuntu、Red Hat、Kali Linux、Alpine、Pengwin、Debian或openSUSE,都可以在Windows中运行。 在这篇文章中,我们将看看如何安装WSL并测试它所提供的一些伟大功能。


究竟什么是Windows Subsystem For Linux?

Windows Subsystem for Linux是为Windows用户提供的一个新工具,允许他们在Windows上直接运行Linux。 这包括通常只在Linux机器中运行的命令行工具、实用程序和应用程序,而没有典型虚拟机的开销。它是一个从4.19构建的Linux内核,完全由微软管理,包括对Windows Update的支持。 WSL使用一种非传统的虚拟化形式,占地面积非常小。 它更类似于容器而不是传统的虚拟机。
WSL uses Lightweight Utility Virtual Machine

传统的虚拟机WSL
隔离的集成的
启动速度慢小于1秒的启动时间
内存密集型占用内存小
需要手动管理只在需要时运行

你能用Windows Subsystem for Linux做什么?

简而言之,有很多。 下面是一个快速的概述。

  1. [从微软商店]安装最流行的Linux发行版,
    能够从Ubuntu、openSUSE、Kali Linux、Debian或Alpine WSL中选择是非常酷的。

  2. 在Windows中获得一个真正的Linux Shell,并运行你最喜欢的命令,如grep,sed,awk, ls, pwd和其他命令。

  3. 利用以下工具、编程语言和服务的优势。

    • vimemacstmux等工具
    • 使用Node.jsPHPPythonC/C++RustGoLang等语言。
    • 配置服务,如。Nginx,sshd,MySQL,Hadoop, 和MongoDB
  4. Windows文件访问- DrvFs挂载选项

  5. Interop- 启动Windows二进制文件

  6. /etc/wsl.conf- 配置选项

  7. wslpath- 将路径从一个环境翻译成另一个环境

  8. $WSLENV- 在Linux和Windows之间共享envable变量!

  9. 背景任务支持

Linux Distros On WSL

WSL上的Linux发行版


查看已安装的Linux发行版

一旦你安装了一个或多个已安装的Linux发行版,你可以用 **wsl -l**命令查看。
WSL Example Linux Distributions


它是如何工作的?

正如我们上面看到的,用户可以从微软商店获得许多不同的Linux发行版。 这些发行版是由微软合作伙伴提供的。 在这之下是WSL翻译层,以驱动程序的形式实现。 这是一个实现Linux内核ABI的Windows驱动程序,它处理系统调用、虚拟文件和文件系统。 在这个架构的基础上是Windows NT内核。

WSL Architecture

许多神奇的事情都是通过使用系统调用来实现的。

Linux二进制文件利用系统调用来完成访问文件、请求内存和创建进程等工作。在WSL的最新版本中,它是通过一个具有完全系统调用兼容性的专用Linux内核提供的。

这里显示了WSL的详细结构。

WSL Detailed Architecture


安装Windows Subsystem for Linux

现在我们知道了一些关于WSL是什么以及它是如何工作的,让我们动手在我们的Windows 10机器上安装WSL。 你有几种方法可以安装WSL。 你可以把它作为一个Windows功能启用,或者你可以使用Windows Powershell来打开WSL。 要把WSL作为一个windows功能来启用,首先在屏幕的左下方输入 "打开或关闭Windows功能",然后点击最佳匹配选项。

Turn Windows features on or off

然后你会看到一个名为 "Windows功能 "的对话屏幕出现,上面列有你可以打开或关闭Windows的各种功能。 要打开一个功能,选择其复选框。 要关闭某项功能,请清除其复选框。 一个填满的方框意味着只有部分功能被打开。 因此,我们将继续点击Windows Subsystem for Linux旁边的空框,然后点击OK按钮。

Select checkbox to turn on WSL

然后,Windows将寻找所需的文件并对你的系统进行修改以启用WSL。 一旦完成,你将需要重新启动机器来完成安装。

Windows must reboot to finish WSL install

使用Powershell安装WSL

另外,你也可以通过使用Powershell来安装WSL。 要做到这一点,你需要以管理员身份打开Powershell。 如果你有新的windows终端,你可以从那里启动Powershell。 然后你可以输入以下命令并点击回车。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

就像第一种方法一样,这也需要重新启动以最终完成安装。


选择一个Linux发行版

现在WSL已经安装完毕,你可以使用以下任何一个链接来添加你喜欢的Linux味道。

run linux on WSL

对于我们的安装,我们将选择Ubuntu 18.04 LTS,因为这似乎是最近流行的Linux风味。

Ubuntu in Windows Store

在你选择你的Linux发行版后,你会看到它正在下载。

Downloading Ubuntu

下载完成后,你会看到Ubuntu已经安装的通知,你可以直接启动它或将其固定在开始菜单上。

ubuntu launch or pin to start

在第一次启动Ubuntu外壳时,我们看到一些信息

正在安装,这可能需要几分钟时间......
请创建一个默认的UNIX用户账户。这个用户名不需要和你的Windows用户名相匹配。
更多信息请访问
aka.ms/wslusers 输入新的UNIX用户名。

enter new unix username

如果你添加了一个系统不喜欢的用户名,你可能会看到这个消息。

adduser:请输入一个与
通过NAME_REGEX[_SYSTEM]配置变量
配置的正则表达式匹配的用户名
。 使用`-force-badname
'选项来放松这个检查或重新配置NAME_REGEX。

在我们的案例中,看起来Ubuntu不喜欢用户名中的大写字母。 通过使用所有的小写字母,并添加两次密码进行确认,我们就成功了!

安装成功!
要以管理员(用户 "root")身份运行命令,请使用 "sudo"。
详情见 "man sudo_root"

看哪! 在Windows上运行的Ubuntu外壳!
ubuntu shell on windows

我们可以启动 htop程序,以显示真正的Ubuntu外壳。


如何从WSL访问Windows文件

在WSL命令行中,你可以通过以下方式访问Windows操作系统上的所有文件 /mnt/c//mnt/d/目录(取决于分配给Windows驱动器的字母)。 这有利于你轻松地将Windows中最常用的文件转移到WSL的Bash式工作流中。 这里我们在WSL中列出了C盘的内容。

Viewing windows files from WSL

为了确认我们确实是在看Windows文件系统,如果我们在Windows PC上打开Powershell,列出同一个C盘的内容,我们可以看到内容是一致的。爽啊!

display files in powershell

为了展示这个动作,我们可以在Windows机器上用Windows notepad.exe创建一个文件。 然后,我们可以使用WSL的 **nano**应用程序来查看该文件的内容。 很酷吧! WSL允许你同时使用Windows和Linux的文件系统,就像它们是一个整体一样,这真的很方便。

在Windows中创建的文本文件。
Text file created in Windows

现在在WSL中,看我们用NANO轻松地打开同一个文件。
Nano on WSL viewing windows file


如何从Windows访问Linux文件

同样的想法在另一个方向也是成立的。 使用Windows Explorer,你可以获得在WSL中运行的Linux发行版的文件夹结构。 使用Windows资源管理器在Linux文件系统中点击,会让你感觉到你生活在另一个维度中 要做到这一点,你可以在以下位置寻找Linux文件系统 %USERPROFILE%AppDataLocalPackages. 在这个文件夹中会有许多子文件夹,你的Linux文件系统可能在其中。在我们的案例中,我们安装了Ubuntu18.04 LTS发行版,我们的文件夹在CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc中找到。 然后你会发现 **LocalStaterootfs**文件夹,这是Linux安装的根目录。 这里我们可以看到我们在Ubuntu中使用Windows Explorer浏览文件。

Browsing WSL filesystem from Windows Explorer


在WSL中使用Python工作

Python是一种流行的编程语言,适用于各种任务,但它在命令行环境中真的很出色,你可以将重复性任务自动化并执行基本的系统管理任务。 适用于Linux的Windows子系统使得在你的Windows PC上使用Python更加容易。 你甚至可以在互联网上找到许多预制的Python脚本来完成这些类型的任务,但是这些脚本总是假设你在运行Linux。 那么你猜怎么着? 有了WSL,你就真的在运行Linux了 现在不需要下载和安装像VirtualBox这样的东西,你就可以启动一个内存密集型的虚拟机来测试这些简单的脚本。 只需点击一下就可以启动Ubuntu外壳,你就可以得到你需要的东西。

公平地说,你可以在Windows上运行Python而不需要WSL。然而,对于快速测试和单行本来说,能够运行为Linux机器设计的Linux Python例子,对于高级用户来说是一个很好的生产力提升。 虽然已经安装了Python3,但PIP包管理器却没有安装。 有趣的是,PIP是一个递归的缩写,意思是 "PIP安装Python "或 "PIP安装包"。 这个程序的工作原理很像Node中的NPM,或者PHP中的Composer。 现在就让我们来安装它吧。

首先,我们可以用以下方法更新Ubuntu中的软件包列表 sudo apt udpate.
sudo apt update wsl

现在我们可以运行 sudo apt install python3-pip.
sudo apt install python3-pip wsl

一旦完成,如果你用 **pip3 --version**命令,你会看到类似于*pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)*的输出。 太棒了。 我们现在有能力使用成千上万个免费提供的Python模块中的任何一个,如httpie、flask、django、requests、ansible、scrapy,以及更多模块来工作。


Windows Subsystem for Linux总结

WSL是一个快速发展的大话题。 微软正在快速迭代这项技术,因为它似乎受到很多开发者和系统管理员的欢迎。 在这个教程中,我们看了一下什么是WSL,系统的结构,它是如何工作的,以及你能用WSL完成什么。 在过去,如果你需要建立一个依赖于Linux安装的开源包的项目,你必须建立一个双启动Windows和Linux机器(不好玩),安装VirtualBox或VMWare Workstation并运行一个内存密集型虚拟机,或者配置Docker容器。 如果你不熟悉如何设置这些选项,所有这些选项都会带来大量的工作开销,而且学习曲线也很陡峭。 现在,安装了Windows Subsystem for Linux,你可以在一秒钟内访问一个完整的Linux shell!