Linux shell脚本中的top命令
我正试图通过expect脚本获取top命令的前5行。我从shell脚本调用这个expect脚本以及其他一些东西Linux shell脚本中的top命令,linux,shell,expect,Linux,Shell,Expect,我正试图通过expect脚本获取top命令的前5行。我从shell脚本调用这个expect脚本以及其他一些东西 top | head-5给出了下面的无cpu统计的输出ie- top-09:10:58最多46天,17:03,12个用户,平均负载:0.01,0.02, 0.00个任务:总共138个,1个正在运行,137个正在睡眠,0个停止,0个僵尸 成员:总计16432400k,使用8408096k,免费8024304k,609200k 缓冲区交换:总计6290736k,已使用0 K,空闲62907
top | head-5
给出了下面的无cpu统计的输出ie-
top-09:10:58最多46天,17:03,12个用户,平均负载:0.01,0.02,
0.00个任务:总共138个,1个正在运行,137个正在睡眠,0个停止,0个僵尸
成员:总计16432400k,使用8408096k,免费8024304k,609200k
缓冲区交换:总计6290736k,已使用0 K,空闲6290736k,
6754356k缓存
如果我在远程服务器上运行top
命令,我可以看到在CPU状态行更新之前有2-3秒的延迟,有人能帮我获取所有5行更新的CPU状态吗?下面是我的预期脚本-
#!/usr/bin/expect -f
set user1 abc
set pass1 pass
set timeout 8
match_max 1000
spawn ssh -C -o stricthostkeychecking=no $user1@<ip>
expect "*?assword:*"
send "$pass3\r"
expect "?xterm*"
send "\r"
send "top | head -5\r"
expect eof
#/usr/bin/expect-f
设置用户1 abc
设置通行证1通行证
设置超时8
匹配的最大值为1000
spawn ssh-C-o strichostkeychecking=no$user1@
应为“*?assword:*”
发送“$pass3\r”
预期为“?xterm*”
发送“\r”
发送“顶部|头部-5\r”
预期eof
您需要在批处理模式下运行top
,而不是默认的交互模式。此外,您需要定义top
为获取其度量值而执行的迭代次数
num_iterations=3
top -b -n $num_iterations | head -5
如果希望输出仅列出前5个进程并跳过显示的统计标题,可以尝试以下操作:
num_iterations=3
top -b -n $num_iterations | sed -n '8,12p'
还可以根据您的需要调整num_iterations
的值
top -b -n 2 -u $(whoami) | grep -A6 -B5 PID |tail -12
根据要求调整以下数值
grep
-A$after\u行\u计数
-B.在计算前支付$
尾部-$($after+$before+1)
尾值应为[行计数前+行计数后+1(PID匹配行)]
如果您不需要特定于用户的详细信息
top -b -n 2 | grep -A6 -B5 PID |tail -12
注意:top迭代次数为2次(top-n2),即显示输出需要6秒(取决于每次迭代设置的延迟)是正确的。您可以根据应用程序需要调整num_迭代的值。您的意思是在expect脚本中我需要添加set num_迭代3,并发送“top-b-n$num_迭代| head-5”?如果是这样,我在没有CPU统计数据的情况下得到相同的输出,我们可以在输出通过管道传输到head命令之前指定等待x秒吗?您只需要前5个进程的输出吗?我发现用head-12
替换head-5
列出了前5个流程。如果您想跳过标题并仅获取前5个进程的信息,可以执行top-b-n3 | sed-n'8,12p'
。sed命令选择输出中的第8-12行。感谢您的帮助,Tuxdude,它对我不起作用。无论我尝试什么,cpu统计数据都不会填充。尝试top-b-n2。这将在第二次迭代中返回cpu%。如果您只需要五行代码,请使用“top-b-n2 | grep-b6pid | tail-7 | head-5”