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
とPerl正規表現のオプションがgrep
あります。-P
幅0の肯定的なLookBehindアサーション。
grep -o
テキスト抽出に適しています。sed
伝統的にこの目的で使用されていましたが、Perlスタイルの幅がゼロのアサーションはsed代替コマンドよりも明確であると思います。
-o
(oneline)オプションは実際には必要ありませんが、ip
1行に1つのレコードをよりきれいに見つけることができるため、ネットワーク情報を抽出するときにこのオプションを使用することをお勧めします。これは、より複雑な一致または抽出(通常はそうですawk
)を実行する場合は、きれいなスクリプトにとって-o
非常に重要であるため、一貫性と共通パターンに常に使用します。
編集:10年後の更新:ip
JSON出力のフラグがあります。これは-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