최근의, 나는 인터페이스 중 하나에 네트워크 스크립트가 누락된 Linux 상자에 대해 논의했습니다. 이제 비슷한 상황이 발생했습니다. 어떻게 든 eth1
IP 주소없이 CentOS 시스템에 인터페이스가 설치되었습니다. ifconfig eth1
다음과 같이 나타납니다 .
# ifconfig eth1
eth1: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether 00:50:56:a9:cd:2e txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
반복 인터페이스를 통해 프로그래밍 방식으로 이 문제를 해결할 수 있습니다. ip -o
-o 플래그는 모든 것을 한 줄에 넣는다는 의미이므로 스크립팅 목적 으로 이 옵션을 선호합니다 . 안타깝게도 ip -o
주소 지정이 불가능한 인터페이스를 구체적으로 요청하더라도 IP가 없는 인터페이스는 건너뜁니다.
# ip -o addr show dev eth1
# ip addr show dev eth1
4: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:50:56:a9:cd:2e brd ff:ff:ff:ff:ff:ff
# ip -o addr show dev eth0
[snip reasonable output]
# echo $?
0
# ip -o addr show dev eth1
# echo $?
0
이 문제를 어떻게 가장 잘 해결하시겠습니까? Perl 모듈을 사용할 수 있지만 일반 쉘 명령을 사용하는 것을 선호합니다.
답변1
어쩌면 당신은맞춤화 도구이것은0이 아닌 종료 코드주소를 찾을 수 없는 경우:
[root@localhost]~# ./localaddr -4 enp0s8
[root@localhost]~# echo $?
2
[root@localhost]~# ./localaddr -4 enp0s3
192.168.9.10
[root@localhost]~# echo $?
0
그러나 이는 유사한 인터페이스를 사용하여 항목을 가져올 수 있는 Perl 모듈을 사용하는 것과 매우 유사합니다.
ip
주소가 없는 경우 플래그를 설정할 때 사람들에게 0이 아닌 종료 코드를 반환하도록 요청할 수도 있습니다 .
그렇지 않으면 더 많은 명령을 사용하여 더 비용이 많이 드는 계산을 수행해야 할 수도 있습니다.
[root@localhost]~# ip -json
Option "-json" is unknown, try "ip -help".
... Centos 7에서는 이 기능을 사용할 수 없으므로 이전 Linux로 포팅하는 데 문제가 있을 수 있습니다. 한편, 덜 역사적인 Linux 시스템에서는
[root@localhost]~# ip -4 -json addr show dev enp0s3 | jq -e '.[].addr_info[].local' ; echo $?
"192.168.9.11"
0
[root@localhost]~# ip -4 -json addr show dev enp0s8 | jq -e '.[].addr_info[].local' ; echo $?
4
...하지만 단일 프로그램을 실행하는 대신 쉘 파이프라인을 시작하는 것은 효율성이 떨어지는 것 같아서 아마도 사용하지 않을 것입니다.
답변2
너의 문제
귀하의 질문은 다음과 같기 때문에 답변하기가 어렵습니다.
이 문제를 어떻게 가장 잘 해결하시겠습니까?
"이것은:
ip -o
IP가 없는 인터페이스 건너뛰기
하지만 귀하가 정확히 무엇을 달성하고 싶은지 모르기 때문에 제 답변이 귀하의 목적에 부합할 수도 있고 그렇지 않을 수도 있습니다.
내 대답
그래도,IP 주소 유무에 관계없이 모든 인터페이스를 나열하려면 ip link
다음을 사용하십시오 .ip addr
:
ip -o link show # will list all interfaces
ip -o link show dev eth1 # will show eth1
그러면 MAC 주소, 시작/종료 상태 및 기타 정보가 제공됩니다.
왜 작동하지 않는지
이 -o
플래그는 한 줄에 하나의 결과를 표시합니다. 주소 보기를 요청하면 주소 목록이 반복되어 표시됩니다.한 줄에 하나의 주소,아니면 없음반복할 주소가 없는 경우.