ネットワークインターフェイスのリストを取得しようとしています。
現在の結果を返しip addr
、次のように出力で正規表現/文字列検索を実行しています。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
84: eth0@if85: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:2/64 scope link tentative
valid_lft forever preferred_lft forever
私はすべてのメタデータにあまり興味がなく、インターフェイス名だけを探しています。だから私は以下を取得したいと思います:
1: lo
84: eth0@if85
コマンドの結果をフィルタリングする方法はありますかip addr
?私のアプリで他のcliマジックや正規表現マジックを確実に実行できますが、ip
独自のフィルタを使用する方が良いでしょう。
答え1
そうそうできます。
grep
PCRE() と一緒に使用-P
:
ip addr | grep -Po '^\d+:\s+\K[^:]+'
^\d+:\s+
起動インターフェイス名の前の部分と一致し、一致\K
は削除されます。[^:]+
:
インターフェイス名である次の部分を取得します。
同様のロジックが使用されますsed
。
ip addr | sed -nE 's/^[[:digit:]]+:[[:blank:]]+([^:]+).*/\1/p'
私のシステムでは:
% ip addr | grep -Po '^\d+:\s+\K[^:]+'
lo
eth0
wlan0
% ip addr | sed -nE 's/^[[:digit:]]+:[[:blank:]]+([^:]+).*/\1/p'
lo
eth0
wlan0
あなたが本当にやるべきこと:
Linuxカーネルは、.dllsysfs
ファイルにインストールされているハードウェアを表示するためのインターフェースを提供します/sys
。
インターフェイス名を取得するには、ディレクトリの/sys
正確な場所にアクセスするだけです。/sys/class/net/
私のシステムでは:
% ls -1 /sys/class/net/
eth0
lo
wlan0
これらのそれぞれは、ディレクトリ、ファイルを含むサブディレクトリ、インターフェイスに関するすべての情報を含むディレクトリです。
以下はディレクトリの内容のリストです/sys/class/net/eth0
。
% ls -1 /sys/class/net/eth0
addr_assign_type
address
addr_len
broadcast
carrier
carrier_changes
device
dev_id
dev_port
dormant
duplex
flags
gro_flush_timeout
ifalias
ifindex
iflink
link_mode
mtu
name_assign_type
netdev_group
operstate
phys_port_id
phys_port_name
phys_switch_id
power
queues
speed
statistics
subsystem
tx_queue_len
type
uevent
修正された質問に対する回答:
インターフェイス名とインデックスを取得するには:
grep
:
ip addr | grep -o '^[0-9]\+:[^:]\+'
sed
:
ip addr | sed -nE 's/^([[:digit:]]+:[^:]+).*/\1/p'
各インターフェイスディレクトリに対して/sys/class/net/
このファイルを読み取ることができますifindex
。たとえば、インターフェイスの場合、eth0
インデックスファイルは次のようになります。
/sys/class/net/eth0/ifindex