Linux 上怎么查看我的 IP 地址?
三条命令找出 Linux 的本机 IP:列出所有网卡地址,让内核说出实际使用的源地址,再确认它就在默认路由上。
快速开始
需要把自己的 IP 告诉别人、在防火墙上放行某个网段、或者让服务监听正确的地址时,很多人条件反射敲 ifconfig,结果在新版发行版上只得到 command not found。现在正确的工具是 iproute2 的 ip 命令。下面分三步走:先把机器上所有地址看全,再确定对外通信真正用的是哪一个,最后确认它属于默认路由上的那块网卡——这样你能给出确定的答案,而不是在两块网卡之间猜。
症状
先用一张表把所有网卡和地址列出来
第一步不要想着找一个唯一的答案:装了 Docker、VPN 或者虚拟机的机器上往往有好几个地址,你得先看清楚哪个地址挂在哪个网卡上。这个精简列表每条网卡一行,同时给出网卡状态和 IPv4、IPv6 地址。回环地址 127.0.0.1、链路本地地址 fe80:: 开头的,以及 docker0、virbr0、veth… 这类虚拟网桥都可以直接跳过,重点看状态为 UP 的物理网卡(eth0、enp3s0、wlan0、wlp2s0),那一行上的 IPv4 就是你要的局域网地址。要是该网卡那行压根没有 IPv4,说明它现在还没拿到地址,后面的排查也就无从谈起。
一条命令就能把每个网卡的名称、状态和 IPv4/IPv6 地址打印成简短表格——这是取代又长又难记的 `ifconfig` 和冗长的 `ip addr` 输出的现代做法。
$ ip -br a让内核告诉你实际会用哪个源地址
上一步只是列出所有候选地址,这一步才给出对外通信时的确定答案。内核会针对你指定的目标做一次真实的路由查找,并把将要写进数据包的源地址打印出来——输出里 src 后面那个地址,就是网络上其他机器看到的你。把示例里的目标换成真正在外网的主机,比如公共 DNS 8.8.8.8;如果查的是自己子网内的地址,只能知道访问该子网用哪个地址,结论其实一样但说服力不足。要是结果显示流量从你没预料到的设备出去(比如 tun0、wg0 这类 VPN 隧道),那么日常通信用的就是那个地址,直接报它即可。
让内核直接告诉你去某个地址走哪个网卡、哪个网关、用什么源 IP,不用自己翻路由表猜。
$ ip route get 192.168.1.10确认这个网卡就是走默认路由的那块
地址有没有用,取决于流量是不是真的从它所属的网卡出去。路由表里那条以 default via <网关> dev <网卡> 开头的记录就是判据:dev 后面的设备名必须和第一步你读地址的那块网卡一致。一致的话答案就确定了——该地址属于承担全部对外流量的那块网卡,顺带把网关看一眼也能确认自己确实在以为的那个网络里。如果不一致,说明你找到的地址在一张备用网卡或者网桥上,应该改报默认路由那行里写明的网卡地址。
流量走错网卡或网关疑似不通时,路由表是第一排查点——`ip route show` 就是读取它的快捷命令。
$ ip route show如何确认已解决
地址表里出现了私网地址(192.168.x.x、10.x.x.x 或 172.16–31.x.x),向公网目标做路由查找时 src 字段里还是同一个地址,并且默认路由那行 dev 后面写的正是这块网卡。
来源
- ip(8) — Linux manual page依据: Documents `ip -br addr` as the brief, one-line-per-interface output format of the ip command
- ip-route(8) — main IPv4/IPv6 routing table management依据: Page documents the 'get' subcommand ('ip route get' — get a single route) and route attributes like via/dev/src; confirms 'ip route' and 'get' appear in the text.
- ip-route(8) — Ubuntu man page依据: Man page contains the 'get' subcommand description showing it performs a route lookup and returns the resolved via/dev/src values.
最后验证: 2026-09-22