背景:
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.gz
9.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