服务器测评网
我们一直在努力

Linux如何获取IP地址?Linux查看IP的命令是什么

在 Linux 系统运维和网络配置中,快速准确地获取本机 IP 地址是一项基础且高频的操作。核心上文归纳是:在现代 Linux 发行版中,首选 ip 命令套件进行网络配置和查询,它是 net-tools(如 ifconfig)的官方替代品,功能更强大且数据更精准;若仅需提取 IP 字符串用于脚本自动化,hostname -I 是最高效的选择;若需获取公网 IP,则需借助 curl 访问外部服务。 掌握这些方法不仅能提升运维效率,更能应对复杂的网络环境排查需求。

Linux如何获取IP地址?Linux查看IP的命令是什么

使用 ip 命令获取 IP 地址(现代标准)

ip 命令属于 iproute2 软件包,是目前 Linux 内核网络栈管理的首选工具,相比于老旧的 ifconfig,它能更直观地展示网络接口状态和路由表信息。

查看所有网络接口的 IP 信息
执行以下命令可以列出系统中所有网络接口的详细信息:
ip addr
或者简写为:
ip a

输出结果中,每一块代表一个网络接口,重点关注 inet 字段,它标识了 IPv4 地址。inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0 表示 eth0 网卡的 IP 地址是 168.1.100

仅查看特定网卡信息
在服务器配置了多张网卡(如内网和外网)时,查看全部信息显得冗余,可以通过指定网卡名称来精准定位:
ip addr show eth0
此命令仅输出 eth0 的相关信息,便于快速定位目标 IP。

仅显示 IPv4 地址
为了过滤掉 IPv6 地址和冗余的链路层信息,可以使用 -4 参数结合 -o(一行输出)参数:
ip -4 -o addr
这种方式输出的格式非常规整,适合系统管理员快速浏览当前主机的所有 IPv4 绑定情况。

使用 hostname 命令快速提取(脚本利器)

对于编写 Shell 脚本或需要将 IP 地址作为变量传递给其他程序的场景,hostname 命令提供了最简洁的输出方式。

获取所有 IP 地址
执行命令:
hostname -I
该命令会直接输出本机所有配置的 IP 地址,以空格分隔,不包含任何额外的描述性文字,例如输出 168.1.100 10.0.0.5,这是自动化脚本中获取 IP 最推荐的方法,因为它避免了使用 grepawk 进行复杂的文本处理。

Linux如何获取IP地址?Linux查看IP的命令是什么

获取指定网卡的 IP(结合 ip 命令)
虽然 hostname 很方便,但它无法指定网卡,若需要获取特定网卡的 IP 并用于脚本,建议组合使用 ip 命令与文本处理工具:
ip addr show eth0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1
这条命令链的含义是:显示 eth0 信息 -> 筛选包含 ‘inet ‘ 的行 -> 提取第二列(IP/掩码) -> 以斜杠为分隔符提取第一列(纯 IP),这种组合拳体现了 Linux 命令行管道处理的强大之处。

使用 ifconfig 命令(传统方法)

尽管 ifconfig 已被标记为“过时”且在许多最小化安装的 Linux 发行版(如 CentOS 7+、Debian 9+)中默认不再预装,但凭借其极简的输出格式,依然是许多老派运维人员的首选。

安装与使用
如果系统提示找不到该命令,通常需要先安装 net-tools 包(例如在 Ubuntu 上使用 sudo apt install net-tools)。
执行命令:
ifconfig
输出结果中,eth0ens33 段落下的 inet addr 即为 IP 地址,注意,ifconfig 默认不会显示处于“down”状态的网卡,而 ip a 可以显示,这是 ip 命令在全面性上的另一个优势。

获取公网 IP 地址

上述方法获取的都是局域网(LAN)内部的私有 IP 地址,在需要进行远程连接、DDNS 动态解析或网络安全审计时,必须获取服务器的公网 IP。

使用命令行查询工具
Linux 本身不存储公网 IP 信息,必须向外部服务器发起请求,最常用的方法是利用 curlwget
curl ifconfig.me
或者
curl cip.cc
ifconfig.me 会直接返回一个纯文本 IP,极其简洁;而 cip.cc 等国内服务通常会返回 IP、地理位置、运营商等详细信息,更适合进行网络归属地排查。

专业见解:DNS 查询法
在不方便访问 HTTP 端口(如防火墙严格限制)的环境下,可以通过查询 DNS 记录来获取公网 IP:
dig +short myip.opendns.com @resolver1.opendns.com
这种方法利用 OpenDNS 的特殊解析记录,仅通过 DNS 协议(UDP/TCP 53端口)即可获取 IP,绕过了 HTTP 限制,是网络排错中的高级技巧。

常见问题与专业解决方案

在实际操作中,运维人员常会遇到“网卡命名混乱”或“IP 显示不全”的问题。

Linux如何获取IP地址?Linux查看IP的命令是什么

网卡命名规则的变化
传统的网卡命名为 eth0eth1,但现代 Linux 系统(特别是 systemd 引入后)采用了“可预测的网络接口命名”规则,如 enp3s0ens33,这种命名基于 BIOS 提供的插槽位置信息,虽然看起来复杂,但能确保网卡设备名在硬件变更后保持不变,在使用 ipifconfig 前,建议先执行 ip link 确认当前网卡的准确名称。

无法获取 IP 的排查
如果命令执行后只有 0.0.1(回环地址),说明物理网卡未分配 IP,此时应检查网络服务状态(systemctl status networksystemctl status NetworkManager)以及网线连接状态,对于 DHCP 环境,尝试强制重新获取 IP:dhclient eth0


相关问答

Q1:在 Linux 脚本中,如何将获取到的 IP 地址赋值给一个变量?
A: 推荐使用 hostname -I 结合 read 命令或直接截取。
MY_IP=$(hostname -I | awk '{print $1}')
这行命令将获取到的第一个 IP 地址赋值给变量 MY_IP,使用 awk '{print $1}' 是为了防止机器有多个 IP 时,变量中包含空格或多个 IP,确保变量的纯净性。

Q2:为什么 ifconfig 显示的 IP 是 inet addr:...,而 ip a 显示的是 inet ...
A: 这是两个工具输出格式的区别。ifconfig 源于 BSD 工具集,习惯使用 inet addr 来标识地址;而 ip 命令源于 Linux 的 IP 路由协议栈工具,其输出格式更接近内核内部的数据结构表示,直接使用 inet 后跟地址和掩码(如 /24),从数据精确度来看,ip a 的输出更利于解析 CIDR(无类别域间路由)格式的掩码信息。


能帮助您全面掌握 Linux 获取 IP 地址的各种技巧,如果您在实际运维中遇到了特殊的网络环境配置问题,或者有更高效的命令组合方式,欢迎在评论区分享您的经验和见解,我们一起交流探讨。

赞(0)
未经允许不得转载:好主机测评网 » Linux如何获取IP地址?Linux查看IP的命令是什么