当前CPU利用率:top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}'命令解析
时间: 2023-12-21 12:05:58 浏览: 131
这是一个 Linux 系统下的命令,用于查看当前 CPU 的利用率。具体解析如下:
1. `top -bn1`:表示以 batch 模式运行 top 命令,只运行一次,不需要交互式输入。
2. `grep load`:在 top 的输出结果中筛选包含 "load" 关键字的行。
3. `awk '{printf "%.2f%%\t\t\n", $(NF-2)}'`:使用 awk 命令打印出选定行的倒数第二列(即 CPU 利用率),并格式化输出为百分数,保留两位小数,并添加制表符和换行符。
综上所述,该命令的作用是查看当前 CPU 的利用率,并以百分数形式输出。
相关问题
shell脚本完成 cpu, mem利用率的监测。脚本每五秒记录一次当前cpu, mem利用率,每一条信息包含的当前时间,cpu利用率,mem利用率。 保存到log.txt文件中。程序运行时间1min。
### 回答1:
下面是一个简单的shell脚本,可以实现你的要求。你可以使用 `top` 命令获取 CPU 和内存占用率,并使用 `date` 命令获取当前时间。然后使用 `sleep` 命令来等待 5 秒,以便下一次记录。最后,将这些信息写入 log.txt 文件。
```
#!/bin/bash
# 输出文件头部
echo "时间, CPU利用率, 内存利用率" > log.txt
# 循环 12 次,每次等待 5 秒
for i in {1..12}
do
# 获取当前时间
current_time=$(date +"%Y-%m-%d %H:%M:%S")
# 获取 CPU 和内存占用率
cpu_usage=$(top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}')
mem_usage=$(free | awk 'NR==2{printf "%.2f%%\t\t", $3/$2*100}')
# 将信息写入文件
echo "$current_time, $cpu_usage, $mem_usage" >> log.txt
# 等待 5 秒
sleep 5
done
```
请注意,这个脚本是在 Linux 系统上编写的,如果你在其他操作系统上运行它,可能需要进行一些修改。
### 回答2:
可以使用以下的Shell脚本实现对CPU和内存利用率的监测,并将每次的记录保存到log.txt文件中:
```shell
#!/bin/bash
DURATION=60
INTERVAL=5
end_time=$((SECONDS+DURATION))
log_file="log.txt"
echo "当前时间 CPU利用率(%) 内存利用率(%)" > $log_file
while [ $SECONDS -lt $end_time ]
do
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
cpu_usage=$(top -bn1 | awk 'NR==3{print 100-$8}' | cut -c 1-5)
mem_usage=$(free | awk 'NR==2{printf "%.2f", ($3/($3+$4)*100)}')
echo "$timestamp $cpu_usage $mem_usage" >> $log_file
sleep $INTERVAL
done
```
这段脚本首先设置了监测的总时长为60秒,每次记录之间的间隔为5秒,并指定了log.txt作为保存信息的文件。
在脚本的主循环中,通过调用top命令获取当前的CPU利用率,并借助awk和cut命令进行处理,然后使用free命令获取当前的内存利用率,并进行计算和格式化。最后,将当前时间、CPU利用率和内存利用率写入log.txt文件中。
脚本每次记录后会通过sleep命令暂停5秒,然后再进行下一次的记录,直到总时长达到60秒为止。
运行脚本后,即可根据实际情况查看log.txt文件中保存的CPU和内存利用率信息。
### 回答3:
要完成CPU和内存利用率的监测,可以使用Shell脚本编写一个循环,每五秒记录一次当前的CPU和内存利用率,并将每次记录的时间、CPU利用率和内存利用率保存到log.txt文件中。下面是一个简单的示例脚本:
```shell
#!/bin/bash
duration=60 # 程序运行时间1min,单位为秒
interval=5 # 每隔5秒记录一次
end_time=$(( SECONDS + duration )) # 计算结束时间
echo "时间 CPU利用率 Mem利用率" > log.txt # 初始化log.txt文件,写入表头
while [ $SECONDS -lt $end_time ]; do
current_time=$(date "+%Y-%m-%d %H:%M:%S") # 获取当前时间
cpu_utilization=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}') # 获取当前CPU利用率
mem_utilization=$(free | awk '/Mem/{printf "%.2f", $3/$2 * 100}') # 获取当前内存利用率
echo "$current_time $cpu_utilization% $mem_utilization%" >> log.txt # 将当前时间、CPU利用率和内存利用率记录到log.txt文件中
sleep $interval
done
```
在脚本中,我们通过SECONDS变量来计时,循环执行直到达到指定的运行时间。在每次循环中,我们使用`date`命令获取当前时间,使用`top`命令获取当前CPU利用率,使用`free`命令获取当前内存利用率,并将这些信息写入log.txt文件。最后使用`sleep`命令来等待5秒。脚本运行结束后,log.txt文件会包含每隔五秒记录的时间、CPU利用率和内存利用率信息。
一、编写一个Shell脚本,显示CPU使用情况,硬盘和内存的利用率,显示终端下的所有进程,查看每个进程打开的具体scoket。 二、编写一个Shell脚本,试利用if嵌套语句,找到3个数字的最大值,并输出找到的最大值。 三、编写一个Shell脚本,要求利用for循环计算1-100内(包括1和100)的奇数和。 四、编写一个Shell脚本,要求利用until计算20-50(包括20和50)数值的和。 五、编写一个Shell脚本,要求输出1-50(包括1和50)中除了40-45外的数值。
好的,以下是回答:
1. 显示系统信息和进程信息的Shell脚本:
```
#!/bin/bash
# 显示CPU使用情况、硬盘和内存的利用率
echo "CPU使用情况:"
top -bn1 | grep load | awk '{printf "%.2f%%\n", $(NF-2)}'
echo "硬盘利用率:"
df -h | awk '$NF=="/"{printf "%s\n", $5}'
echo "内存利用率:"
free -m | awk 'NR==2{printf "%.2f%%\n", $3*100/$2}'
echo "进程信息:"
ps -ef
echo "每个进程打开的具体socket信息:"
for pid in $(ps -ef | awk '{print $2}'); do
ls /proc/$pid/fd | xargs -I{} readlink /proc/$pid/fd/{} | grep socket
done
```
2. 找到3个数字的最大值的Shell脚本:
```
#!/bin/bash
# 找到3个数字的最大值
read -p "请输入第一个数字:" num1
read -p "请输入第二个数字:" num2
read -p "请输入第三个数字:" num3
if [ $num1 -gt $num2 ]; then
if [ $num1 -gt $num3 ]; then
echo "最大值为:$num1"
else
echo "最大值为:$num3"
fi
else
if [ $num2 -gt $num3 ]; then
echo "最大值为:$num2"
else
echo "最大值为:$num3"
fi
fi
```
3. 计算1-100内奇数和的Shell脚本:
```
#!/bin/bash
# 计算1-100内奇数和
sum=0
for ((i=1;i<=100;i+=2)); do
sum=$((sum+i))
done
echo "1-100内奇数和为:$sum"
```
4. 利用until计算20-50数值和的Shell脚本:
```
#!/bin/bash
# 利用until计算20-50数值和
sum=0
i=20
until [ $i -gt 50 ]; do
sum=$((sum+i))
i=$((i+1))
done
echo "20-50数值和为:$sum"
```
5. 输出1-50中除了40-45外的数值的Shell脚本:
```
#!/bin/bash
# 输出1-50中除了40-45外的数值
for ((i=1;i<=50;i++)); do
if [ $i -ge 40 ] && [ $i -le 45 ]; then
continue
fi
echo $i
done
```
阅读全文