너의 문제

너의 문제

최근의, 나는 인터페이스 중 하나에 네트워크 스크립트가 누락된 Linux 상자에 대해 논의했습니다. 이제 비슷한 상황이 발생했습니다. 어떻게 든 eth1IP 주소없이 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 -oIP가 없는 인터페이스 건너뛰기

하지만 귀하가 정확히 무엇을 달성하고 싶은지 모르기 때문에 제 답변이 귀하의 목적에 부합할 수도 있고 그렇지 않을 수도 있습니다.

내 대답

그래도,IP 주소 유무에 관계없이 모든 인터페이스를 나열하려면 ip link다음을 사용하십시오 .ip addr:

ip -o link show  # will list all interfaces
ip -o link show dev eth1  # will show eth1

그러면 MAC 주소, 시작/종료 상태 및 기타 정보가 제공됩니다.

왜 작동하지 않는지

-o플래그는 한 줄에 하나의 결과를 표시합니다. 주소 보기를 요청하면 주소 목록이 반복되어 표시됩니다.한 줄에 하나의 주소,아니면 없음반복할 주소가 없는 경우.

관련 정보