Centos
輸出重定向不適用於頂部管道到 grep
當我在 Linux 中執行此命令時:
$ top -b -d 20 | grep "load average" -A 20 > top.log
top.log 始終為空。
但是當我執行這個命令時:
$ top -b -d 20 | grep "load average" -A 20 | tee top.log
然後 top.log 有內容。
如果我不想使用
tee
(因為我不想將輸出顯示到控制台上),如何更正第一個命令以便更新 top.log?我的機器使用 CentOS Linux 7 (Core)。
您應該使用
--line-buffered
選項grep
(因為您的問題被標記為“centos”,所以您肯定在使用 GNU grep)。預設情況下,
grep
僅當輸出為終端時才使用行緩衝(就像 stdio 函式:printf、puts 等)。該--line-buffered
選項是壓倒一切的。GNU coreutils 也有一個 stdbuf(1) 包裝器,它應該適用於任何使用 stdio 的動態連結程序。
您可以
cat /proc/loadavg
間隔使用。為什麼要拉出來top
?它用於主動監控(主要是),並且總是比快速讀取loadavg
. 對於流程列表,只需使用, 並使用標誌ps
進行排序。—sort
例如
( while true ; do cat /proc/loadavg ; ps -aux | sort -nrk 3,3 | head -n 20 ; sleep 3 ; done ; ) | pipe ...
或者
( while true ; do cat /proc/loadavg ; ps -Ao user,uid,pid,comm,pcpu,tty —sort=-pcpu —no-headers | head -n 20 ; sleep 3 ; done ; ) | pipe ...