文章目录
- 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 工具集,功能极其强大。
-
具体示例:
baship addr # 或者只查看 IPv4 地址 ip -4 addr show eth0 -
结果分析:
输出中会包含类似inet 192.168.1.100/24的信息。其中inet代表 IPv4 地址,/24是子网掩码的 CIDR 写法,eth0或ens33是网卡名称。 -
安装情况: 几乎所有现代 Linux 系统默认自带。
2. ifconfig ------ 【传统经典,逐渐被弃用】
老一代运维人员最熟悉的命令,属于 net-tools 工具集。
-
具体示例:
bashifconfig # 查看所有网卡(包括未启用的) ifconfig -a -
结果分析:
找到对应的网卡(如 eth0),其下的inet 192.168.1.100即为 IP 地址,netmask为子网掩码。 -
安装情况: 在现代发行版(如 Ubuntu 22.04+、CentOS 8+)中默认不再预装 。如果提示
command not found,需要手动安装net-tools软件包。
3. hostname -I ------ 【最简洁快速】
如果你只想快速获取本机的所有 IP 地址,不想看一堆复杂的网卡信息,这个命令最合适。
-
具体示例:
bashhostname -I -
结果分析:
直接输出一串 IP 地址,例如192.168.1.100 172.17.0.1,中间用空格隔开。 -
安装情况: 系统默认自带。
4. nmcli ------ 【NetworkManager 专用】
这是 NetworkManager(网络管理器)的命令行工具,常用于桌面版 Linux 或部分服务器环境,适合管理"连接"状态。
-
具体示例:
bashnmcli device show # 或者查看简要状态 nmcli device status -
结果分析:
在输出中找到IP4.ADDRESS[1]字段,后面跟着的就是 IP 地址和掩码。 -
安装情况: 只要系统安装了 NetworkManager 服务就自带(通常桌面版和部分服务器版默认开启)。
5. ip route ------ 【通过路由反查】
主要用于查看路由表,但可以通过查看"默认网关"来确认哪个网卡正在负责对外通信。
-
具体示例:
baship 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 的主要区别
虽然上述命令在两个系统下都能用,但在实际体验和底层配置上存在差异:
-
默认工具的倾向性:
- Ubuntu (尤其是桌面版): 高度依赖
NetworkManager,因此nmcli非常好用且常用。同时,Ubuntu 较早地在最小化安装中也移除了ifconfig,强制用户转向ip命令。 - CentOS/RHEL: 传统服务器环境更倾向于底层的网络脚本配置。虽然也支持
nmcli,但运维人员更习惯直接使用ip命令或通过修改配置文件来管理网络。
- Ubuntu (尤其是桌面版): 高度依赖
-
如果需要安装缺失的命令(如 ifconfig):
-
Ubuntu (使用 apt 包管理器):
bashsudo apt update sudo apt install net-tools -y -
CentOS (使用 yum/dnf 包管理器):
bashsudo yum install net-tools -y # 或者在 CentOS 8/9 上使用 dnf sudo dnf install net-tools -y
-
-
永久配置的存放位置(进阶了解):
- Ubuntu: 新版本通常使用 Netplan,配置文件在
/etc/netplan/*.yaml。 - CentOS 7/8: 配置文件通常在
/etc/sysconfig/network-scripts/ifcfg-网卡名。
- Ubuntu: 新版本通常使用 Netplan,配置文件在
总结建议:
作为现代 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是广播地址。RX和TX分别代表接收和发送的数据包统计信息,可以用来排查网络丢包问题。
- 直接看网卡名(如
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 addr、ifconfig、hostname -I 和 nmcli 进行了横向对比:
| 命令 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| ip addr | 功能最强大且全面(支持IPv6、VLAN、多IP等);输出信息结构化,非常适合写脚本自动提取。 | 参数相对较多,对纯新手来说初次接触稍有门槛。 | 日常运维首选。无论是排查复杂网络故障,还是编写自动化运维脚本,都是绝对的主力。 |
| ifconfig | 语法极其简单,输出结果一目了然,老一代运维人员非常习惯。 | 已被官方弃用,多年未实质更新;不支持现代网络特性(如部分IPv6、策略路由);在新系统中默认没有。 | 维护老旧服务器系统,或者个人有强烈使用习惯且已经手动安装好工具的环境。 |
| hostname -I | 极简主义,没有任何多余的干扰信息,一眼就能看到所有IPv4地址。 | 只能看个大概的IP,无法看到子网掩码、MAC地址、网卡状态等详细网络信息。 | 当你只想快速复制一下本机IP用于SSH远程连接,不想在一堆参数里翻找时。 |
| nmcli | 能反映网络连接的逻辑状态(比如是否被NetworkManager接管、是否已激活)。 | 强依赖 NetworkManager 服务,如果该服务没开,这个命令就废了。 | 带有图形界面的 Linux 桌面版,或者明确使用 NM 来管理网络的服务器环境。 |