Linux如何检查网口是否插了网线

如何使用Bash命令和Ethtool检测物理网络电缆连接

检测是否连接了物理网线

测试“eth0”网络接口的物理电缆连接:

# cat /sys/class/net/eth0/carrier 
1

数字1表示网线已经连接到网卡的插槽。

测试第二个网络接口eth1

# cat /sys/class/net/eth1/carrier 
cat: /sys/class/net/eth1/carrier: Invalid argument

表示“eth1 网络接口处于断电状态”

可以通过以下Linux命令确认:

# cat /sys/class/net/eth1/operstate 
down

无法确定是否连接了网线,将网口拉起:

# ip link set dev eth1 up

我们可以再次检查网卡物理电缆连接:

# cat /sys/class/net/eth1/carrier 
0

说明网口是没有插网线的。

下面的命令将列出Linux系统上的所有可用网络接口:

# for i in $( ls /sys/class/net ); do echo $i; done
eth0
eth1
lo
wlan0

使用Bash for循环,我们现在可以检查所有网口是否插了网线:

# for i in $( ls /sys/class/net ); do echo -n $i: ; cat /sys/class/net/$i/carrier; done
eth0:1
eth1:0
lo:1
wlan0:cat: /sys/class/net/wlan0/carrier: Invalid argument

使用Ethtool检查是否连接了网线

在Ubuntu,Debian和Linux Mint上安装Ethtool:

$sudo apt install ethtool

在CentOS,Fedora,Almalinux和Red Hat中安装Ethtool:

$sudo dnf install ethtool

在Arch Linux和Manjaro上安装Ethtool:

$sudo pacman -S ethtool

检查eth1网口是否插了网线

#  ethtool eth1 | grep Link\ d
	Link detected: no

使用Bash for循环检查所有的网口:

# for i in $( ls /sys/class/net ); do echo -n $i; ethtool $i | grep Link\ d; done
eth0	Link detected: yes
eth1	Link detected: no
lo	Link detected: yes
wlan0	Link detected: no

上述ETHTOOL输出的唯一问题是如果网络接口关闭,它不会检测到连接的电缆。
考虑以下示例:

# ethtool eth0 | grep Link\ d
        Link detected: yes
# ip link set dev eth0 down
# ethtool eth0 | grep Link\ d
        Link detected: no
日期:2020-07-07 20:56:15 来源:oir作者:oir