我应该停止使用Ifconfig吗?

使用装载Infiniband卡的服务器时,当我使用ifconfig命令时,会收到以下警告:
Ifconfig uses the ioctl access method to get the full address 
information, which limits hardware addresses to 8 bytes.
Because Infiniband address has 20 bytes, only the first 8 bytes 
are displayed correctly.
Ifconfig is obsolete! For replacement check ip.

我应该停止使用ifconfig吗?它是否已被ip命令取代?或者它会在不久的将来更新?请注意:这个问题和答案是针对GNU/Linux的“主要”发行版。不能假设这些信息适用于所有发行版,尤其是其他操作系统。

25越早转换,越好。花了我几个月的时间来替换ifconfig的肌肉记忆。不过,在Windows上进行操作更加有趣。"ip add - 不对,等等,不是这个, ifcon - 不行,啊,是ipconfig"。 - Charles
8也许一个别名会有所帮助:alias ipconfig='echo ipconfig已过时,请使用ip命令'。当然,你可以设置更有意义的别名。 - ott--
102ifconfig已经过时了?我肯定是住在山洞里了。 - wim
31我觉得很奇怪,一个名为“ip”的命令竟然能够进行链路层操作。 - James O'Gorman
12这只是在某些操作系统上被废弃了。如果你使用的不是Linux,我相信ifconfig仍然在使用中。例如,在FreeBSD上,我没有看到这样的警告。 - Stefan Lasiewski
1ifconfig在Linux上的最新版本可以追溯到1999年。我认为它已经过时了。 - BatchyX
4自Fedora 18开始,默认情况下不再预装ifconfignetstat等工具。因此,RHEL 7很可能也不会包含它们。如果您真的有需要,仍然可以从net-tools软件包中安装它们(尽管您可能不需要)。 - Michael Hampton
1当然,如果“ip”还管理除IP协议之外的其他协议,那就很奇怪了...就像在这里的Infiniband一样。 - Kedare
根据@ott的建议,我在我的.bashrc文件底部添加了以下内容:`alias ifconfig='echo -e "\nifconfig已经过时,请使用\033[31;1mip -brief addr show\033[0m代替\n" && ip -brief addr show'。 - Luke Sheppard
因为Ubuntu 20.04在Docker中删除了ifconfig和ping命令。我认为OpenWrt或BusyBox比Ubuntu更好。 - bronze man
4个回答

引用Thomas Pircher的网站(cc-by-sa):

ifconfig vs ip

/bin/ip命令已经存在一段时间了。但人们仍然继续使用旧的/sbin/ifconfig命令。让我们明确一点:虽然ifconfig不会很快消失,但它的新版本ip更强大,并最终会取代它。

ip的手册页可能一开始看起来让人畏惧,但一旦熟悉了命令语法,它就易于阅读。本页不介绍ip的新功能,而是将ifconfigip进行对比,以快速了解命令的语法。

显示网络设备和配置

ifconfig

ip addr show
ip link show

启用网络接口

ifconfig eth0 up
ip link set eth0 up

网络接口的禁用方式类似:
ifconfig eth0 down
ip link set eth0 down

56有趣的是,在你所提到的每个用例中,ip命令都更长、更复杂。这可能是人们仍然使用ifconfig的主要原因。 - TheLQ
23@TheLQ: ip提供了更多、更多的功能。当然,它更复杂。无论如何,许多命令可以缩短。例如,ip addr show可以缩短为ip aip link show可以缩短为ip lip link set eth0 up可以缩短为ip l set eth0 up等等。这使得ipifconfig齐头并进。 - BatchyX
19只要记住,整个世界不仅限于Linux机器。Solaris、AIX、HP-UX、所有的BSD以及SCO(虽然没有人关心他们)都在使用ifconfig。如果你想成为一个真正的Unix系统管理员(不仅仅是Linux系统管理员),你应该至少熟悉ifconfig及其基本语法。 - voretaq7
命令/bin/ip已经存在一段时间了。在某些Linux发行版上。其他地方,它是ifconfig的某种变体。 - Kaz
10你的第一个例子已经解答了这个问题。为什么要运行两个命令,当一个命令就足够了呢? - ott--
IP可能已经存在一段时间了,但这是我第一次听说它。虽然我主要管理BSD和Solaris服务器,但我偶尔也处理几台Linux服务器。在处理Linux服务器时,我总是首先使用我所熟悉的工具(ifconfig),而且一直运行良好,因此没有必要寻找其他工具。 - Brian Knoblauch
6@ott ip addr show基本上包含了ip link show的输出内容。 - alexia
1我觉得ip route list命令的输出相比于netstat -nr命令来说信息有点不够详细。 - ericx
我觉得ip命令的输出很难看也很难读,所以我通常会将其通过管道传递给column -t命令。 - Pablo A
2ip addr show 可以简写为 ip a,而且你可能喜欢 ifconfig 的输出样式。但是 ifconfig 的输出并不总是列出所有的 IP 地址,在我看来这相当不完整。 - Jasen
1“ip”虽然功能强大,但对我来说,十一多年过去了,它仍然无法判断以太网设备是否与上游路由器/交换机等设备连接。明确一点:如果eth0已连接,“ifconfig”可以报告“RUNNING”,但是在“ip”中,没有任何动词或选项的组合可以提供这些信息。 - Seamus

是的,在Linux上,ifconfig已经被弃用,推荐使用iproute2(即ip命令)。

同样地,arproutenetstat命令也已经被弃用。

然而,iproute2是特定于Linux的,其他一些Unix系统仍然使用ifconfig,所以如果你将来要使用其他Unix系统,了解/记住它的工作原理可能会有所帮助...

要学习这种“新方法”,我建议你查看以下3个链接:

根据最后一个链接,ifconfig已经超过20年没有进行维护了

除了Debian积累的补丁外,net-tools软件包在2001年4月15日左右发布的1.60版本之后就没有再进行上游开发。


9ifconfig是由BSD在早期开发的。Linux基本上使用了BSD的IP堆栈(与当时的Windows和其他操作系统一样,所以ipconfig仍然类似于ifconfig)。在2.4内核版本中,Linux开始大幅偏离BSD的堆栈,这是在2001年初开始的。自那时以来,ifconfig在Linux中没有得到很好的维护并非偶然。 - Chris S
510年了!是时候在GitHub上启动一个“拯救ifconfig”的项目了,我猜。 - kenchilada

ifconfig已经过时多年了,是时候转换了,尤其是在像你这样的情况下。


1我也喜欢它类似思科风格的命令缩写。"ip a" = "ip address show" - Coops
5嗯,已经有足够多的脚本和其他工具是基于ifconfig构建的,所以我觉得在它消失之前没有必要切换... - Jason Antman
11我从来没听说过 ip。我刚在一个FreeBSD服务器上测试了一下,它显示 ip: Command not found.。也许 ifconfig 只是在Linux上被弃用了。 - ctype.h
2@ctype.h: 实际上,它只在Linux上被弃用。 ifconfig针对Linux的版本可以追溯到1999年。 ip已经成为2.4内核的推荐选择。 - BatchyX
如果 ifconfig 命令的输出中显示 RUNNING,则表示 Enet 接口已连接到交换机/路由器。截至2020年9月,ip 命令似乎没有相应的等效功能。??? - Seamus
如果我没记错的话,在ip link中,ifconfig的"RUNNING"等于"state UP"。不要与flags字段中的UP混淆。 - Governa

ip已经替代了ifconfig一段时间了,可能在某个时候ifconfig会更新,但我不会等待它,而是学会使用ip。它在所有Linux发行版上都受支持。


8IP已经成为一些Linux发行版选择的ifconfig替代品。 - Kaz
看起来 ifconfig 要与 Linux 完全兼容似乎极不可能。像 ifconfig eth0 192.168.0.7/24 这样的命令没有明确的意义:例如,如果 eth0 上已经有两个 IP 地址(而不是一个别名,如 eth0:1)。 - Jasen