很多新手刚接触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-tools | iproute2 |
|---|---|---|
| 查看IP/接口信息 | ifconfig | ip addr / ip link |
| 查看路由 | netstat -rn / route -n | ip route |
| 查看连接/监听 | netstat -tlnp | ss -tlnp |
| 查看ARP邻居 | arp -a | ip neigh |
我的建议很直接:两套都要认识。新机器优先用ip和ss,因为更轻量、输出更全;但遇到老设备、精简容器、或者别人写的脚本时,ifconfig和netstat必须拿得起来。这篇文章用ifconfig、netstat、nslookup、finger为主线,实际是想帮你把“排查网络问题”这件事的底层逻辑过一遍,理解了底层的网络状态和排查思路,用什么工具只是习惯问题。
2. 五个核心命令逐一拆解
2.1 ifconfig:先搞清楚本机到底长什么样
ifconfig全称是interface configuration,作用是查看和配置网络接口。所谓网络接口,通俗说就是网卡。服务器上的物理网卡通常叫eth0、eth1,虚拟机常见ens33、enp3s0,容器里可能叫eth0,还有本机回环接口lo。
直接输入ifconfig,输出大致这样:
eth0: flags=4163<UP,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 ...重点看三样东西:
- inet:IPv4地址,也就是这台设备的“门牌号”。
- netmask:子网掩码,决定你所在网段范围。掩码255.255.255.0表示前24位是网络位,后面的IP都是同段。
- ether:MAC地址,物理网卡的唯一标识。可以用它排查是不是网卡硬件问题、有没有被虚拟机软件随机化。
除了查看,ifconfig还能临时改接口状态和IP:
ifconfig eth0 up # 启动接口 ifconfig eth0 down # 停用接口 ifconfig eth0 192.168.1.10 netmask 255.255.255.0 # 临时设置IP ifconfig eth0 mtu 1400 # 临时改MTU这里有个关键点要说三遍:ifconfig改的配置是临时的,重启失效。如果你想永久设置IP,Linux各发行版有各自的配置文件体系,Debian系在/etc/network/interfaces,RedHat系在/etc/sysconfig/network-scripts/ifcfg-ethX,Ubuntu新版用/etc/netplan/下的yaml文件。生产环境一定要通过配置文件或网络管理工具来改网卡,不要依赖ifconfig直接敲,否则服务器一重启,网络配置就“打回原形”,这个坑我踩过,后面章节会细说。
另一个非常实用的参数是-a:
ifconfig -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默认会一直发下去,直到你Ctrl+C。脚本里如果不加-c参数,自动化任务会卡死。我见过同事写的巡检脚本,ping一个不通的地址,没加-c也没加-W,整个监控流程直接堵住。所以脚本里一定要写-c和-W。
第二,TTL不是乱填的。ping返回里的TTL是经过网络设备转发后“剩余”的TTL值。常见操作系统的初始TTL:Linux是64,Windows是128,很多网络设备是255。如果返回TTL是56左右,说明目标很可能是Linux且经过了8跳;如果是120左右,大概是Windows。这个判断只能做参考,不能当铁律,因为经过的跳数不同、有些设备会随机化TTL。但在排查时,看到TTL=64基本能判断对方是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 type=mx # 查询邮件交换记录 set type=cname # 查询别名记录 set type=ns # 查询域名服务器 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 finger,CentOS/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一个公网IP:
ping -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 | 确认出口是否正常 |
| 测DNS | nslookup 域名 | 确认域名解析是否正常 |
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-tools |
| ping: socket: Operation not permitted | 普通用户或容器权限不足 | 加sudo,或检查容器capability |
| ping一直不退出 | 没有加-c参数 | Ctrl+C退出,脚本中务必用-c和-W |
| ping通但业务连不上 | TCP端口未监听/防火墙拦截 | netstat -tlnp查端口,检查防火墙 |
| ping不通但业务正常 | 防火墙丢弃ICMP | 改用nc -vz或curl测试端口 |
| netstat -tlnp看不到进程名 | 权限不足 | 使用sudo执行 |
| netstat: command not found | 未安装或精简系统 | 安装net-tools,或用ss -tlnp |
| nslookup解析超时 | DNS服务器不可达 | 检查/etc/resolv.conf,换DNS测试 |
| nslookup能解析但ping域名不通 | /etc/hosts覆盖或IPv6问题 | cat /etc/hosts,ping -4测试 |
| finger: command not found | 未安装finger | 用who/w代替,或安装finger |
| ifconfig看不到eth0 | 网卡名变化或接口未UP | ifconfig -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后忘保存。当时给一台测试机临时改IP,ifconfig 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住绝大多数服务器网络问题。
这套老命令值得好好掌握,它们不花哨,但在关键时刻是真能救场。