Para superar diferenças no formato do ifconfig Ubuntu16.04 e Ubuntu17.01

Para superar diferenças no formato do ifconfig Ubuntu16.04 e Ubuntu17.01

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 exibe 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-alfa

$ifconfig

ens160: sinalizadores = 4163 mtu 1500

lo: sinalizadores = 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 interfaces de rede de maneira confiável, de forma que qualquer alteração no formato da saída do ifconfig não afete as ferramentas que a utilizam? Existe alternativa para ifconfig que possa ser usada de maneira consistente?

Responder1

Oferramentas de redepacote eradescontinuadapor algum tempo, sendo substituído pelo iproute2 ( ipsendo a principal ferramenta desse pacote). Muitas distribuições nem sequer enviam ferramentas de rede como parte de sua instalação básica.

Desde então, o desenvolvimento de net-tools foi reiniciado, mas isso resultou em diversas ferramentas sendo aprimoradas de forma a quebrar a compatibilidade, como você viu com o ifconfig. Em NEWS.Debian.gzum sistema Debian 9.0:

Após 15 anos sem desenvolvimento upstream, o net-tools está sendo trabalhado novamente, corrigindo muitos problemas antigos. A má notícia é que a saída de muitos comandos mudou e certamente quebrará os scripts que dependiam de sua análise.

Por esse motivo pode ser uma ideia adaptar seus scripts para usar as ferramentas iproute2. Por exemplo, ip linkdeve fornecer informações semelhantes às ifconfigacima. A única desvantagem dessa abordagem é que ela quebra a compatibilidade com sistemas não-Linux, quase todos os quais usam ifconfig.

Responder2

Uma forma alternativa de listar todas as interfaces no Linux a partir do shell é a leitura do /proc/net/dev, que possui um formato mais estável do que a saída do ifconfig(8) do net-tools.

Por exemplo, para obter o nome das interfaces:

whr@debianjessie:~$ sed -r -e 1,2d -e 's/^ +//' -e 's/: .+//' /proc/net/dev
ppp0
lo
eth0
eth1

informação relacionada