每个接口一行一行的 `ip addr`

Jav*_*Jav 5 bash ip awk

我想在我管理的所有服务器上打印有关不同接口的网络配置的特定信息:

  • 接口名称
  • 接口ipv4地址
  • 接口硬件mac地址

不幸的是,由于换行符,简单的ip -o addr show不允许轻松解析其输出awk

是否可以ip addr show在每个界面上精确打印一行?

否则,是否可以使用awk和/或实现相同的结果sed?这超出了我对这两个命令的了解,因为这些行必须逐树连接......

小智 14

只需使用 --brief 标志。

ip --brief address show
Run Code Online (Sandbox Code Playgroud)


Mal*_*ous 5

较新版本的ip能够使用该-j选项输出 JSON 格式的数据,然后您可以使用过滤器(例如jq. 例如,这将在eth0接口上打印 IPv4 地址:

$ ip -j addr show dev eth0 | jq -r '.[0].addr_info | map(select(.family == "inet"))[0].local'
192.168.0.1
Run Code Online (Sandbox Code Playgroud)

或者要获取机器上所有 IPv4 地址的列表,每行一个:

ip -j addr show | jq -r 'map(.addr_info) | map(map(select(.family == "inet").local)) | flatten | .[]'
127.0.0.1
192.168.0.1
172.19.0.1
172.17.0.1
172.18.0.1
Run Code Online (Sandbox Code Playgroud)

select(...)例如,删除以包含 IPv6 地址。许多其他变化是可能的。