(Bu eski bir soru olduğunun farkındayım ama Google I dışarı tam olarak ne anlamaya çalışıyordu çünkü beni buraya getiren change
ve replace
yapmak ve farklı nasıl).
Hem inanıyoruz replace
ve change
mevcut bir adresi değiştirmek için kullanılır. Düşünmek:
ip addr add 192.168.1.10/32 dev dummy0
Bu beni:
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
Aynı komutu tekrar çalıştırırsam bir hata alırım:
# ip addr add 192.168.111.10/32 dev dummy0
RTNETLINK answers: File exists
Bu adresteki bayrakları değiştirmek istersem, ya change
da öğelerini kullanabilirim replace
. Burada, bu adresteki ve ayarlarını ip addr change
değiştirmek için kullanıyorum :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
Davranışı ip addr replace
aynıdır. Aslında, koda bakarsanız, neredeyse aynı eylemlerle sonuçlanırlar:
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);
Buradaki niyet change
, yalnızca mevcut bir adresi replace
değiştirirken mevcut bir adresi değiştirecek veya belirtilen adres mevcut değilse yeni bir adres oluşturacak gibi görünüyor . Uygulamada, her ikisi gibi görünüyor change
ve replace
zaten yoksa adresi ekleyecek.
Aslında yeni bir adres eklemek ve eski bir adresi kaldırmak istiyorsanız, bunu iki adımda ve ip addr del
ardından ip addr add
(veya elbette başka bir şekilde) kullanarak yapmanız gerekir .
NO
P0