解码C语言环境搭建之Linux子系统与使用vscode连接子系统

安装准备工作

查看当前系统版本确保高于16215.0

系统版本

开启WSL

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

安装步骤

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

Ubuntu安装

点击

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

移动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插件

WSL插件

选择终端默认配置文件选择终端默认配置文件

使用vscode打开存储代码的文件夹,右键在终端打开即可

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.04VERSION为 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.04VERSION变为 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))。

VSCode 连接 WSL 2(确保环境同步)

关闭 VSCode 所有窗口;

重新打开 VSCode → 按Ctrl + Shift + P → 输入Remote-WSL: New WSL Window → 选择Ubuntu-22.04

连接成功后,在 VSCode 终端输入ps 1sudo systemctl status ssh,确认与 Ubuntu 终端结果一致(systemd进程 + SSH 服务运行)。

常见问题与解决方法

ps 1始终显示/init

  • 原因 1wsl.conf配置错误 → 重新执行cat /etc/wsl.conf,确保内容为[boot]\nsystemd=true
  • 原因 2:WSL 内核版本过低 → 终端输入uname -r,若版本<5.10.60.1,执行wsl --update升级内核;
  • 原因 3:进程未彻底关闭 → 任务管理器结束wslhost.exeUbuntu-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
posted @ 2025-09-17 15:48  YouEmbedded  阅读(66)  评论(0)    收藏  举报