Выводить только MAC-адрес на Ubuntu

Следующее руководство вы найдете только для 12.10 и выше. Это не сработает 12.04. Пакет nepomuk-core-dev не входит в репозитории Precise (12.04). Вы должны использовать Quantal или позже, чтобы получить пакет непосредственно в своих репозиториях. Для создания программного обеспечения рекомендуется использовать последние версии Ubuntu вместо Long Term Support (LTS), поскольку более новые версии имеют более новые пакеты, которые вам понадобятся при построении из исходного кода (обычно разработчики программного обеспечения поддерживают обновление своих библиотек). [!d0 ]

Чтобы увидеть, в каких версиях Ubuntu включен пакет, проверьте http://packages.ubuntu.com/nepomuk-core-dev

1
задан 26 May 2015 в 17:37

4 ответа

Вы можете получить доступ к файлу address для каждого устройства в виртуальной файловой системе /sys. MAC-адрес должен находиться в /sys/class/net/<device-name>/address:

$ cat /sys/class/net/enp1s0/address
34:17:eb:5d:88:7c

Для всех устройств:

$ cat /sys/class/net/*/address
34:17:eb:5d:88:7c
00:00:00:00:00:00
64:5a:04:69:50:45
28
ответ дан 23 May 2018 в 20:14
  • 1
    +1 за то, что вы не используете инструмент, который устарел в течение десятилетия :) – hobbs 27 May 2015 в 00:06
  • 2
    @hobbs Подождите, какой инструмент? – detly 27 May 2015 в 01:33
  • 3
    @detly ifconfig – hobbs 27 May 2015 в 01:33
  • 4
    @hobbs Woah. Я не знал об этом. Он не печатает предупреждение об устаревании на моей машине. – detly 27 May 2015 в 01:35
  • 5
    @detly ifconfig устарел для лет сейчас, а ip также существует уже много лет. – muru 27 May 2015 в 05:43

Вот несколько способов:

grep. Существуют различные регулярные выражения, которые подберут их. Здесь я ищу 5 повторений из двух букв или цифр, за которыми следует двоеточие, а затем любые два символа. [F8] делает регистр соответствия нечувствительным, а -o делает grep печатать только согласованную часть. -E позволяет использовать расширенные регулярные выражения. Это же регулярное выражение также работает с PCREs (-P).
ifconfig -a | grep -ioE '([a-z0-9]{2}:){5}..'
sed. [F14] подавляет нормальный выход, а -r позволяет использовать расширенные регулярные выражения. Используя такое же регулярное выражение, как и выше, этот скрипт попытается заменить все на строке той частью, которая соответствует регулярному выражению. Если замена была успешной, результирующая строка печатается (из-за p в конце подстановки).
ifconfig -a | sed -rn 's/.*(([a-z0-9]{2}:){5}..).*/\1/p'
awk. Если строка начинается с символа слова ([a-zA-Z0-9_]) и имеет 5 полей, напечатайте последнюю.
ifconfig -a | awk '/^\w/&&NF==5{print $NF}'
Perl, где, как обычно, существует несколько способов сделать это. Это одна и та же логика, что и awk выше. [F20] сообщает perl разбивать каждую строку ввода на массив @F.
ifconfig -a | perl -lane 'if(/^\w/&&$#F==4){print $F[$#F]}'
В качестве альтернативы вы можете использовать регулярное выражение из предыдущих подходов:
ifconfig -a | perl -lne '/(([a-z0-9]{2}:){5}..)/ && print $1'
Coreutils.
LANG_ALL=C ifconfig -a | grep 'HWadd' | tr -s ' ' '\t' | cut -f 5
9
ответ дан 23 May 2018 в 20:14

ifconfig -a | grep HWaddr | awk '{print $5}'

Если ваш выход системы не является английским в этой команде, тогда имеет смысл запустить его таким образом.

LANG=C ifconfig -a | grep HWaddr | awk '{print $5}'

Это применимо ко всем решениям.

5
ответ дан 23 May 2018 в 20:14
  • 1
    Вместо использования grep отдельно вы можете напрямую фильтровать awk следующим образом: ifconfig -a | awk '/HWaddr/ { print $5 }' – krt 26 May 2015 в 14:21
  • 2
    Да, действительно есть много способов сделать это. – Pilot6 26 May 2015 в 14:27
  • 3
    Вы можете использовать LANG=C ifconfig -a вместо ifconfig -a для неанглийских установок, могут быть проблемы с grep. (т. е. в моей системе HWaddr есть direcciónHW) – Helio 26 May 2015 в 14:31
  • 4
    Хорошее уведомление. Но в моей русской установке это еще HWaddr. – Pilot6 26 May 2015 в 14:33
  • 5
    Ваша русская установка может быть, но моя испанская установка не делает. ; -) Это может быть огромная проблема. Пожалуйста, положите @Helio в начале комментария. Если нет, я не буду уведомлен. – Helio 26 May 2015 в 14:36

Как некоторые комментируют, ifconfig устарел в пользу команды ip. Поэтому, комбинируя различные решения и комментарии, я бы использовал:

$ LANG=C ip link show | awk '/link\/ether/ {print $2}'
FF:FF:FF:FF:FF:FF
2
ответ дан 23 May 2018 в 20:14

Другие вопросы по тегам:

Похожие вопросы: