62

ifconfigの出力から MAC アドレスを抽出する最良の方法は何ですか?

出力例:

bash-3.00# ifconfig eth0        
eth0      Link encap:Ethernet  HWaddr 1F:2E:19:10:3B:52    
          inet addr:127.0.0.66  Bcast:127.255.255.255  Mask:255.0.0.0    
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          ....
          ....

カット、AWK、またはその他のものを使用する必要がありますか。また、ある方法と他の方法の長所と短所は何ですか。

4

19 に答える 19

116

あなたは下で猫をすることができます/sys/class/

cat /sys/class/net/*/address

具体的にはeth0

cat /sys/class/net/eth0/address
于 2011-06-13T17:53:40.520 に答える
73

私は使うだろう:

ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'

-o を指定すると、grep は式に一致する行の部分のみを出力します。 [[:xdigit:]]{1,2}1 桁または 2 桁の 16 進数に一致します (Solaris は先行ゼロを出力しません)。

于 2008-10-29T05:56:42.523 に答える
25

/sbin/ip を使用すると、解析がはるかに簡単になるため、これらの種類のタスクに使用するのが好きです。

$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:30:21:48 brd ff:ff:ff:ff:ff:ff

awk を使用して、この出力から MAC アドレスを簡単に取得できます。

$ ip link show eth0 | awk '/ether/ {print $2}'
00:0c:29:30:21:48

もう少し力を入れて、より多くのデータを解析したい場合は、ip コマンドに -online 引数を使用することをお勧めします。これにより、すべての行を新しいデバイスとして扱うことができます。

$ ip -o link 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue \    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000\    link/ether 00:0c:29:30:21:48 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000\    link/ether 00:0c:29:30:21:52 brd ff:ff:ff:ff:ff:ff
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 100\    link/[65534] 
5: sit0: <NOARP> mtu 1480 qdisc noop \    link/sit 0.0.0.0 brd 0.0.0.0
于 2008-10-29T11:58:40.623 に答える
10

本当に利点があるかどうかはわかりませんが、単純に awk を使用できます。

ifconfig eth0 | awk '/HWaddr/ {print $5}'
于 2008-10-29T05:55:18.767 に答える
4

OP の例は Bash を参照しているため、追加のツールを使用せずに HWaddr などのフィールドを抽出する方法を次に示します。

x=$(ifconfig eth0) && x=${x#*HWaddr } && echo ${x%% *}

最初のステップで、これは ifconfig の出力を x に割り当てます。2 番目のステップでは、「HWaddr」より前のすべてを削除します。最後のステップで、" " (MAC の後ろのスペース) の後のすべてが削除されます。

参照: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

于 2011-02-13T20:44:13.590 に答える
3

Ubuntu/Debian の場合

ifconfig | grep HW | awk '{print $5}'

Rhat または CentO の場合は試してみてください

ip add | grep link/ether | awk '{print $2}'
于 2016-06-02T00:25:37.087 に答える
2

私はここで説明されている方法を好みます(わずかな変更を加えて):http ://www.askdavetaylor.com/how_do_i_figure_out_my_ip_address_on_a_mac.html

ifconfig | grep "inet " | grep -v 127.0.0.1 | cut -d " " -f2

その後、将来使用するために短い「myip」コマンドにエイリアスすることができます。

echo "alias myip=\"ifconfig | grep 'inet ' | grep -v 127.0.0.1 | cut -d ' ' -f2\"" >> ~/.bash_profile
于 2011-09-28T13:16:36.043 に答える
1

ターミナルの Ubuntu 14.04 で

ifconfig | grep HW
于 2014-09-30T13:57:43.897 に答える
1

これはどう:

ifconfig eth0 | grep -Eo ..\(\:..\){5}

またはより具体的に

ifconfig eth0 | grep -Eo [:0-9A-F:]{2}\(\:[:0-9A-F:]{2}\){5}

そしてまた単純なもの

ifconfig eth0 | head -n1 | tr -s ' ' | cut -d' ' -f5`
于 2011-05-11T04:14:42.437 に答える
0

アクティブなアダプターの MAC アドレスを取得する必要があったため、このコマンドを使用することになりました。

ifconfig -a | awk '/^[a-z]/ { iface=$1; mac=$NF; next } /inet addr:/ { print mac }' | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'

それが役に立てば幸い。

于 2016-05-09T21:19:37.963 に答える
0

注: OS X eth0 では動作しない場合があります。p2p0 を使用:

ifconfig p2p0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
于 2012-08-29T14:44:10.327 に答える