跳转至

WSL开发人员使用指南

https://gemini.google.com/app/8f5e764cfdaf4183

User prompt: 我是一个开发人员, 给你开面讲一下WSL怎么使用

Response: 你好!作为一名开发人员,在 Windows 环境下使用 WSL(Windows Subsystem for Linux)可以说是打通了 Windows 与 Linux 开发生态的任督二脉。

下面为你系统梳理一下 WSL 的核心用法、开发最佳实践以及高效配置指南,帮助你快速上手并榨干它的性能。

1. 快速安装与基础管理

如果你是全新配置,只需要一条命令即可搞定:

  • 安装 WSL(默认安装 Ubuntu): 在管理员权限的 PowerShell 或 CMD 中运行:
    wsl --install

安装完成后重启电脑。
* 常用管理命令:
* wsl --list --online:查看可安装的 Linux 发行版列表。
* wsl --list --verbose(或 wsl -l -v):查看已安装的子系统及运行状态(确认是否在使用 WSL 2)。
* wsl -d \<发行版名称>:指定进入某个子系统。
* wsl --shutdown:关闭所有正在运行的 WSL 实例(修改底层配置后需要重启 WSL)。

2. 核心开发工作流与最佳实践

作为开发人员,用好 WSL 的关键在于文件隔离与工具链打通。

① 文件系统的选择(极其重要!)

  • 黄金法则:项目的代码和文件务必存放在 WSL 自身的 Linux 文件系统内(例如 \~/projects/),绝对不要放在 Windows 挂载盘(如 /mnt/c/)下进行频繁读写的开发。
  • 原因:跨文件系统(DrFs/9P 协议)的 IO 性能在处理大量小文件(如 Node.js 的 node_modules 或 Python 的虚拟环境)时会非常慢。
  • 如何访问 Linux 文件:
  • 在 Linux 终端输入 explorer.exe .,可以直接在 Windows 资源管理器中打开当前目录。
  • 在 Windows 资源管理器地址栏输入 \\wsl.localhost\,可以访问各个发行版的完整根目录。

② IDE 与编辑器集成(以 VS Code 为例)

WSL 完美支持主流 IDE 的“远程开发”模式:

  1. 在 Windows 端安装 VS Code。
  2. 安装插件:Remote - WSL。
  3. 在 WSL 终端中进入项目目录,输入 code .。VS Code 会自动在 Linux 端启动一个 Server,让你获得原生的 Linux 开发体验,同时享受 Windows 端的流畅 UI 和丰富插件。

③ 终端与命令行

  • 强烈建议搭配 Windows Terminal(微软官方现代化终端),支持多标签页、分屏、配色方案自定义以及对 WSL 的完美支持。
  • 现代 WSL 默认已经支持 systemd,你可以像在实体 Linux 服务器上一样使用 systemctl 来管理服务(如 Nginx、PostgreSQL 等)。

3. 容器与高级服务集成

① Docker Desktop 集成

如果你在 Windows 上使用 Docker:

  1. 安装 Docker Desktop for Windows。
  2. 在设置中开启 "Use the WSL 2 based engine",并勾选你需要集成的 Linux 发行版。
  3. 这样你就可以直接在 WSL 终端里流畅运行 docker 命令,性能远超旧版的 Hyper-V 虚拟机。

② 代理与网络互通

  • 本地服务访问:WSL 2 拥有独立的虚拟网卡。如果你在 WSL 里启动了一个 Web 服务(如 localhost:3000),在 Windows 浏览器中通常可以直接通过 localhost:3000 访问(Windows 11 的 WSL 默认支持镜像网络模式,网络体验极佳)。
  • 梯子/代理同步:如果 Windows 宿主机开启了代理软件,有时 WSL 需要配置 http_proxy/https_proxy 环境变量才能正常拉取外网代码或依赖。

4. 性能调优与资源管理

WSL 默认会占用一定比例的 Windows 内存,你可以通过在 Windows 用户目录下(例如 C:\Users\你的用户名\)新建一个名为 .wslconfig 的配置文件来限制其资源消耗:

[wsl2]
# 限制 WSL 最大占用内存为 8GB
memory=8GB
# 限制处理器核心数为 4 核
processors=4
# 开启嵌套虚拟化或局域网镜像模式(视需求而定)
networkingMode=mirrored

(修改后需在 PowerShell 执行 wsl --shutdown 生效)

目前你在开发中主要使用哪种技术栈(如前端 Node.js、后端 Java/Go/Python、还是数据科学),或者在配置 WSL 时遇到了什么具体的问题吗?


User prompt: wsl中, 怎么使用gui chrome

Response: 在 WSL 中运行 GUI 版本的 Chrome(或者其他 Linux 图形界面应用)其实非常简单。现代的 WSL2 原生支持 GUI 应用(WSLg),你甚至不需要手动配置复杂的 X11 转发。

以下是具体的实现方法和排查指南:

方法一:直接运行(标准 WSLg 方式)

只要你的 Windows 10(更新到较新版本)或 Windows 11 安装了较新版本的 WSL,WSLg 就已经内置了。

  1. 安装 Chrome(在 WSL 的 Ubuntu 中): 打开你的 WSL 终端,直接通过官方 .deb 包安装 Chrome:
    # 下载最新的 Google Chrome 稳定版安装包
    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

# 安装依赖及 Chrome
sudo apt update
sudo apt install -f ./google-chrome-stable_current_amd64.deb

  1. 启动 Chrome: 安装完成后,直接在终端输入:
    google-chrome

注:你也可以加 & 后台运行,或者直接输入 google-chrome [https://www.google.com](https://www.google.com) 打开特定网址。
正常情况下,Windows 桌面会弹出一个原生的 Chrome 窗口,它的图标也会带有 WSL 的标志,体验非常流畅。

方法二:通过别名(Alias)简化调用

如果你经常需要使用它,可以把启动命令写进 \~/.bashrc 或 \~/.zshrc 中:

  1. 编辑配置文件:
    echo "alias chrome='google-chrome > /dev/null 2>&1 &'" >> ~/.bashrc
    source ~/.bashrc

  2. 以后在终端里只需要敲 chrome 就能直接唤起浏览器了。

常见问题与排查(如果打不开)

如果你输入 google-chrome 后报错(例如提示 cannot open display),通常是以下原因:

  1. WSL 版本过低: 确保你在使用的是 WSL 2,并且 Windows 系统的图形驱动和 WSL 组件是最新的。在 Windows 的 PowerShell 中运行:
    wsl --update

更新后执行 wsl --shutdown 重启 WSL。
2. 缺少图形环境支持(针对旧系统或纯命令行环境): 如果你使用的是精简版的 WSL 或者无法享受 WSLg 的便利,则需要在 Windows 端安装一个 X Server(如 VcXsrv 或 X410),并在 WSL 中配置 DISPLAY 环境变量:
export DISPLAY=:0

(不过对于绝大多数现代 Windows 11/10 用户,直接用上面的“方法一”即可,完全不需要配置 DISPLAY)


User prompt: 打开来, 但是中文显示是乱码的

Response: 这是典型的 Linux 系统缺少中文界面字体(如思源黑体/文泉驿字体)导致的。WSL 默认安装的 Linux 系统只包含了基本的英文和少数基础字体,因此遇到中文网页或界面时会显示成方块(豆腐块 ``)或乱码。

只需在 WSL 终端中安装中文字体包,即可立刻解决这个问题:

第一步:安装中文字体包

在 WSL 终端中运行以下命令安装常用中文开源字体:

# 更新软件包列表
sudo apt update

# 安装思源黑体、思源宋体以及文泉驿字体
sudo apt install -y fonts-noto-cjk fonts-wqy-zenhei fonts-wqy-microhei

第二步:刷新字体缓存

字体安装完成后,刷新系统的字体缓存:

fc-cache -fv

第三步:重新启动 Chrome

完全关闭之前打开的 Chrome 窗口,然后在终端中重新启动:

google-chrome &

此时打开中文网站(如 [https://www.baidu.com](https://www.baidu.com) 或 [https://www.v2ex.com](https://www.v2ex.com)),中文就能正常显示了。

💡 补充提示(可选):中文语言包与区域设置

如果你希望 Chrome 的菜单、右键菜单和系统界面也显示为中文,可以再补充安装中文语言包:

# 安装中文语言包
sudo apt install -y language-pack-zh-hans

# (可选)如果想要让整个 WSL 默认环境都用中文,可以配置 locale
sudo update-locale LANG=zh_CN.UTF-8


User prompt: wsl 控制终端用什么最好

Response: 作为一名开发人员(特别是涉及 DevOps 和云原生方向),选择一个高效、顺手、低延迟的终端对日常工作体验至关重要。

目前在 Windows + WSL 生态下,公认最好用的终端主要分为两档:开箱即用的现代官方标杆和极客性能流派。

1. 🥇 综合最佳与行业标杆:Windows Terminal

这是目前绝大多数 Windows 开发者的首选,也是微软官方打造的现代化终端。

  • 为什么好用:
  • 原生完美集成:安装后会自动检测你所有的 WSL 发行版,一键开启对应的子系统标签页。
  • 功能全面:支持多标签页、垂直/水平分屏、自定义配色方案(Color Schemes)、背景图片/毛玻璃效果。
  • 高性能:基于 DirectX 的 GPU 文本渲染,渲染速度极快,完全告别传统 cmd/PowerShell 的卡顿感。
  • 配置灵活:通过一个 settings.json 文件可以管理所有快捷键、外观和环境变量。
  • 适用人群:追求稳定、开箱即用、希望与 Windows 系统深度融合的开发者。

2. ⚡ 极客与高定制流派:WezTerm (或 Alacritty)

如果你喜欢折腾配置、追求极致的性能和跨平台一致性,用 Rust 编写的现代化 GPU 终端是极佳的选择。

  • WezTerm 的亮点:
  • Lua 语言配置:支持使用 Lua 脚本进行深度定制,扩展性极强(比如自定义状态栏、快捷键、多窗口绑定等)。
  • 极佳的字体与多路复用支持:对 Nerd Fonts、Ligatures(连字)支持完美,甚至内置了类似 Tmux 的多路复用功能。
  • 跨平台:如果你在 Linux(如 Ubuntu 机器)和 Windows 之间切换,可以将配置文件无缝同步,获得完全一致的终端体验。
  • 适用人群:深度终端用户、喜欢 Vim/Neovim、追求极致键位和外观自定义的极客。

💡 核心绝配组合建议

无论你选择上面哪款终端作为宿主机(Windows 端)的皮肤,在 WSL 内部,强烈建议搭配以下工具组合,战斗力直接翻倍:

  1. Tmux(终端多路复用器): 在 WSL 里面运行 tmux。对于 DevOps 和后端开发来说,Tmux 是神级工具:
  2. 防断线:服务器长时间跑 kubectl apply、大文件传输或构建任务时,即使关闭终端或网络波动,后台任务也不会中断。
  3. 分屏与会话管理:可以在一个窗口里随时切分出十几个面板。
  4. Zsh + Oh My Zsh / Starship: 把 WSL 默认的 Bash 换成 Zsh,装一个美观且高效的 Prompt(如 Starship,用 Rust 写的极速提示符),带 Git 状态显示、路径自动补全,体验远超原生 Bash。

总结推荐

  • 求稳、省心、功能全:直接用 Windows Terminal(Windows 11 已经是默认自带的,直接按 Win+X 或在应用商店更新即可)。
  • 追求个性、Lua 配置控、多平台统一:首选 WezTerm。

User prompt: 我在windows那里直接打开ubuntu, 会出一个终端, 那是什么终端?

Response: 你在 Windows 里直接点击“Ubuntu”图标或者在开始菜单里打开它时,弹出的那个黑色/深色终端,底层其实是 WslTTY(或者早期的 ConHost 容器)。

具体来说,它的特点和背景是这样的:

1. 它的真面目是什么?

  • 它是直接连接到 WSL 的独立控制台窗口:当你安装 WSL(特别是通过微软商店安装 Ubuntu)时,除了系统自带的 cmd/PowerShell 之外,Ubuntu 官方包里会自带一个轻量级的终端前端。
  • 它不是 Windows Terminal:虽然它也能正常输入命令、支持 Linux 的基础颜色,但它是一个比较老旧、相对简陋的独立窗口。

2. 为什么不建议长期用它?

这个直接弹出的自带终端存在几个明显的痛点:

  • 不支持多标签页:你想同时看日志、编辑代码、运行服务,就必须打开好几个独立的窗口,桌面会变得很乱。
  • 分屏和个性化能力弱:窗口大小调整、字体平滑度、快捷键自定义以及配色方案都非常有限。
  • 功能单一:它本质上只是一个“能跑起来”的过渡工具。

💡 建议:切换到现代化的 Windows Terminal

既然你已经在使用 WSL 并且在折腾 GUI Chrome、终端配置了,强烈建议你把这个自带的旧终端“抛弃”,换成 Windows Terminal(微软官方现代化终端):

  1. 怎么打开:直接在 Windows 搜索栏输入 Terminal(或按下 Win + X,选择 Terminal),或者在应用商店免费下载。
  2. 如何一步到位:
  3. 打开 Windows Terminal 后,点击顶部标签页右侧的 + 号 旁的下拉箭头,你会发现 Ubuntu 已经静静地躺在菜单里了。
  4. 点击它,就会在一个拥有多标签页、GPU 加速渲染、完美支持炫酷字体的现代窗口中打开你的 WSL Ubuntu。
  5. 你甚至可以在 Windows Terminal 里同时开一个 PowerShell、一个 Ubuntu 标签页、甚至再连个远端服务器,全部集中在一个窗口里管理。

User prompt: 我不要用window外层的gui terminal, 我想直接在linux里面开一个gui 的shell, 要怎么弄?

Response: 原来是这样!你想走纯正的 Linux 路线——不依赖任何 Windows 外层的终端软件,而是直接在 Linux(WSL 内部)启动一个 Linux 原生的 GUI 终端窗口,让它作为一个独立的图形界面显示在 Windows 桌面上(这正是 WSLg 的强项,就像前面启动 Chrome 一样)。

在 Linux 生态中,有几款非常优秀的 GUI 终端模拟器可以直接在 WSL 里面跑。

第一步:挑选并安装一个 Linux 原生的 GUI 终端

你可以根据自己的喜好选择其中一个:

选项 A:GNOME Terminal(最稳妥、标准的 Ubuntu 终端)

如果你想要最传统、兼容性最好、自带多标签页和右键菜单的经典 Linux 终端:

sudo apt update
sudo apt install -y gnome-terminal

选项 B:Kitty 或 Alacritty(极客、GPU 加速、性能极致)

如果你喜欢用 Rust 编写、支持 GPU 渲染、现代且极速的终端:

# 安装 Kitty
sudo apt install -y kitty

第二步:直接在 Linux 里面唤起它

安装完成后,直接在当前的 WSL 终端里输入启动命令(记得加上 & 让它在后台运行,或者直接在前台运行):

  • 如果你装的是 GNOME Terminal:
    gnome-terminal &

  • 如果你装的是 Kitty:
    kitty &

效果:此时你会看到 Windows 桌面弹出一个纯正的 Linux 图形界面终端窗口。这个窗口的进程、环境变量、剪贴板交互以及里面的 Shell(无论是 Bash 还是 Zsh),完全由 WSL 内部的 Linux 系统接管,与外层的 Windows 终端没有任何关系。

第三步:配置快捷方式(可选)

如果你想每次输入一个简短的命令就能调出这个 Linux GUI 终端,可以把它加到 \~/.bashrc 或 \~/.zshrc 中:

# 以 gnome-terminal 为例
echo "alias gterm='gnome-terminal > /dev/null 2>&1 &'" >> ~/.bashrc
source ~/.bashrc

之后在终端里直接敲 gterm,就会瞬间弹出一个纯 Linux 的 GUI 终端窗口。


User prompt: 我通过下面的命令打开了, 但是无法输入中文 gnome-terminal &

Response: 这个问题非常经典。当我们在 WSLg 中直接运行 gnome-terminal 等原生 Linux GUI 应用时,往往会遇到无法输入中文或输入法无法唤起的情况。

这是因为 Linux 的输入法架构(通常是 Fcitx 或 ibus)与 WSLg 的 Wayland/X11 桥接层默认没有完全打通。

要解决这个问题,最稳妥、最现代化的方案是在 WSL 的 Ubuntu 内部配置 Fcitx5 输入法框架。请按以下步骤配置:

第一步:安装 Fcitx5 输入法框架及中文拼音引擎

在你的 WSL 终端中执行以下命令:

sudo apt update
sudo apt install -y fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5

第二步:配置环境变量(让应用识别输入法)

需要告诉 WSL 里的 GUI 程序使用 Fcitx5 作为输入法后端。将以下环境变量写入你的 shell 配置文件(假设你用的是 bash):

cat << 'EOF' >> ~/.bashrc

# Fcitx5 环境变量配置
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export SDL_IM_MODULE=fcitx
EOF

# 使配置立即生效
source ~/.bashrc

第三步:设置 Fcitx5 随图形环境启动

为了让输入法守护进程在启动 GUI 应用时自动运行,可以将其加入后台自启:

# 检查并确保 fcitx5 在后台运行(可以顺便把它加到 ~/.bashrc 的末尾)
echo "pgrep -x fcitx5 > /dev/null || fcitx5 &" >> ~/.bashrc
source ~/.bashrc

(或者你也可以直接手动在终端输入 fcitx5 & 启动一次)

第四步:重启 gnome-terminal 测试

  1. 先关闭刚才已经打开的那个无法输入中文的 gnome-terminal 窗口(或者在终端执行 killall gnome-terminal)。
  2. 重新启动:
    gnome-terminal &

  3. 在弹出的 Linux 终端里,尝试按 Ctrl + Space(或者切换输入法的快捷键),看看是否能成功唤醒中文输入法面板并正常输入汉字。

(注:如果部分按键被 Windows 宿主机拦截,你也可以点击输入法状态栏或者在 fcitx5 配置工具里自定义快捷键)


User prompt: 这是在wsl里面, 确认可以这样?

Response: 可以确认,这套方案在 WSL(通过 WSLg 运行 Linux 原生 GUI 应用)中是完全可行的,也是目前社区通用的标准解法。

不过,在 WSL 环境下跑输入法,有两个微小的细节需要特别注意,否则容易踩坑:

⚠️ WSL 环境下的两个避坑要点:

  1. Wayland 协议兼容问题 WSLg 默认会启用 Wayland。有时 fcitx5 在纯 Wayland 模式下会出现选词框不跟随或无法唤起的情况。如果配置完发现按 Ctrl + Space 没反应,建议把启动命令改为禁用 Wayland 兼容模式:
    fcitx5 -d --disable=wayland &

  2. 必须添加“拼音”子模块 安装完 fcitx5-chinese-addons 后,很多新手会漏掉在输入法面板里添加拼音这一步。

  3. 在终端输入 fcitx5-configtool(会弹出一个 GUI 配置窗口)。
  4. 在左侧的“当前输入法”中,确保右侧列表中有 Pinyin(拼音)。如果没有,在下方搜索并把它添加进去。

只要完成了这两步,你在 WSL 里面通过 gnome-terminal 或前面提到的 google-chrome 调出的任何原生 Linux 图形界面,就都能顺畅地打出中文了。

Sources

  1. 在Ubuntu 安装配置Fcitx 5 中文输入法 - muzing的杂货铺
  2. WSL2 + Ubuntu 中文输入法:Fcitx5 安装配置 - CSDN博客

User prompt: 它一直报: cannot connect to fcitx by dbus, is fcix running

Response: 这个报错 cannot connect to fcitx by dbus, is fcitx running 是因为 D-Bus 消息总线未能在后台正确拉起,导致图形程序找不到正在运行的输入法守护进程。

在 WSL 中解决这个问题,通常是因为没有启动 dbus-daemon 或者没有让 fcitx5 绑定到正确的会话总线。

请按照以下步骤排查和解决:

第一步:清理残留进程并手动测试

先彻底杀掉可能卡住的后台进程:

killall fcitx5 dbus-daemon

然后,在终端中分步手动执行,看看具体的报错信息:

# 1. 确保 D-Bus 处于活跃状态
export $(dbus-launch)

# 2. 尝试在后台启动 fcitx5
fcitx5 -d

看看此时执行 fcitx5 -d 还报不报错。

第二步:优化 \~/.bashrc 中的自启逻辑

如果上面手动测试成功了,说明我们需要把 D-Bus 会话初始化 和 Fcitx5 启动 结合起来写进 \~/.bashrc。

用编辑器(如 nano 或直接追加)修改你的 \~/.bashrc,把之前加的自启代码替换为下面这段更稳健的逻辑:

# 确保在 WSL 中启动 GUI 应用时能正确关联 D-Bus 和 Fcitx5
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export SDL_IM_MODULE=fcitx

# 自动检测并启动 fcitx5 及 dbus
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
eval $(dbus-launch --sh-syntax)
fi

# 如果 fcitx5 没跑,则在后台启动它
if ! pgrep -x "fcitx5" > /dev/null; then
fcitx5 -d > /dev/null 2>&1 &
fi

修改后,执行命令使配置生效:

source ~/.bashrc

第三步:验证并再次打开

  1. 确认 fcitx5 已经正常运行:
    pgrep -l fcitx5

(如果输出类似 12345 fcitx5 的进程号,说明启动成功)
2. 再次尝试在 WSL 终端中启动你的图形终端:
gnome-terminal &

  1. 在弹出的 gnome-terminal 窗口里按 Ctrl + Space,看看输入法能不能正常呼出。

User prompt: window外面怎么访问里面的文件? 效率怎么样?

Response: 从 Windows 宿主机访问 WSL 内部的文件,方法非常直观,但效率和访问方式直接挂钩。

一、 Windows 怎么访问 WSL 里的文件?

主要有两种最常用的官方原生方式:

1. 通过网络路径(推荐,访问速度较快)

在 Windows 的文件资源管理器地址栏中,或者在运行窗口(Win + R)中输入:

\\wsl.localhost\Ubuntu

(注:后面的 Ubuntu 是你的 WSL 发行版名称,如果你装的是其他版本,换成对应的名字即可,例如 \\wsl.localhost\Debian)

按下回车后,你就可以像浏览本地硬盘一样,自由地对 WSL 内部的整个 Linux 根目录进行增删改查。

2. 在 Linux 终端中一键唤起

如果你已经在 WSL 终端里,并且当前正好在某个项目目录下,可以直接输入:

explorer.exe .

Windows 资源管理器会立刻弹出一个窗口,定位到你当前所在的 Linux 目录。

二、 效率怎么样?(核心优劣势)

通过 \\wsl.localhost\ 访问 WSL 文件,其底层的技术原理是微软实现的 9P 文件协议(通过虚拟机桥接)。它的效率表现如下:

  • 日常浏览、复制大文件、查看文档: 效率很不错。直接传输一个几十 GB 的压缩包,或者用 Windows 的图片查看器、PDF 阅读器打开 WSL 里的文件,速度几乎和访问本地 SSD 没什么区别。
  • 作为开发环境(极其重要!): 如果你把 Git 仓库、Node.js 项目(有大量的 node_modules 小文件)、Python 虚拟环境 放在 \\wsl.localhost\ 路径下,用 Windows 端的 IDE(如 VS Code、WebStorm 等)去频繁读写、监听文件变动,效率会非常灾难。
  • 原因:跨文件系统的大量小文件随机读写会触发严重的协议转换开销,导致 git status 变得极慢、热重载(HMR)卡顿。

💡 黄金开发建议

  1. 绝对不要在 Windows 盘(如 C:\ 或 D:\)下去搞 Linux 开发,也不要在 Windows 端直接去频繁读写 \\wsl.localhost\ 里的源码。
  2. 正确做法:
  3. 代码和项目文件必须存放在 WSL 虚拟机的内部路径(例如 \~/projects/)。
  4. 编写代码时,使用 VS Code 的 Remote-WSL 插件。让编辑器直接在 WSL 内部运行,这样它读写的是 Linux 的本地文件系统,效率直接拉满,体验和原生 Linux 毫无二致。

User prompt: linux里面怎么访问外面window的文件, 效率怎么样?

Response: 在 Linux (WSL) 里面访问 Windows 宿主机的文件非常方便,但它的效率表现和读写方向有很大关系。

一、 Linux 怎么访问 Windows 的文件?

WSL 会自动将 Windows 的所有磁盘分区挂载到 Linux 的 /mnt/ 目录下:

  • 访问 C 盘:进入 /mnt/c/
  • 访问 D 盘:进入 /mnt/d/
  • 例如:Windows 下的 C:\Users\YourName\Documents,在 WSL 里的路径就是 /mnt/c/Users/YourName/Documents。

你可以在 WSL 终端里直接用标准的 Linux 命令操作它们:

cd /mnt/c/Users/你的用户名/Desktop
ls -la

二、 效率怎么样?(核心优劣势)

通过 /mnt/ 访问 Windows 文件,底层同样是通过 9P 协议跨虚拟化边界实现的。它的效率呈现出极端的两面性:

1. 读 Windows 的大文件:速度还可以

如果你只是在 Linux 里读取、复制 Windows 盘里的一个大文件(比如几 GB 的视频、压缩包),速度虽然比不上纯本地,但也完全能接受。

2. 做开发(跨文件系统读写):性能灾难,强烈不建议!

  • 千万不要把代码仓库(如 Git 项目、node_modules、Python venv)放在 Windows 盘(/mnt/c/ 或 /mnt/d/),然后让 WSL 里的工具(如 npm、git、python)去编译或运行。
  • 后果:由于有大量的随机小文件读写和文件锁竞争,跨文件系统会导致 git status 极慢、npm 安装卡死、热重载延迟爆表。

💡 核心总结与避坑指南

无论是“Windows 访问 Linux 文件”还是“Linux 访问 Windows 文件”,核心原则都是一样的:

“主场作战原则”:

  • Windows 的文件,留给 Windows 的工具去改。
  • Linux / 开发项目的文件,老老实实存放在 WSL 的内部 Linux 根目录下(例如 \~/projects/)。

绝对不要让两边的工具去对方的地盘频繁修改代码或小文件,否则效率会惨不忍睹。


User prompt: 但是, 我要用window下面的编辑器查看linux里面的代码, 怎么实现最新的效率? 像claude改了代码, 怎么实时在编辑器上面看到?

Response: 这是一个非常核心且高频的痛点。当你在 WSL 内部使用 AI 助手(如 Claude Code CLI 等工具)自动生成或修改了代码,你希望在 Windows 端的编辑器(如 VS Code)中能秒级实时看到变动,同时又不牺牲 Linux 的编译/运行性能。

实现“极致效率 + 实时双向可见”的最优解,方案如下:

最优解:使用 VS Code 的 Remote-WSL 架构(标准且完美的方案)

你绝对不能通过 \\wsl.localhost\ 去双击打开文件,那样会有严重的缓存和延迟问题。正确的做法是通过 VS Code 远程架构,让 Windows 端的编辑器直接“住”进 WSL 内部。

1. 具体怎么配?

  1. 在 Windows 端安装 VS Code。
  2. 安装微软官方插件:Remote - WSL(或者直接装 WSL 插件包)。
  3. 打开方式(关键):
  4. 方法 A:在 WSL 终端里,进入你的项目目录,直接敲:
    code .
  • 方法 B:打开 Windows 的 VS Code,点击左下角的绿色远程图标(\<->),选择 "Connect to WSL",然后打开 Linux 里的项目文件夹。

2. 为什么这是效率最高、能实现“实时看到”的方案?

  • 工作原理:此时,VS Code 的 UI 界面跑在 Windows 上(享受丝滑的图形渲染和插件),但它的核心服务端(VS Code Server)直接跑在 WSL Linux 内部。
  • 文件监控(File Watcher):
  • 因为 VS Code Server 是直接运行在 Linux 内核空间里的,它通过 Linux 原生的 inotify 系统调用来监听文件变动。
  • 当 Claude Code 在命令行修改了某个文件时,Linux 内核会瞬间触发 inotify 事件,VS Code 会在毫秒级内刷新并高亮显示变动的文件。
  • 零性能损耗:所有的 Git 操作、npm 安装、Claude 代码修改都在 Linux 内部原生完成,没有任何跨文件系统的性能折损。

补充技巧:如何把这个工作流做到极致?

  1. 终端分屏: 在 VS Code 内部自带的终端里(或者用你前面喜欢的 gnome-terminal / Windows Terminal),一边让 Claude Code 帮你改代码,一边在 VS Code 编辑器窗口里看着代码实时刷新、变绿(Git Diff),体验极其丝滑。
  2. 自动保存(Auto Save): 在 VS Code 的设置(Settings)里搜索 Auto Save,把它设置为 afterDelay(比如 1000ms)。这样你在 Windows 端编辑器里敲代码时,也能实时同步给 WSL 里的编译器或工具链。

User prompt: wsl平时要怎么维护, 有那些常用的维护命令

Response: 维护 WSL(Windows Subsystem for Linux)的核心目标主要是两点:控制磁盘空间增长 和 保持系统/组件最新。

由于 WSL 2 本质上是一个运行在轻量级 Hyper-V 虚拟机上的 Linux,它的虚拟磁盘(.vhdx 文件)具有“只增不缩”的特性(即使在 Linux 里面删除了大文件,Windows 侧占用的磁盘空间也不会自动释放)。

以下为你整理的日常维护指南和常用必备命令:

1. 核心空间维护(清理与磁盘瘦身)

这是 WSL 最需要定期清理的部分。

① 定期压缩虚拟磁盘(释放 Windows 磁盘空间)

当你在 WSL 里删除了代码、Docker 镜像或大型包之后,需要手动清理并收缩磁盘文件。

  1. 在 Windows 端关闭 WSL(管理员权限 PowerShell/CMD):
    wsl --shutdown

  2. 使用 PowerShell 优化/收缩磁盘(Windows 11 较新版本 WSL 推荐):
    wsl --compact

(如果想要针对特定发行版,可以加上 --distribution \<发行版名称>)
3. 使用 diskpart 工具(通用经典方案,适合彻底压缩):
# 1. 打开 diskpart 工具
diskpart

# 2. 选择你的 ext4.vhdx 文件路径(一般在 C:\Users\用户名\AppData\Local\Packages\... 目录下)
select vdisk file="C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu...\LocalState\ext4.vhdx"

# 3. 压缩磁盘
compact vdisk

# 4. 退出
exit

② WSL 内部的临时文件清理

在 WSL 终端内部,定期清理包管理器和系统日志:

# 清理 APT 缓存与未使用的孤立依赖包
sudo apt update && sudo apt autoremove -y && sudo apt clean

# 清理 systemd 日志(只保留最近 3 天的日志)
sudo journalctl --vacuum-time=3d

2. 状态检查与版本更新

① WSL 底层组件升级

微软会定期更新 WSL2 的内核以及 WSLg(图形界面支持),确保升级到最新版可以获得更好的网络与性能优化。

  • 在 Windows PowerShell 中执行:
    # 检查并更新 WSL 内核/组件
    wsl --update

# 检查当前 WSL 的底层版本与系统版本
wsl --version

② 检查运行状态与发行版

  • 查看当前已安装的子系统及运行状态:
    wsl -l -v
    # 或 wsl --list --verbose

(确保你的发行版处于 STATE: Running 或 Stopped,且 VERSION 为 2)
* 强行关闭卡死或无响应的 WSL 实例:
# 关闭整个 WSL 虚拟机(修改 .wslconfig 配置文件后也需要执行此命令生效)
wsl --shutdown

# 或者只终止某一个特定发行版
wsl --t <发行版名称>

3. 备份与还原(灾备与环境迁移)

作为开发人员,建议在配置好一套完整的开发环境(如安装好编译器、输入法、工具链)后,导出一个备份文件。万一系统崩了或者换新电脑,可以秒级还原。

① 导出备份(Export)

在 PowerShell 中运行(需先关闭 WSL):

wsl --shutdown
wsl --export Ubuntu D:\WSL_Backup\ubuntu_backup.tar

② 导入还原(Import)

你可以把备份还原到任意新的路径(甚至可以放在 D 盘或外置 SSD 盘,避免挤爆 C 盘):

wsl --import Ubuntu_Dev D:\WSL_Environments\Ubuntu D:\WSL_Backup\ubuntu_backup.tar --version 2

4. 资源配置管理(.wslconfig 优化)

如果发现 WSL 占用内存太大(vmmem 进程爆满),或者想要调整 CPU 和网络模式,可以在 Windows 的用户目录 C:\Users\你的用户名\.wslconfig 中添加/修改参数:

[wsl2]
# 限制最大占用内存(例如 8GB/16GB)
memory=8GB

# 限制 CPU 核心数
processors=4

# 自动回收空闲内存(Windows 11 新版特性)
autoMemoryReclaim=dropcache

# 开启网络镜像模式(与 Windows 共享 IP,访问极其顺畅)
networkingMode=mirrored

# 开启磁盘空间自动回收(Windows 11 新版特性)
sparseVhd=true

修改完成后,必须在 PowerShell 中运行 wsl --shutdown 重启才能生效。

💡 日常维护极简清单速查

场景 命令 / 操作 运行终端
彻底关闭/重启 WSL wsl --shutdown Windows PowerShell
升级 WSL 内核 wsl --update Windows PowerShell
直接压缩释放 C 盘 wsl --compact Windows PowerShell
查看正在运行的子系统 wsl -l -v Windows PowerShell
清理 Linux 系统垃圾 sudo apt autoremove -y && sudo apt clean WSL Linux 终端
导出环境备份 wsl --export \<Name> \<Path.tar> Windows PowerShell

User prompt: 在wsl里面, 怎么装vscode

Response: 在 WSL 里面使用 VS Code,其实有一个非常核心的“认知误区”需要先打破:你不需要、也不应该在 WSL(Linux)里面去下载安装一个图形版的 VS Code 安装包。

正确的、最高效的做法是:VS Code 的主体安装在 Windows 端,然后通过 Remote-WSL 插件无缝桥接到 WSL 内部。 这样既能享受 Windows 丝滑的 UI 和字体,又能让代码和工具在 Linux 原生环境中运行。

下面是具体的实现和安装步骤:

第一步:确保 Windows 端已安装 VS Code

如果你还没有安装,先在 Windows 端正常下载并安装 VS Code。

第二步:一键安装 Remote-WSL 插件

  1. 打开 Windows 端的 VS Code。
  2. 点击左侧边栏的扩展(Extensions)图标(或按快捷键 Ctrl + Shift + X)。
  3. 在搜索框中输入 Remote - WSL(微软官方出品)。
  4. 点击 Install 安装。

第三步:在 WSL 中直接唤起 VS Code(核心用法)

现在,你只需要在你的 WSL 终端中,做以下操作:

  1. 进入你的项目目录(比如你的代码在 \~/projects/my-app):
    cd ~/projects/my-app

  2. 输入命令:
    code .

第一次执行 code . 时,WSL 终端会自动通过 SSH/管道在后台向 Linux 内部安装一个专属的 VS Code Server(只需要几秒钟),然后 Windows 端就会弹出一个带有绿色远程标志(>\< WSL: Ubuntu)的 VS Code 窗口。

💡 为什么这种方式最好?

  • 零性能损耗:VS Code 的核心编辑器和插件跑在 Windows,但它的文件监听、终端、Git、Python/Node 环境全部直接跑在 WSL 的 Linux 内核里。
  • 输入法完美兼容:因为 VS Code 的 UI 是 Windows 原生的,前面让你头疼的 Linux GUI 软件(如 gnome-terminal)中文输入法问题在这里完全不存在,你可以直接在编辑器里流畅输入中文注释。