Linux网络排查必会:ifconfig、ping、netstat等五命令实战指南

📅 发布时间:2026/10/13 3:24:08
Linux网络排查必会:ifconfig、ping、netstat等五命令实战指南
很多新手刚接触Linux网络管理时面对一堆命令往往不知道从哪下手。尤其像ifconfig、ping、netstat、nslookup、finger这一套老牌命令看着简单但组合起来能覆盖大部分常见网络故障的排查。不少新同事只会用ip addr和ss遇到老系统反而不会玩了。这篇文章我不打算按手册一条条念参数而是从实际排查思路出发把这五个命令串起来讲清楚它们各自管什么、输出怎么看、组合起来能解决什么问题以及我这些年在这上面积攒的实操经验和踩过的坑。适合刚入行的运维新手也适合想系统梳理一遍Linux网络排查思路的朋友。1. 先建立整体认知这五个命令到底各自管什么1.1 命令分工与协作关系很多人把ifconfig、ping、netstat、nslookup、finger当成五个孤立的工具来记结果遇到真实故障时不知道先用哪个、后用哪个。我的经验是网络排查本质上是一条链本地配置 → 链路连通 → 目标可达 → 域名解析 → 服务端口 → 系统用户与安全。这五个命令恰好覆盖了这条链的关键节点。为了好记可以这样类比命令核心作用生活化类比ifconfig查看/配置本地网卡IP、掩码、MAC启停接口看自己家的门牌号检查门有没有开ping用ICMP报文探测目标主机是否可达打电话问对方“在不在”netstat查看监听端口、网络连接、路由表看屋里跟谁在通话、门口开了哪些通道nslookup查询域名对应的IP地址查通讯录找到名字背后的号码finger查看系统当前登录的用户信息看看屋里现在都有谁在网络故障很少是同一个原因导致很多时候你会发现某个服务访问不了但ping是通的或者域名解析正常但TCP连不上。这就是为什么不能只靠单个命令而要在一开始就明白它们各管一段。1.2 旧命令还是新命令net-tools与iproute2这里先解决一个高频疑问现在Linux系统不是推荐用ip命令和ss命令吗为什么还要学ifconfig和netstat背景是这样的老牌工具集叫net-tools包含ifconfig、netstat、route、arp等。新工具集叫iproute2包含ip、ss、ip route等。性能上、输出可读性上新工具确实更好这也是很多新发行版默认不带ifconfig和netstat的原因。但现实情况是大量生产环境还在跑CentOS 6、老版Ubuntu、各种嵌入式系统这些设备上往往只有net-tools。而且网上大量老教程、老脚本、服务商文档里都是ifconfig/netstat的写法完全看不懂会造成很大困扰。常用的新旧命令对应关系大概是功能net-toolsiproute2查看IP/接口信息ifconfigip addr / ip link查看路由netstat -rn / route -nip route查看连接/监听netstat -tlnpss -tlnp查看ARP邻居arp -aip neigh我的建议很直接两套都要认识。新机器优先用ip和ss因为更轻量、输出更全但遇到老设备、精简容器、或者别人写的脚本时ifconfig和netstat必须拿得起来。这篇文章用ifconfig、netstat、nslookup、finger为主线实际是想帮你把“排查网络问题”这件事的底层逻辑过一遍理解了底层的网络状态和排查思路用什么工具只是习惯问题。2. 五个核心命令逐一拆解2.1 ifconfig先搞清楚本机到底长什么样ifconfig全称是interface configuration作用是查看和配置网络接口。所谓网络接口通俗说就是网卡。服务器上的物理网卡通常叫eth0、eth1虚拟机常见ens33、enp3s0容器里可能叫eth0还有本机回环接口lo。直接输入ifconfig输出大致这样eth0: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500 inet 192.168.1.20 netmask 255.255.255.0 broadcast 192.168.1.255 ether 00:0c:29:xx:xx:xx txqueuelen 1000 (Ethernet) RX packets 90231 bytes 11828330 ... TX packets 12344 bytes 1873210 ...重点看三样东西inetIPv4地址也就是这台设备的“门牌号”。netmask子网掩码决定你所在网段范围。掩码255.255.255.0表示前24位是网络位后面的IP都是同段。etherMAC地址物理网卡的唯一标识。可以用它排查是不是网卡硬件问题、有没有被虚拟机软件随机化。除了查看ifconfig还能临时改接口状态和IPifconfig eth0 up # 启动接口 ifconfig eth0 down # 停用接口 ifconfig eth0 192.168.1.10 netmask 255.255.255.0 # 临时设置IP ifconfig eth0 mtu 1400 # 临时改MTU这里有个关键点要说三遍ifconfig改的配置是临时的重启失效。如果你想永久设置IPLinux各发行版有各自的配置文件体系Debian系在/etc/network/interfacesRedHat系在/etc/sysconfig/network-scripts/ifcfg-ethXUbuntu新版用/etc/netplan/下的yaml文件。生产环境一定要通过配置文件或网络管理工具来改网卡不要依赖ifconfig直接敲否则服务器一重启网络配置就“打回原形”这个坑我踩过后面章节会细说。另一个非常实用的参数是-aifconfig -a它显示所有接口包括当前没有UP的接口。有的网卡驱动加载了但没启用普通ifconfig看不到用-a才能发现。还有一个细节很多人忽略ifconfig输出里有NO-CARRIER标志意思是网线没插好或用的是虚拟网卡但对端不通。看到这个字样就别折腾IP配置了先查物理链路。新装的精简系统可能提示ifconfig: command not found这是正常的。Debian/Ubuntu用apt install net-tools安装CentOS/RHEL用yum install net-tools安装。有的容器镜像里连基础工具都没有装一个再用。2.2 ping连通性测试的细节与参数ping可能是最常用、也最容易被误解的命令。它基于ICMP协议向目标主机发送Echo Request报文收到Echo Reply就说明网络层面是通的。基础用法ping 8.8.8.8 ping -c 4 8.8.8.8 # 发4个包后自动停止 ping -c 100 -i 0.2 8.8.8.8 # 每0.2秒发一个共100个 ping -s 1400 1.1.1.1 # 设置包大小为1400字节 ping -W 3 8.8.8.8 # 每次回复超时3秒两个容易踩的细节第一ping默认会一直发下去直到你CtrlC。脚本里如果不加-c参数自动化任务会卡死。我见过同事写的巡检脚本ping一个不通的地址没加-c也没加-W整个监控流程直接堵住。所以脚本里一定要写-c和-W。第二TTL不是乱填的。ping返回里的TTL是经过网络设备转发后“剩余”的TTL值。常见操作系统的初始TTLLinux是64Windows是128很多网络设备是255。如果返回TTL是56左右说明目标很可能是Linux且经过了8跳如果是120左右大概是Windows。这个判断只能做参考不能当铁律因为经过的跳数不同、有些设备会随机化TTL。但在排查时看到TTL64基本能判断对方是Linux或同类系统。ping输出里还有一个重要字段是time也就是往返时延。延迟突然从0.5ms变成50ms说明链路可能有拥塞或经过的路径发生了变化。像我们排查某次服务变慢就是用ping对网关和公网地址分别测时延发现网关正常但公网延迟飙升最后定位到运营商线路波动。最重要的误区是ping通不等于网络没问题ping不通也不等于主机有问题。因为很多防火墙配置了禁止ICMP报文尤其是公网入口ICMP很可能被丢弃。所以测试某个TCP服务通不通正确做法是用nc或curl去连接具体端口。ping的定位是“网络层可达性测试”适合做第一轮粗筛不适合做最终结论。2.3 netstat端口、连接、路由一张图netstat是network statistics的缩写它把本机当前所有网络状态汇总展示。这个命令在排查“服务有没有起来”“端口被谁占了”“有没有异常连接”的时候非常好用。最常见组合是netstat -tlnp解释一下每个字母-t表示TCP协议-u表示UDP-l表示只显示LISTEN监听状态的端口-n表示不解析主机名直接显示IP和端口-p表示显示对应进程的PID和名字。输出形如Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 5678/mysqldLocal Address里的0.0.0.0:22表示sshd监听在所有接口的22端口外部可以连接127.0.0.1:3306表示MySQL只监听本机回环地址外部连不上。很多时候服务起不来是因为端口被占用netstat一眼就能发现netstat -tlnp | grep 8080如果发现某个端口显示在LISTEN但对应的PID/Program name是空的多半是权限不够需要加sudo执行或者这个进程来自其他网络命名空间容器场景常见。查看已建立的连接和连接状态netstat -ant输出里能看到大量ESTABLISHED、TIME_WAIT、CLOSE_WAIT等状态。这里也容易误判TIME_WAIT多通常是主动关闭连接的一方产生的在短连接高并发场景下大量出现很多时候不用管除非数量大到端口耗尽。CLOSE_WAIT多一般是对端关闭了连接但本机应用没有正确关闭文件描述符。如果CLOSE_WAIT持续增长几乎可以肯定是应用程序的问题重启进程或者查代码。SYN_SENT多说明主动连接发出去后一直等不到回复可能目标不可达或防火墙丢包。SYN_RECV多对端能收到SYN但TCP三次握手没完成可能是半连接攻击或本机accept队列满了。路由表也能用netstat看netstat -rn-r表示路由表-n不做域名解析。输出中Destination为0.0.0.0、Gateway为网关IP的那一行就是默认路由。没有默认路由意味着本机不知道“除了本网段之外的数据包该发给谁”外网肯定不通。排查“服务器没有外网”时先看这一行准没错。新系统上netstat可能也没有但ss命令鱼替代了它的大部分功能。ss -tlnp基本等价netstat -tlnp但ss输出更快信息更丰富。两个命令都要会看。2.4 nslookup把域名翻译成IP访问网站时浏览器输入的是域名但网络通信需要的是IP地址。把域名解析成IP这件事是由DNS系统完成的nslookup就是专门查询这个解析结果的工具。最简单的用法nslookup example.com输出关键部分Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: Name: example.com Address: 93.184.216.34第一行Server表示你本机配置的DNS服务器地址来自/etc/resolv.conf。Non-authoritative answer表示这个结果是缓存/递归查询得到的并不是example.com自己的权威DNS服务器直接返回的这是正常现象。如果你怀疑本机DNS配置有问题可以临时指定其他DNS服务器来对比nslookup example.com 8.8.8.8 nslookup example.com 114.114.114.114两个公共DNS解析结果一致说明域名本身没问题不一致可能是本地DNS缓存污染或者两个DNS节点之间存在TTL差异。nslookup也支持进入交互模式。输入nslookup回车然后set typemx # 查询邮件交换记录 set typecname # 查询别名记录 set typens # 查询域名服务器 server 8.8.8.8 # 切换DNS服务器这种方式适合一层层排查DNS问题先用A记录确认基本解析再用CNAME看是否涉及CDN、再用MX看邮件服务是否指向了正确的服务器。这里补充一个隐蔽的坑系统的解析顺序由/etc/nsswitch.conf决定常见配置是hosts: files dns myhostnamefiles在dns前面意味着解析时会先查/etc/hosts文件再查DNS。所以有时候nslookup解析正常但业务系统还是解析到错误地址八成是/etc/hosts里写了一条“错误”的主机映射。排查思路是先用nslookup确认DNS结果再用cat /etc/hosts确认本地文件覆盖。2.5 finger有点冷门但关键时刻能救人审核和查登录用户的时候finger是那个被忽略但有奇效的命令。它用来查看系统用户信息登录状态、真实名字、登录时间、空闲时间、终端类型、最近登录位置等。直接运行finger输出类似Login Name Tty Idle Login Time Office Office Phone root root tty1 Jun 12 09:00 alice Alice pts/0 Jun 12 10:30 bob Bob pts/1 01:20 Jun 12 11:15再查看指定用户详细信息finger alice会显示该用户的主目录、Shell、最后一次登录时间以及~/.plan文件中的自定义内容。必须提醒一点Linux发行版默认不一定装了finger。Debian/Ubuntu执行apt install fingerCentOS/RHEL执行yum install finger。还要注意“远程finger服务”在现在基本不开因为有安全隐患、会泄露用户信息。这里讨论的finger是本地查看登录用户的工具它和who、w、last的区别在于finger能结合/etc/passwd里的用户信息展示更完整的画像。实际运维时如果你想快速知道当前有几个用户登录、分别是谁、空闲多久了finger比who直观得多。但如果你要查历史上每次登录记录应该用last。遇到疑似入侵场景一条命令能快速汇总关键信息finger netstat -ant前者列出当前在线用户后者列出所有连接两者一对照马上能发现异常用户对应的可疑连接。我经历过一次排查某台机器数据库大量慢查询一查发现有个陌生账户正在通过SSH登录登录来源IP和业务网段完全对不上现场直接用finger锁定了登录终端和空闲时间配合netstat找到了对应的长连接很快就定位到问题根源了。3. 实操场景从零排查一台“网络异常”的服务器3.1 场景一服务器连不上外网这是最高频的求助“我服务器突然访问不了外网了”。我的排查顺序固定是本地接口 → 路由 → 网关 → 外网IP → DNS。第一步执行ifconfig看当前接口有没有IP、接口是否UP。如果接口显示NO-CARRIER先查物理网线和交换机端口。第二步执行netstat -rn看路由。缺少默认路由是最常见原因。临时添加默认路由route add default gw 192.168.1.1或者用ip命令ip route add default via 192.168.1.1第三步ping网关ping -c 4 192.168.1.1网关不通说明本机到路由器之间断了可能是网线、VLAN、交换机端口问题。网关通继续下一步。第四步ping一个公网IPping -c 4 1.1.1.1这一步很关键因为如果公网IP通、域名不通那就是DNS问题如果公网IP不通问题在网络出口或运营商侧连DNS都不必急着查。第五步nslookup查域名nslookup www.example.com能解析出IP说明DNS正常。最后再ping域名确认名字解析和网络链路都通。这套流程下来问题基本锁定到具体环节了。我给人做远程支持时最怕对方上来就ping一个域名然后说“ping不通是不是DNS坏了”——完全没拆解链路猜来猜去效率太低。整套排查可以用一个简表记住步骤命令说明查本地地址ifconfig / ip addr确认IP、掩码、接口状态查路由netstat -rn / ip route确认有默认路由测网关ping -c 4 网关IP排查本机到网关的链路测公网ping -c 4 8.8.8.8确认出口是否正常测DNSnslookup 域名确认域名解析是否正常3.2 场景二网站域名打不开但用IP能访问用户反馈“网站打不开”但你在服务器上curl却正常这类问题十有八九出在DNS解析链路而且可能是多层因素叠加。排查分几步第一步nslookup查域名nslookup www.example.com如果返回了IP再试从本机curl这个IP能通说明服务本身没问题。问题在“用户侧访问域名”这个环节。第二步检查本机解析顺序。有些系统本地/etc/hosts里写了一条错误映射导致域名解析到内网IP或者旧IP。运行cat /etc/hosts如果发现陌生IP绑定注释掉或修正。第三步检查系统用的是哪个DNS服务器。如果resolv.conf指向的是公司内网DNS而内网DNS有缓存或解析记录过期就会出现“外部访问正常、内部解析错误”。可以这样对比nslookup www.example.com nslookup www.example.com 8.8.8.8两边IP不一致就很有可能是本地DNS服务器的问题。第四步注意IPv6干扰。有些域名只解析出AAAA记录但网络IPv6不通浏览器尝试IPv6失败后延迟很久才回退IPv4表现就是“打不开”。可以用ping6测一下或者临时禁用IPv6测试。现在很多CDN对IPv6支持不错但在某些内网环境里IPv6链路不完整这类问题很容易被忽略。这里补充一句nslookup显示的是某个时刻的解析结果DNS有TTL缓存所以“现在解析正常”不代表“用户访问时正常”。如果问题间歇性出现排查时可以把重试次数加多或者写个小循环连续查询观察是否出现随机失败。3.3 场景三端口明明在监听外部却连不上这个问题我见过不少次最常见的梗概就是你执行netstat -tlnp服务确实在LISTEN但外部就是连不上。先别急着怀疑安全组一步步看。第一步看监听地址。netstat输出中netstat -tlnp | grep 8080如果Local Address是127.0.0.1:8080说明服务只监听了本机回环接口外部任何IP都无法访问。这是常见配置错误比如某些框架默认绑定本机地址。解决方法是修改服务配置让它监听0.0.0.0或者具体内网IP然后重启服务。如果地址已经是0.0.0.0:8080继续下一步。第二步本机自测curl http://127.0.0.1:8080如果本机也连不上说明服务本身没有正常工作本机能连说明服务没问题问题在链路。第三步查防火墙。Linux常见防火墙包括iptables、firewalld、ufw执行对应命令看规则iptables -L -n systemctl status firewalld ufw status如果规则允许还是没有放行再看看是不是云安全组的问题。这一步不是Linux命令能完全覆盖的因为外部防火墙在云平台上但你在本机执行telnet/nc是能测出差异的nc -vz 服务器IP 8080如果从其他机器net能通说明防火墙没问题不能通则逐层往下。第四步检查SELinux。CentOS系统上即使防火墙放行了端口SELinux也可能拦截服务对外监听。执行getenforce如果是Enforcing看下日志ausearch -m avc -ts recent如果确实被SELinux拦截可以调整布尔值或编写对应的放行策略。这步容易被忽略很多人折腾半天防火墙结果是SELinux的锅。这里再补充一个冷知识有时候netstat看端口没问题但连接数满了。比如Nginx进程的worker_connections或者内核的somaxconn限制表现是外部连接一直超时但端口还在监听。看dmesg或者ss -lnt的Recv-Q队列长度能辅助判断。3.4 场景四怀疑有陌生用户登录服务器突然CPU跑满、网络流量异常或者安全通告要求排查失陷迹象这时候要快速确认系统当前有哪些用户登录。第一步finger和w结合看finger wfinger列出所有登录用户w显示每个登录会话正在执行的命令、负载情况。两者都看能迅速锁定当前活跃的会话。第二步检查历史登录记录lastlast读取/var/log/wtmp显示所有成功登录的会话记录包括来源IP和登录时间。重点看有没有凌晨三四点、来源IP属于异常地区的记录。第三步配合netstat查连接netstat -ant把ESTABLISHED状态的连接和第二步看到的登录会话对应起来。如果发现某个陌生IP和本机保持多条SSH长连接基本可以判定有问题。第四步查看是否有未知计划任务或自启动项仅供参考因为攻击者不会只留一个登录会话crontab -l ls -la /etc/cron.*/ cat /etc/passwd不过这些内容已经超出五个命令的范围了。我把这条线拉出来是想说finger虽然古老但它在“人”的维度上非常有价值很多新工具反而绕了一圈。遇到安全问题先从“当前有哪些人登录”开始方向是对的。另外提示一下若想查看失败登录尝试用lastb不过lastb需要root权限且读取的是/var/log/btmp。4. 常见问题与排查技巧实录4.1 高频问题速查表把日常工作中最常碰到的命令报错和输出异常列一张表方便直接对照现象可能原因排查/解决ifconfig: command not found未安装net-tools用ip addr查看或安装net-toolsping: socket: Operation not permitted普通用户或容器权限不足加sudo或检查容器capabilityping一直不退出没有加-c参数CtrlC退出脚本中务必用-c和-Wping通但业务连不上TCP端口未监听/防火墙拦截netstat -tlnp查端口检查防火墙ping不通但业务正常防火墙丢弃ICMP改用nc -vz或curl测试端口netstat -tlnp看不到进程名权限不足使用sudo执行netstat: command not found未安装或精简系统安装net-tools或用ss -tlnpnslookup解析超时DNS服务器不可达检查/etc/resolv.conf换DNS测试nslookup能解析但ping域名不通/etc/hosts覆盖或IPv6问题cat /etc/hostsping -4测试finger: command not found未安装finger用who/w代替或安装fingerifconfig看不到eth0网卡名变化或接口未UPifconfig -a或ip link show确认netstat显示大量TIME_WAIT正常连接关闭后的状态高并发下为正常现象关注数量级netstat显示大量CLOSE_WAIT应用未正常关闭连接重启应用修复代码缺陷Local Address是127.0.0.1服务只监听本机修改服务绑定地址为0.0.0.0这张表没法覆盖所有情况但能解决日常遇到的八成问题。4.2 我踩过的几个坑说几个亲身经历这些细节在文档里基本查不到但对实际工作是实打实的提示。坑一新装的CentOS 7默认居然没有netstat。有一次我远程帮朋友看服务习惯性敲netstat -tlnp结果提示找不到命令。当时第一反应是系统被精简了后来才知道新版CentOS默认不带net-tools。装一下就好但如果你手边只有ip和ss也得能适应。坑二脚本里ping不加-c导致监控卡死。这是我刚做运维时犯的错。写巡检脚本时想省事直接ping某个内网网关忘了加-c 2结果那个网关刚好宕机ping一直不结束脚本卡在那里后面的告警全部堆积。后来养成了习惯凡是脚本里的ping一律写成ping -c 3 -W 2宁可多打几个字不给自己留隐患。坑三nslookup返回Non-authoritative answer被当成异常。早期不懂看到这个标识以为解析不可信折腾半天。其实这是正常表现表示结果来自非权威服务器通常是递归DNS或缓存。真要拿权威结果可以用dig norecurse或nslookup的set norecurse日常排查不用纠结。坑四ifconfig临时配置IP后忘保存。当时给一台测试机临时改IPifconfig eth0 192.168.1.10直接敲下去配置确实生效了。后来机器被重启IP变回原样我还在想是不是硬件问题。后来才明白ifconfig配置立刻失效必须在配置文件层面修改。从那以后我给自己立了个规矩只要动IP必须确认持久化配置。坑五容器里用ifconfig看到的是容器自己的虚拟网卡不是宿主机的物理网卡。一开始在容器里ifconfig看不到eth0对应的宿主机接口还以为是驱动问题。后来理解网络命名空间之后才明白每个容器有自己的网络栈输出不同才是正常的。排查容器网络时要进宿主机用ip link、ip netns查看别只看容器内部。坑六用ping大包测试时触发安全告警。测试链路用了ping -s 1400的大包连续打目标结果被安全设备判定为DoS行为拦截并报警。后来我改用ping -c 10 -s 100这种小而规范的方式并且提前知会相关人员。做网络测试前先确认目标节点和告警机制这话说起来简单但真踩过的人才觉得肉疼。5. 一些个人经验与建议最后聊点更宏观的东西。ifconfig、ping、netstat、nslookup、finger这一套命令单个拿出来都很简单难的是组合使用和输出解读。我个人的习惯是“一次只动一步确认输出之后再走下一步”。很多人拿到一台异常机器先是一通命令乱敲ifconfig、ping、netstat、nslookup全跑一遍最后收获一堆输出反而更加迷糊。正确的做法是把问题变成一个提问“现在到底是不通、还是没解析、还是没监听、还是有陌生连接”针对这个提问选择对应命令。关于新旧工具我的态度很明确如果你才开始学建议以ip route和ss为主因为它们更现代、信息量更大但同时必须懂得ifconfig和netstat的输出含义因为你不知道生产环境里会碰到什么样的设备。做运维不是做杂技什么顺手用什么关键是把网络状态看透。再给一个实用小技巧把这些命令写进自己的工具箱脚本里。比如快速查看本机全部网络信息的场景一行命令可以搞定echo interfaces ; ifconfig -a; echo routes ; netstat -rn; echo listening ; netstat -tlnp; echo users ; finger真实生产环境里这一步能帮你在远程支持时快速建立初始判断不用来回切换窗口。还有一点想提醒大家网络排查到最后常常不是某一个命令的功劳而是整个链路思维的胜利。先确定是本地配置、路由、链路、解析、端口、用户安全中的哪一环出了问题再动手处理远比记住几十个命令参数更重要。ifconfig会告诉你“本机状态”ping会告诉你“通路存在”netstat会告诉你“端口活跃度”nslookup会告诉你“名字解析”finger告诉你“谁在登录”把这五个点串成一张网你已经能Hold住绝大多数服务器网络问题。这套老命令值得好好掌握它们不花哨但在关键时刻是真能救场。