
Я пытался разобрать вывод slabtop -o
с помощью awk, чтобы вычислить сумму размера кэша, но когда вывод передается по конвейеру, он возвращает только первые 23 строки. Я пробовал это на Ubuntu и Centos.
# slabtop --version
slabtop from procps-ng 3.3.10
# slabtop -o | wc -l
23
Почему при передаче команды по конвейеру возвращаются только первые 23 строки?
решение1
slabtop
, даже с -o
,всегда ограничивается одним экраном вывода. Обычно он делает это, спрашивая терминал о его размере, но когда его стандартный вывод не является терминалом,предполагается, что экран имеет 80 столбцов и 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
себе.