获取 MTU 值的最佳方法是什么

获取 MTU 值的最佳方法是什么

我正在使用以下内容来查找 mtu 值

ifconfig | grep mtu
eno17832: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

但在我的 bash 脚本中我们想确切地知道 MTU 值

所以我们可以用这个

MTU_VAL=` ifconfig | grep mtu | head -1 | awk '{print $NF}' `

但这可能有风险而且不那么优雅

请告诉我我们是否可以确定捕获 MTU?

答案1

大多数工具利用 /proc 或 /sys 中存在的信息,关于 ifconfig 我会使用/sys/class/net/<interface>/*文件:

要获取除环回 ( lo) 之外的所有接口的 mtu,可以使用以下方法:

cat /sys/class/net/[^l][^o]*/mtu

排除是通过 shell globing 完成的,任何不以 l 开头然后 o 的内容都会被展开,然后读取其中的 mtu 文件。如果除了环回之外只有一个接口,它将返回其 mtu 作为单个值,可在脚本中使用以$()将输出放入变量中。

回答评论:

$ awk '{split(FILENAME,arr,"/"); print arr[5],$1}' /sys/class/net/*/mtu
ens160 1500
lo 65536

与上面相同的模式匹配可以lo在需要时排除(我将其保留在这里以展示多个接口输出)。

答案2

直接读取其配置值。

MTU_VAL=$(< /sys/class/net/<replace-with-interface-name>/mtu)

只需替换<replace-with-interface-name>为您想要的 MTU 接口名称。

相关内容