文章链接:https://www.ceshiren.com/t/topic/3371
1、ps命令
ps -ef | head -10
ps -aux | head -10
封装自己的ps命令:
ps_ex ()
{
ps -o uname,pid,ppid,thcount,ni,pri,psr,pcpu,pmem,rss,vsz,sz,start_time,time,comm,c,command,args "$@"
}
2、top命令
top -b -d 1 -n 20
top -b -d 1 -n 20 | grep --color=auto --line-buffered -i yundun$ | awk 'BEGIN{print "cpu","mem"}{cpu+=$9;mem+=$10;print $9,$10}END{print "";print cpu/NR,mem/NR}'
3、netstat命令
netstat -tlnp
netstat -tnp | head -10
4、作业1:统计aliyundun的性能
perf_get(){
/#todo: 输出20s内某个进程的每秒的cpu和mem,并最后空出一行统计平均性能
}
perf_get pid_or_name
cpu mem
3 4
2 6
2 2
3 4
…
10 2
5.5 3.5
答案:
#shell自带的type命令输出
perf_get ()
{
top -b -d 1 -n 20 | grep --color=auto --line-buffered -i yundun$ | awk 'BEGIN{print "cpu","mem"}{cpu+=$9;mem+=$10;print $9,$10}END{print "";print cpu/NR,mem/NR}'
}
#vs code+shell format
perf_get() {
top -b -d 1 -n 20 |
grep --color=auto --line-buffered -i yundun$ |
awk '
BEGIN{print "cpu","mem"}
{cpu+=$9;mem+=$10;print $9,$10}
END{print "";print cpu/NR,mem/NR}
'
}
5、作业2:统计连接网络链接情况
connection_summary(){
#todo: 链接所有的端口和对应的tcp连接状态,找出他们的连接总数吧
}
connection_summary
22 ESTABLISHED 100
22 CLOSED 3
7777 ESTABLISHED 20
答案:
connection_summary() {
netstat -tn |
awk 'NR>2{print $4,$6}' |
awk -F: '{print $2}' |
sort | uniq -c | sort -nr |
awk '{print $2"\t"$3"\t"$1}'
}
6、作业3:抽奖脚本
100个人,每个人给一个骰子,掷骰子>3的点认为是通过的,否则淘汰。
第一轮选出的人进入第二轮继续比赛,直至选出最终冠军。如果没有选出一个,可以复活上一轮的选手
lucky(){
}
seq 1 100 | lucky
第一轮: 1 2 3 5 88 99 .100
第二轮: 1 3 88
第三轮: 3 88
第四轮: 3 88
第五轮:
第六轮: 3 88
第七轮: 88
答案:
#seq 1 100 | lucky
#seq 1 100 | xargs | lucky
lucky() {
#需要给默认值,不然用于数组的时候,会默认有一个初始元素
local all=() sub_temp=() sub=() index=0
#多行模式支持选手名字带有空格
while read line; do
all+=("$line")
done
#单行的时候,默认空格区分每个选手
((${#all[@]} == 1)) && all=($all)
#用于数据处理,不影响原来的all
sub=("${all[@]}")
while true; do
echo "index=$index count=${#sub[@]} sub=${sub[@]}"
((index++))
#用于复活上一轮的种子
sub_temp=(${sub[@]})
for i in "${!sub[@]}"; do
((RANDOM % 6 + 1 > 3)) || unset sub[$i]
done
((${#sub[@]} == 1)) && {
echo
echo winner=${sub[@]}
break
}
#复活上一轮
((${#sub[@]} == 0)) && { sub=(${sub_temp[@]}); }
done
}