在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 终端。

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


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