如果我运行命令
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
我该怎么做呢?
答案1
您可以从以下位置获取 MAC 地址/sys/class/net/<dev>/address
:
$ cat /sys/class/net/enp0s3/address
08:00:27:15:dc:fd
所以,像这样:
find /sys/class/net -mindepth 1 -maxdepth 1 ! -name lo -printf "%P: " -execdir cat {}/address \;
给我:
enp0s3: 08:00:27:15:dc:fd
docker0: 02:42:61:cb:85:33
或者,使用 的ip
单行模式,这样方便编写脚本:
$ ip -o link | awk '$2 != "lo:" {print $2, $(NF-2)}'
enp0s3: 08:00:27:15:dc:fd
docker0: 02:42:61:cb:85:33
答案2
使用ip链接
ip -o link | grep ether | awk '{ print $2" : "$17 }'
- 其中
-o
给出了每个接口的在线结果。 grep ether
仅过滤掉那些分配有以太网地址的接口。- 并
awk
简单地打印行中的第 2 列和第 17 列,中间有冒号。
或者
ip -br link | grep -v LOOPBACK | awk '{ print $1 " : " $3 }'
在哪里
-br
给出brief
接口的信息。grep -v LOOPBACK
LOOPBACK
忽略仅出现在界面中的单词lo
。- 并
awk
打印第一列和第三列。
使用 ifconfig
ifconfig | grep HW | awk '{ print $1" : "$5 }'
其中grep HW
仅过滤掉那些分配有硬件地址的接口。
黑客攻击
grep HW
或者grep ether
实际上忽略了lo
因为
环回接口没有硬件地址分配给它。
答案3
没有争论参数会将所有换行符、制表符和多个空格替换为单个空格。通过增加-n 2它会在每个第二个单词之后对该行进行切片。所以:
ip link | awk '{print $2}' | xargs -n 2
答案4
[快速回答]:
在不知道接口名称的情况下获取 MAC 地址的方法:
cat /sys/class/net/$(ip route show default | awk '/default/ {print $5}')/address
以下命令返回接口名称:
ip route show default | awk '/default/ {print $5}'