6. 檢測兩臺機器上檔案的差異
生產環境下,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 '{print \$1}'\`
for i in \`seq 1 \$n\`
do
file_name=\`sed -n "\$i"p /tmp/md5.list |awk '{print \$2}'\`
md5=\`sed -n "\$i"p /tmp/md5.list |awk '{print \$1}'\`
if [ -f \$file_name ]
then
md5_b=\`md5sum \$file_name |awk '{print \$1}'\`
if [ \$md5_b != \$md5 ]
then
echo "\$file_name changed."
fi
else
echo "\$file_name lose."
fi
done > /tmp/change.log
EOF
scp /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值
相關文章
- Git比對檔案之間的差異Git
- awk比較檔案內容的差異
- 檢測input file檔案是否上傳
- 檢測不同伺服器上程式碼差別的shell的指令碼伺服器指令碼
- 檔案上傳漏洞防範-檔案型別檢測型別
- 一臺機器上安裝兩個MysqlMySql
- 錄製回放效果差異檢測 | 自動化測試
- 檔案上傳的異常
- 差異檔案(diff)和補丁檔案(patch)簡介
- 檔案上傳——客戶端檢測繞過(JavaScript檢測)(一)客戶端JavaScript
- grep -vFf 比較2個檔案差異
- Linux下檔案差異比較工具Linux
- 比較兩個資料庫的差異資料庫
- 比較兩個的表結構差異
- 兩表中某列的資料差異
- 虛擬機器的檔案怎麼複製出來 如何把虛擬機器上的檔案拷到電腦上虛擬機
- SQL Server 2008 差異檔案備份SQLServer
- 將一臺伺服器上的日誌檔案拷貝到另外一臺上伺服器
- 忽略檢測png檔案
- 檢測檔案到末尾
- 6. 抹平差異,統一型別轉換服務ConversionService型別
- Windows 機器通過 FTP 上傳檔案WindowsFTP
- javascript檢測上傳檔案的格式和大小例項程式碼JavaScript
- Linux求兩個文字檔案的交集、差集、並集Linux
- postman測試多檔案上傳,並且後臺接收檔案陣列Postman陣列
- js檢測上傳檔案型別程式碼例項JS型別
- 6.管理控制檔案(筆記)筆記
- linux 兩臺機器新增信任,實現不用密碼訪問,互傳檔案Linux密碼
- 下載GitHub上檔案的兩種方法Github
- 異常檢測
- 比對兩個資料庫的差異:Java篇資料庫Java
- 淺析Java語言中兩種異常的差別Java
- 使用Visual Studio進行檔案差異比較
- iOS文字檔案的編碼檢測iOS
- 檔案上傳測試
- 測試上傳檔案
- 軟體測試:SVN與Git的差異Git
- 【SpringMVC】檔案上傳與下載、攔截器、異常處理器SpringMVC