使用iproute2
命令 ip address delete
(或缩写ip a d
)可以删除协议地址(请参阅man ip address
)
问题ip a d
在使用上相当不方便,需要比充分指定其任务实际需要的参数更多的参数。真的吗?例子:
user@box$> ip a s
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: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 24:ee:9a:00:00:01 brd ff:ff:ff:ff:ff:ff
inet 10.192.0.174/24 brd 10.192.0.255 scope global dynamic noprefixroute wlo1
valid_lft 415283sec preferred_lft 415283sec
user@box$> ip a d 10.192.0.174
Not enough information: "dev" argument is required.
user@box$> ip a d 10.192.0.174 dev wlo1
Warning: Executing wildcard deletion to stay compatible with old scripts.
Explicitly specify the prefix length (172.22.52.254/32) to avoid this warning.
This special behaviour is likely to disappear in further releases,
fix your scripts!
举个例子,因为在大多数情况下分配的 ip 地址仅分配给单个网络设备,我真的想知道如何让它iproute2
一起行动并删除 ip 地址,而不是让我毫无意义地复制网络掩码和网络设备。
即使我目前很难看到为多个网络设备分配相同 IP 的用例,或者使用不同子网掩码多次分配 IP 地址的情况(顺便说一句,这一定是iproute2
不属于这种情况的情况)愿意忽略),我确信即使是这些情况也可以iproute2
在如果它真的发生了基础(意思是,仅在歧义的情况下)。
有人找到一种方法来减少ip a d
无意义的工作吗?
顺便说一句/奖励:有没有办法默认使用比/ip a a [ipadress]
更无意义的网络掩码(或者是否有这种选择的原因?)?/32
255.255.255.255
答案1
第一:我完全同意@Yurko的回答。然而,这里的答案仍然可以解决您的问题。
如果你想删除一个地址而不考虑接口,你不应该使用ip address del
but ip address flush
,正如帮助页面提示的那样:
ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ] [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]
该子命令用于批量删除地址。您可以通过多种方式限制其范围。一种方法是to PREFIX
.
因此,对于您的情况,这将起作用:
ip address flush to 10.192.0.174
它甚至会在出现在多个界面上的复杂设置中多次删除该地址。
在那里声明网络掩码将选择整个范围来搜索删除候选者,因此最好不要保留网络掩码。这是与 不同的行为del
,因为命令的作用不同。例如,ip address flush to 192.0.2.100/31
将选择以 192.0.2.100 或 192.0.2.101 开头的任何前缀进行删除,无论它们自己的网络掩码是什么(可以是 /32 /24 或其他)。delete
可能会回答没有这样的地址。
答案2
iproute2:是的,有一些原因,包括多个接口、虚拟接口、复杂路由、绑定接口等,最后是遗留问题,并且在所有 *nix 系统上都有相同的行为。
您只需配置一次就可以忘记它,因此没有理由再次发明轮子。
如果您必须多次执行此操作,iproute2 提供了全套工具,可以轻松地在几分钟内编写脚本并忘记它。
网络掩码 255.255.255.255 是默认值是有原因的,它将每个设备放入自己的子网中,迫使它们通过路由器以到达任何其他设备的方式进行通信...因此,如果您不输入本地网络网络掩码 -> 您没有本地网络掩码网络。但同样,您可以轻松地编写脚本,甚至可以通过创建别名来简单地更改它。