6 檢測兩台機器上檔案的差異

2021-09-09 08:54:04 字數 2100 閱讀 6654

生產環境下,web伺服器大多會做負載均衡,所以有多台機器上跑著同樣的web程式**。如果嚴格按照規範流程上線,即不人為特意更改**,那麼這多台機器上的**一定是一樣的,並不會存在兩台機器同乙個檔案內容不同的情況。本案例的需求就是要檢查兩台機器同乙個檔案的差異,畢竟我們不確定伺服器上的**是否有人為改動過。

具體要求如下:

1)兩台機器a和b,檢查目標目錄為 /data/wwwroot/www.abc.com ,路徑一致;

2)需要過濾 uploads、tmp 兩個目錄,這兩個目錄的檔案不需要對比差異;

3)以a機器上的檔案作為標準,b機器少了檔案和改了檔案需要記錄,多了檔案不用考慮;

4)假設a機器可以免密登入b機器;

5)把有差異和缺少的檔案列表記錄到 /data/change.log 。

#!/bin/bash

##對比兩機器上的檔案差異

#假設b機器ip為192.168.0.110

b_ip=192.168.0.110

dir=/data/wwwroot/www.abc.com

#首先檢查 /tmp/mkd5.list 檔案是否存在,存在的話就刪除掉,避免影響後續操作

[ -f /tmp/md5.list ]

&&rm -f /tmp/md5.list

#把除了uploads和tmp目錄外的其它目錄下的所有檔案全部列出來

cd$dir

find

. \(-path "./uploads*" -o -path "-/tmp*" \) -prune -o -type f > /tmp/file.list

#用while迴圈,求出所有檔案的md5值,並寫入乙個檔案裡

cat /tmp/file.list |

while

read line

do md5sum $line

done

> /tmp/md5.list

#將 /tmp/md5.list 拷貝到b機器

scp /tmp/md5.list $b_ip:/tmp/

#判斷 /tmp/check_md5.sh 檔案是否存在,存在的話就刪除掉

[ -f /tmp/check_md5.sh ]

&&rm -f /tmp/check_md5.sh

#用here document編寫 check_md5.sh 指令碼內容

cat<< eof > /tmp/check_md5.sh

#!/bin/bash

dir=/data/wwwroot/www.abc.com

##注意:這裡的特殊字元都需要脫義,比如反引號和$

cd \$dir

n=\`

wc -l /tmp/md5.list |

awk''\`

for i in \`

seq 1 \$n\`

do file_name=\`

sed -n "\$i"p /tmp/md5.list |

awk''\`

md5=\`

sed -n "\$i"p /tmp/md5.list |

awk''\`

if[ -f \$file_name

]then

md5_b=\`md5sum \$file_name |

awk''\`

if[ \$md5_b

!= \$md5

]then

echo

"\$file_name changed."

fielse

echo

"\$file_name lose."

fidone

> /tmp/change.log

eofscp /tmp/check_md5.sh $b_ip:/tmp/

ssh$b_ip

"/bin/bash /tmp/check_md5.sh"

指令碼中,

1)find命令的 -path 選項類似於shell中的正則匹配,-prune -o 組合在一起使用,會把 -prune前面的匹配排除掉

2)要想比較兩個檔案是否一樣,只需要對比它們的md5值即可。md5sum命令可以求出檔案的md5值

打通兩台機器的ssh功能

1,如果希望打通 a 和 b 兩台機器,則要用相同的使用者賬號打通才行,如都用tscadmin 2,如果希望從 a 機器用tscadmin賬號能拷貝b的資料 tscadmin a scp b home tscadmin filename1 filename2 則 需要在a機器上用tscadmin生成...

測量兩台機器的網路延時

time time t 秒 ftime struct timeb 毫秒 gettimeofday 2 struct timespec 微秒 clock gettime 2 struct timespec 納秒 muduo計時使用的是gettimeofday 2 獲取當前時間此函式在使用者態實現的不存...

兩台機器傳輸秘鑰問題的解決方法

因為公司的伺服器連線是通過xshell公鑰和密碼連線的,今天在ssh分發秘鑰的時候出現了,下面的錯誤 1 2 root iz2ze97cumk8opqm28h8z ssh ssh copy id i root ssh id dsa.pub root 123.56.82.168 p 52808 per...