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