如何在Linux中检查以太网端口的物理状态?


Answers:


68

$ ethtool <eth?>

例如:

$ 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 pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: on
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000001 (1)
        Link detected: yes

46

检查/sys/class/net/eth0/operstate和该目录中的其他文件。

据我所知,这是特定于Linux 2.6+的,但是它为内核驱动程序提供了干净的接口。

sys可以在以下位置找到文件系统这一部分的完整文档:

https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-net


10
/ sys / class / net / eth0 / carrier对我来说是这个问题的完美答案。
Per Knytt

好答案。一个小的附录:/ run / network / ifstate也有一些有用的信息。
PauloAndréHaacke

34

ethtool [interface]

最后一行显示您想要的内容:

#ethtool eth0
eth0的设置:
        支持的端口:[TP]
        支持的链接模式:10baseT / Half 10baseT / Full 
                                100baseT /半100baseT /全 
                                1000baseT /满 
        支持自动协商:是
        广告链接模式:10baseT / Half 10baseT / Full 
                                100baseT /半100baseT /全 
                                1000baseT /满 
        广告自动协商:是
        速度:1000Mb / s
        双面:完整
        端口:双绞线
        PHYAD:0
        收发器:内部
        自动协商:开启
        支持唤醒:g
        唤醒时间:d
        当前消息级别:0x00000037(55)
        检测到链接:是

4
如果您检查以下内容:en.wikipedia.org/wiki/OSI_model。您将看到最后一行是关于另一层的:链接层。我刚刚测试过。电缆损坏时,物理层已启动,但链路层未启动。然后我切换到另一根电缆,所有层都出现了。
贾德·迪亚斯

25
ip link show

是另一个。好老

ifconfig dev_name

要么

ifconfig -a

还会告诉您界面是否打开。注意:请谨慎使用这些方法,因为它们可能会显示有关链接状态的过时信息。


我认为这是最好的答案-ethtool在我的Ubuntu发行版中不是标准的,因此如果在未连接网络的盒子上使用ethtool并没有帮助。
user20010 2013年

4
我相信ifconfig有时会显示过期数据。当链接断开时,它可以显示UP,但是ethtool界面将始终显示正确的信息AFAIK。
sed_and_done 2015年

2
我认为@sed_and_done是正确的。在红帽虚拟机,如果我拔下网卡,ethtool的立即显示Link detected: no,而不是Link detected: yesIP链路秀展示<NO-CARRIER,BROADCAST,MULTICAST,UP>,而不是<BROADCAST,MULTICAST,UP,LOWER_UP>,但使用ifconfig -a显示UP BROADCAST MULTICAST MTU:1500 Metric:1,这是相同的,当网卡连接为。
阿迪·英巴尔

16
dmesg | grep eth

您应该看到所有状态更改


如果没有管理员权限,这是唯一可行的方法。
Brian B

dmesg要求在Slackware 14.0上具有root用户权限
AnonymousLurker

不,不是。我刚刚检查了一下-虽然它在eth0设备上适用于我,但在设备上却没有eth2
Hi-Angel

9

您也可以使用mii-tool查看链接是否建立,并检查协商的速度。

#mii-tool
eth0:协商的100baseTx-FD,链接正常


4
mii-tool已弃用,不适用于GbE接口。
戴夫·切尼

2
@DaveCheney# mii-tool eth0: negotiated 1000baseT-FD flow-control, link ok
stolsvik

mii-tool的手册页建议使用ethtool。但是,mii-tool会继续工作,如果给定-v(详细)选项,则将更加有用。
大卫·拉米雷斯


2

如果您的系统正在使用ifplugd(例如在带有Raspbian的Raspberry Pi上),则可以使用关联的状态工具ifplugstatus来获取所有接口的链接状态:

ifplugstatus

或特定的接口(例如eth0):

ifplugstatus eth0

2

netplugd是一项服务,可以在插入电缆或拔出电缆时运行程序。因此,命令行将是grep / var / log / messages或dmesg以获得netplugd输出。


好吧,不完全是所要求的答案,而是一个有趣的答案。至少对我来说。
Sopalajo de Arrierez,2014年

2

要快速添加到@ goo的答案中,您可以按ip link或解释ip link show INTERFACE如下。

这是一个在管理上处于上行状态但在物理上处于下行状态的端口:

2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000

换句话说,UP您会看到表明系统已配置为尝试使用NIC进行联网。在NO-CARRIER这里告诉你什么防止工作网络的问题。

这是一个在管理上处于关闭状态的端口(从技术上讲,其物理层为“启动”-它是VM):

3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

最后,此端口正常工作:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP mode DEFAULT group default qlen 1000

在管理上UPLOWER_UP指示物理层正在运行(即有运营商),第二个UP确认(实际上)IP层已启动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.