一.目的
有时候我们会遇到在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没有的进程号,但是脚本执行的结果需要自行排查是否准确