总结Linux下查看IP地址的相关命令

文章目录

  • 1、整体概述
    • [🛠️ 核心命令详解与示例](#🛠️ 核心命令详解与示例)
      • [1. ip addr (或简写为 ip a) ------ 【现代 Linux 的首选】](#1. ip addr (或简写为 ip a) —— 【现代 Linux 的首选】)
      • [2. ifconfig ------ 【传统经典,逐渐被弃用】](#2. ifconfig —— 【传统经典,逐渐被弃用】)
      • [3. hostname -I ------ 【最简洁快速】](#3. hostname -I —— 【最简洁快速】)
      • [4. nmcli ------ 【NetworkManager 专用】](#4. nmcli —— 【NetworkManager 专用】)
      • [5. ip route ------ 【通过路由反查】](#5. ip route —— 【通过路由反查】)
    • [📊 为什么要提供这么多命令?优缺点与场景对比](#📊 为什么要提供这么多命令?优缺点与场景对比)
    • [💡 Ubuntu 与 CentOS 的主要区别](#💡 Ubuntu 与 CentOS 的主要区别)
  • 2、演示示例
    • [1. ip addr (或简写为 ip a) ------ 【现代 Linux 的首选】](#1. ip addr (或简写为 ip a) —— 【现代 Linux 的首选】)
    • [2. ifconfig ------ 【传统经典】](#2. ifconfig —— 【传统经典】)
    • [3. hostname -I ------ 【最简洁快速】](#3. hostname -I —— 【最简洁快速】)
    • [4. nmcli ------ 【NetworkManager 专用】](#4. nmcli —— 【NetworkManager 专用】)
    • [5. ip route ------ 【通过路由反查】](#5. ip route —— 【通过路由反查】)
  • 3、有哪些优缺点、分别适合什么场景
      • [📊 各大命令的优缺点与适用场景对比](#📊 各大命令的优缺点与适用场景对比)

1、整体概述

在 Linux 系统中,查看设备 IP 地址的命令确实有多种。这主要是因为 Linux 网络工具经历了从传统的 net-tools 套件到现代更强大的 iproute2 套件的演进,加上不同发行版(如 Ubuntu 和 CentOS)在网络管理理念上的差异,导致了多种命令并存的现状。

以下为你详细介绍这些核心命令的具体用法、优缺点及适用场景:

🛠️ 核心命令详解与示例

1. ip addr (或简写为 ip a) ------ 【现代 Linux 的首选】

这是目前最推荐使用的命令,属于 iproute2 工具集,功能极其强大。

  • 具体示例:

    bash 复制代码
    ip addr
    # 或者只查看 IPv4 地址
    ip -4 addr show eth0
  • 结果分析:
    输出中会包含类似 inet 192.168.1.100/24 的信息。其中 inet 代表 IPv4 地址,/24 是子网掩码的 CIDR 写法,eth0ens33 是网卡名称。

  • 安装情况: 几乎所有现代 Linux 系统默认自带

2. ifconfig ------ 【传统经典,逐渐被弃用】

老一代运维人员最熟悉的命令,属于 net-tools 工具集。

  • 具体示例:

    bash 复制代码
    ifconfig
    # 查看所有网卡(包括未启用的)
    ifconfig -a
  • 结果分析:
    找到对应的网卡(如 eth0),其下的 inet 192.168.1.100 即为 IP 地址,netmask 为子网掩码。

  • 安装情况: 在现代发行版(如 Ubuntu 22.04+、CentOS 8+)中默认不再预装 。如果提示 command not found,需要手动安装 net-tools 软件包。

3. hostname -I ------ 【最简洁快速】

如果你只想快速获取本机的所有 IP 地址,不想看一堆复杂的网卡信息,这个命令最合适。

  • 具体示例:

    bash 复制代码
    hostname -I
  • 结果分析:
    直接输出一串 IP 地址,例如 192.168.1.100 172.17.0.1,中间用空格隔开。

  • 安装情况: 系统默认自带

4. nmcli ------ 【NetworkManager 专用】

这是 NetworkManager(网络管理器)的命令行工具,常用于桌面版 Linux 或部分服务器环境,适合管理"连接"状态。

  • 具体示例:

    bash 复制代码
    nmcli device show
    # 或者查看简要状态
    nmcli device status
  • 结果分析:
    在输出中找到 IP4.ADDRESS[1] 字段,后面跟着的就是 IP 地址和掩码。

  • 安装情况: 只要系统安装了 NetworkManager 服务就自带(通常桌面版和部分服务器版默认开启)。

5. ip route ------ 【通过路由反查】

主要用于查看路由表,但可以通过查看"默认网关"来确认哪个网卡正在负责对外通信。

  • 具体示例:

    bash 复制代码
    ip route show
  • 结果分析:
    输出 default via 192.168.1.1 dev eth0,表示默认流量通过 eth0 网卡发出,结合 ip addr 就能确认该网卡的 IP。

  • 安装情况: 系统默认自带 (同属 iproute2 工具集)。


📊 为什么要提供这么多命令?优缺点与场景对比

Linux 并没有强制统一使用某一个命令,而是保留了多种工具以适应不同的历史阶段和使用习惯。以下是它们的横向对比:

命令 优点 缺点 适用场景
ip addr 功能最全,支持IPv6/策略路由,输出规范,脚本处理友好 命令参数较多,对新手稍有门槛 日常运维首选,编写自动化脚本,排查复杂网络故障
ifconfig 语法简单,输出直观,老用户习惯 已停止维护,不支持现代网络特性(如部分IPv6、VLAN),新系统需额外安装 维护老旧系统,或者个人习惯使用且已安装好工具的环境
hostname -I 极简,无多余干扰信息 只能看IP,无法看到子网掩码、MAC地址等详细信息 快速复制IP地址用于SSH远程连接时
nmcli 能反映网络连接的逻辑状态(是否受管、激活) 依赖 NetworkManager 服务,纯命令行服务器可能未开启 带有图形界面的 Linux,或使用 NM 管理网络的服务器

💡 Ubuntu 与 CentOS 的主要区别

虽然上述命令在两个系统下都能用,但在实际体验和底层配置上存在差异:

  1. 默认工具的倾向性:

    • Ubuntu (尤其是桌面版): 高度依赖 NetworkManager,因此 nmcli 非常好用且常用。同时,Ubuntu 较早地在最小化安装中也移除了 ifconfig,强制用户转向 ip 命令。
    • CentOS/RHEL: 传统服务器环境更倾向于底层的网络脚本配置。虽然也支持 nmcli,但运维人员更习惯直接使用 ip 命令或通过修改配置文件来管理网络。
  2. 如果需要安装缺失的命令(如 ifconfig):

    • Ubuntu (使用 apt 包管理器):

      bash 复制代码
      sudo apt update
      sudo apt install net-tools -y
    • CentOS (使用 yum/dnf 包管理器):

      bash 复制代码
      sudo yum install net-tools -y
      # 或者在 CentOS 8/9 上使用 dnf
      sudo dnf install net-tools -y
  3. 永久配置的存放位置(进阶了解):

    • Ubuntu: 新版本通常使用 Netplan,配置文件在 /etc/netplan/*.yaml
    • CentOS 7/8: 配置文件通常在 /etc/sysconfig/network-scripts/ifcfg-网卡名

总结建议:

作为现代 Linux 用户,建议你优先熟练掌握 ip addr (查看地址)和 ip route(查看路由)。它们是目前唯一应该长期投入学习的标准网络命令,既能应对所有发行版,也能满足未来容器化、虚拟化等复杂网络环境的排查需求。

2、演示示例

1. ip addr (或简写为 ip a) ------ 【现代 Linux 的首选】

  • 具体示例与结果:

    bash 复制代码
    [root@localhost ~]# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:99:e2:98 brd ff:ff:ff:ff:ff:ff
        inet 192.168.10.106/24 brd 192.168.10.255 scope global noprefixroute dynamic ens33
           valid_lft 21246sec preferred_lft 21246sec
        inet6 fe80::5ce3:d4c8:5a7d:326e/64 scope link noprefixroute
           valid_lft forever preferred_lft forever
  • 结果分析:

    • lo 是本地回环接口(代表本机),ens33 是实际的物理网卡名称(也可能是 eth0、enp0s3 等)。
    • 看 IPv4 地址 :找到 inet 开头的行,例如 inet 192.168.10.106/24,其中 192.168.10.106 就是本机的 IP 地址,/24 代表子网掩码。
    • 看 IPv6 地址 :找到 inet6 开头的行。
    • <UP,LOWER_UP>state UP 表示该网卡已正常启动且网线已连接。

2. ifconfig ------ 【传统经典】

  • 具体示例与结果:

    bash 复制代码
    [root@rhel77 ~]# ifconfig
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.10.169  netmask 255.255.255.0  broadcast 192.168.10.255
            inet6 fe80::fab1:2705:b2c9:676d  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:01:1c:bf  txqueuelen 1000  (Ethernet)
            RX packets 363  bytes 33322 (32.5 KiB)
            TX packets 247  bytes 24982 (24.3 KiB)
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
  • 结果分析:

    • 直接看网卡名(如 ens33)下方的第二行。
    • inet 192.168.10.169 即为 IPv4 地址,后面紧跟的 netmask 是子网掩码,broadcast 是广播地址。
    • RXTX 分别代表接收和发送的数据包统计信息,可以用来排查网络丢包问题。

3. hostname -I ------ 【最简洁快速】

  • 具体示例与结果:

    bash 复制代码
    [root@localhost ~]# hostname -I
    192.168.10.106 172.17.0.1
  • 结果分析:

    • 没有任何多余的修饰,直接列出本机所有网卡分配到的 IPv4 地址,中间用空格隔开。非常适合在脚本中提取 IP,或者快速查看时不想被一堆参数干扰的场景。

4. nmcli ------ 【NetworkManager 专用】

  • 具体示例与结果:

    bash 复制代码
    [root@server ~]# nmcli device show ens33
    GENERAL.DEVICE:                         ens33
    GENERAL.TYPE:                           ethernet
    GENERAL.STATE:                          100 (connected)
    ...
    IP4.ADDRESS[1]:                         192.168.10.106/24
    IP4.GATEWAY:                            192.168.10.1
    IP4.DNS[1]:                             8.8.8.8
  • 结果分析:

    • nmcli device status 只能看到简要的连接状态,想看具体 IP 需要用 nmcli device show [网卡名]
    • 在详细输出中,找到 IP4.ADDRESS[1] 字段,后面的 192.168.10.106/24 就是当前的 IP 地址和掩码。同时还能顺便看到网关(GATEWAY)和 DNS 信息。

5. ip route ------ 【通过路由反查】

  • 具体示例与结果:

    bash 复制代码
    [root@localhost ~]# ip route show
    default via 192.168.10.1 dev ens33 proto static metric 100 
    192.168.10.0/24 dev ens33 proto kernel scope link src 192.168.10.106 metric 100
  • 结果分析:

    • default via 192.168.10.1 dev ens33:表示默认网关是 192.168.10.1,数据包会从 ens33 这个网卡发出去。
    • 192.168.10.0/24 dev ens33 ... src 192.168.10.106:表示访问本地局域网网段时,使用 ens33 网卡,并且源 IP 地址(src)是 192.168.10.106。通过这条信息就能准确锁定正在对外的主 IP。

3、有哪些优缺点、分别适合什么场景

📊 各大命令的优缺点与适用场景对比

为了让你更直观地选择,这里将 ip addrifconfighostname -Inmcli 进行了横向对比:

命令 优点 缺点 适合场景
ip addr 功能最强大且全面(支持IPv6、VLAN、多IP等);输出信息结构化,非常适合写脚本自动提取。 参数相对较多,对纯新手来说初次接触稍有门槛。 日常运维首选。无论是排查复杂网络故障,还是编写自动化运维脚本,都是绝对的主力。
ifconfig 语法极其简单,输出结果一目了然,老一代运维人员非常习惯。 已被官方弃用,多年未实质更新;不支持现代网络特性(如部分IPv6、策略路由);在新系统中默认没有。 维护老旧服务器系统,或者个人有强烈使用习惯且已经手动安装好工具的环境。
hostname -I 极简主义,没有任何多余的干扰信息,一眼就能看到所有IPv4地址。 只能看个大概的IP,无法看到子网掩码、MAC地址、网卡状态等详细网络信息。 当你只想快速复制一下本机IP用于SSH远程连接,不想在一堆参数里翻找时。
nmcli 能反映网络连接的逻辑状态(比如是否被NetworkManager接管、是否已激活)。 强依赖 NetworkManager 服务,如果该服务没开,这个命令就废了。 带有图形界面的 Linux 桌面版,或者明确使用 NM 来管理网络的服务器环境。

相关推荐
AlfredZhao1 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao16 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 天前
Linux 11 动态监控指令top
linux
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信