我有一个自定义软件,需要知道多个系统(更准确地说是其中两个)上某个网络接口的名称,在该软件上我无法更改任何内容,例如禁用“一致的网络设备命名”。有些系统使用网络管理器的这一新功能,有些系统则不知道如何查明“一致的网络设备命名”是否可用并在设备上激活。
我可以使用 100% 工作的系统版本,但它是一个很黑客的解决方案,我需要一些更优雅的东西,比如某种 linux 命令,它会告诉我该功能是否已启动并正在运行。
系统是 ubuntu 16.04(具有旧命名方案的系统)和 CentOS 7(具有一致网络设备命名的系统)
答案1
测试设备是否存在
最简单的方法是测试网络设备是否存在及其名称。所以,执行
ip l
然后,如果网络设备eth0
等存在,eth1
则wlan0
您将拥有旧的命名方案。如果您有更长的名称,enp[0-9]s[0-9]
那么您就可以使用新的、一致的方案。
要编写此脚本,您可以测试(此处测试以太网):
# test for new, consistent naming scheme
if ( "`ip l | egrep 'enp[0-9][1-9]?s[0-9][1-9]?:' | wc -l`" != "0" ) then
(继续使用你的 shellif
语法,我不知道你有什么)。
或者(测试旧的以太网和 Wi-Fi):
# test for old naming scheme
if ( "`ip l | egrep '(eth|wlan)[0-9][1-9]?:' | wc -l`" != "0" ) then
用于测试旧方案。
事实上,由于它是systemd
一个人可能会想测试它的存在,但默认systemd
行为可以通过配置来更改。