适合初学者的 17 个最佳 Linux 网络和故障排除命令 - 夜莺博客

适合初学者的 17 个最佳 Linux 网络和故障排除命令

Linux 网络排障从来不是靠单个命令解决的,而是把主机名、DNS、连通性、路由、端口、抓包和进程占用几个维度组合起来逐层排查。本文整理了 17 个系统原生自带的高频网络命令,按「查看本机身份、验证 DNS、验证连通性、查看连接、定位链路、深入抓包」六大排障场景给出选型建议和可直接套用的示例,适合刚接触 Linux 运维和 SRE 工作的初学者快速上手。

命令按排障场景怎么选

排障场景 推荐命令 主要用途
查看本机身份和网卡 hostname、ip 主机名、IP、接口、路由
验证 DNS host、dig、nslookup 正向/反向解析、记录类型
验证连通性 ping、curl、wget、nc、telnet ICMP、HTTP、TCP 端口
查看连接状态 ss、lsof 监听端口、已建立连接、端口占用
定位链路问题 traceroute、mtr 路由跳数、链路丢包和延迟
深入分析流量 tcpdump 抓包和协议层证据

基础类命令

hostname 与 host

hostname                          # 查看主机名
hostnamectl set-hostname aliyun01 # 设置主机名
host 8.8.8.8                      # 反向解析
host flashcat.cloud               # 正向解析

ping 连通性测试

ping -c 10 flashcat.cloud        # 限制探测 10 个包

连接与端口类命令

curl 多协议排障

curl -v telnet://192.168.33.10:22   # 检查 22 端口
curl https://example.com             # 检查 Web 服务

ss 查看 socket 状态

ss -tulnp    # 列出所有监听端口

链路与抓包类命令

traceroute / mtr 定位链路

traceroute example.com
mtr example.com        # 持续监测丢包与延迟

tcpdump 抓包取证

sudo tcpdump -i eth0 -c 10        # 抓 eth0 前 10 个包
sudo tcpdump -i any port 80 -w cap.pcap

当普通命令只能证明「连不上」但解释不了「为什么」时,就用 tcpdump 抓包确认 SYN、ACK、RST、DNS 请求和重传等协议层证据。更系统的抓包方法可参考本站的《使用 tcpdump 捕获网络数据包》。

ip 命令家族:取代 ifconfig 与 route 的统一工具

如果只允许掌握一个网络命令,应该选 ip。它把地址、链路、路由、邻居表、命名空间收进同一个工具,输出比 ifconfig 和 route 更完整,而且在所有现代发行版上默认可用。

ip -br addr                  # 简要列出所有接口与地址
ip link show eth0            # 链路层状态:UP / DOWN / MTU
ip link set eth0 up          # 启用网卡
ip route show                # 路由表
ip route get 8.8.8.8         # 查看到某个目标实际会走哪条路由
ip neigh show                # ARP/ND 邻居表,排查同网段不通
ip -s link show eth0         # 收发包与错误计数
ip netns list                # 网络命名空间列表

其中 ip route get 是被低估最多的命令。当主机有多网卡、多个默认网关或者策略路由时,靠肉眼读路由表容易得出错误结论,而它直接给出内核对该目标地址的实际选路结果,包括出口网卡和源地址。

另外要看 ip -s link 里的错误计数。RX errors 持续增长通常指向线缆、光模块或双工不匹配,TX dropped 增长往往是队列溢出或上游限速。这些信号比反复 ping 更有诊断价值,也更容易在事后回溯时找到时间点。

dig 的输出怎么读:状态码比答案更重要

dig example.com                  # 完整输出
dig +short example.com           # 只输出结果
dig @8.8.8.8 example.com         # 指定 DNS 服务器
dig -x 8.8.8.8                   # 反向解析
dig +trace example.com           # 从根域逐级追踪解析过程
dig MX example.com               # 查询指定记录类型
resolvectl status                # 查看本机实际使用的 DNS

完整输出里最值得看的不是 ANSWER SECTION,而是第一段的状态行。四类状态码对应完全不同的处理方向:NOERROR 表示解析成功,若此时答案为空要检查记录类型是否正确;NXDOMAIN 表示域名不存在,问题在 DNS 记录配置而不在网络链路;SERVFAIL 表示权威服务器或中间解析器出错,通常与 DNSSEC 验证失败或上游不稳定有关;REFUSED 表示所查询的服务器不接受该请求,多半是 /etc/resolv.conf 指向了不该指向的地址。

最实用的一个对比测试是:如果 dig @8.8.8.8 example.com 能解析而直接 dig 失败,说明问题在本机配置的解析器上;反过来则说明本地解析器正常,是外部链路或上游 DNS 的问题。这个测试能在一分钟内切分两类完全不同的故障域。更系统的用法可以参考《dig 与 nslookup 命令详解》。

ss 与连接状态:TIME_WAIT 和 CLOSE_WAIT 说明什么

ss -tulnp                 # 所有监听端口及所属进程
ss -tan state established # 已建立的连接
ss -s                     # 连接状态汇总统计
ss -tan state time-wait | wc -l
ss -tnp dst 10.0.0.5      # 到某个地址的连接
ss -tlnp sport = :8080    # 谁在占用 8080 端口

这些状态里有两个最容易被误判。TIME_WAIT 数量很高是正常现象,它是主动关闭方等待对端确认时保持的状态,属于 TCP 协议的正常行为,本身不代表故障;只有当数量接近内核 net.ipv4.ip_local_port_range 允许的范围、影响到新建连接时,才需要调整内核参数而不是修改应用代码。

CLOSE_WAIT 则相反,它几乎总是应用层问题:对端已经关闭连接,而本机进程没有调用 close。持续增长的 CLOSE_WAIT 说明程序在释放文件描述符上存在缺陷,通常伴随「连接数缓慢涨满、进程必须定时重启」的现象。看到 CLOSE_WAIT 应该去查应用代码和框架用法,而不是继续查网络。

端口连通性测试:nc、telnet 与 curl 的区别

nc -zv web01 443            # 只测试 TCP 是否可建立
nc -zuv 10.0.0.5 53         # 测试 UDP 端口
nc -zvw3 web01 443          # 3 秒超时,避免长时间挂起
timeout 5 bash -c "

这三个命令对应的排查层次完全不同。UDP 没有连接的概念,nc -zuv 的「成功」只能说明没有立刻收到 ICMP 端口不可达,并不能证明服务正常,这也是 DNS 排障中最容易误判的一点。

更需要注意的是交叉验证:nc 显示端口 open 而 curl 失败,说明 TCP 层没问题、问题在应用层,方向应转向证书、HTTP 状态码、Host 头和反向代理配置;反过来 nc 显示 closed 而应用日志一切正常,则多半是中间有防火墙丢包或安全组未放行。

用抓包定位三类疑难问题

普通命令只能证明「连不上」,抓包能回答「为什么」。以下三类问题几乎只能靠抓包定位。

sudo tcpdump -i any -n port 53              # 观察 DNS 请求与响应
sudo tcpdump -i any -n 'tcp[tcpflags] & tcp-rst != 0'
sudo tcpdump -i any -n 'tcp[tcpflags] & tcp-syn != 0'
sudo tcpdump -i any -n -w cap.pcap host 10.0.0.5 and port 443

DNS 慢:抓 53 端口。只看到请求没有响应,说明上游没有回包,问题在 DNS 服务器或链路上;如果响应很快而应用仍然慢,说明慢在别处,应转向抓 443 端口。

连接被重置:抓 RST。目标端口收到 RST 说明服务没有监听或被防火墙拒绝;若在收到 SYN 之后立刻出现 RST,多半是中间设备注入的,此时要检查安全组和负载均衡器的健康检查策略。

传输卡住:观察重传与窗口变化。出现大量重复确认和重传,通常指向丢包或 MTU 不匹配。这类问题在 ping 小包时完全正常,只有传输大包时才出现,属于典型的 MTU 黑洞,需要用 ping -M do -s 1400 逐级调整报文长度来定位。

常见问题

为什么 ss 和 netstat 的结论不一致?现代发行版上 netstat 已被弃用,部分版本通过 net-tools 兼容包提供,输出格式和状态过滤能力都弱于 ss,建议统一使用 ss。

排障时先看 DNS 还是先看连通性?先看 DNS。名称解析失败会让所有依赖域名的测试同时失败,看起来像是「全网不通」,实际是单一原因造成的假象。

容器环境里这些命令还适用吗?大部分适用,但容器有独立的网络命名空间,需要进入命名空间或用 nsenter 才能看到宿主机的连接状态。

抓包会不会影响性能?生产环境抓包要限制范围和数量:用 -c 限制包数、用过滤器缩小范围,并避免把文件写到同一块繁忙的磁盘上。

小结

把这张表当作排查起点:先 ip 看本机、ping 测连通、dig 查 DNS、ss 看端口、mtr 看链路,最后用 tcpdump 拿协议层证据。相关实战可参考迈络思设备进入 Shell 模式的授权处理与DELL EMC ME4084 管理 IP 设置。

原文链接:https://flashcat.cloud/blog/list-linux-networking-troubleshooting-and-commands-beginners/