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)实测通过。
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 | 接口标志位(数值解码见下表) |
| mtu | 1500 | 最大传输单元,以太网标准值 |
| inet / netmask / broadcast | 172.17.0.2 / 255.255.0.0 / 172.17.255.255 | IPv4 地址、掩码、广播地址 |
| ether | fe:7b:dc:56:f2:9d | MAC 地址 |
| txqueuelen | 0 | 发送队列长度 |
| RX packets / bytes | 4158 / 9619155 | 累计收包数/字节数 |
| RX errors / dropped / overruns / frame | 全 0 | 坏包 / 缓冲不足丢弃 / FIFO 溢出 / 帧对齐错误 |
| TX packets / bytes | 4482 / 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 后再调整。
3.7 创建接口与清理(ip link add / del)
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 -a | ip addr(含地址)/ ip link(仅链路层) |
| 查看单接口 | ifconfig eth0 | ip addr show dev eth0 |
| 精简统计 | ifconfig -s | ip -br addr / ip -s link |
| 设置 IPv4 地址 | ifconfig eth0 10.0.0.1/24 | ip addr add 10.0.0.1/24 dev eth0 |
| 删除地址 | ifconfig eth0 0.0.0.0 | ip 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/down | ip link set eth0 up/down |
| 修改 MTU | ifconfig eth0 mtu 1400 | ip 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;本文第六节给出完整映射。
六、参考链接
- ifconfig(8) 手册:https://man7.org/linux/man-pages/man8/ifconfig.8.html
- net-tools 项目主页:https://sourceforge.net/projects/net-tools/
- ip-address(8)(iproute2 地址管理):https://man7.org/linux/man-pages/man8/ip-address.8.html
- ip-link(8)(iproute2 接口管理,含 dummy 类型):https://man7.org/linux/man-pages/man8/ip-link.8.html
- capabilities(7)(CAP_NET_ADMIN 能力位):https://man7.org/linux/man-pages/man7/capabilities.7.html
- Ubuntu Server 网络配置文档(Netplan):https://documentation.ubuntu.com/server/how-to/networking/