배경:
ifconfig 명령을 사용하여 Linux에서 사용 가능한 인터페이스 목록을 확인하고 있습니다.
그러나 우분투 16.04와 우분투 17.10에서는 ifconfig의 출력 형식에 차이가 있습니다.
추가로 확인하면 ubuntu17.10에서 net-tools 패키지가 net-tools 1.60에서 net-tools 2.10-alpha로 업그레이드되었으며 최신 ifconfig는 콜론(':')을 사용하여 네트워크 인터페이스 이름을 출력합니다. 이전 버전의 경우:
$ ifconfig --version net-tools 1.60 ifconfig 1.42 (2001-04-13)
$ ifconfig
enp0s3 링크 캡슐:이더넷
최신 버전에서는
$ ifconfig --version net-tools 2.10-alpha
$ifconfig
ens160: 플래그=4163 mtu 1500
lo: 플래그=73mtu 65536
이는 출력에 추가 ':'를 고려하거나 예상하는 일부 도구를 손상시킬 수 있습니다.
질문:
ifconfig 출력 형식의 변경이 이를 사용하는 도구에 영향을 미치지 않도록 안정적인 방법으로 네트워크 인터페이스 목록을 얻을 수 있는 방법이 있습니까? 일관된 방식으로 사용할 수 있는 ifconfig에 대한 대안이 있습니까?
답변1
그만큼네트 도구패키지는더 이상 사용되지 않음한동안 iproute2( ip
해당 패키지의 기본 도구임)로 대체되었습니다. 많은 배포판에서는 더 이상 기본 설치의 일부로 net-tool을 제공하지 않습니다.
이후 net-tools 개발이 다시 시작되었지만 이로 인해 ifconfig
. NEWS.Debian.gz
Debian 9.0 시스템에서 :
업스트림 개발 없이 15년이 지난 후, net-tools가 다시 작업되어 많은 오랜 문제를 해결하고 있습니다. 나쁜 소식은 많은 명령의 출력이 변경되었으며 구문 분석에 의존하는 스크립트가 확실히 중단된다는 것입니다.
이러한 이유로 iproute2 도구를 사용하도록 스크립트를 조정하는 것이 좋습니다. 예를 들어, ip link
위와 유사한 정보를 제공해야 합니다 ifconfig
. 이 접근 방식의 한 가지 단점은 거의 모든 시스템이 ifconfig
.
답변2
쉘에서 Linux의 모든 인터페이스를 나열하는 다른 방법은 를 읽는 것입니다. /proc/net/dev
이는 에서 ifconfig(8)의 출력보다 더 안정적인 형식을 갖습니다 net-tools
.
예를 들어 인터페이스 이름을 얻으려면 다음을 수행하십시오.
whr@debianjessie:~$ sed -r -e 1,2d -e 's/^ +//' -e 's/: .+//' /proc/net/dev
ppp0
lo
eth0
eth1