如何以编程方式检查以太网电缆是否已插入?

如何以编程方式检查以太网电缆是否已插入?

大家知道,在Windows中当我们插入网线时,网络符号会变成另一种状态。

在 Linux 中如何通过命令提示符知道电缆是否已插入?

答案1

我见过的主要使用的两种方法是使用ethtool或手动解析/sys.

以太网工具

例如,如果您的界面是,eth0您可以使用查询它ethtool,然后解析行“检测到链接”。

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

具体来说这个命令:

$ ethtool eth0 | grep "Link"
Link detected: yes

如果它下降了,它就会说不。

使用/sys

再次假设我们对 感兴趣eth0,您可以手动解析 的内容/sys/class/net/然后eth0为您的设备。该目录下有 2 个文件,它们会告诉您链接是否处于活动状态carrieroperstate

连接电线后,这两个文件将显示如下:

$ cat /sys/class/net/eth0/{carrier,operstate}
1
up

当线路断开时,这两个文件将显示如下:

$ cat /sys/class/net/eth0/{carrier,operstate}
0
down

参考

答案2

使用信息产业部工具(手册页):

# mii-tool em1
em1: negotiated 100baseTx-FD flow-control, link ok

还有纳米克利来自网络管理器:

$ nmcli -f capabilities.carrier-detect,capabilities.speed device show em1
CAPABILITIES.CARRIER-DETECT:            yes
CAPABILITIES.SPEED:                     100 Mb/s

*device可以缩短为d

相关内容