Следующее руководство вы найдете только для 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
Вы можете получить доступ к файлу 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
Вот несколько способов:
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
ifconfig -a | grep HWaddr | awk '{print $5}'
Если ваш выход системы не является английским в этой команде, тогда имеет смысл запустить его таким образом.
LANG=C ifconfig -a | grep HWaddr | awk '{print $5}'
Это применимо ко всем решениям.
Как некоторые комментируют, ifconfig устарел в пользу команды ip. Поэтому, комбинируя различные решения и комментарии, я бы использовал:
$ LANG=C ip link show | awk '/link\/ether/ {print $2}'
FF:FF:FF:FF:FF:FF