如何检测网络电缆/连接器的物理连接状态?

问题描述 投票:136回答:14

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

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

  1. 使用'ifconfig'-因为可能连接了网络电缆,但网络配置不正确或当前未启动。
  2. Ping一个主机-因为该产品将使用未知的网络配置和未知的主机位于LAN内。

/ proc文件系统中没有可用的状态(所有其他文件都在其中吗?]

Linux世界应该如何从图标托盘中弹出自己的Windows气泡版本,指示您刚刚拔下网络电缆?


Kent Fredriclothar,您的回答都满足了我的需求……非常感谢!我会用哪一个...我还是不知道。

我想我不能把你们两个都当成正确的答案吗?我选择其中一种可能对您很公平。我猜是掷硬币吗?再次感谢!

linux networking connection detection
14个回答
213
投票

您想查看]中的节点>

/ sys / class / net /

我尝试了我的:

已插入电线:

eth0/carrier:1
eth0/operstate:unknown

已移除电线:

eth0/carrier:0
eth0/operstate:down

再次插入电线:

eth0/carrier:1
eth0/operstate:up

Side Trick:一次收获所有属性的简单方法:

grep "" eth0/* 

这形成了一个不错的key:value对列表。


1
投票
tail -f /var/log/syslog | grep -E 'link (up|down)'

0
投票
在arch linux上。 (我不确定在其他发行版上),您可以查看该剧本。如果已连接,则显示为向上;如果未连接,则显示为向下>]

/sys/class/net/(interface name here)/operstate #you can also put watch watch -d -n -1 /sys/class/net/(interface name here)/operstate


0
投票

可以


0
投票
我将OpenWRT增强型设备用作转发器(它添加了虚拟以太网和无线局域网功能),发现/ sys / class / net / eth0载波和opstate值不可靠。我玩过/sys/class/net/eth0.1和/sys/class/net/eth0.2,并且(至少到我的发现)没有可靠的方法来检测是否有物理插入的东西并在讨论以太网端口。我想出了一种粗略但看似可靠的方法来检测至少从上次重新启动/开机状态以来是否插入了任何东西(在我的情况下,该方法完全可以满足我的需要)。

0
投票
如果要在命令后检查以太网电缆是否插入linux中,请执行以下操作:“ ifconfig eth0 down”。我找到一个解决方案:使用ethtool工具。

82
投票

您可以使用ethtool


26
投票

使用“ ip监视器”获取实时链接状态更改。


17
投票

cat /sys/class/net/ethX是迄今为止最简单的方法。


8
投票

在低级别上,可以使用rtnetlink套接字捕获这些事件,而无需任何轮询。旁注:如果使用rtnetlink,则必须与udev一起使用,否则当udev重命名新的网络接口时,程序可能会感到困惑。


4
投票
存在两个检测到这些事件的守护程序:

2
投票
[大多数现代Linux发行版为此使用NetworkManager。您可以使用D-BUS监听事件。

2
投票
我使用此命令检查电线是否已连接:

2
投票
一些技巧和窍门
© www.soinside.com 2019 - 2024. All rights reserved.