“巡检”听起来很专业,实际就登上去看看服务器有没有啥异常情况。本文主要是详细介绍,或者说是复习下一些常用的linux指令。
进程相关
top、ps、pgrep、strace、kill
云服务器嘛,那用MobaxTerm或者云厂商自带的控制台都行。我用的腾讯云,那这里就以OrcaTerm为例。不得不说OrcaTerm在经历过数次迭代更新后,在指令补全和GPT接入这块做的还是很不错的。
登上服务器,那我的习惯是先看看进程占用的情况,比如检查下有没有占用异常高的进程(挖矿)。那就先输个top看看。
top
CPU和内存占用都很正常。进程一眼扫过去也没什么问题……真的没什么问题吗?
为了举例,这里以YJAsecAgent进程为例。这个YJAsecAgent到底是什么——相信肯定有好奇这个问题而去百度的朋友。但你一搜索就会发现,无论是GPT还是谷歌,你都无法找到有关该进程的任何信息。
我们先假设最坏的情况 —— 它是某种挖矿甚至病毒程序的进程。那我们首先得看看该进程到底是个啥。
通过top,我们拿到了该进程的PID——1022。当然如果你忘了,也可以通过top+管道的方式去查找特定进程;也可以直接用pgrep去查它的pid。
top |grep YJA
pgrep YJA
如果你嫌其他进程变动太大,经常上下浮动看着烦人,也可以用于top -p来查看特定进程的运行状况。
top -p 1022拿到pid之后,接下来就是查看单个进程的运行状态。那么输入ps。不过接下来参数到底是aux还是ef,在此处的区别不是太大。前者aux是查看所有用户的进程信息;后者ef除了用户进程以外还会显示系统进程。而这里的YJAsecAgent作为一个看着就和网安有关、起“监听”(Agent的用途大多如此)作用的进程,很明显是用户进程。
当然,后台进程那么多,一条一条找不得累死?所以还是得配上管道去查询。
ps -aux |grep YJA
ps -ef |grep YJA
通过ps指令,我们拿到了YJAsecAgent进程的运行路径。那么接下来就是看看该进程到底在干啥。
cd /usr/local/YJAsec
ls -al在该目录下,有个server.json文件吸引了我的目光。给出这么个json那说明该进程大概率是要联网的。所以直觉告诉我,这个文件里肯定有我所要找的答案。

既然是个json文件,那我们可以直接cat看看文件内容是啥。
cat server.json结果显示json文件里面给了一个API的路径,以及它的主机。

于是我便抱着试一试的心态,看看访问这个IP能不能找到什么,结果…不出所料,果然是和网安相关的Agent。

写者注
题外话。我依稀记得之前在深信服的时候,也见过这个YJAsecAgent进程。是VDI还是HCI还是AF上见到的倒是不太记得了。
不过最让我感到奇怪的是全网都找不到讨论这个进程的内容。这进程明明top一输马上就能看到(占用率高是这样的),但完全没人谈论过这个进程。真的有点诡异了。
那么接下来,如果你的好奇心比较强,你可以试试杀掉这个进程看看会发生什么。(这么做之前记得打快照)。如果杀不掉还可以试试kill -9强制杀死进程。当然你也可以strace一下看看该进程的系统调用。
kill 1022
kill -9 1022
strace -p 1022
值得一提的是strace还可以用来看其他linux指令的系统调用,比如
strace ls -al
strace ps -aux|grep YJA
strace echo hello
strace systemctl restart httpd
...
网络相关
netstat、nmap、ping、ip
进程方面检查完了,没啥问题。本着“事无巨细”的原则,我打算再顺便看看服务器的网络情况。
我们假设某个网站某天突然访问不了,而且在排查之后发现是服务器而非客户端的问题。当然你要用wireshark抓包也好,strace去看apache/nginx的调用也好,本文主要是说一说linux指令,故这里就不展开讲了。
那么如果是我,登上服务器后台第一件事——输个ping看看能不能ping通外网。ping指令的话没啥说的。
ping www.baidu.com
不过除了访问不通,访问卡慢也可以通过数据包的返回时间作一个大致判断。比如发30个包看看平均返回时间是多少之类的。需要区分的是ping在Windows系统设定数据包个数用的是 -n;而linux的则是 -c。
ping www.baidu.com -c 30当然你也可以先ping个IP地址看看是dns还是hosts的问题。IP能通但是域名/主机名不通,那多半就是地址映射的问题了。
如果ping完之后,发现网是通的。那就得看是不是端口没开。网站的话基本上就是看80和443端口。而看端口的话,最直接的方式就是用nmap。
nmap www.white-night.club
但如果你没装nmap,问题也不大。用netstat也可以看端口。能看到PID为1143的httpd进程正在监听80端口。

如果还是不行,那就得试试strace追踪下这些进程的系统调用了,看是在哪一步出了问题。
还有一种情况和云服务器没太大关系,主要是裸金属服务器。有时候会碰到要你自己给服务器网口配置IP的情况。那这个时候就得用到ip指令了。
ip a
可以看到就一个网口,且网口名为eth0。那么如果你想更改它的ip的话,可以用下面这条指令。需要注意的是要标明掩码
ip a add 192.168.0.123/24 dev eth0当然你也可以改路由啥的。不过整这种网络配置之前最好还是先做个快照……以防万一。