Распечатать MAC-адрес в файл

Ответы:

15

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
Вы можете также использовать й ipкоманды: /sbin/ip link show eth0.
Кит
2
@Michael В Linux, в любом случае, это предпочтительный инструмент . На самом деле вы должны использовать для настройки некоторых дополнительных функций. Но ifconfig живет ...
Кит
3
Международный подход заключается в том LC_ALL=C ifconfig eth0 | awk '/HWaddr/ {print $NF}', что выход может быть локализован, не совпадая с 'HWaddr'. LC_ALL = C использует международный стандарт.
пользователь неизвестен
2
@ пользователь Ах, круто. Насколько я знаю , что это всегда будет первой линии, так что вы могли бы просто уйти с awk '{print $NF; exit}'слишком
Майкл Mrozek
1
Да, если вы типа AWK. Я типа сед, но здесь предпочел бы | head -n 1тогда.
пользователь неизвестен
8

Вот современный метод 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, но я предпочитаю использовать ее при извлечении информации о сети, поскольку я считаю, что она чище, имея по одной записи на строку. Если вы делаете более сложные совпадения или извлечения (обычно с awk), -oэто важно для чистого сценария, поэтому для согласованности и общего шаблона я всегда использую его.

CAMH
источник
1
@michelemarcon: это не использует Perl. Он использует последние GNU grep, и у grep есть опция для использования регулярных выражений в стиле perl.
Camh
Я имею grep busybox, однако спасибо за разъяснение. +1
michelemarcon
5
#! /bin/sh

/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file

Конечно, есть и другие инструменты, которые могут вырезать MAC-адрес из ifconfigвыходных данных. Мне просто нравится Perl.

CJM
источник
1
У меня нет perl в моей системе ... :( Однако +1
michelemarcon
0

Использование 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
annahri
источник