我电脑启动了一个WSL,如何在powershell 进入WSL,这个问题看起来简单,但是我发现包括很多用了WSL挺久的开发者在内,都会在这里卡壳。要么是敲了wsl没反应,要么是进去了目录不对,要么是PowerShell执行策略挡路。这篇文章就把PowerShell进入WSL这件事彻底讲透,从最基础的命令到十几二十种实际场景下的进阶操作,全走一遍。
开头先说结论:在PowerShell里进入WSL,最核心的就是一个wsl命令。但是,怎么把这个命令用对、用好,才是这篇文章的重点。
1. PowerShell和WSL到底是什么关系
很多新手容易把WSL当成一个装在虚拟机里的"另一个Windows",然后试图通过远程桌面、SSH客户端之类的方式去连它。这个认知偏差会带来一系列操作上的困惑。先把这个底层关系理清楚,后面所有命令你都能自己推理出来。
1.1 两个系统之间其实隔着一个翻译官
WSL(Windows Subsystem for Linux)从技术本质上讲,是Windows内核里提供的一个Linux兼容层,加上一个轻量级虚拟机(WSL2的架构)组合成的运行环境。它不像传统虚拟机那样有一个独立的IP,等待你去SSH连接,而是直接挂载在Windows系统内,属于"本机内的另一个用户态环境"。
这个"翻译官"就是wsl.exe这个程序。你从任何终端里输入wsl命令时,实际上是在调用这个翻译官,它会帮你把命令转发给正在运行的某个Linux发行版实例。这就是为什么你不需要记IP地址、不需要配端口、不需要输密码,直接就能进。
注意:WSL1和WSL2的架构差异这里不提太多,但从PowerShell进入的机制是一样的,都通过
wsl.exe这个入口。
1.2 wsl.exe其实是一个命令集合
在PowerShell里,wsl这个命令不仅仅用来"进入"WSL,它还是一个完整的管理工具集合。就像git本身有很多子命令一样,wsl也有很多子命令,比如:
wsl --list/wsl -l:查看系统中已安装的所有Linux发行版wsl --status:查看WSL整体状态wsl --shutdown:关闭所有正在运行的WSL虚拟机wsl --set-version:切换发行版的WSL1/2版本wsl --update:更新WSL内核wsl --install:安装或启用WSL功能wsl --export/wsl --import:导出或导入发行版
当我第一次意识到wsl不是一个"进系统的按钮",而是一个"管理工具集"时,整个思路就打开了。你要进入,就用最基础的那个用法;你要管理,就要配合子命令。
1.3 先确认环境没问题
按照上文理解,进入WSL之前请先确认你的环境状态。很多"进不去"的问题就出在这里。步骤如下:
- 确认Windows版本支持WSL2(Windows 10版本2004及以上,或Windows 11)
- 确认WSL功能已启用,终端内运行:
wsl --status - 确认至少有一个发行版已安装:
wsl -l -v
如果执行wsl --status后提示"适用于Linux的Windows子系统"未安装,或者wsl -l -v没有显示任何发行版列表,那么问题不是"怎么进",而是"怎么装",先解决安装问题再回来。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 最实用的进入方式与命令选择
环境确认没问题后,现在讨论"如何进入"。这里不只是一个wsl回车那么简单,实际上涉及默认发行版、指定发行版、指定用户、指定目录等好几个维度的组合。把这套参数掌握了,你才能在任何场景下都用最顺手的方式进入。
2.1 直接用wsl命令进入默认发行版
这是最简单的方式。在PowerShell窗口内输入:
powershell复制wsl
回车后,你会看到提示符变成类似这样:
bash复制username@hostname:/mnt/c/Users/YourName$
说明你已经进入了WSL,默认的shell(通常是bash或zsh)已经启动。此时pwd的结果就是Windows当前目录对应的Linux挂载路径,不是固定不变的,它会跟着你在PowerShell里的位置走。
这个设计初看有点奇怪,仔细想想很合理:你在PowerShell里cd到某个目录,再输入wsl,进去后直接就落在对应目录。这样你就不需要进WSL后再重新cd一遍。这是微软刻意做的"目录联动"特性。
如果你就想让wsl进去后固定落在Linux家目录,可以使用wsl ~:
powershell复制wsl ~
这在项目管理时特别好用,因为你的代码可能放在Linux侧的~/projects里。
2.2 处理多发行版的场景
如果你安装了两个或更多的发行版(比如Ubuntu和Debian并存),那么单纯输入wsl只会进入默认发行版。默认发行版可能不是你想进的,此时可以临时指定:
powershell复制wsl -d Ubuntu-22.04
-d参数是--distribution的缩写,后面跟发行版的名字,可以通过wsl -l -v查到准确的名称。需要考虑的一点是,如果只装有单个发行版,wsl和wsl -d效果一样,所以我平时写脚本时为了明确上下文,仍然会写-d参数。
想把默认发行版改成另一个,用这个命令:
powershell复制wsl --set-default Debian
# 或者简化版
wsl -s Debian
设置好后,再敲wsl就会优先进入Debian。
2.3 按用户进入:root还是普通用户
WSL在安装发行版时通常会强制你创建一个UNIX用户名和密码(最新版本的Ubuntu安装流程)。默认情况下,你进入WSL就是这个普通用户,自带sudo权限。
某些场景(比如做系统级配置、修复包管理器)需要以root身份进入,可以直接用:
powershell复制wsl -u root
-u就是--user参数的缩写。我实测过,大部分时候不需要用root进,因为普通用户配好sudo后,日常操作完全足够。但是遇到修改/etc/下的文件或安装某些对权限敏感的开发工具时,wsl -u root一次性地解决问题,比进去之后反复敲sudo要简单。
2.4 进入WSL后立即执行单条命令
不是每次都要进入交互式shell,有时候只想快速跑一个Linux命令,比如查磁盘、看内存、拉一个Git仓库。这时不需要先进入再执行,可以直接这样:
powershell复制wsl ls -la /home
wsl sudo apt update
wsl git status
这个用法对写PowerShell脚本特别有价值。你可以在.ps1脚本里嵌入`ws
