学会了看文件、改权限,接下来进入 Linux 最实用的领域之一:网络。不管是自己的 VPS 连不上,还是网站打不开,排查思路都离不开这几个命令。这篇把常用的网络查询命令讲透,配上真实输出,照着敲一遍就会。
先理解:Linux 看网络的思路
遇到网络问题,排查顺序一般是:
本机网卡正常吗? → 能 ping 通网关吗? → 能 ping 通外网吗? → DNS 正常吗? → 端口通吗?
一层一层缩小范围。下面每个命令对应其中一层。
ip:查看网卡和 IP 地址(替代 ifconfig)
老教程里用 ifconfig,新系统(Debian 11+、Ubuntu 20.04+)默认没装它了,统一用 ip。
看本机有哪些网卡、IP 是多少
ip addr
输出大概长这样(关键部分):
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet 172.26.8.214/20 brd 172.26.15.255 scope global eth0
怎么读:
lo是回环网卡(本机自己跟自己说话),127.0.0.1永远指向本机,不用管。eth0是真正的网卡,UP表示已启用。inet 172.26.8.214/20就是本机的内网 IP,/20是子网掩码的简写(相当于 255.255.240.0)。
只想看 IP,不想看一堆细节:
ip -brief addr
lo UNKNOWN 127.0.0.1/8
eth0 UP 172.26.8.214/20
一行一个,清爽。
看路由表:数据包从哪走
ip route
default via 172.26.0.1 dev eth0
172.26.0.0/20 dev eth0 proto kernel scope link src 172.26.8.214
第一行最关键:default via 172.26.0.1 —— 所有不知道往哪发的数据包,都扔给 172.26.0.1 这个网关。这是你上网的“大门”,后面 ping 网关就 ping 它。
ping:测试连通性
最常用的网络命令,没有之一。
ping halo.nya.je
PING halo.nya.je (3.15.231.19) 56(84) bytes of data.
64 bytes from 3.15.231.19: icmp_seq=1 ttl=47 time=188 ms
64 bytes from 3.15.231.19: icmp_seq=2 ttl=47 time=187 ms
^C
--- halo.nya.je ping statistics ---
2 packets transmitted, 2 received, 0% packet loss
解读:
第一行告诉你域名解析到了哪个 IP(
3.15.231.19)—— 顺带验证了 DNS 是否正常。time=188 ms是延迟,数字越小越快。国内 ping 美国 VPS,150-250ms 正常。0% packet loss表示没丢包。丢包率高说明线路不稳定。按
Ctrl+C停止,不然它会一直 ping 下去。
只 ping 几次就停
ping -c 4 halo.nya.je # ping 4 次自动停
写脚本、快速测试时用 -c,不用手动按 Ctrl+C。
ping 不通?分层看
ping -c 2 172.26.0.1 # 先 ping 网关(内网)
ping -c 2 8.8.8.8 # 再 ping 公网 IP(跳过 DNS)
ping -c 2 google.com # 最后 ping 域名(测试 DNS)
网关都 ping 不通:网卡或内网问题,看
ip addr。能 ping 通 8.8.8.8 但 ping 不通域名:DNS 问题,检查
/etc/resolv.conf。都通但网站打不开:往下看端口和 HTTP。
ss:看端口和连接(替代 netstat)
ss 是查“这台机器上谁在监听哪个端口、谁跟谁连着”的神器。老命令 netstat 已被淘汰。
看本机开了哪些端口
ss -tlnp
参数拆开讲:
-t 只看 TCP(网站、SSH 都是 TCP)
-l 只看正在监听的(listening)
-n 显示数字端口,不反查名字(快)
-p 显示是哪个进程在用
输出示例:
State Recv-Q Send-Q Local Address:Port Process
LISTEN 0 128 0.0.0.0:22 sshd
LISTEN 0 512 0.0.0.0:80 caddy
LISTEN 0 512 0.0.0.0:443 caddy
0.0.0.0:22表示 22 端口在所有网卡上监听,SSH 正常。0.0.0.0:80和443是 Caddy(网站),说明 Web 服务在跑。如果你装了个服务但这里没出现它的端口,说明服务没启动成功。
看当前有哪些连接
ss -tnp
去掉 -l,看到的是已建立的连接:
State Local Address:Port Peer Address:Port Process
ESTAB 172.26.8.214:22 203.0.113.5:51234 sshd
这行表示有人(203.0.113.5)正连着这台机器的 22 端口(SSH)。看到陌生 IP 连着你的 SSH?结合日志查一下。
只查某个端口
ss -tlnp | grep 443
快速确认某个服务端口在不在。
curl:发 HTTP 请求,查网站和接口
curl 是 Linux 下的“万能浏览器”,不打开图形界面,直接发请求看返回。
最常用:看网站返回什么
curl -I https://halo.nya.je
HTTP/2 200
server: Caddy
content-type: text/html; charset=utf-8
HTTP/2 200:网站正常(200 就是成功)。常见状态码:
301/302跳转,403禁止访问,404找不到页面,500服务器报错,502/503后端挂了。
看完整的返回内容
curl https://halo.nya.je
直接输出网页 HTML。想保存到文件:
curl -o page.html https://halo.nya.je
常用参数组合
curl -s https://api.example.com/data # -s 静默,不显示进度条
curl -s -w "%{http_code}\n" -o /dev/null https://halo.nya.je
第二个命令是运维常用技巧:只关心网站是 200 还是 500,不关心内容。
测本地服务通不通
curl -I http://127.0.0.1:8080
服务绑在本地端口时这样测,绕过域名和防火墙,直达服务本身。
dig:查 DNS
域名解析到哪个 IP,用 dig 看得最清楚。
dig halo.nya.je +short
3.15.231.19
+short 只显示结果,干净。
指定 DNS 服务器查询
dig @8.8.8.8 halo.nya.je +short
怀疑本地 DNS 被污染时,用 Google(8.8.8.8)的 DNS 直接查,对比结果。
traceroute / mtr:看数据包走了哪条路
ping 告诉你通不通,traceroute 告诉你经过了哪些路由器,慢在哪一跳。
traceroute halo.nya.je
更好用的 mtr(ping + traceroute 二合一):
mtr halo.nya.je
按 q 退出。Loss% 列显示每跳的丢包率,哪跳丢包一目了然。
实战:网站打不开,一套流程走下来
# 1. 本机网卡正常吗?
ip -brief addr
# 2. 网关通吗?
ping -c 2 172.26.0.1
# 3. 公网通吗?
ping -c 2 8.8.8.8
# 4. DNS 正常吗?
dig halo.nya.je +short
# 5. Web 端口在监听吗?
ss -tlnp | grep -E '80|443'
# 6. 防火墙挡住了吗?
ufw status
哪一步失败,问题就在哪一层。
小结
记住排查顺序:网卡 → 网关 → 公网 → DNS → 端口 → 服务,一层层往下走,问题跑不掉。
下一篇 L6:防火墙 ufw——给 VPS 加道门。