(Tôi nhận ra đây là một câu hỏi cũ, nhưng Google đã đưa tôi đến đây vì tôi đang cố gắng tìm ra chính xác những gì change
và replace
làm và chúng khác nhau như thế nào).
Tôi tin rằng cả hai replace
và change
được sử dụng để sửa đổi một địa chỉ hiện có. Xem xét:
ip addr add 192.168.1.10/32 dev dummy0
Điều này giúp tôi:
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
Nếu tôi chạy lại cùng một lệnh, tôi gặp lỗi:
# ip addr add 192.168.111.10/32 dev dummy0
RTNETLINK answers: File exists
Nếu tôi muốn sửa đổi các cờ trên địa chỉ đó, tôi có thể sử dụng change
hoặc replace
. Ở đây, tôi sử dụng ip addr change
để sửa đổi preferred_lft
và valid_lft
cài đặt trên địa chỉ đó:
# 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
Hành vi của ip addr replace
là giống hệt nhau. Trong thực tế, nếu bạn nhìn vào mã, chúng sẽ dẫn đến các hành động gần như giống hệt nhau:
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);
Có vẻ như ý định ở đây là change
sẽ chỉ sửa đổi một địa chỉ hiện có, trong khi replace
sẽ sửa đổi một địa chỉ hiện có hoặc tạo một địa chỉ mới nếu địa chỉ được chỉ định không tồn tại. Trong thực tế, có vẻ như cả hai change
và replace
sẽ thêm địa chỉ nếu nó chưa tồn tại.
Nếu bạn thực sự muốn thêm một địa chỉ mới và xóa một địa chỉ cũ, bạn sẽ cần phải làm điều đó theo hai bước, sử dụng ip addr del
theo sau ip addr add
(hoặc cách khác, tất nhiên).
NO
P0
s :()