如果我运行命令
ip link | awk '{print $2}'
在 Ubuntu 18.04 中,我得到以下输出:
lo:
00:00:00:00:00:00
wlp1s0:
2c:6e:85:bf:01:00
enp2s0:
14:18:77:a3:01:02
我希望它像这样格式化(没有lo
)
wlp1s0: 2c:6e:85:bf:01:00
enp2s0: 14:18:77:a3:01:02
我该怎么做呢?
如果我运行命令
ip link | awk '{print $2}'
在 Ubuntu 18.04 中,我得到以下输出:
lo:
00:00:00:00:00:00
wlp1s0:
2c:6e:85:bf:01:00
enp2s0:
14:18:77:a3:01:02
我希望它像这样格式化(没有lo
)
wlp1s0: 2c:6e:85:bf:01:00
enp2s0: 14:18:77:a3:01:02
我该怎么做呢?
您可以从以下位置获取 MAC 地址
/sys/class/net/<dev>/address
:所以,像:
给我:
或者,使用
ip
的单行模式,方便编写脚本:使用 ip 链接
-o
给出每个接口的在线结果。grep ether
仅过滤掉那些分配有以太网地址的接口。awk
简单地从行中打印第 2 列和第 17 列,中间有一个冒号。或者
在哪里
-br
给出brief
接口的信息。grep -v LOOPBACK
LOOPBACK
忽略仅在lo
界面中出现的单词。awk
打印第一列和第三列。使用 ifconfig
where
grep HW
只过滤掉那些分配了硬件地址的接口。黑客
grep HW
或者grep ether
实际上忽略了lo
因为如果没有参数, xargs会将所有换行符、制表符和多个空格替换为单个空格。通过添加-n 2,它将在每个第二个单词之后对该行进行切片。所以:
我做了一个丑陋的 hacky one liner:
如果您使用空格作为分隔符来计算字段,您将看到您需要的字段是第 2 个和第 17 个。
但它们将一个接一个地打印,粘贴将相邻的行作为列。粘贴修复了将相邻行并排放置在一行中的问题。我找不到避免获取 lo 行的聪明方法,所以我只是在使用 grep 打印之前将其排除在外
在这里测试:
[快速回答]:
一种在不知道接口名称的情况下获取 MAC 地址的方法:
以下命令返回接口名称:
适用于所有设备
还有网络设备的命名模式,例如这里https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/sec-understanding_the_predictable_network_interface_device_names。
因此,只能使用
cat /sys/class/net/en*/address
打印以太网 NIC 的 MAC。OVH Ubuntu 18