系统中X1-lock进程Xorg占用CPU爆表通过shell脚本解决以及shell一些知识【笔记】


首先看一下这张CPU的近一周的波动统计图,可以知道从2月28日开始一路飙升,并且后来时不时的自动停止,这个起伏真的是 因吹丝挺啊!(小声嘀咕:QNMLGB!

系统中X1-lock进程Xorg占用CPU爆表通过shell脚本解决以及shell一些知识【笔记】

我那两天忙,没时间看,这几天空了上去一看傻眼了。。。CPU爆表啊,.X1-lock占用CPU98% ,在Top命令下 C查看进程一看是Xorg,我擦,难道中马了(一种不祥的预感,事实是的-_-|| >悲伤<):

系统中X1-lock进程Xorg占用CPU爆表通过shell脚本解决以及shell一些知识【笔记】

系统中X1-lock进程Xorg占用CPU爆表通过shell脚本解决以及shell一些知识【笔记】

我就想起了前段时间折腾nextcloud,装了各种插件,而其中ocdownloader需要aria2c,我就去Google搜索啊,结果我也忘了借鉴了谁的,估计装到了个假的aria2c,于是乎就中马了。。。

系统中X1-lock进程Xorg占用CPU爆表通过shell脚本解决以及shell一些知识【笔记】

好吧,删除了aria2c以及nextcloud,终止那个wget 进程 并删掉残留//瞬间清静了。。。但是,我后来发现了,这个木马其实占用的CPU并不高(并不一定 =_= 无奈自己太菜不知道如何确定 )<< 从上图得出的结果。

后来Google搜索啊,询问了大佬以及网友的记录,大致如下:

Xorg这个进程多半是是由 vncserver 产生的,所以由此可以推定因为 VNC 服务导致了 CPU 占用超高。连接 VNC 需要请求 GUI 资源,如果机器配置和网络条件不够好,那么资源占用高是必然的了。如果无法升级硬件配置,那么可以考虑调整 VNC 设置,将所需的 GUI 要求降低,如减少分辨率、颜色位深等。

但是我在自己的服务器上找了半天,都没有找到神马vncserver,于是乎,只能自己先写个脚本监控它(因为这个进程的名字不变,如果进程的名字会改变,稍微修改一下我的脚本也可以使用的),如果一出现就直接FUCK kill它。脚本结果运行截图如下:

系统中X1-lock进程Xorg占用CPU爆表通过shell脚本解决以及shell一些知识【笔记】

注:脚本可以写进crontab 定时执行,监控,暂时就这么个暴力解决的办法。脚本地址:https://github.com/Mr-xn/server-bash-script/blob/master/freecpu.sh 

后来找了好久,终于找到方法了。。。卸载所有X11相关的包以及Xorg的包,然后查找系统里面的X11相关路径文件和文件夹,全部删除掉。。。OK了!几个小时都没有再出现 .X1-lock 被杀的记录了。卸载相关参考命令我会给出链接,至于查找嘛,很简单,whereis X11 ,apt-get --purge remove 'x11-*'

root@xxxx:~# whereis X11
X11: /usr/bin/X11 /usr/lib/X11 /etc/X11 /usr/include/X11 /usr/share/X11

root@xxxx:~# rm -rf /usr/bin/X11 /usr/lib/X11 /etc/X11 /usr/include/X11 /usr/share/X11

终止掉 .X1-lock 进程在进行这些删除操作就好了。

root@xxxx:~# find / -name 'xorg'
/usr/share/X11/xkb/rules/xorg
root@xxxx:~# ls -lgth /usr/share/X11/xkb/rules/xorg
lrwxrwxrwx 1 root 4 Jun 6 2014 /usr/share/X11/xkb/rules/xorg -> base

至于这个xorg 的内容我贴在这里了,你们有看的,可以去查看:https://pastebin.com/WCxn3Bux

删完后 你继续查找 如果像下面这个就表示删干净了。

root@xxxx:~# whereis xorg
xorg:
root@xxxx:~# whereis X11
X11:
root@xxxx:~# 

 相关参考链接:

https://www.howtoinstall.co/en/debian/jessie/x11-common?action=remove

http://www.pc-freak.net/blog/debian-linux-remove-xorg-gnome-gdm-graphical-environment-packages-serverr/

https://www.wikihow.com/Configure-X11-in-Linux

https://raspberrypi.stackexchange.com/questions/5258/how-can-i-remove-the-gui-from-raspbian-debian (这个里面比较详细)

下面是写shell 的一些笔记,生人勿看。

linux shell中 if else以及大于、小于、等于逻辑表达式介绍:

比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。

注意:这里的空格很重要。要确保方括号的空格。我就曾因为空格缺少或位置不对,而浪费好多宝贵的时间。

if ....; then
....
elif ....; then
....
else
....
fi


[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真

含条件选择的shell脚本 对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。
基本的if条件命令选项有:

eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
-ne —比较两个参数是否不相等
-lt —参数1是否小于参数2
-le —参数1是否小于等于参数2
-gt —参数1是否大于参数2
-ge —参数1是否大于等于参数2
-f — 检查某文件是否存在(例如,if [ -f "filename" ])
-d — 检查目录是否存在 


几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。

 

shell 的 if 条件判断中有多个条件:

-------------------------------------------------------
#!/bin/bash
score=$1
if [ $score = 5 ]||[ $score = 3 ];then
    echo right
else
    echo wrong
fi
 
-------------------------------------------------------
#!/bin/bash
score=$1
if [ $score -gt 5 ]||[ $score -lt 3 ];then
    echo right
else
    echo wrong
fi
 
-------------------------------------------------------
#!/bin/bash
score=$1
if [ $score -gt 15 ]||([ $score -lt 8 ]&&[ $score -ne 5 ]);then
    echo right
else
    echo wrong
fi
 
-------------------------------------------------------
或:

#!/bin/bash

count="$1"

if [ $count -gt 15 -o $count -lt 5 ];then

   echo right

fi
 
且:

#!/bin/bash

count="$1"

if [ $count -gt 5 -a $count -lt 15 ];then

   echo right

fi
-------------------------------------------------------
score=$1
if [[ $score -gt 15 || $score -lt 8 && $score -ne 5 ]];then
    echo right
else
    echo wrong
fi

记住必须加两个中括号!!!
 

linux shell脚本 截取字符串时执行错误:bad substitution :

 
比如脚本cutstr.sh的作用时截取www:
 
#/bin/bash
mm="www.baidu.com"
echo ${mm:0:3}
 
执行脚本方式不同出现的结果不同:

方式1、sh cutstr.sh

结果:Bad substitution

方式2、bash cutstr.sh

结果:www

方式3、

chmod 777 cutstr.sh

./cutstr.sh

结果:www

结论:

在执行脚本时要注意的是执行环境的shell,Ubuntu 中执行最好使用上面的方式二或者方式三,注意使用方式一时有时会报错。
 
下面这个脚本执行就会出错:Bad substitution
<span style="color:#FF0000;"><strong>#!/bin/sh</strong></span>

test=asdfghjkl
echo ${test:1}
 
修改#!/bin/sh 为 #!/bin/bash 即可!至于这两者的区别,自行搜索查看有详细的官方讲解。
 
参考链接:
 


扫描二维码,在手机上阅读

推荐阅读:

linux 文件权限字符表示&数字表示

分分钟干死你的WordPress网站或者任意网站

评 论
更换验证码