배경:
ifconfig 명령을 사용하여 Linux에서 사용 가능한 인터페이스 목록을 확인하고 있습니다.
그러나 ifconfig의 출력 형식은 우분투 16.04와 우분투 17.10에서 다릅니다.
추가 검사를 통해 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
짜잔: 플래그=73 mtu 65536
이로 인해 출력에서 추가 ":"를 고려하거나 예상하는 일부 도구가 중단될 수 있습니다.
질문:
ifconfig 출력 형식에 대한 변경 사항이 이를 사용하는 도구에 영향을 미치지 않도록 안정적인 방식으로 네트워크 인터페이스 목록을 얻을 수 있는 방법이 있습니까? ifconfig를 일관된 방식으로 사용하는 것에 대한 대안이 있습니까?
답변1
이것네트워크 도구패키지는더 이상 사용되지 않음한동안 iproute2( ip
패키지의 기본 도구)로 대체되었습니다. 많은 배포판에는 더 이상 기본 설치의 일부로 네트워킹 도구가 포함되어 있지 않습니다.
이후 네트워크 도구 개발이 다시 시작되었지만 이로 인해 데비안 9.0 시스템 에서 볼 수 있듯이 호환성이 손상되는 방식으로 많은 도구가 향상되었습니다 ifconfig
.NEWS.Debian.gz
15년 동안 업스트림 개발이 중단된 후 net-tools가 다시 개발되어 많은 오랜 문제를 해결하고 있습니다. 나쁜 소식은 많은 명령의 출력이 변경되었으며 구문 분석에 의존하는 스크립트가 확실히 중단된다는 것입니다.
따라서 iproute2 도구를 사용하도록 스크립트를 조정하는 것이 좋습니다. 예를 들어, ip link
위와 유사한 정보가 제공되어야 합니다 ifconfig
. 이 접근 방식의 한 가지 단점은 Linux가 아닌 시스템과의 호환성이 깨지고 거의 모든 Linux가 아닌 시스템이 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