Можно ли с помощью скрипта bash прочитать mac-адрес моего eth0 и распечатать его в файл?
Можно ли с помощью скрипта bash прочитать mac-адрес моего eth0 и распечатать его в файл?
Ответы:
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
LC_ALL=C ifconfig eth0 | awk '/HWaddr/ {print $NF}'
, что выход может быть локализован, не совпадая с 'HWaddr'. LC_ALL = C использует международный стандарт.
awk '{print $NF; exit}'
слишком
| head -n 1
тогда.
Вот современный метод 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
это важно для чистого сценария, поэтому для согласованности и общего шаблона я всегда использую его.
#! /bin/sh
/sbin/ifconfig eth0 | perl -ne 'print "$1\n" if /HWaddr\s+(\S+)/' >file
Конечно, есть и другие инструменты, которые могут вырезать MAC-адрес из ifconfig
выходных данных. Мне просто нравится Perl.
Использование 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
ip
команды:/sbin/ip link show eth0
.