Fundo:
Estou verificando a lista de interfaces disponíveis no Linux usando o comando ifconfig.
No entanto, há uma diferença no formato da saída do ifconfig no ubuntu 16.04 e no ubuntu 17.10.
Ao verificar mais, o pacote net-tools foi atualizado (de net-tools 1.60 PARA net-tools 2.10-alpha) no ubuntu17.10 e o ifconfig mais recente gera os nomes das interfaces de rede com dois pontos (':'). Na versão mais antiga:
$ ifconfig --version net-tools 1.60 ifconfig 1.42 (13-04-2001)
$ ifconfig
enp0s3 Link encap:Ethernet
Na versão mais recente
$ ifconfig --version net-tools 2.10-alpha
$ifconfig
ens160: flags=4163 mtu 1500
lo: flags=73 mtu 65536
Isso pode quebrar algumas ferramentas que levam em consideração ou esperam o ':' extra na saída.
Pergunta:
Existe uma maneira de obter a lista de interface de rede de maneira confiável, de modo que qualquer alteração no formato da saída ifconfig não afete as ferramentas que a utilizam? Existe alternativa para ifconfig que pode ser usada de maneira consistente?
O pacote net-tools ficou obsoleto por algum tempo, sendo substituído pelo iproute2 (
ip
sendo a principal ferramenta desse pacote). Muitas distribuições nem mesmo enviam ferramentas de rede como parte de sua instalação básica.O desenvolvimento de net-tools foi reiniciado desde então, mas isso resultou em várias ferramentas sendo aprimoradas de maneiras que quebram a compatibilidade, como você viu com
ifconfig
. EmNEWS.Debian.gz
um sistema Debian 9.0:Por esse motivo, pode ser uma ideia adaptar seus scripts para usar as ferramentas iproute2. Por exemplo,
ip link
deve fornecer informações semelhantes às suasifconfig
anteriores. A única desvantagem dessa abordagem é que ela quebra a compatibilidade com sistemas não-Linux, quase todos os quais usamifconfig
.Uma maneira alternativa de listar todas as interfaces no Linux a partir do shell é lendo
/proc/net/dev
, que tem um formato mais estável do que a saída de ifconfig(8) denet-tools
.Por exemplo, para obter o nome das interfaces: