top命令
top命令用于实时显示进程状态
语法
top [option]
选项
d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
S : 累积模式,会将己完成或消失的子进程 ( dead child process ) 的 CPU time 累积起来
s : 安全模式,将交谈式指令取消, 避免潜在的危机
i : 不显示任何闲置 (idle) 或无用 (zombie) 的进程
n : 更新的次数,完成后将会退出 top
b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内
top的前五行表示当前系统统计信息
#第一行显示为当前时间、运行时间、登陆用户数、及系统负载(分别是一分钟、五分钟、十分钟)
top - 03:36:00 up 2:23, 3 users, load average: 0.23, 0.07, 0.02
#第二行表示进程状态统计
Tasks: 158 total, 2 running, 156 sleeping, 0 stopped, 0 zombie
#第三行表示CPU使用情况
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
#第四行物理内存使用情况及总量
MiB Mem : 1790.4 total, 1139.8 free, 255.6 used, 395.0 buff/cache
#第五行表示交换分区使用情况及总量
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1367.9 avail Mem
top列标题含义
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
top的内置命令
在top 命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了s 选项, 其中一些命令可能会被屏蔽。
h 显示帮助画面,给出一些简短的命令总结说明
k 终止一个进程。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序
r 重新安排一个进程的优先级别
S 切换到累计模式
s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s
f或者F 从当前显示中添加或者删除项目
o或者O 改变显示项目的顺序
l 切换显示平均负载和启动时间信息
m 切换显示内存信息
t 切换显示进程和CPU状态信息
c 切换显示命令名称和完整命令行
M 根据驻留内存大小进行排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
#对于多U多核的CPU来说在top界面中可以按数字1监控每个CPU的状况
#在top界面中可以按x打开或者关闭排序列的加亮效果(默认按照CPU使用情况排序)
iostat
iostat 可以提供IO性能状态数据 由sysstat软件包提供 选项
-c 只显示CPU行
-d 显示设备〈磁盘)使用状态
-k 以千字节为为单位显示输出
-t 在输出中包括时间戳
-x 在输出中包括扩展的磁盘指标
例
[root@localhost date]# iostat
Linux 4.18.0-305.3.1.el8.x86_64 (localhost.localdomain) 12/26/2021 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.01 0.29 0.01 0.00 99.64
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.82 14.70 11.61 342538 270506
scd0 0.00 0.04 0.00 1041 0
[root@localhost date]#
练习
1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。
#expect写法
[root@localhost date]# cat expect_ssh.sh
#!/usr/bin/expect
spawn ssh shi@192.168.1.46
expect {
"yes/no" { send "yes\n";exp_continue}
"password" { send "xxxxxx\n" }
}
interact
[root@localhost date]#
#shell写法
[root@localhost date]# cat shell_ssh.sh
#!/bin/bash
ip=192.168.1.46
user=xxx
passwd=xxxxxx
expect << EOF
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$passwd\n" }
}
expect eof
interact
EOF
2、生成10个随机数保存于数组中,并找出其最大值和最小值
[root@localhost date]# cat max.sh
#!/bin/bash
declare -i min max
declare -a num
for ((i=0;i<10;i++));do
num[$i]=$RANDOM
[ $i -eq 0 ] && max=${num[$i]} && min=${num[$i]} && continue
[ ${num[$i]} -gt $max ] && max=${num[$i]} && continue
[ ${num[$i]} -lt $min ] && min=${num[$i]}
done
echo "all num are ${num[*]}"
echo max is $max
echo min is $min
[root@localhost date]# ./max.sh
all num are 12966 19539 27815 19561 4770 87 24096 7691 5044 17118
max is 27815
min is 87
3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
[root@localhost date]# cat read.sh
#!/bin/bash
echo "Please input a number list"
read -a nums
echo
echo "after sort is ${nums[*]}"
len=${#nums[*]}
for((j=0;j<$len-1;j++));do #外层循环提供找出数组中最大数的次数
for((i=0;i<$len-1;i++));do #内层循环找出数组中最大的数
if [ ${nums[$i]} -gt ${nums[$i+1]} ];then
tmp=${nums[$i]}
nums[$i]=${nums[$i+1]}
nums[$i+1]=$tmp
fi
done
done
echo "befor sort is ${nums[*]}"
[root@localhost date]# ./read.sh
Please input a number list
10 25 12 78 9 6
after sort is 10 25 12 78 9 6
befor sort is 6 9 10 12 25 78
4、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
##for写法
[root@localhost date]# cat net_for.sh
#!/bin/bash
net=192.168.0
for((i=1;i<=254;i++));do
{
if /bin/ping -c1 -W1 $net.$i &> /dev/null;then
echo $net.$i success!
else
echo $net.$i fail!
fi
}& #并行执行任务
done
wait #是每一个子进程都完成
##while写法
[root@localhost date]# cat net_while.sh
#!/bin/bash
net=192.168.0
i=1
while [ $i -lt 255 ];do
{
if /bin/ping -c1 -W1 $net.$i &> /dev/null;then
echo $net.$i success!
else
echo $net.$i fail!
fi
}&
let i++
done
wait
5、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
[root@localhost date]# crontab -l
30 1 * * 1-5 [-d /backup ] || mkdir /backup ;/usr/bin/tar zcf etcbak-`date -d "-1 day" +%F-%H`.tar.xz /etc
[root@localhost date]#