shell脚本实现进程对比

一.目的

  有时候我们会遇到在linux服务器上ps的进程和/proc里进程号不一致的情况,这个时候我们需要以/proc为标准来看ps里没有的进程,于是编写了下面的脚本

二.代码

直接贴出代码

#!/bin/bash
#Date:2018-10-6
#Author:Id3al
#Func:通过脚本将proc下的进程号与ps出来的进程号进行对比,可用于应急响应里隐藏进程的查找

#首先取出proc下的所有进程号
ls_Proc(){
    n=0
    for i in `ls /proc`
    do
        if [[ $i = [0-9]* ]] #通过正则匹配出数字
        then
            echo $i >> process.txt
            let n++
        fi
    done
}

ls_Ps(){
    for proc in `ps aux | tr -s ' '| cut -d ' ' -f 2` #利用tr对多个空格进行压缩成一个空格
    do
        if [[ $proc = [0-9]* ]]
        then
            echo $proc >> ps_proc.txt
        fi
    done
}

compare_ps_proc(){
    #cat ps_proc.txt | sort -n > ps_proc.txt
    cat process.txt | sort -n > process.txt  #利用sort对文件内容进程排序,以便于后面使用comm命令进行对比
    compare_result=`comm -3 --nocheck-order process.txt ps_proc.txt` #comm -3  文件1 文件2  打印在文件1 中有,而文件2 中没有的行。反之亦然
    echo $compare_result >> com_result.txt
}

`> process.txt && > ps_proc.txt && > com_result.txt`
ls_Proc
ls_Ps
compare_ps_proc

上面的代码里process.txt存的是/proc下的进程号,ps_proc存的是ps出来的进程号,代码不是很难

总结:上面的脚本执行后会在com_result.txt文件里存/proc下有但是ps没有的进程号,但是脚本执行的结果需要自行排查是否准确

猜你喜欢

转载自www.cnblogs.com/Id3al/p/9747978.html
今日推荐