
Linuxサーバーで利用可能なすべてのネットワークデバイス名のリストを取得したいのですが、
ifconfig
目的は達成できますが、ifconfig はかなり多くの出力を生成します:
eth0 Link encap:Ethernet Hardware Adresse 08:00:27:fc:5c:98
inet Adresse:192.168.2.222 Bcast:192.168.2.255 Maske:255.255.255.0
inet6-Adresse: fe80::a00:27ff:fefc:5c98/64 Gültigkeitsbereich:Verbindung
UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
RX packets:329 errors:0 dropped:0 overruns:0 frame:0
TX packets:177 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:41496 (40.5 KiB) TX bytes:32503 (31.7 KiB)
eth1 Link encap:Ethernet Hardware Adresse 08:00:27:e9:35:7d
[...]
eth2 Link encap:Ethernet Hardware Adresse 08:00:27:ff:db:fe
[...]
lo Link encap:Lokale Schleife
[...]
私が達成したいのは次のようなリストです
eth0
eth1
eth2
lo
あるいはもっと良いのは
eth0
eth1
eth2
これは「cat」、「sed」、「grep」の組み合わせで実行できると思いますが、不要な情報を削除する方法がまったくわかりません。
答え1
これを試してみてください:
ifconfig -a | sed 's/[ \t].*//;/^$/d'
これにより、以下が省略されますlo
:
ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d'
答え2
別の選択肢としては、次のようになります。
ip -o link show | awk -F': ' '{print $2}'
または多分:
ls /sys/class/net
答え3
/sys/class/net を使用してパスを削除するだけです。
$ basename -a /sys/class/net/*
eth0
eth1
lo
ppp0
tun0
より現代的な方法は、次のように iproute json 出力とパーサーを使用することです。
$ ip -j link |jq -r '.[].ifname'
lo
wlp0s20f3
enp0s31f6
virbr0
virbr0-nic
これにより、ループバック インターフェイスをフィルター処理できるようになります。
$ ip -j link |jq -r '.[].ifname | select(. != "lo")'
wlp0s20f3
enp0s31f6
virbr0
virbr0-nic
答え4
ls /sys/class/net/
eth0 eth1 eth2 lo
またはeth*だけが必要な場合
ls /sys/class/net/eth*
eth0
eth1
eth2