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


21

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」の組み合わせで実現できると思いますが、不要な情報を取り除く方法についてはまったく手がかりがありません。

回答:


17

これを試してみてください:

ifconfig -a | sed 's/[ \t].*//;/^$/d'

これは省略しloます:

ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d'

デニスのおかげで、これは魅力的でした^^。パーフェク 正規表現は本当に調べておくべきものです^^
ftiaronsem

LinuxとBSDには異なる*nixユーティリティが含まれることがよくありますが、残念ながらこのソリューションはMacでは動作しません:(
blong

ifconfigip代わりに使用します
プスタントン

これはOS Xで機能するようです:ifconfig -a | sed -E 's/[[:space:]:].*//;/^$/d'
通知があるまで一時停止します。

22

別の選択肢は次のとおりです。

ip -o link show | awk -F': ' '{print $2}'

または多分:

ls /sys/class/net

を使用することls /sys/class/netは、/etc/local.dスクリプト内のより優れたソリューションですopenrc- sed上記のソリューションは:、実行時に各インターフェイスの最後に余分になります/etc/init.d/local(ただし、スクリプトを直接実行する場合はそうではありません)。
スチュアートカルドール

+1のための-o-それは知らなかった
はPatryk

16

/ sys / class / netを使用して、パスを削除します。

$ basename -a /sys/class/net/*
eth0
eth1
lo
ppp0
tun0

6

これを試して:

ifconfig | cut -c 1-8 | sort | uniq -u
  • cut -c 1-8 各行の最初の8文字を抽出します
  • sort 行をソートします
  • uniq -u 最初の8文字にスペースのみがある説明行の空白行を削除する一意の行のみを出力します

これは私が試した2台のLinuxマシンで動作しますが、MacBookPro(OS X 10.6.4)ではifconfigスペースの代わりにタブを使用するため、少し複雑です:

ifconfig | expand | cut -c1-8 | sort | uniq -u | awk -F: '{print $1;}'
  • expand タブをスペースに変換します
  • awk -F: '{print $1;}' コロンの前に最初のフィールドを出力します。

特に、使用されたパラメータを説明する非常に詳細な答えをありがとう。将来同様の問題が発生する場合は、どの投稿を見るべきかを知っています;-)。残念ながら、それは「lo」をカットしていなかったので、受け入れられた答えはdennisに行きます。しかし、これは本当に非常に有用な答えです、ありがとう:
ftiaronsem

追加| grep -v lo:-)
ダグ・ハリス


3

/sysファイルシステムの使用:

basename -a $(ls /sys/devices/**/net/* -d)

ipとPerlを使用:

ip -o l|perl -lane'$F[1]=~s/://g;print $F[1]'

1

ifconfig出力からインターフェイス名を抽出する1つの方法を次に示します。

ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p'

特定の名前を除外したい場合、1つの方法はさらにフィルターをかけることですgrep

ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p' | grep -Fvx -e lo

さらに多くの名前を除外する場合は-e foogrepコマンドにさらに追加します。


あなたのソリューションは、デニスのソリューションと同じように機能します。残念ながら、私は2つの投稿を受け入れることができないため、dennisは単純に高速でした。ただし、特にgrepの説明には感謝します。
ftiaronsem

1

最初の列だけを印刷するには:

netstat -a | awk '{print $1}'

必要に応じてエントリを追加または削除する他のルールをawkに組み込むことができます。

編集:ifconfigでも同じことが言えます(Dougが指摘したように)

ifconfig | awk '{print $1}'

これは、「lo」インターフェースを除外した例です

ifconfig | awk '{if ($1 != lo) print $1}'

それは機能しません。awk先頭の空白を無視し、後続の各行の最初の単語も出力します。
ダグ・ハリス

残念ながら、それは実際には機能せず、ダグが指摘した正確な問題に苦しんでいます。しかし、あなたの助けに感謝しますが、それでも私は私のような初心者を助けてくれて本当に感謝しています。
ftiaronsem

1
/usr/sbin/ip addr show | awk '/^[1-9]/ {print $2}'

提供する

lo:
eth0:
eth1:
eth2:

出力として


1

受け入れられた解決策は存在しますが、これに対する解決策を提示したいと思います。

たくさんの仮想インターフェースがあり、さまざまなbashスクリプトで使用できるリストを取得したいと思います。

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.137  netmask 255.255.255.192  broadcast 11.22.33.191
        inet6 fe80::a00:27ff:fe8c:6bd3  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)
        RX packets 2969136  bytes 2394432908 (2.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1378821  bytes 358960701 (342.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.189  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

eth0:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.190  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

eth0:3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.180  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 673768  bytes 277972236 (265.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 673768  bytes 277972236 (265.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

私はそれがそこにあることを知っているので、ループバックには興味がありません:)

このワンライナーは仕事を終わらせます:

ifconfig | egrep '^eth' | cut -f 1-2 -d ':' | cut -f 1 -d ' '| pcregrep -o1 "(((eth\d)(:\d))|(eth\d))"

次のような出力を生成します。

eth0
eth0:1
eth0:2
eth0:3

楽しい。


1

上記のソリューションはすべて正常に機能します。それでもあなたはこれを試すことができます

ifconfig | grep HW | cut -c 1-6

loループバックであるため、HWアドレスが割り当てられていないため、表示されません。

出力-

root @ glum:/ home / amit#ifconfig | grep HW | カット-c 1-6
enp7s0
vmnet1
vmnet8
wlp6s0

1

最も簡単な解決策は、ifconfig(8)のman

man ifconfig(8)抽出http://www.manpagez.com/man/8/ifconfig/

-lフラグを使用すると、他の追加情報なしで、システムで使用可能なすべてのインターフェースをリストできます。このフラグの使用は、-d(ダウンしているインターフェースのみをリストする)および-u(アップしているインターフェースのみをリストする)を除き、他のすべてのフラグおよびコマンドと相互に排他的です。

したがって、リストを取得するには、次を使用します。

ifconfig -l

名前はスペースで区切られるため、sedを使用してこれらのスペースを\ nに置き換える必要があります。

ifconfig -l | sed 's/ / /g'


1

改善された:

netstat -i | grep '^[a-z]' | awk '{print $1}' | grep -v 'lo'

1
おそらくそれを作成する必要がありgrep -v '^lo$'ます。現在のコマンドは、(仮想的な例)logicalridiculousインターフェイスを除外します。
スコット

0

上記の解決策はどれも私にとってはうまくいきませんでした、ここに私の解決策があります:

ifconfig -a  | egrep "^[a-z]+" | sed "s/: .*//" | grep -v "lo"
  1. 使用可能なすべてのインターフェースをリストする
  2. デバイス名を含む行のみを抽出します(先頭にスペースはありません)
  3. 最初のスペースから後の無関係な末尾部分を削除します
  4. 除外loインターフェース

出力:

eth0
eth0:1
wlan0

0

「ifcongif -l」が仕事をするはずです。出力は、改行のない「lo0 gif0 stf0 en0 ...」のようなものです。

いくつかのウェブサイトで見つけましたが、もう見つけられません。そして、私はまだその「-l」フラグの意味を探しています。


0

ネットツールはデフォルトではインストールされない場合があります。したがって、インストール済みのパッケージを心配することなく、/ bin、/ usr / bin、および/ usr / sbin内で確実に見つかる組み込みコマンドを使用するのが好きです。

IP ADDR:ショー/ルーティングの操作、デバイス、ポリシールーティングやトンネル(アドレス)
はgrep:その後、unitl後に何もスペースを見つける
カット:区切り文字として使用し(:)とフィールド2を取得
TRを:すべてのスペースを削除

$ ip addr | grep -E ':\ s。* ?:' | cut -d ":" -f 2 | tr -d ""

0

macOSでテストされ、以下が機能しました。UPであったすべてのインターフェースを見つける必要がありました。これは、上記のデニスウィリアムソンからの回答に基づいています。

ifconfig -a | grep UP | sed 's/:.*//;/^$/d'


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.