`ifconfig` 没有显示 alx 千兆卡的统计数据

`ifconfig` 没有显示 alx 千兆卡的统计数据

所以我刚刚在我的 arch box 上设置了 conky 来监控桌面上的各种统计数据,但我遇到了一个小问题。我的 conky 配置中的相关文本:

down $alignr ${downspeedf enp9s0} kb/s - ${totaldown enp9s0}
up $alignr ${upspeedf enp9s0} kb/s - ${totalup enp9s0}

我的千兆有线连接在哪里enp9s0。我注意到,conky 总是显示零,但只有这个接口的上传/下载速度和总数。我在配置中还有另外两行对我的无线接口 ( wlp7s0) 执行相同的操作,并且它工作正常。

两个界面的截图

为了看看发生了什么,我检查了输出ifconfig,结果显示所有内容都是零:

enp9s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.21  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::7a45:c4ff:feb7:4471  prefixlen 64  scopeid 0x20<link>
        ether -----------------  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 17 

但它显示的无线接口统计数据正常:

wlp7s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.20  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::86a6:c8ff:feaf:85c5  prefixlen 64  scopeid 0x20<link>
        ether ----------------  txqueuelen 1000  (Ethernet)
        RX packets 649  bytes 207876 (203.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 119  bytes 56765 (55.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

相关lsmod行:

alx                    27461  0 
mdio                    3525  1 alx

相关的lspci -vv

09:00.0 Ethernet controller: Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10)
    Subsystem: Dell Device 057e
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0, Cache Line Size: 64 bytes
    Interrupt: pin A routed to IRQ 49
    Region 0: Memory at f7800000 (64-bit, non-prefetchable) [size=256K]
    Region 2: I/O ports at d000 [size=128]
    Capabilities: <access denied>
    Kernel driver in use: alx
    Kernel modules: alx

有人知道发生了什么事吗?这不是什么严重的问题 - 互联网访问工作正常 - 只是它似乎无法像我的无线接口那样测量统计数据。

编辑:我已经禁用无线接口以确保它不仅仅是通过有线使用无线(我并不完全了解 Linux 如何管理多个网络接口)并且当仅使用有线接口时它仍然没有显示任何统计数据,即使我仍然可以访问互联网。

答案1

我找不到修复 ifconfig 的方法,但我在 conky 脚本中使用了 nstat 和一些巧妙的 awk 计算来实现同样的效果。因此,您可以使用以下一行代码,而不是使用“${downspeed eth0}/s”来获取 eth0 的下载速度:

${execi 1 /sbin/nstat | grep -i IpExtInOctets | awk '{if($2>1024*1024){mb=$2/1024/1024;printf "%.2F MB", mb} else if($2>1024){kb=$2/1024;printf "%.2F KB", kb} else {printf "%d B", $2}}' }/s

您必须以 1 秒为间隔使用 execi。nstat 显示与上次运行的字节数差异。如果您希望以超过 1 秒的间隔运行它,您可能需要将 awk 中的结果除以该秒数,以便得到平均值。

对于上传,请使用 nstat 中的 IpExtOutOctets 行。您可以根据需要调整它。请记住,它将显示所有进出流量,而不仅仅是特定接口的流量。但我假设您只有一个网络接口,我的台式电脑上只有一个。对于多个接口,可能需要不同的解决方案。

更新:但是,请小心,在第一个命令之后立即运行一次传入命令,然后运行传出命令,将为您显示传出为零。也许一些“睡眠”命令可以解决这个问题。

更新 2:下面是我解决在两个不同命令中同时显示下载和上传速度的问题的方法,而且仍然正确。需要对图形和图表进行调整,但对于仅显示文本,您可以尝试以下方法:

${goto 630}${font sansation:size=10,weight:bold}${color5} \
${texeci 2 /sbin/nstat | grep -i IpExtInOctets | awk '{if($2>1024*1024){mb=$2/1024/1024;printf "%.2F MB", mb} else if($2>1024){kb=$2/1024;printf "%.2F KB", kb} else {printf "%d B", $2}}' }/s \
${alignr 1}${color6} \
${texeci 2 sleep 1 && /sbin/nstat | grep -i IpExtOutOctets | awk '{if($2>1024*1024){mb=$2/1024/1024;printf "%.2F MB", mb} else if($2>1024){kb=$2/1024;printf "%.2F KB", kb} else {printf "%d B", $2}}' }/s

更新:或者您可以同时获取两个值并使用 awk 格式化它们以进行输出。

U/D: ${execi 1 /sbin/nstat | grep -A1 -i IpExtInOctets | awk '{if($2>1024*1024){mb=$2/1024/1024;printf "%.2F MB/s ", mb} else if($2>1024){kb=$2/1024;printf "%.2F KB/s ", kb} else {printf "%d  B/s ", $2}}'}

相关内容