Fondo:
Estoy verificando la lista de interfaces disponibles en Linux usando el comando ifconfig.
Sin embargo, hay una diferencia en el formato de salida de ifconfig en ubuntu 16.04 y ubuntu 17.10.
Al verificar más a fondo, el paquete net-tools se actualizó (de net-tools 1.60 A net-tools 2.10-alpha) en ubuntu17.10 y el último ifconfig genera los nombres de las interfaces de red con dos puntos (':'). En una versión anterior:
$ ifconfig --versión net-tools 1.60 ifconfig 1.42 (2001-04-13)
$ifconfig
enp0s3 Encapsulación de enlace:Ethernet
En la versión más nueva
$ ifconfig --versión net-tools 2.10-alfa
$ifconfig
ens160: banderas = 4163 mtu 1500
lo: banderas = 73 mtu 65536
Esto puede dañar algunas herramientas que tienen en cuenta o esperan el ':' adicional en la salida.
Pregunta:
¿Hay alguna manera de obtener la lista de interfaces de red de manera confiable, de modo que cualquier cambio en el formato de salida de ifconfig no afecte a las herramientas que la utilizan? ¿Existe alguna alternativa para ifconfig que pueda usarse de manera consistente?
Respuesta1
Elherramientas de redel paquete eraobsoletodurante algún tiempo, siendo reemplazado por iproute2 ( ip
siendo la herramienta principal en ese paquete). Muchas distribuciones ya ni siquiera incluyen herramientas de red como parte de su instalación básica.
Desde entonces, el desarrollo de net-tools se ha reiniciado, pero esto ha resultado en que varias de las herramientas se hayan mejorado en formas que rompen la compatibilidad, como ha visto con ifconfig
. Desde NEWS.Debian.gz
un sistema Debian 9.0:
Después de 15 años sin desarrollo previo, se está trabajando nuevamente en net-tools, solucionando muchos problemas de larga data. La mala noticia es que la salida de muchos comandos ha cambiado y seguramente romperá los scripts que dependían de su análisis.
Por esa razón puede ser una idea adaptar tus scripts para usar las herramientas iproute2. Por ejemplo, ip link
debería brindarle información similar a la ifconfig
anterior. La única desventaja de este enfoque es que rompe la compatibilidad con sistemas que no son Linux, casi todos los cuales usan ifconfig
.
Respuesta2
Una forma alternativa de enumerar todas las interfaces en Linux desde el shell es leer /proc/net/dev
, que tiene un formato más estable que la salida de ifconfig(8) de net-tools
.
Por ejemplo, para obtener el nombre de las interfaces:
whr@debianjessie:~$ sed -r -e 1,2d -e 's/^ +//' -e 's/: .+//' /proc/net/dev
ppp0
lo
eth0
eth1