ip link “add link” 和 “add dev” 命令之间有什么区别

ip link “add link” 和 “add dev” 命令之间有什么区别

我见过 ip link 命令的一些示例,其中一些显示为

ip link add dev xxx type devtype 

有时它的形式是

ip link add link xxx type devtype

我查看了文档,但仍然搞不清楚两者之间的区别。它们之间有区别吗?如果有区别,什么时候使用其中一种,什么时候使用另一种。

答案1

混淆是由语法中的缩写引起的。如果坚持使用完整语法,就不会产生混淆。


  • 可选dev(和name)关键字

    常用命令(不需要link)的完整语法是:

    ip link add name foo type bar ...
    

    现在name是可选的,在许多情况下(不是全部,见下面的示例)可以与 互换dev。一旦创建了接口,就可以使用以下命令进行设置:

    ip link set dev foo ...
    

    再次强调,这里dev是可选的。只有当以下参数本身被视为关键字时,才需要name或。因此,您可以创建一个名为的接口:devdev

    ip link add name dev type dummy
    

    并将其重命名为up(这里devname上面的作用不一样):

    ip link set dev dev name up
    

    但最好避免这样的奇怪选择:

    ip link set dev up name foo
    

    当不存在语法歧义时,可以省略某些关键字。这里dev可以省略,因为接口名称与关键字不冲突:

    ip link set foo up
    

    因此在大多数情况下,您不会在处理接口的命令中看到devname。正如您所理解的,操作任意接口名称的脚本绝不会省略这些关键字,否则会遭遇意外失败。

    实际上,甚至命名设备也是可选的。如果在创建设备时没有命名,它通常会采用取决于类型的默认命名约定,通常是类型+编号,编号是下一个可用编号。例如:

    ip link add type bridge
    

    将创建一个名为的桥接接口,bridge0除非bridge0已经存在,在这种情况下它将选择bridge1bridge2等。

  • 使用link关键字

    对于在创建时与其他接口有关系的接口,有一个额外的关键字link来指定此类接口:这适用于 VLAN、macvlan ... 接口。因此,要创建此接口,除了新接口的选定名称外,还必须提供其他接口:

    ip link add link foo name bar type vlan id 10
    

    可以再次name替换为dev

    ip link add link foo dev bar2 type vlan id 20
    

    并且可以省略这两个名称,因为与当前使用的名称的语法没有歧义:

    ip link add link foo mvlan0 type macvlan mode bridge
    

    如前所述,如果你甚至不关心命名创建的接口,系统将自己选择一个名称:

    ip link add link foo type macvlan
    

    将创建一个链接到父接口的 macvlan 接口foo并命名它macvlan0,或者如果该名称已经存在macvlan1 等。


最终使用起来还是有很大区别的:

  ip link add link foo type macvlan

系统将选择与之链接的接口的名称foo

而不是:

  ip link add dev foo type bridge

在这里创建一个名为 的接口foo。类型很重要,在这里不能互换,但例如:

  ip link add link foo type bridge

也可以工作,但会忽略不需要的参数link foo并创建一个名为的桥接接口bridge1

任何可能发生的混淆都是由缩写引起的。如果保留完整的语法,就不会出现任何混淆。自动化脚本也应该这样做。

答案2

当我在debian10上运行该命令时 ip link add link foo type bridge ,它不会忽略不需要的参数,而是报告错误:

root@debian10:~#  ip link add link foo type bridge
Cannot find device "foo"

因此该设备foo必须存在于系统中,然后它将忽略不需要的参数(这里是link foo),而不会出现任何错误报告

相关内容