利用可能なすべてのネットワークインターフェースのデバイス名のみを一覧表示します

利用可能なすべてのネットワークインターフェースのデバイス名のみを一覧表示します

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

関連情報