Linux 固有の最善の解決策は、sysfs を使用することです:
$ IFACE=eth0
$ read MAC </sys/class/net/$IFACE/address
$ echo $IFACE $MAC
eth0 00:ab:cd:12:34:56
このメソッドは他のメソッドに比べて非常にクリーンで、read
以降、追加のプロセスを生成しません。 非 BASH シェルを含む POSIX シェル用の組み込みコマンドです。ただし、OS X への移植性が必要な場合は、ifconfig
を使用する必要があります。 と sed
OS X には sysfs のような仮想ファイルシステム インターフェイスがないためです。
次のようにできます
ifconfig <Interface ex:eth0,eth1> | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
また、次のようにすべてのインターフェイスの MAC を取得できます
cat /sys/class/net/*/address
eth0 などの特定のインターフェイスについて
cat /sys/class/net/eth0/address