企业实战
shell企业案例实战
企业中常用的监控命令
端口检查
本地端口检查
# netstat
[root@m01 ~]# netstat -lntup | grep [s]shd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 8885/sshd
tcp6 0 0 :::22 :::* LISTEN 8885/sshd
[root@m01 ~]# netstat -lntup | grep -w '22'
# 脚本式
[root@m01 ~]# vim test1.sh
#!/bin/bash
# File Name: __test1.sh__
# Version: __v1.1__
# Author: __WC__
# Mail: __2794552827@qq.com__
# Blog: __https://blog.driverzeng.com__
# DateTime: __2022-07-21 11:08__
ip=$1
port=22
port1=`netstat -lntup | grep -w '22'|wc -l`
if [ ${port1} -ne 0 ];then
echo "$port 端口"
fi
[root@m01 ~]# sh test1.sh
22 端口
# ss
[root@m01 ~]# ss -lntup | grep -w '22'
udp UNCONN 0 0 172.16.1.61:123 *:* users:(("ntpd",pid=7274,fd=22))
tcp LISTEN 0 128 *:22 *:* users:(("sshd",pid=8885,fd=3))
tcp LISTEN 0 128 :::22 :::* users:(("sshd",pid=8885,fd=4))
# lsof(需要下载)
[root@m01 ~]# lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 8885 root 3u IPv4 53299 0t0 TCP *:ssh (LISTEN)
sshd 8885 root 4u IPv6 53309 0t0 TCP *:ssh (LISTEN)
sshd 10228 root 3u IPv4 57420 0t0 TCP m01:ssh->10.0.0.1:54674 (ESTABLISHED)
sshd 10758 root 3u IPv4 60707 0t0 TCP m01:ssh->10.0.0.1:55082 (ESTABLISHED)
# nc网络中的瑞士军刀
[root@m01 ~]# echo ''|nc 172.16.1.7 22
SSH-2.0-OpenSSH_7.4
Protocol mismatch.
[root@m01 ~]# echo $?
0
# 选项
-l:开启一个指定的端口
-k:保持端口持续连接
-u:指定nc使用udp协议
-s:指定发送数据的源IP地址,适用于多网卡机器
-w:设置超时时间
-z:扫描时不发送任何数据
# nmap
# 单个IP扫描
[root@m01 ~]# nmap 172.16.1.7
# 单个IP的单个端口扫描
[root@m01 ~]# nmap -p 22 172.16.1.7
# 单个IP的范围端口扫描
[root@m01 ~]# nmap -p 1-212 172.16.1.7
# 多个IP的范围端口扫描
[root@m01 ~]# nmap -p 1-212 172.16.1.7 172.16.1.8
使用脚本判断远程端口是否存活
# telnet
[root@m01 ~]# telnet 172.16.1.7 22
Trying 172.16.1.7...
Connected to 172.16.1.7.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4
# 脚本
[root@m01 ~]# vim test1.sh
#!/bin/bash
# File Name: __test1.sh__
# Version: __v1.1__
# Author: __WC__
# Mail: __2794552827@qq.com__
# Blog: __https://blog.driverzeng.com__
# DateTime: __2022-07-21 11:08__
. /etc/init.d/functions
ip=$1
for port in `seq 100`;do
{
port1=`echo '123'|telnet $ip ${port} 2>/dev/null |grep Connected|wc -l`
if [ ${port1} -ne 0 ];then
action "${port} 端口存在" /bin/true
fi
} &
done
[root@m01 ~]# sh test1.sh 172.16.1.7
22 端口存在 [ OK ]
80 端口存在 [ OK ]
进程判断
[root@m01 ~]# ps -ef |grep [n]ginx
# 远程进程检测
[root@m01 ~]# ssh 172.16.1.7 ps -ef |grep [n]ginx
# 脚本
[root@m01 ~]# vim test1.sh
#!/bin/bash
# File Name: __test1.sh__
# Version: __v1.1__
# Author: __WC__
# Mail: __2794552827@qq.com__
# Blog: __https://blog.driverzeng.com__
# DateTime: __2022-07-21 11:08__
ip=172.16.1.7
port=`ssh ${ip} ps -ef |grep [n]ginx|wc -l`
if [ $port -eq 0 ];then
echo 'nginx 不存在'
else
echo 'nginx 存在'
fi
网站检查
# curl
# 选项
- I :获取主机响应头部信息
- s :取消默认输出
- o :保存下载页面内容
- w :获取状态码
- u :身份认证 -u 用户名:密码
- H:添加请求头部信息
- v:显示详细信息
- L:跟随跳转
- x:指定请求方式
- A:修改用户的客户端
# 检测网站状态
[root@m01 ~]# curl -uzls:zls -s -w "%{http_code}" -o /dev/null blog.wc.com
[root@m01 ~]# curl -s -w "%{http_code}" -o/dev/null http://用户名:密码@www.wc.com
[root@m01 ~]# curl -v http://www.360buy.com -L
# 脚本
[root@m01 ~]# vim test1.sh
#!/bin/bash
# File Name: __test1.sh__
# Version: __v1.1__
# Author: __WC__
# Mail: __2794552827@qq.com__
# Blog: __https://blog.driverzeng.com__
# DateTime: __2022-07-21 11:08__
web=`curl -uzls:zls -s -w "%{http_code}" -o /dev/null $1`
if [[ ${web} =~ [2-3] ]];then
echo '业务正常'
elif [[ ${web} =~ 401 ]];then
echo '输入密码'
else
echo '网站无法访问'
fi
# wget
# 选项
-O:保存下载页面
-r:递归下载
--debug:显示访问详细过程 类似 curl -v
-q :静默输出
--sqider:只查看不下载
文件检测
[root@m01 ~]# vim 1.txt
[root@m01 ~]# md5sum 1.txt
e6ace1b95f3ef8da537f03c4934e7abb 1.txt
[root@m01 ~]# md5sum 1.txt > /opt/md5.txt
[root@m01 ~]# md5sum -c /opt/md5.txt
1.txt: OK
[root@m01 ~]# echo 111 1.txt
111 1.txt
[root@m01 ~]# echo '111'> 1.txt
[root@m01 ~]# md5sum -c /opt/md5.txt
1.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
作业
1.1.监控系统内存,如果不足30%就发送邮件告警通知运维人员
[root@m01 ~]# vim fm.sh
#!/bin/bash
# File Name: __fm.sh__
# Version: __v1.1__
# Author: __WC__
# Mail: __2794552827@qq.com__
# Blog: __https://blog.driverzeng.com__
# DateTime: __2022-07-22 17:17__
for i in 7 8;do
men=`ssh 172.16.1.$i free -m|awk 'NR==2{print ($4+$6)/$2}'`
men1=`echo $men |awk '{printf ("%.0f",$1*10000)}'`
if [[ $men1 -lt 3000 ]];then
mail -s '内存小于30%' 2794552827@qq.com >/dev/null
fi
done
[root@m01 ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null
01 03 * * * /usr/sbin/sh /root/fm.sh &>/dev/null
2.检查nginx是否正常,业务是否正常
[root@m01 ~]# vim test1.sh
#!/bin/bash
# File Name: __test1.sh__
# Version: __v1.1__
# Author: __WC__
# Mail: __2794552827@qq.com__
# Blog: __https://blog.driverzeng.com__
# DateTime: __2022-07-21 11:08__
ip=172.16.1.7
web=`curl -uzls:zls -s -w "%{http_code}" -o /dev/null $1`
port=`ssh ${ip} ps -ef |grep [n]ginx|wc -l`
if [ $port -eq 0 ];then
echo 'nginx 不存在'
else
echo 'nginx 存在'
fi
if [[ ${web} =~ [2-3] ]];then
echo '业务正常'
elif [[ ${web} =~ 401 ]];then
echo '输入密码'
else
echo '网站无法访问'
fi