shell_tools/cvs
2024-02-19 17:17:04 +08:00

166 lines
6.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 使用 ClamAV 扫描病毒脚本
# 参数配置
## 版本号
VERSION=0.2.0
## 当前的日期、日期时间
date=`date +%Y%m%d`
datetime=`date +%Y%m%d`_`date +%H%M%S`
## 需要扫描的文件夹(绝对路径)
scanDir=${1:-/}
## 病毒文件处理模式【0不处理1复制到指定目录、2移动至指定目录、3直接删除不推荐
model=${2:-2}
## 工作目录
workPath=${3:-/opt/clamav}
## 包管理器【yumYUMdnfDNFzypperZYPPER】
packageInstaller=${4:-yum}
## 病毒文件复制/转移文件夹(仅 model 为 1、2 时生效)
virusPath=${workPath}/scan_${datetime}/virus
## 日志文件目录
logsPath=${workPath}/scan_${datetime}/logs
## 疑似病毒文件数量
infectedFileNumber=0
# 相关方法
## 帮助信息
help () {
echo 'Usage: cvs 需要扫描的目录 处理方式 工作目录 包管理器'
echo '参数说明:'
echo ' $1 需要扫描的目录,不配置时默认全盘扫描'
echo ' $2 病毒文件的处理方式,不配置时默认为 2'
echo ' 0 不处理;'
echo ' 1 复制到指定目录;'
echo ' 2 移动至指定目录;'
echo ' 3 直接删除(不推荐)'
echo ' $3 工作目录,用于输出日志、存放病毒文件,不配置时默认为 /opt/clamav 目录'
echo ' $4 包管理器,支持 yum、zypper不配置时默认根据操作系统自动选择'
echo '示例:'
echo ' 全盘扫描,使用默认配置: cvs'
echo ' 扫描 HOME 目录,使用默认配置: cvs /home'
echo ' 全盘扫描,不处理病毒文件: cvs / 0'
echo ' 扫描 HOME 目录,不处理病毒文件: cvs /home 0'
echo ' 全盘扫描,将日志文件保存至 /tmp/clamav 目录,同时将扫描出的病毒文件也移动至此目录: cvs / 2 /tmp/clamav'
echo ' 扫描 HOME 目录,将日志文件保存至 /tmp/clamav 目录,同时将扫描出的病毒文件也移动至此目录: cvs /home 2 /tmp/clamav'
}
## 版本号
version () {
echo 'cvs '$VERSION
}
## 创建文件夹
createPath () {
echo '------------------------------ 开始创建相关文件夹... ------------------------------'
mkdir -pv ${virusPath}
mkdir -pv ${logsPath}
echo '------------------------------ 相关文件夹创建完成! ------------------------------'
}
## 判断当前发行版并设置包管理器
getOSRelease () {
echo '------------------------------ 开始检查 Linux 发行版 ... ------------------------------'
[ -r /etc/os-release ] && . /etc/os-release
if [ `expr "${ID_LIKE}" : ".*suse.*"` != 0 ]; then
packageInstaller=zypper
if [ "${ID_LIKE:-}" = suse ] && [ "${VARIANT_ID:-}" = sle-micro ]; then
packageInstaller=zypper
fi
elif [ "${VERSION_ID%%.*}" = "7" ]; then
packageInstaller=yum
elif [ "${ID_LIKE:-}" = coreos ] || [ "${VARIANT_ID:-}" = coreos ]; then
packageInstaller=rpm-ostree
else
packageInstaller=yum
fi
if [ "${packageInstaller}" = "rpm-ostree" ] && [ -x /bin/yum ]; then
packageInstaller=yum
fi
if [ "${packageInstaller}" = "yum" ] && [ -x /usr/bin/dnf ]; then
packageInstaller=dnf
fi
echo '当前发行版为:' ${ID_LIKE}
echo '使用的包管理器为:' ${packageInstaller}
echo '------------------------------ Linux 发行版检查完成! ------------------------------'
}
## 安装 ClamAV
installClamAV () {
echo '------------------------------ 开始安装 ClamAV ... ------------------------------'
if [ "${packageInstaller}" = "yum" ]; then
yum install -y epel-release clamav clamav-update
elif [ "${packageInstaller}" = "zypper" ]; then
zypper install -y clamav
fi
echo '------------------------------ ClamAV 安装完成! ------------------------------'
}
## 更新 ClamAV
updateClamAV () {
echo '------------------------------ 开始更新 ClamAV ... ------------------------------'
if [ "${packageInstaller}" = "yum" ]; then
yum update -y epel-release clamav clamav-update
elif [ "${packageInstaller}" = "zypper" ]; then
zypper update -y clamav
fi
echo '------------------------------ ClamAV 更新完成! ------------------------------'
}
## 更新病毒库
updateVirusDatabase () {
echo '------------------------------ 开始更新病毒库... ------------------------------'
freshclam
echo '------------------------------ 病毒库更新完成! ------------------------------'
}
## 扫描病毒
scanVirus () {
echo '------------------------------ 开始扫描指定目录... ------------------------------'
case ${model} in
0)
clamscan --recursive=yes --infected --log=${logsPath}/clamscan.log ${scanDir}
;;
1)
clamscan --recursive=yes --infected --log=${logsPath}/clamscan.log --copy=${virusPath} ${scanDir}
;;
2)
clamscan --recursive=yes --infected --log=${logsPath}/clamscan.log --move=${virusPath} ${scanDir}
;;
3)
clamscan --recursive=yes --infected --log=${logsPath}/clamscan.log --remove=yes ${scanDir}
;;
*)
clamscan --recursive=yes --infected --log=${logsPath}/clamscan.log ${scanDir}
;;
esac
infectedFileNumber = $(cat ${logsPath}/clamscan.log | grep "Infected files")
echo '------------------------------ 指定目录扫描完成! ------------------------------'
echo '****************************** 疑似病毒文件数量:' ${infectedFileNumber} ' ******************************'
echo '****************************** 扫描日志见:'${logsPath}'/clamscan.log ******************************'
echo '****************************** 病毒文件见:'${virusPath}',请及时处理 ******************************'
}
## 扫描
scan () {
echo '===================================================================================================='
echo `date +%Y-%m-%d` `date +%H:%M:%S`
echo '============================== 开始扫描 '${scanDir}' 目录...... =============================='
createPath
getOSRelease
installClamAV
updateClamAV
updateVirusDatabase
scanVirus
echo '============================== '${scanDir}' 目录扫描完成!!! =============================='
echo `date +%Y-%m-%d` `date +%H:%M:%S`
echo '===================================================================================================='
}
# 执行方法
case $1 in
help)
help
;;
version)
version
;;
*)
scan
;;
esac