尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Windows上跑Linux的首选方案:WSL安装配置与实用指南

Windows上跑Linux的首选方案:WSL安装配置与实用指南 在Windows上跑Linux我第一个推荐的不是虚拟机也不是双系统而是微软官方做的Linux子系统也就是大家常说的WSL。具体到Ubuntu只需要几条命令你就能在Windows系统里拥有一个接近原生的Linux环境直接用apt装软件、跑脚本、起服务完全不用重启切换。这篇文章我会从头讲WSL是什么、怎么装、装完怎么配也会把我踩过的坑和常见报错一并整理出来适合想在Windows里用Linux的开发者或者刚开始接触Linux命令的人。先说结论如果你是做后端开发、运维、数据处理或者只是想学Linux常用命令WSL是目前在Windows上接触Linux成本最低的方式但如果你需要完整的Linux桌面环境或者要做虚拟机级别的硬件穿透那还是老老实实用虚拟机或者实体机装Linux更合适。1. 先搞清楚WSL是什么再动手装不然容易绕弯路1.1 WSL和虚拟机、双系统的本质区别WSL的全称是Windows Subsystem for Linux翻译过来就是Windows的Linux子系统。它不是一个独立运行的虚拟机也不是在Windows上模拟Linux而是在Windows系统内部提供了一个与Linux兼容的运行环境。WSL 1的做法是把Linux的系统调用翻译成Windows系统调用相当于给Linux程序开了个翻译官WSL 2则是用轻量级虚拟机跑一个完整的Linux内核程序是在真正的Linux内核上运行的所以兼容性更接近一台真实的Linux服务器。很多朋友第一次知道WSL时会问这和VMware/VirtualBox虚拟机有什么区别最直观的差别是传统虚拟机启动要一分多钟WSL终端打开一秒钟就能进虚拟机里需要手动装Ubuntu桌面、装增强工具WSL装好之后直接在Windows终端里用省掉了很多环境折腾的时间虚拟机里的文件和你Windows文件是隔开的需要通过共享文件夹来互通而WSL直接可以把Windows磁盘挂载到/mnt/c也可以反过来在Windows文件管理器里输入\wsl$访问Linux文件文件互通做得非常顺。所以WSL不是冲着替代虚拟机去的它解决的痛点是我主力机用Windows但很多时候需要在Linux下写代码、跑一些只支持Linux的命令行工具WSL就把这两者之间来回切换的门槛拆掉了。如果你纠结装双系统还是WSL我的看法是双系统适合需要完整Linux桌面、要长期把Linux当主系统的人但切换要重启机器日常很割裂WSL则适合“Windows为主Linux为辅”的工作流。在很多开发团队里Windows负责日常办公和娱乐WSL负责开发和跑服务两者各司其职体验相当舒服。1.2 WSL 1和WSL 2怎么选版本差异别小看WSL目前有两个大的版本WSL 1和WSL 2。WSL 1是早期的系统调用翻译方案兼容性一直有瑕疵比如很多依赖完整内核的程序会跑不起来WSL 2虽然是轻量虚拟机但它跑的是真正的Linux内核对Linux程序的兼容性几乎是100%所以后来的新版本默认都用WSL 2。两个版本还有一个大家经常忽略的差异是文件系统性能。WSL 1因为直接操作Windows文件系统在/mnt/c这类跨系统文件夹里跑命令反而快WSL 2对Linux文件系统比如/home的读写性能很好但跨到Windows文件系统时因为要经过一层协议转换速度会慢不少。我的实际体验是项目代码放在WSL自己的文件系统里编译、安装依赖都很舒服如果把一个几千个文件的npm项目放在/mnt/c下跑npm install那等待时间会明显变长这个点后面还会再提。所以选版本很简单没有特殊需求直接WSL 2。只有那种必须频繁跨Windows和Linux文件映射、而且对内核兼容性要求不高的场景才考虑用WSL 1。检查当前版本用wsl -l -v切换版本用wsl --set-version Ubuntu 2这些命令后面会详细讲。2. 从零开始WSL安装的全流程和多种方案2.1 最省事的方法wsl --install一行搞定Windows 10 2004及以上版本、Windows 11系统都已经内置了WSL的安装命令。你只需要以管理员身份打开PowerShell或Windows Terminal执行下面这行命令系统会自动安装Linux子系统功能、虚拟机平台并默认装好最近的Ubuntu LTS版本。wsl --install如果你想指定安装某个Ubuntu版本比如Ubuntu 22.04 LTS可以加一个-d参数wsl --install -d Ubuntu-22.04命令跑完通常会提示重启电脑。重启之后开始菜单里会出现Ubuntu的入口或者在终端里直接输入wsl回车就会进入首次初始化。初始化时会让你创建一个Linux用户名和密码这里有几个小提醒用户名建议不要带空格密码需要输入两次而且输入时屏幕不会显示任何字符这不是坏了是正常行为。第一次进入之后建议立刻跑一下sudo apt update sudo apt upgrade把软件源和基础软件更新到最新这个习惯我在后面也会反复强调。有人反馈wsl --install装得很慢主要原因是安装过程中要从网络下载发行版包如果网络不稳定确实会卡很久。这里我建议别急着反复重试先让它跑实在跑不动再考虑手动下载离线安装包的方式下面专门说一下。2.2 手动离线安装适合下载慢或者系统比较旧的情况如果你的系统比较旧或者通过网络安装一直不成功可以考虑离线安装。刚才说的wsl --install本质上是从微软的商店或官网把WSL功能和发行版包拉下来那我们可以手动完成同样的事情。首先是启用Windows功能。在管理员PowerShell里执行dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完重启。接下来去微软官网或者Windows商店下载Ubuntu的应用安装包通常是.appx或.appxbundle格式。下载后在PowerShell里用Add-AppxPackage命令安装Add-AppxPackage .\Ubuntu.appx装完就能在开始菜单找到Ubuntu。还有一种更轻的导入方式wsl --import它适合从网上下载别人做好的Ubuntu rootfs压缩包解压后一次性导入子系统适合做测试环境或临时环境而不是日常主力开发环境。因为用wsl --import导入的发行版默认没有用户向导需要用root身份进入手动初始化用户配置起来多一道工序新手我不太推荐。另外强调一句安装过程中如果提示“适用于Linux的Windows子系统”功能没有启用或者“请启用虚拟机平台”说明前置功能没开齐按上面的dism命令启用后重启再试基本都能解决。2.3 初始化必做更新源、建root密码、查看系统版本第一次进入Ubuntu终端后很多教程就直接让你开始输命令但我建议先把基础环境理顺。第一步是更新软件源和升级已安装软件sudo apt update sudo apt upgrade如果提示有大量的软件包可以升级按Y确认就好这会花几分钟但能避免后面装软件时遇到依赖问题。第二步是设置root密码。日常操作推荐用sudo但某些场景下确实需要切到root比如改系统级配置。设置root密码的命令是sudo passwd root输入当前用户密码后再为root设置一个新密码。第三步是确认当前系统是什么版本、哪个内核方便后面万一出问题排查cat /etc/os-release uname -a做完这三步你的Ubuntu子系统就处于一个干净可用的状态后面无论是装开发环境还是跑服务都可以放心开始。3. 装完Linux子系统之后这些配置建议马上做3.1 换国内软件源解决apt下载慢这里有个很常见的现象apt update半天没反应或者装一个几十MB的包下载速度只有几十KB/s。原因很简单Ubuntu默认的软件源服务器在国外跨网络下载容易慢。解决办法是换成国内镜像源这个操作也叫换源是Linux入门的必修课。先备份原来的源文件避免换出问题回不去sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak然后查看你的Ubuntu版本代号不同版本的源写法不一样lsb_release -a比如Ubuntu 22.04的代号是jammy24.04的代号是noble。知道代号后编辑/etc/apt/sources.list把里面的地址替换成国内镜像。我以清华镜像源为例Ubuntu 22.04写法如下sudo sed -i s//.*archive.ubuntu.com//mirrors.tuna.tsinghua.edu.cng /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo apt update如果你的版本是Ubuntu 24.04新版改用了Ubuntu Archive的目录结构源格式会有些不同最稳妥的方法是去镜像站官网看对应版本的sources.list样例复制过来用。实测换完源之后apt update的时间能从好几分钟降到几十秒装软件的速度也会明显提升。这是让WSL更好用的第一件小事强烈建议做。3.2 中文支持与中文输入法看你的使用场景WSL本身是个命令行环境如果只是想在终端里显示中文文件名和中文内容通常不需要额外配置Windows Terminal默认的编码就是UTF-8配合Ubuntu的locale看中文没有任何问题。真正需要折腾的是中文输入法这个要区分场景。如果你想在WSL的终端窗口里输入中文比如写git commit信息、写文档那你需要装个中文输入法框架并配置好。Ubuntu 22.04以上版本配合WSLg在Windows 11上是可以直接运行Linux图形程序和输入法的所以可以按Ubuntu桌面的方式装fcitx5或者搜狗输入法Linux版。大致步骤如下sudo apt install fcitx5 fcitx5-chinese-addons装完设置环境变量并重启WSLecho export GTK_IM_MODULEfcitx ~/.bashrc echo export QT_IM_MODULEfcitx ~/.bashrc echo export XMODIFIERSimfcitx ~/.bashrc wsl --shutdown重新打开Ubuntu后运行fcitx5在输入法配置里添加拼音再用CtrlSpace切换。这里我最想提醒的是WSL的主要使用场景仍然是命令行如果你为了中文输入法去折腾了一整套桌面环境和GUI依赖很容易陷入装包-缺依赖-再装包的循环。建议先想清楚自己到底要在WSL里做什么如果只是偶尔用到中文先尝试在Windows侧用输入法写好文字再粘贴过去等到真有需要再配输入法能省很多时间。3.3 高频Linux命令清单新手先用熟这些很多朋友搜linux常用命令大全是想快速上手但列出一百条命令反而记不住。我自己教别人的时候一般只推荐先掌握下面这一小撮命令日常能在WSL里跑通项目就够了用途命令示例查看当前目录pwd列出文件ls -la切换目录cd /home/用户名创建目录mkdir demo复制/移动/删除cp -r、mv、rm -rf查看文件cat file.log、less file.log搜索文件find . -name *.conf过滤文本grep error app.log查看进程ps aux、top安装软件sudo apt install 包名查看端口ss -tlnp查看磁盘df -h上面这一堆命令不需要死记用的时候记不住就敲help或者man比如man ls、ls --help。WSL的一大好处就是随便折腾不怕把系统搞坏装错了软件或者配坏了配置大不了wsl --unregister再重新初始化这也是很多新手愿意在WSL里练Linux命令的原因。另外WSL里还很适合运行那些Windows下不好跑的Linux工具比如固件分析常用的binwalk一条sudo apt install binwalk装完就能用这也是我在WSL里用得比较多的场景。4. 把WSL用到开发工作流里越用越顺手4.1 在VSCode中使用WSL开发环境无缝衔接如果你用Visual Studio Code写代码那么WSL的最佳搭档是微软官方的WSL扩展。装了扩展之后你可以直接在WSL的Ubuntu终端里输入code .VSCode会打开一个新的窗口并且这个窗口里的终端、插件、调试器全都跑在Linux环境里。具体配置很简单先在Windows侧的VSCode里安装WSL扩展安装后打开WSL终端进入你的项目目录然后执行cd /home/你的用户名/project code .VSCode会自动识别这是WSL环境并启动WSL服务首次启动会稍慢一点后续几乎是秒开。这时候你在VSCode里写的代码、装的插件、用的Python解释器都变成了Linux下的环境Windows和Linux的路径问题基本不用操心非常省事。我平时做后端开发经常需要在Windows下用Office和聊天工具又要在Linux环境下跑Node和Python脚本用这个组合两边的体验都保留得很好。4.2 在WSL里跑服务Elasticsearch、Docker等场景WSL2因为内置了完整的Linux内核所以很多原本只能在Linux服务器上跑的服务也可以在WSL里直接跑起来当开发环境用。比如搜索领域常用的Elasticsearch在WSL里安装和裸机Linux基本一样下载tar.gz包解压后需要先改一个参数再启动因为ES默认不允许用root用户运行同时要求虚拟内存映射数量足够。可以这样调sudo sysctl -w vm.max_map_count262144然后切换到非root用户进入elasticsearch目录执行bin/elasticsearch即可。注意sysctl的修改重启后会失效如果你经常用ES建议把vm.max_map_count262144写到/etc/sysctl.conf里再执行sudo sysctl -p让配置持久化。另一个常用组合是Docker。Windows上跑Docker有两种思路一种是装Docker Desktop然后在设置里把后端切换到WSL2另一种是直接在WSL里装docker-engine。我推荐新手用Docker Desktop因为它在Windows任务栏有图形界面容器状态、资源占用一目了然而且天然和WSL联动。直接在WSL里装Docker虽然更接近服务器环境但要处理systemd启动和容器网络等细节踩坑成本对新手不太友好。如果一定要在WSL里直接跑建议先在/etc/wsl.conf里开启systemd支持在[boot]段下加一行systemdtrue然后执行wsl --shutdown重启否则systemctl命令很可能用不了。等熟悉了再慢慢迁到命令行纯Docker的玩法也不迟。4.3 Windows和WSL互访文件路径与性能注意事项WSL在文件互访上做得非常顺手。想在Windows资源管理器里看Linux的文件只需要在地址栏输入\\wsl$\Ubuntu\home\你的用户名反过来在WSL里访问Windows的C盘路径是cd /mnt/c/Users/你的Windows用户名这个设计方便归方便但有一个性能上的坑我必须要提WSL2里的Linux程序操作/mnt/c目录下的文件本质是通过协议跨到了Windows文件系统速度远不如直接操作Linux自带文件系统。如果你把一个前端项目放在C盘里然后到WSL里跑npm install或者把一个Git仓库放在Windows盘里用WSL编译速度都会明显拖后腿。我的习惯是项目代码统一放在WSL的/home目录下借助\wsl$路径在Windows编辑器里打开这样两边都能用速度也快。这也是很多老手踩过坑之后的共识。5. 高频率出现的问题一次性整理给你5.1 WSL版本太旧的报错处理方法要分清很多项目初装WSL后运行wsl命令会看到类似这样的错误Your version of Windows Subsystem for Linux (WSL) is too old. Please run wsl --update to update to the latest version.新手看到这个报错容易慌其实处理思路很清晰。首先是更新WSL本体wsl --update如果更新完还是提示旧版本可能是系统没有启用虚拟机平台功能或者正在跑WSL1。可以用以下命令查看具体版本wsl -l -v输出里的VERSION列如果是1说明子系统跑在WSL1可以手动升级到WSL2wsl --set-version Ubuntu 2如果依然失败那就回到前面说的dism命令确认Microsoft-Windows-Subsystem-Linux和VirtualMachinePlatform两个功能都处于启用状态然后重启系统。通常情况下这三个步骤能解决99%的版本过旧问题。5.2 SSH无法连接先查服务再查端口在WSL里装好SSH服务后有些人会遇到ssh localhost无法连接的问题。排查思路和正常Linux服务器一样。先确认openssh-server有没有安装sudo apt install openssh-server再查看SSH服务有没有运行sudo service ssh status如果没运行用sudo service ssh start启动。启动之后用ss命令确认22端口在监听ss -tlnp | grep :22还有一个容易忽略的点如果你在WSL里改过/etc/ssh/sshd_config比如开启了PermitRootLogin一定要重启服务才能生效。另外WSL的端口监听默认只在本机内有效如果你想从局域网其他机器访问WSL里的SSH还需要处理Windows端口转发规则。这个操作稍微复杂一点新手如果只是本机用可以先把这块放一放先把本机SSH连通再说。5.3 WSL里解压文件乱码多半是编码问题在Windows和WSL之间传输文件最常见的一个小毛病就是解压Windows压缩包后中文文件名变成乱码。原因在于Windows下的zip文件默认使用GBK编码保存文件名而Linux里的unzip工具默认按UTF-8解释。解决办法是让unzip按GBK解码不同环境下的写法略有差异。unzip -O CP936 filename.zip如果是老式的unzip版本不支持-O参数可以装个7zsudo apt install p7zip-full 7z x filename.zip对于已经解压出来乱码的目录可以用convmv批量转换编码sudo apt install convmv convmv -f GBK -t UTF-8 -r --notest .这条命令会递归地把当前目录下的文件名从GBK转成UTF-8。这类问题看起来不大但真的遇到了会非常影响效率把解决命令存下来用到时直接抄就行。5.4 WSL里装CUDA让GPU加速真正可用如果你需要在WSL里做深度学习或者GPU计算WSL2是支持NVIDIA CUDA的前提是你的Windows驱动版本够新并且安装了针对WSL的CUDA驱动。这里有个好消息Windows下只要能跑比较新的NVIDIA驱动WSL2里就可以直接识别GPU不需要在WSL里单独装显卡驱动。接下来安装CUDA Toolkit推荐用NVIDIA官方提供的针对WSL的安装包。把对应的仓库配置好之后sudo apt install cuda-toolkit装完在WSL里执行nvidia-smi如果能正常显示显卡信息说明GPU已经开放给WSL了。再写一个简单的PyTorch或者TensorFlow显存测试脚本验证CUDA是否真的可用。需要注意的一点是WSL里的CUDA环境适合跑开发调试和小规模训练大规模生产任务还是建议放到真正的Linux服务器上毕竟WSL的底层仍然是Windows共享的资源内存、显存、文件IO都会有边界。5.5 其他常见问题速查现象原因方向快速处理WSL内存占用过高默认内存上限可能过大在用户目录下配置.wslconfig限制memoryWSL没网络或DNS异常虚拟机网络组件异常执行wsl --shutdown重启再开找不到某个发行版没安装或已卸载wsl -l -v查看当前发行版在/mnt/c下操作特别卡跨文件系统IO性能问题把项目移到Linux文件系统安装后无法启动功能未启用或版本旧dism启用功能、wsl --update想彻底重装Ubuntu子系统数据需要清掉wsl --unregister Ubuntu注意会删除数据最后再补一个进阶技巧如果你同时装了多个Linux发行版可以在Windows终端里用wsl --set-default Ubuntu来指定默认进入的系统如果哪天WSL整体卡死了执行wsl --shutdown会把所有发行版全部重启。这些命令很小但关键时刻能救命。6. 最后再说点我自己的实际感受我用了WSL三年多印象最深的一次是把一个只依赖Linux命令的文件处理项目直接拿到WSL里跑没改一行代码就成功运行那一刻我觉得微软这步棋真的走对了。对于后端开发、运维、数据分析这类工作WSL不是一个玩具而是一个能直接扛活的开发环境。不过也要说实话WSL解决的是开发和命令行需求不是真正的Linux服务器。比如systemd的支持虽然已经有了但在WSL里始终不会像裸机Linux那样原汁原味再比如涉及网络桥接、硬件直通这类需求WSL2还是不如虚拟机灵活。所以我的建议是日常开发首选WSL环境一致性要求高的生产环节还是按正经的Linux环境来。如果你刚接触LinuxWSL也是一块特别好的练手田命令随便敲系统随便折腾大不了重置重来。这套东西折腾完你再去看真正的Linux服务器会觉得格外亲切。
返回列表