Windows 子系统用于 Linux 或 Windows WSL 是开发人员在他们的 Windows 10 版桌面上原生地使用 Linux 的绝佳解决方案。
如果您花费了太多时间分区硬盘,以在 Windows 上安装几个 Linux 系统,那么您很幸运能看到这篇文章。
微软的仙女码农决定给您另一个选择:Windows 子系统用于 Linux(WSL)。WSL 让在 Windows 旁边运行 Linux 系统变得更加简单、灵活。
在本教程中,您将学习如何开始使用 WSL。您将学习如何使用一些巧妙的工具,使 WSL 比单独使用 bash 或 PowerShell 更加灵活。
使用自助密码重置解决方案,降低服务台呼叫次数并更新远程用户的缓存凭据,即使在 VPN 外也可以。 获取 Specops uReset 的演示!
WSL 是什么?
WSL 或者 C:\Windows\System32\wsl.exe 是一个 Windows 工具,允许您将 Linux 发行版安装为来自 Windows 商店的应用。
由于 WSL 是一个简单的 Windows 可执行文件,您可以从命令提示符或 PowerShell 终端调用它。我们稍后会更深入地讨论这个话题。现在,重要的是要更多地了解 WSL 在幕后的运作。

如何启用 WSL
设置和启用WSL涉及在Windows 10旁边安装Linux发行版。但是以一种允许两个不同操作系统相互交互的方式。
先决条件
如果你是一名IT专业人士,在Active Directory中处理过多的密码重置请求,请查看安全的SSPR解决方案Specops uReset。
要在Windows上安装WSL,你需要满足一个要求;你的计算机必须是Windows 10 64位 Build 18917或更高版本。
你可以通过运行winver实用程序来查找Windows 10的版本。

启用WSL Windows功能
启用WSL非常简单;无需下载。它只是一个单一的Windows功能。
要启用WSL,请以管理员身份打开PowerShell并运行以下命令:
相关:如何以管理员身份运行PowerShell
完成后,重新启动计算机,你就完成了!
下载适用于WSL的Linux发行版
WSL本身不安装任何Linux发行版。你需要安装一个。一旦Windows 10恢复正常,开始设置你选择的Linux发行版。
首先,打开Microsoft Store,然后搜索‘WSL’。你应该很快看到显示出一系列Linux发行版的列表。

接下来,选择你喜欢的发行版并进行安装。本教程将使用Ubuntu 18.04。在撰写本文时,你还可以选择其他一些发行版,例如:
- Ubuntu 16.04 LTS
- 、Ubuntu 18.04 LTS
- 、OpenSUSE Leap 15
- 、OpenSUSE Leap 42
- 、SUSE Linux Enterprise Server 12
- 、SUSE Linux Enterprise Server 15
- 、Kali Linux
- 、Debian GNU/Linux
- 、Fedora Remix for WSL
- 、Pengwin
- 、Alpine WSL
。设置你的WSL版本
。你可能需要启用Linux与WSL版本2的兼容性。如果是这样,可以按照以下说明操作。
在PowerShell控制台中:
- 通过运行
wsl -l
或wsl --list
列出已安装的Linux版本。 - 一旦有了列表,复制你想要在WSL2中运行的发行版的名称,然后运行
wsl --set-version <Distro> 2
,将<Distro>替换为你之前复制的名称。 - 通过运行
wsl -l -v
或wsl --list --verbose
确认命令是否成功。该命令将返回WSL发行版的完整列表以及每个发行版所使用的版本。

你还可以通过运行
wsl --set-default-version 2
来将未来安装的任何发行版的默认 WSL 版本设置为 WSL2。
启动 WSL
要开始使用 WSL,请打开 PowerShell 终端并键入 wsl
。如果你已经正确设置了 WSL,你将进入一个运行在所选 WSL 发行版上的 bash 终端。从这里,你可以运行任何你想要的 Linux 命令。
以下是启动时 wsl.exe 提供的所有选项的参考。
Command | Explanation | Example |
---|---|---|
exec, -e | Will run command using without using default shell | wsl -e curl google.com |
— | Passes anything after this parameter to default shell. Leaving the operator out will also work. | wsl — curl google.com, wsl curl google.com |
distribution, -d |
Opens a terminal in the specified distribution’s shell | wsl -d Ubuntu-18.04 |
user, -u |
Runs WSL command as the specified user as long as user exists on that distro | wsl -d Ubuntu-18.04 -u tux_user |
export |
Exports the specified distribution to a tar file on your local system. | wsl –export Ubuntu ./Test-Ubuntu.tar |
import |
Imports a tar file as a new WSL distribution. Can specify WSL version with the –version option | wsl –import Test-Ubuntu C:\data\Test-Ubuntu .\Test-Ubuntu.tar |
list, -l [Options] | wsl –list | |
all | List all installed WSL distributions | wsl -l –all |
running | List only WSL distributions that are currently running | wsl -l –running |
quiet, -q | Only show WSL distribution names | wsl -l -q |
verbose, -v | Show detailed information about all WSL distributions | wsl -l -v |
set-default, -s |
Sets the specified WSL distribution as the default distribution for WSL commands. | wsl -s Test-Ubuntu |
set-default-version |
Changes the default WSL version for all new distributions installed to that system | wsl –set-default-version 2 |
set-version |
Changes the WSL version of the specified distribution | wsl –set-version Test-Ubuntu 2 |
shutdown | Immediately terminates all running WSL distributions | wsl –shutdown |
terminate, -t |
Terminates the specified WSL distribution | wsl -t Test-Ubuntu |
unregister |
Unregisters the specified WSL distribution | wsl –unregister Test-Ubuntu |
help | Display information about using WSL | wsl –help |
一旦你熟悉了这些开关,你会发现通过 WSL 运行和管理应用程序要比自己管理 Linux 虚拟机容易得多。
小贴士:通过运行
wsl --help
来发现所有与 WSL 相关的标志和参数。
完成后,键入 exit
返回 PowerShell 终端。
通过 WSL 共享 Windows/Linux 资源
WSL 最棒的部分之一是它可以无缝地共享 Windows 和 Linux 资源。目前,你可以共享文件系统、环境变量、网络资源以及像 cmd 和 PowerShell 这样的命令行工具。
本节中的所有示例都是通过 WSL Ubuntu Linux 发行版进行的。如果你选择下载了不同的发行版,你的情况可能会有所不同。
共享文件系统
文件系统是与 WSL 共享的最有用的东西之一。WSL 允许你像使用一个文件系统一样使用两个文件系统。
Windows 10文件系统被挂载为Linux中的目录,而你的Linux文件系统将作为Windows中的文件夹挂载。
通过环境变量从Windows查找Linux文件系统
当你使用WSL安装Linux发行版时,有时会添加一个Windows环境变量。在WSL Ubuntu Linux发行版的情况下,它会创建一个名为UBUNTU_HOME的环境变量。此环境变量在Windows和WSL Ubuntu中均指向Linux的/home/ubuntu目录。
在UBUNTU_HOME中定义的路径可用于运行跨它们使用资源的脚本,或为Windows终端设置默认位置(稍后介绍)。

其他发行版可能定义类似的环境变量。在安装新的Linux发行版后,使用PowerShell命令Get-ChildItem -Path $Env:\
检查Windows环境变量,以查看是否可能已添加任何环境变量。
如果你想把所有东西放在/home/ubuntu目录中,这个环境变量的快捷方式会很方便。但让我们深入了解一下它是如何到达那里以及你还可以以其他方式访问它。
通过Microsoft Store Packages文件夹从Windows查找Linux文件系统
并非每个WSL发行版都保证具有轻松引用它的方法。重要的是你学会以另一种方式找到Linux文件系统。
由于大多数WSL Linux发行版将从Microsoft Store安装,您可以在与其他Windows Store应用程序相同的位置查找Linux文件系统。导航到%USERPROFILE%\AppData\Local\Packages\以找到Windows Store应用程序所在的目录。然后控制该文件夹,因为这通常是默认受保护的。
您将在packages文件夹中看到许多子文件夹,您的Linux发行版文件系统可能位于其中。例如,WSL Ubuntu发行版在CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc文件夹中。
如果您导航到package文件夹,您将找到Linux文件系统。对于WSL Ubuntu,它位于LocalState\rootfs文件夹中。 这是您的Linux发行版的根目录。

从Linux查找Windows文件系统
要从Linux查找Windows 10文件系统,请在Windows中打开WSL。WSL将会启动一个bash终端。这个bash终端默认会在您的UBUNTU_HOME目录中启动。
您还可以找到Windows存储卷的根目录。您的每个Windows盘符(C、D、E等)都被视为从WSL Linux文件系统挂载的驱动器。只要您具有根权限,您将找到每个卷挂载为/mnt/c、/mnt/d等。

Get-ChildItem C:\Windows\System32 | Select-Object -First 5
running on WSLWSL2文件系统
导航WSL文件系统相当简单。对于不熟悉Linux文件系统结构的人来说,能够使用Windows Explorer导航它是件令人赏心悦目的事情。但是,如果你想切换到WSL2,事情会变得有点复杂。
WSL2改变了底层文件系统共享的工作方式。首先,文件系统现在是一个vhdx格式的虚拟硬盘,而不是一个目录。
你可以在WSL Ubuntu发行版的%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState下找到vhdx文件。
你会发现VHDX文件可以使用Disk Manager工具在Windows中挂载。但是,在WSL发行版注册的情况下,虚拟磁盘无法被挂载。
共享环境变量
环境变量是任何操作系统的重要组成部分,它可以方便地引用应用程序中的二进制文件和可执行文件。
在Windows 10 build 17063之前,Windows 10和WSL Linux之间唯一共享的环境变量是PATH变量。从那时起,可以通过使用WSLENV环境变量来共享其他环境变量。
使用WSLENV环境变量来共享其他环境变量可能会有点元。为了跨平台共享环境变量,实际上你必须在另一个环境变量内设置环境变量。
概览
共享环境变量是以下三个步骤的过程。在Windows/Linux之间进行共享的唯一主要区别是所使用的开关参数(完整参考如下)。
- 在Windows中定义环境变量或Linux中定义环境变量。
- 将WSLENV环境变量设置为先前定义的环境变量,后跟一个开关参数(用于路径翻译)。
- 在Windows或Linux中读取环境变量。
共享选项
您可以根据要在哪个平台上显示环境变量,使用开关方式(下表显示)的不同方式使变量可用。
- Windows文件系统仅从其自身可用
- WSL文件系统仅从WSL可用
- WSL文件系统在WSL Linux和Windows上都可用
- Windows文件系统在WSL Linux和Windows上都可用
Flag | Explanation |
---|---|
/p | Single path. A variable set with this will be translated between the Windows and WSL Linux and made available to both. |
/l | List of paths. Similar to /p , except it can accept more than one path. On Windows, this list will be delimited by semicolons while on WSL Linux it will be delimited by colons. |
/u | Unix path. A path set with this flag can only be accessed when invoking WSL Linux from Windows. Can be used with either the /p or /l flags |
/w | Windows path. A path set with this flag can only be accessed when invoking Windows from WSL Linux. Can be used with either the /p or /l flags |
路径翻译
共享环境变量的主要原因是进行路径翻译。正如您可能已经知道的那样,Windows具有用户配置文件夹,而Linux具有用户配置文件目录,例如。每个用户都有一个预定的“主文件夹”,如在Windows上为C:\Users\<username>,在Linux上为/home/<username>。
使用/p
和/l
开关,WSL将在平台之间转换这些文件夹路径。
在Windows和Linux之间共享和翻译路径
您可以使用/p
和/l
开关一次共享单个路径或多个路径。
在Windows命令提示符下,并且已定义了一个名为DESKTOP的Windows环境变量,将值DESKTOP/p
分配给WSLENV变量。这允许您从WSL Linux访问它。您可以查看下面的示例。

使用/l
开关可以一次对多个路径执行完全相同的过程。
在Windows中共享和翻译Linux路径
与Windows共享和翻译Linux路径的过程相同,尽管使用Linux特定命令设置环境变量。
要深入了解共享环境变量,请查看此Microsoft文章。
共享网络资源
网络组件是另一个在Windows和WSL Linux之间共享的方便资源。
物理 vs. 虚拟化的网络接口
在WSL2中,网络接口是虚拟化的。虚拟化的网络接口意味着WSL2网络实例可以具有不同的IP配置,而不同于它们的Windows 10对应项。
在撰写本文时,WSL2 Linux 的 IP 地址使用网络地址转换(NAT)来访问 Windows 上的网络资源,尽管微软已经提到移除 NAT 是他们待解决问题清单中的重要事项之一。

客户端 DNS 解析
WSL 仍然会生成 /etc/resolv.conf 和 /etc/hosts 文件以支持 DNS 解析。只要您不在 /etc/wsl.conf 中明确覆盖此行为,客户端 DNS 解析将继续按预期工作。
您将在后面的文章中了解更多关于 wsl.conf 文件的信息。
PowerShell 和 Bash 的联合使用
WSL 最酷的功能之一是能够在 PowerShell 和 WSL 上无缝传递信息。
PowerShell –> Bash
由于 WSL 可执行文件接受来自管道的输入,您可以在 PowerShell 中调用 wsl.exe 命令并接受 stdin。这允许您使用 WSL 将整个对象从 PowerShell 传递到 WSL 中,然后在 bash 终端中对其进行处理。您可以看到下面的示例。

grep
Bash –> PowerShell/Cmd
您也可以轻松地将信息从 WSL 中的 bash 传递到 PowerShell 和 cmd。下面您可以看到执行 Linux ls 命令并通过管道将输出传递给 PowerShell 的 Select-Object
cmdlet 的示例。

只要两个命令都在系统路径中,您还可以从 WSL 调用一些 Windows cmd 实用程序,并将输出返回给 Linux。
请记住,WSL知道双方的系统路径,因为它默认可以访问Windows的PATH变量
在下面你可以看到,你可以在WSL中运行ipconfig,这是一个Windows命令,并将其输出传递给Linux的grep命令。您还可以看到相反的情况,即调用Linux命令which并将输出传递给Windows的ipconfig命令。

翻译问题
在bash和PowerShell之间传递命令输出时存在一些注意事项。
一个大问题是PowerShell和bash返回信息的方式不同。PowerShell是一种面向对象的编程语言,而bash是一个字符串处理工具。传递到bash的任何PowerShell对象都将被展平为字符串。反之亦然,传递到PowerShell的任何bash输出都将被转换为字符串对象。
可以通过在PowerShell中转换或显式转换对象类型来解决这种行为,就像下面的示例中所示。但如果你期望在PowerShell和WSL之间传递对象而无需额外操作,你会感到失望的。

通过将bash日期转换为PowerShell中的[datetime]
类,现在我们有一个有效的PowerShell对象,可以在我们的脚本中使用。如果您正在编写需要在Windows和WSL之间传递的脚本,通过对代码进行一些调整是可能的。
安装带有Xfce4的Windows子系统用于Linux图形界面
当命令行工具不够用时,是时候使用图形界面了。如果您需要在WSL上运行图形实用程序,探索自定义发行版,或者您尚未熟悉bash,您可以安装Linux图形用户界面。
Xfce
Linux有许多可用的桌面环境。在WSL上设置最常见的一个称为Xfce。在撰写本文时,Xfce的版本为4。还有其他桌面环境可用,但在本文中,您将学习如何设置Xfce4。
xRDP
当您设置了Linux桌面环境后,您将需要一个了解RDP协议的服务。在本文中,我们将重点介绍xRDP服务器。xRDP是用于Linux的开源RDP服务器,允许您使用RDP客户端连接到Linux,就像连接到Windows主机一样。
设置
要从Windows访问具有Xfce4和xRDP的Linux GUI,请按照以下说明操作。在WSL终端中:
- 下载并安装Xfce4 – 使用命令
sudo apt-get -y install xfce4 && sudo apt-get -y install xubuntu-desktop
下载并安装Xfce4。这需要一些时间。请稍候。 - 安装xRDP服务器 – 运行
sudo apt-get -y install xrdp
来下载并安装xRDP。 - 为xfce4配置xRDP –
echo xfce4-session > ~/.xsession
- 重新启动xRDP –
sudo service xrdp restart
- 查找WSL发行版的IP地址 –
ifconfig | grep inet
此时,您应该能够从Windows 10打开RDP会话。使用mstsc
打开远程桌面连接窗口,并提供在第5步中找到的Linux IP地址。
如果一切顺利,您可以打开与运行在Windows操作系统上的Linux发行版的RDP连接,如下所示。

提示和技巧
现在您了解了WSL的基础知识以及如何使用它,接下来呢?幸运的是,有很多工具要么专为WSL构建,要么与其兼容。
使用wsl.conf在启动时设置WSL配置项
A configuration file exists in the WSL at /etc/wsl.conf. This file contains configuration settings that run every time the WSL distro is started. When the wsl.conf file exists, WSL will ingest any setting in this file every time the Linux distro is started.
您可以在wsl.conf文件的几个不同部分进行配置。
- Automount – 在启动时从Windows挂载驱动器
- Network – 生成resolv.conf或hosts文件
- Interop – 启用或禁用与Windows的Interop
有关wsl.conf文件的更多详细信息,请查看Microsoft 设置WSL启动设置页面。
使用Visual Studio Code (VS Code)在WSL上进行开发
VS Code似乎与所有东西集成,WSL也不例外。在VS Code中,您可以在WSL发行版上设置一个工作区,但完全在Windows上使用VS Code进行操作。您甚至不需要运行终端!
要在 Windows 上设置 VS Code 以与 WSL 配合工作,首先显然需要安装Windows 版的 VS Code。另外,请确保已安装了Remote – WSL VS Code 扩展。
安装完扩展后,现在可以通过打开 WSL 终端并运行 code <workspace>
来连接它。其中<Workspace>
是你想要从中运行 VS Code 的目录。然后,VS Code 将检测到你在一个 WSL 发行版中,打开一个窗口,并与工作区建立连接。
通过注意 VS Code 左下角的 WSL 连接图标来确认是否成功。你应该看到它显示你的 WSL 发行版的名称。

你甚至可以使用内置终端直接与 WSL 工作区交互。无需为git bash命令打开单独的窗口。
将 Windows Subsystem for Linux 添加到 Windows 终端
WSL 的另一个有用用例是将 WSL 控制台添加到Windows 终端中。
在 Windows 终端内,你可以在各自的选项卡中添加每个 WSL 发行版。你还可以自定义每个选项卡的外观,以免迷失方向。
如果你正在使用一个设置了用户目录环境变量的WSL发行版,比如UBUNTU_HOME,你也可以将其设置为终端的起始目录。

如果你想要完整的视频演示如何设置WSL与Windows终端配合使用,请查看下面的TechSnips视频教程。
结束思考
不再为Active Directory中的密码重置电话和账户锁定而苦苦挣扎。立即获得Specops uReset的免费试用。
微软发布了WSL,以便让Linux开发者能够在Windows上进行开发。到目前为止,WSL已经是朝着正确方向迈出的一步。
看起来WSL将成为微软新的开源友好策略的一个关键组成部分。如果微软要与苹果竞争,成为开发者编写代码的设备,那将是一场艰苦的战斗。但是WSL是一个强有力的筹码。
WSL给开发者带来了许多受欢迎的好处,例如:
- 比运行本地Linux虚拟机轻得多
- 消除了安装和管理超级监视器的开销
- 不再需要多分区硬盘
- 不再需要复杂的grub引导加载程序
WSL只需要打开并运行,这样我们就可以愉快地编码了。
Source:
https://adamtheautomator.com/windows-subsystem-for-linux/