논리적이란 명령에서 합법적인 모든 것을 의미합니다
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년에 개정될 예정.
이는 두 개의 실제 이더넷 인터페이스, Wi-Fi, 설치되었지만 비활성화된 도커, 두 개의 네트워크, 두 개의 가상 머신 및 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
가상 장치의 경우 장치 유형이 세 번째 줄에 표시됩니다.
답변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일 추가): "일반" 이더넷 장치 및 루프백 장치에 대한 유형은 없는 것 같습니다. 그래서 스크립트는아니요목록을 작성하세요. 유형 없이 장치를 나열해야 하는 경우 이를 확장하거나 다시 작성해야 합니다.