我想删除我使用以下命令创建的别名:
ip addr add 192.168.1.1 dev eth0 label eth0:100
无需知道 IP 地址。基本上,我想做
ip addr del dev eth0 label eth0.100
其中,根据文档应该是有效的,但给了我:
ip: RTNETLINK answers: Operation not supported
与此同时,我尝试使用
ip addr del $(ip addr list label eth0:100 | awk '{ print $2 }') dev eth0 label eth0.100
答案1
您可以使用命令删除网络别名ifconfig
:
/sbin/ifconfig eth0:100 down
根据命令手册ip
,删除IP地址只需要设备名称。其余参数是可选的。如果没有给出参数,第一个 IP 地址将从接口中删除。但实际上我无法重现这种行为。
看起来 IP 地址也是必需的。
您显示的最后一个命令之所以有效,是因为表达式ip addr list label eth0:100 | awk '{ print $2 }'
给出了网络别名的 IP 地址并将该 IP 插入到ip addr delete ...
命令中。
答案2
你所拥有的是最好的路线(虽然我会使用grep
over 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 ]
请注意ip addr del
参数为IFADDR
和的语法STRING
。IFADDR
下面定义了,并且表示PREFIX
是必需的参数(其中的内容[]
是可选的)。PREFIX
是您的 IP/子网组合。因此它不是可选的。
至于我关于使用的意思grep
是这样的:
ip addr del $(ip addr show label eth0:100 | grep -oP 'inet \K\S+') dev eth0 label eth0:100
这样做的原因是为了防止参数的位置发生变化。输出中的字段位置ip addr
可以根据可选字段进行更改。我不认为这个inet
领域会改变,但这只是我的偏好。
答案3
ip
命令具有-o
生成适合解析的输出的标志。例如:
# ip -o addr show label wlp2s0:1|awk '{print $4}'
172.16.127.5/24
将其包装为命令替换就足够了$(...)
,我们有以下内容:
# ip addr del $(ip -o addr show label wlp2s0:1|awk '{print $4}') dev wlp2s0
同一主题的变体,但具有xargs
:
# ip -o a show label wlp2s0:1|awk '{print $4}'|xargs -I% ip a del % dev wlp2s0
请注意,您可以替换addr
为a
更短的命令
边注:
请注意,对于ip
命令,这是 2011 手册页中所需的语法IP地址(8)
ip address del IFADDR dev IFNAME
因此,带有前缀的地址必须跟随del
并且dev IFNAME
是必需的。