Arch Linux에서 모든 인터페이스 이름을 가져와야 합니다. ifconfig 명령을 실행하면 다음과 같은 응답을 받습니다.
[root@pi ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.154 netmask 255.255.255.0 broadcast 192.168.0.255
ether b8:27:eb:3c:03:fe txqueuelen 1000 (Ethernet)
RX packets 119099 bytes 96958556 (92.4 MiB)
RX errors 0 dropped 8 overruns 0 frame 0
TX packets 18304 bytes 5456443 (5.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 0 (Local Loopback)
RX packets 285 bytes 88221 (86.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 285 bytes 88221 (86.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
모든 것이 괜찮지만 인터페이스 이름만 필요합니다. 인터페이스 이름만 얻으려면 어떻게 해야 합니까?
답변1
ifconfig
한 가지 접근 방식은 (짧은 목록) 과 함께 사용 -s
하고 필요한 부분을 잘라내는 것입니다.
$ ifconfig -a -s
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 1374267176 0 116420 0 2848281091 0 0 0 BMRU
lo 65536 0 761767047 0 0 0 761767047 0 0 0 LRU
vboxnet0 1500 0 0 0 0 0 0 0 0 0 BM
virbr0 1500 0 0 0 0 0 0 0 0 0 BMU
$ ifconfig -s -a | awk '$1 !~ /Iface/ {print $1}'
eth0
lo
vboxnet0
virbr0
아니면 비슷한 것 ip
:
$ ip -o link show | awk -F': ' '{print $2}'
lo
eth0
virbr0
vboxnet0
답변2
구문 분석할 수 있는 출력입니다 ifconfig
. 이는 많은 Unix 변형에서 작동합니다.
ifconfig -a | sed -n 's/^\([[:alnum:]]*\):.*/\1/p'
엄격하게 Linux만 사용하는 것이 마음에 들지 않으면 더 간단한 명령을 사용할 수 있습니다.
ls /sys/class/net/
다운된 인터페이스를 나열하지 않으려면 ifconfig
대신 를 사용하십시오 ifconfig -a
. 의 /sys
경우 더 모호합니다.IFF_UP
이 인터페이스에 대한 플래그를 설정합니다. 가장 낮은 비트 이므로 홀수인지 IFF_UP
테스트를 거쳐야 합니다 .flags
grep -l '[13579bdf]$' /sys/class/net/*/flags | sed 's!.*/!!'