Pol*_*ase 7 ip linux-networking
使用Ubuntu 20.04。我在如何仅获取物理以太网接口的名称?为了仅显示物理网络接口,我们可以这样做
ls -l /sys/class/net/ | grep -v virtual
Run Code Online (Sandbox Code Playgroud)
我尝试(未成功)使用 获取相同的信息ip address show type XXX
。根据ip address help
可能的类型有:
TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |
bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan | lowpan |
gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan | vti |
nlmon | can | bond_slave | ipvlan | geneve | bridge_slave |
hsr | macsec | netdevsim }
Run Code Online (Sandbox Code Playgroud)
Q1. 是否可以ip address
仅显示物理接口?例如,查看机器的本地 IP 地址。
Q2。也许没有与物理接口相对应的类型是有充分理由的。理由是什么?
接口类型更像是一个链接属性而不是地址属性,即使此信息可以(但并非总是)在 的ip address
输出中可用。所以用来回答OP问题标题的命令是ip link show
......
...但是硬件接口没有关联的类型。只有虚拟接口才能得到这个,因为它是一个没有真实接口的附加属性(这回答了问题2,但请参阅最后的注释)。因此,没有类型允许显示物理接口,并且由于过滤器选项中也没有可用的否定(也没有用于显示任何类型进行否定的表达式),因此命令语法中没有可用的过滤器来仅显示此类接口。
要找到这些接口,您必须显示所有接口,并使用外部过滤器过滤掉那些没有类型的接口。因此,仅使用该命令无法完成的事情ip link
可以通过使用适当的工具过滤其输出来完成:jq
使用ip -details -json link
的 JSON 输出,进行可靠的解析。有这个jq
文档可以学习如何使用它,手册页基于其内容。
从接口的完整列表来看,必须这样做:
翻译为:
ip -details -json link show | jq -r '
.[] |
if .linkinfo.info_kind // .link_type == "loopback" then
empty
else
.ifname
end
'
Run Code Online (Sandbox Code Playgroud)
例如,在当前总共有 12 个接口的系统上,只有这两个,唯一的两个真实接口,通过上面的命令显示:
eth0
wlan0
Run Code Online (Sandbox Code Playgroud)
自由地改进这一点jq过滤器。
为了解决问题 Q1,在本例中,替换ip ... link
为ip ... address
将给出相同的输出。但是,要显示除接口之外的地址,当然必须更改过滤器(并且需要足够新的jq
命令以允许自定义换行处理):
ip -details -json address show | jq --join-output '
.[] |
if .linkinfo.info_kind // .link_type == "loopback" then
empty
else
.ifname ,
( ."addr_info"[] |
if .family == "inet" or .family == "inet6" then
" " + .local
else
empty
end
),
"\n"
end
'
Run Code Online (Sandbox Code Playgroud)
如果您想直接检查整个 JSON 输出,请尝试ip -details -pretty -json address
或ip -d -j address | jq .
。该-json
选项可用于多个iproute2命令,但不是全部。它ip ...
是最近才添加的命令(2017 年中))。
注意:实际上,type
当在 JSON 中使用时,该关键字可以转换为多种不同类型的属性:.linkinfo.info_kind
是前面描述的接口的实际类型,但也有.linkinfo.info_slave_kind
一个以桥或键为主的接口(包括真实接口) (分别。bridge_slave
和bond_slave
)。这不会更改 JSON 结果,因为它不会检查此属性。
无论如何,这样的接口永远不应该设置IP地址:地址应该设置为主设备,尽管它是虚拟的,但在与周围的物理环境交互时应该是重要的接口。
归档时间: |
|
查看次数: |
6910 次 |
最近记录: |