ip addr 最完整,hostname -I 最简洁,ifconfig 已弃用。以下均经 WSL2 实测。
一、TL;DR:按场景选命令
- 查看全部接口与 IPv6:
ip addr show,输出最全。 - 脚本取 IP 字符串:
hostname -I,空格分隔,直接可用。 - legacy 脚本或老运维:
ifconfig,需先装 net-tools,新系统不默认安装。 - 只看默认路由出口:
ip route show default,一行得网关与出口接口。
二、ip addr:现代标准,信息最完整
ip addr show
ip -brief addr show
ip addr show 属于 iproute2 套件,从 2000 年代起逐步替代 ifconfig [1]。输出按接口分组,能看到 MAC、IPv4、IPv6、广播地址、作用域和有效期。脚本处理时,ip -brief addr show 把同一接口压成一行,便于 awk/grep。
实测输出(WSL2 Ubuntu 24.04):
lo UNKNOWN 127.0.0.1/8 10.255.255.254/32 ::1/128
eth0 UP 172.26.110.34/20 fe80::215:5dff:fea3:633/64
三、hostname -I:一行拿到 IP
hostname -I
hostname -I 把所有非回环 IP 以空格分隔打印,适合赋值给变量 [2]。注意不要与 hostname -i 混淆:小写 -i 在某些环境下只回 127.0.1.1,不输出真实 IP。
实测输出:
172.26.110.34
四、ifconfig: legacy 方案(已弃用)
sudo apt-get update
sudo apt-get install -y net-tools
ifconfig
ifconfig eth0
net-tools 包提供 ifconfig,但 Debian/Ubuntu 自 2020 年代起已不默认安装。若只需 IPv4,也可以用:
ip -4 addr show eth0 | grep inet
五、WSL2 / 容器 / 云服务器的差异
| 环境 | ip addr | hostname -I | ifconfig |
|---|---|---|---|
| 物理机 | 正常 | 正常 | 需 net-tools |
| WSL2 | 正常,eth0 为 hv_netvsc | 正常 | 需 net-tools |
| Docker 容器 | 正常,eth0 为 veth | 正常 | 需 net-tools |
| 云服务器 | 正常 | 正常 | 需 net-tools |
WSL2 里 eth0 实际是 hv_netvsc 虚拟接口,NAT 分配 IP,重启会变。容器内同样用 veth 对,宿主机可通过 docker inspect 查真实网段。云服务器若有多个弹性网卡,ip -brief addr 一眼能区分。
六、回滚、排错与局限性
排错速查
| 现象 | 原因 | 处理 | |
|---|---|---|---|
| ip addr 只看到 lo | 网卡未 up 或驱动未加载 | ip link set eth0 up;查 `dmesg \ |
grep eth0` |
| hostname -I 返回空 | 没配 IPv4,或系统没装 hostname 扩展 | 先跑 ip addr show 确认 |
|
| ifconfig 命令不存在 | net-tools 未安装 | sudo apt-get install net-tools |
|
| IP 显示 169.254.x.x | 没拿到 DHCP,APIPA 地址 | 查 DHCP 服务或手动配静态 IP |
局限性
hostname -I是 glibc 扩展,POSIX 未标准化,极少数精简系统可能缺失。- WSL2 重启后 IP 会变,脚本里若依赖固定 IP 需配合
wsl.exe hostname -I动态获取。 - 多网卡/多 IP 时,
hostname -I会输出多个地址,需自行取第 N 个或按网段筛选。
实测记录
- 环境:WSL2 Ubuntu 24.04,内核 5.15。
ip addr show:eth0 正常,inet 172.26.110.34/20。ip -brief addr show:单行输出,适合脚本。hostname -I:输出 172.26.110.34,与 ip addr 一致。hostname -i:输出 127.0.1.1,与真实 IP 不符。ifconfig:未安装 net-tools,apt-get install 后可用,与 ip addr 结果一致。
参考资料
- [1] ip(8) – Linux manual page (man7.org)(ip(8))
- [2] hostname(1) – Linux manual page (man7.org)(hostname(1))
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。