首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用`ip地址显示类型显示物理网络接口

使用`ip地址显示类型显示物理网络接口
EN

Server Fault用户
提问于 2020-05-30 20:50:23
回答 1查看 4K关注 0票数 6

使用Ubuntu20.04。我在如何只获取物理以太网接口的名称?中了解到,只要显示物理网络接口,我们就可以做到

代码语言:javascript
复制
ls -l /sys/class/net/ | grep -v virtual

我试图使用ip address show type XXX获得相同的信息(但没有成功)。根据ip address help,可能的类型如下:

代码语言:javascript
复制
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 }

Q1。是否可以使用ip address只显示物理接口?例如,查看机器的本地IP地址。

Q2。也许有一个很好的理由不具有与物理接口相对应的类型。理由何在?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2020-05-30 23:07:24

接口类型更多地是一个链接属性,而不是一个地址属性,即使这些信息可以在ip address的S输出中使用(但并不总是可用)。因此,用于回答OP问题标题的命令是ip link show.

...but硬件接口没有关联的类型。只有虚拟接口才能做到这一点,因为它是一个附加属性,没有真正的接口(这回答了Q2,但请参阅最后的注释)。因此,没有允许显示物理类型的类型,而且由于筛选器选项中也没有可用的否定式(也没有一个表达式显示要否定的任何类型),所以在命令语法中没有过滤器只显示这样的接口。

若要查找这些接口,必须显示所有接口,并使用外部筛选器筛选出没有输入的接口。因此,仅用ip link命令无法完成的事情,可以通过使用适当的工具过滤其输出来完成:jq使用ip -details -json link的S JSON输出进行可靠的解析。这里有一个jq文档来学习如何使用它,手册页是基于它的内容的。

从完整的接口列表来看,必须这样做:

  • 排除找到的任何类型(在JSON输出中,这是linkinfo的info_kind属性,它可以是帮助中的所有类型(vlan,veth,.),不要与link_type混淆,例如环回、以太、无.)。
  • 排除环回link_type。

它转化为:

代码语言:javascript
复制
ip -details -json link show | jq -r '
.[] | 
      if .linkinfo.info_kind // .link_type == "loopback" then
          empty
      else
          .ifname
      end
'

例如,在目前共有12个接口的系统上,只有这两个接口,也就是唯一的两个real接口,使用上面的命令显示:

代码语言:javascript
复制
eth0
wlan0

自由地改进了这个jq过滤器。

为了解决Q1问题,在这种情况下,将ip ... link替换为ip ... address将提供相同的输出。但是,要在接口之外显示地址,过滤器当然必须更改(并且需要一个最近足够的jq命令来允许自定义处理linefeed):

代码语言:javascript
复制
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
'

如果要直接检查整个JSON输出,请尝试ip -details -pretty -json addressip -d -j address | jq .-json选项可用于几个iproute2命令,但并非所有命令都可用。它对ip ...命令的添加是最近的(2017年年年中)。

注意:实际上,当在JSON中使用时,type关键字可以转换为多种不同类型的属性:.linkinfo.info_kind是前面描述的接口的实际类型,但也有一个接口(包括一个真正的接口)的.linkinfo.info_slave_kind,该接口有一个桥或一个键作为主接口(resp )。bridge_slavebond_slave)。这不会改变JSON结果,因为它不会检查这个属性。

无论如何,这样的接口不应该设置IP地址给它们:地址应该设置为主机,尽管它是虚拟的,但是在与周围的物理环境交互时应该是重要的接口。

票数 7
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1019363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档