专业层析成像代做网站,网站建设收获,长沙网站备案拍照点,阿里巴巴网站的搜索引擎优化案例告别 ifconfig#xff1a;为什么现代 Linux 系统推荐使用 ip 命令
ifconfig 指令已经被视为过时的工具#xff0c;不再是查看和配置网络接口的推荐方式。 与 netstat 被 ss 替代类似。 本文简要介绍 ip addr 命令的使用
简介ip
ifconfig 属于 net-tools 包#xff0c;这个…告别 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: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever这是系统回环接口用于本地通信。其中包含一些技术细节如队列规则(qdisc noqueue)、接口状态(state UNKNOWN)和地址生命周期信息(valid_lft forever)这些对日常使用而言通常无需关注。所以我们直接跳过。
2. 物理网卡状态
未连接网卡 (eno2) 2: eno2: NO-CARRIER,BROADCAST,MULTICAST,UP mtu 1500 qdisc mq state DOWN group default qlen 1000link/ether d0:f4:05:1e:8c:bc brd ff:ff:ff:ff:ff:ffaltname enp1s0这是未连接的网络接口可以通过以下特征识别
标识为 NO-CARRIER,BROADCAST,MULTICAST,UP其中 NO-CARRIER 表示没有物理连接状态显示为 state DOWN表示接口未激活下面没有额外信息表示没有配置IP地址
注意eno1和eno2表示主板板载网卡不是eth number的缩写而是Ethernet On-board的缩写。
活动网卡 (eno1) 3: eno1: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether d0:f4:05:1e:8c:bb brd ff:ff:ff:ff:ff:ffaltname enp0s31f6inet 192.168.1.202/24 brd 192.168.1.255 scope global noprefixroute eno1valid_lft forever preferred_lft foreverinet6 2408:8207:30b2:e580:1814:a9b1:b54:e480/64 scope global temporary dynamic valid_lft 259175sec preferred_lft 15083secinet6 2408:8207:30b2:e580:dacc:3d78:526f:3fbc/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 259175sec preferred_lft 172775secinet6 fe80::39fe:ddc1:60d4:59d8/64 scope link noprefixroute valid_lft forever preferred_lft forever这是当前活动的网络接口可以通过以下特征识别
信息条目较长包含完整的IP配置标识为 BROADCAST,MULTICAST,UP,LOWER_UP表示接口已启用且物理连接正常状态显示为 state UP表示接口处于活动状态配置了IP地址 192.168.1.202/24这就是服务城在局域网中的内网IP
3. Docker网络接口
Docker默认网桥 4: docker0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc noqueue state UP group default link/ether 02:42:e9:cf:64:f0 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:e9ff:fecf:64f0/64 scope link valid_lft forever preferred_lft forever这是Docker的默认网桥接口
标识为 BROADCAST,MULTICAST,UP,LOWER_UP表示网桥已启用且有活动连接配置了IP地址 172.17.0.1/16作为容器网络的网关状态 state UP 表明Docker网络正常工作这是Docker自动创建的虚拟网桥用于连接所有容器
4. 容器虚拟网络接口 6: vethce79824if5: BROADCAST,MULTICAST,UP,LOWER_UP 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 0inet6 fe80::7068:6fff:fe98:4b3c/64 scope link valid_lft forever preferred_lft forever这是容器的虚拟网络接口这个信息反映了我们是有一个docker服务在启用的如果你有很多docker服务你可以看到很多这这种veth的虚拟网卡信息
表示为 vethce79824if5是一个虚拟以太网设备master docker0 表明它属于Docker默认网桥link-netnsid 0 指示它连接到特定的网络命名空间状态为 UP表示接口处于活动状态这个接口的存在表明系统上有正在运行的Docker容器
补充说明
每个运行的容器都会创建一个veth接口与docker0网桥相连接口名称中的if5表示它连接到容器内部的接口5稍后我们会展开说一下这个接口5当容器停止时这个虚拟接口会被自动删除
5. 彩蛋消失的5号接口去哪儿了 接口 5 是存在的但不在主机的网络命名空间中而是在容器的网络命名空间内。 我们可以从前面的信息知道 vethce79824if5 中引用了这个接口。这里有一个网络概念需要解释
veth 对Virtual Ethernet Pair的工作原理 veth 对Virtual Ethernet Pair 当 Docker 创建一个容器时它会创建一对虚拟网络接口这对接口就像一个虚拟的网线两端分别连接在不同的网络命名空间一端这里的 vethce79824在主机命名空间中序号为 6另一端引用的 if5在容器命名空间中序号为 5 网络命名空间隔离 Linux 网络命名空间是网络栈的隔离实例每个容器都有自己独立的网络命名空间主机上的 ip addr 命令只能看到主机命名空间中的接口容器内的接口只能在容器内部看到 接口命名约定 vethce79824if5 中的 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 了