インターフェイスの名前、タイプ、IPを取得するには?

インターフェイスの名前、タイプ、IPを取得するには?

ネットワークデバイスのデータのみを次の順序で表示できますか?

デバイス名 - タイプ(vlan、bondなど) - IPアドレス

NetworkManagerは "nmcli device status"コマンドを使用して同様の操作を実行します。

ベストアンサー1

ip -detailsインターフェースなどの追加情報を提供タイプ(下記参照)。

真の解析性を得るには、JSON出力とJSONパーサーを選択してください。jq

これは1行のコードですが、読みやすくするために複数行に分割することにしました。必要jqほとんどのディストリビューションにパッケージ化する必要がある解析済み出力用のユーティリティですip -jsonジャック私が提供したリンクだけを読んでください。学ぶ言語は難しくありません。

ip -details -json address show |
    jq -j '
        .[] |
              .ifname," ",
              .link_type,"/",
              .linkinfo.info_kind // "",
              if .linkinfo.info_slave_kind then
                  "/slave-",.linkinfo.info_slave_kind
              else
                  empty
              end, " ",
              ( .addr_info[] | ( .local," " ) ),
              "\n"
'

インターフェースの種類に関しては、実際には2つの直接属性(typeとkind)と3番目の属性(slave_kind)があります。この属性は、JSON出力でのみ2番目の属性と簡単に区別できます。

  • タイプ

    通常、loopback(ループバック インターフェイスにのみ適用)、ether(ほとんどのインターフェイスはイーサネットまたはイーサネットに似たインターフェイス)、またはnoneレイヤ 3 インターフェイスに適用されます(例:ラインバッカー相互作用)。

  • タイプ

    これは一般的に型と見なされます。これループバックインターフェイスと実際のハードウェアインターフェイス(少なくとも一般的なイーサネットまたはワイヤレスインターフェイス)はそうではありません。タイプ財産。

  • 奴隷ランク

    インターフェイスがブリッジまたは接続されているデバイスに接続されるなど、スレーブされている場合、この情報はコマンド出力で使用できます。

タイプ+タイプ+サブタイプが結合された結果を取得します(すべて必要でない場合は、その行を削除するだけです)。

したがって、少し微妙にするために、コンボはタップモードでtuntapether/tunデバイスになり、a はnone/tuntun モードで tuntap デバイスになります (この情報は一部のサブフィールドでも直接使用できますが、タイプ + コンボタイプの場合は不要です)。

見せるただIPv4アドレスを持つ1つ以上のインターフェースを持つ最も簡単な方法は、他のオプションと-4一緒に上記のコマンドにこのip addressオプションを追加することです。これによりリンク層アドレスも削除されるため、フィルタはIPv4アドレスを持たないインターフェイスと一致せず、まったく表示されません。

IPv6出力を削除するが表示みんなインターフェース、追加せずに-4交換してください。

( .addr_info[] | ( .local," " ) ),

そして

( .addr_info[] | ( if .family == "inet" then .local," " else empty end ) ),

おすすめ記事