如何筛选显示指定前缀的Open-Vswitch虚拟网口详细信息
解决Open vSwitch s1开头网口完整信息显示问题
我之前也碰到过一模一样的情况——直接用grep s1-eth只能抓到每个网口的第一行,因为工具输出里每个网口的信息是多行块结构,其他行不含s1-eth关键词,直接被过滤掉了。下面给你几个实用的解决方法:
方法1:用ip link结合awk批量提取完整信息
这是最直接的命令行方式,不需要写脚本,一次性输出所有s1开头网口的完整信息:
ip link show | awk '/^[0-9]+: s1-/{flag=1; print; next} flag && /^[0-9]+:/{flag=0} flag'
工作原理:
- 当匹配到**数字开头、后跟s1-**的行(也就是网口的起始行,比如
3: s1-eth1: <BROADCAST,MULTICAST,UP,LOWER_UP>...),就开启标记flag=1,打印该行并跳到下一行 - 当标记开启时,如果遇到下一个网口的起始行(同样数字开头),就关闭标记
- 标记开启的所有行都会被打印,这样就完整输出了每个s1开头网口的所有信息(包括HWaddr、RX/TX包数、errors等)
方法2:通过Open vSwitch工具先筛选端口再逐个查询
如果你想更精准地针对OVS的端口,可以先列出所有s1开头的端口,再逐个查看详情:
for port in $(ovs-vsctl list port | grep -E 'name: s1-eth' | cut -d'"' -f2); do echo "------------------------------" echo "端口信息: $port" ip link show $port echo "" done
优点:
- 可以自定义输出格式(比如添加分隔线、高亮端口名)
- 如果需要结合
ethtool查看更多硬件信息,直接把ip link show换成ethtool $port即可
方法3:用ifconfig(适用于仍安装该工具的系统)
如果你的系统还保留了ifconfig,可以用类似的awk逻辑:
ifconfig | awk '/s1-eth/{flag=1; print; next} flag && /^[^ ]/{flag=0} flag'
为什么之前的命令只显示第一行?
因为grep默认只匹配包含指定关键词的行,而每个网口的RX/TX、errors等信息都在后续的独立行里,这些行不含s1-eth,所以被grep过滤掉了。上面的方法都是通过块匹配的方式,把整个网口的信息区块完整提取出来。
内容的提问来源于stack exchange,提问作者Dimareal
相关产品推荐
相关产品推荐

