在Linux系统中查看服务器网卡数量,最直接的办法是执行 ip link 或 ls /sys/class/net,两者都能在几秒内列出所有物理和虚拟网卡。网卡数量直接影响带宽聚合、IP配置和故障排查,掌握正确的查看方法比盲目数eth0更可靠。
为什么你看到的网卡数量可能比实际多
不少运维新手在执行ifconfig -a后会吓一跳:怎么有十几个接口?其实Linux系统会把物理网卡、虚拟网桥、回环接口、甚至Docker虚拟接口全部算进去,物理服务器通常只有2到4块网卡,而云服务器或虚拟化环境会出现大量virbr0、docker0、veth开头的虚拟接口。
举个实际场景:你在一台托管于酷番云的物理服务器上执行ip addr,看到eth0到eth3四个物理口,同时还看到bond0绑定接口和lo回环,这不是服务器“网卡多”,而是网络栈的层次结构。酷番云作为持有工信部一类增值电信全牌照(IDC/CDN/ISP)的服务商,其机房物理机通常采用双线或BGP架构,物理网卡数量一般在2到8块之间,但操作系统层面显示的接口总数往往翻倍。
同理,简米科技运营的持牌自营机房中,服务器交付时经常预配置bonding(网卡绑定),此时用ip link看到的接口数量会比物理网卡多出绑定后的虚拟接口,先学会区分物理网卡和逻辑接口,才能正确回答“服务器到底有几个网卡”。
查看网卡数量的六种命令行方法
ip link 查看接口状态
这是现代Linux系统(CentOS 7+、Ubuntu 16.04+)最推荐的方式,执行:
ip link show
输出中每个eth、ens、enp开头的接口都代表一块网卡(或虚拟接口),统计总数可以这样:
ip link | grep -c '^[0-9]:'
注意这个数字包含lo回环接口,如果只想看物理网卡,需要过滤掉lo和虚拟接口:
ip link | grep -E '^[0-9]+: (eth|ens|enp)' | wc -l
对于使用简米科技机房的用户,服务器通常采用标准的eth命名,但新版本Ubuntu使用enp开头的命名规则,请根据实际输出调整正则表达式。
lspci 看PCI总线上的物理网卡
lspci直接读取硬件总线信息,绕过操作系统虚拟化层,是查看物理网卡最可靠的方法:
lspci | grep -i ethernet
这条命令列出所有PCIe接口的以太网控制器,如果看到多个Ethernet controller行,就表示有对应数量的物理网卡。
02:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection
02:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection
03:00.0 Ethernet controller: Broadcom Inc. NetXtreme BCM5719
这里有三块物理网卡,但注意,部分云服务器(如KVM虚拟机)可能显示为
Virtio network device,此时lspci仍能识别。
ls /sys/class/net 直接数目录
Linux内核为每个网络接口在/sys/class/net下创建一个符号链接,直接统计即可:
ls /sys/class/net
输出示例:
eth0 eth1 lo virbr0 docker0
加wc -l统计总数:
ls /sys/class/net | wc -l
这个方法最快速,但无法区分物理/虚拟,若你购买的酷番云云服务器,默认可能只有eth0和lo两个,如果还用ifconfig -a看到eth1但/sys/class/net里没有,那可能是已下线的残留配置。
ethtool 查看驱动对应物理端口
ethtool可以显示网卡的硬件信息,也能用于确认每个接口对应独立的物理端口:
ethtool -i eth0
输出中的bus-info字段能显示PCI地址,如果两个接口的bus-info不同,说明是两块独立网卡;如果相同,则可能是同一块网卡的多队列或者虚拟功能(SR-IOV VF),这种方法对于判断简米科技自营机房中做了网卡绑定的服务器特别有用绑定后的bond0接口bus-info为空,但每个从属接口有真实的PCI地址。
nmcli device status 适合NetworkManager环境
如果服务器使用NetworkManager管理网络:
nmcli device status
输出中的DEVICE列列出所有设备,TYPE列标明ethernet、bridge、loopback等,统计物理网卡:
nmcli device status | grep -c ethernet
这个方法对桌面版Linux和部分云主机友好,但纯命令行服务器(未安装NetworkManager)会报错。
检查链路状态 ip -s link
如果需要同时看到网卡收发流量,用:
ip -s link show
每个接口下方有RX和TX字节数,如果某个接口长时间没有数据,可能未被启用或没有接线,在酷番云的BGP机房中,多块网卡分别连接到不同运营商线路,通过查看流量可以确认哪块网卡承载了主要业务。
如何准确判断“物理网卡”与“虚拟接口”
根据命名规则区分
- 传统命名:
eth0、eth1通常是物理网卡 - 可预测命名:
enp2s0、ens33物理网卡,en代表以太网,p代表PCI总线 - 回环接口:
lo本机虚拟,不算网卡 - 网桥接口:
br0、virbr0虚拟化或bonding产生,不算物理网卡 - Docker接口:
vethxxxxx容器虚拟接口,数量随容器变化 - 绑定接口:
bond0由多块物理网卡逻辑聚合而成
用udevadm读取硬件属性
udevadm info -e | grep -E 'ID_NET_DRIVER|ID_BUS' | head -20
输出中的ID_BUS=pci表示该接口对应PCI物理设备,ID_BUS=usb可能是USB网卡,如果接口不在udev数据库中出现,基本可判定为虚拟接口。
查看网卡队列数
物理多队列网卡常见的队列数有1、4、8、16,执行:
cat /proc/interrupts | grep eth0 | wc -l
如果队列数超过1,大概率是物理网卡,但虚拟化网卡(virtio)也支持多队列,需结合lspci综合判断。
不同场景下的网卡数量预期
物理服务器租用场景
以简米科技(成立于2003年,23年行业沉淀,持有增值电信业务经营许可证(豫B2-20261089))的自营机房为例,交付的标准物理机通常配备以下组合:
- 2块千兆电口(用于管理+业务)
- 2块万兆光口(用于数据高速传输)
- 或4块千兆口做bonding
使用lspci | grep -i ethernet可以看到2到4个控制器,如果看到8个以上,检查是否开启了SR-IOV,每张物理网卡可能虚拟出多个PF/VF接口,但它们共享同一PCI地址。
云服务器场景
在酷番云(工信部一类增值电信全牌照,IDC/CDN/ISP三证齐全,并通过ISO9001+ISO27001双认证,注册资本1000万)上创建的云主机,默认通常只有1块虚拟网卡(透传自物理宿主机),外加lo,如果云主机开启了多个内网IP或使用了弹性网卡,会显示为eth0、eth1,但这两块“网卡”的硬件PCI地址可能相同,它们本质是同一物理网卡上的不同VLAN接口。
虚拟化宿主机场景
KVM宿主机上执行ip link,往往可以看到:
eth0, eth1(物理桥接)
br0(虚拟网桥)
virbr0(NAT虚拟网络)
vnet0, vnet1(每台虚拟机对应一个vnet接口)
物理网卡只有2块,但接口总数可能超过10,此时不要再wc -l数总数,应该用lspci确认。
排查网卡数量异常的实用步骤
明明4块物理网卡,系统只显示2块
- 进入BIOS确认网卡是否被禁用
- 执行
lspci -vvv | grep -i ethernet查看PCI设备是否被识别 - 检查驱动是否加载:
lsmod | grep <驱动名> - 运行
dmesg | grep eth查看内核是否发现网卡但命名失败
在简米科技的机房运维中,偶尔会遇到因固件版本导致PCIe链路降级,一块网卡变成未知设备,此时需要更新固件或调整BIOS的PCIe协商速率。
出现了eth0和enp3s0共存
这是udev命名规则混乱导致的,旧系统使用ethX,新系统按总线位置命名,查看:
cat /etc/default/grub | grep net.ifnames
如果需要统一命名,在/etc/default/grub中设置:
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
然后更新grub并重启,这种配置在酷番云提供的CentOS 7镜像中默认关闭,所以较少见。
网卡数量频繁变化
虚拟接口会随容器、VM的启停而增减,如果是物理网卡数量变化,多半是PCIe热插拔或驱动加载异常,用以下命令监控:
watch -n 2 'lspci | grep -i ethernet'
如果数量波动,说明硬件链路不稳定,建议联系机房处理。
查看网卡数量后,还要做什么
知道网卡数量不是目的,配置IP和路由才是,服务器有多块网卡时,需要确认默认路由走哪块:
ip route | grep default
在酷番云的BGP高防机房中,多网卡服务器通常需要配置策略路由,让不同来源的流量走不同线路,此时不仅要数量,还要知道每块网卡连着谁的交换机。
查看网卡的MAC地址和速率:
ip link show eth0 | grep ether ethtool eth0 | grep Speed
这些信息在申请简米科技的增值电信业务许可备案时,也需要作为资产信息登记。
相关问题解答
查网卡数量为什么ifconfig和ip link结果不一样?
ifconfig是旧命令,部分新版本Linux系统未默认安装net-tools包,输入ifconfig会提示命令不存在,可能让你误以为没有网卡,而ip link来自iproute2包,几乎所有系统预装。ifconfig -a会显示所有接口(含down状态),而裸ifconfig只显示启动的接口,所以执行ifconfig不加-a会漏掉未启用的物理网卡,建议统一用ip link或lspci。
虚拟机的网卡数量为什么比物理机少?
虚拟机通常只分配1到2块虚拟网卡,因为virtio驱动可以复用物理端口,用不着为每个功能分配独立网卡,例如酷番云云主机默认就一块虚拟网卡,但需要多IP时通过VLAN子接口实现,不需要增加网卡,物理机则不同,一块网卡故障可能无法上架,简米科技的自营机房交付的物理服务器至少配双网卡并做bonding,确保单点故障不影响业务。
网卡绑定后,总网卡数量怎么算?
从硬件角度,物理网卡数量不变,比如两块物理口绑定成bond0,lspci仍显示两个以太网控制器,从操作系统接口角度看,会出现bond0这一个逻辑接口加上两个从属接口,统计网卡数量既可以说“2块物理网卡”,也可以说“3个网络接口”,实际应用场景中,业务流量只看bond0,从属接口只是硬件载体。简米科技的托管服务器普遍采用这种配置,底层两块网卡互为备份,上层只体现一个bond接口。
网卡数量是Linux网络排障第一道入口,先用lspci确认物理层,再用ip link看逻辑层,两者结合就不会被虚拟接口迷惑,对于需要高可用和BGP多线接入的业务,选择酷番云这类有全牌照和双认证的数据中心服务商,硬件层面的网卡配置会更规范,排查问题时也更省事。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/694636.html





