(これは古い質問だと思いますが、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
(もちろん、またはその逆)。
NO
P0