总结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 来管理网络的服务器环境。

相关推荐
Cloud_Shy61814 小时前
Linux 系统定时任务Cron(d)服务应用实践(三:定时任务调试技巧及故障分析解决)
linux·网络·centos·云计算·github·运维开发
晚风予卿云月14 小时前
【Linux】初步构建框架—虚拟地址空间(三)—进程与内存管理的解耦优势、深入理解vm_area_struct
linux·运维·服务器·面试
OpsEye14 小时前
服务器突然连不上了,要从哪里开始查?
运维·自动化·无服务器
sbjdhjd15 小时前
从 0 到 1 构建高可用企业级 NoSql 数据库 Redis 集群
linux·运维·redis·云原生·kubernetes·开源·云计算
zincsweet15 小时前
进程间通信入门:匿名管道的使用、阻塞场景与避坑指南
linux
张小姐的猫15 小时前
【Linux】多线程实战 —— 日志类 | 策略模式
linux·运维·服务器·c++·bash·策略模式
qq_4523962315 小时前
第七篇:《Docker 存储:Volume、Bind Mount 与 tmpfs》
运维·docker·容器
love8888_cnsd15 小时前
Git & Linux 速查表
java·linux·git·后端·elasticsearch
handler0115 小时前
【Linux】五种IO模型详解
linux·运维·服务器·c语言·网络·笔记·php