Shell小案例(不断更新中)

1.检测数据是否被改动过


]# vim jiance.sh

#!/bin/bash

for i in `ls /etc/*.conf`
do
# i 取值 ls 查看出来的所有文件
        md5sum $i >> /tmp/a.log
        # md5sum是一种信息摘要算法,多用来检测数据的完整性,可以判断数据是否被改动过
done

]# chmod +x jiance.sh
]# ./jiance.sh 

2.定义Nginx服务状态监控

前提是Nginx安装了–with-http_stub_status_module模块,并且在配置文件/usr/local/nginx/conf/nginx.conf中起开了stub_status功能。

vim /usr/local/nginx/conf/nginx.conf
http{
	... ...
	server{
	... ...
	location /status {
			stub_status on;
		}
	... ...
	}
}

则通过curl -s http://192.168.1.10/status可以得到Nginx的服务状态

]# curl  http://192.168.2.100/status
Active connections: 1 
server accepts handled requests
10 10 3 
Reading: 0 Writing: 1 Waiting: 0

查看状态脚本如下:
vim nginx_status.sh

#!/bin/bash

active=$(curl -s 192.168.1.10/status | awk 'NR==1{print $3}')
accepts=$(curl -s 192.168.1.10/status | awk 'NR==3{print $1}')
handled=$(curl -s 192.168.1.10/status | awk 'NR==3{print $2}')
requests=$(curl -s 192.168.1.10/status | awk 'NR==3{print $3}')
waiting=$(curl -s 192.168.1.10/status | awk 'NR==4{print $6}')
	
echo "active:$active"
echo "accepts:$accepts"
echo "requests:$requests"
echo "waiting:$waiting"
#### 直接运行脚本即可显示全部内容
########手动使用脚本查询##########
#!/bin/bash
case $1 in
active)
    curl -s http://192.168.2.100/status |awk '/Active/{print $NF}';;
waiting)
    curl -s http://192.168.2.100/status |awk '/Waiting/{print $NF}';;
accepts)
    curl -s http://192.168.2.100/status |awk 'NR==3{print $2}';;
esac
####使用方法: nginx_status.sh active或waiting或accepts来查询

3.编写监控脚本

具体监控项目如下:
1.CPU负载
2.网卡流量
3.内存剩余容量
4.磁盘剩余容量
5.计算机账户数量
6.当前登录账户数量
7.计算机当前开启的进程数量
8.本机已安装的软件包数量

#] vim jiankong.sh
#!/bin/bash
ip=`ifconfig eth0| awk '/inet/{print $2}'`
echo "本地IP是:"$ip
cpu=`uptime | awk '{print $NF}'`
echo "本机CPU最近15分钟的负载是:"$cpu
net_in=`ifconfig eth0 | awk '/RX p/{print $5}'`
echo "入站网卡的流量为:"$net_in
net_out=`ifconfig eth0 | awk '/TX p/{print $5}`
echo "出站网卡的流量为:"$net_out
mem=`free | awk '/Mem/{print $4}'`
echo "内存的剩余容量为:"$mem
disk=`df | awk '/\/$/{print $4}'`
echo "根分区剩余容量为:"$disk
user=`cat /etc/passwd | wc -l`
echo "本地账户数量为:"$user
login=`who | wc -l`
echo "当前登录计算机的账户数量为:"$login
process=`ps aux | wc -l`
echo "当前计算机启动的进程数量为:"$process
soft=`rpm -qa | wc -l`
echo "当前计算机已安装的软件数量为:"$soft

4.获取IP访问服务的次数

以Httpd服务为例,查看客户端IP访问Httpd服务的次数

]# vim count_ip
#!/bin/bash
//成功访问服务的次数和IP地址
awk '{print $1}' /etc/httpd/logs/access_log  | awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}'
//检测ssh登录日志,显示远程登陆账号名错误3次的IP
awk '/Invalid user/{print $10}' /var/log/secure  | awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' | awk '$1>3{print $2}'
//检测ssh登录日志,显示远程登陆密码错误3次的IP
awk '/Failed password/{print $11}' /var/log/secure  | awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' | awk '$1>3{print $2}'

5.统计页面访问量排名

分析web日志的访问量排名,获得客户机的地址和访问次数,并按照访问次数排名.

  1. web日志文件的每条访问记录的第一列就是客户机的IP地址,其中会有很多重复的IP地址.因此还需要统计重复记录的数量,并进行排序;
  2. 通过awk提取信息时,利用IP地址作为数组下标,每遇到一个重复值就将此数组元素递增1,最终就获得了这个IP地址出现的次数
  3. 针对文本排序输出,采用sort命令,其中-n表示按数字升序排列,而-r表示反序,-k可以指定按第几个字段来排序.
    ]# ceshi.sh
#!/bin/bash
awk '{ip[$1]++} END{for (i in ip){print ip[i],i}}' /var/log/httpd/access_log | sort -nr

6.统计页面的PV和UV

pv(Page View):页面的访问量,每打开一次页面或刷新一次页面,PV计数+1
UV(Unique Visitor):指独立访客访问数,一台电脑终端为一个访客
在web日志文件中,每条访问记录就是一个页面打开或刷新页面的记录,.则可以通过统计web日志文件的行数来确定网站的PV.
web日志文件的每条访问记录的第一列就是客户机的IP地址,但其中会有很多IP重复出现,我们还需要去重,在这里我们可以利用5.统计页面访问量排名的方法去重,在统计行数即可.
vim test.sh

#!/bin/bash
pv=`wc -l /usr/local/nginx/logs/access.log`
uv=`awk '{ip[$1]++} END{for (i in ip){print ip[i],i}}' /var/log/httpd/access_log | sort -nr | wc -l`
echo "点击量为(PV):" $pv
echo "访客数量(uv):" $uv
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值