linux – 理解“ip addr change”和“ip addr replace”命令

目前我有以下与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更改10.11.12.6/24 dev eth0或ip addr替换10.11.12.6/24 dev eth0然后10.11.12.6刚刚添加到eth0.另外,在更改/替换的情况下,语法是否应该从10.11.12.3/24更改/替换为10.11.12.6/24?我知道我可以使用ip addr del命令,但如何通过ip addr更改或ip addr替换来实现这一点?

解决方法

(我意识到这是一个古老的问题,但谷歌把我带到了这里,因为我试图找出确切的变化和替换以及它们如何不同).

我相信替换和更改都用于修改现有地址.考虑:

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

如果我想修改该地址上的标志,我可以使用更改或替换.在这里,我使用ip addr更改来修改该地址上的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,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,argv+1);

看起来这里的意图是更改将仅修改现有地址,而替换将修改现有地址或如果指定的地址不存在则创建新地址.在实践中,似乎更改和替换将添加地址(如果它尚不存在).

如果你真的想要添加一个新地址并删除一个旧地址,你需要分两步完成,使用ip addr del,然后是ip addr add(当然,反过来).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


查找全部容器的日志文件 $ sudo find /var/lib/docker/containers -name *.log 查看日志位置 $ docker inspect --format=&#39;{{.LogPath}}&#39; &lt;container_name&gt; 实时查询内容 $
Linux日志文件中列属性的详细解析
在Linux系统中没有duf命令,如何有效地管理磁盘空间?
深入探讨EncryptPad在Linux操作系统中的功能和优势
原理和应用场景:Linux中ttyload工具的工作原理和实际用途
深度解析SELinux的三种策略类型
评估Linux系统性能的ttyload工具使用效果
分享在Linux系统中检测SSH版本的方法
介绍Linux平台上的数据加密工具EncryptPad
在Linux系统中,如何查看和诊断块设备信息?
在Linux环境下如何查看块设备信息?
探索Linux操作系统下的数据加密工具EncryptPad
学会在Linux系统中查看硬盘信息
分析SELinux:原理与实践
掌握SELinux策略类别
技巧:有效解读和管理Linux日志文件
查看Linux系统中的所有用户
了解Linux系统中各种不同类型的日志文件
深入理解Linux PS命令
方法:在Linux操作系统中查看用户