linux查看ip地址命令ifconfig不行

装完一台最小化安装的址命 CentOS 7,习惯性敲下 ifconfig,址命终端回了一句 -bash: ifconfig: command not found。址命当时愣了一下,址命心想这命令不是址命 Linux 标配吗?后来才反应过来,不是址命命令没了,是址命它所在的软件包根本没装。

ifconfig 属于 net-tools 这个包。址命这个包在 2001 年之后基本就停止维护了,址命很多发行版早就把它从默认安装里踢出去。址命CentOS 7、址命RHEL 7 开始默认不装,址命Ubuntu 18.04 之后也一样。址命所以新装的址命机器上找不到 ifconfig,不是址命系统坏了,是它退休了。

那现在用什么?ip 命令。它属于 iproute2 包,是现代 Linux 网络配置的正统接班人。想查看 IP 地址,直接敲:

ip addr show

或者简写 ip a。输出比 ifconfig 更细,会明确标出 inet 后面跟的是 IPv4 地址,inet6 是 IPv6。网卡名字、状态、MTU、MAC 地址全都列得清清楚楚。我刚开始用的时候觉得输出太啰嗦,看惯了反而回不去 ifconfig 那种挤在一起的排版。

如果只想看某个网卡,比如 eth0:

ip addr show eth0

只想快速拿到本机所有 IPv4 地址,可以配合 grep:

ip -4 addr show | grep inet

这条命令我几乎每天都要敲几遍。-4 限定只显示 IPv4,省得 IPv6 的地址干扰视线。

有人就是不想换习惯,非要 ifconfig 怎么办?装回来就行。CentOS/RHEL 系:

yum install net-tools

Debian/Ubuntu 系:

apt install net-tools

装完 ifconfig 就回来了。但说实话,新机器上我建议直接学 ip 命令。net-tools 已经十几年没更新,内核里很多新特性它根本读不到。比如查看邻居表,arp -a 和 ip neigh 都能看,但后者能显示的状态更全。再比如策略路由,route 命令基本无能为力,ip route 才是正路。

还有个坑,有些教程里写 ifconfig -a 查看所有网卡,包括没启用的。换成 ip 之后,对应的是:

ip link show

注意 ip link 只显示链路层信息,不显示 IP 地址。要看 IP 还是得 ip addr。这两个命令容易搞混,我一开始也经常敲错。

另外,ip 命令支持简写,只要不产生歧义就行。ip a 等于 ip addr,ip a s 等于 ip addr show。但简写到什么程度看个人习惯,我一般就写到 ip a 为止,再短自己看着也费劲。

最后提一句,如果你在容器里,比如 Docker 的 alpine 镜像,默认连 ip 命令都没有。apk 装 iproute2 才有。这种时候 hostname -i 也能凑合看 IP,但信息不全,只适合应急。

所以 ifconfig 不行了,不是 Linux 退步,是工具在换代。花十分钟熟悉 ip 命令,后面省下的时间远不止十分钟。