从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
....
....
我应该使用cut,AWK还是其他任何东西,一种方法的优点和缺点是什么呢?
答案 0 :(得分:106)
你可以在/sys/class/
cat /sys/class/net/*/address
专门针对eth0
cat /sys/class/net/eth0/address
答案 1 :(得分:67)
我会用:
ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
-o将导致grep仅打印与表达式匹配的行的部分。 [[:xdigit:]]{1,2}
将匹配1或2个十六进制数字(Solaris不输出前导零)。
答案 2 :(得分:22)
我喜欢使用/ 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
答案 3 :(得分:10)
不确定是否确实有任何优势,但您只需使用awk:
ifconfig eth0 | awk '/HWaddr/ {print $5}'
答案 4 :(得分:4)
由于OP的例子引用了Bash,这里是一种在不使用其他工具的情况下提取HWaddr等字段的方法:
x=$(ifconfig eth0) && x=${x#*HWaddr } && echo ${x%% *}
在第1步中,将ifconfig的输出分配给x。第二步删除“HWaddr”之前的所有内容。在最后一步中,“”(MAC背后的空间)之后的所有内容都被移除。
参考:http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion
答案 5 :(得分: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
答案 6 :(得分:2)
ifconfig | grep HW | awk '{print $5}'
对于Rhat或CentOs,请尝试ip add | grep link/ether | awk '{print $2}'
答案 7 :(得分:1)
ifconfig en1 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
答案 8 :(得分:1)
在终端的Ubuntu 14.04上
ifconfig | grep HW
答案 9 :(得分: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`
答案 10 :(得分:0)
ifconfig | grep -i hwaddr | cut -d ' ' -f11
答案 11 :(得分:0)
这适用于Mac OS X:
ifconfig en0 | grep -Eo ..\(\:..\){5}
所以:
ifconfig en0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
两者都是上述例子的变体。
答案 12 :(得分:0)
很好,很快:
ifconfig eth0 | grep HWaddr | cut -d ' ' -f 11
答案 13 :(得分: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}'
希望它有所帮助。
答案 14 :(得分:0)
注意:在OS X上,eth0可能无效。使用p2p0:
ifconfig p2p0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
答案 15 :(得分:0)
ifconfig en0 | grep ether-用于有线mac地址
ifconfig zh_CN | grep ether-用于无线mac地址
答案 16 :(得分:0)
这对我有用
ifconfig eth0 | grep -o -E ..:..:..:..:..:..
您可以编写所需接口的Mac地址而不是eth0
答案 17 :(得分:-1)
输出ifconfig:
$ifconfig
eth0 Link encap:Ethernet HWaddr 00:1b:fc:72:84:12
inet addr:172.16.1.13 Bcast:172.16.1.255 Mask:255.255.255.0
inet6 addr: fe80::21b:fcff:fe72:8412/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:638661 errors:0 dropped:20 overruns:0 frame:0
TX packets:93858 errors:0 dropped:0 overruns:0 carrier:2
collisions:0 txqueuelen:1000
RX bytes:101655955 (101.6 MB) TX bytes:42802760 (42.8 MB)
Memory:dffc0000-e0000000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3796 errors:0 dropped:0 overruns:0 frame:0
TX packets:3796 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:517624 (517.6 KB) TX bytes:517624 (517.6 KB)
提取MAC地址的最佳方法是:
ifconfig | sed '1,1!d' | sed 's/.*HWaddr //' | sed 's/\ .*//' | sed -e 's/:/-/g' > mac_address
答案 18 :(得分:-1)
使用:
ifconfig eth0 | grep HWaddr
或
ifconfig eth0 |grep HWaddr
这将只提取MAC地址,而不是别的。
您可以将MAC地址更改为您想要的任何内容:
ifconfig eth0 down,
ifconfig eth0 hw ether (new MAC address),
ifconfig eth0 up