我正在尝试编写一个 bash 脚本来配置多个网络接口,并且在某些 NIC 获取有线连接名称而不是设备名称时遇到问题。例如
$ nmcli dev status
DEVICE TYPE STATE CONNECTION
ens22 ethernet connected ens22
ens18 ethernet connected Wired connection 2
ens19 ethernet connected ens19
ens20 ethernet connected Wired connection 1
ens21 ethernet connected ens21
lo loopback unmanaged --
这样做的影响是这些命令失败,因为它需要的是连接名称,而不是设备名称:
printf "\n${YELLOW}### Configure ens20: ###${NC}\n"
sudo nmcli con mod ens20 ipv4.addresses 10.70.20.254/24
sudo nmcli con mod ens20 ipv4.dns 8.8.8.8
sudo nmcli con mod ens20 ipv4.method manual
问题:
- 是什么导致只有某些接口获得名称“有线连接”?
- nmcli 中是否有使用接口名称的选项?
- 是否可以重命名连接?我试图重命名 Connection 属性,但我只能在修改连接而不是设备的情况下这样做。
这有效:
sudo nmcli connection modify "Wired connection 2" connection.id "ens18"
这不起作用:
sudo nmcli device modify ens18 connection.id "ens18"
谢谢
在 NetworkManager 术语中,设备是 NIC(或一个虚拟抽象),连接是一组网络配置参数,可以应用于任何合适的设备,除非特别限制为仅匹配特定设备。即使受到如此限制,连接和设备也是单独的配置对象。
1.)
Wired connection <number>
是某些 GUI 工具(包括 RHEL OS 安装程序)使用的默认连接名称格式,而<interface name>
可能是使用创建新连接nmcli
而不指定名称时使用的默认名称 - 例如,如果您使用nmcli device connect <interface name>
并且有没有可应用于该接口的现有连接定义。2.) 引用特定连接的唯一方法是通过其名称、其 UUID 或通过其 D-Bus 连接路径编号(
path <N>
for/org/freedesktop/NetworkManager/Settings/<N>
或apath <N>
for/org/freedesktop/NetworkManager/ActiveConnection/<N>
)。如果您想要一种快速的方法来引用“此设备上的活动连接是什么”,您可以制作这样的 shell 函数:
然后你可以像这样使用它:
请注意,网络接口当前可能根本没有与任何连接关联,在这种情况下
$(nm_connection_of <interface name>)
会返回错误。3.) 你自己已经回答了这个问题。
要重命名连接,您必须明确标识要重命名的连接,而不是可能与任意数量的可能连接相关联或根本没有连接的设备。