草稿待审;以下 systemctl / journalctl / networkctl 命令已在 WSL Ubuntu 24.04 实测;结论中涉及实际 DHCP 服务器运维的部分,基于文档核查,尚未在生产环境执行。
DHCP 在 Linux 里既是客户端也是服务器。dhcpcd 是 Ubuntu/Debian 默认的 DHCP 客户端守护进程,负责申请和续期 IP 地址[4]。查状态前先确认你管的是客户端还是服务器,服务单元名不一样。
—
1. systemctl status 看详细状态
systemctl status 是最常用的状态查看命令。客户端和服务器的单元名不同:
# 客户端(Ubuntu/Debian 默认)
sudo systemctl status dhcpcd
# 服务器端(RHEL/CentOS 常见)
sudo systemctl status dhcpd
输出里关键看三行:Loaded 有没有报错、Active 是 active (running) 还是 inactive、Main PID 是否存在。如果显示 Unit dhcpcd.service could not be found,说明该包没有安装 systemd unit 文件,只装了二进制。RHEL/CentOS 文档中对 dhcpd 的 systemctl start 与状态检查也有类似说明[5]。
WSL 实测结果:systemctl status dhcpcd 返回 Unit dhcpcd.service could not be found,与文档说明一致[1]。
2. systemctl is-active 快速判断
如果只需要知道服务有没有在跑,用 is-active:
systemctl is-active dhcpcd
systemctl is-active dhcpd
返回值只有 active、inactive、failed 或 unknown,适合脚本判断。
3. journalctl -u 查日志
服务单元存在时,用 journalctl 过滤该 unit 的日志:
# 最近 10 行日志
journalctl -u dhcpcd -n 10
# 实时跟踪新日志
journalctl -u dhcpcd -f
如果服务单元不存在,会返回 -- No entries --[2]。WSL 中 journalctl -u dhcpcd 即为此结果。
4. networkctl status 看租约信息
networkctl 属于 systemd-networkd 体系,可以直接显示接口的 DHCP 租约摘要:
networkctl status eth0
输出里的 DHCP lease 段会列出客户端地址、服务器地址、租约时间等。注意这条命令依赖 systemd-networkd 在运行;WSL 实测中 systemd-networkd 未启动,部分字段显示为 n/a[3]。
5. 排错速查表
| 现象 | 常见原因 | 处理 |
|---|---|---|
Unit ... could not be found |
服务单元文件未安装 | apt install dhcpcd 或对应 server 包 |
inactive / disabled |
服务未启用或未启动 | sudo systemctl enable --now dhcpcd |
failed |
配置语法错误或冲突 | journalctl -u dhcpcd -n 50 看报错 |
networkctl 显示 n/a |
systemd-networkd 未运行 | sudo systemctl enable --now systemd-networkd |
| 服务已运行但拿不到 IP | 网线/虚拟网卡未 carrier | ip link show eth0 看状态 |
局限性
- WSL2 的
hv_netvsc网卡是 unmanaged 的,systemd-networkd 不接管,因此networkctl status eth0会显示unmanaged,无法完整展示 DHCP 租约流程。 - 实际 DHCP 服务器(
dhcpd)的启动失败、租约分配冲突、子网冲突等场景,需在有真实客户端请求的物理/虚拟机上验证,不在本次 WSL 覆盖范围。 - 非 systemd 发行版(SysVinit、OpenRC)没有
systemctl,需用service或/etc/init.d/命令。
参考资料
- [1] systemctl(1) – Linux manual page (man7.org)(systemctl)
- [2] journalctl(1) – Linux manual page (man7.org)(journalctl)
- [3] networkctl(1) – Linux manual page (man7.org)(networkctl)
- [4] dhcpcd(8) – Ubuntu manual page(dhcpcd)
- [5] Chapter 24. DHCP – RHEL 7 SELinux User's Guide(rhel-dhcp)
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。