(Je me rends compte que c'est une vieille question, mais Google m'a amené ici parce que j'essayais de comprendre exactement quoi changeet replacefaire et comment ils sont différents).
Je crois que les deux replaceet changesont utilisés pour modifier une adresse existante. Considérer:
ip addr add 192.168.1.10/32 dev dummy0
Cela me fait:
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
Si j'exécute à nouveau la même commande, j'obtiens une erreur:
# ip addr add 192.168.111.10/32 dev dummy0
RTNETLINK answers: File exists
Si je veux modifier les drapeaux sur cette adresse, je peux utiliser soit changeou replace. Ici, j'utilise ip addr changepour modifier les paramètres preferred_lftet valid_lftsur cette adresse:
# 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
Le comportement de ip addr replaceest identique. En fait, si vous regardez le code, ils entraînent des actions presque identiques:
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);
Il semble que l'intention ici est de changemodifier uniquement une adresse existante, tout replaceen modifiant une adresse existante ou en créant une nouvelle si l'adresse spécifiée n'existe pas. Dans la pratique, il semble que si les deux changeet replaceajoutera l'adresse si elle n'existe pas déjà.
Si vous voulez réellement ajouter une nouvelle adresse et supprimer une ancienne, vous devrez le faire en deux étapes, en utilisant ip addr delsuivi de ip addr add(ou l'inverse, bien sûr).
NOP0s :()