如何使用WSL2在Windows 10或Windows 11电脑上安装、管理和使用一个完整的Linux环境

1,826 阅读12分钟

如何使用WSL2在Windows 10或Windows 11电脑上安装、管理和使用一个完整的Linux环境

本教程演示了如何使用WSL2在Windows 10或Windows 11电脑上安装、管理和使用一个完整的Linux环境。你将运行一个Linux内核并执行本地应用程序,同时与Windows代码编辑器和浏览器无缝共享文件和服务。

为什么使用Linux?

你的虚拟主机几乎肯定使用Linux。它速度快、开放源码,可以运行大多数的网络软件,包括:

这些依赖性中的一些可能在Windows和macOS上可用,但安装和维护相同的版本很困难。它们通常比较慢,而且你可能会遇到一些微妙的差异,这些差异直到你部署时才会变得明显。

一些开发者使用Linux作为他们的主要桌面操作系统,但如果你需要非Linux软件,如微软或Adobe产品,这可能是不可行的。替代选择:

  • 使用两台电脑或在一台设备上进行双启动。在系统之间切换可能很麻烦。

  • 使用Hyper-V、VirtualBox、Parallels、WMware或Vagrant运行一个Linux虚拟机(VM)。这需要大量的操作系统资源和合理的IT知识。在系统之间共享文件可能会很尴尬。

  • Docker容器中运行网络应用。这是另一个需要学习的话题,Docker本身就在Linux上运行。Windows和macOS版本都在表面之下使用Linux,Docker Desktop的Windows版本需要WSL2。

什么是Linux的Windows子系统?

Linux的Windows子系统(WSL)让开发者在Windows上直接运行Linux环境。这是一个在Windows内部运行的完整的Linux操作系统,因此你可以无缝地使用相同的应用程序和文件。

WSL1是开创性的,它将Linux的系统调用翻译成Windows的等价物。这可能很慢,而且有些功能无法使用。WSL2使用Hyper-V虚拟机技术,因此Linux兼容性很好,文件访问速度比以前快20倍。

Windows 10和Windows 11的区别

微软在2020年引入了WSL2,所以它在2021年10月完全集成到了Windows 11的发布中。

Windows 10需要更多的配置努力。如果你正在考虑升级到Windows 11,请在安装WSL2之前进行。Windows 11在某些方面没有改进(我仍然怀念任务栏图标解组和拖动文件!),但WSL2似乎更稳定,我很少遇到问题。

电脑要求

WSL2使用Hyper-V。这需要硬件虚拟化支持,你必须在你的BIOS中启用。

*警告:**摆弄你的BIOS设置可能会毁掉你的电脑!*在进行修改时要小心。请查阅主板制造商的帮助页面,或在网上搜索有关您的具体品牌和型号的建议。

硬件虚拟化在大多数现代设备上是可用的,但你可以通过重新启动,并打开BIOS面板来检查--通常是在系统启动时点击DEL、F2或F10键。寻找虚拟化技术VTx、**安全虚拟机(SVM)**或类似选项。确保它们被启用,保存,并重新启动机器。

最后,确保你的C: 驱动器有1GB的备用磁盘空间,最好是更多。你可以在设置系统存储或使用Windows管理工具中的磁盘清理工具释放一些空间。

在写这篇文章的时候,WSL2将把Linux安装到你的C: 驱动器上,尽管在安装后有可能把它移到其他地方

Windows的要求

WSL2可用于Windows的家庭版、专业版或服务器版,但不包括Windows 10/11 S。S模式只允许从微软商店购买应用程序来 "提高 "安全性。你可以使用 "设置">"更新和安全">"激活"中的 "切换到WindowsHome/Pro "选项从S模式切换到Windows Home/Pro。

Windows 10需要2020年5月的更新--也就是2004年或以上的版本。从开始菜单中选择设置齿轮,然后选择系统,接着是关于Windows的规格显示在面板的底部。

Windows specifications

使用 "设置"中的 "检查更新"按钮,如果没有安装,则使用 "更新与安全"。一些较旧的电脑可能永远无法兼容,而且微软不太可能提供补丁。

禁用快速启动(可选)

快速启动将Windows会话和设备驱动程序保存到一个文件中,以便下次启动时更快。这可能会给Linux内核带来问题,它在下次启动时变得没有反应。如果你遇到问题,可以从经典的控制面板>电源选项>选择电源按钮的作用中禁用快速启动。

Control Panel power options

或者,在你的启动文件夹(C:\Users\<user-name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)中创建一个wsl.bat 文件,其内容为。

wsl --shutdown

这将在Windows启动后关闭WSL,但只要你进入Linux发行版,它就会立即重新启动。

安装Windows终端(可选,但建议)。

Windows终端是一个很好的终端应用程序,可以从微软商店或其在github.com/microsoft/t…的资料库中获得。

Windows Terminal

在安装WSL2 Linux发行版时,Windows Terminal会自动添加它们,并提供一系列可配置的选项,包括标签、分割视图、主题、透明度和按键绑定。

可通过设置菜单项(Ctrl+ ,)、命令调色板(Ctrl+Shift+P)或设置面板底部的settings.json 进行配置。

启用WSL2 (Windows 10)

下面的说明适用于Windows 10。它们在Windows 11中应该是不必要的,尽管如果你执行了Windows 10到11的升级,你应该仔细检查一下。

虚拟机平台Windows Subsystem for Linux功能必须在打开或关闭Windows功能中启用。通过点击 "开始 "并键入 "功能 "或从经典控制面板中的 "程序和功能"图标访问该面板。

enable WSL2

另外,你可以在以管理员身份运行的Windows Powershell终端中执行以下命令。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重新启动Windows,然后在Windows PowerShell或命令提示符中输入以下命令,将WSL2启用为默认值。

wsl --set-default-version 2

下载Linux

在开始菜单中搜索或找到PowerShell,然后右击图标,选择以管理员身份运行。通过输入显示可用的Linux发行版列表。

wsl --list --online

list Linux distros

要安装默认的Ubuntu 20.04发行版,请输入。

wsl --install

要按名称安装一个特定的发行版,如Debian ,请输入。

wsl --install -d Debian

另外,你也可以从 "开始 "菜单中的 "微软商店"安装Linux发行版。在搜索框中输入 "Linux"(要注意可能有WSL发行版以外的软件)。

Microsoft Store

除非你有特定的Linux要求,否则Ubuntu是一个不错的选择。如果你点击Ubuntu图标后的 "获取"按钮,就可以安装最新版本。

下载和安装可能需要一些时间,这取决于你的网络和电脑速度。你可能会被提示再次重启。

启动Linux

现在,一个新的Linux**(Ubuntu**)选项/图标将出现在。

  1. 开始菜单
  2. Windows终端(如果安装了)。
  3. Powershell - 在提示符下输入wslbash

第三方终端软件,如CmderConEmuHyper,可以通过创建配置文件来启动%windir%\system32\bash.exe ~

安装过程将在你第一次运行WSL2 Linux操作系统时完成。

注意:你可能会在终端看到一条关于内核更新的信息。把链接复制到你的浏览器,然后下载并安装更新。你需要再次启动Linux发行版以继续进行安装。

你会被提示输入一个用户名和密码。这些是用于Linux管理的凭证:它们与你的Windows用户名和密码完全分开(尽管选择相同的用户名和密码可能很实用)。

Linux最终会准备好,你的终端会显示类似的内容。

Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.10.102.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Tue Aug 16 10:19:36 BST 2022

  System load:  0.0                Processes:             8
  Usage of /:   1.6% of 250.98GB   Users logged in:       0
  Memory usage: 1%                 IPv4 address for eth0: 172.21.6.83
  Swap usage:   0%


0 updates can be applied immediately.


The list of available updates is more than a week old.
To check for new updates run: sudo apt update

更新Linux

可能会有几个Linux的更新。要更新Ubuntu应用程序,请在Linux终端输入以下命令。

sudo apt update
sudo apt upgrade

其他Linux发行版也会有类似的过程--所以请查看文档以获得帮助。

你也可以用Powershell检查Linux内核的更新。

wsl --update

在WSL1和WSL2之间切换

现有的WSL1发行版可以转换为WSL2。在Windows的Powershell终端中输入以下命令,显示已安装的Linux发行版和它们的WSL版本。

PS C:\> wsl --list --verbose

  NAME    STATE    VERSION
* Ubuntu  Running  1

(* 星号突出了默认的Linux安装。)

要将Ubuntu 切换到WSL2,输入。

wsl --set-version Ubuntu 2

同样,要切换回WSL1,请输入。

wsl --set-version Ubuntu 1

设置一个默认的Linux发行版

当你安装了多个Linux发行版时,必须将一个Linux发行版设置为默认版。当在Windows Powershell终端中输入wsl ,这将被使用。

要设置默认发行版,请列出你的Linux安装。

wsl --list

并设置一个默认与。

wsl --setdefault <DistributionName>

Ubuntu 示例:wsl --setdefault Ubuntu

以特定用户身份运行Linux

要以特定用户身份运行默认发行版,在Windows Powershell终端中输入以下命令。

wsl --user <username>

安装时定义了一个默认用户,但你可以创建其他用户。一个root 用户也被创建,但在正常情况下你应该避免使用它。它太容易输入一个危险的命令了!

移动或克隆你的Linux磁盘镜像

Linux磁盘映像被安装在你的C: 驱动器上。作为选择,你可以。

  • 把它移到另一个驱动器上,以释放C: 的空间,或者

  • 使用同一个镜像来创建多个Linux安装(如果你需要不同的应用程序和设置用于不同的项目,这可能很有用--尽管Docker可能更实用)。

下面的说明假定你要把UbuntuLinux发行版移到D:\wsl

在Windows的Powershell终端*(不是*Ubuntu终端),输入wsl --list ,查看你的Linux发行版,然后按名称导出一个备份的.tar 文件--比如D:\backup\ubuntu.tar

mkdir D:\backup
wsl --export Ubuntu D:\backup\ubuntu.tar

取消注册该发行版,将其从C:

wsl --unregister Ubuntu

输入wsl --list ,确认该发行版已被删除。

将备份导入到另一个位置的新的WSL2发行版中,如D:\wsl

mkdir D:\wsl
wsl --import Ubuntu D:\wsl\ D:\backup\ubuntu.tar

你可以从同一个备份中制作任意数量的命名克隆。比如说。

wsl --import Clone01 D:\wsl\ D:\backup\ubuntu.tar
wsl --import Another D:\wsl\ D:\backup\ubuntu.tar

通过输入wsl --list ,并从开始菜单或Windows终端启动Ubuntu,来验证WSL发行版是否已经成功创建。

这时,Ubuntu将使用root 作为默认用户。要恢复到你自己的账户,请输入以下命令。

ubuntu config --default-user <yourname>

这里,<yourname> 是你在安装时定义的用户名。

对于其他不是WSL2默认的发行版,通过登录发行版并创建/编辑/etc/wsl.conf 来定义一个用户。

touch /etc/wsl.conf
nano /etc/wsl.conf

在该文件中添加以下几行。

[user]
default=<yourname>

保存(Ctrl + O)并退出(Ctrl + X),然后在Powershell终端重新启动发行版。

wsl --terminate <distroname>

假设一切顺利,你可以删除备份文件(D:\backup\ubuntu.tar)。

从Windows访问Linux文件

你可以从网络路径\\wsl$\ ,访问WSL2 Linux文件。在文件资源管理器地址栏或任何文件打开对话框中输入它。

你所安装的Linux发行版会被列出,所以你可以访问Ubuntu的根目录:\\wsl$\Ubuntu 。你的个人Linux文件通常存储在。

\\wsl$\Ubuntu\home\<yourname>

这里,<yourname> 是你在安装时定义的用户名。

最好把它设置为Windows终端中发行版的起始文件夹。打开设置,点击一个配置文件,然后改变起始目录选项。

映射一个网络驱动器

你可以通过在文件资源管理器中打开\\wsl$\ ,右击Ubuntu文件夹,选择映射网络驱动器....,将网络驱动器挂载到\\wsl$\Ubuntu\

map Linux drive

不幸的是,目前还不能映射更深的子目录。你也可能在某些应用程序中遇到映射驱动器的问题。

从Linux访问Windows文件

Windows驱动器被挂载在Linux的/mnt/ 目录中。例如,你的个人Users 文件夹在C:\Users\<yourname> ,可在。

/mnt/c/Users/<yourname>

这里,<yourname> 是你的Windows用户名。

为了便于访问,你可以从终端创建一个Linux符号链接到任何Windows文件夹。例如,对于C:\projects\code\

cd ~
ln -s /mnt/c/projects/code/

一个code 文件夹将出现在你的Linux主目录中。使用cd ~/code 导航到它,你实际上就在/mnt/c/projects/code/ ,它直接映射到C:\projects\code\

从Linux访问Windows文件要比使用本地Linux文件系统慢得多。在可能的情况下,在Linux文件空间创建项目,通常是在你的主文件夹中(/home/<yourname>/~ )。

在Windows中运行Linux命令

任何Linux(bash)shell命令都可以通过Windows的Powershell或命令行终端使用wsl

wsl <linux-command>

例如,wsl ls -la 列出Windows文件夹中的所有文件。

从Linux运行Windows应用程序

任何Windows可执行文件都可以从Linux启动(通常需要指定.exe 扩展名)。例如,要在文件浏览器中打开当前的Linux目录,输入。

explorer.exe .

或者在记事本中编辑.bashrc

notepad.exe ~/.bashrc

或者在VS Code中打开一个特定的项目目录。

code ~/projects/mywebsite

安装应用程序

永远记住你在运行两个操作系统。它们可能是紧密结合的,但在有些情况下,你希望在任何地方都安装一个应用程序。

例如,Git在Windows和Linux中都很有用。Windows版是通过下载一个可执行文件来安装的。最好确保它不转换行尾。

git config --global core.autocrlf input

Ubuntu上的Git是用:

sudo apt update
sudo apt install git-all

同样地,你可能想在Windows和Linux上测试Node.js应用程序。同样,Windows有一个运行时安装程序,但Node.js运行时在Ubuntu上的安装是使用诸如以下的命令。

sudo apt-get install build-essential
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

git,nodenpm 命令现在可以在任何一个操作系统中工作。请注意,它们可能是不同的版本。

安装图形化的Linux应用程序

WSL2允许你在Windows上直接运行图形化的X11和Wayland Linux应用程序。你可以从 "开始 "菜单中启动Linux应用程序,将它们固定在任务栏上,并使用跨应用程序的剪切和粘贴等功能。但也有一些不足之处。

  • 并非所有的图形化应用程序都能像预期的那样工作
  • 一些提供Linux功能--如文件对话框--可能会使Windows用户感到困惑
  • 安装具有本地Windows版本的应用程序没有什么好处,如Firefox、VLC或GIMP。

要继续,请为你的电脑安装正确的GPU驱动程序。

然后从Linux终端安装任何图形化的应用程序。例如,GNOME的Gedit文本编辑器。

sudo apt install gedit

用来启动它。

gedit

像对待其他Windows程序一样,将该程序钉在你的开始菜单或任务栏上。

Gedit是一个下载量不到2MB的小程序。然而,它需要GNOME和其他Linux库,这些库在笨重的GPU驱动(英特尔为1.1GB)之上产生了几百兆的额外代码。在WSL2中使用图形化的Linux应用程序,只有在你需要安装几个应用程序或者没有原生的Windows替代品时才有意义。

安装Docker

*"在两个操作系统上安装 "*规则的一个例外是Docker!

Docker在隔离的Linux容器中运行应用程序,这些容器在概念上类似于带有操作系统、单一应用程序及其依赖关系的轻量级虚拟机。使用Docker进行网络开发,可以提供一个一致的环境,易于安装并在任何设备上运行。

Docker Desktop for Windows是完全支持WSL2的。

  • 不需要使用Hyper-V,所以Docker可以安装在Windows Home上。
  • 当配置为使用WSL2时,Docker的启动和运行速度要快很多
  • 在Windows上安装Docker Desktop可以在Windows和Linux中实现dockerdocker-compose

Docker Desktop建议你在它第一次启动时使用WSL2。另外,你可以从Docker系统托盘图标菜单中选择设置,然后选择常规标签,勾选使用基于WSL 2的引擎,并点击应用和重启

Docker WSL2 engine

Docker使用默认的Linux发行版,但你也可以从设置中的WSL集成面板,然后是资源,在其他已安装的发行版中启用它。

使用Docker启动Apache和PHP应用程序

可以在WSL2的Linux环境中直接安装Apache和PHP等Web依赖项。然而,Docker更安全、更快速、更可配置:它允许你在同一设备上同时运行不同版本的PHP。

在这个例子中,你将创建一个小的PHP文件,并在Docker容器中使用最新版本的PHP 7.4运行它。确保你已经安装了Docker Desktop for Windows并启用了WSL2模式,然后在你的Linux环境中创建一个带有index.php 文件的文件夹。比如说。

mkdir ~/php
cd ~/php
touch index.php

编辑index.php ,也许使用记事本或VS代码,如上所示。添加以下内容,输出PHP状态信息。

<?php
phpinfo();

运行下面的docker 命令,在容器中启动一个支持 PHP 8.1 的 Apache web 服务器,将当前主机目录下的文件挂载到容器中的/var/www/html

docker run \
  -it --rm -p 8080:80 --name php \
  -v "$PWD":/var/www/html \
  php:8.1-apache

注意:此命令在 Windows 中也可以使用,但对$PWD 的引用必须用 Linux 符号中的完整文件路径代替 - 如/c/php/

在任何Windows网络浏览器中打开https://localhost:8080/ ,查看phpinfo() 命令的输出。

最后,在你的Docker终端按Ctrl+C来停止并删除容器。

WSL2和localhost

运行在Windows、WSL2 Linux和Docker容器上的应用程序总是从localhost127.0.0.1

上面的PHP例子暴露了端口8080 ,它被映射到容器中的端口80 。同样,如果你在Linux中安装了Node.js,你可以cd 到任何目录并启动一个静态文件服务器。

npx small-static-server

在浏览器中打开http://localhost:8888/ ,查看该目录下的文件(index.html 默认返回)。

请注意,在一个操作系统中可用的端口可能在另一个操作系统中不可用。小于1,000的端口号只对Linux超级用户可用。80号端口通常由Windows Store Skype应用程序保留,而且不能更改(尽管经典的桌面版确实允许)。

自签或使用mkcert等工具在本地信任的SSL证书可以在Windows和Linux环境中互换使用。

VS Code WSL2集成

VS Code允许你使用任何Windows或Linux终端。用查看>终端或Ctrl + '打开终端,然后点击**+图标旁边的向下箭头来启动一个特定的类型。同样的菜单有一个选择默认配置文件**的选项,你可以选择默认使用的终端。

VS Code default terminal shell

像其他应用程序一样,VS Code可以直接访问Linux文件,在\\wsl$\ 和运行在localhost 的调试器。不需要进一步的扩展,但以下选项允许更容易的Linux和Docker文件管理。

安装完Remote - WSL后,你可以导航到任何Linux目录,并启动一个连接了WSL的VS Code实例。

cd ~/myproject
code .

或者,点击应用程序左下方的远程窗口图标,然后选择一个连接选项。

VS Code remote window icon

或者使用活动栏中新的远程资源管理器图标。这允许你从下拉菜单中选择一个目标类型并进行相应的连接。

VS Code Remote Explorer

VS Code的远程实例有一套单独的扩展和设置供Linux使用,但有些可以全局启用。扩展面板允许你在远程实例中启用和配置扩展。

VS Code extensions

设置存储在你的Linux~/.vscode-server 目录中。

总结

在Windows上运行Linux应用程序曾经需要虚拟机、复杂的Samba文件夹共享,以及大量的耐心。WSL2已经彻底改变了网络开发。它使使用Windows工具编写代码,然后在类似于生产环境的Linux环境中运行变得容易。这种紧密的整合提供了两种操作系统的优点。