检测 netplan 是否正在管理网络配置(shell)

检测 netplan 是否正在管理网络配置(shell)

我想在 LXD 容器中的 shell 脚本中找出容器是否由 Netplan 管理。这可能有点未知,因为我有 16.04 系统、18.04 系统和升级的 18.04 系统。

为了将正确的网络配置写入容器,我需要检测配置在/etc/network/interfacesNetplan yaml 文件中是否是静态的。

我确实可以使用类似的命令netplan status,但由于该命令不存在,所以我需要替代方案。

我问了很多问题,似乎没有官方的方法。到目前为止我得到的建议是:

  1. cat /etc/network/interfaces并在那里查找 Netplan 信息消息。我不喜欢这种方法,因为这显然容易导致故障。
  2. 有人建议我可以直接查找 /etc/netplan - 但这在升级的系统上不起作用,因为 Netplan 已被禁用但仍然安装着。
  3. 另一个建议是相反的:我可以检查 ifupdown 或 systemd 是否在管理网络。问题是,我不确定如何在实际意义上做到这一点。

答案1

您可以检查如果状态来自 ifupdown 的文件,它将告诉您该文件是否用于配置网络:

/run/network/ifstate

如果存在并且包含文本,则可以预期 ifupdown 正在使用中。如果不存在,则系统可能是通过 netplan 进行管理的(但这不会告诉您它是 NetworkManager 还是 systemd)

然后,如果您想知道特定接口使用什么后端,您可以询问 netplan,并解析输出以获取所需的信息:

netplan generate --mapping enp3s0

它输出如下文本:

id=enp3s0, backend=NetworkManager, set_name=(null), match_name=enp3s0, match_mac=(null), match_driver=(null)

这样,您还可以知道使用了哪些匹配规则来配置接口(您使用接口的“最终”名称来检查映射,它会告诉您 netplan YAML 中与之匹配的匹配规则是什么)。

相关内容