“ifconfig”和“ip”命令之间的区别

Man*_*nde 20 linux networking ip command

我阅读了一些关于“ifconfig”命令的文章/教程,其中大部分都包含一个通用语句 -

“ifconfig 已被 ip 命令弃用”

并建议学习ip命令。但是他们都没有解释“ip”命令如何比“ifconfig”更强大。

它们之间有什么区别?

pil*_*ona 22

ifconfig来自net-tools,它已经很长时间无法完全跟上Linux网络堆栈。它还ioctl用于网络配置,这是一种丑陋且功能较弱的与内核交互的方式。

Linux 网络代码中的许多更改,以及许多新功能无法使用net-tools:多路径路由、策略路由(请参阅 RPDB)。route允许你做一些愚蠢的事情,比如使用相同的度量将多条路由添加到同一个目的地。

此外:

  • ifconfig 不报告某些设备的正确硬件地址。
  • 您不能在内核静态隧道中配置ipipsitgrel2tp等。
  • 您无法创建tuntap设备。
  • 向给定接口添加多个地址的方式也具有较差的语义。
  • 您也不能使用它们来配置 Linux 交通控制系统net-tools

又见ifconfig糟透了

编辑:删除了关于net-tools开发停止的断言,现在我忘记了这篇文章的来源。net-tools' 自iproute2发布以来一直在努力,尽管它主要是错误修复和小的增强和功能,如国际化。


Gil*_*il' 7

ifconfig是显示有关网络接口的信息和更改某些设置的传统命令。特别是,它可以启动和关闭接口。它存在于大多数 Unix 变体上。

在 Linux 上,该ifconfig命令已经很长时间没有演变了。它的功能仍然非常好。如果您正在使用ifconfig某些东西,则没有理由停止。

Linux 还提供了ip来自iproute2工具套件的命令。该ip命令结合了几个经典命令和更多命令,包括ifconfigroutearpip可以做的远不止ifconfig. 另一方面,ip它并不总是存在,尤其是在嵌入式系统上(并且永远不会在 Linux 以外的 unix 变体上)。

Parsingifconfig的输出有点糟糕。Parsingip的输出有点糟糕。那里没有赢家。


Bor*_*kov 5

只是为 pilona 的答案添加一些位。2005 年左右,引入了一种用于控制网络堆栈的新机制——netlink 套接字

配置网络接口iproute2使用全双工 netlink 套接字机制,同时ifconfig依赖于ioctl系统调用。这里有 2 篇关于netlink 背后的动机rtnetlink 使用的主要论文。