在Linux系统中,查看IP地址是日常运维和管理的基础操作,无论是网络故障排查、服务配置还是安全监控,都离不开对IP信息的准确获取,Linux提供了多种命令和工具来显示IP地址,从基础的传统命令到现代的iproute2工具套件,结合不同的选项和环境变量,可以灵活满足各种场景需求,本文将详细介绍Linux中显示IP地址的常用方法、进阶技巧及注意事项,帮助用户全面掌握IP查看技能。

基础命令:ifconfig 与 ip addr
传统Linux网络管理中,ifconfig是最早用于显示和配置网络接口的命令,属于net-tools工具包,尽管许多现代发行版已默认安装iproute2(提供ip命令),但部分系统仍保留ifconfig以兼容旧脚本。
使用ifconfig无需参数即可显示所有网络接口的详细信息,包括IPv4地址、子网掩码、广播地址及MAC地址。
ifconfig
输出中,eth0或ens33等代表有线网卡,wlan0代表无线网卡,inet字段后跟的IPv4地址(如168.1.100)和Mask字段(如255.255.0)是最核心的IP信息,若仅查看特定接口,可添加接口名,如ifconfig eth0。
ifconfig已被官方逐步淘汰,推荐使用iproute2中的ip addr命令(简称ip a)。ip命令功能更强大,输出更结构化,且支持IPv6,基础用法如下:
ip addr show
或简化为:
ip a
输出中,inet对应IPv4地址,inet6对应IPv6地址,brd为广播地址,scope表示作用域(如global为全局地址,link为链路本地地址),通过ip addr show eth0可精准查看指定接口,而ip addr list效果与ip addr show一致。
进阶方法:结合工具与环境变量
在复杂场景中,单一命令可能无法满足需求,结合工具链或环境变量可高效筛选信息。
快速提取IPv4地址
若仅需获取所有接口的IPv4地址,可结合grep和awk过滤输出:
ip addr show | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1
解释:grep 'inet '筛选包含IPv4的行(避免IPv6干扰),awk '{print $2}'提取IP及掩码部分(如168.1.100/24),cut -d'/' -f1按分割并取前半部分(仅IP地址)。

通过环境变量获取SSH连接IP
当通过SSH远程登录Linux服务器时,可通过环境变量快速获取客户端IP:
echo $SSH_CLIENT
输出格式为“客户端IP SSH服务端口 客户端端口”,例如168.1.200 22 12345,其中第一部分即为客户端IP,若需显示当前SSH连接的远程服务器IP,则使用:
echo $SSH_CONNECTION
输出包含客户端和服务器的IP及端口,例如168.1.200 12345 192.168.1.100 22。
在线获取公网IP
若需查看服务器的公网IP(而非内网IP),可通过curl访问IP查询服务:
curl ifconfig.me
或使用其他公共接口:
curl ipinfo.io/ip curl cip.cc
这些命令会直接返回公网IP地址,适合在脚本中自动获取或验证NAT后的出口IP。
网络接口管理:查看与筛选特定IP
Linux服务器可能存在多个网络接口(如物理网卡、虚拟网卡、Docker容器接口等),精准筛选特定接口的IP信息是常见需求。
按接口类型筛选
通过ip addr show的接口名参数可查看特定接口,
- 查看有线网卡:
ip addr show eth0 - 查看无线网卡:
ip addr show wlan0 - 查看虚拟接口:
ip addr show docker0
若不确定接口名,可先用ip addr show或ls /sys/class/net/列出所有接口。

区分IPv4与IPv6
默认情况下,ip addr show会同时显示IPv4和IPv6地址,若仅需IPv4,可添加-4参数:
ip -4 addr show
仅需IPv6时则用-6:
ip -6 addr show
查看动态IP与DHCP信息
若接口通过DHCP自动获取IP(如家用路由器场景),可通过以下命令查看DHCP客户端状态:
- Ubuntu/Debian系统:
systemctl status dhcpcd或cat /var/lib/dhcpcd/dhcpcd-eth0.lease - CentOS/RHEL系统:
nmcli connection show eth0 | grep ipv4.method(确认是否为auto)
或使用dhclient命令(需安装dhcp-client包):dhclient -eth0。
脚本化应用:自动化获取IP信息
在运维自动化中,常需通过脚本批量获取或监控IP地址,以下提供两个简单脚本示例:
Bash脚本:获取所有接口IP
#!/bin/bash
echo "网络接口IP信息:"
echo "--------------------------------"
for interface in $(ip addr show | awk '/^[0-9]+:/ {print $2}' | cut -d':' -f1); do
ip=$(ip addr show "$interface" | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1)
if [ -n "$ip" ]; then
echo "$interface: $ip"
fi
done
保存为get_ips.sh,执行chmod +x get_ips.sh && ./get_ips.sh,可输出所有带IPv4地址的接口及其IP。
Python脚本:监控公网IP变化
#!/usr/bin/env python3
import requests
import time
def get_public_ip():
try:
response = requests.get('https://ifconfig.me', timeout=5)
return response.text.strip()
except requests.RequestException:
return "获取失败"
if __name__ == "__main__":
last_ip = get_public_ip()
print(f"当前公网IP: {last_ip}")
while True:
time.sleep(300) # 每5分钟检查一次
current_ip = get_public_ip()
if current_ip != last_ip:
print(f"公网IP变化: {last_ip} -> {current_ip}")
last_ip = current_ip
需安装requests包(pip install requests),适合监控服务器公网IP是否变化(如动态IP场景)。
注意事项与常见问题
- 权限问题:
ifconfig和部分ip命令(如配置IP时)需要root权限,普通用户可通过sudo ifconfig或sudo ip addr执行。 - 发行版差异:Ubuntu/Debian默认安装
iproute2,但可能未安装net-tools(需sudo apt install net-tools);CentOS/RHEL默认安装net-tools,但推荐优先使用ip命令。 - 临时IP与持久化配置:通过
ifconfig或ip addr add添加的IP为临时配置,重启后失效;持久化配置需修改网络配置文件(如Ubuntu的/etc/netplan/、CentOS的/etc/sysconfig/network-scripts/)。 - IPv6显示:若系统未启用IPv6,
ip addr show中可能无inet6字段,可通过sysctl net.ipv6.conf.all.disable_ipv6=0临时启用(需root权限)。
通过以上方法,用户可根据需求灵活选择命令和工具,从基础IP查看到自动化监控,全面掌握Linux系统中IP地址的获取与管理技巧,无论是日常运维还是复杂网络环境,这些技能都能提升工作效率,确保网络配置的准确性和稳定性。















