前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >linux下监控某个目录是否被更改

linux下监控某个目录是否被更改

作者头像
洗尽了浮华
发布于 2018-01-23 07:59:22
发布于 2018-01-23 07:59:22
5.8K00
代码可运行
举报
文章被收录于专栏:散尽浮华散尽浮华
运行总次数:0
代码可运行

需求:对一个目录(比如/data/test)进行监控,当这个目录下文件或子目录出现变动(如修改、创建、删除、更名等操作)时,就发送邮件! 针对上面的需求,编写shell脚本如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@centos6-vm01 opt]# vim file_monit.sh
#!/bin/bash
#此脚本用于检测linux系统重要文件是否被改动,如果改动则用邮件报警
#建议用定时任务执行此脚本,如每5分钟执行一次,也可修改此脚本用于死循环检测
#Ver:1.0
#http://www.cnblogs.com/kevingrace

#定义验证文件所在目录
FileDir='/var/CheckFile'

#获取主机名或自己定义
HostName=$(hostname)

#定义邮件参数:xmtp地址,发送邮件帐号,发送邮件密码,接收邮件地址,邮件主题,邮件内容
Mail_Smtp="smtp.wangshibo.com"
Mail_User="notice@wangshibo.com"
Mail_Pass="notice@123"
Mail_From="notice@wangshibo.com"
Mail_To="wangshibo@wangshibo.com"
Mail_Subject="${HostName}:There are changes to system files"
Mail_Conntent="${HostName}:There are changes to system files"

#定义需要验证的文件目录。这里我监控的是/data/test目录
CheckDir=(
/data/test
)

#生成所定义需验证的文件样本日志函数
OldFile () {
for i in ${CheckDir[@]}
do
/bin/find ${i} -type f |xargs md5sum >> ${FileDir}/old.log
done
}
NewFile () {
for i in ${CheckDir[@]}
do
/bin/find ${i} -type f |xargs md5sum >> ${FileDir}/new.log
done
}

#生成所定义文件新日志函数(注意后面发送邮件内容,\n表示换行)
SendEMail () {
/usr/local/bin/sendEmail -f $Mail_From -t $Mail_To -s $Mail_Smtp -u $Mail_Subject -xu $Mail_User -xp $Mail_Pass -m "$Mail_Conntent"\n
}
if [ ! -d ${FileDir} ]
then
mkdir ${FileDir}
fi

#假如验证文件目录不存在则创建
if [ ! -f ${FileDir}/old.log ]
then
OldFile
fi

#假如没有安装sendEmail则安装
if [ ! -f /usr/local/bin/sendEmail ]
then
cd /usr/local/src/
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
tar -xf sendEmail-v1.56.tar.gz
cd sendEmail-v1.56
cp sendEmail /usr/local/bin
chmod 0755 /usr/local/bin/sendEmail
fi

#生成新验证日志
NewFile

#新验证日志与样本日志进行比较
/usr/bin/diff ${FileDir}/new.log ${FileDir}/old.log >${FileDir}/diff.log
Status=$?

#假如比较结果有变化,则发送邮件报警
if [ ${Status} -ne 0 ]
then
Mail_Conntent="$(grep '<' ${FileDir}/diff.log |awk '{print $3}')"
SendEMail
fi

#清除新旧日志,把比较结果进行备份
/bin/mv -f ${FileDir}/diff.log ${FileDir}/diff$(date +%F__%T).log
cat /dev/null > ${FileDir}/old.log
cat /dev/null > ${FileDir}/new.log

#重新生成样本日志
OldFile

#删除目录内30天以前的比较结果备份文件
/bin/find ${FileDir} -type f -mtime +30 |xargs rm -f

确保本机能连上shell脚本中指定的smtp服务器的25好端口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@centos6-vm01 opt]# telnet smtp.wangshibo.com 25
Trying 223.252.214.65...
Connected to smtp.wangshibo.com.
Escape character is '^]'.
220 icoremail.net Anti-spam GT for Coremail System (icoremail-gateway-smtp[20170531])

下面开始测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@centos6-vm01 test]# cd /opt/
[root@centos6-vm01 opt]# cd /data/test/
[root@centos6-vm01 test]# ll
total 0
[root@centos6-vm01 test]# mkdir haha
[root@centos6-vm01 test]# echo "123456" > haha/heihei
[root@centos6-vm01 test]# ll
total 4
drwxr-xr-x. 2 root root 4096 Jan 10 01:42 haha
[root@centos6-vm01 test]# echo "abcdef" > test.txt
[root@centos6-vm01 test]# ll
total 8
drwxr-xr-x. 2 root root 4096 Jan 10 01:42 haha
-rw-r--r--. 1 root root    7 Jan 10 01:42 test.txt

执行监控脚本
[root@centos6-vm01 test]# sh -x /opt/file_monit.sh

注意:当首次执行脚本的时候,由于所监控的目录下的文件没有变动,所以不会发送邮件!

查看对比后的日志
[root@centos6-vm01 test]# ll -d /var/CheckFile/
drwxr-xr-x. 2 root root 4096 Jan 10 01:44 /var/CheckFile/
[root@centos6-vm01 test]# ll /var/CheckFile/
total 4
-rw-r--r--. 1 root root   0 Jan 10 01:44 diff2018-01-10__01:44:30.log
-rw-r--r--. 1 root root   0 Jan 10 01:44 new.log
-rw-r--r--. 1 root root 166 Jan 10 01:44 old.log

[root@centos6-vm01 test]# cat /var/CheckFile/diff2018-01-10__01\:44\:30.log 
[root@centos6-vm01 test]# cat /var/CheckFile/new.log                        
[root@centos6-vm01 test]# cat /var/CheckFile/old.log 
237267ea7fefa88360c22ab6fd582d7e  /data/test/.hhhh.swp
5ab557c937e38f15291c04b7e99544ad  /data/test/test.txt
f447b20a7fcbf53a5d5be013ea0b15af  /data/test/haha/heihei


==============================================================================================================================
现在开始对/data/test目录下的文件做下变动
[root@centos6-vm01 test]# echo "aaaaaa" >> test.txt 
[root@centos6-vm01 test]# touch haha/bobo
[root@centos6-vm01 test]# mkdir heihei
[root@centos6-vm01 test]# ll
total 12
drwxr-xr-x. 2 root root 4096 Jan 10 01:47 haha
drwxr-xr-x. 2 root root 4096 Jan 10 01:47 heihei
-rw-r--r--. 1 root root   14 Jan 10 01:47 test.txt

执行监控脚本
[root@centos6-vm01 test]# sh -x /opt/file_monit.sh 


查看对比后的日志
[root@centos6-vm01 test]# ll /var/CheckFile/
total 8
-rw-r--r--. 1 root root   0 Jan 10 01:44 diff2018-01-10__01:44:30.log
-rw-r--r--. 1 root root 179 Jan 10 01:47 diff2018-01-10__01:47:41.log
-rw-r--r--. 1 root root   0 Jan 10 01:47 new.log
-rw-r--r--. 1 root root 221 Jan 10 01:47 old.log
[root@centos6-vm01 test]# cat /var/CheckFile/diff2018-01-10__01\:47\:41.log 
2,3c2
< 4533551682ca49b2f9b1f2829bf3b29d  /data/test/test.txt
< d41d8cd98f00b204e9800998ecf8427e  /data/test/haha/bobo
---
> 5ab557c937e38f15291c04b7e99544ad  /data/test/test.txt

[root@centos6-vm01 test]# cat /var/CheckFile/old.log 
237267ea7fefa88360c22ab6fd582d7e  /data/test/.hhhh.swp
4533551682ca49b2f9b1f2829bf3b29d  /data/test/test.txt
d41d8cd98f00b204e9800998ecf8427e  /data/test/haha/bobo
f447b20a7fcbf53a5d5be013ea0b15af  /data/test/haha/heihei

通过上面的diff日志,可以看到新变动的文件或子目录已经记录到日志里了。

查看邮件,就能看到/data/test目录下变动的文件或子目录信息了

通过crontab定时任务,每5分钟执行一次检查:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@centos6-vm01 test]# crontab -e
*/5 * * * *  /bin/bash -x /opt/file_monit.sh > /dev/null 2>&1

以上脚本也可以用于检测linux系统重要文件是否被更改,只需将检查的目录由脚本中的/data/test改为/etc即可!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
企业运维经典面试题汇总(4)
1、如何过滤出已知当前目录下yangwen中的所有一级目录(提示:不包含yangwen目录下面目录的子目录及隐藏目录,即只能是一级目录)? 解答: 方法1:通过find直接查找指定类型的文件 [ro
释然IT杂谈
2020/08/25
4900
LB层到Real Server之间访问请求的响应时间及HTTP状态码监控及报警设置
为了监控到各业务的访问质量,基于LB层的Nginx日志,实现LB层到Real Server之间访问请求的响应时间(即upstream_response_time)及HTTP状态码(即upstream_status)的监控及报警。操作记录如下:
洗尽了浮华
2022/03/29
6260
LB层到Real Server之间访问请求的响应时间及HTTP状态码监控及报警设置
Linux基础01
重命名:[root@localhost-0723 house]# mv roo3room3
Dlimeng
2023/06/27
1590
ping监控脚本案例分析
案例一 [root@test opt]# cat /opt/hosts_ip_list 192.168.10.10 192.168.10.11 192.168.10.12 192.168.10.13 192.168.10.14 192.168.10.15 192.168.10.16 192.168.10.17 [root@test opt]# cat /opt/hosts_ip_monit.sh #!/bin/bash for ip in $(cat /opt/hosts_ip_list)
洗尽了浮华
2018/05/28
9030
linux使用sendEmail发送邮件
http://caspian.dotconf.net/menu/Software/SendEmail/
cuijianzhe
2022/06/14
1.4K0
linux使用sendEmail发送邮件
MFS+Keepalived双机高可用热备方案操作记录
基于MFS的单点及手动备份的缺陷,考虑将其与Keepalived相结合以提高可用性。在Centos下MooseFS(MFS)分布式存储共享环境部署记录这篇文档部署环境的基础上,只需要做如下改动: 1)将master-server作为Keepalived_MASTER(启动mfsmaster、mfscgiserv) 2)将matelogger作为Keepalived_BACKUP(启动mfsmaster、mfscgiserv) 3)将ChunkServer服务器里配置的MASTER_HOST参数值改为VIP地
洗尽了浮华
2018/01/22
1.9K0
MFS+Keepalived双机高可用热备方案操作记录
mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理
在mysql工作中接触最多的就是mysql replication,mysql在复制方面还是会有一些常规问题,比如主库宕机或者从库宕机有可能会导致复制中断,通常需要进行人为修复,或者很多时候需要把一个从库提升为主库,但对从库和主库的数据一致性不能保证一样。这种情况下就需要使用percona-toolkit工具的pt-table-checksum组件来检查主从数据的一致性;如果发现不一致的数据,可以通过pt-table-sync修复;还可以通过pt-heartbeat监控主从复制延迟。当然如果数据量小,sla
洗尽了浮华
2018/01/22
3.3K0
运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)
对于Linux系统安全来说,日志文件是极其重要的工具。不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过!logrotate程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用。可以节省磁盘空间。下面就对logrotate日志轮转操作做一梳理记录: 1)配置文件介绍 Linux系统默认安
洗尽了浮华
2018/01/23
4.2K0
linux下文件加密操作记录
为了安全考虑,通常会对一些重要文件进行加密备份或加密保存,下面对linux下的文件加密方法做一简单介绍: 一、 ZIP加密 1)文件加密 使用命令"zip -e filename.zip filename" 即可出现输入密码的提示,输入2次密码。 此文件即被加密解压时候是需要密码的 下面开始为test.txt文件进行加密 [root@centos6-vm02 ~]# cat test.txt this is a test!!! [root@centos6-vm02 ~]# zip -e test.txt.
洗尽了浮华
2018/01/23
3.2K0
Linux必会基础命令
废柴阿尤
2023/12/18
2380
Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录
在日常的linux运维工作中,大数据量备份与还原,始终是个难点。关于mysql的备份和恢复,比较传统的是用mysqldump工具,今天这里推荐另一个备份工具innobackupex。innobackupex和mysqldump都可以对mysql进行热备份的,mysqldump对mysql的innodb的备份可以使用single-transaction参数来开启一个事务,利用innodb的mvcc来不进行锁表进行热备份,mysqldump备份是逻辑备份,备份出来的文件是sql语句,所以备份和恢复的时候很慢,但
洗尽了浮华
2018/01/23
2.3K0
linux每日命令(28):chgrp命令
在linux系统里,文件或目录的权限的掌控以拥有者及所属群组来管理。可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以。Chgrp命令就是change group的缩写!要被改变的组名必须要在/etc/group文件内存在才行。
用户1214487
2018/12/19
4320
Linux 基础的文件目录操作命令
Linux 基础的文件目录操作命令,融合多部Linux经典著作,去除多余部分,保留实用部分。
王 瑞
2022/12/28
2.2K0
分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署
前面几篇陆续介绍了zabbix3.0.3监控系统的部署和监控项配置,今天这里分享下zabbix3.0.3的邮件报警的配置过程~ 由于采用sendmail发送邮件,常常会被认为是垃圾邮件被拒,所以不推荐这种方式! 这里,针对zabbix报警信息的发送,可以采用下面两种方式中的任意一种: 1)利用sendEmail程序来发送报警邮件.sendEmail是一个轻量级,命令行的SMTP邮件客户端,非常完美,使用简单并且功能强大.这个被设计用在php、bash 、perl和web站点使用。 2)利用python脚本来
洗尽了浮华
2018/01/23
1K0
分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署
企业实战(21)基于Linux下安装部署GeoServer地图服务
GeoServer 2.17.2下载:https://nchc.dl.sourceforge.net/project/geoserver/GeoServer/2.17.2/geoserver-2.17.2-bin.zip
非著名运维
2022/06/22
1.9K0
企业实战(21)基于Linux下安装部署GeoServer地图服务
2 Linux 基础命令
cd 路径/目录名称:这个命令将当前目录更改为提交的路径。例如:cd home/user/documents将切换到 documents目录。
Lemon黄
2023/11/27
2090
2 Linux 基础命令
Linux文件管理
相对路径:不以斜线开始,制定相对于当前工作目录活某目录的位置,可以作为一个简短的星矢制定一个文件名
鱼丸葱面
2020/12/09
4K0
Linux文件管理
shell+curl监控网站页面(域名访问状态),并利用sedemail发送邮件
应领导要求,对公司几个主要站点的域名访问情况进行监控。下面分享一个监控脚本,并利用sendemail进行邮件发送。 监控脚本如下: 下面是写了一个多线程的网站状态检测脚本,直接从文件中读出站点地址,然后用curl去检测返回码,发现速度非常好,基本几秒钟内就能出结果。 [root@bastion-IDC ~]# cat url-monit.sh #!/bin/bash #取出网站数据 data=`cat /root/url.list` if [ -z "$data" ];then echo "Fai
洗尽了浮华
2018/01/23
2.7K0
shell+curl监控网站页面(域名访问状态),并利用sedemail发送邮件
Linux系统组建SVN服务器
SVN是一款非常优秀的版本管理工具,与CVS管理工具一样,SVN 是一种跨平台的开源的版本控制系统,它会备份并记录每个文件每一次的修改更新变动
民工哥
2020/09/16
2.6K0
Linux系统组建SVN服务器
掌握Linux文件权限,看这篇就够了
#前言 我们知道,无论什么东西,涉及到安全性的,比如文件、文件夹、磁盘(就如window系统的磁盘,我们就可以通过bitlocker技术将磁盘给加密锁起来)、服务器,等都需要设置权限管理,以保证安全性,接下来让我们来探讨以下Linux的文件权限。
老油条IT记
2020/09/04
2.6K0
掌握Linux文件权限,看这篇就够了
相关推荐
企业运维经典面试题汇总(4)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验