あなたの問題

あなたの問題

最近、私はインターフェイスの1つにネットワークスクリプトが欠落している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フラグはすべてを1行に入れるという意味なので、スクリプトの目的でこのオプションを好みます。残念ながら、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

たぶんあなたはカスタマイズツールこれはゼロ以外の終了コード住所が見つからない場合:

[root@localhost]~# ./localaddr -4 enp0s8
[root@localhost]~# echo $?
2
[root@localhost]~# ./localaddr -4 enp0s3
192.168.9.10
[root@localhost]~# echo $?
0

ただし、これは、同様のインターフェイスを使用してアイテムをインポートできるPerlモジュールを使用するのと非常によく似ています。

ipアドレスがない場合は、フラグを設定するときに人々にゼロ以外の終了コードを返すように依頼することもできます。

それ以外の場合は、より多くのコマンドを使用してより高価な計算を実行する必要があります。

[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

...しかし、単一のプログラムを実行するのではなく、シェルパイプラインを起動すると効率が悪いと思われるので、おそらく使用しないでしょう。

おすすめ記事