(Я понимаю, что это старый вопрос, но Google привел меня сюда, потому что я пытался выяснить, что именно changeи replaceчем они отличаются и чем они отличаются).
Я считаю, что оба replaceи changeиспользуются для изменения существующего адреса. Рассматривать:
ip addr add 192.168.1.10/32 dev dummy0
Это получает меня:
32: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
link/ether 5a:ec:58:4f:d1:35 brd ff:ff:ff:ff:ff:ff
inet 192.168.111.10/32 scope global dummy0
valid_lft forever preferred_lft forever
inet6 fe80::58ec:58ff:fe4f:d135/64 scope link
valid_lft forever preferred_lft forever
Если я снова запускаю ту же команду, я получаю сообщение об ошибке:
# ip addr add 192.168.111.10/32 dev dummy0
RTNETLINK answers: File exists
Если я хочу изменить флаги на этом адресе, я могу использовать либо changeили replace. Здесь я использую ip addr changeдля изменения preferred_lftи valid_lftнастройки на этом адресе:
# ip addr change 192.168.111.10/32 dev dummy0 preferred_lft 300 valid_lft 300
# ip addr show dummy0
32: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
link/ether 5a:ec:58:4f:d1:35 brd ff:ff:ff:ff:ff:ff
inet 192.168.111.10/32 scope global dynamic dummy0
valid_lft 298sec preferred_lft 298sec
inet6 fe80::58ec:58ff:fe4f:d135/64 scope link
valid_lft forever preferred_lft forever
Поведение ip addr replaceидентично. Фактически, если вы посмотрите на код, они приводят к почти одинаковым действиям:
if (matches(*argv, "change") == 0 ||
strcmp(*argv, "chg") == 0)
return ipaddr_modify(RTM_NEWADDR, NLM_F_REPLACE, argc-1, argv+1);
if (matches(*argv, "replace") == 0)
return ipaddr_modify(RTM_NEWADDR, NLM_F_CREATE|NLM_F_REPLACE, argc-1, argv+1);
Похоже, что здесь есть намерение changeизменить только существующий адрес, replaceлибо изменить существующий адрес, либо создать новый, если указанный адрес не существует. На практике кажется, что оба changeи replaceдобавят адрес, если он еще не существует.
Если вы действительно хотите добавить новый адрес и удалить старый, вам нужно будет сделать это в два шага, используя, ip addr delа затем ip addr add(или наоборот, конечно).
NOP0s :()