lee.2m 2025-11-04 11:45 采纳率: 97.7%
浏览 1
已采纳

Linux如何查看系统中所有网卡信息?

如何在Linux系统中查看所有网卡的详细信息,包括IP地址、MAC地址、接口状态及速率等?当系统中存在多个物理或虚拟网卡时,使用常规ifconfig命令可能无法显示全部信息(尤其在较新的发行版中已被弃用),应采用哪些替代工具(如ip addr、nmcli、lshw或ethtool)来全面获取网卡配置与硬件详情?如何通过命令行快速识别激活状态、传输速率及驱动信息?
  • 写回答

1条回答 默认 最新

  • 程昱森 2025-11-04 11:58
    关注

    1. 引言:Linux网卡信息查看的演进与挑战

    在传统的Linux系统管理中,ifconfig曾是查看网络接口状态的标准工具。然而,随着Linux内核和网络子系统的演进,该命令已被标记为“废弃”(deprecated),尤其在较新的发行版如Ubuntu 20.04+、CentOS 8/RHEL 8及Fedora中默认不再安装net-tools包。这导致运维人员无法依赖ifconfig获取完整的网卡信息,尤其是在存在多个物理或虚拟网卡(如eth0、ens33、veth、tun/tap、bridge、bonding)的复杂环境中。

    现代Linux系统推荐使用更强大且功能丰富的替代工具,例如ip命令家族、nmclilshwethtool等,它们不仅能显示IP地址、MAC地址、接口状态,还能深入揭示驱动信息、链路速率、双工模式及硬件细节。

    2. 基础层面:使用ip addr查看IP与MAC信息

    ip addr(即ip address show)是目前最基础也是最常用的网络接口信息查看命令,属于iproute2工具集的一部分。

    # 查看所有网卡的基本配置
    ip addr show

    输出示例:

    接口名状态IP地址MAC地址
    ens33UP192.168.1.10/2400:0c:29:aa:bb:cc
    loUP127.0.0.1/800:00:00:00:00:00
    docker0UP172.17.0.1/1602:42:ac:11:00:01
    vethabc123UPda:34:56:78:9a:bc

    通过该命令可快速识别每个接口的激活状态(UP/DOWN)、IPv4/v6地址分配情况以及对应的MAC地址。

    3. 中级分析:利用ip linkethtool获取链路层详情

    虽然ip addr提供IP层信息,但要查看接口的链路状态、传输速率和双工模式,需结合ip linkethtool

    # 查看接口链路状态
    ip link show
    
    # 查询特定网卡的速率与双工信息
    ethtool ens33

    ethtool输出关键字段包括:

    • Speed: 当前协商速率(如1000Mb/s)
    • Duplex: 全双工(Full)或半双工(Half)
    • Port: 接口类型(TP表示双绞线)
    • Auto-negotiation: 是否启用自动协商
    • Link detected: 链路是否物理连通

    4. 高级洞察:借助lshw获取硬件级网卡信息

    当需要查看网卡的PCI设备ID、厂商型号、驱动程序名称时,lshw(list hardware)是最权威的工具之一。

    # 获取所有网络接口的硬件详情
    sudo lshw -class network

    典型输出片段:

      *-network
           description: Ethernet interface
           product: 82545EM Gigabit Ethernet Controller
           vendor: Intel Corporation
           physical id: 1
           bus info: pci@0000:02:00.0
           logical name: ens33
           version: 01
           serial: 00:0c:29:aa:bb:cc
           size: 1Gbit/s
           capacity: 1Gbit/s
           width: 64 bits
           clock: 66MHz
           capabilities: pm pcix bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
           configuration: autonegotiation=on driver=e1000 driverversion=7.3.21-k8-NAPI duplex=full firmware=N/A latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
           resources: irq:19 memory:dfed0000-dfefffff ioport:ef00(size=8)
    

    此信息对故障排查、驱动升级、兼容性验证至关重要。

    5. 网络管理集成:使用nmcli统一查看NetworkManager控制下的网卡

    在桌面或云环境中广泛使用的NetworkManager可通过nmcli命令行工具统一管理网络配置。

    # 列出所有网络接口及其管理状态
    nmcli device status
    
    # 显示详细连接信息
    nmcli connection show

    输出表格示例:

    DEVICETYPESTATECONNECTIONMANAGED
    ens33ethernetconnectedWired connection 1yes
    loloopbackunmanaged--no
    wlan0wifidisconnected--yes

    nmcli特别适用于混合环境(有线/无线/VPN),并能反映接口是否受NetworkManager管理。

    6. 综合诊断流程图:多工具协同排查网卡问题

    graph TD A[开始] --> B{是否存在网络连接?} B -- 否 --> C[执行 ip link show] C --> D{接口状态是否UP?} D -- 否 --> E[ip link set dev <iface> up] D -- 是 --> F[运行 ethtool <iface>] F --> G{Link detected?} G -- 否 --> H[检查物理连接或交换机端口] G -- 是 --> I[查看 ip addr 是否有IP] I -- 无 --> J[配置IP或检查DHCP] I -- 有 --> K[测试连通性 ping] K --> L[完成诊断]

    7. 实战建议:编写脚本批量采集网卡信息

    对于拥有大量服务器的企业环境,可编写Shell脚本自动化收集关键指标:

    #!/bin/bash
    echo "=== 网卡信息采集报告 ==="
    echo
    
    for iface in $(ip link show | awk -F': ' '/^[0-9]/ {print $2}' | grep -v '^lo$'); do
        echo "接口: $iface"
        echo "  MAC: $(cat /sys/class/net/$iface/address)"
        ip addr show $iface | grep 'inet ' | awk '{print "  IP:", $2}'
        if [[ -x "$(command -v ethtool)" ]]; then
            speed=$(ethtool $iface 2>/dev/null | grep Speed | awk '{print $2}')
            echo "  速率: $speed"
        fi
        driver=$(basename $(readlink /sys/class/net/$iface/device/driver 2>/dev/null))
        echo "  驱动: ${driver:-N/A}"
        echo
    done

    此类脚本可用于巡检、资产登记或变更审计。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 11月5日
  • 创建了问题 11月4日