SHELL 監控LINUX目錄檔案變化

2021-09-21 20:19:12 字數 1780 閱讀 9663

最近看到群裡有人聊到他們的伺服器最近被掛馬,然後想利用乙個指令碼能夠實時監控web目錄下檔案的變化,也就是對該目錄的增刪改操作都會記錄到相應日誌下。

當時感覺這個功能的確實有點意思,所以網上查閱了些資料,自己研究了下,這會兒有空寫了個指令碼,分享給大家,如有問題,還請大家指出。

以下我寫了兩個指令碼:

指令碼1:將需要監控的目錄的原始狀態儲存到log日誌

指令碼2:將指令碼1的原始狀態與本指令碼比對,如果目錄檔案發生變化,則將變化的內容儲存到日誌。

注:原理實際上利用的是du -sb輸出值來判斷檔案的變化,再利用diff進行比對。

1.在執行指令碼前要儲存原始的狀態:

# vi initial.sh

-------------------

#!/bin/bash

path=/bin:/sbin:/usr/bin:/usr/sbin/:/usr/local/bin:/usr/local/sbin:~/bin

export path

# 監控的目錄

dir=/root

# 臨時檔案

tmp_a=/tmp/a.txt

# 遍歷指定目錄下的檔案大小及路徑並重定向到日誌檔案

find $dir -print0 | xargs -0 du -sb  > $tmp_a

-------------------

2.執行監控指令碼

# vi monitor.sh

-------------------

#!/bin/bash

path=/bin:/sbin:/usr/bin:/usr/sbin/:/usr/local/bin:/usr/local/sbin:~/bin

export path

# 監控的目錄

dir=/root

# 日期變數

date=`date +%f_%h:%m`

# 臨時檔案

tmp_a=/tmp/a.txt

tmp_b=/tmp/b.txt

tmp_c=/tmp/c.txt

# 日誌檔案

log=/var/log/filemodify.log

# 遍歷指定目錄下的檔案大小及路徑並重定向到日誌檔案

find $dir -print0 | xargs -0 du -sb  > $tmp_b

# 比較目錄變化,並將變化的檔案寫入日誌

diff=$(diff $tmp_a $tmp_b)

if [[ -z $diff ]];

then

echo "nothing change" >> $log

else

echo "here is the change" >> $log

echo "" >> $log

echo "$diff" |awk ''|sort -k2n |uniq |sed '/^$/d' |tee $tmp_c >> $log

if [ -s $tmp_c ];

then

echo "" >> $log

echo "it modified at $date" >> $log

# 將當前監控的目錄結構覆蓋為初始狀態

find $dir -print0 | xargs -0 du -sb  > $tmp_a

fifi

echo "***********************************=" >> $log

#清理臨時檔案

rm -rf $tmp_b $tmp_c

--------------------

SHELL 監控LINUX目錄檔案變化

最近看到群裡有人聊到他們的伺服器最近被掛馬,然後想利用乙個指令碼能夠實時監控web目錄下檔案的變化,也就是對該目錄的增刪改操作都會記錄到相應日誌下。當時感覺這個功能的確實有點意思,所以網上查閱了些資料,自己研究了下,這會兒有空寫了個指令碼,分享給大家,如有問題,還請大家指出。以下我寫了兩個指令碼 指...

如何用shell獲取linux目錄下的檔名呢?

遇到乙個很繁瑣的事情,有兩個目錄a b,兩個資料夾目錄裡有一些檔案的檔名是一樣,不過字尾名不同,我想把a資料夾下跟b資料夾裡相同檔名的檔案覆蓋到b去,並刪除b裡同名而不同字尾的檔案,檔案很多,我想用shell來試寫這樣乙個功能,不過本人剛接觸shell,還不清除怎麼用shell來獲取目錄下的檔名來進...

Shell指令碼監控目錄內檔案改動

bin bash webroot home www cp dev null rsync file if f file.md5 then find webroot type f e程式設計客棧xec md5sum file.md5 else for file in md5sum c file.md5g...