Mac アドレスをファイルとして印刷

Mac アドレスをファイルとして印刷

Bashスクリプトを使用してeth0のmacアドレスを読み取り、それをファイルに印刷できますか?

答え1

ifconfigMACアドレスを含むインタフェースに関する情報が出力されます。

$ 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とPerl正規表現のオプションがgrepあります。-P幅0の肯定的なLookBehindアサーション

grep -oテキスト抽出に適しています。sed伝統的にこの目的で使用されていましたが、Perlスタイルの幅がゼロのアサーションはsed代替コマンドよりも明確であると思います。

-o(oneline)オプションは実際には必要ありませんが、ip1行に1つのレコードをよりきれいに見つけることができるため、ネットワーク情報を抽出するときにこのオプションを使用することをお勧めします。これは、より複雑な一致または抽出(通常はそうですawk)を実行する場合は、きれいなスクリプトにとって-o非常に重要であるため、一貫性と共通パターンに常に使用します。

編集:10年後の更新:ipJSON出力のフラグがあります。これは-j、次のものと組み合わせると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>

3番目の列だけが必要なので、次のようになります。

$ ip -br link show eth0 | awk '{ print $3 }'
85:e2:62:9c:b2:02
$ ip -br link show eth0 | awk '{ print $3 }' > file

関連情報