論理とは、コマンドで合法的なすべてを意味します
ip link
。たとえば、次のようになります。
ip link add link dum0 name dum0.200 type vlan protocol 802.1Q id 200
論理タイプは「vlan」です。マニュアルページを引用すると、すべての有効なタイプは次のとおりです。
vlan|vis|vcan|dummy|ifb|macvlan|macvtap|can|bridge|ipoib|ip6tnl|ipip|sit| vxlan|gre|gretap|ip6gre|ip6gretap|ip6gretap|watt
これは明らかに必要な物理デバイスタイプではありません(イーサネット、Wi-Fi、pppなど)。この問題、実際にはリファレンスジュエリー私がテストした物理学の種類は次のとおりです。
find /sys/class/net ! -type d | xargs --max-args=1 realpath |
while read d; do
b=$(basename $d) ; n=$(find $d -name type) ; echo -n $b' ' ; cat $n;
done
dum0.200 1
dum0.201 1
dum1.300 1
dum1.301 1
dummy0 1
ens36 1
ens33 1
lo 772
dum0 1
dum1 1
wlan0 1
ただし、仮想、VLAN、およびWlanデバイスはすべてARPHRD_ETHERタイプであることがわかりました。
もっと知っている人はいますか?よろしくお願いします。
====
2023年に改定予定。
これは、2つの物理イーサネットインターフェイス、Wi-Fi、インストールされているが無効になっているドッカー、2つのネットワーク、2つの仮想マシン、およびWirguard接続を持つlibvirtを搭載したシステムに由来します。 jqはstedolan.github.io/jqで提供されており、通常は良いパッケージマネージャと一緒にインストールされます。
$ ip -details -j l | jq -r '.[]|"\(.ifname), \(.link_type), \(.linkinfo.info_data.type), \(.linkinfo.info_kind), \(.linkinfo.info_slave_kind)"' | column -t -s ','
lo loopback null null null
enp43s0 ether null null null
enx00e04c680049 ether null null null
wlp0s20f3 ether null null null
virbr2 ether null bridge null
virbr1 ether null bridge null
docker0 ether null bridge null
vnet0 ether tap tun bridge
vnet1 ether tap tun bridge
vnet2 ether tap tun bridge
vnet3 ether tap tun bridge
wg0 none null wireguard null
$
答え1
より簡単な解決策:
ip -details link show
仮想デバイスの場合、デバイスタイプは3行目に表示されます。
答え2
利用可能なすべてのタイプを繰り返し、ip link show type <type>
各タイプのすべてのインターフェイス(使用済み)を表示する方法があります。これにより、あらゆる種類のインターフェイスを収集し、知りたいインターフェイスを解析できます。エレガントではありませんが、動作します。
バッシュ使用:
#!/bin/bash
# Arguments: $1: Interface ('grep'-regexp).
# Static list of types (from `ip link help`). NOTE: On my machine, not all types are listed there, e.g. the type `tun`. And the list of types may change over time. So do not ultimately rely on this list here!:
TYPES=(bareudp bond bond_slave bridge can dummy erspan geneve gre gretap hsr ifb ip6erspan ip6gre ip6gretap ip6tnl ipip ipoib ipvlan ipvtap lowpan macsec macvlan macvtap netdevsim nlmon rmnet sit tap tun vcan veth vlan vrf vti vxcan vxlan xfrm)
iface="$1"
for type in "${TYPES[@]}"; do
ip link show type "${type}" | grep -E '^[0-9]+:' | cut -d ':' -f 2 | sed 's|^[[:space:]]*||' | while read _if; do
echo "${_if}:${type}"
done | grep "^${iface}"
done
ファイルに保存して実行可能にし、学習したいインターフェースを引数として使用して実行します。
(を使用して生成された)リンクのミツバチタイプの例の場合、出力はであり、そのdum0.200
タイプがあることを示します。必要に応じてそれを解析できます。vlan
eth0
ip link add link eth0 name dum0.200 type vlan protocol 802.1Q id 200
dum0.200@eth0:vlan
vlan
@eth0
ip link show
このスクリプトの引数は -regexp として解釈されるため、grep
何も指定しないとip link show type <type>
すべての出力がリストされます。
メモ: (2021年5月12日追加):「一般」イーサネットデバイスとループバックデバイスの種類はないようです。だからスクリプトはいいえリストを作成してください。タイプなしでデバイスを一覧表示する必要がある場合は、それを拡張または再構築する必要があります。