告别 ifconfig:为什么现代 Linux 系统推荐使用 ip 命令

告别 ifconfig:为什么现代 Linux 系统推荐使用 ip 命令

告别 ifconfig:为什么现代 Linux 系统推荐使用 ip 命令

ifconfig 指令已经被视为过时的工具,不再是查看和配置网络接口的推荐方式。 与 netstat 被 ss 替代类似。

本文简要介绍 ip addr 命令的使用

简介ip

ifconfig 属于 net-tools 包,这个包在许多现代 Linux 发行版中被标记为废弃。官方推荐的替代命令是 ip,它来自 iproute2 包。

# 没有这个指令的话需要安装一下

sudo apt update

apt install -y iproute2

常见替换对照:

过时命令现代替代功能描述ifconfigip addr显示所有网络接口ifconfig eth0ip addr show dev eth0显示特定接口信息ifconfig eth0 upip link set eth0 up启用网络接口ifconfig eth0 downip link set eth0 down禁用网络接口ifconfig eth0 192.168.1.2ip addr add 192.168.1.2/24 dev eth0设置IP地址为什么应该使用 ip 而非 ifconfig:

功能更完整 - ip 支持更多现代网络特性,如策略路由、隧道配置等语法更一致 - ip 命令有更加一致的语法结构持续维护 - iproute2 包持续获得更新和维护性能更好 - ip 命令在处理大量网络接口时性能更佳发行版支持 - 许多新的Linux发行版默认可能不再预装ifconfig

其他被替代的网络工具:

netstat → ssroute → ip routearp → ip neigh

虽然出于向后兼容性考虑,许多系统仍然可以安装并使用 ifconfig,但在编写新的脚本或学习网络管理时,建议直接学习和使用 ip 命令,这样可以让被优化的时间来得更晚一些。

案例分析1:解读 ip addr 输出

让我们通过分析一个我的服务器的 ip addr 输出,来看看我们应该怎么读这个指令的输出。

ip addr

嚯,眼花缭乱,不要害怕,经过今天我们的学习,后面就清晰了

1. 回环接口详情

1: lo: 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

这是系统回环接口,用于本地通信。其中包含一些技术细节如队列规则(qdisc noqueue)、接口状态(state UNKNOWN)和地址生命周期信息(valid_lft forever),这些对日常使用而言通常无需关注。所以我们直接跳过。

2. 物理网卡状态

未连接网卡 (eno2)

2: eno2: mtu 1500 qdisc mq state DOWN group default qlen 1000

link/ether d0:f4:05:1e:8c:bc brd ff:ff:ff:ff:ff:ff

altname enp1s0

这是未连接的网络接口,可以通过以下特征识别:

标识为 ,其中 NO-CARRIER 表示没有物理连接状态显示为 state DOWN,表示接口未激活下面没有额外信息,表示没有配置IP地址

注意:eno1和eno2表示主板板载网卡,不是"eth number"的缩写,而是"Ethernet On-board"的缩写。

活动网卡 (eno1)

3: eno1: mtu 1500 qdisc fq_codel state UP group default qlen 1000

link/ether d0:f4:05:1e:8c:bb brd ff:ff:ff:ff:ff:ff

altname enp0s31f6

inet 192.168.1.202/24 brd 192.168.1.255 scope global noprefixroute eno1

valid_lft forever preferred_lft forever

inet6 2408:8207:30b2:e580:1814:a9b1:b54:e480/64 scope global temporary dynamic

valid_lft 259175sec preferred_lft 15083sec

inet6 2408:8207:30b2:e580:dacc:3d78:526f:3fbc/64 scope global dynamic mngtmpaddr noprefixroute

valid_lft 259175sec preferred_lft 172775sec

inet6 fe80::39fe:ddc1:60d4:59d8/64 scope link noprefixroute

valid_lft forever preferred_lft forever

这是当前活动的网络接口,可以通过以下特征识别:

信息条目较长,包含完整的IP配置标识为 ,表示接口已启用且物理连接正常状态显示为 state UP,表示接口处于活动状态配置了IP地址 192.168.1.202/24,这就是服务城在局域网中的内网IP

3. Docker网络接口

Docker默认网桥

4: docker0: mtu 1500 qdisc noqueue state UP group default

link/ether 02:42:e9:cf:64:f0 brd ff:ff:ff:ff:ff:ff

inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

valid_lft forever preferred_lft forever

inet6 fe80::42:e9ff:fecf:64f0/64 scope link

valid_lft forever preferred_lft forever

这是Docker的默认网桥接口:

标识为 ,表示网桥已启用且有活动连接配置了IP地址 172.17.0.1/16,作为容器网络的网关状态 state UP 表明Docker网络正常工作这是Docker自动创建的虚拟网桥,用于连接所有容器

4. 容器虚拟网络接口

6: vethce79824@if5: mtu 1500 qdisc noqueue master docker0 state UP group default

link/ether 72:68:6f:98:4b:3c brd ff:ff:ff:ff:ff:ff link-netnsid 0

inet6 fe80::7068:6fff:fe98:4b3c/64 scope link

valid_lft forever preferred_lft forever

这是容器的虚拟网络接口,这个信息反映了我们是有一个docker服务在启用的,如果你有很多docker服务,你可以看到很多这这种veth的虚拟网卡信息:

表示为 vethce79824@if5,是一个虚拟以太网设备master docker0 表明它属于Docker默认网桥link-netnsid 0 指示它连接到特定的网络命名空间状态为 UP,表示接口处于活动状态这个接口的存在表明系统上有正在运行的Docker容器

补充说明:

每个运行的容器都会创建一个veth接口,与docker0网桥相连接口名称中的@if5表示它连接到容器内部的接口5,稍后我们会展开说一下这个接口5当容器停止时,这个虚拟接口会被自动删除

5. 彩蛋:消失的5号接口去哪儿了

接口 5 是存在的,但不在主机的网络命名空间中,而是在容器的网络命名空间内。

我们可以从前面的信息知道 vethce79824@if5 中引用了这个接口。这里有一个网络概念需要解释:

veth 对(Virtual Ethernet Pair)的工作原理

veth 对(Virtual Ethernet Pair):

当 Docker 创建一个容器时,它会创建一对虚拟网络接口这对接口就像一个虚拟的"网线",两端分别连接在不同的网络命名空间一端(这里的 vethce79824)在主机命名空间中,序号为 6另一端(引用的 if5)在容器命名空间中,序号为 5

网络命名空间隔离:

Linux 网络命名空间是网络栈的隔离实例每个容器都有自己独立的网络命名空间主机上的 ip addr 命令只能看到主机命名空间中的接口容器内的接口只能在容器内部看到

接口命名约定:

vethce79824@if5 中的 @if5 表示"这个 veth 接口连接到 ID 为 5 的接口"这个标记让管理员知道这个 veth 接口的"另一头"在哪里

如何查看缺失的接口 5

如果想查看接口 5,需要进入容器的网络命名空间:

# 找到容器 ID

docker ps -a

# 查看容器网络命名空间中的接口

docker exec <容器ID> ip addr

看吧,找的啦!

注意接口 5(容器内的 eth0)引用了接口 6(主机上的 ethce79824)。这是一个双向引用,表明它们是一对 veth 接口。

ifconfig 其他替代指令对照表

为帮助过渡,这里列出常见 ifconfig 命令及其 ip 命令等效替代:

ifconfig 命令ip 命令替代功能ifconfigip addr显示所有接口信息ifconfig eth0ip addr show dev eth0显示特定接口信息ifconfig eth0 upip link set eth0 up启用接口ifconfig eth0 downip link set eth0 down禁用接口ifconfig eth0 192.168.1.1ip addr add 192.168.1.1/24 dev eth0设置IP地址ifconfig eth0 netmask 255.255.255.0ip addr add 192.168.1.1/24 dev eth0设置子网掩码ifconfig eth0 hw ether AA:BB:CC:DD:EE:FFip link set dev eth0 address AA:BB:CC:DD:EE:FF设置MAC地址结论

在现代 Linux 系统中,ip 命令已成为管理网络接口的首选工具。它不仅提供了更丰富、更精确的网络信息,而且拥有更强大的功能集和更一致的语法结构,能够满足现代网络环境(包括容器化、虚拟化等)的需求。

虽然出于习惯和兼容性考虑,许多系统管理员仍在使用 ifconfig,但为了更好地适应现代 Linux 系统的发展趋势,学习和使用 ip 命令将是一项值得的投资。无论是查看网络状态还是进行网络配置,ip 命令都能提供更全面的解决方案。

所以,是时候告别 ifconfig,拥抱 ip 了!

相关文章

拔河口号怎么喊
365bet官网平台网址

拔河口号怎么喊

📅 07-06 👁️ 9461
西联汇款手续费(西联汇款手续费是多少)
365bet官网平台网址

西联汇款手续费(西联汇款手续费是多少)

📅 07-10 👁️ 4098
猫咪公母怎么分?教你轻松辨别猫咪性别的方法与技巧
365bet体育在线下载

猫咪公母怎么分?教你轻松辨别猫咪性别的方法与技巧

📅 06-28 👁️ 2660
隐藏微信好友的方法,怎么隐藏微信联系人?最新方法!
手游问道里游戏币到底该怎么买?安全交易指南与避坑攻略
lol勇者奈德丽皮肤多少钱 奈德丽皮肤价格表
365bet怎么提款

lol勇者奈德丽皮肤多少钱 奈德丽皮肤价格表

📅 06-30 👁️ 8073