当你发现Linux电脑无法上网时,第一个要检查的就是网卡状态。我遇到过太多次网线插着却显示"无网络连接"的情况,后来发现其实用几个简单的命令就能快速定位问题。咱们先从最基础的有线网卡检测开始,这些命令就像网络工程师的听诊器,能帮你听出网络的心跳。
ip link命令是我的第一选择,它就像网络接口的体检报告单。直接输入ip link show,你会看到类似这样的输出:
bash复制2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:4a:2d:8c brd ff:ff:ff:ff:ff:ff
这里有几个关键指标要特别注意:
有一次我帮同事排查网络问题,他的ip link输出显示state DOWN,但网线明明插着。后来发现是网卡被禁用了,用sudo ip link set eth0 up就解决了。这种基础问题其实占了网络故障的很大比例。
当ip link显示正常但网络还是不通时,就该祭出专业工具ethtool了。这个命令能告诉你网卡和交换机之间的"悄悄话":
bash复制ethtool eth0
重点关注输出最后的这几行:
bash复制Speed: 1000Mb/s
Duplex: Full
Auto-negotiation: on
Link detected: yes
我遇到过最坑爹的情况是网卡显示连接正常,但实际速度只有100Mbps。用ethtool一看,原来是自动协商出了问题。这时候可以尝试强制设置:
bash复制sudo ethtool -s eth0 speed 1000 duplex full autoneg off
不过要注意,强制设置可能会引发兼容性问题。有次我给客户这么设置后,他的打印机突然不能用了,最后发现是打印机网卡只支持100Mbps。
物理层没问题后,就该看看IP地址等网络层配置了。ip addr命令在这里大显身手:
bash复制ip addr show eth0
正常连接时你会看到类似这样的输出:
bash复制inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
如果只有link/ether行没有inet行,说明网卡没获取到IP地址。这时候可能是DHCP服务出了问题,可以尝试手动分配IP测试:
bash复制sudo ip addr add 192.168.1.100/24 dev eth0
sudo ip route add default via 192.168.1.1
记得有次办公室网络瘫痪,所有人都在抱怨上不了网。我用ip addr检查发现大家都获取到了169.254开头的IP,这是Windows的自动私有IP。最后查明是主路由器挂了,临时用备用路由器顶替才恢复。
无线网络比有线复杂得多,信号强度、加密方式、频段选择都会影响连接质量。我调试过上百个无线网络,总结出这套排查流程,帮你快速定位WiFi问题。
首先得确认系统识别了你的无线网卡。很多人在这一步就踩坑,特别是用USB无线网卡的时候:
bash复制lspci | grep -i wireless # 内置网卡
lsusb # USB网卡
如果没有任何输出,说明驱动可能没装好。我有次用某品牌的USB网卡,折腾半天才发现需要手动安装驱动。另一个常见问题是网卡被rfkill软阻塞:
bash复制rfkill list
看到Soft blocked: yes的话,用这个命令解锁:
bash复制rfkill unblock wifi
无线网络最让人头疼的就是信号问题。我推荐用现代工具iw来检查:
bash复制iw dev wlan0 link
输出中的signal: -67 dBm特别重要,这是我的经验值参考:
曾经有个客户抱怨视频会议总是卡顿,我去现场用iw检测发现信号只有-82 dBm。最后把路由器从墙角移到高处,信号立即提升到-58 dBm,问题解决。
要查看周围有哪些WiFi,这个命令比图形界面更强大:
bash复制sudo iw dev wlan0 scan | grep -E "SSID|signal|freq"
输出示例:
bash复制SSID: HomeWiFi
signal: -45.00 dBm
freq: 2412
SSID: Office_Guest
signal: -67.00 dBm
freq: 5745
注意freq大于5000的是5GHz频段,虽然速度快但穿墙能力差。2.4GHz频段穿墙好但速度慢。我家里就是双频分开设置,近距离设备连5GHz,需要穿墙的设备连2.4GHz。
当网络时断时续或者速度异常时,需要更深入的统计信息来定位问题。这些命令就像网络的内窥镜,能让你看到数据流动的细节。
ethtool -S能显示网卡的详细统计信息,对排查丢包问题特别有用:
bash复制ethtool -S eth0 | grep -i error
重点关注这些计数器:
rx_errors/tx_errors:收发错误rx_dropped/tx_dropped:内核丢弃的数据包rx_crc_errors:通常表示物理层问题,比如网线质量差有次机房网络间歇性中断,我们用watch -d ethtool -S eth0实时监控,发现rx_crc_errors在不断增长。最后更换网线后问题消失。
tcptrack是个超好用的实时连接监控工具,需要额外安装:
bash复制sudo apt install tcptrack
sudo tcptrack -i eth0
它会显示所有活跃的TCP连接及其传输速度。我常用它来排查哪个程序在偷跑流量,曾经抓到过一个被入侵的服务器在对外发起DDoS攻击。
虽然命令行很强大,但有时候图形化工具更直观。这里推荐几个我常用的工具,它们和命令行工具配合使用效果更佳。
nmcli是NetworkManager的命令行界面,特别适合桌面用户:
bash复制nmcli device wifi list
这个命令用星级显示信号强度,非常直观:
bash复制IN-USE SSID MODE CHAN RATE SIGNAL BARS SECURITY
HomeWiFi Infra 6 195 Mbit/s 75 **** WPA2
* Office_WiFi Infra 36 405 Mbit/s 92 ***** WPA2
当需要深度分析网络流量时,Wireshark是不二之选。虽然学习曲线有点陡,但它能让你看到网络通信的每一个细节。我最常用来分析:
记得有次客户的应用连不上API,用Wireshark抓包发现是SSL证书过期了,这个用普通ping测试根本发现不了。