No Ubuntu, com comando ifconfig -a
, obtenho todas as informações sobre minhas interfaces Ethernet / Wi-Fi.
Mas eu preciso obter como saída apenas o endereço MAC, como:
ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef
Como posso obter isso?
command-line
networking
simone_s1994
fonte
fonte
LANG=C ifconfig -a
vez deifconfig -a
para instalações que não sejam o inglês, pode haver problemas com o grep. (ie No meu sistema,HWaddr
édirecciónHW
)ifconfig -a | grep -i hw-*
:?-*
deveria significar alguma coisa?HW
, mas ele afirmou emHWaddr
e espanhol como eu acho que / verdirecciónHW
por isso é simplesmente apenasHW
pode ser;)grep
"é altamente experimental". Se você deseja usar regex básico, o comando equivalente éifconfig -a | grep -o 'HWaddr [[:xdigit:]:]*'
ou, se preferirifconfig -a | grep -o 'HWaddr [a-f0-9:]*'
,. Omiti o final$
porque a saída inclui espaços após o endereço MAC e provavelmente você não os deseja.Você pode acessar o
address
arquivo para cada dispositivo no/sys
sistema de arquivos virtual. O endereço MAC deve estar em/sys/class/net/<device-name>/address
:Para todos os dispositivos:
fonte
ip
também existe há anos.Aqui estão algumas maneiras:
grep
. Existem várias expressões regulares que as buscarão. Aqui, estou procurando 5 repetições de 2 letras ou números seguidos por dois pontos, depois dois caracteres. Isso-i
torna a correspondência entre maiúsculas e minúsculas e-o
tornagrep
apenas a parte correspondente.-E
permite expressões regulares estendidas. O mesmo regex também funciona com PCREs (-P
).sed
. O-n
suprime a saída normal eo-r
permite expressões comuns prolongados. Usando o mesmo regex acima, esse script tentará substituir tudo na linha pela parte correspondente ao regex. Se a substituição foi bem-sucedida, a linha resultante é impressa (devido aop
no final da substituição).awk
. Se a linha começar com um caractere de palavra ([a-zA-Z0-9_]
) e tiver 5 campos, imprima o último.Perl, onde, como sempre, há mais de uma maneira de fazer isso. Essa é a mesma lógica que a
awk
anterior. O-a
comando diz ao perl para dividir cada linha de entrada na@F
matriz.Como alternativa, você pode usar o regex das abordagens anteriores:
Coreutils.
fonte
Como alguns comentaram,
ifconfig
é preterido em favor doip
comando. Então, combinando as várias soluções e comentários, eu usaria:fonte
ifconfig -a | grep HWaddr | awk '{print $5}'
Se a saída do sistema não estiver em inglês nesse comando, faz sentido executá-lo dessa maneira.
LANG=C ifconfig -a | grep HWaddr | awk '{print $5}'
Isso é aplicável a todas as soluções.
fonte
grep
separadamente, você pode filtrarawk
diretamente como este:ifconfig -a | awk '/HWaddr/ { print $5 }'
LANG=C ifconfig -a
vez deifconfig -a
para instalações que não sejam o inglês, pode haver problemas com o grep. (ou seja, no meu sistema,HWaddr
édirecciónHW
)@Helio
no início do comentário. Caso contrário, não serei notificado.