☰
WSL2 从安装到排错:Windows 上的 Linux 开发环境实战指南
2026/9/29 1:58:00 网站建设 项目流程

用惯了 Linux 的人被迫回到 Windows 桌面干活,最难受的不是没有终端,而是两套工具链互相不认账:脚本是 bash 写的,路径全带反斜杠;依赖靠 apt 装的,Windows 上找不到对应的包;想把项目直接放 C 盘编译,小文件一多就慢得让人怀疑人生。WSL(适用于 Linux 的 Windows 子系统)就是冲着这个痛点来的——它让你在 Windows 里直接跑一个几乎是原生的 Ubuntu,同时还能用 VS Code、浏览器、数据库客户端这些 Windows 侧的工具。这篇内容我把 WSL 从安装、首次配置、日常使用到踩坑排查整条链路捋一遍,重点是那些官方文档里不会写、但真正动手时一定会撞上的细节。不管你是第一次听说这套机制,还是已经装了两三个发行版却一直当"高级终端"在用,下面这些内容应该都能直接抄作业。

1. WSL 不是"Windows 里开个虚拟机",先把它的定位搞清楚

很多人第一次接触这套东西,潜意识里把它当成"轻量版虚拟机",于是按虚拟机的思路去理解它,后面就会处处别扭。WSL 准确说是一个由 Windows 内核提供支撑的兼容层加轻量虚拟化组合,它没有完整的硬件模拟,也没有独立的图形界面,进程调度、内存管理、文件系统都做了针对性适配。它存在的意义只有一个:让 Linux 命令行的生态和 Windows 的桌面生态共存在一台机器上,而不是二选一。

这带来的最大好处是两个系统之间可以互相调用。你可以在 WSL 里敲explorer.exe .直接弹出 Windows 资源管理器定位到当前目录,也可以在 PowerShell 里敲wsl ls -la执行 Linux 命令;剪贴板是通的,网络端口默认也是本地互通的。这种"混血"体验,是虚拟机和双系统都给不了的。

1.1 WSL1 和 WSL2 的差别不只是一个数字

打开命令行敲wsl -l -v,你会看到每个发行版后面跟着一个 VERSION 列,可能是 1 也可能是 2。这两个版本的实现路线完全不同:

对比项WSL1WSL2
实现方式系统调用实时翻译成 Windows 调用真正的轻量虚拟机上跑真实内核
系统调用兼容性部分支持,冷门调用会失败接近完整,绝大多数程序能跑
访问 Windows 文件(/mnt/c)很快相对慢
访问 Linux 自身文件较慢很快
内存占用低会占用一部分,可限制
能否跑容器、GPU 计算基本不行支持

我自己的结论很简单:除非你机器特别老或者有明确的 /mnt/c 高频读写需求,一律用 WSL2。WSL1 现在已经属于维护状态,新装的发行版默认就是 2。切换命令也不复杂:wsl --set-version Ubuntu-22.04 2,不过切换过程会做一次文件系统转换,几百 GB 的发行版可能要等挺久,动手前先备份。

1.2 先对号入座,再决定要不要装

不是所有人都适合在 Windows 上养一个 Linux 子系统,我见过太多人装完之后就再也没打开过。按经验,下面这几类场景收益最大:

  • 需要 Linux 工具链的开发:前端构建、Python 数据处理、Go/Rust 编译、固件分析、爬虫脚本,这些在 Linux 下装依赖就是一条 apt 命令的事。
  • 需要在本地跑服务端软件:Elasticsearch、Redis、消息队列、容器编排,Windows 端口版往往阉割或需要额外配置。
  • 要写 shell 脚本或做运维演练:bash、systemd、cron、权限模型,这些东西在 Windows 上根本没法真实模拟。
  • 做算法或机器学习:CUDA 在 WSL2 里可以直通显卡,省掉一台 Linux 工作站。

反过来,如果你的核心需求是"跑一个带图形界面的 Linux 桌面",或者要用到大量只在裸机上稳定的硬件相关驱动,那还是老老实实装物理机或者完整虚拟机更省心。WSL 的强项是命令行和服务,不是桌面环境。

提示:WSL 依赖 Windows 的虚拟化能力。装之前先在任务管理器"性能"页看一眼"虚拟化"是不是"已启用",如果显示已禁用,需要进 BIOS 打开 Intel VT-x 或 AMD-V,否则后面启用功能会一路报错。

2. 安装这条链路:一行命令能成最好,卡住了也有别的走法

现在装 WSL 比几年前方便太多了,官方把功能启用、内核下载、发行版拉取三件事打包成了一条命令。但"一条命令"不代表"一定顺利",下载卡住、功能没启用、老系统不支持,这几种情况我全都遇到过,下面按顺利到不顺利的顺序讲。

2.1wsl --install背后到底做了哪几件事

在管理员权限的 PowerShell 或 Windows Terminal 里执行:

wsl --install

这一条命令实际做了四步:启用"适用于 Linux 的 Windows 子系统"和"虚拟机平台"两个 Windows 功能、下载并安装 WSL2 的内核更新、把 WSL 的默认版本设为 2、从商店拉取一个默认发行版(通常是 Ubuntu)。执行完会提示你重启,重启后自动打开一个终端让你设置 Linux 用户名和密码。

如果想指定发行版,先看有哪些可选:

wsl --list --online wsl --install -d Ubuntu-22.04

--list --online这一步很值得养成习惯,因为发行版的可用列表会随版本更新变化,直接照着旧教程敲名字可能会提示找不到。

2.2 下载卡住、进度条不动时我会怎么处理

wsl --install卡在"正在下载"是很常见的,本质上是从境外服务器拉取发行版镜像,网络稍有波动就会一直转圈。我的处理顺序是这样的:

  1. 先判断卡在哪一步。如果卡在功能启用,那是系统层面的问题,和网络无关;如果卡在下载发行版,才是网络问题。
  2. 换成从网页下载。新版本支持wsl --update --web-download,走的是普通 HTTP 下载通道,某些网络环境下成功率更高。
  3. 手动装发行版包。直接从官方渠道下载发行版的安装包(.AppxBundle或.appx),用 PowerShell 安装:
Add-AppxPackage .\Ubuntu_2204.appx
  1. 用 rootfs 导入。这是最"硬核"但最稳的兜底方案,适合完全离线或者企业内网环境,下一节展开。

还有一种情况是命令执行到一半报"无法解析服务器的名称",这通常是 DNS 解析的问题,可以先在 Windows 侧确认网络正常,再重试。不要盲目地反复敲同一条命令,先看报错文本,报错信息其实写得很明确。

2.3 老系统与离线环境的兜底装法

如果系统版本偏低,wsl --install会直接告诉你版本不支持。这时候只能手动开功能:

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

两条都执行完,必须重启,不重启的话后续所有操作都会提示功能未启用。重启后再单独安装内核更新包,然后:

wsl --set-default-version 2

企业内网或者完全断网的环境,用导入的方式最靠谱。先准备一个 Linux 发行版的 rootfs 压缩包(tar或tar.gz格式),然后:

mkdir D:\wsl\ubuntu wsl --import Ubuntu-22.04 D:\wsl\ubuntu D:\images\ubuntu-rootfs.tar --version 2

--import的好处是安装位置完全由你决定,默认情况下发行版会塞在C:\Users\你的用户名\AppData\Local\Packages\...下面,C 盘紧张的人可以直接导到别的盘。需要注意的是,用--import创建的发行版默认以 root 登录,得手动建普通用户:

adduser demo usermod -aG sudo demo echo -e "[user]\ndefault=demo" | sudo tee -a /etc/wsl.conf

改完wsl.conf要执行wsl --terminate Ubuntu-22.04让配置生效。

2.4 怎么确认"确实装成功了"

很多人的疑问是"我到底装没装上"。三条命令就够:

wsl --status wsl --list --verbose

--status会显示默认发行版、默认版本、内核版本;--list --verbose会列出所有已安装发行版及其状态(Running / Stopped)和 WSL 版本号。进到系统里再确认一下:

uname -a lsb_release -a

能正常输出内核版本和发行版信息,就说明整套链路是通的。如果wsl -l -v里有一条记录但状态是 Installing 卡住不动,那多半是发行版包没装完整,可以参考上一节用--import重来一遍。

3. 装完不等于能用:第一次进系统必须做的几件事

刚装好的 WSL 只能算"能跑命令",离"顺手干活"还差几步。这一节讲的都是首次配置的固定动作,做一次能省掉后面无数次返工。

3.1 首次启动的账号密码与 root 切换

第一次启动会让你输入 UNIX 用户名和密码。密码输入时屏幕上不会有任何字符回显,这是正常现象,别以为键盘坏了。这个账号会自动加入 sudo 组,需要提权时前面加sudo即可。

想切成 root 有两种方式:

sudo -i # 以 root 身份开一个登录 shell sudo su - # 效果类似

如果忘了密码,不用重装,在 PowerShell 里把默认用户切成 root,进去改密码再改回来:

ubuntu2204 config --default-user root

然后进入系统执行passwd 你的用户名,最后再切回去。这个技巧在真实环境里救过我好几次。

3.2 换源与更新,以及那些看似莫名其妙的报错

默认的软件源在国外,apt update慢是常态。换国内源是标准操作,以 Ubuntu 22.04 为例:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|http://archive.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list sudo sed -i 's|http://security.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list sudo apt update && sudo apt upgrade -y

换源之后常见两类报错,我都踩过:

  • Release file is not valid yet:这几乎可以肯定是时间不对。WSL2 在宿主机休眠唤醒后,Linux 侧的时钟容易漂移,机器时间比实际时间慢了几分钟,apt 校验签名就会失败。修法见 5.3 节。
  • Could not resolve ...:DNS 解析异常。WSL2 默认从 Windows 侧继承 DNS 配置,写进/etc/resolv.conf。这个文件是自动生成的,直接改会在重启后被覆盖,要改就得在wsl.conf里关掉自动生成并手动指定。

3.3wsl.conf和.wslconfig千万别搞混

这两个文件名字特别像,但作用域完全不同,搞混了会浪费很多时间:

文件位置作用范围管什么
wsl.conf发行版内/etc/wsl.conf单个发行版是否启用 systemd、挂载参数、默认用户
.wslconfigWindows 侧C:\Users\你的用户名\.wslconfig所有发行版内存、CPU、交换分区、网络模式

发行版内的配置长这样:

[boot] systemd=true [automount] enabled = true root = /mnt/ options = "metadata,umask=22,fmask=11" [network] generateResolvConf = true [interop] enabled = true appendWindowsPath = true

systemd=true是个分水岭——开了它,systemctl才能正常用,装 Docker、Redis 这类带服务单元的程序会舒服很多。但这个选项要求 WSL 版本足够新,老版本打开会导致发行版启动失败。

Windows 侧的全局配置长这样:

[wsl2] memory=8GB processors=6 swap=4GB autoMemoryReclaim=gradual networkingMode=mirrored

两个文件改完都需要wsl --shutdown彻底重启才生效,注意这个命令会关掉所有发行版,别在跑着任务的时候敲。

3.4/mnt/c还是\\wsl$:文件到底该放哪

这是影响体验最大的一个决定。默认情况下,Windows 的每个盘符都挂载在/mnt/下,你可以在 Linux 里直接cd /mnt/c/Users访问 Windows 文件。反过来,在 Windows 资源管理器地址栏输入\\wsl$也能看到 Linux 的文件系统。

听起来很方便,但跨文件系统的读写性能差距非常明显。WSL2 访问/mnt/c要经过一层 9P 协议转换,处理大量小文件时(比如node_modules、Git 仓库)速度可能比原生慢好几倍。所以我的原则是:

  • 代码和项目放 Linux 侧,也就是~/projects这类路径下,编译和依赖安装速度快得多。
  • 需要跟 Windows 工具共享的文件放/mnt/c,比如临时导出的报表、要拖进 GUI 软件的图片。
  • 绝对不要把 Git 仓库放在/mnt/c下再用 WSL 里的 Git 操作,除了慢,还会遇到文件权限、大小写敏感、换行符三重问题。

顺手提一个高频操作:在 WSL 里想用资源管理器打开某个目录,敲explorer.exe .就行;想用 Windows 默认程序打开某个文件,用cmd.exe /c start 文件名。

4. 把开发环境真正搬进去:编辑器、容器、GPU 与服务端软件

配置做完,接下来就是让它真正承接你的日常工作。这一节按"编辑器 → 容器 → GPU → 服务端软件"的顺序讲,基本覆盖了绝大多数人的实际需求。

4.1 VS Code 加 WSL 的完整链路

这是目前体验最成熟的组合。只要在 Windows 侧的 VS Code 里装上 WSL 扩展,然后在 WSL 终端的目标目录下敲:

code .

VS Code 就会自动连上这个发行版,左下角显示WSL: Ubuntu-22.04。这时候编辑器里打开的所有文件、集成的终端、调试器、Python 解释器、Node 运行时,全部跑在 Linux 侧,Windows 只是负责显示界面。这意味着你不需要在 Windows 上再装一遍 Python 或 Node,也不会遇到路径分隔符和 shell 脚本的兼容问题。

几个实测下来的经验:Windows 侧只需要装 WSL 扩展,其他语言扩展(Python、Go、Rust)要在 WSL 环境里单独装一遍,因为扩展分两端运行;终端默认配置可以在settings.json里指定:

{ "terminal.integrated.defaultProfile.linux": "bash" }

另外,如果你在 WSL 里用 Git,记得先关掉文件模式检查,避免每次提交都看到一堆莫名其妙的权限变更:

git config --global core.fileMode false git config --global core.autocrlf input

core.autocrlf input的意思是提交时把 CRLF 转成 LF,检出时不转换。这个配置在跨系统协作的仓库里几乎是必需品,不然 diff 里全是换行符差异。

4.2 容器环境:桌面版和发行版内直装怎么选

在 WSL 里跑容器有两条路线,各有取舍。

第一条是 Docker Desktop + WSL2 后端。安装后在设置里打开Resources → WSL Integration,勾选你需要的发行版,之后在 WSL 里敲docker ps就能直接用。优点是省心,镜像、网络、卷管理都有图形界面,跨发行版共享一个 Docker 引擎。缺点是多了一层常驻程序,内存占用相对高。

第二条是在发行版内直接装 docker-ce。前提是wsl.conf里开了systemd=true,然后:

sudo apt install -y docker.io sudo systemctl enable --now docker sudo usermod -aG docker $USER

最后那条命令把你加进 docker 组,但要重新登录(或者执行newgrp docker)才生效,很多人装完发现还得加 sudo,就是漏了这一步。这种方式更轻,但需要自己管镜像仓库地址、日志轮转这些事。

注意:两条路线不要同时用。曾经有人在 WSL 里装了 docker-ce,又装了 Docker Desktop,结果两个引擎抢同一个 socket,命令行时好时坏,排查了半天才发现是自己装重了。

4.3 显卡直通与 CUDA,最容易白折腾的一步

想让 WSL2 用上 NVIDIA 显卡,有一条铁律:Windows 侧装驱动,WSL 里坚决不要装驱动。

具体流程是先在 Windows 上安装支持 WSL 的显卡驱动,然后用管理员权限执行wsl --update把 WSL 内核升到较新版本(GPU 直通依赖较新的内核),重启后在 WSL 里执行:

nvidia-smi

能正常打印显卡型号、驱动版本、显存占用,说明直通成功。这时候再装 CUDA Toolkit,只装工具链,不要装驱动包:

sudo apt update sudo apt install -y cuda-toolkit-12-4

如果nvidia-smi报"命令未找到"或者提示找不到设备,按这个顺序排查:确认 Windows 侧驱动版本是否支持 WSL(太老的驱动不行)、确认 WSL 内核版本足够新、确认发行版是 WSL2 而不是 WSL1。我见过最常见的失败原因就是发行版还挂在 WSL1 上,nvidia-smi永远跑不出来。

另外 CUDA 相关的大文件建议不要放在/mnt/c,数据加载速度会明显拖后腿。

4.4 Elasticsearch、Redis 这类服务在 WSL 里跑要注意什么

Elasticsearch在 WSL 里最常见的启动失败是内存映射区不足,报错信息里通常带max virtual memory areas vm.max_map_count [65530] is too low。修法是:

sudo sysctl -w vm.max_map_count=262144

但sysctl -w是临时的,重启就没了。要持久化就写进配置文件:

echo "vm.max_map_count=262144" | sudo tee /etc/sysctl.d/99-elasticsearch.conf

再配合.wslconfig里把内存调到 8GB 以上,ES 就能稳定跑起来。别忘了 ES 本身还要求堆内存设置合理,默认 1GB 堆在小机器上容易 OOM。

Redis相对简单:

sudo apt install -y redis-server sudo systemctl enable --now redis-server

WSL2 有个很实用的特性:在 Linux 里监听的端口,Windows 侧通过127.0.0.1就能直接访问。所以在 WSL 里跑着 Redis 或 MySQL,Windows 上的数据库客户端、Redis 客户端直接连127.0.0.1:6379就行,不需要查 IP。不过要注意,如果服务只监听127.0.0.1,Windows 侧是连不上的,得让它监听0.0.0.0——这属于放开监听范围,只在你确认是本地单机环境时才这么做。

5. 那些报错信息背后的真相:逐条拆解

前面几节都是顺利路径,真正花时间的是排错。这一节我把遇到过的高频问题按"现象 → 原因 → 处理"整理出来,尽量把排查思路也写清楚,这样遇到变种问题你能自己推。

5.1 "WSL 版本太旧"和"需要适用于 Linux 的 Windows 子系统可选组件"

这两条报错是新手最常撞的。

报错一:Your version of Windows Subsystem for Linux is too old. Run the command 'wsl --update'

这个提示本身就把解法写在脸上了,直接执行:

wsl --update

如果--update也卡住或者失败,加参数换下载通道:

wsl --update --web-download

报错二:此应用程序需要适用于 Linux 的 Windows 子系统可选组件。通过运行 wsl.exe --install 进行安装

这个通常出现在你用--import或者手动安装发行版包的时候,说明系统层面的两个功能没启用。按 2.3 节的两条dism命令启用,重启,然后wsl --set-default-version 2。不要跳过重启,这是最常见的自作聪明。

还有一种变体是提示虚拟化未启用。那就回到 BIOS 检查 VT-x / AMD-V,Windows 层面可以在"启用或关闭 Windows 功能"里确认"虚拟机平台"是否勾上。

5.2 内存被吃满、C 盘被 vhdx 悄悄吃掉

WSL2 是一个虚拟机,它会按需向 Windows 借内存。默认情况下它最多可以用掉宿主机一半的内存,而且借了不一定马上还。如果你有 16GB 内存,跑着几个服务,任务管理器里可能看到 Vmmem 占了好几个 G。

解法是在.wslconfig里设上限:

[wsl2] memory=8GB processors=6 swap=4GB autoMemoryReclaim=gradual

autoMemoryReclaim是较新版本提供的自动回收机制,设成gradual后空闲内存会慢慢还给系统,实测下来 Vmmem 不再一路只涨不跌。改完执行wsl --shutdown重启生效。

另一个坑是磁盘空间不会自动缩小。Linux 侧你删掉了几十 GB 文件,Windows 上的ext4.vhdx体积依然纹丝不动。这是因为虚拟磁盘只扩不缩。要真正回收,得先关掉 WSL,再用 diskpart 压缩:

wsl --shutdown diskpart

进入 diskpart 交互界面后:

select vdisk file="C:\Users\你的用户名\AppData\Local\Packages\...\LocalState\ext4.vhdx" attach vdisk readonly compact vdisk detach vdisk exit

路径可以在资源管理器里按发行版名字搜索ext4.vhdx找到。这个过程对大磁盘来说比较慢,我一般放在不用电脑的时候跑。Windows 专业版还可以用 Hyper-V 的Optimize-VHD命令,效果一样。

5.3 时间不同步、权限全是 777、中文解压乱码

时间漂移。宿主机睡眠唤醒后,WSL 里的时间经常对不上,表现是 apt 报签名验证失败、日志时间戳诡异。修法:

sudo hwclock -s

如果这条命令报错,可以试试重启时间同步服务:

sudo systemctl restart systemd-timesyncd

再不行就装个 ntp 工具手动同步一次。顺手把时区设对:

sudo timedatectl set-timezone Asia/Shanghai

权限混乱。在/mnt/c下执行ls -l,你会发现所有文件都是 777,chmod也改不动。原因是 Windows 的 NTFS 权限模型和 Linux 的 POSIX 权限模型根本对不上,挂载时只能给一个统一值。要让它至少记住你 chmod 的结果,需要在wsl.conf的 automount 段加上metadata选项(见 3.3 节的配置)。但要提醒一句,这只能在 Windows 侧记录一个扩展属性,行为跟真正的 Linux 权限仍有差别,想靠这个把项目权限调对是不现实的,正确的做法还是把项目放在 Linux 侧。

中文文件名乱码。在 Windows 上用压缩软件打的 ZIP,文件名多半是 GBK 编码,解压到 Linux 下就变成一串问号或者乱码。几种处理方式:

unzip -O CP936 中文包.zip -d out/

如果unzip版本不支持-O,可以换用 libarchive 系的工具,它对编码处理更宽容:

bsdtar -xf 中文包.zip -C out/

实在不行,解压出来之后用convmv批量改名(记得先加--notest之外的参数试跑一遍确认,别直接改):

convmv -f gbk -t utf8 -r --notest out/

tar包相对省事,因为是字节流,编码问题比 ZIP 少得多。所以我给别人传中文文件时,一般优先打 tar.gz。

5.4 导出、迁移与备份的完整流程

换电脑、扩容、重装系统之前,一定要会把发行版导出。命令很简单:

wsl --shutdown wsl --export Ubuntu-22.04 D:\backup\ubuntu-2204.tar

导出的 tar 包含整个发行版的完整文件系统,缺点是体积大且不压缩。想小一点可以导到标准输出再管道给压缩工具,但操作起来麻烦,我通常直接用一个够大的盘。

恢复的时候:

wsl --import Ubuntu-22.04-Restored D:\wsl\restored D:\backup\ubuntu-2204.tar --version 2

这里有个细节:导入的发行版会以 root 为默认用户,恢复完记得按 2.3 节的方式改wsl.conf里的 default user,否则你会发现原来的 sudo 配置、环境变量、conda 环境全都"不见了"——其实没丢,只是你用 root 登录了。

迁移到别的盘也可以用同样思路:导出 → 注销旧发行版(wsl --unregister Ubuntu-22.04,这条命令会删除所有数据,务必确认备份成功后再执行)→ 在目标盘导入。

6. 用顺手的日常:命令速查与两个系统之间的协作

配置和排错都搞定之后,剩下的是把它真正变成主力环境。这一节偏日常向,都是高频使用的东西。

6.1 在 PowerShell 侧管理 WSL 的那几条命令

不用进 Linux 就能完成大部分管理动作,这张表我建议存下来:

命令作用
wsl -l -v列出所有发行版及运行状态
wsl -l --online查看可安装的发行版列表
wsl -d Ubuntu-22.04直接进入指定发行版
wsl -d Ubuntu-22.04 -u root以 root 身份进入指定发行版
wsl --set-default Ubuntu-22.04设置默认发行版
wsl --set-version Ubuntu-22.04 2切换 WSL 版本
wsl --terminate Ubuntu-22.04停止单个发行版
wsl --shutdown停止所有发行版和虚拟机
wsl --update更新 WSL 内核
wsl --mount挂载物理磁盘或分区到 WSL
wsl --unregister Ubuntu-22.04注销发行版(删数据,慎用)

还有一个很实用的技巧:在 WSL 里执行 Windows 程序时,直接敲程序名加.exe就行,比如notepad.exe 文件.txt、clip.exe(把输出拷进 Windows 剪贴板)。管道配合起来特别顺手,像cat 日志.txt | clip.exe就能直接把内容贴进 Windows 的聊天窗口。

如果发现 WSL 里的环境变量里混进了一堆 Windows 的 PATH 项,导致命令补全变慢或者出现同名命令冲突,可以在wsl.conf里关掉:

[interop] appendWindowsPath = false

代价是不能再直接调用.exe,需要写完整路径。这个取舍看个人习惯。

6.2 高频 Linux 命令与排查套路

语言层面 Linux 命令其实不多,关键是把它们串起来解决问题。我把日常使用频率最高的几组按场景列一下。

找文件和内容:

find . -name "*.log" -mtime -1 # 找最近一天修改过的日志 grep -rn "关键字" ./src --include="*.py" # 递归搜索并显示行号

看系统状态:

df -h # 磁盘使用率 du -sh * | sort -rh | head -20 # 当前目录下最占空间的 20 项 free -h # 内存 ss -lntp # 查监听端口和对应进程 ps aux --sort=-%mem | head # 按内存占用排序的进程

du -sh * | sort -rh | head这条组合命令在排查"磁盘满了但不知道谁占的"时特别好用,比一个个目录点开看快得多。

包管理和进程管理:

sudo apt update && sudo apt upgrade -y sudo systemctl status 服务名 sudo journalctl -u 服务名 -n 100 --no-pager

journalctl的-u加服务名是看某个服务日志的标准姿势,比翻/var/log目录高效。不过它依赖 systemd,如果wsl.conf里没开 systemd,这些命令都用不了。

面试常问的几个点,顺便说下我的理解:软链接和硬链接的区别在于硬链接共享 inode、不能跨文件系统,软链接只是一个存路径的文件;chmod的三位数字分别对应属主、属组、其他人,755 表示属主可读写执行、其他只读和执行;umask决定新建文件的默认权限,是"去掉"哪些位而不是"给"哪些位,很多人第一次答错就是因为思路反了。

6.3 Git、固件分析工具与数据库客户端怎么配合

Git这块最容易出问题的是行尾和权限,前面提过core.fileMode false和core.autocrlf input。还有一条经验:把 SSH 密钥放在 Linux 侧而不是 Windows 侧,因为 Git 是在 Linux 里跑的,用/mnt/c下的密钥文件权限检查经常不通过。生成之后记得设权限:

chmod 600 ~/.ssh/id_ed25519

如果实在想让两个系统共用一套密钥,Windows 侧的 OpenSSH 密钥目录可以被 WSL 访问,但要在.ssh/config里显式指定路径,权限同样要处理。

固件分析类工具,比如 binwalk,在 WSL 里跑是没问题的:sudo apt install binwalk装好之后,binwalk -e firmware.bin就能自动识别并提取文件系统。需要注意两点:一是这类工具依赖一大堆解压器,遇到非标准的 SquashFS 可能需要额外编译对应的解包程序;二是提取出来的镜像体积可能很大,务必放在 Linux 文件系统里操作,别在/mnt/c下解,速度差距很明显。

数据库客户端这边基本是零配置:WSL 里跑着 MySQL、PostgreSQL、Redis,Windows 侧的图形客户端连127.0.0.1加对应端口即可,不需要知道 WSL 的虚拟 IP。这个本地端口互通是 WSL2 默认就带的能力。如果换成networkingMode=mirrored模式,网络行为会更接近宿主机,适合处理一些奇怪的监听场景。

6.4 几条实测下来的性能与使用习惯

最后集中说说我用了几年攒下来的习惯,都是踩坑换来的:

  • 项目一律放 Linux 侧。~/code是我的固定目录。同样的前端项目,在/mnt/c下npm install要几分钟,在 Linux 侧可能几十秒。这不是玄学,是跨文件系统协议的固定开销。
  • 内存上限一定要设。不设的话 WSL 会借走一半内存,开几个浏览器标签就开始转圈。8GB 上限对我这种 16GB 的机器刚好。
  • 定期wsl --shutdown清理。它相当于彻底关机再开机,能解决大量"莫名其妙就不对劲"的问题,包括端口被占、服务假死、时钟漂移。我基本是每周或者遇到灵异现象时敲一次。
  • 终端用 Windows Terminal,为每个发行版配一个 profile,标签页、快捷键、字体、配色统一管理,比原生控制台体验好太多。
  • 不要在 WSL 里跑重度 GUI 程序。虽然可以通过图形转发跑起来,但那种体验和原生差得远,真要图形界面就用虚拟机。
  • 定期导出备份。发行版是可以随时删掉重来的,但里面的配置、密钥、环境是攒出来的。一个月导一次到别的盘,成本很低,出事的时候能救命。

有个思维转变挺重要:把 WSL 当一台"随手可删重装的工作机"来对待,而不是一个要用十年的系统。所有的个人配置、环境搭建脚本都写成可重复执行的 shell 脚本或者 dotfiles,放在 Git 仓库里。这样机器崩了、换电脑了、想试试新发行版了,都是十几分钟的事。我自己就维护着一份安装脚本,换机器时git clone下来跑一遍,Python、Node、Docker、常用命令行工具全回来了。这个习惯一旦养成,折腾环境的心理负担会小很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询