(Sé que esto es una cuestión de edad, pero Google me traje aquí porque yo estaba tratando de averiguar exactamente qué change
y replace
hago y cómo son diferentes).
Creo que ambos replace
y change
se utilizan para modificar una dirección existente. Considerar:
ip addr add 192.168.1.10/32 dev dummy0
Esto me atrapa:
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 ejecuto el mismo comando nuevamente, aparece un error:
# ip addr add 192.168.111.10/32 dev dummy0
RTNETLINK answers: File exists
Si quiero modificar las banderas en esa dirección, puedo usar change
o replace
. Aquí, uso ip addr change
para modificar la configuración preferred_lft
y valid_lft
en esa dirección:
# 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
El comportamiento de ip addr replace
es idéntico. De hecho, si observa el código, resultan en acciones casi idénticas:
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);
Parece que la intención aquí es que change
solo modificará una dirección existente, mientras replace
que modificará una dirección existente o creará una nueva si la dirección especificada no existe. En la práctica, parece que ambos change
y replace
agregarán la dirección si aún no existe.
Si realmente desea agregar una nueva dirección y eliminar una antigua, deberá hacerlo en dos pasos, usando ip addr del
seguido de ip addr add
(o al revés, por supuesto).
NO
P0
s :()