我看过 ip link 命令的示例,其中一些显示为
ip link add dev xxx type devtype
Run Code Online (Sandbox Code Playgroud)
有时它的形式
ip link add link xxx type devtype
Run Code Online (Sandbox Code Playgroud)
我查看了文档,仍然对两者之间的区别感到困惑。有区别吗?如果有区别,您什么时候会使用其中一种。
这种混乱是由语法中的缩写引起的。如果你坚持完整的语法就不会有混乱。
可选dev
(和name
)关键字
常用命令的完整语法(不需要link
)是:
ip link add name foo type bar ...
Run Code Online (Sandbox Code Playgroud)
Nowname
是可选的,并且在许多情况下(并非全部,请参见下面的示例)可以与dev
. 创建接口后,可以使用以下命令进行设置:
ip link set dev foo ...
Run Code Online (Sandbox Code Playgroud)
这里同样dev
是可选的。name
或dev
仅当后面的参数本身作为关键字时才需要。因此,您可以创建一个名为的接口dev
:
ip link add name dev type dummy
Run Code Online (Sandbox Code Playgroud)
并将其重命名为up
(这里dev
和name
角色不一样):
ip link set dev dev name up
Run Code Online (Sandbox Code Playgroud)
但最好避免这种奇怪的选择:
ip link set dev up name foo
Run Code Online (Sandbox Code Playgroud)
当没有语法歧义时,可以省略一些关键字。这里dev
可以省略,因为接口名称不与关键字冲突:
ip link set foo up
Run Code Online (Sandbox Code Playgroud)
因此在大多数情况下,您不会在命令处理接口中看到dev
或。name
正如您所理解的,操作任意接口名称的脚本永远不应该省略这些关键字或遭受意外的失败。
实际上,甚至为设备命名也是可选的。如果您在创建时没有命名设备,它通常会采用取决于类型的默认命名约定,通常是类型+数字,其中数字是下一个可用的数字。例如:
ip link add type bridge
Run Code Online (Sandbox Code Playgroud)
将创建一个名为bridge0
除非bridge0
已经存在的桥接接口,在这种情况下它将选择bridge1
或bridge2
等等。
随着link
关键字
对于在创建时与其他接口有关系的接口,有附加关键字link
来指定此类接口:这发生在 VLAN、macvlan ...接口上。因此,要创建此接口,除了所选的新接口名称之外,还必须提供另一个接口:
ip link add link foo name bar type vlan id 10
Run Code Online (Sandbox Code Playgroud)
再次name
可以替换为dev
:
ip link add link foo dev bar2 type vlan id 20
Run Code Online (Sandbox Code Playgroud)
两者都可以省略,因为当前使用的名称的语法没有歧义:
ip link add link foo mvlan0 type macvlan mode bridge
Run Code Online (Sandbox Code Playgroud)
如前所述,如果您甚至不关心为创建的接口命名,系统将自行选择一个名称:
ip link add link foo type macvlan
Run Code Online (Sandbox Code Playgroud)
将创建一个链接到父foo
接口的 macvlan 接口并为其命名macvlan0
,或者如果该名称已经存在macvlan1
等。
最终使用起来还是很不一样的:
ip link add link foo type macvlan
Run Code Online (Sandbox Code Playgroud)
系统可以选择链接的接口的名称foo
而不是:
ip link add dev foo type bridge
Run Code Online (Sandbox Code Playgroud)
您在其中创建一个名为 的接口foo
。类型很重要并且在这里不可互换,但例如:
ip link add link foo type bridge
Run Code Online (Sandbox Code Playgroud)
也可以工作,但忽略不需要的参数link foo
,并将创建一个名为例如的桥接口bridge1
。
任何可能发生的混淆都是由缩写引起的。如果保留完整的语法,就不会出现任何混乱。这也是自动化脚本应该做的事情。
归档时间: |
|
查看次数: |
8284 次 |
最近记录: |