网络排障从下往上走:ping 测连通、ifconfig/netstat 看本机网卡与连接、dig/host/nslookup 查 DNS 解析、ssh/telnet 验端口与登录,yum 则管软件包。

dig

dig - 功能最全的 DNS 查询与排障工具,输出结构化、适合脚本

常用命令

  • dig example.com 查询 A 记录,输出完整应答(QUESTION/ANSWER/AUTHORITY 各段)
  • dig +short example.com 只输出解析结果 IP,最常用、适合脚本取值
  • dig example.com MX 查询 MX 记录(同理可查 AAAA / NS / TXT / CNAME / SOA)
  • dig @8.8.8.8 example.com 指定 DNS 服务器查询,对比不同 DNS 的解析结果
  • dig -x 93.184.216.34 反向解析:IP 查 PTR 记录
  • dig +trace example.com 从根服务器开始逐级迭代查询,排查解析链路在哪一层出问题
  • dig example.com +noall +answer 只显示 ANSWER 段,输出干净
  • dig +short example.com @8.8.8.8 @114.114.114.114 结合多次查询对比国内外 DNS 污染/分区解析
  • dig example.com ANY +tcp 用 TCP 查询(应答过大被截断出现 flags: tc 时改用)
  • dig +dnssec example.com 查询时请求 DNSSEC 签名记录
  • watch -n1 'dig +short example.com' 持续观察解析变化(切换 DNS 后验证生效)

语法格式

dig [@server] [name] [type] [class] [+query-option...] [-option...]

OPTIONS

  • @server 指定要查询的 DNS 服务器(IP 或域名)
  • -x <ip> 反向解析 PTR 记录的简写
  • -p <端口> 指定 DNS 服务器端口(默认 53)
  • +short 精简输出,只给结果
  • +trace 从根开始迭代跟踪整条解析链
  • +noall +answer 关闭所有段落输出后只开 ANSWER 段
  • +tcp 使用 TCP 而非 UDP 查询
  • +time=<秒> / +tries=<次> 设置超时与重试次数
  • +norecurse 关闭递归标志,直接问权威服务器

备注

  • 部分精简系统默认不带 dig:CentOS/RHEL 装 bind-utils,Debian/Ubuntu 装 dnsutils;macOS 自带
  • 与 nslookup 一样,dig 只查 DNS、不读 /etc/hosts
  • ANSWER 段中域名后的数字是剩余 TTL(秒),排查「改了解析为什么没生效」时先看它

host

host - 轻量级 DNS 查询工具,输出简洁,适合快速确认解析

常用命令

  • host example.com 查询域名的 A/AAAA/MX 记录,一行一条结果
  • host example.com 8.8.8.8 指定 DNS 服务器查询
  • host -t mx example.com 查询 MX 记录(同理 -t txt / -t ns / -t cname / -t soa
  • host 93.184.216.34 反向解析:IP 查对应域名(PTR)
  • host -a example.com 查询 ANY 类型并显示完整应答报文(等价 -v -t ANY
  • host -v example.com 详细模式,输出类似 dig 的分段报文
  • host -C example.com 对比各权威 NS 上的 SOA 记录是否一致(排查主从同步)
  • host -W 2 example.com 设置 2 秒超时,避免脚本里长时间卡住

语法格式

host [-aCdlriTvw] [-t type] [-W time] [-R number] name [server]

OPTIONS

  • -t <type> 指定查询记录类型:A / AAAA / MX / NS / TXT / CNAME / SOA / PTR / ANY
  • -a 等价于 -v -t ANY,输出全部记录
  • -v 详细输出模式
  • -C 检查各权威名称服务器的 SOA 一致性
  • -4 / -6 强制仅用 IPv4 / IPv6 传输查询
  • -T 使用 TCP 查询(默认 UDP)
  • -W <秒> 等待应答的超时时间
  • -R <次数> UDP 查询重试次数
  • -r 关闭递归查询

备注

  • host 与 dig、nslookup 同属 bind-utils(Debian 系为 dnsutils)套件:快速看结果用 host,深度排障用 dig
  • 同样只查 DNS,不读 /etc/hosts;要验证系统实际解析顺序(含 hosts)可用 getent hosts example.com

ifconfig

ifconfig - 查看与配置网络接口(IP 地址、掩码、启停等)

常用命令

  • ifconfig 查看所有已启用(UP)网络接口的信息
  • ifconfig -a 查看所有接口,包括未启用的
  • ifconfig eth0 只查看 eth0 接口的信息
  • ifconfig eth0 up 启用 eth0 接口
  • ifconfig eth0 down 禁用 eth0 接口
  • ifconfig eth0 192.168.1.100 netmask 255.255.255.0 为 eth0 临时设置 IP 与子网掩码(重启失效)
  • ifconfig eth0 mtu 1400 修改接口 MTU
  • ifconfig eth0 hw ether 00:11:22:33:44:55 修改接口 MAC 地址(需先 down 掉接口)
  • ifconfig eth0:1 192.168.1.101 给 eth0 添加一个别名子接口(虚拟 IP)
  • ifconfig eth0 promisc 开启混杂模式(抓包场景常用,-promisc 关闭)

语法格式

ifconfig [-a] [-v] [-s] [interface]
ifconfig interface [address [netmask mask]] [options...]

OPTIONS

  • -a 显示所有接口,包括 DOWN 状态的
  • -s 显示简短的统计列表(类似 netstat -i
  • -v 详细模式,显示更多错误信息
  • up 启用指定接口
  • down 禁用指定接口
  • netmask <mask> 设置子网掩码
  • mtu <n> 设置最大传输单元
  • hw ether <mac> 设置硬件 MAC 地址
  • promisc / -promisc 开启 / 关闭混杂模式

备注

  • Linux 上 ifconfig 属于 net-tools 包,已被 iproute2 取代:查看用 ip addr、启停用 ip link set eth0 up/down、配 IP 用 ip addr add 192.168.1.100/24 dev eth0;不少精简发行版(如 CentOS 7+ minimal、部分容器镜像)默认不带 ifconfig
  • macOS/BSD 的 ifconfig 参数风格不同:如 ifconfig en0 inet 192.168.1.100 netmask 255.255.255.0,且没有 -s 统计模式;macOS 查看 Wi-Fi 接口通常是 en0
  • ifconfig 修改的配置都是临时的,重启即失效;持久化需写网络配置文件(如 netplan、NetworkManager、/etc/sysconfig/network-scripts/)

netstat

netstat - 查看网络连接、监听端口、路由表与网络接口统计

常用命令

  • netstat -lnpt 查看正在监听的 TCP 端口及对应进程(Linux,需 root 看全)
  • netstat -an 显示所有连接与监听端口(数字形式,不做域名反解,速度快)
  • netstat -ant 只看 TCP 连接(Linux;macOS 写法 netstat -anp tcp
  • netstat -anv | grep 8080 查找占用 8080 端口的连接(macOS 加 -v 显示 pid)
  • netstat -rn 查看路由表(排查网关、静态路由问题)
  • netstat -i 查看网络接口的收发包统计
  • netstat -s 按协议汇总统计(TCP 重传、UDP 丢包等)
  • netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c 统计各连接状态数量(排查 TIME_WAIT / CLOSE_WAIT 堆积)

语法格式

netstat [-anvlrsi] [-p protocol|program]

OPTIONS

  • -a 显示所有 socket(含监听中的)
  • -n 以数字形式显示地址和端口,不做反向解析
  • -l 只显示监听中的端口(Linux)
  • -p Linux:显示占用的进程 pid/name;macOS:-p tcp/udp 指定协议
  • -t / -u 只看 TCP / UDP(Linux)
  • -r 显示路由表
  • -i 显示网络接口统计
  • -s 按协议显示汇总统计

备注

  • macOS 与 Linux 参数差异很大:Linux 查端口占用用 netstat -lnpt,macOS 用 netstat -anv | grep <port> 或直接 lsof -i :<port>
  • Linux 新系统推荐用 ss(参数风格相同,速度更快);查进程占用端口 lsof -i 通常更直接
  • macOS 本机还可用 nettop -P -m tcp 实时查看各进程的网络流量

nslookup

nslookup - 查询 DNS 域名解析记录的交互式/命令行工具

常用命令

  • nslookup example.com 查询域名的 A/AAAA 记录(走系统默认 DNS)
  • nslookup example.com 8.8.8.8 指定用 8.8.8.8 作为 DNS 服务器查询(排查「是不是本地 DNS 的问题」)
  • nslookup -type=mx example.com 查询邮件交换 MX 记录
  • nslookup -type=txt example.com 查询 TXT 记录(SPF、域名验证等)
  • nslookup -type=ns example.com 查询权威名称服务器 NS 记录
  • nslookup -type=cname www.example.com 查询 CNAME 别名记录
  • nslookup 93.184.216.34 反向解析:由 IP 查 PTR 记录对应的域名
  • nslookup -debug example.com 输出完整应答报文,查看 TTL 等细节
  • nslookup 直接回车进入交互模式,可用 server 8.8.8.8set type=mx 连续查询,exit 退出

语法格式

nslookup [-option ...] [name | -] [server]

OPTIONS

  • -type=<记录类型> 指定查询类型:A / AAAA / MX / NS / TXT / CNAME / SOA / PTR / ANY
  • -query=<记录类型>-type=
  • -debug 显示详细的请求与应答报文
  • -port=<端口> 指定 DNS 服务器端口(默认 53)
  • -timeout=<秒> 设置查询超时时间
  • -retry=<次数> 设置重试次数
  • -vc 强制使用 TCP 查询(默认 UDP)
  • -norecurse 关闭递归查询,只问服务器自己知道的答案

备注

  • 结果中的 Non-authoritative answer 表示答案来自缓存/递归服务器而非权威服务器,属正常现象
  • nslookup 不读取 /etc/hosts,只查 DNS——用它验证「hosts 绑定为什么不生效」会得出错误结论
  • 脚本和精细排障更推荐 dig(输出结构化、可 +short);nslookup 胜在 Linux/macOS/Windows 三平台都自带

ping

ping - 发送 ICMP ECHO 请求测试主机连通性、延迟与丢包

常用命令

  • ping example.com 持续 ping 目标(Linux 默认不停,Ctrl+C 结束并输出丢包率/延迟统计)
  • ping -c 4 example.com 只发 4 个包后自动停止并给出统计(脚本常用)
  • ping -c 100 -i 0.2 10.0.0.5 快速发 100 个包、间隔 0.2 秒,测丢包率
  • ping -c 4 -W 1 10.0.0.5 每个包最多等 1 秒应答,避免不通时长时间等待
  • ping -s 1472 -M do 10.0.0.5 指定包大小且禁止分片,探测路径 MTU(1472+28=1500)
  • ping -I eth1 10.0.0.5 指定从 eth1 网卡/源地址发包(多网卡排障)
  • ping -4 example.com / ping -6 example.com 强制走 IPv4 / IPv6
  • ping -f 10.0.0.5 flood 模式极限压测链路(需 root,慎用)
  • ping -D -c 10 10.0.0.5 每行带 Unix 时间戳,方便和日志对时
  • ping -a 10.0.0.5 收到应答时响铃(等机器重启上线时挂着)

语法格式

ping [options] destination

OPTIONS

  • -c <count> 发送指定数量的包后停止
  • -i <秒> 发包间隔(默认 1 秒,小于 0.2 需 root)
  • -W <秒> 单个包等待应答的超时时间
  • -w <秒> 整个 ping 过程的总时限
  • -s <字节> ICMP 数据部分大小(默认 56,加头共 64 字节显示)
  • -I <接口|地址> 指定发包的网卡或源 IP
  • -t <ttl> 设置 TTL 值
  • -q 安静模式,只输出最后统计
  • -D 每行输出前加时间戳

备注

  • macOS/BSD 参数不同:超时是 -t(Linux 的 -t 是 TTL)、间隔统计用 -i;macOS 无 -w/-W 同义项,注意脚本移植
  • ping 不通不代表主机宕机:很多服务器/防火墙禁 ICMP,此时应改用 nc -zv 或 telnet 测具体 TCP 端口
  • 结果里重点看三项:丢包率(packet loss)、平均延迟(avg)、抖动(mdev/stddev);跨公网 mdev 大说明链路不稳

ssh

ssh - 加密远程登录与远程执行命令,兼具端口转发/隧道能力

常用命令

  • ssh [email protected] 以 user 身份登录远程主机
  • ssh -p 2222 user@host 指定非默认端口登录
  • ssh -i ~/.ssh/id_ed25519 user@host 指定私钥登录(配合 ssh-keygen -t ed25519 生成、ssh-copy-id user@host 上传公钥后即可免密)
  • ssh user@host 'df -h && uptime' 不进交互 shell,直接在远端执行命令并返回输出
  • ssh -L 13306:127.0.0.1:3306 user@host 本地端口转发:访问本机 13306 即等于访问远端的 3306(打洞连内网数据库)
  • ssh -R 8080:127.0.0.1:80 user@host 远程端口转发:把本机 80 暴露到远端的 8080(内网穿透)
  • ssh -D 1080 user@host 动态转发:在本地开一个 SOCKS5 代理,流量经远端出去
  • ssh -J jumpuser@jumphost user@target 经跳板机一跳直达目标机(多级可逗号串联)
  • ssh -N -f -L 13306:127.0.0.1:3306 user@host 只做隧道不开 shell,并放入后台常驻
  • ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 user@host 首次连接不询问指纹且 5 秒超时(自动化脚本常用)
  • ssh -v user@host 调试模式,排查连不上/密钥不生效(-vvv 更详细)
  • ssh -t user@host 'sudo systemctl restart nginx' 强制分配终端,供远端 sudo 交互输密码

语法格式

ssh [-46AfgNnqTtvXY] [-i identity_file] [-J destination] [-L address]
    [-o option] [-p port] [-R address] [-D address] destination [command]

OPTIONS

  • -p <port> 指定远程端口(默认 22)
  • -i <file> 指定私钥文件
  • -J <jump> 指定跳板机(ProxyJump)
  • -L <本地端口:目标主机:目标端口> 本地端口转发
  • -R <远端端口:目标主机:目标端口> 远程端口转发
  • -D <端口> 动态 SOCKS5 代理转发
  • -N 不执行远程命令,纯做端口转发
  • -f 认证完成后转入后台运行
  • -t 强制分配伪终端(远端跑交互程序时用)
  • -o <option>key=value 形式传配置项(如 ConnectTimeout=5
  • -v 详细调试输出,可叠加至 -vvv

备注

  • 常用主机建议写进 ~/.ssh/config(Host/HostName/User/Port/IdentityFile/ProxyJump),之后 ssh 别名 一键直达;私钥权限必须 600、~/.ssh 目录 700,否则会被拒绝使用
  • 长连接易断可在 config 加 ServerAliveInterval 60 保活;复用连接加 ControlMaster auto 可让第二次连接秒开
  • 远端主机重装后指纹变化会报 REMOTE HOST IDENTIFICATION HAS CHANGED,用 ssh-keygen -R host 清掉旧记录再连

telnet

telnet - 明文远程登录协议客户端,如今主要用来测试 TCP 端口连通性

常用命令

  • telnet 192.168.1.10 3306 测试目标主机 3306 端口是否可达(最高频用法:能进入空白屏/看到 banner 即端口通)
  • telnet example.com 80 连上 Web 端口后可手工发送 GET / HTTP/1.1 + Host: example.com + 两次回车,裸测 HTTP
  • telnet smtp.example.com 25 连接 SMTP 手工发 EHLO,排查邮件服务
  • telnet 10.0.0.5 6379 连接 Redis 后可直接敲 PING 验证服务存活
  • telnet -4 host 22 强制走 IPv4 连接(-6 强制 IPv6)
  • echo quit | telnet 192.168.1.10 3306 非交互式探测端口,适合脚本(配合超时:timeout 3 telnet ...
  • 连接后按 Ctrl+] 回到 telnet 提示符,输入 quit 退出(连接卡死时的正确退出方式)

语法格式

telnet [-4] [-6] [-a] [-l user] [-e escapechar] [host [port]]

OPTIONS

  • -4 强制使用 IPv4
  • -6 强制使用 IPv6
  • -a 尝试自动登录(发送当前用户名)
  • -l <user> 指定登录用户名
  • -e <char> 设置逃逸字符(默认 Ctrl+]
  • -E 禁用逃逸字符
  • -b <addr> 指定本地源地址
  • -d 开启调试输出

备注

  • telnet 协议全程明文(含密码),远程登录早已被 ssh 全面取代,仅保留端口探测用途
  • 很多新系统默认不装 telnet:更现代的替代是 nc -zv host port(netcat 探测)或 curl -v telnet://host:port;纯 bash 也可 timeout 3 bash -c 'echo > /dev/tcp/host/port' && echo open
  • 「端口通但服务不响应」和「端口不通」在 telnet 表现不同:立即 Connection refused 是端口没监听,长时间卡住多半是防火墙丢包

yum

yum - RHEL/CentOS 系发行版的包管理器,自动处理依赖的安装、升级与卸载

常用命令

  • yum install nginx 安装软件包(自动解决依赖,-y 跳过确认)
  • yum remove nginx 卸载软件包
  • yum update 升级所有可更新的包;yum update nginx 只升级指定包
  • yum search keyword 按关键词搜索包名与描述
  • yum info nginx 查看包的版本、大小、仓库来源等详细信息
  • yum list installed 列出已安装的包;yum list available nginx* 列出仓库中可安装的包
  • yum provides */nslookup 反查某个文件/命令由哪个包提供(装缺失命令时非常好用)
  • yum clean all && yum makecache 清空并重建本地缓存(换源后必做)
  • yum repolist 查看当前启用的仓库列表
  • yum history 查看事务历史;yum history undo <ID> 回滚某次安装/升级
  • yum groupinstall "Development Tools" 安装软件包组(如编译工具链)
  • yum localinstall ./xxx.rpm 安装本地 rpm 包并自动从仓库解决依赖

语法格式

yum [options] <command> [package ...]

OPTIONS

  • -y 所有交互提问自动回答 yes
  • -q 静默模式,减少输出
  • -v 详细模式
  • --enablerepo=<repo> 临时启用指定仓库(如 epel)
  • --disablerepo=<repo> 临时禁用指定仓库
  • --nogpgcheck 跳过 GPG 签名校验(内网自建源常用,注意安全)
  • --downloadonly --downloaddir=<dir> 只下载 rpm 不安装(离线部署场景)
  • --exclude=<package> 更新时排除指定包(如 --exclude=kernel*

备注

  • RHEL/CentOS 8+ 及 Fedora 已用 dnf 取代 yum,yum 只是 dnf 的软链接,常用子命令完全兼容
  • 仓库配置在 /etc/yum.repos.d/*.repo;第三方常用 EPEL 源(yum install epel-release
  • CentOS 7/8 已 EOL,官方源下线后需将 repo 中的 mirrorlist 换成 vault.centos.org 或国内镜像归档地址,否则 yum 全部报 404