如何使用WSL2在Windows 10或Windows 11电脑上安装、管理和使用一个完整的Linux环境
本教程演示了如何使用WSL2在Windows 10或Windows 11电脑上安装、管理和使用一个完整的Linux环境。你将运行一个Linux内核并执行本地应用程序,同时与Windows代码编辑器和浏览器无缝共享文件和服务。
为什么使用Linux?
你的虚拟主机几乎肯定使用Linux。它速度快、开放源码,可以运行大多数的网络软件,包括:
- 服务器(Apache、NGINX、LiteSpeed等)
- 语言运行机制(PHP、Python、Node.js、Ruby等)。
- 实用程序库(图像处理、ZIP创建、电子邮件程序等)
- 数据库(MySQL、MongoDB、Redis等)
- 其他依赖性(Elasticsearch、RabbitMQ、代理等)。
这些依赖性中的一些可能在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会话和设备驱动程序保存到一个文件中,以便下次启动时更快。这可能会给Linux内核带来问题,它在下次启动时变得没有反应。如果你遇到问题,可以从经典的控制面板>电源选项>选择电源按钮的作用中禁用快速启动。

或者,在你的启动文件夹(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…的资料库中获得。

在安装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功能中启用。通过点击 "开始 "并键入 "功能 "或从经典控制面板中的 "程序和功能"图标访问该面板。

另外,你可以在以管理员身份运行的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

要安装默认的Ubuntu 20.04发行版,请输入。
wsl --install
要按名称安装一个特定的发行版,如Debian ,请输入。
wsl --install -d Debian
另外,你也可以从 "开始 "菜单中的 "微软商店"安装Linux发行版。在搜索框中输入 "Linux"(要注意可能有WSL发行版以外的软件)。

除非你有特定的Linux要求,否则Ubuntu是一个不错的选择。如果你点击Ubuntu图标后的 "获取"按钮,就可以安装最新版本。
下载和安装可能需要一些时间,这取决于你的网络和电脑速度。你可能会被提示再次重启。
启动Linux
现在,一个新的Linux**(Ubuntu**)选项/图标将出现在。
- 开始菜单
- Windows终端(如果安装了)。
- Powershell - 在提示符下输入
wsl或bash
第三方终端软件,如Cmder、ConEmu或Hyper,可以通过创建配置文件来启动%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\ 。

不幸的是,目前还不能映射更深的子目录。你也可能在某些应用程序中遇到映射驱动器的问题。
从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,node 和npm 命令现在可以在任何一个操作系统中工作。请注意,它们可能是不同的版本。
安装图形化的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中实现
docker和docker-compose。
Docker Desktop建议你在它第一次启动时使用WSL2。另外,你可以从Docker系统托盘图标菜单中选择设置,然后选择常规标签,勾选使用基于WSL 2的引擎,并点击应用和重启。

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容器上的应用程序总是从localhost 或127.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可以直接访问Linux文件,在\\wsl$\ 和运行在localhost 的调试器。不需要进一步的扩展,但以下选项允许更容易的Linux和Docker文件管理。
安装完Remote - WSL后,你可以导航到任何Linux目录,并启动一个连接了WSL的VS Code实例。
cd ~/myproject
code .
或者,点击应用程序左下方的远程窗口图标,然后选择一个连接选项。
![]()
或者使用活动栏中新的远程资源管理器图标。这允许你从下拉菜单中选择一个目标类型并进行相应的连接。

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

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