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
1つのアプローチは(短いリスト)と一緒に使用-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!.*/!!'