ifconfig 命令详解与参数实测(Ubuntu 22.04)

ifconfig 逐参数实测详解:默认输出 eth0 与 lo 逐字段解读(含 flags 位解码)、-a 显示 down 接口、-s 精简统计、up/down 启停、add/del 临时 IP 与别名接口、mtu 修改,含 CAP_NET_ADMIN 缺失场景真实报错诊断与 IPv4 add 语义陷阱记录,附 ifconfig 与 ip 命令映射表,全部回显在 Ubuntu 22.04(net-tools 2.10)实测通过。

Linux命令Linux系统UbuntuUbuntu 22.04命令行网络工具2026/10/16

ifconfig 命令详解与参数实测(Ubuntu 22.04)

目标:全面掌握 ifconfig 的每一个常用参数——默认输出(eth0 与 lo 的逐字段解读)、-a 显示 down 接口、单接口查看、-s 精简统计、up/down、add/del 临时 IP 与别名接口、mtu 修改,以及创建接口与清理的完整生命周期,附 ifconfig 与 ip 命令映射表与权限受限场景的实测记录,全部命令与回显已在 Ubuntu 22.04(net-tools 2.10)实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • ifconfig 版本:net-tools 2.10-alpha(ifconfig --version 实测首行),由 net-tools 软件包提供(apt install net-tools)
  • 本机接口清单(ip -o link show 实测):lo(LOOPBACK,UP,MTU 65536)与 eth0(BROADCAST,UP,MTU 1500,地址 172.17.0.2/16)
  • 权限基线:本实测环境 root 的 CapEff 为 00000000a80425fb,不含 CAP_NET_ADMIN 能力位,所有写接口的 ioctl(SIOCSIFFLAGS/SIOCSIFADDR/SIOCSIFMTU/SIOCSIFNETMASK)均被内核拒绝;因此本文对修改类参数采取「真实失败回显 + 语义说明」双轨记录(见 3.4~3.7 与第五节 Q1),读类参数全部完整实测
  • 辅助数据:带宽演示用 python3 -m http.server 18000 --bind 127.0.0.1 提供回环流量

二、命令概览

2.1 语法与测试数据

ifconfig(interface configurator)用于查看与配置内核网络接口,基本语法是:

ifconfig [-a] [-v] [-s] <interface> [[<AF>] <address>] [参数]
  • 不带参数:显示当前 UP 的接口;-a 额外显示 down 状态接口
  • ifconfig <interface>:只看一个接口;ifconfig <interface> <配置项>:修改配置(需 root 与 CAP_NET_ADMIN)
  • 数据来自内核 ioctl(SIOCGIFCONF/SIOCGIFFLAGS 等)与 /proc/net/dev

本文演示不需要额外构造数据:本机自带 eth0(业务网卡视角)与 lo(回环),带宽场景临时起一个回环 HTTP 服务即可。修改类实验的完整命令序列(在具备 CAP_NET_ADMIN 的机器上可复现)以 dummy 虚拟接口为例:

ip link add dummy0 type dummy          # 创建测试接口(不触碰真实网卡)
ifconfig dummy0 up                     # 启用
ifconfig dummy0 10.0.0.1/24            # 配置临时 IP
ifconfig dummy0 mtu 1400               # 修改 MTU
ip link del dummy0                     # 用完即删

本环境因权限受限无法执行上述写操作,实测回显见 3.4~3.7;这也是一份有价值的排障素材——修改类命令报 Operation not permitted 时的完整诊断路径在第五节 Q1。

2.2 --help 全量输出

ifconfig --help 逐行照抄如下(实测回显中硬件类型清单出现在 Usage 之前,是 net-tools 分流 stdout/stderr 的缓冲顺序所致,原样保留):

    loop (Local Loopback) slip (Serial Line IP) cslip (VJ Serial Line IP)
    slip6 (6-bit Serial Line IP) cslip6 (VJ 6-bit Serial Line IP) adaptive (Adaptive Serial Line IP)
    ash (Ash) ether (Ethernet) ax25 (AMPR AX.25)
    netrom (AMPR NET/ROM) rose (AMPR ROSE) tunnel (IPIP Tunnel)
    ppp (Point-to-Point Protocol) hdlc ((Cisco)-HDLC) lapb (LAPB)
    arcnet (ARCnet) dlci (Frame Relay DLCI) frad (Frame Relay Access Device)
    sit (IPv6-in-IPv4) fddi (Fiber Distributed Data Interface) hippi (HIPPI)
    irda (IrLAP) ec (Econet) x25 (generic X.25)
    eui64 (Generic EUI-64)
    unix (UNIX Domain) inet (DARPA Internet) inet6 (IPv6)
    ax25 (AMPR AX.25) netrom (AMPR NET/ROM) rose (AMPR ROSE)
    ipx (Novell IPX) ddp (Appletalk DDP) ec (Econet)
    ash (Ash) x25 (CCITT X.25)
Usage:
  ifconfig [-a] [-v] [-s] <interface> [[<AF>] <address>]
  [add <address>[/<prefixlen>]]
  [del <address>[/<prefixlen>]]
  [[-]broadcast [<address>]]  [[-]pointopoint [<address>]]
  [netmask <address>]  [dstaddr <address>]  [tunnel <address>]
  [outfill <NN>] [keepalive <NN>]
  [hw <HW> <address>]  [mtu <NN>]
  [[-]trailers]  [[-]arp]  [[-]allmulti]
  [multicast]  [[-]promisc]
  [mem_start <NN>]  [io_addr <NN>]  [irq <NN>]  [media <type>]
  [txqueuelen <NN>]
  [[-]dynamic]
  [up|down] ...

  <HW>=Hardware Type.
  List of possible hardware types:
  <AF>=Address family. Default: inet
  List of possible address families:

usage 行给出了 ifconfig 的能力边界:查看与设置接口地址、netmask、broadcast、MTU、硬件地址、队列长度、promisc/allmulti 等标志位,以及 up|down;不能创建/删除接口(那要靠 ip link),这正是第六节映射表存在的原因。

2.3 版本信息

ifconfig --version; echo rc=$?
net-tools 2.10-alpha
rc=0

三、参数逐项实测

3.1 默认输出(eth0 与 lo 逐字段解读)

不带参数显示当前所有 UP 接口,是排障的第一眼:

ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether fe:7b:dc:56:f2:9d  txqueuelen 0  (Ethernet)
        RX packets 4158  bytes 9619155 (9.6 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4482  bytes 288048 (288.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

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)
        RX packets 17174  bytes 98484589 (98.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17174  bytes 98484589 (98.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

逐字段解读(以 eth0 为例):

字段实测值含义
flags=4163<UP,BROADCAST,RUNNING,MULTICAST>4163接口标志位(数值解码见下表)
mtu1500最大传输单元,以太网标准值
inet / netmask / broadcast172.17.0.2 / 255.255.0.0 / 172.17.255.255IPv4 地址、掩码、广播地址
etherfe:7b:dc:56:f2:9dMAC 地址
txqueuelen0发送队列长度
RX packets / bytes4158 / 9619155累计收包数/字节数
RX errors / dropped / overruns / frame全 0坏包 / 缓冲不足丢弃 / FIFO 溢出 / 帧对齐错误
TX packets / bytes4482 / 288048累计发包数/字节数
TX errors / dropped / overruns / carrier / collisions全 0发送错误 / 丢弃 / 溢出 / 载波故障 / 冲突(全双工下应为 0)

flags 数值解码(内核 IF_* 位标志):4163 = 0x1043 = UP(0x1)+ BROADCAST(0x2)+ RUNNING(0x40)+ MULTICAST(0x1000);lo 的 73 = 0x49 = UP + LOOPBACK(0x8)+ RUNNING。RUNNING 在位代表链路物理层正常——网线拔掉时 RUNNING 消失,这是远程判断「接口是否活着」的第一依据。

lo 的特点是收发完全对称(RX=TX,本机自收自发)、MTU 65536(回环无链路层开销),排查本机服务连通性先看 lo 是否 UP。

单接口查看(与默认输出对应行完全一致,实测):

ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether fe:7b:dc:56:f2:9d  txqueuelen 0  (Ethernet)
        RX packets 4158  bytes 9619155 (9.6 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4482  bytes 288048 (288.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
ifconfig lo
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)
        RX packets 17174  bytes 98484589 (98.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17174  bytes 98484589 (98.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3.2 -a:显示 down 状态接口

-a(--all)显示全部接口,包括管理员手动 down 掉的。本机 lo 与 eth0 均为 UP,实测输出与默认视图逐字一致:

ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether fe:7b:dc:56:f2:9d  txqueuelen 0  (Ethernet)
        RX packets 4158  bytes 9619155 (9.6 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4482  bytes 288048 (288.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

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)
        RX packets 17174  bytes 98484589 (98.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17174  bytes 98484589 (98.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

两视图的差异只有一条:接口被 down 后,默认视图不再显示,-a 仍显示(flags 中 UP 位消失,形如 flags=4163<BROADCAST,RUNNING,MULTICAST>,且不再有 inet 行——down 不清除地址,只是不参与收发)。想在本机复现 down 接口需要先造一个测试接口,实测创建动作在本环境被内核拒绝:

ip link add dummy0 type dummy; echo rc=$?
RTNETLINK answers: Operation not permitted
rc=2
ifconfig dummy0; echo rc=$?
dummy0: error fetching interface information: Device not found
rc=1
grep CapEff /proc/self/status
CapEff: 00000000a80425fb
  • ip link add 报 RTNETLINK answers: Operation not permitted:创建接口需要 CAP_NET_ADMIN,本环境能力位图 0xa80425fb 不含该位(第五节 Q1 有完整诊断路径)。
  • 由此也实测了 ifconfig 对不存在接口的报错形态:Device not found,rc=1——排障时先区分「接口不存在」与「权限不足」两类错误。

3.3 -s:精简统计(与默认输出对照)

-s(--short)把每个接口压缩成一行,列与 3.1 的 RX/TX 明细一一对应,适合快速巡检与脚本采集:

ifconfig -s
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0      1500     4158      0      0 0          4482      0      0      0 BMRU
lo       65536    17174      0      0 0         17174      0      0      0 LRU
  • RX-ERR/RX-DRP/RX-OVR 分别对应默认输出的 errors/dropped/overruns;TX 侧同理。
  • Flg 是 flags 的字母缩写:B=BROADCAST M=MULTICAST R=RUNNING U=UP L=LOOPBACK(与 netstat -i 的 Flg 列同源,见 netstat 篇 3.11)。
  • -s 数值与默认输出完全一致(4158/4482 等逐字可对上),差别只是呈现密度;巡检脚本首选 -s。

3.4 up / down:启用与停用接口

ifconfig <iface> up 启用接口、ifconfig <iface> down 停用。两者都走 SIOCSIFFLAGS ioctl,本环境实测被内核拒绝:

ifconfig lo up; echo rc=$?
SIOCSIFFLAGS: Operation not permitted
rc=255
  • rc=255:net-tools 内部以 -1 退出,shell 显示为 255;SIOCSIFFLAGS 是设置接口标志的 ioctl 名——看到它就说明命令已发出、被权限拦截。
  • 语义说明(在具备权限的机器上的效果):ifconfig dummy0 up 后该接口 flags 增加 UP 位并开始收发;ifconfig dummy0 down 后 UP 位清除、套接字绑定仍在但不再收发包。
  • ifconfig eth0 down 属高危操作:远程 SSH 场景下执行会立即断网且无法远程恢复,只能靠带外/控制台救回。生产环境请勿对承载连接的网卡执行 down,测试请使用 ip link add dummy0 type dummy 造出的专用接口。

3.5 add / del:临时 IP 与别名接口

这里有一个 net-tools 的语义陷阱:usage 里的 add <address>[/<prefixlen>] 面向的是 IPv6 地址族(inet6),对 IPv4 地址串它会当主机名去解析。实测:

ifconfig dummy0 add 10.0.0.2/24; echo rc=$?
10.0.0.2/24: Unknown host
rc=1
ifconfig dummy0 del 10.0.0.2/24; echo rc=$?
10.0.0.2/24: Unknown host
rc=1

两个命令都把 10.0.0.2/24 当主机名解析失败(Unknown host,rc=1),并没有执行任何地址操作。给 IPv4 接口设置地址的正确写法是直接给地址(支持 CIDR 前缀),加第二地址则用别名接口。实测设置动作(接口不存在与权限不足两种真实回显):

ifconfig dummy0 10.0.0.1/24; echo rc=$?
SIOCSIFADDR: Operation not permitted
dummy0: ERROR while getting interface flags: No such device
SIOCSIFNETMASK: Operation not permitted
rc=255
ifconfig lo:0 127.0.0.2 netmask 255.0.0.0; echo rc=$?
SIOCSIFADDR: Operation not permitted
SIOCSIFFLAGS: Operation not permitted
SIOCSIFNETMASK: Operation not permitted
rc=255
ifconfig lo:0; echo rc=$?
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        loop  txqueuelen 1000  (Local Loopback)

rc=0

解读:

  • ifconfig dummy0 10.0.0.1/24 的回显证明 net-tools 正确把 /24 拆成了地址(SIOCSIFADDR)与掩码(SIOCSIFNETMASK)两个 ioctl——CIDR 语法是可用的,失败点只剩权限与接口存在性两层(回显里同时出现 Operation not permitted 与 No such device,对应这两层)。
  • 别名 lo:0 的读取(ifconfig lo:0)不需要权限、rc=0,显示 flags/MTU 但无 inet 行(地址未设置成功);lo:0 这类标签是 net-tools 管理同接口多 IP 的传统方式,在具备权限的机器上 ifconfig dummy0:0 10.0.0.3/24 即可挂上第二地址,ifconfig dummy0:0 down 单独停用而不影响主地址。
  • 删除地址:主地址用 ifconfig dummy0 0.0.0.0 清除(语义),现行替代是 ip addr del 10.0.0.1/24 dev dummy0(见 3.9 节)。
  • 临时 IP 重启即失效;要持久化必须写入 Netplan(Ubuntu 22.04 的 /etc/netplan/*.yaml)。

💡 说明:add/del 是 IPv6 语义、IPv4 设置地址直接给地址串——这两个易混点用一句话记:IPv4 看 ifconfig <接口> <地址>,IPv6 才用 add/del;别名接口(lo:0/eth0:0)只是 net-tools 的历史方案,现代写法见 3.9 节。

3.6 mtu:修改接口 MTU

mtu <NN> 修改最大传输单元,走 SIOCSIFMTU ioctl。对已存在的 lo 与 eth0 实测(MTU 本就分别是 65536/1500,若获允许则为无实际变化的等值设置,命令安全性无虞):

ifconfig lo mtu 1500; echo rc=$?
SIOCSIFMTU: Operation not permitted
rc=1
ifconfig eth0 mtu 1500; echo rc=$?
SIOCSIFMTU: Operation not permitted
rc=1
  • 两次均为 SIOCSIFMTU: Operation not permitted,rc=1——与 3.4 的 SIOCSIFFLAGS、3.5 的 SIOCSIFADDR 共同构成「写接口三件套」被拒的完整实测证据。
  • 语义说明:ifconfig dummy0 mtu 1400 成功后默认输出的 mtu 字段变为 1400。MTU 排障经验:链路两端 MTU 不一致会导致大包丢、小包通(ping 正常但 TLS 握手卡住),用 ping -M do -s 1472 <目标> 探测路径 MTU 后再调整。

ifconfig 本身没有创建/删除接口的能力(见 2.2 usage 的能力边界),配套动作用 iproute2 完成。本环境实测权限受限回显:

ip link add dummy0 type dummy; echo rc=$?
RTNETLINK answers: Operation not permitted
rc=2

清理验证——确认本机没有遗留测试接口:

ifconfig -a | grep dummy0; echo rc=$?
rc=1
  • ip link add 的错误来自 rtnetlink 层(rc=2),与 ifconfig 的 SIOC* 错误(rc=255/1)分属两套报错风格,诊断时都要先看 CapEff。
  • grep 无命中 rc=1:实测环境无 dummy0 残留,收尾干净。在授权机器上,ip link del dummy0 会连同其全部地址、别名一并删除。

3.8 底层信息与 ip 对照

ifconfig 也能显示 MAC(ether)等底层信息;与 iproute2 的同一数据对照(两工具读的是同一内核对象):

ifconfig eth0 | grep -E "inet|ether"
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether fe:7b:dc:56:f2:9d  txqueuelen 0  (Ethernet)
ip addr show eth0 | head -8
2: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether fe:7b:dc:56:f2:9d brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

同一 MAC(fe:7b:dc:56:f2:9d)与同一地址(172.17.0.2/16)在两工具下完全一致;ip 的输出还带接口序号、BRD 硬件广播、地址生命周期等信息。

3.9 技术拓展:ifconfig 与 ip 命令映射

net-tools 家族(ifconfig/route/arp)与 iproute2 家族(ip)读写同一内核对象,输出同源(3.8 实测一致)。ifconfig 停止维护后,Ubuntu 官方文档与主流基线均推荐迁移到 ip:

用途ifconfig 写法ip 等价写法
查看全部接口ifconfig -aip addr(含地址)/ ip link(仅链路层)
查看单接口ifconfig eth0ip addr show dev eth0
精简统计ifconfig -sip -br addr / ip -s link
设置 IPv4 地址ifconfig eth0 10.0.0.1/24ip addr add 10.0.0.1/24 dev eth0
删除地址ifconfig eth0 0.0.0.0ip addr del 10.0.0.1/24 dev eth0
同口多地址ifconfig eth0:0 10.0.0.2/24(别名)ip addr add 10.0.0.2/24 dev eth0(原生多地址,无需别名)
启用/停用ifconfig eth0 up/downip link set eth0 up/down
修改 MTUifconfig eth0 mtu 1400ip link set eth0 mtu 1400
创建/删除接口不支持ip link add dummy0 type dummy / ip link del dummy0
ARP/邻居表(arp 命令)ip neigh
路由表(route 命令)ip route

ip 的两个结构性优势值得点名:一接口多地址不再需要 eth0:0 这类伪接口(3.5 的别名机制是为老内核/老工具发明的过渡方案);创建/删除接口等生命周期操作只能由 ip 完成(2.1 的 dummy0 流程)。ifconfig 在今天的主要价值是快速可读的计数器视图(3.1)与历史脚本兼容。

💡 说明:迁移口径——只读查看类场景 ifconfig 仍可用;凡是写操作(改地址、改 MTU、加删接口)一律走 ip,功能更全且持续维护。

四、实战示例

4.1 提取 IP 与 MAC(脚本化)

ifconfig eth0 | grep -w inet | tr -s " " | cut -d" " -f3
172.17.0.2
ifconfig eth0 | grep -w ether | tr -s " " | cut -d" " -f3
fe:7b:dc:56:f2:9d

grep -w inet 避免误匹配 inet6,两段管道可直接嵌入脚本取值。

4.2 接口健康巡检(-s 一行一卡)

ifconfig -s
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0      1500     4158      0      0 0          4482      0      0      0 BMRU
lo       65536    17174      0      0 0         17174      0      0      0 LRU

巡检口径:ERR/DRP/OVR 任一列持续增长即异常——ERR 涨看驱动与线缆,DRP 涨看中断/缓冲(softnet_stat),OVR 涨说明流量超过总线处理能力。

4.3 回环带宽差值采样

两次 RX packets/bytes 采样之差即期间流量。先起一个回环服务,请求一次前后各采一次(实测):

python3 -m http.server 18000 --bind 127.0.0.1 >/dev/null 2>&1 &
ifconfig lo | grep "RX packets"
        RX packets 17174  bytes 98484589 (98.4 MB)
curl -s http://127.0.0.1:18000/ >/dev/null
ifconfig lo | grep "RX packets"
        RX packets 17186  bytes 98486563 (98.4 MB)

差值:12 个包、1974 字节——正好对应一次 HTTP 请求/响应在回环上的往返(请求头 + 目录页响应)。同法可对 eth0 做采样估算出口流量。

4.4 与 ip -br addr 快速对照

ip -br addr
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0@if12        UP             172.17.0.2/16

ip -br addr 是 iproute2 的极简地址表,与 ifconfig -s 定位相同;迁移期把两条命令一起跑可加速建立对照关系(第六节映射表)。

五、注意事项与常见问题

Q1:修改接口报 SIOCSIFFLAGS/SIOCSIFADDR/SIOCSIFMTU: Operation not permitted? 三组报错分别对应设标志/设地址/设 MTU 三个 ioctl(本文 3.4~3.6 全部实测命中)。root 身份还不够——需要进程持有 CAP_NET_ADMIN 能力位。诊断三步:id -u 确认 root → grep CapEff /proc/self/status 读能力位图(本环境实测 0xa80425fb 第 12 位为 0 即缺 NET_ADMIN)→ 在标准服务器上用 sudo 重试。远程跳板机/安全加固基线最常见此报错。

Q2:ifconfig eth0 add 192.168.1.5/24 报 Unknown host? net-tools 的 add/del 关键字面向 IPv6;对 IPv4 参数会当主机名解析,实测 10.0.0.2/24: Unknown host(3.5)。IPv4 加第二地址用别名 ifconfig eth0:0 192.168.1.5/24,或直接用现行标准 ip addr add 192.168.1.5/24 dev eth0。

Q3:ifconfig eth0 down 会有什么后果? UP 位清除、接口停止收发,所有建立在 eth0 上的连接(包括你当前的远程会话)立即中断,且无法远程恢复,只能控制台/带外登录救回。本文实测环境从未对 eth0 执行 down(连权限都被拒,等于双保险),测试一律用 dummy 虚拟接口。

Q4:ifconfig 看不到某个接口,但 ip 能看到? 两个常见原因:接口处于 down 状态(默认视图只显示 UP,用 ifconfig -a);接口名超过 15 个字符(内核 IFNAMSIZ 限制,net-tools 家族读不到长名接口,ip 系列不受此限)。

Q5:改了 IP 为什么路由/网关没跟着变? ifconfig 只管接口层的地址与标志,不维护路由表。设置新网段地址后通常还要 ip route add ... via <网关>(或用 netstat -r 核对现状)。这也是迁移到 iproute2 的原因之一:ip addr add + ip route 在同一套命令体系内。

Q6:设置的临时 IP 重启后消失? ifconfig 的全部修改(地址、MTU、flags)都只写内核运行态,重启即失。持久化用 Ubuntu 22.04 的 Netplan(/etc/netplan/*.yaml)改完 netplan apply。

Q7:ifconfig 会被移除吗? net-tools 自 2.10 起停止功能维护,Ubuntu 22.04 最小安装默认不含它。读操作与 ip 完全等价(3.8 实测同源数据),新脚本建议直接使用 ip addr/ip -s link;本文第六节给出完整映射。

六、参考链接