O que esse comando faz?
ifconfig | grep -Po "HWaddr \K.*$"
imprime os endereços MAC / hardware das interfaces de rede ativas presentes no sistema, se disponíveis.
Como um aparte, no Linux em geral você pode descobrir sobre programas e o que seus switches fazem procurando em man
, por exemplo:
$ man ifconfig
$ man grep
(etc) Caso contrário, uma pesquisa por ' <program name>
manual' ou ' <program name>
usage' pode responder a esse tipo de pergunta.
ifconfig
ifconfig
é usado para exibir e configurar interfaces de rede. De man ifconfig
:
Ifconfig is used to configure the kernel-resident network interfaces. It is used at boot time to set up interfaces as necessary. After that, it is usually only needed when debugging or when system tuning is needed.
If no arguments are given, ifconfig displays the status of the currently active interfaces. If a single interface argument is given, it displays the status of the given interface only; if a single -a argument is given, it displays the status of all interfaces, even those that are down. Otherwise, it configures an interface.
(ênfase minha)
Aqui, ifconfig
está reportando o status de suas interfaces atualmente ativas.
| (cano)
O caractere de canal - |
- aqui redireciona a saída de ifconfig
e, em vez de ser exibido para você, ele vai para grep
grep
grep
é usado para correspondência de padrões e (geralmente) imprime o que corresponde a um padrão ou não.
Aqui, as opções fornecidas são -P
e -o
-P
:
Interpret PATTERN as a Perl regular expression (PCRE, see below). This is highly experimental and grep -P may warn of unimplemented features.
Os regexes são um tópico longo 1 , mas basicamente isso permite que grep
correspondam a alguns padrões adicionais.
-o
:
Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.
(ambas as citações do grep manpage)
Esta opção diz a grep
que estamos interessados apenas na parte que corresponde ao padrão, ao contrário da linha inteira (se ela corresponder).
"HWaddr \ K. * $"
Esta parte é o que nos diz que estamos procurando o HWaddr
(endereço MAC ou hardware). \K
define o ponto inicial do que queremos imprimir (para a opção -o
acima). .*
informa grep
para corresponder a qualquer caractere ( .
) tantas vezes quanto possível ( *
), pelo menos até o final da linha ( $
).
Saída / Resultado
Juntando tudo, o comando obtém informações de ifconfig
e procura as partes que correspondem ao endereço MAC das interfaces de rede no sistema e as imprime em uma nova linha.
1 : "Algumas pessoas, quando confrontadas com um problema, pensam 'eu sei, usarei expressões regulares'. Agora eles tem dois problemas." Jamie Zawinski, 1997 (embora a citação seja frequentemente retirada do contexto )