
我試圖解析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
欺騙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
本身也可以使用。