我使用的是 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
并调用ioctl
。ip a
(iproute2 addr
)通过 API 从内核获取信息Netlink
。我的假设是,这意味着ip a
很可能是更多的如果有的话,请保持最新。您不需要(不能?)手动更新iproute2
是否ifconfig -a
仍显示接口?也许它们仍然存在,但当前处于非活动状态。ifconfig
默认情况下仅显示当前活动的接口。