(Я розумію , що це старе питання, але 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
:()