如何在 Linux 中刷新“ip a”显示

如何在 Linux 中刷新“ip a”显示

我使用的是 suse sp1。我发现命令“ip a”和“ifconfig”的输出有区别,例如:

nssh# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
    inet 127.0.0.2/8 brd 127.255.255.255 scope host secondary lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:21:28:f7:fc:70 brd ff:ff:ff:ff:ff:ff
    inet 10.175.140.214/25 brd 10.175.140.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:21:28:f7:fc:71 brd ff:ff:ff:ff:ff:ff
4: eth7: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 90:e2:ba:0b:5e:68 brd ff:ff:ff:ff:ff:ff
5: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:21:28:f7:fc:72 brd ff:ff:ff:ff:ff:ff
6: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:21:28:f7:fc:73 brd ff:ff:ff:ff:ff:ff
7: eth6: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 90:e2:ba:0b:5e:69 brd ff:ff:ff:ff:ff:ff

nssh# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:21:28:F7:FC:70  
          inet addr:10.175.140.214  Bcast:10.175.140.255  Mask:255.255.255.128
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:262033 errors:0 dropped:0 overruns:0 frame:0
          TX packets:61525 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:34290673 (32.7 Mb)  TX bytes:22269413 (21.2 Mb)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:7855586 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7855586 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:743730481 (709.2 Mb)  TX bytes:743730481 (709.2 Mb)

在我的例子中,ifconfig 给出了正确的结果。因为我已经删除了 /etc/sysconfig/network 下的 ifcfg-eth[1,2,3,6,7]。所以我的问题是 1) 为什么 ip a 给出了过时的信息?2) 如何以某种方式刷新 ip a 并让它提供最新的接口信息?

答案1

别以为你可以把它们清除掉,但你可以删除:

ip link 删除 dev eth5

不确定为什么它们在你的情况下显示不同...但是,你之后重启了网络服务吗?如果没有,你可能只是在接口仍然注册时删除了文件。

另一个例子是,当您说ifconfig eth0 down此时接口在管理上处于关闭状态,但是如果您这样做了,ip addr您仍然会看到它,因为ip addr显示的接口不仅没有连接,而且还处于“管理上处于关闭状态”。

答案2

ifconfig从中获取信息/proc/net/dev并调用ioctlip aiproute2 addr)通过 API 从内核获取信息Netlink。我的假设是,这意味着ip a很可能是更多的如果有的话,请保持最新。您不需要(不能?)手动更新iproute2

是否ifconfig -a仍显示接口?也许它们仍然存在,但当前处于非活动状态。ifconfig默认情况下仅显示当前活动的接口。

相关内容