linux如何查看ip地址:常用命令汇总
linux如何查看ip地址这件事,在Debian12、Ubuntu22.04、CentOSStream9等主流发行版上都能通过iproute2套件自带的ip命令完成,不需要额外安装软件;ifconfig属于net-tools套件,在较新发行版中默认不再预装,执行前需要先aptinstallnet-tools或dnfinstallnet-tools。你在终端敲完命令后,输出里inet后面跟的就是IPv4地址,inet6后面是IPv6地址,127.0.0.1和::1是本地回环地址,不算真实网卡地址。服务器场景下你多半需要同时拿到内网地址和公网地址,内网地址用ipaddr看,公网地址要靠curl访问外部接口获取。
linux查看ip地址的核心命令
ipaddrshow这条命令在多数主流发行版上可用,它属于iproute2项目,由StephenHemminger维护,在RHEL/CentOS7及以后的版本中作为默认网络管理工具替代了net-tools。你直接敲ipa就能简写执行,输出按网卡分块,每块以数字加网卡名开头,比如2:eth0:
下面这张表把三条常用命令的适用场景和输出差异列清楚,你可以按手头的发行版直接选。
| 命令 | 所在套件 | 默认预装 | 输出特点 |
|---|---|---|---|
| ipa/ipaddr | iproute2 | 新版发行版默认装 | 显示所有网卡的IPv4、IPv6和MAC地址 |
| ifconfig | net-tools | 新版默认不装 | 只显示已启用网卡,历史遗留格式 |
| hostname-I | hostname包 | 默认预装 | 只输出IP地址本身,适合脚本调用 |
ifconfig这条命令你在老服务器上经常会看到,它属于net-tools套件,Debian10以后默认移除了该套件,Ubuntu20.04起执行ifconfig会提示commandnotfound。你如果必须用它,先sudoaptinstallnet-tools(Debian/Ubuntu)或sudodnfinstallnet-tools(RHEL/CentOS/Rocky),装完再敲ifconfig就能看到eth0、ens33这类网卡信息。它的输出里inetaddr:后面跟IPv4,跟ip命令的inet字段对应但格式不同。
hostname-I这条命令适合写脚本时用,它只输出IP地址本身,不带任何网卡名、MAC地址或状态标记,多个网卡地址之间用空格分隔。你在shell脚本里要把IP赋值给变量,直接用ip=$(hostname-I|awk'{print$1}')就能拿到第一个内网地址,比手动解析ipaddr的输出省事。注意-I是大写,小写-i会输出主机名的DNS信息,别敲错。
linux查看公网ip的方法
内网地址拿到了,如果你在云服务器上还需要确认公网出口IP,用curlifconfig.me或者curlip.sb这类外部接口比较直接。这些接口会根据你请求的来源IP返回对应的公网地址,输出通常就是一串纯IP数字。你也可以用curlcip.cc,它会同时返回运营商、归属地和端口信息,适合排查出口IP被识别到哪个地区。
curlifconfig.me这类方法依赖外部网络连通,服务器如果出站防火墙限制了80/443端口到这些接口的访问,命令会直接超时无输出。该方法的适用边界是:服务器能正常访问外网HTTP/HTTPS服务,且你不需要精确到网卡级别的路由信息;纯内网隔离环境里你拿不到公网IP,这种情况下去云服务商控制台看弹性公网IP(EIP)绑定记录更可靠。
公网IP和内网IP不是一回事。
筛选特定网卡的输出,你在ip命令后面跟上网卡名就行,ipaddrshoweth0只输出eth0这一块网卡的信息,避免一堆docker0、veth开头的虚拟网卡干扰视线。docker安装后会自动生成docker0网桥,它的172.17.0.1地址是Docker内部网段,不是你对外服务的网卡地址,别把它当成服务器真实IP写进配置文件。
