“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 changeip addr replace?

답변:


19

(이것은 오래된 질문이라는 것을 알고 있지만 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 changepreferred_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하고 지정된 주소가 존재하지 않는 경우 기존 주소를 수정하거나 새 주소를 작성 하려는 의도 입니다. 실제로, 두 것처럼 보인다 changereplace이미 존재하지 않는 경우 주소를 추가합니다.

실제로 새 주소를 추가하고 이전 주소를 제거하려면 ip addr del다음 단계를 사용하여 ip addr add(또는 물론 다른 방법으로) 두 단계로 수행해야합니다 .


이 답변에 감사드립니다. 그것은 다운 타임의 톤을 내 프로덕션 환경을 저장 (단지 앞에서 그것을 발견했다면 내가 했어 수 NO P0의 :()
Samveen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.