diff --git a/bf b/bf index af2a11a..4eb37bf 100755 --- a/bf +++ b/bf @@ -2,58 +2,81 @@ # 备份目录脚本 -## 参数配置 -### 当前的日期、日期时间 +# 参数配置 +## 版本号 +version="0.2.0" +## 当前的日期、日期时间 date=`date +%Y%m%d` datetime=`date +%Y%m%d`_`date +%H%M%S` -### 需要备份的目录名称 +## 需要备份的目录名称 dirName=$1 -### 需要备份的文件夹(绝对路径) +## 需要备份的文件夹(绝对路径) backupPath=$2 -### 备份成果文件名称 +## 备份成果文件名称 backupFileName=$dirName"_backup_"$datetime".tar.gz" -### 是否生成备份成果文件哈希值【0:不生成,1:生成】 +## 是否生成备份成果文件哈希值【0:不生成,1:生成】 generateBackupFileSHA=1 -### 是否加密【0:不加密,1:加密】 +## 是否加密【0:不加密,1:加密】 needEncrypt=1 -### 加密秘钥文件(秘钥为文件的第一行内容) +## 加密秘钥文件(秘钥为文件的第一行内容) encryptPasswordFile=$3 -### 备份模式【0:备份到本地目录,1:备份到华为云OBS,2:备份到腾讯云COS】 -model=2 -### 备份文件保存路径(仅当 model 为 0 时生效) +## 备份模式【0:备份到本地目录,1:备份到Amazon S3,2:备份到华为云OBS,3:备份到腾讯云COS】 +model=0 +## 备份文件保存路径(仅当 model 为 0 时生效) targetsPath=/bak/$dirName -### obsutil(OBS工具) 路径(绝对路径) +## S3 桶名称(仅当 model 为 1 时生效) +s3BucketName=demo +## S3 目录(仅当 model 为 1 时生效) +s3FolderName=$dirName +## obsutil(OBS工具) 路径(绝对路径) obsutil=/opt/obsutil/obsutil -### OBS 桶名称(仅当 model 为 1 时生效) +## OBS 桶名称(仅当 model 为 2 时生效) obsBucketName=demo -### OBS 目录(仅当 model 为 1 时生效) +## OBS 目录(仅当 model 为 2 时生效) obsFolderName=$dirName -### coscli(COS工具)路径(绝对路径) +## coscli(COS工具)路径(绝对路径) coscli=/opt/coscli/coscli -### COS 桶名称(仅当 model 为 2 时生效) +## COS 桶名称(仅当 model 为 3 时生效) cosBucketName=demo -### COS 目录(仅当 model 为 2 时生效) +## COS 目录(仅当 model 为 3 时生效) cosFolderName=$dirName -### COS 对象类型(仅当 model 为 2 时生效)【STANDARD:标准存储,MAZ_STANDARD:标准存储(多AZ),STANDARD_IA:低频存储,MAZ_STANDARD_IA:低频存储(多AZ),MAZ_INTELLIGENT_TIERING:智能分层存储,ARCHIVE:归档存储,DEEP_ARCHIVE:深度归档存储】 +## COS 对象类型(仅当 model 为 3 时生效)【STANDARD:标准存储,MAZ_STANDARD:标准存储(多AZ),STANDARD_IA:低频存储,MAZ_STANDARD_IA:低频存储(多AZ),MAZ_INTELLIGENT_TIERING:智能分层存储,ARCHIVE:归档存储,DEEP_ARCHIVE:深度归档存储】 cosStorageClass=STANDARD -### 临时路径(临时的工作目录) +## 临时路径(临时的工作目录) tmpPath=/tmp/backup/$dirName/$date -## 相关方法 -### 创建临时目录 +# 相关方法 +## 帮助信息 +help () { + echo 'Usage: bf 需要备份的目录名称 需要备份的目录 加密秘钥文件' + echo '参数说明:' + echo ' $1: 需要备份的目录名称,将使用此名称新增备份文件夹及文件' + echo ' $2: 需要备份的目录(绝对路径)' + echo ' $3: 加密秘钥文件(可选,仅加密备份文件时需指定)' + echo '示例:' + echo ' 备份 home 目录: bf home /home' + echo ' 备份 home 目录,并使用 /root/home.key 文件作为秘钥加密备份文件: bf home /home /root/home.key' + echo '其他说明:' + echo ' 使用前请按实际情况修改备份文件保存方式,若使用远程存储(如 Amazon S3 等)则需要安装相关cli工具并完成配置,具体请参考官方文档。' +} +## 版本号 +version () { + echo 'bf '$version +} +## 创建临时目录 createTmpPath () { echo '------------------------------ 开始创建工作目录... ------------------------------' mkdir -pv $tmpPath echo '------------------------------ 工作目录创建完成! ------------------------------' } -### 压缩备份目录 +## 压缩备份目录 condense () { echo '------------------------------ 开始压缩备份目录... ------------------------------' cd $tmpPath tar czPf $backupFileName $backupPath echo '------------------------------ 备份目录压缩成功! ------------------------------' } -### 生成备份文件哈希值 +## 生成备份文件哈希值 generateSHA () { echo '------------------------------ 开始生成备份文件哈希... ------------------------------' cd $tmpPath @@ -62,7 +85,7 @@ generateSHA () { mv $backupFileName'_SHA512' $targetsPath echo '------------------------------ 备份文件哈希生成成功( 哈希文件见:' $targetsPath ' )! ------------------------------' } -### 加密备份文件 +## 加密备份文件 encrypt () { echo '------------------------------ 开始加密备份文件... ------------------------------' cd $tmpPath @@ -71,26 +94,32 @@ encrypt () { rm -rf bak_$backupFileName echo '------------------------------ 备份文件加密成功! ------------------------------' } -### 将备份文件保存到本地 +## 将备份文件保存到本地 saveToLocal () { echo '****************************** 使用本地模式,将保存备份文件到本地目录( '$targetsPath' ) ******************************' mkdir -pv $targetsPath mv $tmpPath/$backupFileName $targetsPath/$backupFileName } -### 将备份文件保存到华为云 OBS +## 将备份文件保存到Amazon S3 saveToOBS () { - echo '****************************** 使用 OBS 模式,将保存备份文件到 OBS 桶( '$obsBucketName' ) ******************************' + echo '****************************** 使用 OBS 模式,将保存备份文件到 Amazon S3 桶( '$obsBucketName' ) ******************************' + aws s3 cp $tmpPath/$backupFileName s3://$s3BucketName/$s3FolderName/$backupFileName + rm -rf $tmpPath/$backupFileName +} +## 将备份文件保存到华为云 OBS +saveToOBS () { + echo '****************************** 使用 OBS 模式,将保存备份文件到 华为云 OBS 桶( '$obsBucketName' ) ******************************' $obsutil mkdir obs://$obsBucketName/$obsFolderName $obsutil cp -f $tmpPath/$backupFileName obs://$obsBucketName/$obsFolderName/$backupFileName rm -rf $tmpPath/$backupFileName } -### 将备份文件保存到腾讯云 COS +## 将备份文件保存到腾讯云 COS saveToCOS () { - echo '****************************** 使用 COS 模式,将保存备份文件到 COS 桶( '$cosBucketName' ) ******************************' + echo '****************************** 使用 COS 模式,将保存备份文件到 腾讯云 COS 桶( '$cosBucketName' ) ******************************' $coscli cp $tmpPath/$backupFileName cos://$cosBucketName/$cosFolderName/$backupFileName --storage-class $cosStorageClass rm -rf $tmpPath/$backupFileName } -### 保存备份文件 +## 保存备份文件 save () { echo '------------------------------ 开始保存备份文件... ------------------------------' case $model in @@ -109,25 +138,39 @@ save () { esac echo '------------------------------ 备份文件保存成功! ------------------------------' } +## 备份 +bf () { + echo '====================================================================================================' + echo `date +%Y-%m-%d` `date +%H:%M:%S` + echo '============================== 开始备份 '$dirName' ...... ==============================' + ### 创建工作目录 + createTmpPath + ### 打包备份目录 + condense + ### 加密备份文件 + if [ $needEncrypt == 1 ];then + encrypt + fi + ### 生成备份文件哈希 + if [ $generateBackupFileSHA == 1 ];then + generateSHA + fi + ### 保存备份文件 + save + echo '============================== '$dirName' 备份成功!!! ==============================' + echo `date +%Y-%m-%d` `date +%H:%M:%S` + echo '====================================================================================================' +} -## 开始备份 -echo '====================================================================================================' -echo `date +%Y-%m-%d` `date +%H:%M:%S` -echo '============================== 开始备份 '$dirName' ...... ==============================' -### 创建工作目录 -createTmpPath -### 打包备份目录 -condense -### 加密备份文件 -if [ $needEncrypt == 1 ];then - encrypt -fi -### 生成备份文件哈希 -if [ $generateBackupFileSHA == 1 ];then - generateSHA -fi -### 保存备份文件 -save -echo '============================== '$dirName' 备份成功!!! ==============================' -echo `date +%Y-%m-%d` `date +%H:%M:%S` -echo '====================================================================================================' +# 执行方法 +case $1 in + help) + help + ;; + version) + version + ;; + *) + bf + ;; +esac diff --git a/cvs b/cvs index 1aff26f..d646ed0 100755 --- a/cvs +++ b/cvs @@ -2,28 +2,28 @@ # 使用 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:直接删除(不推荐)】 +## 病毒文件处理模式【0:不处理,1:复制到指定目录、2:移动至指定目录、3:直接删除(不推荐)】 model=${2:-2} -### 工作目录 +## 工作目录 workPath=${3:-/opt/clamav} -### 包管理器【yum:YUM,dnf:DNF,zypper:ZYPPER】 +## 包管理器【yum:YUM,dnf:DNF,zypper:ZYPPER】 packageInstaller=${4:-yum} -### 病毒文件复制/转移文件夹(仅 model 为 1、2 时生效) +## 病毒文件复制/转移文件夹(仅 model 为 1、2 时生效) virusPath=${workPath}/scan_${datetime}/virus -### 日志文件目录 +## 日志文件目录 logsPath=${workPath}/scan_${datetime}/logs -### 疑似病毒文件数量 +## 疑似病毒文件数量 infectedFileNumber=0 -## 相关方法 +# 相关方法 ## 帮助信息 help () { echo 'Usage: cvs 需要扫描的目录 处理方式 工作目录 包管理器' @@ -48,14 +48,14 @@ help () { version () { echo 'cvs '$VERSION } -### 创建文件夹 +## 创建文件夹 createPath () { echo '------------------------------ 开始创建相关文件夹... ------------------------------' mkdir -pv ${virusPath} mkdir -pv ${logsPath} echo '------------------------------ 相关文件夹创建完成! ------------------------------' } -### 判断当前发行版并设置包管理器 +## 判断当前发行版并设置包管理器 getOSRelease () { echo '------------------------------ 开始检查 Linux 发行版 ... ------------------------------' [ -r /etc/os-release ] && . /etc/os-release @@ -83,7 +83,7 @@ getOSRelease () { echo '使用的包管理器为:' ${packageInstaller} echo '------------------------------ Linux 发行版检查完成! ------------------------------' } -### 安装 ClamAV +## 安装 ClamAV installClamAV () { echo '------------------------------ 开始安装 ClamAV ... ------------------------------' if [ "${packageInstaller}" = "yum" ]; then @@ -93,7 +93,7 @@ installClamAV () { fi echo '------------------------------ ClamAV 安装完成! ------------------------------' } -### 更新 ClamAV +## 更新 ClamAV updateClamAV () { echo '------------------------------ 开始更新 ClamAV ... ------------------------------' if [ "${packageInstaller}" = "yum" ]; then @@ -103,13 +103,13 @@ updateClamAV () { fi echo '------------------------------ ClamAV 更新完成! ------------------------------' } -### 更新病毒库 +## 更新病毒库 updateVirusDatabase () { echo '------------------------------ 开始更新病毒库... ------------------------------' freshclam echo '------------------------------ 病毒库更新完成! ------------------------------' } -### 扫描病毒 +## 扫描病毒 scanVirus () { echo '------------------------------ 开始扫描指定目录... ------------------------------' case ${model} in @@ -135,7 +135,7 @@ scanVirus () { echo '****************************** 扫描日志见:'${logsPath}'/clamscan.log ******************************' echo '****************************** 病毒文件见:'${virusPath}',请及时处理 ******************************' } -### 扫描 +## 扫描 scan () { echo '====================================================================================================' echo `date +%Y-%m-%d` `date +%H:%M:%S` @@ -151,7 +151,7 @@ scan () { echo '====================================================================================================' } -## 执行方法 +# 执行方法 case $1 in help) help