[02]Linux与Bash教程-11-Linux三剑客实战之性能、网络统计实战

文章链接: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
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值