首页 > Sysadmin > 正文

Linux 查看 DHCP 服务状态:5 条命令

huyuanwen 2026-11-04 Sysadmin

草稿待审;以下 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/ 命令。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。