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

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

我读了一些关于“ifconfig”命令的文章/教程,其中大多数都包含一个常见的语句 -

“ip 命令不推荐使用 ifconfig”

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

他们两者有什么区别呢?

答案1

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

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

此外:

  • ifconfig不报告某些设备的正确硬件地址。
  • 您无法配置ipipsitgrel2tp等内核内静态隧道。
  • 您无法创建tuntap设备。
  • 向给定接口添加多个地址的方式语义也很差。
  • 您也无法使用net-tools其中任何一个来配置 Linux 流量控制系统。

也可以看看ifconfig糟透了

编辑:删除了有关net-tools开发停止的断言,到目前为止我已经忘记了这篇文章的来源。 ' 自发布net-tools以来一直在进行工作,尽管它主要是错误修复和小的增强功能和功能,例如国际化。iproute2

答案2

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

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

Linux 还提供了ip来自ip路由2工具套件。该ip命令结合了多个经典命令及更多命令,包括ifconfigroutearpip可以做的比 多得多ifconfig。另一方面,ip它并不总是存在,特别是在嵌入式系统上(并且在除 Linux 之外的 UNIX 变体上绝不会出现)。

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

答案3

只是为了在 pilona 的答案中添加一些内容。 2005 年左右,引入了一种控制网络堆栈的新机制 -网络链接套接字

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

答案4

根据我的经验,我发现了输出如果配置相比之下更容易消化ip-*命令,IMO 在视觉上还有一些不足之处。在我的典型使用中,我只需要所给内容的子集,例如接口、状态、IP 地址以及在这方面如果配置更容易阅读。

如果配置:

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    loop  txqueuelen 1000  (Local Loopback)
    RX packets 297454  bytes 14872700 (14.1 MiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 297454  bytes 14872700 (14.1 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 10.0.0.10  netmask 255.255.255.0  broadcast 10.0.0.255
    ether aa:aa:aa:aa:aa:aa  txqueuelen 1000  (Ethernet)
    aa:aa:aa:aa:aa:aabytes 596277 (582.3 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 9083  bytes 738309 (721.0 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 10.0.0.20  netmask 255.255.255.0  broadcast 10.0.0.255
    ether aa:aa:aa:aa:aa:aa  txqueuelen 1000  (Ethernet)
    aa:aa:aa:aa:aa:aabytes 596277 (582.3 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 9083  bytes 738309 (721.0 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

与ip地址比较:

1: lo: <LOOPBACK,UP,LOWER_UP> 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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff
inet 10.0.0.10/24 brd 10.0.0.255 scope global eth0
   valid_lft forever preferred_lft forever
3: eth1 <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff
inet 10.0.0.20/24 brd 10.0.0.255 scope global eth1
   valid_lft forever preferred_lft forever

相关内容