(Mir ist klar, dass dies eine alte Frage ist, aber Google hat mich hierher gebracht, weil ich versucht habe, genau herauszufinden, was change
und was zu replace
tun ist und wie sie sich unterscheiden.)
Ich glaube, dass beide replace
und change
zum Ändern einer vorhandenen Adresse verwendet werden. Erwägen:
ip addr add 192.168.1.10/32 dev dummy0
Das bringt mich:
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
Wenn ich denselben Befehl erneut ausführe, wird folgende Fehlermeldung angezeigt:
# ip addr add 192.168.111.10/32 dev dummy0
RTNETLINK answers: File exists
Wenn ich die Flags an dieser Adresse ändern möchte, kann ich entweder change
oder verwenden replace
. Hier verwende ich ip addr change
, um die preferred_lft
und valid_lft
Einstellungen für diese Adresse zu ändern :
# 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
Das Verhalten von ip addr replace
ist identisch. Wenn Sie sich den Code ansehen, führen sie tatsächlich zu fast identischen Aktionen:
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);
Es sieht so aus, als ob hier change
nur eine vorhandene Adresse geändert werden soll, während replace
entweder eine vorhandene Adresse geändert oder eine neue erstellt wird, wenn die angegebene Adresse nicht vorhanden ist. In der Praxis scheint es, als ob beide change
und replace
die Adresse hinzufügen, wenn sie noch nicht existiert.
Wenn Sie tatsächlich eine neue Adresse hinzufügen und eine alte entfernen möchten, müssen Sie dies in zwei Schritten tun, ip addr del
gefolgt von ip addr add
(oder natürlich umgekehrt).
NO
P0
s :( haben können)