命令的确切行为是什么:ip 地址更改?

Ban*_*uin 12 networking iproute

我一直在摆弄 IPv6 和地址生命周期。我发现valid_lft如果使用得当,该属性将使 v6 地址自动消失。为了延长地址的生命周期,我会

ip addr change 1:2:3:4::1/112 dev eth0 valid_lft 86000
Run Code Online (Sandbox Code Playgroud)

的使用ip addr change没有出现在我可以访问的任何手册页(Debian、Ubuntu 和在线)中,也没有出现在官方文档中。我在一篇文章中找到的提到 2009 年发给 ipv6-ops 邮件列表的电子邮件。

从我可以确定的情况来看,我想总是可以使用ip addr change而不是ip addr add,因为如果地址不存在,ip则会添加一个,就像ip addr add使用过一样。

这是正确的,即,任何人都可以解释ip addr change它的确切作用以及它与 的区别ip addr add吗?

Bra*_*iam 6

当您不确定某事做了什么,并且文档没有说明时,您可以找到来源,即第 1588 行

if (matches(*argv, "change") == 0 ||
    strcmp(*argv, "chg") == 0)
    return ipaddr_modify(RTM_NEWADDR, NLM_F_REPLACE, argc-1, argv+1);
Run Code Online (Sandbox Code Playgroud)

那么,它有什么作用呢?返回运行第1379 行定义ipaddr_modify()函数的结果,参数为和。RTM_NEWADDRNLM_F_REPLACE

从我可以确定的情况来看,我想总是可以使用ip addr change而不是ip addr add,因为如果地址不存在,ip则会添加一个,就像ip addr add使用过一样。

这是正确的,即,任何人都可以解释ip addr change它的确切作用以及它与 的区别ip addr add吗?

不,add将创建或执行给定的参数(如果有的话),而change将查找参数并替换它。

顺便说一句,replace似乎是两者之间的妥协addchange因为它使用了混合的论据。