如何检测网线/连接器的物理连接状态?

新手上路,请多包涵

在 Linux 环境中,我需要检测 RJ45 连接器与其插座的物理连接或断开状态。最好只使用 BASH 脚本。

以下已在其他站点上提出的解决方案不适用于此目的:

  1. 使用“ifconfig” - 因为可能连接了网络电缆,但网络未正确配置或当前未启动。
  2. Ping 主机 - 因为产品将在 LAN 中使用未知的网络配置和未知的主机。

/proc 文件系统中是否没有某些状态可以使用(其他所有内容都在其中)?

Linux 世界如何假设有他们自己版本的 Windows 气泡,它会从图标托盘中弹出,表明您刚刚拔掉了网络电缆?


肯特弗雷德里克洛塔尔,你的两个答案都满足了我的需要……非常感谢!我会用哪一个……我还是不知道。

我想我不能把你们两个都当作正确答案?我确实选择了一个,这对你来说可能是公平的。我猜掷硬币?再次,谢谢!

原文由 Jeach 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 528
2 个回答

你想看看节点

/sys/类/网/

我用我的实验:

电线插入:

 eth0/carrier:1
eth0/operstate:unknown

拆线:

 eth0/carrier:0
eth0/operstate:down

再次插入电线:

 eth0/carrier:1
eth0/operstate:up

小技巧:一次收获所有属性的简单方法:

 grep "" eth0/*

这形成了一个很好的 key:value 对列表。

原文由 Kent Fredric 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用 ethtool

 $ sudo ethtool eth0
Settings for eth0:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    Supports Wake-on: umbg
    Wake-on: g
    Current message level: 0x00000007 (7)
    Link detected: yes

要仅获取链接状态,您可以使用 grep:

 $ sudo ethtool eth0 | grep Link
    Link detected: yes

原文由 lothar 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题