如何查找LAN网线连接对应的Linux系统网络接口
设备上多出来的非物理接口一般是本地环回、Docker/虚拟机生成的虚拟网卡、网桥接口,用下面几个方法可以精准定位插了LAN线的物理口对应的系统名称:
方法1:ethtool点亮端口LED(最直观零误差)
记好你插了LAN线的物理口位置,对每个待排查的接口执行以下命令,执行后观察物理口的状态灯:ethtool -p <待测试接口名> 5
命令末尾的5代表让接口指示灯持续闪烁5秒,比如执行ethtool -p enp0s3 5时,你插线的那个物理口开始规律闪烁,enp0s3就是对应的接口名。如果系统没有ethtool命令,先对应发行版安装即可:Debian/Ubuntu系执行apt install ethtool,RHEL/CentOS系执行yum install ethtool。注意:少数老旧网卡、特殊定制硬件或者嵌套虚拟化环境下该命令可能不生效,换用后续方法即可。
方法2:匹配物理链路连通状态
保持目标端口插着可正常通信的网线,把另外两个物理端口的网线暂时拔掉,逐个读取接口的载波状态:cat /sys/class/net/<待测试接口名>/carrier
返回值为1代表该接口有物理链路连接(也就是插了通的网线),返回值为0代表无链路连接。排查时可以先过滤虚拟接口:名字叫lo的是本地环回接口,名字带docker、veth、br-、virbr、tun、tap前缀的都是虚拟接口,直接排除,剩下3个就是对应硬件的3个物理口,只需要排查这3个即可。虚拟接口没有对应的/sys/class/net/<接口名>/device目录,也可以用这个规则做二次过滤。方法3:插拔网线匹配内核日志
终端执行dmesg -w开启实时日志监控,然后把你插在目标物理口的网线拔下再插回,终端会实时打印链路变动的日志,日志里会直接标注对应的接口名,类似如下输出:[24561.32791] r8169 0000:02:00.0 enp2s0: Link is Down [24566.51243] r8169 0000:02:00.0 enp2s0: Link is Up - 1Gbps/Full - flow control rx/tx输出里的
enp2s0就是你刚才插拔网线对应的物理接口名。
内容的提问来源于stack exchange,提问作者Sudip

