尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Windows WSL 2配置Ubuntu开发环境:从原理到实战优化指南

Windows WSL 2配置Ubuntu开发环境:从原理到实战优化指南 1. 项目概述为什么要在Windows上折腾WSL如果你是一个长期在Windows和Linux之间反复横跳的开发者或者是一个刚入门、被各种环境配置搞得焦头烂断的新手那么“Windows WSL配置Ubuntu环境并登录”这个标题可能就是你当下最真实的需求写照。这不仅仅是一个简单的安装教程它背后代表的是无数开发者渴望在熟悉的Windows界面下无缝获得一个原生、高效、且能与Windows文件系统互通的Linux开发环境的迫切愿望。过去我们可能需要安装笨重的虚拟机或者准备一台额外的Linux服务器现在Windows Subsystem for LinuxWSL提供了一个近乎完美的解决方案。简单来说WSL允许你在Windows 10或Windows 11上直接运行一个完整的、无需虚拟化的Linux内核并安装你喜欢的Linux发行版如Ubuntu。这意味着你可以用bash命令行安装apt的软件包运行Linux原生应用同时又能通过/mnt/c这样的路径直接访问你的Windows C盘文件。对于需要Linux环境进行开发比如Python、Node.js、Docker、C编译、学习系统操作或者单纯想体验Linux但又不想离开Windows生态的用户来说WSL是目前最优雅、性能损耗最低的选择。我自己的主力开发机就是Windows 11 WSL 2 Ubuntu 22.04 LTS的组合用了快三年从后端服务开发到机器学习模型训练大部分工作流都迁移到了这里面。它稳定、快速并且完美解决了“开发环境是Linux生产环境是Linux但办公不得不使用Windows”的经典矛盾。接下来我会把我从零开始配置、优化再到日常使用的全套经验包括那些官方文档里不会写的“坑”和“技巧”毫无保留地分享给你。2. 核心思路与方案选型WSL 1 vs WSL 2在动手之前我们必须先理解WSL的两个主要版本WSL 1和WSL 2。这不是一个简单的版本迭代而是架构上的根本性变革选择哪一个会直接影响你后续的使用体验。WSL 1翻译层架构WSL 1的核心是一个“兼容层”。它没有独立的Linux内核而是通过一个翻译层将Linux的系统调用syscall实时翻译成Windows能理解的内核调用。这种架构的优点非常明显启动速度极快几乎是秒开。与Windows文件系统的互操作性极佳因为不需要经过虚拟化层WSL 1访问Windows文件/mnt/c的速度和Windows原生程序访问自己文件的速度差不多。内存占用低没有独立的虚拟机内存开销。但是它的缺点也同样突出I/O性能差在Linux子系统内部进行文件操作比如在/home目录下进行git clone或npm install时速度会明显慢于原生Linux因为所有操作仍需经过翻译层。系统调用兼容性不全一些依赖特定Linux内核特性的应用例如Docker无法在WSL 1上完美运行。WSL 2完整的虚拟化架构WSL 2则采用了轻量级虚拟机VM技术。它在Windows上运行一个高度优化的、完整的Linux内核。这意味着近乎原生的Linux性能尤其是文件I/O性能在Linux子系统内部的操作速度极快比WSL 1有数量级的提升。这对于需要大量文件读写的开发任务如编译、包管理至关重要。完整的系统调用兼容性可以运行Docker、FUSE等需要特定内核模块的应用。更好的内存管理虽然有一个独立的虚拟机但其内存是动态分配的并且可以与Windows主机高效共享。它的代价是启动速度稍慢需要启动一个轻量级VM但通常也就在2-3秒内。跨系统文件访问性能下降从WSL 2内访问Windows文件/mnt/c的速度会比WSL 1慢因为需要经过一层网络协议9P协议的转换。不过这个影响对于日常的代码编辑、配置文件读取来说感知并不强烈。我的选择与建议无脑选WSL 2除非你有非常特殊的、必须极致追求跨系统文件访问速度且不在乎Linux内部I/O性能的场景否则在2024年的今天WSL 2是唯一正确的选择。微软官方也推荐使用WSL 2。我们后续的所有配置都将基于WSL 2展开。它的性能优势和对现代开发工具链特别是Docker的完美支持完全值得那一点点启动时间的代价和略微下降的跨系统文件访问速度。更何况我们可以通过一些技巧来优化文件访问路径。3. 详细配置与实操步骤全记录3.1 前期准备与系统要求检查在开始安装之前我们需要确保你的Windows系统满足最低要求并开启必要的功能。这是避免后续安装失败的关键一步。第一步确认Windows版本WSL 2对系统版本有硬性要求对于Windows 10必须是版本 2004内部版本 19041或更高。你可以通过Win R输入winver来查看你的具体版本。对于Windows 11所有版本都内置支持WSL 2。如果你的Windows 10版本过旧请务必通过Windows Update升级到最新版本。第二步开启“适用于Linux的Windows子系统”和“虚拟机平台”功能这两个功能默认是关闭的我们需要手动启用。有两种方法方法一图形界面控制面板在开始菜单搜索“启用或关闭Windows功能”并打开。在弹出的窗口中找到并勾选适用于Linux的Windows子系统虚拟机平台点击“确定”系统会应用更改并可能要求你重启计算机。请务必重启。方法二命令行管理员权限PowerShell如果你喜欢命令行效率更高。以管理员身份打开PowerShell在开始菜单搜索PowerShell右键选择“以管理员身份运行”然后依次执行以下两条命令dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完毕后同样需要重启计算机。注意很多新手会忽略重启这一步导致后续安装WSL时出现莫名其妙的错误。这两个功能启用后必须重启才能生效请务必遵守。3.2 安装WSL内核更新与设置默认版本重启完成后我们需要安装WSL 2的Linux内核更新包并将WSL 2设置为默认版本。安装WSL 2 Linux内核更新包访问微软官方文档提供的下载链接通常会自动指向最新版本下载名为wsl_update_x64.msi的安装包。双击运行该MSI文件按照提示完成安装。这一步是为WSL 2提供那个“完整的Linux内核”。将WSL 2设置为默认版本再次以管理员身份打开PowerShell输入以下命令wsl --set-default-version 2这个命令的作用是之后所有新安装的Linux发行版默认都会使用WSL 2架构。如果系统提示成功那么前期准备就完成了。3.3 安装Ubuntu发行版安装Ubuntu发行版有多种方式我推荐使用命令行因为它最直接、可控。方法一使用wsl --install命令最简在PowerShell或CMD中直接输入wsl --install -d Ubuntu-22.04这个命令会执行一系列操作检查系统、启用必要功能、安装默认的WSL 2内核、并下载安装指定的Ubuntu发行版这里是22.04 LTS。-d参数用于指定发行版名称。如果你想安装其他版本如Ubuntu-24.04替换即可。方法二从Microsoft Store安装可视化打开Microsoft Store微软商店。搜索“Ubuntu”。你会看到多个版本如“Ubuntu 22.04.4 LTS”、“Ubuntu 24.04 LTS”。选择你需要的版本点击“获取”进行安装。方法三离线安装针对网络问题如果你遇到wsl --install下载太慢或失败的情况这也是一个常见坑可以手动下载发行版镜像包.appx或.msixbundle文件。去Ubuntu官网或第三方镜像站找到适用于WSL的Ubuntu发行版离线包。例如Ubuntu官方在GitHub上提供了发布页。下载对应版本的.appx文件例如Ubuntu_2204.1.7.0_x64.appx。将文件后缀从.appx改为.zip然后解压到一个你喜欢的目录比如D:\WSL\Ubuntu2204。进入解压后的目录找到ubuntu.exe或ubuntu2204.exe双击运行它。它会完成最后的初始化安装。无论用哪种方法安装完成后你的开始菜单里会出现一个“Ubuntu”或类似名称的应用图标。第一次运行它会进入一个终端窗口并提示你等待几分钟进行解压和安装。最后它会要求你设置一个新的UNIX用户名和密码。实操心得这个用户名和密码是独立的与你的Windows账户密码无关。请务必记住你设置的密码因为在Linux内部使用sudo提权操作时需要频繁输入这个密码。建议设置一个简单但安全的密码。3.4 首次登录与基础系统配置当你设置好用户名和密码后就正式进入了Ubuntu的命令行环境。首先我们应该做几件基础但重要的事情。更新软件包列表和升级现有软件Ubuntu安装后自带的软件包索引可能不是最新的。运行以下命令来更新并升级所有包sudo apt update sudo apt upgrade -ysudo: 以管理员权限运行命令。apt update: 从软件源服务器更新本地的软件包索引列表。apt upgrade -y: 根据更新后的列表升级所有可升级的软件包。-y参数表示自动确认所有提示避免中途需要手动输入Y。这个过程可能会花费一些时间取决于网络速度和需要更新的包数量。配置Windows Terminal作为默认终端强烈推荐Windows自带的命令行终端CMD, PowerShell功能较弱。微软推出的Windows Terminal是一个现代化、功能强大、颜值高的终端应用程序它完美支持WSL标签页、多窗格、自定义主题等功能。从Microsoft Store安装“Windows Terminal”。安装后打开点击下拉箭头你会发现它已经自动检测到了你安装的Ubuntu WSL并为其创建了一个配置文件。你可以将Ubuntu设置为默认启动的配置文件在设置中修改。以后只需要打开Windows Terminal就会直接进入WSL的Ubuntu环境体验远好于单独打开Ubuntu应用。4. 环境配置进阶与优化技巧一个干净的Ubuntu只是开始要让它成为一个高效的开发环境还需要进行一系列配置。这里我分享几个最关键、最实用的配置点。4.1 文件系统互操作与最佳实践WSL 2与Windows的文件系统是互通的但方式有讲究用错了会严重影响性能。访问Windows文件在WSL 2的终端里你可以通过/mnt/目录访问Windows的磁盘。例如你的C盘就在/mnt/c/D盘在/mnt/d/。你可以像操作Linux文件一样操作它们。ls /mnt/c/Users/YourName/Desktop # 查看Windows桌面文件 cp /mnt/d/MyProject /home/youruser/ # 从D盘复制项目到WSL家目录一个重要警告不要在/mnt下进行开发这是WSL 2性能的一个关键坑。因为/mnt下的文件访问需要经过一层网络协议转换在WSL内部进行大量I/O操作如git,npm install,编译时速度会非常慢可能比在WSL 1里还慢。最佳实践在WSL的文件系统内工作你应该将你的项目代码、开发环境全部放在WSL自己的Linux文件系统内例如你的家目录/home/yourusername/下。这里的I/O性能是原生的速度极快。那么如何在Windows下编辑这些文件呢你有两个绝佳选择使用VSCode的Remote - WSL扩展这是官方“王炸”组合。在Windows上安装VSCode和“Remote - WSL”扩展。然后在WSL终端里进入你的项目目录输入code .。VSCode会自动在Windows端打开一个窗口但其所有插件、终端都会运行在WSL环境里实现了“在Windows上用GUI编辑在Linux里执行和调试”的无缝体验。使用 \wsl$ 网络路径在Windows的文件资源管理器地址栏直接输入\\wsl$并回车你会看到所有运行的WSL发行版点进去就能直接访问其Linux文件系统。你可以在这里创建文件夹、复制文件就像访问一个网络驱动器。4.2 配置国内软件源加速默认的Ubuntu软件源服务器在国外下载速度可能很慢。更换为国内镜像源如阿里云、清华、中科大可以极大提升apt安装软件的速度。备份原有源列表sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak编辑源列表文件这里以阿里云镜像源Ubuntu 22.04为例使用sed命令一键替换sudo sed -i shttp://.*archive.ubuntu.comhttp://mirrors.aliyun.comg /etc/apt/sources.list sudo sed -i shttp://.*security.ubuntu.comhttp://mirrors.aliyun.comg /etc.apt/sources.list或者你也可以使用熟悉的编辑器如vim或nano手动编辑/etc/apt/sources.list文件将里面的archive.ubuntu.com和security.ubuntu.com替换为mirrors.aliyun.com。更新软件包列表替换完成后别忘了再次更新索引sudo apt update现在你再执行apt install安装软件速度就会有质的飞跃。4.3 安装常用开发工具与环境一个基础的开发环境通常需要版本管理、运行时和包管理工具。安装Gitsudo apt install git -y git config --global user.name Your Name git config --global user.email your.emailexample.com安装Node.js (使用NodeSource源)Ubuntu默认仓库的Node.js版本可能较旧。推荐使用NodeSource提供的官方仓库安装LTS版本。# 安装curl工具如果尚未安装 sudo apt install curl -y # 添加NodeSource仓库以Node.js 20.x LTS为例 curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - # 安装Node.js sudo apt install -y nodejs # 验证安装 node --version npm --version安装Python3及pipUbuntu 22.04通常预装了Python 3.10。我们确保它和pip已安装并更新。sudo apt install python3 python3-pip python3-venv -y python3 --version pip3 --version # 升级pip pip3 install --upgrade pip安装Java (OpenJDK)# 安装OpenJDK 17一个流行的LTS版本 sudo apt install openjdk-17-jdk -y java -version javac -version安装构建工具很多软件编译需要基础构建工具。sudo apt install build-essential -y4.4 配置SSH密钥与远程登录为了方便登录GitHub、GitLab或远程服务器配置SSH密钥是标准操作。生成SSH密钥对在WSL终端执行ssh-keygen -t ed25519 -C your_emailexample.com按回车接受默认的保存路径~/.ssh/id_ed25519然后设置一个密码可选直接回车则为空。将公钥添加到远程服务查看并复制你的公钥cat ~/.ssh/id_ed25519.pub将输出的这一长串内容以ssh-ed25519 AAA...开头完整地添加到你的GitHub、GitLab或服务器~/.ssh/authorized_keys文件中。配置SSH Agent自动管理密钥为了避免每次使用SSH都输入密码可以启动ssh-agent并添加私钥。# 启动ssh-agent eval $(ssh-agent -s) # 将私钥添加到agent ssh-add ~/.ssh/id_ed25519你可以将这两行命令添加到你的shell配置文件如~/.bashrc或~/.zshrc中以便每次启动终端时自动加载。5. 高级管理与故障排查实录5.1 WSL常用管理命令掌握一些WSL管理命令能让你更从容地控制你的子系统。列出已安装的发行版wsl -l -v这个命令会显示所有WSL发行版的名称、状态Running/Stopped和使用的WSL版本1或2。非常有用。停止某个发行版wsl --terminate 发行版名例如wsl --terminate Ubuntu-22.04。这相当于“关机”。关闭所有WSL发行版wsl --shutdown这会立即终止所有正在运行的WSL实例和虚拟机。当你觉得WSL有点“不对劲”或者占用内存过高时可以执行此命令然后重新打开。导出/备份发行版wsl --export 发行版名 文件名.tar例如wsl --export Ubuntu-22.04 D:\backup\ubuntu_backup.tar。这会将整个发行版打包成一个文件用于备份或迁移。导入发行版wsl --import 新名称 安装路径 文件名.tar例如wsl --import Ubuntu-Backup D:\WSL\Instances\ .\ubuntu_backup.tar。可以从备份文件创建一个新的发行版实例。设置默认登录用户如果你不小心用错了用户或者想切换默认用户可以在PowerShell中运行ubuntu config --default-user yourusername将ubuntu替换为你的发行版可执行文件名。5.2 常见问题与解决方案问题1安装WSL时提示“无法解析服务器名称”或下载极慢。原因网络连接问题或者微软商店/CDN节点不佳。解决使用上文提到的离线安装包方法。尝试更改DNS为114.114.114.114或8.8.8.8。使用稳定的网络连接或者尝试手机热点。问题2执行wsl --install或wsl --set-default-version 2时报错。原因最常见的原因是没有以管理员身份运行PowerShell或者启用功能后没有重启电脑。解决确保使用管理员PowerShell并确保已重启。问题3WSL 2启动失败错误代码0x80370102。原因通常是因为电脑的虚拟化功能Intel VT-x 或 AMD-V在BIOS/UEFI中被禁用或者Hyper-V等相关的虚拟化平台冲突。解决重启电脑进入BIOS/UEFI设置开机时按F2、Del等键找到“Virtualization Technology”或类似选项确保其状态为Enabled。在Windows中确保“Hyper-V”、“Windows Hypervisor Platform”功能没有被单独启用除非你需要。我们只需要“虚拟机平台”。问题4在WSL 2中运行的服务如Web服务器无法从Windows浏览器访问。原因WSL 2拥有独立的虚拟网络其IP地址与Windows主机不同且每次启动可能会变。解决在WSL 2中运行ip addr show eth0查看其IP地址inet后的地址。在Windows浏览器中使用这个IP地址和端口号访问例如http://172.xx.xx.xx:3000。更优雅的方案在WSL 2中启动服务时绑定到0.0.0.0而不是localhost。例如Node.js应用使用app.listen(3000, 0.0.0.0)。这样服务会监听所有网络接口。问题5WSL 2内存/CPU占用过高。原因WSL 2虚拟机默认会尽可能使用主机资源。某个进程可能内存泄漏。解决定期使用wsl --shutdown重启释放资源。可以创建配置文件%UserProfile%\.wslconfig来限制资源使用。例如[wsl2] memory4GB # 限制最大内存为4GB processors4 # 限制使用4个CPU核心 swap2GB # 设置交换空间大小修改后需要wsl --shutdown重启生效。问题6如何从WSL访问Windows上运行的服务如MySQL、Redis原因WSL 2与Windows主机在不同的网络命名空间。解决使用Windows主机的特殊DNS名称host.docker.internal这是Docker提供的但在WSL 2中也通常可用或者使用Windows主机在WSL 2网络中的网关IP。一个更通用的方法是在WSL 2中运行cat /etc/resolv.conf其中nameserver后面的IP地址就是Windows主机的IP用这个IP去连接Windows上的服务即可。例如如果Windows上运行了Redis在默认端口6379那么在WSL 2中可以用redis-cli -h Windows主机IP来连接。
返回列表