回答:
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
LC_ALL=C ifconfig eth0 | awk '/HWaddr/ {print $NF}'
出力はローカライズされる可能性があるため、国際的なアプローチはであり、「HWaddr」と一致しません。LC_ALL = Cは国際標準を使用します。
awk '{print $NF; exit}'
ます
| head -n 1
です。
これが最新の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
ネットワーク情報を抽出する場合は、1行に1つのレコードがある方がわかりやすいので、これを使用することを好みます。より複雑な一致または抽出を行う場合(通常はを使用awk
)-o
は、クリーンなスクリプトに不可欠であるため、一貫性と共通のパターンのために、常にそれを使用します。
#! /bin/sh
/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file
ifconfig
もちろん、の出力からMACアドレスを切り取ることができる他のツールがあります。私はPerlが好きです。
ip
コマンドを使用することもできます/sbin/ip link show eth0
。