我可以按以下顺序仅显示有关网络设备的数据吗:
设备名称 - 类型(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'