Linux WSL 实操(模块 1):WSL 环境适配与 systemd 启用
本系列基于 Ubuntu on WSL2 做 Linux 实操,共 10 个模块:
| 1 | WSL 环境适配与 systemd 启用 ← 本文 |
| 2 | 目录与文件操作 |
| 3 | 用户与权限 |
| 4 | systemd 与 journald |
| 5 | Nginx 静态站点 |
| 6 | 反向代理 |
| 7 | Shell 脚本基础 |
| 8 | 脚本进阶与 crontab |
| 9 | Docker 与 Compose |
| 10 | 多容器编排 |
本文的目标是:把 WSL 环境调校到"能当正经 Linux 用"的状态——确认 WSL2、确认 systemd 可用、更新软件源、最后用 nginx + systemctl 做一次综合验收。
一、为什么要先做这一步
很多人在 WSL 里跑 systemctl 会看到这个报错:
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
原因就两个:发行版是 WSL1,或者 没启用 systemd。
| 实现方式 | 系统调用翻译层 | 轻量虚拟机 + 真实 Linux 内核 |
| systemd 支持 | ❌ 永远不支持 | ✅ 支持(需 ≥ 0.67.6) |
| 文件性能 | 跨系统读写快 | Linux 文件内读写快 |
| Docker 支持 | 不支持 | 支持 |
systemd 是什么? Linux 的"大管家"进程,负责启动和管理所有其他服务。systemctl 是它的遥控器。没有 systemd,systemctl start nginx 这类命令全废,后面模块 4/5/6 都做不了。
怎么判断有没有 systemd? 看 1 号进程是谁。Linux 里 PID 1 就是 init 进程,如果是 systemd,说明管家在岗;如果是 init 或 sh,就没有。
二、环境准备
如果还没装 WSL2 / Ubuntu:
| WSL 本体 | https://github.com/microsoft/WSL/releases |
| Ubuntu 发行版 | 微软商店直接搜 Ubuntu 安装,或官网 https://ubuntu.com/download |
| 我之前教程中有提到 | Docker Desktop 安装与配置完整教程 |
装好后设置好用户名和密码即可。
三、Step 1:打开终端并确认 WSL 版本
按 Win + R,输入 wt 回车,打开 Windows Terminal(默认进 PowerShell)。

3.1 查看 WSL 版本
wsl —version
命令拆解:
| wsl | WSL 管理程序本体(Windows Subsystem for Linux 的缩写) |
| –version | 选项,把版本号打印出来 |

验收标准:WSL 版本 ≥ 0.67.6 就过关。不满足就先执行 wsl –update,装完重开 PowerShell 再看。
3.2 确认发行版是 WSL2
wsl –l –v
| wsl | WSL 管理程序本体 |
| -l | –list 的简写:列出装了哪些发行版 |
| -v | –verbose 的简写:显示详细信息(主要为了看 VERSION 那列) |

验收标准:VERSION 那列是 2。
如果是 1,执行转换(把 Ubuntu 换成 NAME 列显示的实际名字),需要等几分钟:
wsl —set-version Ubuntu 2
四、Step 2:进入 Ubuntu
直接从开始菜单打开 Ubuntu,或者在 PowerShell 里执行:
wsl –d ubuntu

五、Step 3:确认 systemd 已在运行
5.1 看 1 号进程是谁
ps -p 1 -o comm=
| ps | process status 的缩写,查看进程的命令 |
| -p 1 | 只看 PID(进程编号)为 1 的那一个进程 |
| -o | output,指定"我要看哪几列" |
| comm= | 只要 command(命令名)这一列;末尾等号表示连表头都不要 |

输出 systemd → 过关。输出 init 或 sh → 没有 systemd,继续往下看 5.3。
5.2 检查配置文件
cat /etc/wsl.conf
| cat | concatenate 的缩写,把文件内容原样打印到屏幕上 |
| /etc/wsl.conf | 要查看的文件路径 |

看到下面这段就说明已启用:
[boot]
systemd=true
新版本的 Ubuntu 在 WSL2 里默认就开启了 systemd,一般不用手动配置。如果你的文件里没有这段,按 5.3 补上。
5.3 手动开启(老版本才需要)
sudo tee /etc/wsl.conf <<'EOF'
[boot]
systemd=true
EOF
然后回到 PowerShell 执行 wsl –shutdown 彻底关机,再重新打开 Ubuntu 生效。
5.4 最终确认
systemctl is-system-running
| systemctl | systemd 的控制工具,名字是 system + ctl(control 的缩写) |
| is-system-running | 子命令,问系统:“你整体跑起来了吗?” |

看到 running 就没问题。如果报 Failed to connect to bus,说明 systemd 没起来,回 5.3 检查。
六、Step 4:更新系统软件包
环境确认好之后,顺手把系统更新到最新,避免后面装软件踩版本坑。
6.1 刷新软件目录
sudo apt update
| sudo | 管理员身份(apt 要写系统目录,必须提权) |
| apt | Ubuntu 的软件包管理工具,相当于"应用商店管家" |
| update | 子命令:刷新本地的软件目录(索引),不安装任何包 |

update 只是"更新商店目录",一个包都不装。真正升级是 6.3 的 upgrade。
执行后会提示输入密码:

⚠️ 新手最容易以为"卡住了":Linux 输入密码时屏幕上不会显示任何字符(连 **** 都没有),这是正常的安全设计。盲打完直接按回车就行。
回车后开始拉取索引,最后回到命令提示符即刷新完成。
6.2 看看有哪些能升(只看不升)
apt list –upgradable
| apt | 软件包管理工具 |
| list | 子命令:把包列出来 |
| –upgradable | 选项:只列出"有新版可以升"的那些包 |

会列出一屏待升级的包名,按 Q 即可回到命令提示符。
6.3 正式升级
sudo apt upgrade -y
| upgrade | 子命令:把已装的包升到最新版 |
| -y | 选项:遇到"确定吗 [Y/n]"自动回答 Yes,不用来回确认 |

下载、解包进度走完会回到提示符。中途可能弹紫色配置框,直接回车选默认即可。
6.4 清理残留依赖
sudo apt autoremove -y
| autoremove | auto(自动)+ remove(删除),删掉已经没人依赖的孤儿包 |
| -y | 自动回答 Yes |

列表为空或明显变少,说明前面的 upgrade 确实生效了。
七、Step 5:综合验收 —— 装 nginx 并用 systemd 管起来
前面都是配置,这一步做一次端到端验收:装一个真实服务,用 systemd 设为开机自启并立刻启动,再用 HTTP 请求验证它真的在跑。
sudo apt install -y nginx
sudo systemctl enable –now nginx
systemctl is-enabled nginx
curl -I localhost
四条命令逐行拆解:
| sudo apt install -y nginx | install | 子命令:安装 |
| nginx | 目标软件名,一个 Web 服务器(后面几个模块都围着它转) | |
| sudo systemctl enable –now nginx | enable | 子命令:设为"开机自动启动" |
| –now | 选项:顺便现在就启动,不用等下次开机 | |
| systemctl is-enabled nginx | is-enabled | 子命令:查询"有没有设为开机自启" |
| curl -I localhost | curl | 发 HTTP 请求的小工具 |
| -I | 选项:只要响应头(大写的 i) | |
| localhost | 本机地址,就是这台 WSL 自己 |

验收标准:
| systemctl is-enabled nginx | enabled |
| curl -I localhost | HTTP/1.1 200 OK |
两条都满足,说明 systemd 可用 + 服务管理正常 + 网络栈正常,环境已经完全就绪。✅
八、收尾:正确关闭 WSL
用完别直接关窗口,WSL 的虚拟机会继续占内存。
exit
退出 Ubuntu 后,回到 PowerShell 执行:
wsl —shutdown
彻底结束 WSL 进程、释放内存。下次打开 Ubuntu 会自动重新启动。
九、命令速查表
| wsl –version | 查看 WSL 版本(需 ≥ 0.67.6) | PowerShell |
| wsl -l -v | 列出发行版及其 WSL 版本 | PowerShell |
| wsl –set-version Ubuntu 2 | 把发行版转成 WSL2 | PowerShell |
| wsl -d ubuntu | 启动 Ubuntu | PowerShell |
| wsl –shutdown | 彻底关闭 WSL,释放内存 | PowerShell |
| ps -p 1 -o comm= | 看 1 号进程是不是 systemd | Ubuntu |
| cat /etc/wsl.conf | 查看 WSL 配置 | Ubuntu |
| systemctl is-system-running | 检查 systemd 整体状态 | Ubuntu |
| sudo apt update | 刷新软件目录(不装包) | Ubuntu |
| apt list –upgradable | 列出可升级的包 | Ubuntu |
| sudo apt upgrade -y | 升级所有已装包 | Ubuntu |
| sudo apt autoremove -y | 清理孤儿依赖 | Ubuntu |
| sudo systemctl enable –now <服务> | 设开机自启并立即启动 | Ubuntu |
| systemctl is-enabled <服务> | 查服务是否开机自启 | Ubuntu |
十、常见问题排查
| Failed to connect to bus: Host is down | systemd 没启用。检查 /etc/wsl.conf 是否有 [boot] systemd=true,改完必须 wsl –shutdown 重启才生效 |
| wsl -l -v 显示 VERSION 是 1 | 执行 wsl –set-version Ubuntu 2 转换,需要几分钟 |
| wsl –version 提示命令不存在 | WSL 版本太老,先 wsl –update |
| 输入密码时屏幕没反应 | 正常现象,Linux 密码输入不回显,盲打后回车 |
| apt update 卡住或很慢 | 可换成国内镜像源(阿里/清华 Ubuntu 镜像) |
| apt upgrade 弹紫色配置框 | 直接回车选默认即可 |
| 改了 /etc/wsl.conf 但没生效 | 必须 wsl –shutdown 彻底关机再启动,光 exit 不够 |
| WSL 一直占内存 | 用完 exit + wsl –shutdown |
| curl: command not found | 先 sudo apt install -y curl |
十一、本篇小结
| WSL 版本 | ≥ 0.67.6 |
| 发行版版本 | WSL2 |
| 1 号进程 | systemd |
| /etc/wsl.conf | [boot] systemd=true |
| systemd 状态 | running |
| 软件源 | 已 update + upgrade |
| 综合验收 | nginx enabled 且 curl -I localhost 返回 200 |
到这里,WSL 已经是一台"能正经干活"的 Linux 了。下一个模块:目录与文件操作。
相关链接
- WSL releases:https://github.com/microsoft/WSL/releases
- Ubuntu 官网下载链接:https://ubuntu.com/download
- Docker Desktop 安装与配置完整教程(含 WSL2 安装)




