(Je me rends compte que c'est une vieille question, mais Google m'a amené ici parce que j'essayais de comprendre exactement quoi change
et replace
faire et comment ils sont différents).
Je crois que les deux replace
et change
sont 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 change
ou replace
. Ici, j'utilise ip addr change
pour modifier les paramètres preferred_lft
et valid_lft
sur 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 replace
est 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 change
modifier uniquement une adresse existante, tout replace
en 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 change
et replace
ajoutera 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 del
suivi de ip addr add
(ou l'inverse, bien sûr).
NO
P0
s :()