我读了一些关于“ifconfig”命令的文章/教程,其中大多数都包含一个常见的语句 -
“ip 命令不推荐使用 ifconfig”
并建议学习ip命令。但他们都没有解释“ip”命令如何比“ifconfig”更强大。
他们两者有什么区别呢?
答案1
ifconfig
来自net-tools
,很长一段时间以来都无法完全跟上 Linux 网络堆栈的步伐。它还仍然用于ioctl
网络配置,这是一种丑陋且功能较弱的与内核交互的方式。
Linux 网络代码中的大量更改以及许多新功能无法使用net-tools
:多路径路由、策略路由(请参阅 RPDB)来访问。route
允许您做一些愚蠢的事情,例如使用相同的度量添加到同一目的地的多条路由。
此外:
ifconfig
不报告某些设备的正确硬件地址。- 您无法配置
ipip
、sit
、gre
、l2tp
等内核内静态隧道。 - 您无法创建
tun
或tap
设备。 - 向给定接口添加多个地址的方式语义也很差。
- 您也无法使用
net-tools
其中任何一个来配置 Linux 流量控制系统。
也可以看看ifconfig
糟透了。
编辑:删除了有关net-tools
开发停止的断言,到目前为止我已经忘记了这篇文章的来源。 ' 自发布net-tools
以来一直在进行工作,尽管它主要是错误修复和小的增强功能和功能,例如国际化。iproute2
答案2
ifconfig
是显示有关网络接口的信息并更改某些设置的传统命令。特别是,它可以打开和关闭接口。它存在于大多数 Unix 变体中。
在 Linux 上,该ifconfig
命令已经很长时间没有发展了。它的功能仍然非常好。如果您正在使用ifconfig
某些东西,就没有理由停止。
Linux 还提供了ip
来自ip路由2工具套件。该ip
命令结合了多个经典命令及更多命令,包括ifconfig
、route
和arp
。ip
可以做的比 多得多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