使用 bash 脚本,我可以读取 eth0 的 mac 地址并将其打印到文件中吗?
答案1
ifconfig
将输出有关您的接口的信息,包括 MAC 地址:
$ ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:11:22:33:44:55
inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.0.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:289748093 errors:0 dropped:0 overruns:0 frame:0
TX packets:232688719 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3264330708 (3.0 GiB) TX bytes:4137701627 (3.8 GiB)
Interrupt:17
这HWaddr
就是您想要的,因此您可以使用awk
它来过滤它:
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}'
00:11:22:33:44:55
将其重定向到文件中:
$ ifconfig eth0 | awk '/HWaddr/ {print $NF}' > filename
答案2
这是一个现代 Linux 方法:
ip -o link show dev eth0 | grep -Po 'ether \K[^ ]*'
它的现代之处ifconfig
在于早已被弃用赞成ip
从包装中iproute2
,并且grep
有-P
perl 正则表达式的选项零宽度正向后断言。
grep -o
非常适合文本提取。sed
传统上用于此目的,但我发现 perl 样式的零宽度断言比 sed 替换命令更清晰。
您实际上不需要-o
(oneline) 选项ip
,但我更喜欢在提取网络信息时使用它,因为我发现每行一条记录更干净。如果您正在进行更复杂的匹配或提取(通常使用awk
),-o
这对于干净的脚本至关重要,因此为了一致性和通用模式,我总是使用它。
编辑:10年后更新:ip
现在有-j
JSON输出的标志,当与 结合时jq
,它提供了更强大和可读的命令管道:
ip -j link show dev eth0 | jq -r '.[0].address'
该-r
标志jq
使其输出原始字符串而不是带引号的 (JSON) 字符串。
答案3
#! /bin/sh
/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file
ifconfig
当然,还有其他工具可以从 的输出中删除 MAC 地址。我只是喜欢 Perl。
答案4
使用ip -br link show eth0
将打印如下内容:
$ ip -br link show eth0
eth0 UP 85:e2:62:9c:b2:02 <BROADCAST,MULTICAST,UP,LOWER_UP>
您只需要第三列,因此:
$ ip -br link show eth0 | awk '{ print $3 }'
85:e2:62:9c:b2:02
$ ip -br link show eth0 | awk '{ print $3 }' > file