如何获取接口的名称、类型和 IP?

如何获取接口的名称、类型和 IP?

我可以按以下顺序仅显示有关网络设备的数据吗:

设备名称 - 类型(vlan、bond 等) - ip 地址

NetworkManager 使用以下命令执行类似的操作:“nmcli 设备状态”

答案1

ip -details提供附加信息,例如界面种类(见下文)。

为了实现真正的可解析性,请选择 JSON 输出和 JSON 解析器:jq

这是单行代码,但为了便于阅读,我选择将其拆分为多行。需要jq应该在大多数发行版中打包的实用程序,用于解析ip -json的输出。杰克只需阅读我提供的链接,学习 的语言并不难。

ip -details -json address show |
    jq -j '
        .[] |
              .ifname," ",
              .link_type,"/",
              .linkinfo.info_kind // "",
              if .linkinfo.info_slave_kind then
                  "/slave-",.linkinfo.info_slave_kind
              else
                  empty
              end, " ",
              ( .addr_info[] | ( .local," " ) ),
              "\n"
'

关于接口类型:实际上有两个直接属性:type和kind,以及第三个属性:slave_kind,仅在JSON输出中很容易与第二个属性区分开。

  • 类型

    通常loopback(仅适用于环回接口),ether(大多数接口是以太网或类似以太网的接口),或none适用于第 3 层接口(例如:a线卫界面)。

  • 种类

    这就是通常所认为的类型。这环回接口和真实的硬件接口(至少是常见的以太网或无线)没有种类财产。

  • 奴隶类

    当接口被从属时,例如连接到网桥或绑定设备,则该信息在命令的输出中可用。

您将得到组合类型+种类+从属种类(如果您不需要全部,只需删除相关行)。

因此,对于一些微妙之处,组合ether/tun将是tap模式下的tuntap设备,而anone/tun将是tun模式下的tuntap设备(此信息也可以直接在某些子字段中获得,但对于组合的类型+种类,不需要)。

显示仅有的至少有一个 IPv4 地址的接口,最简单的方法是将该-4选项与其他选项一起添加到ip address上面的命令中。由于这也会删除链路层地址,因此过滤器不会匹配没有 IPv4 地址的接口,并且根本不会显示。

删除 IPv6 输出但显示全部接口,不要添加-4而是替换:

( .addr_info[] | ( .local," " ) ),

( .addr_info[] | ( if .family == "inet" then .local," " else empty end ) ),

答案2

使用nmcli

nmcli device show |grep 'GENERAL.DEVICE:\|GENERAL.TYPE:\|IP4.ADDRESS'

包括IPV6:

nmcli device show |grep 'GENERAL.DEVICE:\|GENERAL.TYPE:\|IP4.ADDRESS\|IP6.ADDRESS' 

相关内容