
背景:
ifconfigコマンドを使用して、Linuxで利用可能なインターフェイスのリストを確認しています。
ただし、ifconfigの出力形式はUbuntu 16.04とUbuntu 17.10で異なります。
追加のチェックにより、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リンクカプセル:イーサネット
最新バージョンの場合
$ ifconfig --version net-tools 2.10-alpha
$ifconfig
ens160: フラグ=4163 mtu 1500
チャジャン: フラグ=73 mtu 65536
これにより、出力で追加の「:」を考慮または予想するいくつかのツールが中断される可能性があります。
質問:
ifconfig出力形式への変更がそれを使用するツールに影響を与えないように、安定した方法でネットワークインタフェースのリストを取得する方法はありますか? ifconfigを一貫した方法で使用する代替方法はありますか?
答え1
これネットワークツールパッケージは廃止しばらくはiproute2(ip
パッケージの基本ツール)に置き換えられました。多くのディストリビューションには、デフォルトのインストールの一部としてネットワーキングツールが含まれなくなりました。
その後、ネットワークツールの開発が再開されましたが、これはDebian 9.0システムで見られるように、互換性が損なわれるように多くのツールが改善されましたifconfig
。NEWS.Debian.gz
15年間のアップストリーム開発が中断された後、net-toolsが再開発され、多くの長い問題を解決しています。悪いニュースは、多くのコマンドの出力が変更され、解析に依存するスクリプトが確実に中断されることです。
したがって、iproute2ツールを使用するようにスクリプトを調整することをお勧めします。たとえば、ip link
上記のような情報を提供する必要がありますifconfig
。このアプローチの1つの欠点は、Linux以外のシステムとの互換性が壊れ、ほとんどすべてのLinux以外のシステムですifconfig
。
答え2
シェルでLinuxのすべてのインタフェースを一覧表示するもう1つの方法はを読むことです/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