目前所有提到的获取MAC地址的解决方案都使用eth0.

那么,有没有办法获取第一个可用接口的MAC地址.(也就是说,它有一个inet地址,我甚至不希望它有inet 6).

例如

eth0      Link encap:Ethernet  HWaddr <some addr>
          inet6 addr: <some addr> Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:123
          RX packets:123 errors:123 dropped:123 overruns:123 frame:123
          TX packets:123 errors:123 dropped:123 overruns:123 carrier:123
          collisions:123 txqueuelen:123 
          RX bytes:123 (123 MB)  TX bytes:123 (123 KB)
          Interrupt:123 Memory:00000000-00000000

eth1      Link encap:Ethernet  HWaddr <some addr>
          inet addr:<some addr>  Bcast:<some addr>  Mask:<some addr>
          inet6 addr: <some addr> Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:123 Metric:123
          RX packets:123 errors:123 dropped:123 overruns:123 frame:123
          TX packets:123 errors:123 dropped:123 overruns:123 carrier:123
          collisions:123 txqueuelen:123 
          RX bytes:123 (123 MB)  TX bytes:123 (123 KB)
          Interrupt:123 Memory:00000000-00000000

注意:我已经更改了输出的值.

所以在本例中,我希望HWaddr用于eth1,而不是eth0.

推荐答案

注意,接口名和MAC地址是一行中的第一个和最后一个字段,没有前导空格.

如果其中一个缩进行包含inet addr:,则应打印最新的接口名称和MAC地址.

ifconfig -a |
awk '/^[a-z]/ { iface=$1; mac=$NF; next }
    /inet addr:/ { print iface, mac }'

请注意,多个接口可以满足您的标准.然后,脚本将打印多行.(如果总是只想打印第一个匹配项,可以在最后一个大括号前加; exit.)

Linux相关问答推荐

如何确定Linux上的最大静态TLS(线程本地存储)块大小?

BASH-SCRIPT-在特定行合并两个文件

在新环境中使用Unicode范围的sed表达式有问题

Linux-如何区分目录中名称相同但扩展名不同的所有文件

Linux 的 __fastfail 替代方案?

在 Bash 中使用 shell 脚本从文件中解析版本号

将 Visual Studio C++ 项目迁移到 Linux 和 CMake

为什么rsp寄存器从0x7FFFFFFFDFD0开始

如何安装脚本以从命令行的任何位置运行?

BASEDIR 环境变量未正确定义

在 Linux/POSIX 系统上获取用户全名的最简单方法是什么?

如何使用 Ansible 等待服务器重启?

为什么`du`的输出通常与`du -b`如此不同

根据日期范围过滤日志(log)文件条目

试运行 cron 条目

如何找到只对所有者具有特定权限的文件?

如何为 Git 命令设置自动完成功能?

在Linux中使用空格设置环境变量

Postgresql -bash:psql:找不到命令

具有所有内核的 Gzip