我试图解析slabtop -o
with awk 的输出来计算缓存大小的总和,但是当输出通过管道传输时,它只返回前 23 行。我在 Ubuntu 和 Centos 上尝试过这个。
# slabtop --version
slabtop from procps-ng 3.3.10
# slabtop -o | wc -l
23
为什么当命令通过管道传输时它只返回前 23 行?
答案1
slabtop
, 即使-o
,总是将自己限制为一屏输出。它通常通过询问终端它的大小是多少来实现这一点,但是当它的标准输出不是终端时,假设屏幕为 80 列 x 24 行并且仅输出 23 行(以避免任何滚动)。
这由于已经修复,该修复出现在procps-ng
3.3.13 及更高版本中。
答案2
当输出不是终端时,它只是硬编码以这种方式工作。
如果您仍然想使用重定向并获取更多行,您可以使用script
to 欺骗slabtop
认为它的输出正在打印到终端。您可以stty
在此基础上添加更改伪终端参数并设置您自己的输出线限制。
# slabtop -o | wc -l
23
# script -q -c "slabtop -o" /dev/null | wc -l
46
# script -q -c "stty rows 999; slabtop -o" /dev/null | wc -l
147
或者,您可以直接从/proc/slabinfo
文件中获取信息,该文件slabtop
本身也可以使用。