From 7f760dd6080a3cffc568d538916a814156fc85ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=A4=A9=E5=9E=9A?= Date: Tue, 12 Dec 2023 16:04:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Edii=E3=80=81ghd=E3=80=81cvs?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=EF=BC=9B=E6=9B=B4=E6=96=B0README.md=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 127 ++++++++++++++++++++++++++++++++++++++++- cvs | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ dii | 57 +++++++++++++++++++ ghd | 38 +++++++++++++ 4 files changed, 385 insertions(+), 2 deletions(-) create mode 100755 cvs create mode 100755 dii create mode 100755 ghd diff --git a/README.md b/README.md index b5a1124..62b06a0 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,126 @@ -# shell_tools +# Shell 工具集 -Shell 脚本工具 \ No newline at end of file +## ghd + +    GitHub 文件加速下载工具,支持 `github.com` 和 `raw.githubusercontent.com` 域名。 + +**所需依赖:** + +- 无需依赖,导入后直接使用即可 + +**参数说明:** + +- `$1` :需要下载的GitHub文件的URL + +**使用方式:** + +```bash +ghd 需要下载的GitHub文件的URL +``` + +    示例: + +```bash +ghd https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-linux-x86_64 +``` + +
+ +## dii + +    获取 Docker Hub 镜像信息工具 + +**所需依赖:** + +- skopeo(通过包管理器直接安装即可,如: `zypper install -y skopeo` 或 `yum install -y skopeo`) +- jq(通过包管理器直接安装即可,如: `zypper install -y jq` 或 `yum install -y jq`) + +**参数说明:** + +- `$1` :Docker镜像名称 +- `$2` :是否仅查询镜像Tag + +**使用方式:** + +- 查询全部信息 + +```bash +dii Docker镜像名称 +``` + +    示例: + +```bash +dii mysql +``` + +- 仅查询 Tgs + +```bash +dii Docker镜像名称 t +``` + +    示例: + +```bash +dii mysql t +``` + +
+ +## cvs + + 使用 ClamAV 扫描病毒工具。 + +**所需依赖:** + +- 无需依赖,导入后直接使用即可 + +**参数说明:** + +- `$1` : 需要扫描的目录,不配置时默认全盘扫描 +- `$2` : 病毒文件的处理方式,不配置时默认为 `2` + - `0` : 不处理; + - `1` : 复制到指定目录; + - `2` : 移动至指定目录; + - `3` : 直接删除(不推荐) +- `$3` : 工作目录,用于输出日志、存放病毒文件,不配置时默认为 `/opt/clamav` 目录 +- `$4` : 包管理器,支持 `yum`、`zypper`,不配置时默认根据操作系统自动选择 + +**使用方式:** + +```bash +cvs 需要扫描的目录 处理方式 工作目录 包管理器 +``` + +示例: + +- 全盘扫描,使用默认配置 +``` bash +cvs +``` + +- 扫描 HOME 目录,使用默认配置 +``` bash +cvs /home +``` + +- 全盘扫描,不处理病毒文件 +``` bash +cvs / 0 +``` + +- 扫描 HOME 目录,不处理病毒文件 +``` bash +cvs /home 0 +``` + +- 全盘扫描,将日志文件保存至 `/tmp/clamav` 目录,同时将扫描出的病毒文件也移动至此目录 +``` bash +cvs / 2 /tmp/clamav +``` + +- 扫描 HOME 目录,将日志文件保存至 `/tmp/clamav` 目录,同时将扫描出的病毒文件也移动至此目录 +``` bash +cvs /home 2 /tmp/clamav +``` diff --git a/cvs b/cvs new file mode 100755 index 0000000..1aff26f --- /dev/null +++ b/cvs @@ -0,0 +1,165 @@ +#!/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} +### 包管理器【yum:YUM,dnf:DNF,zypper:ZYPPER】 +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 diff --git a/dii b/dii new file mode 100755 index 0000000..ff28d72 --- /dev/null +++ b/dii @@ -0,0 +1,57 @@ +#!/bin/bash + +# 查询 docker 镜像信息 + +# 相关参数 +## 版本号 +VERSION=0.2.0 +## Docker 镜像仓库 +REPO=docker.io +## Docker 镜像 +IMAGE=$1 +## 仅查询Tags +ONLY_TAGES=$2 + +# 相关方法 +## 帮助信息 +help () { + echo 'Usage: dii Docker镜像名称 是否仅查询Tags' + echo '提示:需要先安装 skopeo 和 jq 包,安装方式请参考官方文档' + echo '示例:' + echo ' 从 Docker Hub 中查找 MySQL 镜像的信息:dii mysql' + echo ' 从 Docker Hub 中查找 MySQL 镜像的信息,仅输出 Tags:dii mysql t' +} +## 版本号 +version () { + echo 'dii '$VERSION +} +## 查询所有信息 +searchAllInfo () { + skopeo inspect docker://${REPO}/${IMAGE} +} +## 仅查询Tags +searchTagsOnly () { + skopeo inspect docker://${REPO}/${IMAGE} | jq ".RepoTags" +} +## 查询镜像信息 +searchImage () { + echo '------------------------------ 正在从 '$REPO' 搜索镜像 '$IMAGE' 相关信息,请稍后... ------------------------------' + if [ $ONLY_TAGES ]; then + searchTagsOnly + else + searchAllInfo + fi +} + +# 执行方法 +case $1 in + help) + help + ;; + version) + version + ;; + *) + searchImage + ;; +esac diff --git a/ghd b/ghd new file mode 100755 index 0000000..1123d22 --- /dev/null +++ b/ghd @@ -0,0 +1,38 @@ +#!/bin/bash + +# 加速下载 GitHub 文件 + +# 相关参数 +## 版本号 +VERSION=0.2.0 + +# 相关方法 +## 帮助 +help () { + echo 'Usage: ghd GitHub文件URL(支持 github.com 和 raw.githubusercontent.com )' + echo '示例:' + echo ' ghd https://github.com/docker/compose/releases/download/v2.19.1/docker-compose-linux-x86_64' +} +## 版本号 +version () { + echo 'dii '$VERSION +} +## 下载文件 +download () { + echo '------------------------------ 正在通过 GitHub Proxy (https://ghproxy.com) 下载 GitHub 文件,请稍后... ------------------------------' + curl -O https://mirror.ghproxy.com/$1 +} + +# 执行方法 +case $1 in + help) + help + ;; + version) + version + ;; + *) + curl -O https://mirror.ghproxy.com/$1 +# download() + ;; +esac