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

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

ifconfig 指令已经被视为过时的工具,不再是查看和配置网络接口的推荐方式。 与 netstatss 替代类似。
本文简要介绍 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:

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

其他被替代的网络工具:

  • netstatss
  • routeip route
  • arpip 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地址

注意:eno1eno2表示主板板载网卡,不是"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: vethce79824@if5: <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的虚拟网卡信息:

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

补充说明:

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

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

在这里插入图片描述

接口 5 是存在的,但不在主机的网络命名空间中,而是在容器的网络命名空间内
我们可以从前面的信息知道 vethce79824@if5 中引用了这个接口。这里有一个网络概念需要解释:

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

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

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

    • 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 了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VLC快速制作rtsp流媒体服务器

1.安装vlc media player工具 2.打开后点击菜单 媒体->流 3.添加mp4视频&#xff0c;选择串流 4.选择 下一个 5.新目标选择 RTSP&#xff0c;点击添加按钮 6.端口和路径随便填写&#xff0c;如果推流失败就换个端口。一路操作下去 7.点击 流 按钮后&#xff0c;就可以看到下图…

基于 JavaWeb 的 SSM 在线视频教育系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

RK3568 基于Gstreamer的多媒体调试记录

文章目录 1、环境介绍2、概念理清3、提前准备4、GStreamer编译5、GStreamer基础介绍6、视频播放初体验7、视频硬编码7.1、h2647.2、h265 8、视频硬解码8.1、解码视频并播放解码视频并播放带音频 1、环境介绍 硬件&#xff1a;飞凌ok3568-c开发板 软件&#xff1a;原厂rk356x …

Mac学习使用全借鉴模式

Reference https://zhuanlan.zhihu.com/p/923417581.快捷键 macOS 的快捷键组合很多&#xff0c;相应的修饰键就多达 6 个&#xff08;Windows 系统级就 4 个&#xff09;&#xff1a; Command ⌘ Shift ⇧ Option ⌥ Control ⌃ Caps Lock ⇪ Fn 全屏/退出全屏 command con…

SpringBoot多线程,保证各个子线程和主线程事物一致性

SpringBoot多线程&#xff0c;保证各个子线程和主线程事物一致性 1、第一种写法1.1、TransactionalUntil工具类1.2、service业务类 2、第二种写法2.1、service业务类 1、第一种写法 1.1、TransactionalUntil工具类 import org.springframework.jdbc.datasource.DataSourceTra…

高并发的业务场景下,如何防止数据库事务死锁

一、 一致的锁定顺序 定义: 死锁的常见原因之一是不同的事务以不同的顺序获取锁。当多个事务获取了不同资源的锁,并且这些资源之间发生了互相依赖,就会形成死锁。 解决方法: 确保所有的事务在获取多个锁时,按照相同的顺序请求锁。例如,如果事务A需要锁定表A和表B,事务…

【从0到1学MybatisPlus】MybatisPlus入门

Mybatis-Plus 使用场景 大家在日常开发中应该能发现&#xff0c;单表的CRUD功能代码重复度很高&#xff0c;也没有什么难度。而这部分代码量往往比较大&#xff0c;开发起来比较费时。 因此&#xff0c;目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国…

力扣HOT100之链表: 148. 排序链表

这道题直接用蠢办法来做的&#xff0c;直接先遍历一遍链表&#xff0c;用一个哈希表统计每个值出现的次数&#xff0c;由于std::map<int, int>会根据键进行升序排序&#xff0c;因此我们将节点的值作为键&#xff0c;其在整个链表中的出现次数作为值&#xff0c;当所有元…

Transformer多卡训练初始化分布式环境:(backend=‘nccl‘)

Transformer多卡训练初始化分布式环境:(backend=‘nccl’) dist.init_process_group(backend=nccl)在多卡环境下初始化分布式训练环境,并为每个进程分配对应的 GPU 设备。下面为你逐行解释代码的含义: 1. 初始化分布式进程组 try:dist.init_process_group(backend=nccl) e…

使用Mybatis时在XML中SQL高亮显示的方法

如图所示&#xff0c;上方的SQL代码很像是一个字符串&#xff0c;那么如何把上方的SQL改成和下方一样的SQL,使得IDEA可以识别SQL方言呢&#xff1f; 1.选中SQL中的一部分代码&#xff0c;此时左侧会出现一个黄色的灯泡图案&#xff0c;点击2.选择这个注入语言或者引用

Spring Boot MongoDB自定义连接池配置

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;http://zhangxiaofan.blog.csdn.net/article/details/144341407 一、引言 在 Spring Boot 应用中使用 MongoDB 时&#xff0c;合理配置连接池可以显著提升数据库访问的性能和稳定性。默…

Tabnet介绍(Decision Manifolds)和PyTorch TabNet之TabNetRegressor

Tabnet介绍&#xff08;Decision Manifolds&#xff09;和PyTorch TabNet之TabNetRegressor Decision ManifoldsTabNet1.核心思想2. 架构组成3. 工作流程4. 优点 PyTorch TabNetTabNetRegressor参数1. 模型相关参数n_dn_an_stepsgammacat_idxscat_dimscat_emb_dim 2. 训练相关参…

图像变换方式区别对比(Opencv)

1. 变换示例 import cv2 import matplotlib.pyplot as plotimg cv2.imread(url) img_cut img[100:200, 200:300] img_rsize cv2.resize(img, (50, 50)) (hight,width) img.shape[:2] rotate_matrix cv2.getRotationMatrix2D((hight//2, width//2), 50, 1) img_wa cv2.wa…

Navicat分组、查询分享

1、分组 有些项目业务表比较多&#xff0c;多达几百张&#xff0c;如果通过人眼看&#xff0c;很容易头晕。这时候可以通过Navicat表分组来进行分类。 使用场景 按版本分组按业务功能分组 创建分组 示例&#xff1a;按版本分组&#xff0c;可以将1.0版本的表放到1.0中。 分组…

大模型在初治CLL成人患者诊疗全流程风险预测与方案制定中的应用研究

目录 一、绪论 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与内容 二、大模型技术与慢性淋巴细胞白血病相关知识 2.1 大模型技术原理与特点 2.2 慢性淋巴细胞白血病的病理生理与诊疗现状 三、术前风险预测与手术方案制定 3.1 术前数据收集与预处理 3.2 大模…

for循环的优化方式、循环的种类、使用及平替方案。

本篇文章主要围绕for循环,来讲解循环处理数据中常见的六种方式及其特点,性能。通过本篇文章你可以快速了解循环的概念,以及循环在实际使用过程中的调优方案。 作者:任聪聪 日期:2025年4月11日 一、循环的种类 1.1 默认有以下类型 原始 for 循环 for(i = 0;i<10;i++){…

穿透三层内网VPC1

网络拓扑: 打开入口web服务 信息收集发现漏洞CVE-2024-4577 PHP CGI Windows平台远程代码执行漏洞&#xff08;CVE-2024-4577&#xff09;复现_cve-2024-4577漏洞复现-CSDN博客 利用POC&#xff1a; 执行成功&#xff0c;那么直接上传马子&#xff0c;注意&#xff0c;这里要…

【计算机网络】同步操作 vs 异步操作:核心区别与实战场景解析

&#x1f4cc; 引言 在网络通信和分布式系统中&#xff0c;**同步&#xff08;Synchronous&#xff09;和异步&#xff08;Asynchronous&#xff09;**是两种基础却易混淆的操作模式。本文将通过代码示例、生活类比和对比表格&#xff0c;帮你彻底理解它们的区别与应用场景。 1…

TensorFlow充分并行化使用CPU

关键字&#xff1a;TensorFlow 并行化、TensorFlow CPU多线程 场景&#xff1a;在没有GPU或者GPU性能一般、环境不可用的机器上&#xff0c;对于多核CPU&#xff0c;有时TensorFlow或上层的Keras默认并没有完全利用机器的计算能力&#xff08;CPU占用没有接近100%&#xff09;…

Kubernetes容器编排与云原生实践

第一部分&#xff1a;Kubernetes基础架构与核心原理 第1章 容器技术的演进与Kubernetes的诞生 1.1 虚拟化技术的三次革命 物理机时代&#xff1a;资源浪费严重&#xff0c;利用率不足15% 虚拟机突破&#xff1a;VMware与Hyper-V实现硬件虚拟化&#xff0c;利用率提升至50% …