脚本常用监控命令

书写脚本常用监控命令

监控目标	  命令
本地端口监控	 netstat -lntup
              ss -lntup
              lsof
              
远端端口监控 	 telnet
              nc
              nmap
              
进程监控	  ps -ef
              ps aux
              
web监控	    curl
              wget
              
数据库	       mysql -uroot -p123 -e 'select ping()'
内存	        free -m
磁盘	        df -h
文件内容	  md5

本地检查端口是否开启

## 查看所有端口
[root@zabbix01 ~]# netstat -lntup

## 查看指定端口
[root@zabbix01 ~]# netstat -lntup|grep 22
 
## 精确查找端口
[root@zabbix01 ~]# netstat -lntup|grep -w '22'
 
[root@zabbix01 ~]# ss -lntup|grep -w 22
tcp    LISTEN     0      128       *:22                    *:*                   users:(("sshd",pid=770,fd=3))
tcp    LISTEN     0      128      :::22                   :::*                   users:(("sshd",pid=770,fd=4))
 
## 转化成数字
[root@zabbix01 ~]# netstat -lntup|grep -w '22'|wc -l
2
 
## 个人推荐还是使用netstat这个命令,后续我们需要监控TCP的11种状态,也用该命令
[root@zabbix01 ~]# lsof -i:22
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      770 root    3u  IPv4  19637      0t0  TCP *:ssh (LISTEN)
sshd      770 root    4u  IPv6  19646      0t0  TCP *:ssh (LISTEN)
sshd    25088 root    3u  IPv4 491299      0t0  TCP zabbix01:ssh->gateway:61954 (ESTABLISHED)
sshd    80641 root    3u  IPv4 291875      0t0  TCP zabbix01:ssh->gateway:54130 (ESTABLISHED)

远端检查端口是否开启

#1.telnet
[root@zabbix01 ~]# telnet 127.0.0.1 22
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4
## 这是一个交互式的,需要我们手动退出,所以适合在命令行使用,不适合脚本中使用
## 当然也有方法能让他不交互。
[root@zabbix01 ~]# echo | telnet 127.0.0.1 22
[root@zabbix01 ~]# echo | telnet 127.0.0.1 22  2>/dev/null|grep 'Connected'|wc -l
## 太麻烦,不推荐
  
# 2.nc   netcat 网络中的瑞士军刀,功能很牛
[root@zabbix01 ~]# echo |nc 127.0.0.1 22
SSH-2.0-OpenSSH_7.4
Protocol mismatch.
[root@zabbix01 ~]# echo $?
0 
-l:创建端口
[root@zabbix01 ~]# nc -l 8888
-k:保持连接
[root@zabbix01 ~]# nc -lk 8888
 
## 可以跟端口建立连接,传输数据 
-u:指定nc使用udp协议(默认tcp)
-s:指定发送数据的源IP地址,适用于多网卡机器
-w:设置超时时间
-z:扫描时不发送任何数据
 
# 3.nmap也是一个很牛逼的网络扫描工具,一个命令能写一本书
## 扫描IP
nmap 10.0.0.61
## 扫描一个主机的一个端口
nmap -p 22 10.0.0.61 
## 扫描一个主机的多个端口
nmap -p 22-1024 10.0.0.61
## 扫描多个主机的多个端口
nmap -p 22-1024 10.0.0.61 baidu.com

ps和top命令

# 使用ps命令查看当前的进程状态(静态查看)
查看进程[root@zls ~]# ps aux
a:显示所有与终端相关的进程,由终端发起的
u:显示用户导向的用户列表
x:显示所有与终端无关的进程

#对进程的CPU进行排序展示
[root@zls ~]# ps aux --sort %cpu |less
 
#对进程的占用物理内存排序
[root@zls ~]# ps aux --sort rss |less
 
#排序,是在记不住,那就自己排序
[root@zls ~]# ps aux|sort -k3 -n
 
#自定义显示字段
[root@zls ~]# ps axo user,pid,ppid,%mem,command |grep sshd

 
#显示进程的子进程
[root@zls ~]# ps auxf|grep [n]ginx
 
#查看指定进程PID
[root@zls ~]# ps aux|grep sshd
root       1157  0.0  0.1 105996  3604 ?        Ss   Feb27   0:00 /usr/sbin/sshd -D
[root@zls ~]# cat /run/sshd.pid
1157
 
#pgrep常用参数, -l -a
[root@zls ~]# pgrep sshd
869
1194
1307
1574
[root@zls ~]# pgrep -l sshd
869 sshd
1194 sshd
1307 sshd
1574 sshd
[root@zls ~]# pgrep -l -a sshd
869 /usr/sbin/sshd -D
1194 sshd: root@pts/0
1307 sshd: root@pts/1
1574 sshd: root@pts/2
 
#查看进程的pid
[root@zls ~]# pidof sshd
1574 1307 1194 869
 
#查看进程树 
[root@zls ~]# pstree
# top 动态监控进程
[root@zls ~]# top
#指定N秒变化时间
[root@zls ~]# top -d 1
#查看指定进程的动态信息
[root@zls ~]# top -d 1 -p 10126
[root@zls ~]# top -d 1 -p 10126,1
#查看指定用户的进程
[root@zls ~]# top -d 1 -u apache
#将 2 次 top 信息写入到文件
[root@zls ~]# top -d 1 -b -n 2 > top.txt 
top 常见指令
h   查看帮出
z   高亮显示
1   显示所有CPU的负载
s   设置刷新时间
b   高亮现实处于R状态的进程
M   按内存使用百分比排序输出
P   按CPU使用百分比排序输出
R   对排序进行反转
f   自定义显示字段
k   kill掉指定PID进程
W   保存top环境设置 ~/.toprc
q   退出
#进程ID
PID
#用户
USER
#优先级,正常为20
PR  
#nice值,正常为0,负值表示高优先级,正值表示低优先级
NI    
#虚拟内存占用
VIRT
#真实内存占用
RES
#共享内存占用
SHR
#模式状态
S
#CPU占用百分比
%CPU
#内存占用百分比
%MEM
#运行时间
TIME+
#运行命令
COMMAND

curl命令

# 1.curl命令
-I:只显示响应头信息
-H:修改请求头信息
-v:显示详细的请求过程
-L --location:跟随跳转
-s:不显示头部的统计信息
-X:指定请求方式
-w:取出指定内容,例如:%{http_code}取出状态码
-o:指定输出位置
-A:指定User-Agent
-u:指定用户名密码
 
##  举例:
## 访问百度
[root@zabbix01 ~]# curl www.baidu.com 
## 只显示响应头部信息
[root@zabbix01 ~]# curl -I www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 277
Content-Type: text/html
Date: Wed, 01 Sep 2021 01:24:34 GMT
Etag: "575e1f60-115"
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache
Server: bfe/1.0.8.18 
## 只要状态码
[root@zabbix01 ~]# curl -s -w "%{http_code}" -o /dev/null https://blog.driverzeng.com
200
[root@zabbix01 ~]# curl -s -w "%{http_code}\n" -o /dev/null https://blog.driverzeng.com
200 
## 追踪跳转
[root@zabbix01 ~]#   curl www.360buy.com
[root@zabbix01 ~]#   curl -v www.360buy.com
[root@zabbix01 ~]#   curl -v www.360buy.com -L
## -s取消头部信息,一般配合管道符使用
[root@zabbix01 ~]# curl -I https://blog.driverzeng.com|awk 'NR==1{print $2}'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
200
 
[root@zabbix01 ~]# curl -I -s https://blog.driverzeng.com|awk 'NR==1{print $2}'
200
 
## 指定用户名密码
[root@zabbix01 ~]# yum install -y nginx httpd-tools
[root@zabbix01 ~]# htpasswd -b -c /etc/nginx/auth_conf zls zls
[root@zabbix01 ~]# vim /etc/nginx/conf.d/zls.conf
server {
    listen 80;
    server_name _;
    access_log off;
 
    location /nginx_status {
        stub_status;
        auth_basic "Auth access Blog Input your Passwd!";
        auth_basic_user_file auth_conf;
    }
}
 
## 直接访问会报错401没有认证
[root@zabbix01 ~]# curl 10.0.0.61/nginx_status
<html>
<head><title>401 Authorization Required</title></head>
<body>
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
 
## 加上用户名密码就可以了
[root@zabbix01 ~]# curl -uzls:zls 10.0.0.61/nginx_status
Active connections: 1
server accepts handled requests
 5 5 3
Reading: 0 Writing: 1 Waiting: 0
 
## 但是我推荐这么访问
[root@zabbix01 ~]# curl http://zls:zls@10.0.0.61/nginx_status
Active connections: 1
server accepts handled requests
 6 6 4
Reading: 0 Writing: 1 Waiting: 0
 
## 访问的时候,可以修改我们自己的User-Agent,偷偷的,不让别人发现
[root@zabbix01 ~]# curl -A zls_chrome https://blog.driverzeng.com

wget命令

-O:指定输出位置
-r:递归下载
--debug:类似于curl的-v显示过程
-q:静默输出
--spider:不下载,就访问(爬虫模式)
 
 
[root@zabbix01 ~]# wget -r https://nginx.org/en/docs/
 
[root@zabbix01 ~]# wget -q --spider www.baidu.com
[root@zabbix01 ~]# echo $?
0
[root@zabbix01 ~]# wget -q --spider www.baidu.com/asdasda
[root@zabbix01 ~]# echo $?
8

md5命令

# 获取文件md5值
[root@zabbix01 ~]# md5sum /etc/passwd
38b06c70e862085e22f23838dc873ade  /etc/passwd
 
# 将md5值保存到文件中
[root@zabbix01 ~]# md5sum /etc/passwd > passwd.md5
 
# 检测md5
[root@zabbix01 ~]# md5sum -c passwd.md5
/etc/passwd: OK
 
# 如果内容有改动则md5会发生变化
[root@zabbix01 ~]# useradd test_md5
[root@zabbix01 ~]# md5sum -c passwd.md5
/etc/passwd: FAILED
md5sum: WARNING: 1 computed checksum did NOT match