在Windows中使用Linux系统

WSL概述

在Windows环境要使用Linux系统,可以通过安装WSL(Windows Subsystem for Linux)来实现。这样可以在 Windows 上直接使用 Linux 应用程序、实用工具和 Bash 命令行工具(未经修改),无需传统虚拟机或双包设置的开销。
关于WSL的详细说明参考:Windows Subsystem for Linux 文档

安装WSL

必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。

1.右键点击“开始”菜单,选择 Windows PowerShell (管理员) 或 命令提示符 (管理员)。
2.在打开的窗口中,直接输入以下命令并回车:

wsl --install

这个命令会自动启用WSL所需的功能,下载并安装最新的WSL Linux内核,并将默认版本设置为WSL 2,最后还会为你安装默认的 Ubuntu 发行版。

3.等待命令执行完毕,根据提示重启电脑。

安装结束并重启系统后,你可以在PowerShell中使用以下命令来验证安装状态:

wsl --list --verbose

这个命令会列出你已安装的所有Linux发行版,并显示它们各自运行的WSL版本(应该是 2)。

  NAME      STATE           VERSION
* Ubuntu    Running         2

启动WSL

当使用 wsl --list --verbose 看到某个发行版的状态为 Stopped 时,这表示该 Linux 子系统当前没有在后台运行,这是正常情况,只需要将它启动即可开始使用。

打开 命令提示符 或 PowerShell,直接输入:

@rem 指定启动某个发行版,可以使用 -d 参数:
@rem 比如:wsl -d Ubuntu
wsl -d <发行版名称>

执行上述任意命令后,再次运行 wsl --list --verbose,会看到该发行版的状态变为 Running

停止WSL

要手动停止正在运行的 WSL 发行版,可以使用以下两种方法:

1.停止指定的 Linux 发行版

使用 --terminate(或缩写 -t)命令可以优雅地终止某个正在运行的发行版:

wsl --terminate <发行版名称>

例如,停止名为 Ubuntu 的发行版:

wsl --terminate Ubuntu

执行后,该发行版的所有 Linux 进程会被终止,状态会从 Running 变为 Stopped
可以通过 wsl --list --verbose 确认状态变化。

2.完全关闭所有 WSL 实例

如果想立即停止所有正在运行的 WSL 发行版以及 WSL 2 的轻量级虚拟机,可以使用:

wsl --shutdown

这个命令会终止整个 WSL 服务,所有发行版都将变为 Stopped。下次启动任何发行版时,WSL 会重新初始化环境。

常见问题与技巧

在WSL中访问Windows文件

你的Windows系统盘(如C盘)被挂载在 /mnt/c/ 目录下。你可以通过 cd /mnt/c/Users/你的用户名 来访问Windows上的文件。

zhangsan@WIN-SREMJB8AB9G:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
none             16G     0   16G   0% /usr/lib/modules/6.6.87.2-microsoft-standard-WSL2
none             16G  4.0K   16G   1% /mnt/wsl
drivers         239G  200G   39G  84% /usr/lib/wsl/drivers
/dev/sdd       1007G  1.5G  955G   1% /
none             16G   84K   16G   1% /mnt/wslg
none             16G     0   16G   0% /usr/lib/wsl/lib
rootfs           16G  2.7M   16G   1% /init
none             16G  528K   16G   1% /run
none             16G     0   16G   0% /run/lock
none             16G     0   16G   0% /run/shm
none             16G   76K   16G   1% /mnt/wslg/versions.txt
none             16G   76K   16G   1% /mnt/wslg/doc
C:\             239G  200G   39G  84% /mnt/c
D:\             621G  397G  225G  64% /mnt/d
tmpfs           3.2G   20K  3.2G   1% /run/user/1000

在Windows中访问WSL文件

在Windows文件资源管理器的地址栏输入 \\wsl$\你的发行版名称 (例如 \\wsl$\Ubuntu),即可像访问网络位置一样访问Linux子系统内的文件。

切换WSL版本

如果你发现某个发行版运行在WSL 1,想将其升级到WSL 2,可以使用命令 wsl --set-version <发行版名称> 2 (例如 wsl --set-version Ubuntu 2)。

禁用 WSL 继承 Windows PATH环境变量

如果希望 WSL 拥有一个完全纯净的 Linux 环境,彻底避免所有与 Windows 工具的冲突,可以禁用 PATH 继承。
操作步骤:
1.编辑 WSL 配置文件:
在 WSL 终端中,编辑(或创建)/etc/wsl.conf 文件:

sudo vim /etc/wsl.conf

2.添加配置:
在该文件中添加以下内容:

[interop]
appendWindowsPath = false

3.重启 WSL:
保存文件后,完全退出所有 WSL 终端,然后在 Windows 的 PowerShell 或 CMD 中运行以下命令来重启 WSL 子系统:

wsl --shutdown

4.验证并手动添加必要工具(可选):
再次运行 echo $PATH,会发现 Windows 的路径已经消失。现在 WSL 环境是完全独立的。
副作用:将无法直接在 WSL 中使用 code . 命令打开 VS Code。如果仍需要此功能,可以手动将 VS Code 的路径加回 ~/.bashrc 中 :

export PATH="$PATH:/mnt/c/Program Files/Microsoft VS Code/bin"

设置GIT支持中文文件名

在 WSL 中执行 git status 看到的中文文件名显示为类似\345\234\250IDEA\344\270\255\351\205\215\347\275\256\346\263\250\351\207\212\346\250\241\346\235\277.md的八进制编码,这是因为 Git 默认对非 ASCII 文件名进行了转义(core.quotepath 默认为 true)。这个机制是为了保证在一些不支持 UTF-8 的终端中文件名不会完全乱码,但在现代终端(如 Windows Terminal)中,可以关闭它,让 Git 直接显示原始 UTF-8 字符。

1.设置 Git 配置,禁用路径转义

在 WSL 终端中运行以下命令:

git config --global core.quotepath false

这条命令会全局关闭对非 ASCII 文件名的转义,之后 git status 就会直接显示中文文件名。

2.确保 WSL 的 locale 支持 UTF-8

运行 locale 检查当前语言环境。如果输出中 LANGLC_* 不是以 .UTF-8 结尾,需要设置一个 UTF-8 的 locale。

  • 查看已安装的 locale
    locale -a | grep zh_CN

如果没有中文 UTF-8 locale,可以生成它(需要 root 权限):

sudo locale-gen zh_CN.UTF-8
  • 设置默认 locale(将以下行添加到 ~/.bashrc 或 ~/.zshrc)
    export LANG=zh_CN.UTF-8
    export LC_ALL=zh_CN.UTF-8   # 可选,强制所有分类使用该 locale

或者使用英文 UTF-8:

export LANG=en_US.UTF-8

3.终端本身支持 UTF-8 并选用合适字体
如果使用 Windows Terminal,它默认支持 UTF-8,且通常使用 Cascadia Code 等字体,可以正常显示中文。但如果终端是旧的 cmd 或 PowerShell,可能需要切换到 Windows Terminal,或在终端设置中选择支持中文的字体(如 Consolas、YaHei Consolas Hybrid 等)。

配置WSL访问外网

如果在WSL环境中访问外网域名不通,即:ping不通指定的外网域名时,大多数情况下可能时DNS服务器配置的原因导致的。

禁用 WSL 自动生成的 DNS 配置,手动指定一个稳定可靠的公共 DNS 服务器。

1.解除 /etc/resolv.conf 的锁定(如果之前操作过)
如果之前按照某些教程执行过 sudo chattr +i /etc/resolv.conf,需要先解除锁定才能修改:

sudo chattr -i /etc/resolv.conf

2.创建 /etc/wsl.conf 并配置

sudo vim /etc/wsl.conf

在文件中写入以下内容:

[network]
generateResolvConf = false

这行配置告诉 WSL 不要自动生成 /etc/resolv.conf 文件 。

3.删除旧的 resolv.conf 并创建新的

# 删除原有的软链接或文件
sudo rm /etc/resolv.conf

# 创建新的 resolv.conf 文件
sudo vim /etc/resolv.conf

在文件中写入以下内容(推荐使用国内稳定的 DNS):

# 腾讯 DNS
nameserver 119.29.29.29
# 阿里 DNS
nameserver 223.5.5.5
# 或者 Google DNS(备选)
nameserver 8.8.8.8
# 设置超时选项,避免长时间等待
options timeout:1 attempts:1

4.锁定 resolv.conf(可选,防止被意外修改)

sudo chattr +i /etc/resolv.conf

5.重启 WSL 使配置生效
在 Windows PowerShell(管理员) 中执行:

wsl --shutdown

然后重新打开 WSL 终端。

迁移WSL目录

默认情况下,在Windows系统安装WSL之后,所有WSL相关的文件都会保存到路径:C:\Users\%USER%\AppData\Local\wsl,随着时间的推移该目录会越来越大,当C盘空间不够大时可能会影响到系统的运行效率。可以通过迁移的方式,将目录迁移到其他磁盘。

特别注意:
迁移不能直接剪切,直接移动会导致 WSL 无法启动、数据损坏、权限异常等严重问题。该目录下存放的是 WSL2 发行版的核心虚拟磁盘文件ext4.vhdx,也是占用 C 盘空间的核心文件,必须通过 WSL 官方支持的规范操作完成迁移。

前置准备(必做)

  1. 以管理员身份打开 Windows PowerShell

  2. 查看当前已安装的 WSL 发行版,记住要迁移的发行版全称(如Ubuntu),确认 WSL 版本

    wsl -l -v
  3. 关闭所有运行中的 WSL 实例,确保发行版状态为Stopped

    wsl --shutdown
  4. 目标盘(如:E盘)准备:必须为NTFS 格式,预留不小于当前 WSL 虚拟磁盘占用的空间,新建无中文、无空格的目录,例如:

  • 备份目录:E:\WSL-Backup
  • E:\WSL\Ubuntu

迁移步骤:

步骤 1:导出 WSL 发行版到备份文件

执行命令,将当前 C 盘的 WSL 系统完整导出为 tar 备份包:

# 命令格式:wsl --export <发行版名称> <备份文件完整路径.tar>
wsl --export Ubuntu E:\WSL-Backup\ubuntu.tar

等待命令执行完成,不要中途中断,确认备份文件生成且大小正常。

步骤 2:注销 C 盘的原 WSL 发行版

⚠️ 关键提醒:此操作会删除 C 盘原有的 WSL 文件,彻底释放 C 盘空间,必须确保上一步导出的备份文件完整可用,再执行此命令!

# 命令格式:wsl --unregister <发行版名称>
wsl --unregister Ubuntu

步骤 3:导入 WSL 发行版到 E 盘

执行命令,将备份包导入到 E 盘的目标目录,完成迁移:

# 命令格式:wsl --import <发行版名称> <E盘目标安装目录> <备份文件完整路径.tar> --version 2
wsl --import Ubuntu E:\WSL\Ubuntu E:\WSL-Backup\ubuntu.tar --version 2

说明:--version 2 用于指定 WSL2 内核,需和迁移前的版本保持一致,避免兼容性问题。

步骤 4:修复默认登录用户(必做)

导入后 WSL 默认会以 root 用户登录,需还原为你原来的普通用户:

  1. 启动 WSL

    wsl -d Ubuntu
  2. 执行命令编辑配置文件

    vi /etc/wsl.conf
  3. 写入以下内容(把username替换成你原来的 Linux 用户名)

    [user]
    default=username
  4. 保存配置并退出编辑器,执行以下命令重启 WSL 生效

    wsl --shutdown

步骤 5:验证迁移结果

  1. 执行wsl -l -v,查看发行版状态正常
  2. 启动 WSL,确认文件、环境、配置完整无丢失
  3. 查看 C 盘空间,确认原 WSL 占用的空间已释放
  4. 确认 E 盘目标目录下已生成ext4.vhdx虚拟磁盘文件,后续所有 WSL 数据均会写入该文件,不再占用 C 盘空间

【参考】
在Windows10上安装WSL的详细步骤和方法


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,在下面评论区告诉我^_^^_^