解码C语言环境搭建之Linux子系统与使用vscode连接子系统
安装准备工作
查看当前系统版本确保高于16215.0

开启WSL
Windows Subsystem for Linux(简称WSL)是一个为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层。


安装步骤
微软商城Microsoft Store安装Ubuntu(本人安装的版本是22.04)

点击

3. 等待安装完成输入用户名跟密码就可以使用了(注:密码不回显)

移动WSL到其他磁盘,释放C盘空间
查看已安装的 Windows Subsystem for Linux (WSL) 发行版
wsl --list --verbose
导出发行版到指定文件
wsl --export <发行版名称> <备份文件路径.tar>
eg:wsl --export Ubuntu-22.04 E:\wsl-backup\ubuntu-22.04.tar
注销(卸载)原有发行版
wsl --unregister <发行版名称>
eg:wsl --unregister Ubuntu-22.04
在新磁盘位置导入发行版
wsl --import <发行版名称> <目标安装目录> <备份文件路径.tar>
eg:wsl --import Ubuntu-22.04 E:\wsl\ubuntu E:\wsl-backup\ubuntu-22.04.tar
恢复默认用户(导入后默认以 root 身份登录,需恢复原用户)
wsl -d <发行版名称> #运行WSL
echo -e "[user]\ndefault=wby" >> /etc/wsl.conf #在 WSL 内设置默认用户(假设原用户名为 `wby`)
exit #退出并关闭 WSL
wsl --terminate <发行版名称>
wsl -d <发行版名称> #再次启动即可生效
使用vscode连接Linux子系统
安装WSL插件

选择终端默认配置文件
使用vscode打开存储代码的文件夹,右键在终端打开即可

在安装gcc编译器前建议换源
备份原始源文件
在终端中运行以下命令,备份当前的 sources.list 文件:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
编辑源文件
使用文本编辑器打开 sources.list 文件:
sudo vim /etc/apt/sources.list
将文件中的内容替换为以下国内镜像源之一:
#阿里云镜像
deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
#清华大学镜像
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
保存并退出(按 ESC,输入 :wq)。
更新软件包列表
运行以下命令以更新软件包列表:
sudo apt update
sudo apt upgrade -y
安装gcc即可运行c语言代码
sudo apt install gcc
WSL 中启用 systemd
核心问题与前提认知
问题本质
在 WSL 中执行systemctl命令时提示System has not been booted with systemd as init system,核心原因是:
- WSL 1 不支持 systemd(始终用
/init作为初始化进程); - WSL 2 支持 systemd,但需手动配置启用(默认不开启)。
关键概念区分
| 项目 | WSL 1 | WSL 2 |
|---|---|---|
| 初始化进程 | /init(不支持 systemd) |
可配置为systemd(需手动开启) |
| 虚拟化依赖 | 不依赖 Windows 虚拟化功能 | 依赖 Windows 虚拟机平台和 CPU 虚拟化 |
systemctl支持 |
不支持(需用service命令替代) |
配置后支持 |
| 性能与兼容性 | 较差(文件 IO 慢,部分 Linux 工具不兼容) | 较好(接近原生 Linux,支持大多数工具) |
升级到 WSL 2(必做步骤)
确认 Windows 版本支持
- 按
Win + R输入winver,确认版本:- Windows 10:需 1903 版本(build 18362)及以上;
- Windows 11:所有版本支持。
启用 Windows 必要功能
WSL 2 依赖 “适用于 Linux 的 Windows 子系统” 和 “虚拟机平台” 两个功能:
- 按
Win + R输入optionalfeatures,打开 “Windows 功能”; - 勾选以下两项,点击 “确定”:
- ✅ 适用于 Linux 的 Windows 子系统
- ✅ 虚拟机平台
- 等待安装完成,重启电脑(不重启功能不生效)。
开启 CPU 虚拟化(BIOS 设置)
- 重启电脑,开机时按对应按键进入 BIOS(联想
F2、华硕DEL、戴尔F2,开机画面会提示); - 找到 “Intel Virtualization Technology”(Intel 芯片)或 “AMD-V”(AMD 芯片),设为 “Enabled”;
- 按
F10保存并重启电脑。
安装 WSL 2 内核更新包
- 下载官方内核包(x64 系统):wsl_update_x64.msi;
- 双击安装,按提示完成(全程 “下一步”)。
转换现有发行版到 WSL 2
- 打开管理员 PowerShell,查看已安装的发行版及版本:
wsl -l -v(示例输出:Ubuntu-22.04的VERSION为 1) - 设置 WSL 2 为默认版本:
wsl --set-default-version 2 - 转换目标发行版(名称需与步骤 1 输出一致,如
Ubuntu-22.04):wsl --set-version Ubuntu-22.04 2- 等待转换完成(5-15 分钟,显示 “100%”);
- 验证转换结果:
wsl -l -v→ 确认Ubuntu-22.04的VERSION变为 2。
配置启用 systemd
创建 / 编辑配置文件
-
打开
Ubuntu-22.04终端(从开始菜单直接打开); -
输入命令创建
wsl.conf(需管理员权限):sudo nano /etc/wsl.conf- 输入 Ubuntu 密码(输入时不显示,输完回车);
-
粘贴以下配置(严格保持格式):
[boot]systemd=true
保存配置并重启 WSL
- 按
Ctrl + O(字母 O)→ 回车(确认保存); - 按
Ctrl + X退出编辑器; - 打开管理员 PowerShell,彻底关闭 WSL:
wsl --shutdown
验证 systemd 是否生效
- 重新打开
Ubuntu-22.04终端,输入命令查看初始化进程:ps 1- 若输出
1 ? Ss 0:02 /lib/systemd/systemd,说明 systemd 启用成功;
- 若输出
- 测试
systemctl命令(以 SSH 服务为例):- 启动 SSH:
sudo systemctl start ssh(无报错); - 查看状态:
sudo systemctl status ssh(显示active (running))。
- 启动 SSH:
VSCode 连接 WSL 2(确保环境同步)
关闭 VSCode 所有窗口;
重新打开 VSCode → 按Ctrl + Shift + P → 输入Remote-WSL: New WSL Window → 选择Ubuntu-22.04;
连接成功后,在 VSCode 终端输入ps 1和sudo systemctl status ssh,确认与 Ubuntu 终端结果一致(systemd进程 + SSH 服务运行)。
常见问题与解决方法
ps 1始终显示/init
- 原因 1:
wsl.conf配置错误 → 重新执行cat /etc/wsl.conf,确保内容为[boot]\nsystemd=true; - 原因 2:WSL 内核版本过低 → 终端输入
uname -r,若版本<5.10.60.1,执行wsl --update升级内核; - 原因 3:进程未彻底关闭 → 任务管理器结束
wslhost.exe、Ubuntu-22.04.exe进程,再wsl --shutdown重启。
转换版本时提示 “发行版不存在”
- 原因:发行版名称输入错误 → 执行
wsl -l查看精确名称(如Ubuntu-22.04 LTS),转换时用全称(带引号,如wsl --set-version "Ubuntu-22.04 LTS" 2)。
VSCode 中systemctl仍报错
- 原因:VSCode 连接旧 WSL 实例 → 关闭所有远程窗口,按
Ctrl + Shift + P执行 “Remote: Close Remote Connection”,重新连接Ubuntu-22.04。
关键命令速查
| 操作场景 | 命令(Windows PowerShell / 管理员) | 命令(Ubuntu 终端) |
|---|---|---|
| 查看 WSL 版本 | wsl -l -v |
无(wsl是 Windows 命令) |
| 转换发行版到 WSL 2 | wsl --set-version Ubuntu-22.04 2 |
无 |
| 重启 WSL | wsl --shutdown |
无 |
| 编辑 systemd 配置 | 无 | sudo nano /etc/wsl.conf |
| 验证 systemd 是否启用 | 无 | ps 1 |
| 启动 SSH 服务 | 无 | sudo systemctl start ssh |

浙公网安备 33010602011771号