克服Ubuntu16.04和Ubuntu17.01 ifconfig格式差異

克服Ubuntu16.04和Ubuntu17.01 ifconfig格式差異

背景:

我正在使用 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 --版本 net-tools 2.10-alpha

$ifconfig

ens160:標誌=4163 mtu 1500

瞧:標誌=73 mtu 65536

這可能會破壞一些確實考慮或期望輸出中額外的“:”的工具。

問題:

有沒有辦法以可靠的方式獲取網路介面列表,以便 ifconfig 輸出格式的任何更改都不會影響使用它的工具?是否有可以以一致的方式使用 ifconfig 的替代方案?

答案1

網路工具包裹是已棄用一段時間以來,被 iproute2 取代(ip是該軟體包中的主要工具)。許多發行版甚至不再將網路工具作為其基本安裝的一部分。

網路工具的開發此後已重新啟動,但這導致許多工具以破壞相容性的方式得到增強,正如您在ifconfig.在NEWS.Debian.gzDebian 9.0 系統上:

在 15 年沒有進行上游開發之後,net-tools 正在再次開發,解決了許多長期存在的問題。壞消息是許多命令的輸出已經改變,並且肯定會破壞依賴解析它的腳本。

因此,調整腳本以使用 iproute2 工具可能是一個好主意。例如,ip link應該為您提供與上面類似的資訊ifconfig。這種方法的一個缺點是它破壞了與非 Linux 系統的兼容性,幾乎所有非 Linux 系統都使用ifconfig.

答案2

從 shell 列出 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

相關內容