用 hostname -i 最快获取本机生效的局域网 ipv4 地址,空格分隔;ip addr show 更准确反映内核网络状态;ifconfig 已过时且易缓存旧数据,慎用。

直接看本机 IPv4 地址,用 hostname -I 最快
它不依赖网络接口名,不显示 IPv6 或 loopback(127.0.0.1),只输出当前生效的、可用于局域网通信的 IPv4 地址,空格分隔。适合脚本调用或快速确认“我对外的地址是多少”。
- 运行
hostname -I,输出类似192.168.1.100 10.0.2.15—— 多个地址说明你同时连了有线和 Wi-Fi,挑和你当前上网方式匹配的那个 - 注意:
hostname -i(小写 i)是查主机名解析结果,可能返回127.0.1.1或 DNS 配置错误值,**别用它** - 如果输出为空,代表没获取到任何 IPv4 地址,大概率是网卡 down 了、DHCP 失败,或 NetworkManager 没管理该接口
ip addr show 是现代标准,能看清每个接口的真实状态
它比 ifconfig 更准确反映内核当前视图:哪些接口 UP、是否带 DHCP 分配标记、地址生命周期(valid_lft)、是否为 secondary 地址等。尤其在容器、虚拟机、多 IP 绑定场景下,ip 的输出不可替代。
- 查所有 IPv4:
ip -4 addr show;只看活跃的(UP 状态):ip -br -4 addr show | grep UP - 常见干扰项:看到
inet 127.0.0.1/8(lo 接口)或inet6行,直接忽略——你要的是非 loopback 的 IPv4 - 如果
eth0显示NO-CARRIER或状态为DOWN,说明物理连接断开或驱动未加载,ifconfig可能仍显示旧地址,但已不可用
ifconfig 还能用,但得知道它“看不见”的东西
它不读取 netlink 事件,只从内核旧接口抓快照,所以对热插拔网卡、NetworkManager 动态配置、IPv6 SLAAC 地址更新反应迟钝。但它输出格式简洁,老运维一眼能定位 inet 后面的地址。
- 若提示
command not found,不是系统坏了,是默认没装:sudo apt install net-tools(Debian/Ubuntu)或sudo yum install net-tools(RHEL/CentOS) - 输出里
inet addr:192.168.1.100是 IPv4,Bcast是广播地址,Mask是子网掩码——这些字段在ip输出里分散在不同行,需要多看两眼 - 别信
ifconfig eth0显示的地址就是“正在用的”,它可能已被ip addr flush dev eth0清掉,而ifconfig缓存未刷新
别踩这些坑:DHCP 失败、双网卡冲突、Docker 虚拟网桥干扰
真实环境里,IP 查不到或查错,往往不是命令问题,而是网络状态本身异常。
- 看到
169.254.x.x(APIPA 地址)?说明 DHCP 完全失败,检查网线、Wi-Fi 密码、路由器 DHCP 开关,而不是换命令 - 同时连 Wi-Fi 和以太网时,
hostname -I会列出两个地址,但默认路由只走其中一个(查ip route | grep default确认),另一个地址可能根本收不到外部请求 - Docker 安装后常新增
docker0、br-xxxx等虚拟网桥,它们也有inet地址(如172.17.0.1),这不是你的主机 IP,别误当成服务监听地址
ip link show 里的物理层是否 UP,ip route 里是否有有效 default 路由,以及 systemctl status NetworkManager 是否在正常工作。










