在Linux系统中获取IP地址,最核心且推荐的命令是ip addr(或简写为ip a),它是现代Linux发行版中网络配置与管理的标准工具;对于习惯旧式系统的用户,ifconfig依然可用,但已逐渐被淘汰;而在需要快速提取IP进行脚本编写或自动化运维时,hostname -I与ip route get则是更高效的专业解决方案,掌握这三类命令及其应用场景,能够满足从日常查看到复杂故障排查的所有需求。

现代标准:ip命令详解
ip命令套件是iproute2软件包的一部分,旨在取代古老的net-tools(包含ifconfig),它功能更强大,支持更现代的网络功能(如网络命名空间、VLAN、VXLAN等)。
基础用法:查看所有接口IP
在终端输入ip addr或ip a,系统会列出所有网络接口的详细信息,输出结果通常分为多个块,每个块对应一个网络接口。
- lo (Loopback):这是本地回环接口,IP地址通常为
0.0.1,用于本机内部通信,测试网络协议栈是否正常。 - eth0 / ens33 / enp0s3:这是以太网接口的命名规则,较新的系统采用“可预测的命名规则”(如ens33),而旧系统可能使用eth0。
- wlan0:这是无线局域网接口。
在输出信息中,寻找inet关键字,其后紧跟的即为IPv4地址。inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0,这里的168.1.100就是本机的局域网IP地址,/24表示子网掩码。
查看特定接口
如果服务器拥有多个网卡或虚拟接口,输出内容会非常冗长,此时可以指定接口名称进行精确查询:
ip addr show eth0
或者简写为:
ip a s eth0
仅显示IPv4地址
为了过滤掉IPv6地址和冗余信息,可以使用-4参数结合管道符进行精简显示:
ip -4 addr show eth0
若要仅提取IP字符串(常用于Shell脚本),可以结合awk或sed工具,
ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'
传统工具:ifconfig命令
尽管ifconfig已被标记为“过时”,但由于其输出格式直观且被广泛使用了数十年,许多资深运维人员依然对其情有独钟。
安装与使用
在最小化安装的CentOS 7/8或Ubuntu系统中,直接输入ifconfig可能会提示“command not found”,此时需要安装net-tools包:

- Debian/Ubuntu:
sudo apt install net-tools - RHEL/CentOS:
sudo yum install net-tools
安装完成后,直接输入ifconfig即可查看,其输出结果按网卡分块,inet addr后即为IP地址,Mask后为子网掩码,HWaddr后为MAC地址。
局限性
ifconfig无法很好地处理逻辑接口别名(如eth0:1),也缺乏对网络命名空间等现代Linux网络特性的支持,在专业生产环境中,建议逐步迁移至ip命令。
高级技巧:快速定位与脚本化应用
在自动化运维或编写Shell脚本时,我们需要的是纯粹的IP字符串,而不是大段的描述性文本,以下提供两种专业且高效的解决方案。
hostname -I:极速获取
这是获取本机IP地址最快的方法之一。hostname -I命令会直接列出所有活动接口的IP地址(不包括回环地址),以空格分隔。
- 优点:输出极其简洁,非常适合被其他程序调用。
- 注意:如果机器有多个IP(如Docker网桥、VPN等),它会一次性返回所有IP。
ip route get:精准获取出口IP
这是一个具有独立见解的高级技巧,在多IP环境中,我们往往想知道:如果我现在访问互联网,源IP是什么?
使用命令:
ip route get 1.1.1.1
该命令会模拟访问1.1.1.1(或任意公网IP)的路由查找过程,输出结果中包含src字段,该字段后面的IP就是本机用于与外部通信的主出口IP。
- 应用场景:在配置防火墙规则或设置白名单时,这个命令能帮你准确识别对外通信的真实IP,避免因多网卡导致的配置错误。
复杂环境下的IP获取与排错
在容器化(Docker/Kubernetes)或云环境中,网络环境极其复杂,普通的查看命令可能返回几十个IP地址。
过滤虚拟接口
Docker默认会创建docker0网桥和大量的veth接口,在使用ip a查看时,可以使用grep进行反向过滤:
ip a | grep -v "docker\|veth\|br-"

确认连接状态
仅仅获取IP是不够的,确认链路是否“UP”同样重要,在ip a的输出中,查看状态字段:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
如果看到UP和LOWER_UP,说明物理链路是连通的;如果只有UP但没有LOWER_UP,说明网卡已启用但网线可能未连接。
使用ss替代netstat
虽然不直接获取IP,但在获取IP后检查端口连通性时,推荐使用ss命令替代netstat,因为它更快且更高效,查看80端口监听情况:ss -ltnp | grep :80。
相关问答
Q1:在Linux中,为什么有时候ifconfig命令无法使用,该如何解决?
A: 这是因为您的Linux发行版(如CentOS 8、Debian 10及以上)默认不再预装包含ifconfig的net-tools软件包,转而推崇使用ip命令,解决方法有两种:一是使用更现代的ip addr命令来替代;二是如果必须使用ifconfig,可以使用包管理器进行安装,例如在Ubuntu/Debian下执行sudo apt install net-tools,在CentOS/RHEL下执行sudo yum install net-tools。
Q2:如何通过命令行只获取本机的公网IP地址?
A: 上述命令(如ip addr)通常只能获取局域网内的私有IP地址,要获取公网IP,必须借助外部服务,最简单的方法是使用curl命令查询外部服务:curl ifconfig.me 或者 curl ip.sb,这两个命令会返回您当前出口的公网IP,非常适合用于确认NAT设置是否生效。
如果您在配置服务器网络时遇到IP获取异常,或者对上述命令有更深入的疑问,欢迎在评论区留言,我们一起探讨解决方案。


















