「ip addr change」および「ip addr replace」コマンドについて


10

現在、eth0インターフェースに関連付けられている次のIPv4アドレスがあります。

T60:~ # ip -V
ip utility, iproute2-ss110629
T60:~ # ip addr show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:15:58:2a:84:3e brd ff:ff:ff:ff:ff:ff
    inet 10.11.12.2/24 scope global eth0
    inet 10.11.12.3/24 scope global secondary eth0
    inet 10.11.12.4/24 scope global secondary eth0
    inet6 fe80::215:58ff:fe2a:843e/64 scope link 
       valid_lft forever preferred_lft forever
T60:~ # 

10.11.12.3/24アドレスを10.11.12.6/24に置換または変更したい。これを行う方法?ip addr change 10.11.12.6/24 dev eth0または実行するとip addr replace 10.11.12.6/24 dev eth0、10.11.12.6がeth0に追加されます。さらに、変更/置換の場合、構文は正しいはずではありませんchange/replace from 10.11.12.3/24 to 10.11.12.6/24か?ip addr delコマンドを使用できることはわかっていますが、ip addr changeまたはip addr replace

回答:


19

(これは古い質問だと思いますが、Googleがここに連れて行ってくれたのは、私が何changereplaceして何をしているか、それらがどのように違うのかを正確に理解しようとしていたためです)。

とは両方とも、既存のアドレスを変更するために使用される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_lftvalid_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
運用
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.