Linux `ip addr` 命令:网络工程师必备 – wiki大全

Linux ip addr 命令:网络工程师必备

在现代Linux网络管理中,ip addr 命令是网络工程师不可或缺的强大工具。作为 iproute2 工具集的核心组成部分,它已经取代了老旧的 ifconfig 命令,成为配置、诊断和故障排除网络接口及IP地址的首选。本文将深入探讨 ip addr 命令的各个方面,助您掌握其精髓。

为何选择 ip addr 而非 ifconfig

ip addr 相较于 ifconfig 具有显著优势:

  • 现代化与全面性: iproute2 套件提供了一致的语法和更广泛的功能,不仅管理接口,还涵盖路由、隧道等。
  • IPv6 全面支持: ip addr 对 IPv6 提供全面支持,而 ifconfig 的 IPv6 支持有限。
  • 效率更高: ip 命令通过 Netlink 套接字与内核通信,比 ifconfig 使用的旧式 ioctl 系统调用更高效。
  • 接口可见性: ip 可以显示所有(包括启用和禁用)的网络接口,而 ifconfig 通常只显示已启用的接口。

基本语法

ip 命令的基本语法结构为:ip [OPTIONS] OBJECT {COMMAND | help}。对于IP地址管理,OBJECT 通常是 address (或其简写 addra)。

ip addr show (显示 IP 地址)

这是最常用的命令,用于显示网络接口上配置的IP地址。

  • 基本用法:

    • ip addr showip a:显示系统上所有网络接口的IP地址。
    • ip addr show dev <interface_name>:显示特定接口(例如 eth0, ens160)的IP地址。
    • ip addr show up:仅显示处于活动状态的网络接口的地址。
  • 输出解读:
    一个典型的输出示例可能如下:
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:66:72:e1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
    valid_lft 86399sec preferred_lft 86399sec
    inet6 fe80::a00:27ff:fe66:72e1/64 scope link
    valid_lft forever preferred_lft forever

    • 2: eth0::接口索引和名称。
    • <BROADCAST,MULTICAST,UP,LOWER_UP>:接口标志。UP 表示接口已启用,LOWER_UP 表示物理链路已连接。
    • mtu 1500:最大传输单元,接口可处理的最大数据包大小(字节)。
    • qdisc pfifo_fast:队列调度规则。
    • state UP:接口的行政状态。
    • link/ether 08:00:27:66:72:e1:第2层(MAC)地址。
    • inet 192.168.1.100/24:IPv4 地址(192.168.1.100)及其 CIDR 表示法 (/24 等同于 255.255.255.0) 的子网掩码。
    • brd 192.168.1.255:IPv4 广播地址。
    • scope global:表示该地址是全局可达的。其他范围包括 link (仅在本地链路有效) 和 host (仅在主机内部有效)。
    • dynamic:表示地址是动态分配的(例如,通过 DHCP)。
    • valid_lftpreferred_lft:地址的有效和首选生命周期,尤其与 DHCP 和 IPv6 自动配置相关。
    • inet6 fe80::a00:27ff:fe66:72e1/64 scope link:IPv6 链路本地地址及其范围。
  • 实用选项:

    • ip -br addr show:提供简洁的摘要输出。
    • ip -c addr show:彩色显示输出,提高可读性。

ip addr add (添加 IP 地址)

此命令用于为网络接口分配新的IP地址。

  • 语法: sudo ip addr add <ADDRESS/NETMASK> dev <INTERFACE_NAME>
  • 示例 (IPv4): sudo ip addr add 192.168.1.200/24 dev eth0
    这将 192.168.1.200(子网掩码 /24)分配给 eth0 接口。
  • 示例 (IPv6): sudo ip addr add 2001:db8::1/64 dev eth0
  • 多个地址: 您可以为一个接口添加多个IPv4和IPv6地址,这些通常被称为辅助IP地址。
  • 广播地址: 可以使用 brd 关键字明确定义广播地址:sudo ip addr add 192.168.1.201/24 brd + dev eth0 (其中 + 会自动计算广播地址)。
  • 非持久性: 使用 ip addr add 所做的更改是临时的,不会在系统重启后保留。

ip addr del (删除 IP 地址)

此命令用于从网络接口删除特定的IP地址。

  • 语法: sudo ip addr del <ADDRESS/NETMASK> dev <INTERFACE_NAME>
  • 示例: sudo ip addr del 192.168.1.200/24 dev eth0
  • 重要提示: 删除IP地址时,务必指定正确的地址和前缀长度(例如 /24/32)。如果省略或不正确,可能会导致意外删除,尤其是在同一子网下配置了多个地址时。删除主IP地址也可能同时删除同一子网上的辅助地址。
  • ip addr delip link set down 的区别:
    • ip addr del 仅从接口中移除IP地址,系统将不再使用该特定地址进行通信。接口本身保持启动状态,并且仍可以分配其他IP地址。
    • ip link set <interface> down 会在物理层关闭整个网络接口,使其如同网线被拔掉一样。

ip addr flush (清除 IP 地址)

此命令用于清除与指定网络接口关联的所有IP地址(包括IPv4和IPv6)。

  • 语法: sudo ip addr flush dev <INTERFACE_NAME>
  • 警告: 这是一个功能强大的命令,它将清除所有地址而无需确认,请谨慎使用。

使更改持久化

正如前文所述,使用 ip addr 所做的更改默认是非持久的。为了使更改在系统重启后依然有效,网络工程师必须:

  • 编辑特定发行版的配置文件:
    • 对于基于 Debian/Ubuntu 的系统,通常涉及编辑 /etc/network/interfaces
    • 对于基于 Red Hat/CentOS 的系统,配置文件通常位于 /etc/sysconfig/network-scripts/
  • 将命令添加到启动脚本:ip addr 命令集成到在系统启动时运行的脚本中。

总结

ip addr 命令是 Linux 系统中网络工程师的必备工具。其显示、添加、删除和清除IP地址的全面功能,加上对 IPv6 的支持和详细的输出,使其优于旧有的实用程序。掌握 ip addr 对于在 Linux 环境中进行有效的网络管理和故障排除至关重要。

滚动至顶部