最近、私はインターフェイスの1つにネットワークスクリプトが欠落している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フラグはすべてを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
...しかし、単一のプログラムを実行するのではなく、シェルパイプラインを起動すると効率が悪いと思われるので、おそらく使用しないでしょう。
答え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
フラグは、1行に1つの結果を表示します。住所の表示を要求すると、住所のリストが繰り返し表示されます。1行に1つの住所、またはなし繰り返すアドレスがない場合。