按标签名称删除IP地址别名

bco*_*ron 7 linux iproute

我想删除我使用以下方法创建的别名:

ip addr add 192.168.1.1 dev eth0 label eth0:100
Run Code Online (Sandbox Code Playgroud)

无需知道 IP 地址。基本上,我想做

ip addr del dev eth0 label eth0.100
Run Code Online (Sandbox Code Playgroud)

根据文档,它应该是有效的,而是给了我:

ip: RTNETLINK answers: Operation not supported
Run Code Online (Sandbox Code Playgroud)

同时,我使用

ip addr del $(ip addr list label eth0:100 | awk '{ print $2 }') dev eth0 label eth0.100
Run Code Online (Sandbox Code Playgroud)

phe*_*mer 2

你所拥有的是最好的路线(虽然我会使用grepover awk,但这是个人喜好)。原因是每个“标签”可以有多个地址。因此,您必须指定要删除的地址。

# ip addr help
Usage: ip addr {add|change|replace} IFADDR dev STRING [ LIFETIME ]
                                                      [ CONFFLAG-LIST ]
       ip addr del IFADDR dev STRING
       ip addr {show|save|flush} [ dev STRING ] [ scope SCOPE-ID ]
                            [ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ]
       ip addr {showdump|restore}
IFADDR := PREFIX | ADDR peer PREFIX
          [ broadcast ADDR ] [ anycast ADDR ]
          [ label STRING ] [ scope SCOPE-ID ]
Run Code Online (Sandbox Code Playgroud)

请注意ip addr del参数为IFADDR和 的语法STRINGIFADDR下面定义了,并且表示PREFIX是必需的参数(其中的内容[]是可选的)。PREFIX是您的 IP/子网组合。因此它不是可选的。


至于我关于使用的意思grep是这样的:

ip addr del $(ip addr show label eth0:100 | grep -oP 'inet \K\S+') dev eth0 label eth0:100
Run Code Online (Sandbox Code Playgroud)

这样做的原因是为了防止参数的位置发生变化。输出中的字段位置ip addr可以根据可选字段进行更改。我不认为这个inet领域会改变,但这只是我的偏好。