我想检查指定的ethX在物理上是向上还是向下。我该如何使用命令行?

#1 楼

$ 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


#2 楼

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

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

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

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

评论


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

– Per Knytt
2011年4月29日15:32



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

– PauloAndréHaacke
17年8月3日在13:43

#3 楼

ethtool [interface]

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

# 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: g
        Wake-on: d
        Current message level: 0x00000037 (55)
        Link detected: yes


评论


如果您选中此项:en.wikipedia.org/wiki/OSI_model。您将看到最后一行是关于另一层的:链接层。我刚刚测试过。电缆不良时,物理层已启动,但链路层未启动。然后我切换到另一根电缆,所有层都出现了。

–贾德·迪亚斯(Jader Dias)
09年5月30日19:37

#4 楼

ip link show


是另一个。好旧的

ifconfig dev_name




ifconfig -a


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

评论


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

–user20010
2013年9月25日21:32

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

–sed_and_done
2015年10月8日在17:15

我认为@sed_and_done是正确的。在Red Hat VM上,如果我断开NIC的连接,ethtool会立即显示“检测到链接:否”而不是“检测到链接”:是,并且ip link show显示而不是,但是ifconfig -a显示UP BROADCAST MULTICAST MTU:1500 Metric:1,与连接NIC时相同。

– Adi Inbar
17年5月4日在18:16

#5 楼

dmesg | grep eth


您应该看到所有状态更改

评论


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

– Brian B
13年3月20日在15:30

dmesg在Slackware 14.0上需要root用户

– AnonymousLurker
13年8月30日在14:20

不,不是。我刚刚检查了一下,尽管它在eth0设备上对我有效,但在eth2设备上却不起作用。

– Hi-Angel
15年5月18日在10:02

#6 楼

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


#mii-tool


评论


mii-tool已弃用,不适用于GbE接口。

–戴夫·切尼
09年5月31日下午3:59

@DaveCheney#mii-tool eth0:协商的1000baseT-FD流控制,链接正常

–stolsvik
2011年7月21日11:00



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

–大卫·拉米雷斯(David Ramirez)
2014年7月9日在22:44

#7 楼

要快速添加到@goo的答案中,您可以按以下方式解释ip linkip 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层已启动。

评论


很好的解释。谢谢

– Amandeep Singh
19/12/16在19:31

#8 楼

您可以使用以下命令获取完整的详细信息

ethtool eth0


如果您只想查看链接状态,请使用下面的命令

mii-tool eth0


#9 楼

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

ifplugstatus


或特定接口(例如eth0):

ifplugstatus eth0


#10 楼

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

评论


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

– Sopalajo de Arrierez
2014-10-28 23:44