最准判断依据是ethtool输出的link detected: yes,它直接读取phy芯片状态;ip link show中state up仅表示接口启用,需同时有lower_up才表明物理链路就绪,若为no-carrier则说明硬件未连通。

网卡是否连接正常,不能只看 ip link show 里有没有 UP —— 很多时候它显示 state UP,但实际网线没插、交换机断电、PHY 层协商失败,照样不通。
怎么看物理链路到底通没通
最准的判断依据是 ethtool 输出里的 Link detected: yes。这个值直接读取网卡 PHY 芯片状态,不依赖驱动或内核网络栈。
- 执行
sudo ethtool eth0(把eth0换成你的实际网卡名,比如enp0s3) - 如果看到
Link detected: no,基本可以确定:网线没插、松动、损坏,或对端设备(交换机/路由器)没上电、端口被 shutdown -
Speed显示Unknown!或10Mb/s却期望千兆,也大概率是物理层问题,不是配置问题 - 注意:某些老旧网卡或 USB 网卡可能不支持
ethtool,这时可退而求其次用mii-tool eth0(已逐步淘汰,仅作备用)
为什么 ip link show 里有 UP 还是连不上
ip link show eth0 的 state UP 只表示接口被内核启用,LOWER_UP 才代表物理链路就绪。两者必须同时存在才算“软硬都通”。
- 常见错误现象:
state UP但没有LOWER_UP,反而有NO-CARRIER—— 这就是典型的“软件开了,硬件没连上” - 如果
ip link show显示state DOWN,先尝试sudo ip link set eth0 up;如果仍无LOWER_UP,说明问题在物理层或驱动,不是命令没敲对 -
/sys/class/net/eth0/operstate文件返回up,也不等于链路通 —— 它只是内核对“操作状态”的主观判断,必须和ethtool结果交叉验证
NetworkManager 管理下怎么确认“已连接”
如果你的系统跑着 NetworkManager(桌面环境或多数现代发行版默认启用),nmcli device status 是最贴近用户语义的状态视图。
- 运行
nmcli device status,找到对应网卡那一行,STATE列为connected才算 NetworkManager 认为它“连好了” -
unavailable表示无物理信号(等同于ethtool的no),disconnected表示物理有信号但未激活连接(比如没配 DHCP 或静态 IP) - 别忽略服务状态:
systemctl is-active NetworkManager返回inactive时,nmcli就是废的,得先sudo systemctl start NetworkManager
排查顺序错了,90% 的时间都浪费在无效操作上
真正卡住人的,往往不是命令不会用,而是跳过物理层直接去查 IP、路由、DNS。一个没插网线的接口,ip addr show 里哪怕有地址,也是假活。
- 第一步永远固定:
sudo ethtool eth0 | grep "Link detected"—— yes/no 立判真假 - 第二步看
ip link show eth0是否同时含UP和LOWER_UP - 第三步才查
ip addr show eth0有没有有效 IPv4 地址(不是fe80::/64那种) - 最后才是
ping -c3 8.8.8.8和nmcli device status这类高层验证











