ifconfig Ubuntu16.04とUbuntu17.01のフォーマットの違いを克服する

ifconfig Ubuntu16.04とUbuntu17.01のフォーマットの違いを克服する

背景:

ifconfig コマンドを使用して、Linux 上で使用可能なインターフェースのリストを確認しています。

ただし、ubuntu 16.04 と ubuntu 17.10 では ifconfig の出力形式が異なります。

さらに確認すると、ubuntu17.10 では net-tools パッケージがアップグレード (net-tools 1.60 から net-tools 2.10-alpha) されており、最新の ifconfig ではネットワーク インターフェイス名がコロン (':') 付きで出力されます。古いバージョンでは:

$ ifconfig --version net-tools 1.60 ifconfig 1.42 (2001-04-13)

$ ifconfig

enp0s3 リンク encap:イーサネット

新しいバージョンでは

$ ifconfig --version ネットツール 2.10-alpha

$ifconfig

ens160: フラグ=4163 mtu 1500

lo: フラグ=73 mtu 65536

これにより、出力内の余分な「:」を考慮または想定する一部のツールが動作しなくなる可能性があります。

質問:

ifconfig 出力の形式を変更してもそれを使用するツールに影響が及ばないように、ネットワーク インターフェイスのリストを確実に取得する方法はありますか? 一貫した方法で使用できる ifconfig の代替手段はありますか?

答え1

ネットツールパッケージは非推奨しばらくの間、iproute2 に置き換えられました (ipこのパッケージの主なツール)。多くのディストリビューションでは、net-tools が基本インストールの一部として出荷されなくなりました。

net-tools の開発はその後再開されましたが、これにより、 で見られるように、多くのツールが互換性を損なう方法で強化されましたifconfig。Debian NEWS.Debian.gz9.0 システムから:

アップストリーム開発が行われなくなってから 15 年が経ちましたが、net-tools は再び開発され、長年の多くの問題が修正されています。残念なことに、多くのコマンドの出力が変更され、その解析に依存していたスクリプトが確実に壊れてしまいます。

そのため、スクリプトを iproute2 ツールを使用するように変更することが考えられます。たとえば、は上記のip linkものと同じような情報を提供するはずですifconfig。このアプローチの唯一の欠点は、 を使用するほぼすべての Linux 以外のシステムとの互換性が失われることですifconfig

答え2

シェルから Linux のすべてのインターフェースを一覧表示する別の方法は、 を読み取ることです/proc/net/dev。これは、 からの ifconfig(8) の出力よりも安定した形式ですnet-tools

たとえば、インターフェースの名前を取得するには:

whr@debianjessie:~$ sed -r -e 1,2d -e 's/^ +//' -e 's/: .+//' /proc/net/dev
ppp0
lo
eth0
eth1

関連情報