应使用 ip addr 查看 ip 地址,因 ifconfig 已被 ubuntu 22.04+、centos 8+ 等主流发行版事实性弃用,不支持 ipv6/arp/vlan 且常漏显多 ip 或临时地址;ip addr 默认列出所有接口全部 ipv4/ipv6 地址,含 scope 标识与生命周期信息,功能完整、输出规范、适合自动化。

直接看 ip addr,别用 ifconfig 查主 IP —— 它可能没装,装了也可能漏掉活跃接口,尤其在 Ubuntu 22.04+、CentOS 8+ 或云服务器上。
ip addr show 能看到哪些真实 IP?
它列出所有网卡(包括虚拟网卡、Docker bridge、veth 等)的 IPv4 和 IPv6 地址,每条 inet 行就是个 IPv4 地址,带 CIDR 掩码(如 192.168.1.100/24)。注意:
-
lo接口下的127.0.0.1是环回地址,不算“对外可用” - 有多个
inet的网卡(比如同时连 Wi-Fi 和有线),说明该设备绑定了多个内网 IP - 如果某接口只有
inet6没有inet,代表没分配 IPv4 地址(DHCP 失败或禁用了 IPv4) - 输出里带
scope global的才是你实际能用的地址;scope link是链路本地地址,不能路由
hostname -I 适合什么场景?
只想要一串干净的 IPv4 地址,不关心接口名、掩码、IPv6,就用它。但要注意:
- 它只输出非环回的 IPv4 地址,空格分隔,比如
192.168.1.100 10.0.2.15 - 如果输出为空,不是命令错了,而是系统当前没拿到任何 IPv4 地址(网线没插、DHCP 没响应、NetworkManager 没启用等)
- 它不会告诉你哪个 IP 绑在哪张网卡上,脚本里用可以,排错时不够用
- 某些最小化安装的系统(如 Alpine)可能没有
hostname -I,得 fallback 到ip -4 addr show scope global | awk '/inet / {print $2}' | cut -d/ -f1
怎么快速确认哪张网卡正在上网?
光看 IP 不够,得知道流量走哪出。用 ip route 查默认路由:
- 执行
ip route | grep '^default',输出类似default via 192.168.1.1 dev wlp0s20f3 proto dhcp metric 600 - 其中
dev wlp0s20f3就是当前上网用的网卡名,再回头查ip addr show wlp0s20f3就能得到它的确切 IPv4 地址 - 如果没输出,默认路由不存在 —— 说明没配网关,或者网络完全断开
- 别依赖
eth0这种名字:现代系统用的是可预测网卡名(如ens33、enp0s3、wlp2s0),硬编码会失效
真正容易被忽略的是:IP 地址本身不等于“能被外部访问”。内网 IP(如 192.168.x.x、10.x.x.x)只能在局域网通信;要确认公网出口 IP,必须调用外部服务,比如 curl ifconfig.me —— 但这返回的是 NAT 后的地址,和本机配置的 IP 完全是两回事。











