我正在使用以下内容来查找 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 接口名称。