广告过滤脚本
#!/bin/bash

# 获取当前时间并格式化
current_time() {
date "+[%Y-%m-%d %H:%M:%S]"
}

# 定义下载目录和程序目录
DOWNLOAD_DIR="/opt/program"
PROGRAM_DIR="$DOWNLOAD_DIR/AdGuardHome"

# 检查并创建必要的文件夹
[ ! -d "$DOWNLOAD_DIR" ] && mkdir -p "$DOWNLOAD_DIR"
[ ! -d "$PROGRAM_DIR" ] && mkdir -p "$PROGRAM_DIR"

# 下载最新的 AdGuardHome 压缩包
echo "$(current_time) 下载最新版 AdguardHome..."
wget -q -O "$DOWNLOAD_DIR/AdGuardHome_linux_amd64.tar.gz" https://static.adtidy.org/adguardhome/release/AdGuardHome_linux_amd64.tar.gz &
wget_pid=$!

# 等待直到 wget 完成或超时
timeout=180 # 3 分钟
elapsed_time=0
while ps -p $wget_pid > /dev/null; do
sleep 1
elapsed_time=$((elapsed_time + 1))
if [ $elapsed_time -ge $timeout ]; then
echo "$(current_time) 下载超时。终止进程。"
kill $wget_pid # 终止 wget 进程
rm -rf "$DOWNLOAD_DIR/AdGuardHome_linux_amd64.tar.gz"
exit 1
fi
done

# 检查下载是否成功
if wait $wget_pid; then
echo "$(current_time) 下载已完成!"
else
echo "$(current_time) 下载失败。"
rm -rf "$DOWNLOAD_DIR/AdGuardHome_linux_amd64.tar.gz"
exit 1
fi

# 解压并删除安装包
echo "$(current_time) 解压安装包 AdguardHome..."
if tar -zxvf "$DOWNLOAD_DIR/AdGuardHome_linux_amd64.tar.gz" -C "$DOWNLOAD_DIR" > /dev/null; then
rm -rf "$DOWNLOAD_DIR/AdGuardHome_linux_amd64.tar.gz"
else
echo "$(current_time) 解压失败。"
rm -rf "$DOWNLOAD_DIR/AdGuardHome_linux_amd64.tar.gz"
exit 1
fi

# 停止现有的 AdGuardHome 进程
if pkill AdGuardHome; then
echo "$(current_time) 停止现有的 AdGuardHome 进程。"
else
echo "$(current_time) 没有正在运行的 AdGuardHome 进程。"
fi

# 删除旧的 systemd 服务文件
if rm -rf /etc/systemd/system/AdGuardHome.service; then
echo "$(current_time) 删除旧的 AdGuardHome 服务文件。"
else
echo "$(current_time) 删除旧的 AdGuardHome 服务文件失败。"
exit 1
fi

# 安装 AdGuardHome 服务
echo "$(current_time) 安装 AdguardHome..."
"$PROGRAM_DIR/AdGuardHome" -s install

# 检查服务是否成功启动
if systemctl is-active --quiet AdGuardHome; then
echo "$(current_time) AdGuardHome 安装成功!"
else
echo "$(current_time) AdGuardHome 服务启动失败。"
exit 1
fi

echo "$(current_time) 脚本执行完毕。"
配置校验脚本
#!/bin/bash

# 定义 SSH 配置文件路径
SSHD_CONFIG="/etc/ssh/sshd_config"
BACKUP_SSHD_CONFIG="${SSHD_CONFIG}.bak"

# 获取当前时间并格式化
current_time() {
date "+[%Y-%m-%d %H:%M:%S]"
}

# 检查现有的 ListenAddress 配置
ipv4_listen=$(grep -E "^ListenAddress 0.0.0.0" "$SSHD_CONFIG")
ipv6_listen=$(grep -E "^ListenAddress ::" "$SSHD_CONFIG")

# 标记是否需要重启 SSH 服务
restart_needed=false

if [[ -n "$ipv4_listen" && -n "$ipv6_listen" ]]; then
echo "$(current_time) 监听地址未改动,无需修改。"
else
# 获取配置文件的最后修改日期
last_mod_time=$(date -r "$SSHD_CONFIG" "+%Y-%m-%d %H:%M:%S")
echo "$(current_time) 配置文件有改动,上次修改日期:$last_mod_time"

# 备份原始配置文件(覆盖已存在的备份文件)
sudo cp "$SSHD_CONFIG" "$BACKUP_SSHD_CONFIG"
echo "$(current_time) 已备份原始配置文件到 $BACKUP_SSHD_CONFIG"

# 修改 ListenAddress 配置
if grep -q "^ListenAddress" "$SSHD_CONFIG"; then
sudo sed -i '/^ListenAddress/d' "$SSHD_CONFIG"
fi
echo -e "ListenAddress 0.0.0.0\nListenAddress ::" | sudo tee -a "$SSHD_CONFIG" >/dev/null
if [ $? -eq 0 ]; then
echo "$(current_time) 已更新监听地址为 0.0.0.0 和 ::"
restart_needed=true
else
echo "$(current_time) 更新监听地址失败"
exit 1
fi
fi

# 根据需要重启 SSH 服务
if $restart_needed; then
sudo systemctl restart sshd
if [ $? -eq 0 ]; then
echo "$(current_time) 已重启 SSH 服务"
else
echo "$(current_time) 重启 SSH 服务失败"
exit 1
fi
fi

echo "$(current_time) 脚本执行完毕。"
文件云备脚本
#!/bin/bash

# 设置环境变量来保护配置文件密码
export RCLONE_CONFIG_PASS="XXXXXXXX"

# 定义本地和远程目录数组
declare -A directories=(
["/tmp/zfsv3/sata1/data/备份中心/相册存储"]="onedrive@INKSS:/备份/异地云备/相册存储"
["/tmp/zfsv3/sata1/data/备份中心/手机备份"]="onedrive@INKSS:/备份/异地云备/手机备份"
# 添加更多的目录对
)

# 获取当前时间并格式化
current_time() {
date "+[%Y-%m-%d %H:%M:%S]"
}

# 记录开始时间
echo "$(current_time) 备份开始"

# 循环同步每个目录对
for local_dir in "${!directories[@]}"; do
remote_dir=${directories[$local_dir]}
echo "$(current_time) 同步 $local_dir$remote_dir..."

# 同步操作,并捕获错误
if rclone sync "$local_dir" "$remote_dir" --progress; then
echo "$(current_time) 完成 $local_dir 同步"
else
echo "$(current_time) 失败 $local_dir 同步"
exit 1
fi
done

# 输出备份完成消息并记录结束时间
echo "$(current_time) 所有备份已完成!"
echo "$(current_time) 备份结束"

# 取消设置环境变量
unset RCLONE_CONFIG_PASS
镜像备份脚本
#!/bin/bash

# 定义需要同步的目录对
declare -a directories=(
"/tmp/zfsv3/nvme12/data/相册存储:/tmp/zfsv3/sata1/data/备份中心/相册存储"
)

# 获取当前时间并格式化
current_time() {
date "+[%Y-%m-%d %H:%M:%S]"
}

# 记录开始时间
echo -e "$(current_time) 同步开始"

# 同步函数
sync_directories() {
local source_dir="$1"
local target_dir="$2"

# 检查源目录是否存在
if [ ! -d "$source_dir" ]; then
echo -e "$(current_time) 源目录 $source_dir 不存在。"
exit 1
fi

# 检查目标目录是否存在,如果不存在则创建
if [ ! -d "$target_dir" ]; then
echo -e "$(current_time) 警告:目标目录 $target_dir 不存在,正在创建..."
mkdir -p "$target_dir"
if [ $? -ne 0 ]; then
echo -e "$(current_time) 创建目标目录 $target_dir 失败。"
exit 1
fi
fi

echo "$(current_time) 同步 $source$target..."
# 使用 rsync 进行同步,并记录详细日志
rsync -av --delete "$source_dir/" "$target_dir/" | while read line; do
echo "$(current_time) $line"
done

# 检查 rsync 命令是否成功
if [ $? -eq 0 ]; then
echo "$(current_time) 同步成功!已将 $source_dir 下的文件同步到 $target_dir。"
else
echo "$(current_time) 同步失败!请检查问题并重新尝试。"
exit 1
fi
}



# 遍历数组并调用同步函数
for pair in "${directories[@]}"; do
IFS=":" read -r source target <<< "$pair"
sync_directories "$source" "$target"
done

echo -e "$(current_time) 同步完成"