#!/bin/bash sh_v="3.9.3" gl_hui='\e[37m' gl_hong='\033[31m' gl_lv='\033[32m' gl_huang='\033[33m' gl_lan='\033[34m' gl_bai='\033[0m' gl_zi='\033[35m' gl_kjlan='\033[96m' canshu="default" permission_granted="false" ENABLE_STATS="true" quanju_canshu() { if [ "$canshu" = "CN" ]; then zhushi=0 gh_proxy="https://gh.kejilion.pro/" elif [ "$canshu" = "V6" ]; then zhushi=1 gh_proxy="https://gh.kejilion.pro/" else zhushi=1 # 0 表示执行,1 表示不执行 gh_proxy="https://" fi } quanju_canshu # یک تابع را برای اجرای دستورات تعریف کنید run_command() { if [ "$zhushi" -eq 0 ]; then "$@" fi } canshu_v6() { if grep -q '^canshu="V6"' /usr/local/bin/k > /dev/null 2>&1; then sed -i 's/^canshu="default"/canshu="V6"/' ~/kejilion.sh fi } CheckFirstRun_true() { if grep -q '^permission_granted="true"' /usr/local/bin/k > /dev/null 2>&1; then sed -i 's/^permission_granted="false"/permission_granted="true"/' ~/kejilion.sh fi } # کارکردهایی که اطلاعات نقطه دفن شده را جمع می کنند ، شماره نسخه اسکریپت فعلی ، زمان استفاده ، نسخه سیستم ، معماری CPU ، کشور دستگاه و نام عملکردی را که توسط کاربر استفاده می شود ، ضبط کنید. آنها کاملاً اطلاعات حساس را درگیر نمی کنند ، لطفاً مطمئن باشید! لطفا باور کنید! # چرا ما نیاز به طراحی این عملکرد داریم؟ هدف این است که عملکردهایی را که کاربران دوست دارند از آنها استفاده کنند بهتر درک کنیم و توابع را برای راه اندازی عملکردهای بیشتری که نیازهای کاربر را برآورده می کند ، بهینه سازی کند. # برای متن کامل ، می توانید مکان تماس عملکرد SEND_STATS ، منبع شفاف و باز را جستجو کنید و در صورت نگرانی می توانید از استفاده از آن خودداری کنید. send_stats() { if [ "$ENABLE_STATS" == "false" ]; then return fi local country=$(curl -s ipinfo.io/country) local os_info=$(grep PRETTY_NAME /etc/os-release | cut -d '=' -f2 | tr -d '"') local cpu_arch=$(uname -m) ( curl -s -X POST "https://api.kejilion.pro/api/log" \ -H "Content-Type: application/json" \ -d "{\"action\":\"$1\",\"timestamp\":\"$(date -u '+%Y-%m-%d %H:%M:%S')\",\"country\":\"$country\",\"os_info\":\"$os_info\",\"cpu_arch\":\"$cpu_arch\",\"version\":\"$sh_v\"}" \ &>/dev/null ) & } yinsiyuanquan2() { if grep -q '^ENABLE_STATS="false"' /usr/local/bin/k > /dev/null 2>&1; then sed -i 's/^ENABLE_STATS="true"/ENABLE_STATS="false"/' ~/kejilion.sh fi } canshu_v6 CheckFirstRun_true yinsiyuanquan2 sed -i '/^alias k=/d' ~/.bashrc > /dev/null 2>&1 sed -i '/^alias k=/d' ~/.profile > /dev/null 2>&1 sed -i '/^alias k=/d' ~/.bash_profile > /dev/null 2>&1 cp -f ./kejilion.sh ~/kejilion.sh > /dev/null 2>&1 cp -f ~/kejilion.sh /usr/local/bin/k > /dev/null 2>&1 CheckFirstRun_false() { if grep -q '^permission_granted="false"' /usr/local/bin/k > /dev/null 2>&1; then UserLicenseAgreement fi } # کاربر را وادار به موافقت با شرایط کنید UserLicenseAgreement() { clear echo -e "${gl_kjlan}به جعبه ابزار Tech Lion Script خوش آمدید${gl_bai}" echo "برای اولین بار با استفاده از اسکریپت ، لطفاً توافق نامه مجوز کاربر را بخوانید و موافقت کنید." echo "توافق نامه مجوز کاربر: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" read -r -p "آیا با اصطلاحات فوق موافق هستید؟ (y/n):" user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then send_stats "رضایت مجوز" sed -i 's/^permission_granted="false"/permission_granted="true"/' ~/kejilion.sh sed -i 's/^permission_granted="false"/permission_granted="true"/' /usr/local/bin/k else send_stats "رد مجوز" clear exit fi } CheckFirstRun_false ip_address() { ipv4_address=$(curl -s https://ipinfo.io/ip && echo) ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) } install() { if [ $# -eq 0 ]; then echo "پارامترهای بسته ارائه نشده است!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then echo -e "${gl_huang}نصب$package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release dnf install -y "$package" elif command -v yum &>/dev/null; then yum -y update yum install -y epel-release yum install -y "$package" elif command -v apt &>/dev/null; then apt update -y apt install -y "$package" elif command -v apk &>/dev/null; then apk update apk add "$package" elif command -v pacman &>/dev/null; then pacman -Syu --noconfirm pacman -S --noconfirm "$package" elif command -v zypper &>/dev/null; then zypper refresh zypper install -y "$package" elif command -v opkg &>/dev/null; then opkg update opkg install "$package" elif command -v pkg &>/dev/null; then pkg update pkg install -y "$package" else echo "مدیر بسته ناشناخته!" return 1 fi fi done } check_disk_space() { required_gb=$1 required_space_mb=$((required_gb * 1024)) available_space_mb=$(df -m / | awk 'NR==2 {print $4}') if [ $available_space_mb -lt $required_space_mb ]; then echo -e "${gl_huang}نکته:${gl_bai}فضای کافی دیسک!" echo "فضای موجود در دسترس: $ ((موجود_ space_mb/1024)) g" echo "حداقل فضای تقاضا:${required_gb}G" echo "نصب نمی تواند ادامه یابد. لطفاً فضای دیسک را تمیز کرده و دوباره امتحان کنید." send_stats "فضای دیسک کافی" break_end kejilion fi } install_dependency() { install wget unzip tar jq } remove() { if [ $# -eq 0 ]; then echo "پارامترهای بسته ارائه نشده است!" return 1 fi for package in "$@"; do echo -e "${gl_huang}حذف نصب$package...${gl_bai}" if command -v dnf &>/dev/null; then dnf remove -y "$package" elif command -v yum &>/dev/null; then yum remove -y "$package" elif command -v apt &>/dev/null; then apt purge -y "$package" elif command -v apk &>/dev/null; then apk del "$package" elif command -v pacman &>/dev/null; then pacman -Rns --noconfirm "$package" elif command -v zypper &>/dev/null; then zypper remove -y "$package" elif command -v opkg &>/dev/null; then opkg remove "$package" elif command -v pkg &>/dev/null; then pkg delete -y "$package" else echo "مدیر بسته ناشناخته!" return 1 fi done } # عملکرد جهانی SystemCtl ، مناسب برای توزیع های مختلف systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" if command -v apk &>/dev/null; then service "$SERVICE_NAME" "$COMMAND" else /bin/systemctl "$COMMAND" "$SERVICE_NAME" fi } # سرویس را مجدداً راه اندازی کنید restart() { systemctl restart "$1" if [ $? -eq 0 ]; then echo "$1این سرویس مجدداً راه اندازی شده است." else echo "خطا: راه اندازی مجدد$1سرویس شکست خورد." fi } # سرویس را شروع کنید start() { systemctl start "$1" if [ $? -eq 0 ]; then echo "$1این سرویس آغاز شده است." else echo "خطا: شروع کنید$1سرویس شکست خورد." fi } # سرویس توقف stop() { systemctl stop "$1" if [ $? -eq 0 ]; then echo "$1سرویس متوقف شده است" else echo "خطا: توقف$1سرویس شکست خورد." fi } # وضعیت خدمات را بررسی کنید status() { systemctl status "$1" if [ $? -eq 0 ]; then echo "$1وضعیت سرویس نمایش داده می شود." else echo "خطا: نمایش امکان پذیر نیست$1وضعیت خدمات" fi } enable() { local SERVICE_NAME="$1" if command -v apk &>/dev/null; then rc-update add "$SERVICE_NAME" default else /bin/systemctl enable "$SERVICE_NAME" fi echo "$SERVICE_NAMEروی قدرت تنظیم کنید." } break_end() { echo -e "${gl_lv}عملیات کامل شد${gl_bai}" echo "برای ادامه ... هر کلید را فشار دهید ..." read -n 1 -s -r -p "" echo "" clear } kejilion() { cd ~ kejilion_sh } check_port() { install lsof stop_containers_or_kill_process() { local port=$1 local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) if [ -n "$containers" ]; then docker stop $containers else for pid in $(lsof -t -i:$port); do kill -9 $pid done fi } stop_containers_or_kill_process 80 stop_containers_or_kill_process 443 } install_add_docker_cn() { local country=$(curl -s ipinfo.io/country) if [ "$country" = "CN" ]; then cat > /etc/docker/daemon.json << EOF { "registry-mirrors": [ "https://docker-0.unsee.tech", "https://docker.1panel.live", "https://registry.dockermirror.com", "https://docker.imgdb.de", "https://docker.m.daocloud.io", "https://hub.firefly.store", "https://hub.littlediary.cn", "https://hub.rat.dev", "https://dhub.kubesre.xyz", "https://cjie.eu.org", "https://docker.1panelproxy.com", "https://docker.hlmirror.com", "https://hub.fast360.xyz", "https://dockerpull.cn", "https://cr.laoyou.ip-ddns.com", "https://docker.melikeme.cn", "https://docker.kejilion.pro" ] } EOF fi enable docker start docker restart docker } install_add_docker_guanfang() { local country=$(curl -s ipinfo.io/country) if [ "$country" = "CN" ]; then cd ~ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/install && chmod +x install sh install --mirror Aliyun rm -f install else curl -fsSL https://get.docker.com | sh fi install_add_docker_cn } install_add_docker() { echo -e "${gl_huang}نصب محیط داکر ...${gl_bai}" if [ -f /etc/os-release ] && grep -q "Fedora" /etc/os-release; then install_add_docker_guanfang elif command -v dnf &>/dev/null; then dnf update -y dnf install -y yum-utils device-mapper-persistent-data lvm2 rm -f /etc/yum.repos.d/docker*.repo > /dev/null country=$(curl -s ipinfo.io/country) arch=$(uname -m) if [ "$country" = "CN" ]; then curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo | tee /etc/yum.repos.d/docker-ce.repo > /dev/null else yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo > /dev/null fi dnf install -y docker-ce docker-ce-cli containerd.io install_add_docker_cn elif [ -f /etc/os-release ] && grep -q "Kali" /etc/os-release; then apt update apt upgrade -y apt install -y apt-transport-https ca-certificates curl gnupg lsb-release rm -f /usr/share/keyrings/docker-archive-keyring.gpg local country=$(curl -s ipinfo.io/country) local arch=$(uname -m) if [ "$country" = "CN" ]; then if [ "$arch" = "x86_64" ]; then sed -i '/^deb \[arch=amd64 signed-by=\/etc\/apt\/keyrings\/docker-archive-keyring.gpg\] https:\/\/mirrors.aliyun.com\/docker-ce\/linux\/debian bullseye stable/d' /etc/apt/sources.list.d/docker.list > /dev/null mkdir -p /etc/apt/keyrings curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg > /dev/null echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null elif [ "$arch" = "aarch64" ]; then sed -i '/^deb \[arch=arm64 signed-by=\/etc\/apt\/keyrings\/docker-archive-keyring.gpg\] https:\/\/mirrors.aliyun.com\/docker-ce\/linux\/debian bullseye stable/d' /etc/apt/sources.list.d/docker.list > /dev/null mkdir -p /etc/apt/keyrings curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg > /dev/null echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null fi else if [ "$arch" = "x86_64" ]; then sed -i '/^deb \[arch=amd64 signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg\] https:\/\/download.docker.com\/linux\/debian bullseye stable/d' /etc/apt/sources.list.d/docker.list > /dev/null mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg > /dev/null echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null elif [ "$arch" = "aarch64" ]; then sed -i '/^deb \[arch=arm64 signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg\] https:\/\/download.docker.com\/linux\/debian bullseye stable/d' /etc/apt/sources.list.d/docker.list > /dev/null mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg > /dev/null echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null fi fi apt update apt install -y docker-ce docker-ce-cli containerd.io install_add_docker_cn elif command -v apt &>/dev/null || command -v yum &>/dev/null; then install_add_docker_guanfang else install docker docker-compose install_add_docker_cn fi sleep 2 } install_docker() { if ! command -v docker &>/dev/null; then install_add_docker fi } docker_ps() { while true; do clear send_stats "مدیریت کانتینر داکر" echo "لیست کانتینر داکر" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" echo "کانتینر" echo "------------------------" echo "1. یک ظرف جدید ایجاد کنید" echo "------------------------" echo "2. ظرف مشخص شده را شروع کنید 6. همه ظروف را شروع کنید" echo "3. کانتینر مشخص شده 7 را متوقف کنید. تمام ظروف را متوقف کنید" echo "4. ظرف مشخص شده را حذف کنید 8. همه ظروف را حذف کنید" echo "5. ظرف مشخص شده را مجدداً راه اندازی کنید. همه ظروف را مجدداً راه اندازی کنید" echo "------------------------" echo "11. ظرف مشخص شده 12 را وارد کنید. ورود به سیستم کانتینر را مشاهده کنید" echo "13. مشاهده شبکه کانتینر 14. مشاهده اشغال کانتینر" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) send_stats "یک ظرف جدید ایجاد کنید" read -e -p "لطفاً دستور ایجاد را وارد کنید:" dockername $dockername ;; 2) send_stats "ظرف مشخص شده را شروع کنید" read -e -p "لطفاً نام کانتینر را وارد کنید (نام چند کانتینر که توسط فضاها جدا شده اند):" dockername docker start $dockername ;; 3) send_stats "ظرف مشخص شده را متوقف کنید" read -e -p "لطفاً نام کانتینر را وارد کنید (نام چند کانتینر که توسط فضاها جدا شده اند):" dockername docker stop $dockername ;; 4) send_stats "ظرف مشخص شده را حذف کنید" read -e -p "لطفاً نام کانتینر را وارد کنید (نام چند کانتینر که توسط فضاها جدا شده اند):" dockername docker rm -f $dockername ;; 5) send_stats "ظرف مشخص شده را مجدداً راه اندازی کنید" read -e -p "لطفاً نام کانتینر را وارد کنید (چندین نام کانتینر که توسط فضاها جدا شده اند):" dockername docker restart $dockername ;; 6) send_stats "همه ظروف را شروع کنید" docker start $(docker ps -a -q) ;; 7) send_stats "تمام ظروف را متوقف کنید" docker stop $(docker ps -q) ;; 8) send_stats "همه ظروف را حذف کنید" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) docker rm -f $(docker ps -a -q) ;; [Nn]) ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac ;; 9) send_stats "همه ظروف را مجدداً راه اندازی کنید" docker restart $(docker ps -q) ;; 11) send_stats "ظرف را وارد کنید" read -e -p "لطفاً نام کانتینر را وارد کنید:" dockername docker exec -it $dockername /bin/sh break_end ;; 12) send_stats "مشاهده کانتینر" read -e -p "لطفاً نام کانتینر را وارد کنید:" dockername docker logs $dockername break_end ;; 13) send_stats "مشاهده شبکه کانتینر" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址" for container_id in $container_ids; do local container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id") local container_name=$(echo "$container_info" | awk '{print $1}') local network_info=$(echo "$container_info" | cut -d' ' -f2-) while IFS= read -r line; do local network_name=$(echo "$line" | awk '{print $1}') local ip_address=$(echo "$line" | awk '{print $2}') printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address" done <<< "$network_info" done break_end ;; 14) send_stats "مشاهده اشغال کانتینر" docker stats --no-stream break_end ;; *) break # 跳出循环,退出菜单 ;; esac done } docker_image() { while true; do clear send_stats "مدیریت تصویر داکر" echo "لیست تصویر Docker" docker image ls echo "" echo "عمل آینه" echo "------------------------" echo "1. تصویر مشخص شده را دریافت کنید. تصویر مشخص شده را حذف کنید" echo "2. تصویر مشخص شده را به روز کنید. همه تصاویر را حذف کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) send_stats "آینه را بکشید" read -e -p "لطفاً نام آینه را وارد کنید (لطفاً چندین نام آینه را با فضاها جدا کنید):" imagenames for name in $imagenames; do echo -e "${gl_huang}گرفتن تصویر:$name${gl_bai}" docker pull $name done ;; 2) send_stats "تصویر را به روز کنید" read -e -p "لطفاً نام آینه را وارد کنید (لطفاً چندین نام آینه را با فضاها جدا کنید):" imagenames for name in $imagenames; do echo -e "${gl_huang}تصویر به روز شده:$name${gl_bai}" docker pull $name done ;; 3) send_stats "آینه را حذف کنید" read -e -p "لطفاً نام آینه را وارد کنید (لطفاً چندین نام آینه را با فضاها جدا کنید):" imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) send_stats "همه تصاویر را حذف کنید" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) docker rmi -f $(docker images -q) ;; [Nn]) ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac ;; *) break # 跳出循环,退出菜单 ;; esac done } check_crontab_installed() { if ! command -v crontab >/dev/null 2>&1; then install_crontab fi } install_crontab() { if [ -f /etc/os-release ]; then . /etc/os-release case "$ID" in ubuntu|debian|kali) apt update apt install -y cron systemctl enable cron systemctl start cron ;; centos|rhel|almalinux|rocky|fedora) yum install -y cronie systemctl enable crond systemctl start crond ;; alpine) apk add --no-cache cronie rc-update add crond rc-service crond start ;; arch|manjaro) pacman -S --noconfirm cronie systemctl enable cronie systemctl start cronie ;; opensuse|suse|opensuse-tumbleweed) zypper install -y cron systemctl enable cron systemctl start cron ;; iStoreOS|openwrt|ImmortalWrt|lede) opkg update opkg install cron /etc/init.d/cron enable /etc/init.d/cron start ;; FreeBSD) pkg install -y cronie sysrc cron_enable="YES" service cron start ;; *) echo "توزیع های پشتیبانی نشده:$ID" return ;; esac else echo "سیستم عامل قابل تعیین نیست." return fi echo -e "${gl_lv}Crontab نصب شده و سرویس Cron در حال اجرا است.${gl_bai}" } docker_ipv6_on() { root_use install jq local CONFIG_FILE="/etc/docker/daemon.json" local REQUIRED_IPV6_CONFIG='{"ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64"}' # بررسی کنید که آیا پرونده پیکربندی وجود دارد ، پرونده را ایجاد کرده و در صورت وجود تنظیمات پیش فرض را بنویسید if [ ! -f "$CONFIG_FILE" ]; then echo "$REQUIRED_IPV6_CONFIG" | jq . > "$CONFIG_FILE" restart docker else # از JQ برای رسیدگی به به روزرسانی پرونده های پیکربندی استفاده کنید local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") # بررسی کنید که آیا پیکربندی فعلی در حال حاضر دارای تنظیمات IPv6 است local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') # پیکربندی را به روز کنید و IPv6 را فعال کنید if [[ "$CURRENT_IPV6" == "false" ]]; then UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq '. + {ipv6: true, "fixed-cidr-v6": "2001:db8:1::/64"}') else UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq '. + {"fixed-cidr-v6": "2001:db8:1::/64"}') fi # مقایسه پیکربندی اصلی با پیکربندی جدید if [[ "$ORIGINAL_CONFIG" == "$UPDATED_CONFIG" ]]; then echo -e "${gl_huang}دسترسی IPv6 در حال حاضر فعال است${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker fi fi } docker_ipv6_off() { root_use install jq local CONFIG_FILE="/etc/docker/daemon.json" # بررسی کنید که آیا پرونده پیکربندی وجود دارد if [ ! -f "$CONFIG_FILE" ]; then echo -e "${gl_hong}پرونده پیکربندی وجود ندارد${gl_bai}" return fi # پیکربندی فعلی را بخوانید local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") # از JQ برای رسیدگی به به روزرسانی پرونده های پیکربندی استفاده کنید local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') # وضعیت IPv6 فعلی را بررسی کنید local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') # مقایسه پیکربندی اصلی با پیکربندی جدید if [[ "$CURRENT_IPV6" == "false" ]]; then echo -e "${gl_huang}دسترسی IPv6 در حال حاضر بسته است${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker echo -e "${gl_huang}دسترسی IPv6 با موفقیت بسته شده است${gl_bai}" fi } save_iptables_rules() { mkdir -p /etc/iptables touch /etc/iptables/rules.v4 iptables-save > /etc/iptables/rules.v4 check_crontab_installed crontab -l | grep -v 'iptables-restore' | crontab - > /dev/null 2>&1 (crontab -l ; echo '@reboot iptables-restore < /etc/iptables/rules.v4') | crontab - > /dev/null 2>&1 } iptables_open() { install iptables save_iptables_rules iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -F ip6tables -P INPUT ACCEPT ip6tables -P FORWARD ACCEPT ip6tables -P OUTPUT ACCEPT ip6tables -F } open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then echo "لطفاً حداقل یک شماره درگاه ارائه دهید" return 1 fi install iptables for port in "${ports[@]}"; do # قوانین بسته شدن موجود را حذف کنید iptables -D INPUT -p tcp --dport $port -j DROP 2>/dev/null iptables -D INPUT -p udp --dport $port -j DROP 2>/dev/null # قوانین باز را اضافه کنید if ! iptables -C INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -p tcp --dport $port -j ACCEPT fi if ! iptables -C INPUT -p udp --dport $port -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -p udp --dport $port -j ACCEPT echo "بندر باز شده است$port" fi done save_iptables_rules send_stats "بندر باز شده است" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then echo "لطفاً حداقل یک شماره درگاه ارائه دهید" return 1 fi install iptables for port in "${ports[@]}"; do # قوانین باز موجود را حذف کنید iptables -D INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null iptables -D INPUT -p udp --dport $port -j ACCEPT 2>/dev/null # یک قانون نزدیک اضافه کنید if ! iptables -C INPUT -p tcp --dport $port -j DROP 2>/dev/null; then iptables -I INPUT 1 -p tcp --dport $port -j DROP fi if ! iptables -C INPUT -p udp --dport $port -j DROP 2>/dev/null; then iptables -I INPUT 1 -p udp --dport $port -j DROP echo "بندر بسته$port" fi done save_iptables_rules send_stats "بندر بسته" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then echo "لطفاً حداقل یک آدرس IP یا بخش IP ارائه دهید" return 1 fi install iptables for ip in "${ips[@]}"; do # قوانین مسدود کردن موجود را حذف کنید iptables -D INPUT -s $ip -j DROP 2>/dev/null # قوانین اجازه را اضافه کنید if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT echo "IP آزاد شده$ip" fi done save_iptables_rules send_stats "IP آزاد شده" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then echo "لطفاً حداقل یک آدرس IP یا بخش IP ارائه دهید" return 1 fi install iptables for ip in "${ips[@]}"; do # قوانین مجاز موجود را حذف کنید iptables -D INPUT -s $ip -j ACCEPT 2>/dev/null # قوانین مسدود کردن را اضافه کنید if ! iptables -C INPUT -s $ip -j DROP 2>/dev/null; then iptables -I INPUT 1 -s $ip -j DROP echo "IP مسدود شده$ip" fi done save_iptables_rules send_stats "IP مسدود شده" } enable_ddos_defense() { # DDO های دفاعی را روشن کنید iptables -A DOCKER-USER -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT iptables -A DOCKER-USER -p tcp --syn -j DROP iptables -A DOCKER-USER -p udp -m limit --limit 3000/s -j ACCEPT iptables -A DOCKER-USER -p udp -j DROP iptables -A INPUT -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP send_stats "دفاع DDOS را روشن کنید" } # دفاع DDOS را خاموش کنید disable_ddos_defense() { # DDO های دفاع را خاموش کنید iptables -D DOCKER-USER -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT 2>/dev/null iptables -D DOCKER-USER -p tcp --syn -j DROP 2>/dev/null iptables -D DOCKER-USER -p udp -m limit --limit 3000/s -j ACCEPT 2>/dev/null iptables -D DOCKER-USER -p udp -j DROP 2>/dev/null iptables -D INPUT -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT 2>/dev/null iptables -D INPUT -p tcp --syn -j DROP 2>/dev/null iptables -D INPUT -p udp -m limit --limit 3000/s -j ACCEPT 2>/dev/null iptables -D INPUT -p udp -j DROP 2>/dev/null send_stats "دفاع DDOS را خاموش کنید" } # کارکردهایی که قوانین ملی IP را مدیریت می کنند manage_country_rules() { local action="$1" local country_code="$2" local ipset_name="${country_code,,}_block" local download_url="http://www.ipdeny.com/ipblocks/data/countries/${country_code,,}.zone" install ipset case "$action" in block) # اگر IPSET وجود نداشته باشد ایجاد کنید if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi # بارگیری پرونده منطقه IP if ! wget -q "$download_url" -O "${country_code,,}.zone"; then echo "خطا: بارگیری$country_codeپرونده منطقه IP انجام نشد" exit 1 fi # IP را به ipset اضافه کنید while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" # IP را با iptables مسدود کنید iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP iptables -I OUTPUT -m set --match-set "$ipset_name" dst -j DROP echo "با موفقیت مسدود شد$country_codeآدرس IP" rm "${country_code,,}.zone" ;; allow) # ایجاد یک IPSET برای کشورهای مجاز (اگر وجود نداشته باشد) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi # بارگیری پرونده منطقه IP if ! wget -q "$download_url" -O "${country_code,,}.zone"; then echo "خطا: بارگیری$country_codeپرونده منطقه IP انجام نشد" exit 1 fi # قوانین ملی موجود را حذف کنید iptables -D INPUT -m set --match-set "$ipset_name" src -j DROP 2>/dev/null iptables -D OUTPUT -m set --match-set "$ipset_name" dst -j DROP 2>/dev/null ipset flush "$ipset_name" # IP را به ipset اضافه کنید while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" # فقط IP در کشورهای تعیین شده مجاز است iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -A INPUT -m set --match-set "$ipset_name" src -j ACCEPT iptables -A OUTPUT -m set --match-set "$ipset_name" dst -j ACCEPT echo "با موفقیت فقط مجاز است$country_codeآدرس IP" rm "${country_code,,}.zone" ;; unblock) # قوانین iptables را برای کشور حذف کنید iptables -D INPUT -m set --match-set "$ipset_name" src -j DROP 2>/dev/null iptables -D OUTPUT -m set --match-set "$ipset_name" dst -j DROP 2>/dev/null # Ipset را نابود کنید if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi echo "با موفقیت برداشته شد$country_codeمحدودیت های آدرس IP" ;; *) ;; esac } iptables_panel() { root_use install iptables save_iptables_rules while true; do clear echo "مدیریت پیشرفته فایروال" send_stats "مدیریت پیشرفته فایروال" echo "------------------------" iptables -L INPUT echo "" echo "مدیریت فایروال" echo "------------------------" echo "1. پورت مشخص شده را باز کنید. پورت مشخص شده را ببندید" echo "3. همه درگاه ها را باز کنید. همه درگاه ها را ببندید" echo "------------------------" echo "5. Whitelist IP 6." echo "7. IP مشخص شده را پاک کنید" echo "------------------------" echo "11. اجازه دهید پینگ 12 را غیرفعال کنید" echo "------------------------" echo "13. دفاع DDOS را شروع کنید 14. دفاع DDOS را خاموش کنید" echo "------------------------" echo "15. بلوک کشور مشخص شده IP 16. فقط IP های کشور مشخص مجاز هستند" echo "17. محدودیت های IP را در کشورهای تعیین شده آزاد کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) read -e -p "لطفاً شماره پورت باز را وارد کنید:" o_port open_port $o_port send_stats "یک درگاه مشخص را باز کنید" ;; 2) read -e -p "لطفاً شماره پورت بسته را وارد کنید:" c_port close_port $c_port send_stats "بندر مشخص شده را ببندید" ;; 3) # همه بنادر را باز کنید current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A FORWARD -i lo -j ACCEPT iptables -A INPUT -p tcp --dport $current_port -j ACCEPT iptables-save > /etc/iptables/rules.v4 send_stats "همه بنادر را باز کنید" ;; 4) # همه بنادر را ببندید current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A FORWARD -i lo -j ACCEPT iptables -A INPUT -p tcp --dport $current_port -j ACCEPT iptables-save > /etc/iptables/rules.v4 send_stats "همه بنادر را ببندید" ;; 5) # وایتلیست read -e -p "لطفاً بخش IP یا IP را وارد کنید تا منتشر شود:" o_ip allow_ip $o_ip ;; 6) # لیست سیاه IP read -e -p "لطفاً بخش IP یا IP مسدود شده را وارد کنید:" c_ip block_ip $c_ip ;; 7) # IP مشخص شده را پاک کنید read -e -p "لطفاً IP پاک شده را وارد کنید:" d_ip iptables -D INPUT -s $d_ip -j ACCEPT 2>/dev/null iptables -D INPUT -s $d_ip -j DROP 2>/dev/null iptables-save > /etc/iptables/rules.v4 send_stats "IP مشخص شده را پاک کنید" ;; 11) # به پینگ اجازه دهید iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables-save > /etc/iptables/rules.v4 send_stats "به پینگ اجازه دهید" ;; 12) # پینگ را غیرفعال کنید iptables -D INPUT -p icmp --icmp-type echo-request -j ACCEPT 2>/dev/null iptables -D OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT 2>/dev/null iptables-save > /etc/iptables/rules.v4 send_stats "پینگ را غیرفعال کنید" ;; 13) enable_ddos_defense ;; 14) disable_ddos_defense ;; 15) read -e -p "لطفاً کد کشور مسدود شده را وارد کنید (مانند CN ، ایالات متحده ، JP):" country_code manage_country_rules block $country_code send_stats "کشورهای مجاز$country_codeبا منبت کاری کردن" ;; 16) read -e -p "لطفاً کد کشور مجاز (مانند CN ، ایالات متحده ، JP) را وارد کنید:" country_code manage_country_rules allow $country_code send_stats "کشور را مسدود کنید$country_codeبا منبت کاری کردن" ;; 17) read -e -p "لطفاً کد کشور پاک شده را وارد کنید (مانند CN ، ایالات متحده ، JP):" country_code manage_country_rules unblock $country_code send_stats "کشور را پاک کنید$country_codeبا منبت کاری کردن" ;; *) break # 跳出循环,退出菜单 ;; esac done } add_swap() { local new_swap=$1 # 获取传入的参数 # تمام پارتیشن های مبادله را در سیستم فعلی دریافت کنید local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') # تمام پارتیشن های مبادله را تکرار کرده و حذف کنید for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done # اطمینان حاصل کنید که /Swapfile دیگر استفاده نمی شود swapoff /swapfile # قدیمی /swapfile را حذف کنید rm -f /swapfile # یک پارتیشن مبادله جدید ایجاد کنید fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile sed -i '/\/swapfile/d' /etc/fstab echo "/swapfile swap swap defaults 0 0" >> /etc/fstab if [ -f /etc/alpine-release ]; then echo "nohup swapon /swapfile" > /etc/local.d/swap.start chmod +x /etc/local.d/swap.start rc-update add local fi echo -e "اندازه حافظه مجازی تغییر یافته است${gl_huang}${new_swap}${gl_bai}M" } check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') # تعیین کنید که آیا حافظه مجازی باید ایجاد شود [ "$swap_total" -gt 0 ] || add_swap 1024 } ldnmp_v() { # نسخه nginx را دریافت کنید local nginx_version=$(docker exec nginx nginx -v 2>&1) local nginx_version=$(echo "$nginx_version" | grep -oP "nginx/\K[0-9]+\.[0-9]+\.[0-9]+") echo -n -e "nginx : ${gl_huang}v$nginx_version${gl_bai}" # نسخه MySQL را دریافت کنید local dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]') local mysql_version=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -e "SELECT VERSION();" 2>/dev/null | tail -n 1) echo -n -e " mysql : ${gl_huang}v$mysql_version${gl_bai}" # نسخه PHP را دریافت کنید local php_version=$(docker exec php php -v 2>/dev/null | grep -oP "PHP \K[0-9]+\.[0-9]+\.[0-9]+") echo -n -e " php : ${gl_huang}v$php_version${gl_bai}" # نسخه redis را دریافت کنید local redis_version=$(docker exec redis redis-server -v 2>&1 | grep -oP "v=+\K[0-9]+\.[0-9]+") echo -e " redis : ${gl_huang}v$redis_version${gl_bai}" echo "------------------------" echo "" } install_ldnmp_conf() { # دایرکتوری ها و پرونده های لازم را ایجاد کنید cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/redis web/log/nginx && touch web/docker-compose.yml wget -O /home/web/nginx.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf wget -O /home/web/conf.d/default.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/default10.conf wget -O /home/web/redis/valkey.conf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/valkey.conf default_server_ssl # پرونده docker-compose.yml را بارگیری کنید و آن را جایگزین کنید wget -O /home/web/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/LNMP-docker-compose-10.yml dbrootpasswd=$(openssl rand -base64 16) ; dbuse=$(openssl rand -hex 4) ; dbusepasswd=$(openssl rand -base64 8) # در پرونده docker-compose.yml جایگزین کنید sed -i "s#webroot#$dbrootpasswd#g" /home/web/docker-compose.yml sed -i "s#kejilionYYDS#$dbusepasswd#g" /home/web/docker-compose.yml sed -i "s#kejilion#$dbuse#g" /home/web/docker-compose.yml } install_ldnmp() { check_swap cp /home/web/docker-compose.yml /home/web/docker-compose1.yml if ! grep -q "php-socket" /home/web/docker-compose.yml; then wget -O /home/web/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/LNMP-docker-compose-10.yml dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose1.yml | tr -d '[:space:]') dbuse=$(grep -oP 'MYSQL_USER:\s*\K.*' /home/web/docker-compose1.yml | tr -d '[:space:]') dbusepasswd=$(grep -oP 'MYSQL_PASSWORD:\s*\K.*' /home/web/docker-compose1.yml | tr -d '[:space:]') sed -i "s#webroot#$dbrootpasswd#g" /home/web/docker-compose.yml sed -i "s#kejilionYYDS#$dbusepasswd#g" /home/web/docker-compose.yml sed -i "s#kejilion#$dbuse#g" /home/web/docker-compose.yml fi if grep -q "kjlion/nginx:alpine" /home/web/docker-compose1.yml; then sed -i 's|kjlion/nginx:alpine|nginx:alpine|g' /home/web/docker-compose.yml > /dev/null 2>&1 sed -i 's|nginx:alpine|kjlion/nginx:alpine|g' /home/web/docker-compose.yml > /dev/null 2>&1 fi cd /home/web && docker compose up -d sleep 1 crontab -l 2>/dev/null | grep -v 'logrotate' | crontab - (crontab -l 2>/dev/null; echo '0 2 * * * docker exec nginx apk add logrotate && docker exec nginx logrotate -f /etc/logrotate.conf') | crontab - fix_phpfpm_conf php fix_phpfpm_conf php74 restart_ldnmp clear echo "محیط LDNMP نصب شده است" echo "------------------------" ldnmp_v } install_certbot() { cd ~ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/auto_cert_renewal.sh chmod +x auto_cert_renewal.sh check_crontab_installed local cron_job="0 0 * * * ~/auto_cert_renewal.sh" crontab -l 2>/dev/null | grep -vF "$cron_job" | crontab - (crontab -l 2>/dev/null; echo "$cron_job") | crontab - echo "کار تمدید به روز شده است" } install_ssltls() { docker stop nginx > /dev/null 2>&1 check_port > /dev/null 2>&1 cd ~ local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ ! -f "$file_path" ]; then local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' local ipv6_pattern='^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))))$' if [[ ($yuming =~ $ipv4_pattern || $yuming =~ $ipv6_pattern) ]]; then mkdir -p /etc/letsencrypt/live/$yuming/ if command -v dnf &>/dev/null || command -v yum &>/dev/null; then openssl req -x509 -nodes -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -keyout /etc/letsencrypt/live/$yuming/privkey.pem -out /etc/letsencrypt/live/$yuming/fullchain.pem -days 5475 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name" else openssl genpkey -algorithm Ed25519 -out /etc/letsencrypt/live/$yuming/privkey.pem openssl req -x509 -key /etc/letsencrypt/live/$yuming/privkey.pem -out /etc/letsencrypt/live/$yuming/fullchain.pem -days 5475 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name" fi else docker run -it --rm --network host -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone --http-01-address 0.0.0.0 --http-01-port 80 -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi mkdir -p /home/web/certs/ cp /etc/letsencrypt/live/$yuming/fullchain.pem /home/web/certs/${yuming}_cert.pem > /dev/null 2>&1 cp /etc/letsencrypt/live/$yuming/privkey.pem /home/web/certs/${yuming}_key.pem > /dev/null 2>&1 docker start nginx > /dev/null 2>&1 } install_ssltls_text() { echo -e "${gl_huang}$yumingاطلاعات کلیدی عمومی${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" echo -e "${gl_huang}$yumingاطلاعات کلید خصوصی${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" echo -e "${gl_huang}مسیر ذخیره گواهینامه${gl_bai}" echo "کلید عمومی:/و غیره/letsencrypt/live/$yuming/fullchain.pem" echo "کلید خصوصی:/و غیره/letsencrypt/live/$yuming/privkey.pem" echo "" } add_ssl() { yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming fi install_docker install_certbot docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status install_ssltls_text ssl_ps } ssl_ps() { echo -e "${gl_huang}انقضاء گواهی اعمال شده${gl_bai}" echo "زمان انقضا گواهی اطلاعات سایت" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" if [ -f "$cert_file" ]; then local domain=$(basename "$cert_dir") local expire_date=$(openssl x509 -noout -enddate -in "$cert_file" | awk -F'=' '{print $2}') local formatted_date=$(date -d "$expire_date" '+%Y-%m-%d') printf "%-30s%s\n" "$domain" "$formatted_date" fi done echo "" } default_server_ssl() { install openssl if command -v dnf &>/dev/null || command -v yum &>/dev/null; then openssl req -x509 -nodes -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -keyout /home/web/certs/default_server.key -out /home/web/certs/default_server.crt -days 5475 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name" else openssl genpkey -algorithm Ed25519 -out /home/web/certs/default_server.key openssl req -x509 -key /home/web/certs/default_server.key -out /home/web/certs/default_server.crt -days 5475 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name" fi openssl rand -out /home/web/certs/ticket12.key 48 openssl rand -out /home/web/certs/ticket13.key 80 } certs_status() { sleep 1 local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then send_stats "برنامه موفق برای گواهی نام دامنه" else send_stats "درخواست گواهی نام دامنه انجام نشد" echo -e "${gl_hong}توجه:${gl_bai}برنامه گواهینامه انجام نشد. لطفاً دلایل احتمالی زیر را بررسی کنید و دوباره امتحان کنید:" echo -e "1. خطای املایی نام دامنه ➠ لطفا بررسی کنید که آیا نام دامنه به درستی وارد شده است" echo -e "2. مشکل وضوح DNS ➠ تأیید کنید که نام دامنه به درستی در این IP سرور حل شده است" echo -e "3. مشکلات پیکربندی شبکه ➠ اگر از CloudFlare Warp و سایر شبکه های مجازی استفاده می کنید ، لطفاً به طور موقت خاموش شوید" echo -e "4. محدودیت های فایروال ➠ بررسی کنید که آیا پورت 80/443 برای اطمینان از تأیید صحت باز است" echo -e "5. تعداد برنامه ها از حد مجاز فراتر می رود ➠ بیایید رمزگذاری کنیم دارای محدودیت هفتگی (5 بار/نام دامنه/هفته) است" break_end clear echo "لطفا دوباره امتحان کنید$webname" add_yuming install_ssltls certs_status fi } repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then send_stats "استفاده مجدد از نام دامنه" web_del "${yuming}" > /dev/null 2>&1 fi } add_yuming() { ip_address echo -e "ابتدا نام دامنه را به IP محلی حل کنید:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "لطفاً IP یا نام دامنه حل شده خود را وارد کنید:" yuming } add_db() { dbname=$(echo "$yuming" | sed -e 's/[^A-Za-z0-9]/_/g') dbname="${dbname}" dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]') dbuse=$(grep -oP 'MYSQL_USER:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]') dbusepasswd=$(grep -oP 'MYSQL_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]') docker exec mysql mysql -u root -p"$dbrootpasswd" -e "CREATE DATABASE $dbname; GRANT ALL PRIVILEGES ON $dbname.* TO \"$dbuse\"@\"%\";" } reverse_proxy() { ip_address wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf sed -i "s/0.0.0.0/$ipv4_address/g" /home/web/conf.d/$yuming.conf sed -i "s|0000|$duankou|g" /home/web/conf.d/$yuming.conf nginx_http_on docker exec nginx nginx -s reload } restart_redis() { rm -rf /home/web/redis/* docker exec redis redis-cli FLUSHALL > /dev/null 2>&1 docker exec -it redis redis-cli CONFIG SET maxmemory 512mb > /dev/null 2>&1 docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /dev/null 2>&1 docker exec -it redis redis-cli CONFIG SET save "" > /dev/null 2>&1 docker exec -it redis redis-cli CONFIG SET appendonly no > /dev/null 2>&1 } restart_ldnmp() { restart_redis docker exec nginx chown -R nginx:nginx /var/www/html > /dev/null 2>&1 docker exec nginx mkdir -p /var/cache/nginx/proxy > /dev/null 2>&1 docker exec nginx mkdir -p /var/cache/nginx/fastcgi > /dev/null 2>&1 docker exec nginx chown -R nginx:nginx /var/cache/nginx/proxy > /dev/null 2>&1 docker exec nginx chown -R nginx:nginx /var/cache/nginx/fastcgi > /dev/null 2>&1 docker exec php chown -R www-data:www-data /var/www/html > /dev/null 2>&1 docker exec php74 chown -R www-data:www-data /var/www/html > /dev/null 2>&1 cd /home/web && docker compose restart nginx php php74 } nginx_upgrade() { local ldnmp_pods="nginx" cd /home/web/ docker rm -f $ldnmp_pods > /dev/null 2>&1 docker images --filter=reference="kjlion/${ldnmp_pods}*" -q | xargs docker rmi > /dev/null 2>&1 docker images --filter=reference="${ldnmp_pods}*" -q | xargs docker rmi > /dev/null 2>&1 docker compose up -d --force-recreate $ldnmp_pods crontab -l 2>/dev/null | grep -v 'logrotate' | crontab - (crontab -l 2>/dev/null; echo '0 2 * * * docker exec nginx apk add logrotate && docker exec nginx logrotate -f /etc/logrotate.conf') | crontab - docker exec nginx chown -R nginx:nginx /var/www/html docker exec nginx mkdir -p /var/cache/nginx/proxy docker exec nginx mkdir -p /var/cache/nginx/fastcgi docker exec nginx chown -R nginx:nginx /var/cache/nginx/proxy docker exec nginx chown -R nginx:nginx /var/cache/nginx/fastcgi docker restart $ldnmp_pods > /dev/null 2>&1 send_stats "تمدید کردن$ldnmp_pods" echo "تمدید کردن${ldnmp_pods}پایان" } phpmyadmin_upgrade() { local ldnmp_pods="phpmyadmin" local local docker_port=8877 local dbuse=$(grep -oP 'MYSQL_USER:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]') local dbusepasswd=$(grep -oP 'MYSQL_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]') cd /home/web/ docker rm -f $ldnmp_pods > /dev/null 2>&1 docker images --filter=reference="$ldnmp_pods*" -q | xargs docker rmi > /dev/null 2>&1 curl -sS -O https://raw.githubusercontent.com/kejilion/docker/refs/heads/main/docker-compose.phpmyadmin.yml docker compose -f docker-compose.phpmyadmin.yml up -d clear ip_address check_docker_app_ip echo "اطلاعات ورود به سیستم:" echo "نام کاربری:$dbuse" echo "رمز عبور:$dbusepasswd" echo send_stats "شروع کردن$ldnmp_pods" } cf_purge_cache() { local CONFIG_FILE="/home/web/config/cf-purge-cache.txt" local API_TOKEN local EMAIL local ZONE_IDS # بررسی کنید که آیا پرونده پیکربندی وجود دارد if [ -f "$CONFIG_FILE" ]; then # از پرونده های پیکربندی api_token و Zone_id را بخوانید read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" # تبدیل Zone_ids به یک آرایه ZONE_IDS=($ZONE_IDS) else # کاربر را برای تمیز کردن حافظه نهان راهنمایی کنید read -e -p "آیا نیاز به تمیز کردن حافظه پنهان Cloudflare دارید؟ (y/n):" answer if [[ "$answer" == "y" ]]; then echo "اطلاعات CF ذخیره می شود$CONFIG_FILE، بعداً می توانید اطلاعات CF را تغییر دهید" read -e -p "لطفاً API_TOKEN خود را وارد کنید:" API_TOKEN read -e -p "لطفا نام کاربری CF خود را وارد کنید:" EMAIL read -e -p "لطفاً Zone_Id را وارد کنید (چند برابر با فضاها از هم جدا شده است):" -a ZONE_IDS mkdir -p /home/web/config/ echo "$API_TOKEN $EMAIL ${ZONE_IDS[*]}" > "$CONFIG_FILE" fi fi # از طریق هر Zone_id حلقه کنید و دستور حافظه پنهان را اجرا کنید for ZONE_ID in "${ZONE_IDS[@]}"; do echo "پاک کردن حافظه پنهان برای Zone_ID:$ZONE_ID" curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \ -H "X-Auth-Email: $EMAIL" \ -H "X-Auth-Key: $API_TOKEN" \ -H "Content-Type: application/json" \ --data '{"purge_everything":true}' done echo "درخواست Cache Clear ارسال شده است." } web_cache() { send_stats "حافظه پنهان سایت را تمیز کنید" cf_purge_cache docker exec php php -r 'opcache_reset();' docker exec php74 php -r 'opcache_reset();' docker exec nginx nginx -s stop docker exec nginx rm -rf /var/cache/nginx/* docker exec nginx nginx docker restart redis restart_redis } web_del() { send_stats "داده های سایت را حذف کنید" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then read -e -p "برای حذف داده های سایت ، لطفاً نام دامنه خود را وارد کنید (نام دامنه های چندگانه توسط فضاها از هم جدا می شوند):" yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do echo "حذف نام دامنه:$yuming" rm -r /home/web/html/$yuming > /dev/null 2>&1 rm /home/web/conf.d/$yuming.conf > /dev/null 2>&1 rm /home/web/certs/${yuming}_key.pem > /dev/null 2>&1 rm /home/web/certs/${yuming}_cert.pem > /dev/null 2>&1 # نام دامنه را به نام پایگاه داده تبدیل کنید dbname=$(echo "$yuming" | sed -e 's/[^A-Za-z0-9]/_/g') dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]') # بررسی کنید که آیا پایگاه داده قبل از حذف آن وجود دارد تا از خطا جلوگیری شود echo "حذف بانک اطلاعاتی:$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done docker exec nginx nginx -s reload } nginx_waf() { local mode=$1 if ! grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi # تصمیم بگیرید WAF را با توجه به پارامتر حالت روشن یا خاموش کنید if [ "$mode" == "on" ]; then # WAF را روشن کنید: نظرات را حذف کنید sed -i 's|# load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^\(\s*\)# modsecurity on;|\1modsecurity on;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^\(\s*\)# modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;|\1modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;|' /home/web/nginx.conf > /dev/null 2>&1 elif [ "$mode" == "off" ]; then # بستن WAF: اضافه کردن نظرات sed -i 's|^load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|# load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^\(\s*\)modsecurity on;|\1# modsecurity on;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^\(\s*\)modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;|\1# modsecurity_rules_file /etc/nginx/modsec/modsecurity.conf;|' /home/web/nginx.conf > /dev/null 2>&1 else echo "پارامتر نامعتبر: از "ON" یا "خاموش" استفاده کنید" return 1 fi # تصاویر nginx را بررسی کنید و مطابق با وضعیت آنها را کنترل کنید if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else sed -i 's|nginx:alpine|kjlion/nginx:alpine|g' /home/web/docker-compose.yml nginx_upgrade fi } check_waf_status() { if grep -q "^\s*#\s*modsecurity on;" /home/web/nginx.conf; then waf_status="" elif grep -q "modsecurity on;" /home/web/nginx.conf; then waf_status=" WAF已开启" else waf_status="" fi } check_cf_mode() { if [ -f "/path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf" ]; then CFmessage=" cf模式已开启" else CFmessage="" fi } nginx_http_on() { local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' local ipv6_pattern='^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4][0-9]|[01]?[0-9][0-9]?))))$' if [[ ($yuming =~ $ipv4_pattern || $yuming =~ $ipv6_pattern) ]]; then sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf fi } check_docker_app() { if docker inspect "$docker_name" &>/dev/null; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" fi } check_docker_app_ip() { echo "------------------------" echo "آدرس دسترسی:" ip_address if [ -n "$ipv4_address" ]; then echo "http://$ipv4_address:${docker_port}" fi if [ -n "$ipv6_address" ]; then echo "http://[$ipv6_address]:${docker_port}" fi local search_pattern="$ipv4_address:${docker_port}" for file in /home/web/conf.d/*; do if [ -f "$file" ]; then if grep -q "$search_pattern" "$file" 2>/dev/null; then echo "https://$(basename "$file" | sed 's/\.conf$//')" fi fi done } check_docker_image_update() { local container_name=$1 local country=$(curl -s ipinfo.io/country) if [[ "$country" == "CN" ]]; then update_status="" return fi # زمان و نام تصویر ایجاد کانتینر را دریافت کنید local container_info=$(docker inspect --format='{{.Created}},{{.Config.Image}}' "$container_name" 2>/dev/null) local container_created=$(echo "$container_info" | cut -d',' -f1) local image_name=$(echo "$container_info" | cut -d',' -f2) # انبارهای آینه و برچسب ها را استخراج کنید local image_repo=${image_name%%:*} local image_tag=${image_name##*:} # برچسب پیش فرض آخرین است [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" # پشتیبانی از تصاویر رسمی را اضافه کنید [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" # زمان انتشار تصویر را از Docker Hub API دریافت کنید local hub_info=$(curl -s "https://hub.docker.com/v2/repositories/$image_repo/tags/$image_tag") local last_updated=$(echo "$hub_info" | jq -r '.last_updated' 2>/dev/null) # زمان کسب را تأیید کنید if [[ -n "$last_updated" && "$last_updated" != "null" ]]; then local container_created_ts=$(date -d "$container_created" +%s 2>/dev/null) local last_updated_ts=$(date -d "$last_updated" +%s 2>/dev/null) # مقایسه های زمانی را مقایسه کنید if [[ $container_created_ts -lt $last_updated_ts ]]; then update_status="${gl_huang}发现新版本!${gl_bai}" else update_status="" fi else update_status="" fi } block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 # آدرس IP ظرف را دریافت کنید local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then echo "خطا: نمی توان کانتینر را دریافت کرد$container_name_or_idآدرس IP لطفاً بررسی کنید که آیا نام کانتینر یا شناسه صحیح است." return 1 fi install iptables # همه IP های دیگر را بررسی و مسدود کنید if ! iptables -C DOCKER-USER -p tcp -d "$container_ip" -j DROP &>/dev/null; then iptables -I DOCKER-USER -p tcp -d "$container_ip" -j DROP fi # IP مشخص شده را بررسی و آزاد کنید if ! iptables -C DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT &>/dev/null; then iptables -I DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi # شبکه محلی 127.0.0.0/8 را بررسی و آزاد کنید if ! iptables -C DOCKER-USER -p tcp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT &>/dev/null; then iptables -I DOCKER-USER -p tcp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT fi # همه IP های دیگر را بررسی و مسدود کنید if ! iptables -C DOCKER-USER -p udp -d "$container_ip" -j DROP &>/dev/null; then iptables -I DOCKER-USER -p udp -d "$container_ip" -j DROP fi # IP مشخص شده را بررسی و آزاد کنید if ! iptables -C DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT &>/dev/null; then iptables -I DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi # شبکه محلی 127.0.0.0/8 را بررسی و آزاد کنید if ! iptables -C DOCKER-USER -p udp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT &>/dev/null; then iptables -I DOCKER-USER -p udp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT fi if ! iptables -C DOCKER-USER -m state --state ESTABLISHED,RELATED -d "$container_ip" -j ACCEPT &>/dev/null; then iptables -I DOCKER-USER -m state --state ESTABLISHED,RELATED -d "$container_ip" -j ACCEPT fi echo "درگاه های IP از دسترسی به سرویس مسدود شده اند" save_iptables_rules } clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 # آدرس IP ظرف را دریافت کنید local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then echo "خطا: نمی توان کانتینر را دریافت کرد$container_name_or_idآدرس IP لطفاً بررسی کنید که آیا نام کانتینر یا شناسه صحیح است." return 1 fi install iptables # قوانین روشن که همه IP های دیگر را مسدود می کند if iptables -C DOCKER-USER -p tcp -d "$container_ip" -j DROP &>/dev/null; then iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi # قوانین انتشار IP مشخص شده را پاک کنید if iptables -C DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT &>/dev/null; then iptables -D DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi # قوانین مربوط به انتشار شبکه محلی 127.0.0.0/8 را پاک کنید if iptables -C DOCKER-USER -p tcp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT &>/dev/null; then iptables -D DOCKER-USER -p tcp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT fi # قوانین روشن که همه IP های دیگر را مسدود می کند if iptables -C DOCKER-USER -p udp -d "$container_ip" -j DROP &>/dev/null; then iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi # قوانین انتشار IP مشخص شده را پاک کنید if iptables -C DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT &>/dev/null; then iptables -D DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi # قوانین مربوط به انتشار شبکه محلی 127.0.0.0/8 را پاک کنید if iptables -C DOCKER-USER -p udp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT &>/dev/null; then iptables -D DOCKER-USER -p udp -s 127.0.0.0/8 -d "$container_ip" -j ACCEPT fi if iptables -C DOCKER-USER -m state --state ESTABLISHED,RELATED -d "$container_ip" -j ACCEPT &>/dev/null; then iptables -D DOCKER-USER -m state --state ESTABLISHED,RELATED -d "$container_ip" -j ACCEPT fi echo "درگاه های IP+مجاز به دسترسی به سرویس هستند" save_iptables_rules } block_host_port() { local port=$1 local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then echo "خطا: لطفاً شماره پورت و IP را که مجاز به دسترسی است ، تهیه کنید." echo "استفاده: block_host_port <شماره پورت> <مجاز IP>" return 1 fi install iptables # دسترسی به IP دیگر را رد کرد if ! iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p tcp --dport "$port" -j DROP fi # دسترسی به IP مشخص شده if ! iptables -C INPUT -p tcp --dport "$port" -s "$allowed_ip" -j ACCEPT &>/dev/null; then iptables -I INPUT -p tcp --dport "$port" -s "$allowed_ip" -j ACCEPT fi # دسترسی به محلی if ! iptables -C INPUT -p tcp --dport "$port" -s 127.0.0.0/8 -j ACCEPT &>/dev/null; then iptables -I INPUT -p tcp --dport "$port" -s 127.0.0.0/8 -j ACCEPT fi # دسترسی به IP دیگر را رد کرد if ! iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p udp --dport "$port" -j DROP fi # دسترسی به IP مشخص شده if ! iptables -C INPUT -p udp --dport "$port" -s "$allowed_ip" -j ACCEPT &>/dev/null; then iptables -I INPUT -p udp --dport "$port" -s "$allowed_ip" -j ACCEPT fi # دسترسی به محلی if ! iptables -C INPUT -p udp --dport "$port" -s 127.0.0.0/8 -j ACCEPT &>/dev/null; then iptables -I INPUT -p udp --dport "$port" -s 127.0.0.0/8 -j ACCEPT fi # اجازه ترافیک برای اتصالات ایجاد شده و مرتبط را داشته باشید if ! iptables -C INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT &>/dev/null; then iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT fi echo "درگاه های IP از دسترسی به سرویس مسدود شده اند" save_iptables_rules } clear_host_port_rules() { local port=$1 local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then echo "خطا: لطفاً شماره پورت و IP را که مجاز به دسترسی است ، تهیه کنید." echo "استفاده: clear_host_port_rules <شماره پورت> <مجاز IP>" return 1 fi install iptables # قوانین را روشن کنید که تمام دسترسی IP را مسدود می کند if iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p tcp --dport "$port" -j DROP fi # قوانین روشن که امکان دسترسی بومی را فراهم می کند if iptables -C INPUT -p tcp --dport "$port" -s 127.0.0.0/8 -j ACCEPT &>/dev/null; then iptables -D INPUT -p tcp --dport "$port" -s 127.0.0.0/8 -j ACCEPT fi # قوانین را پاک کنید که امکان دسترسی به IP مشخص شده را فراهم می کند if iptables -C INPUT -p tcp --dport "$port" -s "$allowed_ip" -j ACCEPT &>/dev/null; then iptables -D INPUT -p tcp --dport "$port" -s "$allowed_ip" -j ACCEPT fi # قوانین را روشن کنید که تمام دسترسی IP را مسدود می کند if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -j DROP fi # قوانین روشن که امکان دسترسی بومی را فراهم می کند if iptables -C INPUT -p udp --dport "$port" -s 127.0.0.0/8 -j ACCEPT &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -s 127.0.0.0/8 -j ACCEPT fi # قوانین را پاک کنید که امکان دسترسی به IP مشخص شده را فراهم می کند if iptables -C INPUT -p udp --dport "$port" -s "$allowed_ip" -j ACCEPT &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -s "$allowed_ip" -j ACCEPT fi echo "درگاه های IP+مجاز به دسترسی به سرویس هستند" save_iptables_rules } docker_app() { send_stats "${docker_name}مدیریت کردن" while true; do clear check_docker_app check_docker_image_update $docker_name echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" if docker inspect "$docker_name" &>/dev/null; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} check_docker_app_ip fi echo "" echo "------------------------" echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید" echo "------------------------" echo "5. دسترسی به نام دامنه را اضافه کنید 6. دسترسی به نام دامنه را حذف کنید" echo "7. اجازه دسترسی به پورت IP+ 8 را داشته باشید." echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" choice case $choice in 1) check_disk_space $app_size read -e -p "درگاه سرویس خارجی برنامه را وارد کنید و پیش فرض را وارد کنید${docker_port}بندر:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq install_docker docker_rum clear echo "$docker_nameنصب شده" check_docker_app_ip echo "" $docker_use $docker_passwd send_stats "نصب کردن$docker_name" ;; 2) docker rm -f "$docker_name" docker rmi -f "$docker_img" docker_rum clear echo "$docker_nameنصب شده" check_docker_app_ip echo "" $docker_use $docker_passwd send_stats "تمدید کردن$docker_name" ;; 3) docker rm -f "$docker_name" docker rmi -f "$docker_img" rm -rf "/home/docker/$docker_name" echo "برنامه حذف شده است" send_stats "حذف کردن$docker_name" ;; 5) echo "${docker_name}تنظیمات دسترسی دامنه" send_stats "${docker_name}تنظیمات دسترسی دامنه" add_yuming ldnmp_Proxy ${yuming} ${ipv4_address} ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) echo "فرمت نام دامنه مثال. com با https: // همراه نیست" web_del ;; 7) send_stats "دسترسی به IP${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) send_stats "دسترسی به IP${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) break ;; esac break_end done } docker_app_plus() { send_stats "$app_name" while true; do clear check_docker_app check_docker_image_update $docker_name echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" if docker inspect "$docker_name" &>/dev/null; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} check_docker_app_ip fi echo "" echo "------------------------" echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید" echo "------------------------" echo "5. دسترسی به نام دامنه را اضافه کنید 6. دسترسی به نام دامنه را حذف کنید" echo "7. اجازه دسترسی به پورت IP+ 8 را داشته باشید." echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "انتخاب خود را وارد کنید:" choice case $choice in 1) check_disk_space $app_size read -e -p "درگاه سرویس خارجی برنامه را وارد کنید و پیش فرض را وارد کنید${docker_port}بندر:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq install_docker docker_app_install ;; 2) docker_app_update ;; 3) docker_app_uninstall ;; 5) echo "${docker_name}تنظیمات دسترسی دامنه" send_stats "${docker_name}تنظیمات دسترسی دامنه" add_yuming ldnmp_Proxy ${yuming} ${ipv4_address} ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) echo "فرمت نام دامنه مثال. com با https: // همراه نیست" web_del ;; 7) send_stats "دسترسی به IP${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) send_stats "دسترسی به IP${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) break ;; esac break_end done } prometheus_install() { local PROMETHEUS_DIR="/home/docker/monitoring/prometheus" local GRAFANA_DIR="/home/docker/monitoring/grafana" local NETWORK_NAME="monitoring" # Create necessary directories mkdir -p $PROMETHEUS_DIR mkdir -p $GRAFANA_DIR # Set correct ownership for Grafana directory chown -R 472:472 $GRAFANA_DIR if [ ! -f "$PROMETHEUS_DIR/prometheus.yml" ]; then curl -o "$PROMETHEUS_DIR/prometheus.yml" ${gh_proxy}raw.githubusercontent.com/kejilion/config/refs/heads/main/prometheus/prometheus.yml fi # Create Docker network for monitoring docker network create $NETWORK_NAME # Run Node Exporter container docker run -d \ --name=node-exporter \ --network $NETWORK_NAME \ --restart unless-stopped \ prom/node-exporter # Run Prometheus container docker run -d \ --name prometheus \ -v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \ -v $PROMETHEUS_DIR/data:/prometheus \ --network $NETWORK_NAME \ --restart unless-stopped \ --user 0:0 \ prom/prometheus:latest # Run Grafana container docker run -d \ --name grafana \ -p ${docker_port}:3000 \ -v $GRAFANA_DIR:/var/lib/grafana \ --network $NETWORK_NAME \ --restart unless-stopped \ grafana/grafana:latest } tmux_run() { # Check if the session already exists tmux has-session -t $SESSION_NAME 2>/dev/null # $? is a special variable that holds the exit status of the last executed command if [ $? != 0 ]; then # Session doesn't exist, create a new one tmux new -s $SESSION_NAME else # Session exists, attach to it tmux attach-session -t $SESSION_NAME fi } tmux_run_d() { local base_name="tmuxd" local tmuxd_ID=1 # توابعی که بررسی می کنند جلسه وجود دارد session_exists() { tmux has-session -t $1 2>/dev/null } # حلقه تا زمانی که نام جلسه غیر موجود پیدا شود while session_exists "$base_name-$tmuxd_ID"; do local tmuxd_ID=$((tmuxd_ID + 1)) done # یک جلسه TMUX جدید ایجاد کنید tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" } f2b_status() { docker exec -it fail2ban fail2ban-client reload sleep 3 docker exec -it fail2ban fail2ban-client status } f2b_status_xxx() { docker exec -it fail2ban fail2ban-client status $xxx } f2b_install_sshd() { docker run -d \ --name=fail2ban \ --net=host \ --cap-add=NET_ADMIN \ --cap-add=NET_RAW \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Etc/UTC \ -e VERBOSITY=-vv \ -v /path/to/fail2ban/config:/config \ -v /var/log:/var/log:ro \ -v /home/web/log/nginx/:/remotelogs/nginx:ro \ --restart unless-stopped \ lscr.io/linuxserver/fail2ban:latest sleep 3 if grep -q 'Alpine' /etc/issue; then cd /path/to/fail2ban/config/fail2ban/filter.d curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/alpine-sshd.conf curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/alpine-sshd-ddos.conf cd /path/to/fail2ban/config/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/alpine-ssh.conf elif command -v dnf &>/dev/null; then cd /path/to/fail2ban/config/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf else install rsyslog systemctl start rsyslog systemctl enable rsyslog cd /path/to/fail2ban/config/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/linux-ssh.conf systemctl restart rsyslog fi } f2b_sshd() { if grep -q 'Alpine' /etc/issue; then xxx=alpine-sshd f2b_status_xxx elif command -v dnf &>/dev/null; then xxx=centos-sshd f2b_status_xxx else xxx=linux-sshd f2b_status_xxx fi } server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) echo "مجدداً" reboot ;; *) echo "لغو شده" ;; esac } output_status() { output=$(awk 'BEGIN { rx_total = 0; tx_total = 0 } # مطابقت با نام کارتهای شبکه عمومی عمومی: ETH*، ENS*، ENP*، ENO* $1 ~ /^(eth|ens|enp|eno)[0-9]+/ { rx_total += $2 tx_total += $10 } END { rx_units = "Bytes"; tx_units = "Bytes"; if (rx_total > 1024) { rx_total /= 1024; rx_units = "K"; } if (rx_total > 1024) { rx_total /= 1024; rx_units = "M"; } if (rx_total > 1024) { rx_total /= 1024; rx_units = "G"; } if (tx_total > 1024) { tx_total /= 1024; tx_units = "K"; } if (tx_total > 1024) { tx_total /= 1024; tx_units = "M"; } if (tx_total > 1024) { tx_total /= 1024; tx_units = "G"; } printf("总接收: %.2f%s\n总发送: %.2f%s\n", rx_total, rx_units, tx_total, tx_units); }' /proc/net/dev) # echo "$output" } ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear send_stats "دوباره نصب محیط LDNMP امکان پذیر نیست" echo -e "${gl_huang}نکته:${gl_bai}محیط ساخت وب سایت نصب شده است. نیازی به نصب مجدد نیست!" break_end linux_ldnmp fi } ldnmp_install_all() { cd ~ send_stats "محیط LDNMP را نصب کنید" root_use clear echo -e "${gl_huang}محیط LDNMP نصب نشده است ، شروع به نصب محیط LDNMP ...${gl_bai}" check_disk_space 3 check_port install_dependency install_docker install_certbot install_ldnmp_conf install_ldnmp } nginx_install_all() { cd ~ send_stats "محیط nginx را نصب کنید" root_use clear echo -e "${gl_huang}nginx نصب نشده است ، شروع به نصب محیط nginx ...${gl_bai}" check_disk_space 1 check_port install_dependency install_docker install_certbot install_ldnmp_conf nginx_upgrade clear local nginx_version=$(docker exec nginx nginx -v 2>&1) local nginx_version=$(echo "$nginx_version" | grep -oP "nginx/\K[0-9]+\.[0-9]+\.[0-9]+") echo "nginx نصب شده است" echo -e "نسخه فعلی:${gl_huang}v$nginx_version${gl_bai}" echo "" } ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then send_stats "لطفاً ابتدا محیط LDNMP را نصب کنید" ldnmp_install_all fi } nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then send_stats "لطفاً ابتدا محیط nginx را نصب کنید" nginx_install_all fi } ldnmp_web_on() { clear echo "مال شما$webnameساخته شده!" echo "https://$yuming" echo "------------------------" echo "$webnameاطلاعات نصب به شرح زیر است:" } nginx_web_on() { clear echo "مال شما$webnameساخته شده!" echo "https://$yuming" } ldnmp_wp() { clear # wordpress webname="WordPress" yuming="${1:-}" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" if [ -z "$yuming" ]; then add_yuming fi repeat_add_yuming ldnmp_install_status install_ssltls certs_status add_db wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/wordpress.com.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf nginx_http_on cd /home/web/html mkdir $yuming cd $yuming wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/wp-latest.zip # wget -O latest.zip https://cn.wordpress.org/latest-zh_CN.zip # wget -O latest.zip https://wordpress.org/latest.zip unzip latest.zip rm latest.zip echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379');" >> /home/web/html/$yuming/wordpress/wp-config-sample.php sed -i "s|database_name_here|$dbname|g" /home/web/html/$yuming/wordpress/wp-config-sample.php sed -i "s|username_here|$dbuse|g" /home/web/html/$yuming/wordpress/wp-config-sample.php sed -i "s|password_here|$dbusepasswd|g" /home/web/html/$yuming/wordpress/wp-config-sample.php sed -i "s|localhost|mysql|g" /home/web/html/$yuming/wordpress/wp-config-sample.php cp /home/web/html/$yuming/wordpress/wp-config-sample.php /home/web/html/$yuming/wordpress/wp-config.php restart_ldnmp nginx_web_on # echo "نام پایگاه داده: $ dbname" # اکو "نام کاربری: $ dbuse" # ECHO "رمز عبور: $ dbusepasswd" # ECHO "آدرس پایگاه داده: MySQL" # ECHO "پیشوند جدول: WP_" } ldnmp_Proxy() { clear webname="反向代理-IP+端口" yuming="${1:-}" reverseproxy="${2:-}" port="${3:-}" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then read -e -p "لطفاً IP ضد نسل خود را وارد کنید:" reverseproxy fi if [ -z "$port" ]; then read -e -p "لطفاً درگاه ضد نسل خود را وارد کنید:" port fi nginx_install_status install_ssltls certs_status wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf sed -i "s/0.0.0.0/$reverseproxy/g" /home/web/conf.d/$yuming.conf sed -i "s|0000|$port|g" /home/web/conf.d/$yuming.conf nginx_http_on docker exec nginx nginx -s reload nginx_web_on } ldnmp_Proxy_backend() { clear webname="反向代理-负载均衡" yuming="${1:-}" reverseproxy_port="${2:-}" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" if [ -z "$yuming" ]; then add_yuming fi # دریافت چندین IP توسط کاربر: پورت ها (جدا شده توسط فضاها) if [ -z "$reverseproxy_port" ]; then read -e -p "لطفاً چندین پورت IP+ ضد نسل خود را که توسط فضاها از هم جدا شده اند وارد کنید (به عنوان مثال ، 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port fi nginx_install_status install_ssltls certs_status wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf backend=$(tr -dc 'A-Za-z' < /dev/urandom | head -c 8) sed -i "s/backend_yuming_com/backend_$backend/g" /home/web/conf.d/"$yuming".conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf # به صورت پویا پیکربندی بالادست تولید می کند upstream_servers="" for server in $reverseproxy_port; do upstream_servers="$upstream_servers server $server;\n" done # متغیرها را در قالب ها جایگزین کنید sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf nginx_http_on docker exec nginx nginx -s reload nginx_web_on } ldnmp_web_status() { root_use while true; do local cert_count=$(ls /home/web/certs/*_cert.pem 2>/dev/null | wc -l) local output="站点: ${gl_lv}${cert_count}${gl_bai}" local dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]') local db_count=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -e "SHOW DATABASES;" 2> /dev/null | grep -Ev "Database|information_schema|mysql|performance_schema|sys" | wc -l) local db_output="数据库: ${gl_lv}${db_count}${gl_bai}" clear send_stats "مدیریت سایت LDNMP" echo "محیط LDNMP" echo "------------------------" ldnmp_v # ls -t /home/web/conf.d | sed 's/\.[^.]*$//' echo -e "${output}زمان انقضا گواهی" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') if [ -n "$domain" ]; then local expire_date=$(openssl x509 -noout -enddate -in "$cert_file" | awk -F'=' '{print $2}') local formatted_date=$(date -d "$expire_date" '+%Y-%m-%d') printf "%-30s%s\n" "$domain" "$formatted_date" fi done echo "------------------------" echo "" echo -e "${db_output}" echo -e "------------------------" local dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]') docker exec mysql mysql -u root -p"$dbrootpasswd" -e "SHOW DATABASES;" 2> /dev/null | grep -Ev "Database|information_schema|mysql|performance_schema|sys" echo "------------------------" echo "" echo "فهرست سایت" echo "------------------------" echo -e "داده${gl_hui}/home/web/html${gl_bai}گواهی${gl_hui}/home/web/certs${gl_bai}پیکربندی${gl_hui}/home/web/conf.d${gl_bai}" echo "------------------------" echo "" echo "عمل کردن" echo "------------------------" echo "1. درخواست/به روزرسانی گواهی نام دامنه 2. نام دامنه سایت را تغییر دهید" echo "3. حافظه پنهان سایت را تمیز کنید. یک سایت مرتبط ایجاد کنید" echo "5. مشاهده ورود به سیستم دسترسی 6. مشاهده خطای خطای" echo "7. ویرایش پیکربندی جهانی 8. پیکربندی سایت را ویرایش کنید" echo "9. مدیریت پایگاه داده سایت 10. مشاهده گزارش تجزیه و تحلیل سایت" echo "------------------------" echo "20. داده های سایت مشخص شده را حذف کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) send_stats "برای گواهی نام دامنه اقدام کنید" read -e -p "لطفاً نام دامنه خود را وارد کنید:" yuming install_certbot docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status ;; 2) send_stats "نام دامنه سایت را تغییر دهید" echo -e "${gl_hong}بسیار توصیه می شود:${gl_bai}ابتدا از کل داده های سایت نسخه پشتیبان تهیه کرده و سپس نام دامنه سایت را تغییر دهید!" read -e -p "لطفاً نام دامنه قدیمی را وارد کنید:" oddyuming read -e -p "لطفاً نام دامنه جدید را وارد کنید:" yuming install_certbot install_ssltls certs_status # جایگزینی mysql add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') local odd_dbname="${odd_dbname}" docker exec mysql mysqldump -u root -p"$dbrootpasswd" $odd_dbname | docker exec -i mysql mysql -u root -p"$dbrootpasswd" $dbname docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE $odd_dbname;" local tables=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -D $dbname -e "SHOW TABLES;" | awk '{ if (NR>1) print $1 }') for table in $tables; do columns=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -D $dbname -e "SHOW COLUMNS FROM $table;" | awk '{ if (NR>1) print $1 }') for column in $columns; do docker exec mysql mysql -u root -p"$dbrootpasswd" -D $dbname -e "UPDATE $table SET $column = REPLACE($column, '$oddyuming', '$yuming') WHERE $column LIKE '%$oddyuming%';" done done # جایگزینی فهرست وب سایت mv /home/web/html/$oddyuming /home/web/html/$yuming find /home/web/html/$yuming -type f -exec sed -i "s/$odd_dbname/$dbname/g" {} + find /home/web/html/$yuming -type f -exec sed -i "s/$oddyuming/$yuming/g" {} + mv /home/web/conf.d/$oddyuming.conf /home/web/conf.d/$yuming.conf sed -i "s/$oddyuming/$yuming/g" /home/web/conf.d/$yuming.conf rm /home/web/certs/${oddyuming}_key.pem rm /home/web/certs/${oddyuming}_cert.pem docker exec nginx nginx -s reload ;; 3) web_cache ;; 4) send_stats "یک سایت مرتبط ایجاد کنید" echo -e "نام دامنه جدیدی را برای سایت موجود برای دسترسی مرتبط کنید" read -e -p "لطفاً نام دامنه موجود را وارد کنید:" oddyuming read -e -p "لطفاً نام دامنه جدید را وارد کنید:" yuming install_certbot install_ssltls certs_status cp /home/web/conf.d/$oddyuming.conf /home/web/conf.d/$yuming.conf sed -i "s|server_name $oddyuming|server_name $yuming|g" /home/web/conf.d/$yuming.conf sed -i "s|/etc/nginx/certs/${oddyuming}_cert.pem|/etc/nginx/certs/${yuming}_cert.pem|g" /home/web/conf.d/$yuming.conf sed -i "s|/etc/nginx/certs/${oddyuming}_key.pem|/etc/nginx/certs/${yuming}_key.pem|g" /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload ;; 5) send_stats "مشاهده ورود به سیستم دسترسی" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) send_stats "مشاهده خطای مشاهده" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) send_stats "پیکربندی جهانی را ویرایش کنید" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) send_stats "پیکربندی سایت را ویرایش کنید" read -e -p "برای ویرایش پیکربندی سایت ، لطفاً نام دامنه مورد نظر برای ویرایش را وارد کنید:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload ;; 9) phpmyadmin_upgrade break_end ;; 10) send_stats "مشاهده داده های سایت" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; 20) web_del docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null ;; *) break # 跳出循环,退出菜单 ;; esac done } check_panel_app() { if $lujing ; then check_panel="${gl_lv}已安装${gl_bai}" else check_panel="" fi } install_panel() { send_stats "${panelname}مدیریت کردن" while true; do clear check_panel_app echo -e "$panelname $check_panel" echo "${panelname}امروزه این یک هیئت مدیره عملیاتی و مدیریت نگهداری محبوب و قدرتمند است." echo "معرفی رسمی وب سایت:$panelurl " echo "" echo "------------------------" echo "1. نصب 2. مدیریت 3. حذف نصب کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" choice case $choice in 1) check_disk_space 1 install wget iptables_open panel_app_install send_stats "${panelname}نصب کردن" ;; 2) panel_app_manage send_stats "${panelname}کنترل کردن" ;; 3) panel_app_uninstall send_stats "${panelname}حذف کردن" ;; *) break ;; esac break_end done } check_frp_app() { if [ -d "/home/frp/" ]; then check_frp="${gl_lv}已安装${gl_bai}" else check_frp="${gl_hui}未安装${gl_bai}" fi } donlond_frp() { mkdir -p /home/frp/ && cd /home/frp/ rm -rf /home/frp/frp_0.61.0_linux_amd64 arch=$(uname -m) frp_v=$(curl -s https://api.github.com/repos/fatedier/frp/releases/latest | grep -oP '"tag_name": "v\K.*?(?=")') if [[ "$arch" == "x86_64" ]]; then curl -L ${gh_proxy}github.com/fatedier/frp/releases/download/v${frp_v}/frp_${frp_v}_linux_amd64.tar.gz -o frp_${frp_v}_linux_amd64.tar.gz elif [[ "$arch" == "armv7l" || "$arch" == "aarch64" ]]; then curl -L ${gh_proxy}github.com/fatedier/frp/releases/download/v${frp_v}/frp_${frp_v}_linux_arm.tar.gz -o frp_${frp_v}_linux_amd64.tar.gz else echo "معماری CPU فعلی پشتیبانی نمی شود:$arch" fi # آخرین پرونده FRP بارگیری شده را پیدا کنید latest_file=$(ls -t /home/frp/frp_*.tar.gz | head -n 1) # پرونده را از حالت فشرده خارج کنید tar -zxvf "$latest_file" # نام پوشه فشرده شده را دریافت کنید dir_name=$(tar -tzf "$latest_file" | head -n 1 | cut -f 1 -d '/') # پوشه را به نام نسخه یکپارچه تغییر نام دهید mv "$dir_name" "frp_0.61.0_linux_amd64" } generate_frps_config() { send_stats "سرور FRP را نصب کنید" # درگاه ها و اعتبارنامه های تصادفی تولید کنید local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) local dashboard_user="user_$(openssl rand -hex 4)" local dashboard_pwd=$(openssl rand -hex 8) donlond_frp # یک فایل frps.toml ایجاد کنید cat < /home/frp/frp_0.61.0_linux_amd64/frps.toml [common] bind_port = $bind_port authentication_method = token token = $token dashboard_port = $dashboard_port dashboard_user = $dashboard_user dashboard_pwd = $dashboard_pwd EOF # اطلاعات تولید شده ip_address echo "------------------------" echo "پارامترهای مورد نیاز برای استقرار مشتری" echo "سرویس IP:$ipv4_address" echo "token: $token" echo echo "اطلاعات پانل FRP" echo "آدرس پنل FRP: http: //$ipv4_address:$dashboard_port" echo "نام کاربری پنل FRP:$dashboard_user" echo "رمز عبور پنل FRP:$dashboard_pwd" echo echo "------------------------" install tmux tmux kill-session -t frps >/dev/null 2>&1 tmux new -d -s "frps" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frps -c frps.toml" check_crontab_installed crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 (crontab -l ; echo '@reboot tmux new -d -s "frps" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frps -c frps.toml"') | crontab - > /dev/null 2>&1 open_port 8055 8056 } configure_frpc() { send_stats "مشتری FRP را نصب کنید" read -e -p "لطفاً IP Docking Network External را وارد کنید:" server_addr read -e -p "لطفاً توکن docking شبکه خارجی را وارد کنید:" token echo if command -v opkg >/dev/null 2>&1; then opkg update opkg install grep fi donlond_frp cat < /home/frp/frp_0.61.0_linux_amd64/frpc.toml [common] server_addr = ${server_addr} server_port = 8055 token = ${token} EOF install tmux tmux kill-session -t frpc >/dev/null 2>&1 tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml" check_crontab_installed crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 (crontab -l ; echo '@reboot tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"') | crontab - > /dev/null 2>&1 open_port 8055 } add_forwarding_service() { send_stats "سرویس Intranet FRP را اضافه کنید" # کاربر را وادار به وارد کردن نام سرویس و اطلاعات ارسال کنید read -e -p "لطفاً نام سرویس را وارد کنید:" service_name read -e -p "لطفاً نوع حمل و نقل (TCP/UDP) را وارد کنید [TCP پیش فرض] را وارد کنید:" service_type local service_type=${service_type:-tcp} read -e -p "لطفاً IP Intranet را وارد کنید [پیش فرض 127.0.0.1 را وارد کنید]:" local_ip local local_ip=${local_ip:-127.0.0.1} read -e -p "لطفاً درگاه اینترانت را وارد کنید:" local_port read -e -p "لطفاً درگاه شبکه خارجی را وارد کنید:" remote_port # ورودی کاربر را به پرونده پیکربندی بنویسید cat <> /home/frp/frp_0.61.0_linux_amd64/frpc.toml [$service_name] type = ${service_type} local_ip = ${local_ip} local_port = ${local_port} remote_port = ${remote_port} EOF # اطلاعات تولید شده echo "خدمت کردن$service_nameبا موفقیت به frpc.toml اضافه شد" tmux kill-session -t frpc >/dev/null 2>&1 tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml" open_port $local_port } delete_forwarding_service() { send_stats "سرویس Intranet FRP را حذف کنید" # کاربر را وادار به وارد کردن نام خدماتی که باید حذف شود read -e -p "لطفاً نام خدماتی را که باید حذف شود وارد کنید:" service_name # برای حذف سرویس و تنظیمات مربوط به آن از SED استفاده کنید sed -i "/\[$service_name\]/,/^$/d" /home/frp/frp_0.61.0_linux_amd64/frpc.toml echo "خدمت کردن$service_nameبا موفقیت از frpc.toml حذف شد" tmux kill-session -t frpc >/dev/null 2>&1 tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml" } list_forwarding_services() { local config_file="$1" # هدر را چاپ کنید printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' BEGIN { server_addr="" server_port="" current_service="" } /^server_addr = / { gsub(/"|'"'"'/, "", $3) server_addr=$3 } /^server_port = / { gsub(/"|'"'"'/, "", $3) server_port=$3 } /^\[.*\]/ { # اگر اطلاعات سرویس وجود دارد ، قبل از پردازش سرویس جدید ، سرویس فعلی را چاپ کنید if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ local_ip ":" local_port, \ server_addr ":" remote_port, \ type } # نام سرویس فعلی را به روز کنید if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 # مقدار قبلی را پاک کنید local_ip="" local_port="" remote_port="" type="" } } /^local_ip = / { gsub(/"|'"'"'/, "", $3) local_ip=$3 } /^local_port = / { gsub(/"|'"'"'/, "", $3) local_port=$3 } /^remote_port = / { gsub(/"|'"'"'/, "", $3) remote_port=$3 } /^type = / { gsub(/"|'"'"'/, "", $3) type=$3 } END { # اطلاعات را برای آخرین سرویس چاپ کنید if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ local_ip ":" local_port, \ server_addr ":" remote_port, \ type } }' "$config_file" } # درگاه سرور FRP را دریافت کنید get_frp_ports() { mapfile -t ports < <(ss -tulnape | grep frps | awk '{print $5}' | awk -F':' '{print $NF}' | sort -u) } # ایجاد آدرس دسترسی generate_access_urls() { # ابتدا همه درگاه ها را دریافت کنید get_frp_ports # بررسی کنید که آیا پورت هایی غیر از 8055/8056 وجود دارد؟ local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then has_valid_ports=true break fi done # عنوان و محتوا را فقط در صورت وجود درگاه معتبر نشان دهید if [ "$has_valid_ports" = true ]; then echo "آدرس دسترسی خارجی خدمات FRP:" # پردازش آدرس IPv4 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done # پردازش آدرس های IPv6 (در صورت وجود) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://[${ipv6_address}]:${port}" fi done fi # رسیدگی به پیکربندی HTTPS for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then frps_search_pattern="${ipv4_address}:${port}" for file in /home/web/conf.d/*.conf; do if [ -f "$file" ]; then if grep -q "$frps_search_pattern" "$file" 2>/dev/null; then echo "https://$(basename "$file" .conf)" fi fi done fi done fi } frps_main_ports() { ip_address generate_access_urls } frps_panel() { send_stats "سرور FRP" local docker_port=8056 while true; do clear check_frp_app echo -e "سرور FRP$check_frp" echo "برای افشای دستگاه ها بدون IP عمومی در اینترنت ، یک محیط سرویس نفوذ Intranet FRP ایجاد کنید" echo "معرفی وب سایت رسمی: https://github.com/fatedier/frp/" echo "آموزش ویدیو: https://www.bilibili.com/video/bv1ymw6e2ewl؟t=124.0" if [ -d "/home/frp/" ]; then check_docker_app_ip frps_main_ports fi echo "" echo "------------------------" echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید" echo "------------------------" echo "5. دسترسی به نام دامنه برای سرویس Intranet 6. دسترسی به نام دامنه را حذف کنید" echo "------------------------" echo "7. اجازه دسترسی به پورت IP+ 8 را داشته باشید." echo "------------------------" echo "00. وضعیت خدمات را تازه کنید. به منوی قبلی برگردید" echo "------------------------" read -e -p "انتخاب خود را وارد کنید:" choice case $choice in 1) generate_frps_config rm -rf /home/frp/*.tar.gz echo "سرور FRP نصب شده است" ;; 2) cp -f /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp cp -f /home/frp/frps.toml /home/frp/frp_0.61.0_linux_amd64/frps.toml tmux kill-session -t frps >/dev/null 2>&1 tmux new -d -s "frps" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frps -c frps.toml" crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 (crontab -l ; echo '@reboot tmux new -d -s "frps" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frps -c frps.toml"') | crontab - > /dev/null 2>&1 rm -rf /home/frp/*.tar.gz echo "سرور FRP به روز شده است" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 tmux kill-session -t frps >/dev/null 2>&1 rm -rf /home/frp close_port 8055 8056 echo "برنامه حذف شده است" ;; 5) echo "سرویس نفوذ اینترانت معکوس در دسترسی به نام دامنه" send_stats "دسترسی FRP به نام دامنه خارجی" add_yuming read -e -p "لطفاً درگاه سرویس نفوذ Intranet خود را وارد کنید:" frps_port ldnmp_Proxy ${yuming} ${ipv4_address} ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) echo "فرمت نام دامنه مثال. com با https: // همراه نیست" web_del ;; 7) send_stats "دسترسی به IP" read -e -p "لطفاً برای انتشار درگاه را وارد کنید:" frps_port clear_host_port_rules "$frps_port" "$ipv4_address" ;; 8) send_stats "دسترسی به IP" echo "اگر به نام دامنه ضد نسل دسترسی پیدا کرده اید ، می توانید از این عملکرد برای مسدود کردن دسترسی به پورت IP+ استفاده کنید ، که امنیت بیشتری دارد." read -e -p "لطفاً درگاه مورد نیاز خود را وارد کنید:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) send_stats "وضعیت سرویس FRP را تازه کنید" echo "وضعیت خدمات FRP تازه شده است" ;; *) break ;; esac break_end done } frpc_panel() { send_stats "مشتری FRP" local docker_port=8055 while true; do clear check_frp_app echo -e "مشتری FRP$check_frp" echo "با اتصال به سرور ، پس از اتصال ، می توانید سرویس نفوذ اینترانت را به دسترسی به اینترنت ایجاد کنید" echo "معرفی وب سایت رسمی: https://github.com/fatedier/frp/" echo "آموزش ویدیو: https://www.bilibili.com/video/bv1ymw6e2ewl؟t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then list_forwarding_services "/home/frp/frp_0.61.0_linux_amd64/frpc.toml" fi echo "" echo "------------------------" echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید" echo "------------------------" echo "4. اضافه کردن خدمات خارجی 5. خدمات خارجی را حذف کنید 6. پیکربندی خدمات به صورت دستی" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "انتخاب خود را وارد کنید:" choice case $choice in 1) configure_frpc rm -rf /home/frp/*.tar.gz echo "مشتری FRP نصب شده است" ;; 2) cp -f /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp cp -f /home/frp/frpc.toml /home/frp/frp_0.61.0_linux_amd64/frpc.toml tmux kill-session -t frpc >/dev/null 2>&1 tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml" crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 (crontab -l ; echo '@reboot tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml"') | crontab - > /dev/null 2>&1 rm -rf /home/frp/*.tar.gz echo "مشتری FRP به روز شده است" ;; 3) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 tmux kill-session -t frpc >/dev/null 2>&1 rm -rf /home/frp close_port 8055 echo "برنامه حذف شده است" ;; 4) add_forwarding_service ;; 5) delete_forwarding_service ;; 6) install nano nano /home/frp/frp_0.61.0_linux_amd64/frpc.toml tmux kill-session -t frpc >/dev/null 2>&1 tmux new -d -s "frpc" "cd /home/frp/frp_0.61.0_linux_amd64 && ./frpc -c frpc.toml" ;; *) break ;; esac break_end done } yt_menu_pro() { local VIDEO_DIR="/home/yt-dlp" local URL_FILE="$VIDEO_DIR/urls.txt" local ARCHIVE_FILE="$VIDEO_DIR/archive.txt" mkdir -p "$VIDEO_DIR" while true; do if [ -x "/usr/local/bin/yt-dlp" ]; then local YTDLP_STATUS="${gl_lv}已安装${gl_bai}" else local YTDLP_STATUS="${gl_hui}未安装${gl_bai}" fi clear send_stats "ابزار بارگیری YT-DLP" echo -e "yt-dlp $YTDLP_STATUS" echo -e "YT-DLP یک ابزار قدرتمند بارگیری ویدیویی است که از هزاران سایت از جمله YouTube ، Bilibili ، Twitter و غیره پشتیبانی می کند." echo -e "آدرس وب سایت رسمی: https://github.com/yt-dlp/yt-dlp" echo "-------------------------" echo "لیست ویدیویی بارگیری شده:" ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(هنوز هیچ)" echo "-------------------------" echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید" echo "-------------------------" echo "5. دانلود ویدیوی مجرد 6. دانلود ویدیوی دسته ای 7. پارامتر سفارشی" echo "8. بارگیری به عنوان MP3 Audio 9. حذف فهرست ویدیو 10. مدیریت کوکی (در حال توسعه)" echo "-------------------------" echo "0. به منوی قبلی برگردید" echo "-------------------------" read -e -p "لطفاً شماره گزینه را وارد کنید:" choice case $choice in 1) send_stats "نصب YT-DLP ..." echo "نصب YT-DLP ..." install ffmpeg sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp sudo chmod a+rx /usr/local/bin/yt-dlp echo "نصب کامل است. برای ادامه ... هر کلید را فشار دهید ..." read ;; 2) send_stats "yt-dlp را به روز کنید ..." echo "yt-dlp را به روز کنید ..." sudo yt-dlp -U echo "به روزرسانی کامل شد. برای ادامه ... هر کلید را فشار دهید ..." read ;; 3) send_stats "حذف yt-dlp ..." echo "حذف yt-dlp ..." sudo rm -f /usr/local/bin/yt-dlp echo "حذف نصب کامل است. برای ادامه ... هر کلید را فشار دهید ..." read ;; 5) send_stats "بارگیری ویدیویی تک" read -e -p "لطفا لینک ویدیویی را وارد کنید:" url yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ --write-info-json \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites "$url" read -e -p "پس از اتمام بارگیری ، هر کلید را فشار دهید تا ادامه یابد ..." ;; 6) send_stats "دانلود ویدیوی دسته ای" install nano if [ ! -f "$URL_FILE" ]; then echo -e "# چندین آدرس پیوند ویدیویی را وارد کنید \ n# https://www.bilibili.com/bangumi/play/ep733316؟spm_id_from=333.337.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE echo "اکنون بارگیری دسته را شروع کنید ..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ --write-info-json \ -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites read -e -p "بارگیری دسته ای تکمیل شده است ، برای ادامه ... هر کلید را فشار دهید ..." ;; 7) send_stats "بارگیری ویدیوی سفارشی" read -e -p "لطفاً پارامتر کامل YT-DLP را وارد کنید (به استثنای YT-DLP):" custom yt-dlp -P "$VIDEO_DIR" $custom \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ --write-info-json \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites read -e -p "پس از اتمام اجرای ، برای ادامه ... هر کلید را فشار دهید ..." ;; 8) send_stats "دانلود MP3" read -e -p "لطفا لینک ویدیویی را وارد کنید:" url yt-dlp -P "$VIDEO_DIR" -x --audio-format mp3 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ --write-info-json \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites "$url" read -e -p "بارگیری صوتی به پایان رسیده است ، برای ادامه ... هر کلید را فشار دهید ..." ;; 9) send_stats "حذف ویدیو" read -e -p "لطفاً نام فیلم حذف را وارد کنید:" rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) break ;; esac done } current_timezone() { if grep -q 'Alpine' /etc/issue; then date +"%Z %z" else timedatectl | grep "Time zone" | awk '{print $3}' fi } set_timedate() { local shiqu="$1" if grep -q 'Alpine' /etc/issue; then install tzdata cp /usr/share/zoneinfo/${shiqu} /etc/localtime hwclock --systohc else timedatectl set-timezone ${shiqu} fi } # مشکل قطع DPKG را برطرف کنید fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock DEBIAN_FRONTEND=noninteractive dpkg --configure -a } linux_update() { echo -e "${gl_huang}به روزرسانی سیستم ...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then yum -y update elif command -v apt &>/dev/null; then fix_dpkg DEBIAN_FRONTEND=noninteractive apt update -y DEBIAN_FRONTEND=noninteractive apt full-upgrade -y elif command -v apk &>/dev/null; then apk update && apk upgrade elif command -v pacman &>/dev/null; then pacman -Syu --noconfirm elif command -v zypper &>/dev/null; then zypper refresh zypper update elif command -v opkg &>/dev/null; then opkg update else echo "مدیر بسته ناشناخته!" return fi } linux_clean() { echo -e "${gl_huang}تمیز کردن سیستم ...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y dnf clean all dnf makecache journalctl --rotate journalctl --vacuum-time=1s journalctl --vacuum-size=500M elif command -v yum &>/dev/null; then rpm --rebuilddb yum autoremove -y yum clean all yum makecache journalctl --rotate journalctl --vacuum-time=1s journalctl --vacuum-size=500M elif command -v apt &>/dev/null; then fix_dpkg apt autoremove --purge -y apt clean -y apt autoclean -y journalctl --rotate journalctl --vacuum-time=1s journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then echo "حافظه پنهان مدیر بسته را تمیز کنید ..." apk cache clean echo "ورود به سیستم سیستم ..." rm -rf /var/log/* echo "حذف حافظه پنهان APK ..." rm -rf /var/cache/apk/* echo "پرونده های موقت را حذف کنید ..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then pacman -Rns $(pacman -Qdtq) --noconfirm pacman -Scc --noconfirm journalctl --rotate journalctl --vacuum-time=1s journalctl --vacuum-size=500M elif command -v zypper &>/dev/null; then zypper clean --all zypper refresh journalctl --rotate journalctl --vacuum-time=1s journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then echo "ورود به سیستم سیستم ..." rm -rf /var/log/* echo "پرونده های موقت را حذف کنید ..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then echo "وابستگی های بلااستفاده را پاک کنید ..." pkg autoremove -y echo "حافظه پنهان مدیر بسته را تمیز کنید ..." pkg clean -y echo "ورود به سیستم سیستم ..." rm -rf /var/log/* echo "پرونده های موقت را حذف کنید ..." rm -rf /tmp/* else echo "مدیر بسته ناشناخته!" return fi return } bbr_on() { cat > /etc/sysctl.conf << EOF net.ipv4.tcp_congestion_control=bbr EOF sysctl -p } set_dns() { ip_address rm /etc/resolv.conf touch /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf echo "nameserver $dns2_ipv4" >> /etc/resolv.conf fi if [ -n "$ipv6_address" ]; then echo "nameserver $dns1_ipv6" >> /etc/resolv.conf echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi } set_dns_ui() { root_use send_stats "DNS را بهینه کنید" while true; do clear echo "آدرس DNS را بهینه کنید" echo "------------------------" echo "آدرس DNS فعلی" cat /etc/resolv.conf echo "------------------------" echo "" echo "1. بهینه سازی DNS خارجی:" echo " v4: 1.1.1.1 8.8.8.8" echo " v6: 2606:4700:4700::1111 2001:4860:4860::8888" echo "2. بهینه سازی DNS داخلی:" echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" echo "3. تنظیمات DNS را بصورت دستی ویرایش کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" local dns2_ipv4="8.8.8.8" local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns send_stats "بهینه سازی DNS خارجی" ;; 2) local dns1_ipv4="223.5.5.5" local dns2_ipv4="183.60.83.19" local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns send_stats "بهینه سازی DNS داخلی" ;; 3) install nano nano /etc/resolv.conf send_stats "پیکربندی DNS را به صورت دستی ویرایش کنید" ;; *) break ;; esac done } restart_ssh() { restart sshd ssh > /dev/null 2>&1 } correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" # اگر رمزعبور Authentication پیدا شد ، روی بله تنظیم کنید if grep -Eq "^PasswordAuthentication\s+yes" "$sshd_config"; then sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' "$sshd_config" sed -i 's/^\s*#\?\s*PasswordAuthentication.*/PasswordAuthentication yes/g' "$sshd_config" fi # در صورت یافتن pubkeyauthentication روی بله تنظیم شده است if grep -Eq "^PubkeyAuthentication\s+yes" "$sshd_config"; then sed -i -e 's/^\s*#\?\s*PermitRootLogin .*/PermitRootLogin prohibit-password/' \ -e 's/^\s*#\?\s*PasswordAuthentication .*/PasswordAuthentication no/' \ -e 's/^\s*#\?\s*PubkeyAuthentication .*/PubkeyAuthentication yes/' \ -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi # اگر نه با رمز عبور و نه با pubkeyauthentication مطابقت ندارد ، مقدار پیش فرض را تنظیم کنید if ! grep -Eq "^PasswordAuthentication\s+yes" "$sshd_config" && ! grep -Eq "^PubkeyAuthentication\s+yes" "$sshd_config"; then sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' "$sshd_config" sed -i 's/^\s*#\?\s*PasswordAuthentication.*/PasswordAuthentication yes/g' "$sshd_config" fi } new_ssh_port() { # از فایلهای پیکربندی SSH پشتیبان تهیه کنید cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config sed -i "s/Port [0-9]\+/Port $new_port/g" /etc/ssh/sshd_config correct_ssh_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 echo "درگاه SSH به: اصلاح شده است:$new_port" sleep 1 } add_sshkey() { ssh-keygen -t ed25519 -C "xxxx@gmail.com" -f /root/.ssh/sshkey -N "" cat ~/.ssh/sshkey.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys ip_address echo -e "اطلاعات کلیدی خصوصی تولید شده است. حتماً آن را کپی و ذخیره کنید.${gl_huang}${ipv4_address}_ssh.key${gl_bai}پرونده برای ورود به سیستم SSH آینده" echo "--------------------------------" cat ~/.ssh/sshkey echo "--------------------------------" sed -i -e 's/^\s*#\?\s*PermitRootLogin .*/PermitRootLogin prohibit-password/' \ -e 's/^\s*#\?\s*PasswordAuthentication .*/PasswordAuthentication no/' \ -e 's/^\s*#\?\s*PubkeyAuthentication .*/PubkeyAuthentication yes/' \ -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* echo -e "${gl_lv}ورود به سیستم کلید خصوصی Root فعال شده است ، ورود به سیستم رمز عبور بسته شده است ، اتصال مجدد اثر خواهد داشت${gl_bai}" } import_sshkey() { read -e -p "لطفاً محتویات کلید عمومی SSH خود را وارد کنید (معمولاً با "SSH-RSA" یا "SSH-ED25519" شروع می شود):" public_key if [[ -z "$public_key" ]]; then echo -e "${gl_hong}خطا: محتوای کلید عمومی وارد نشده است.${gl_bai}" return 1 fi echo "$public_key" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys sed -i -e 's/^\s*#\?\s*PermitRootLogin .*/PermitRootLogin prohibit-password/' \ -e 's/^\s*#\?\s*PasswordAuthentication .*/PasswordAuthentication no/' \ -e 's/^\s*#\?\s*PubkeyAuthentication .*/PubkeyAuthentication yes/' \ -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* echo -e "${gl_lv}کلید عمومی با موفقیت وارد شده است ، ورود به سیستم Root Private Key فعال شده است ، ورود به سیستم رمز عبور بسته شده است و اتصال مجدد اثر خواهد داشت${gl_bai}" } add_sshpasswd() { echo "رمز عبور ریشه خود را تنظیم کنید" passwd sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config; sed -i 's/^\s*#\?\s*PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config; rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh echo -e "${gl_lv}ورود به سیستم ریشه تنظیم شده است!${gl_bai}" } root_use() { clear [ "$EUID" -ne 0 ] && echo -e "${gl_huang}نکته:${gl_bai}این ویژگی به کاربر root نیاز دارد تا اجرا شود!" && break_end && kejilion } dd_xitong() { send_stats "نصب مجدد سیستم" dd_xitong_MollyLau() { wget --no-check-certificate -qO InstallNET.sh "${gh_proxy}raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh" && chmod a+x InstallNET.sh } dd_xitong_bin456789() { curl -O ${gh_proxy}raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh } dd_xitong_1() { echo -e "نام کاربری اولیه پس از نصب مجدد:${gl_huang}root${gl_bai}رمز عبور اولیه:${gl_huang}LeitboGi0ro${gl_bai}بندر اولیه:${gl_huang}22${gl_bai}" echo -e "برای ادامه ... هر کلید را فشار دهید ..." read -n 1 -s -r -p "" install wget dd_xitong_MollyLau } dd_xitong_2() { echo -e "نام کاربری اولیه پس از نصب مجدد:${gl_huang}Administrator${gl_bai}رمز عبور اولیه:${gl_huang}Teddysun.com${gl_bai}بندر اولیه:${gl_huang}3389${gl_bai}" echo -e "برای ادامه ... هر کلید را فشار دهید ..." read -n 1 -s -r -p "" install wget dd_xitong_MollyLau } dd_xitong_3() { echo -e "نام کاربری اولیه پس از نصب مجدد:${gl_huang}root${gl_bai}رمز عبور اولیه:${gl_huang}123@@@${gl_bai}بندر اولیه:${gl_huang}22${gl_bai}" echo -e "برای ادامه ... هر کلید را فشار دهید ..." read -n 1 -s -r -p "" dd_xitong_bin456789 } dd_xitong_4() { echo -e "نام کاربری اولیه پس از نصب مجدد:${gl_huang}Administrator${gl_bai}رمز عبور اولیه:${gl_huang}123@@@${gl_bai}بندر اولیه:${gl_huang}3389${gl_bai}" echo -e "برای ادامه ... هر کلید را فشار دهید ..." read -n 1 -s -r -p "" dd_xitong_bin456789 } while true; do root_use echo "نصب مجدد سیستم" echo "--------------------------------" echo -e "${gl_hong}توجه:${gl_bai}نصب مجدد برای از دست دادن تماس خطرناک است و کسانی که نگران هستند باید با احتیاط از آن استفاده کنند. انتظار می رود نصب مجدد 15 دقیقه طول بکشد ، لطفاً از قبل از داده ها نسخه پشتیبان تهیه کنید." echo -e "${gl_hui}با تشکر از مولیلاو و BIN456789 برای پشتیبانی از فیلمنامه!${gl_bai} " echo "------------------------" echo "1. Debian 12 2. Debian 11" echo "3. Debian 10 4. Debian 9" echo "------------------------" echo "11. Ubuntu 24.04 12. Ubuntu 22.04" echo "13. Ubuntu 20.04 14. Ubuntu 18.04" echo "------------------------" echo "21. Rocky Linux 9 22. Rocky Linux 8" echo "23. Alma Linux 9 24. Alma Linux 8" echo "25. oracle Linux 9 26. oracle Linux 8" echo "27. Fedora Linux 41 28. Fedora Linux 40" echo "29. CentOS 10 30. CentOS 9" echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" echo "35. OpenSUSE TUMBLEWEED 36" echo "------------------------" echo "41. Windows 11 42. Windows 10" echo "43. Windows 7 44. Windows Server 2022" echo "45. Windows Server 2019 46. Windows Server 2016" echo "47. Windows 11 ARM" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفاً سیستم را برای نصب مجدد انتخاب کنید:" sys_choice case "$sys_choice" in 1) send_stats "نصب مجدد دبیان 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 2) send_stats "نصب مجدد دبیان 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 3) send_stats "نصب مجدد دبیان 10" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 4) send_stats "نصب مجدد دبیان 9" dd_xitong_1 bash InstallNET.sh -debian 9 reboot exit ;; 11) send_stats "Ubuntu 24.04 را دوباره نصب کنید" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) send_stats "22.04 اوبونتو را دوباره نصب کنید" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) send_stats "20.04 اوبونتو را دوباره نصب کنید" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) send_stats "Ubuntu 18.04 را دوباره نصب کنید" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot exit ;; 21) send_stats "Rockylinux9 را دوباره نصب کنید" dd_xitong_3 bash reinstall.sh rocky reboot exit ;; 22) send_stats "Rockylinux8 را دوباره نصب کنید" dd_xitong_3 bash reinstall.sh rocky 8 reboot exit ;; 23) send_stats "نصب مجدد alma9" dd_xitong_3 bash reinstall.sh almalinux reboot exit ;; 24) send_stats "نصب مجدد alma8" dd_xitong_3 bash reinstall.sh almalinux 8 reboot exit ;; 25) send_stats "اوراکل 9 را دوباره نصب کنید" dd_xitong_3 bash reinstall.sh oracle reboot exit ;; 26) send_stats "دوباره نصب Oracle8" dd_xitong_3 bash reinstall.sh oracle 8 reboot exit ;; 27) send_stats "نصب مجدد fedora41" dd_xitong_3 bash reinstall.sh fedora reboot exit ;; 28) send_stats "نصب مجدد Fedora40" dd_xitong_3 bash reinstall.sh fedora 40 reboot exit ;; 29) send_stats "نصب مجدد Centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot exit ;; 30) send_stats "نصب مجدد Centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot exit ;; 31) send_stats "نصب مجدد آلپ" dd_xitong_1 bash InstallNET.sh -alpine reboot exit ;; 32) send_stats "مجدداً قوس را نصب کنید" dd_xitong_3 bash reinstall.sh arch reboot exit ;; 33) send_stats "کالی را دوباره نصب کنید" dd_xitong_3 bash reinstall.sh kali reboot exit ;; 34) send_stats "بازگرداندن اوپنولر" dd_xitong_3 bash reinstall.sh openeuler reboot exit ;; 35) send_stats "بازگرداندن OpenSuse" dd_xitong_3 bash reinstall.sh opensuse reboot exit ;; 36) send_stats "بارگیری مجدد گاو پرواز" dd_xitong_3 bash reinstall.sh fnos reboot exit ;; 41) send_stats "نصب ویندوز 11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot exit ;; 42) dd_xitong_2 send_stats "ویندوز 10 را دوباره نصب کنید" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) send_stats "نصب ویندوز 7" dd_xitong_4 bash reinstall.sh windows --iso="https://drive.massgrave.dev/cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso" --image-name='Windows 7 PROFESSIONAL' reboot exit ;; 44) send_stats "ویندوز سرور 22 را دوباره نصب کنید" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) send_stats "ویندوز سرور 19 را دوباره نصب کنید" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) send_stats "ویندوز سرور 16 را دوباره نصب کنید" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot exit ;; 47) send_stats "بازوی Windows11 را دوباره نصب کنید" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot exit ;; *) break ;; esac done } bbrv3() { root_use send_stats "مدیریت BBRV3" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then bash <(curl -sL jhb.ovh/jb/bbrv3arm.sh) break_end linux_Settings fi if dpkg -l | grep -q 'linux-xanmod'; then while true; do clear local kernel_version=$(uname -r) echo "شما هسته bbrv3 xanmod را نصب کرده اید" echo "نسخه هسته فعلی:$kernel_version" echo "" echo "مدیریت هسته" echo "------------------------" echo "1. هسته BBRV3 را به روز کنید. هسته BBRV3 را حذف کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) apt purge -y 'linux-*xanmod1*' update-grub # wget -qO - https://dl.xanmod.org/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes wget -qO - ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes # مرحله 3: یک مخزن اضافه کنید echo 'deb [signed-by=/usr/share/keyrings/xanmod-archive-keyring.gpg] http://deb.xanmod.org releases main' | tee /etc/apt/sources.list.d/xanmod-release.list # version=$(wget -q https://dl.xanmod.org/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+') local version=$(wget -q ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+') apt update -y apt install -y linux-xanmod-x64v$version echo "هسته XanMod به روز شده است. بعد از راه اندازی مجدد عمل کنید" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot ;; 2) apt purge -y 'linux-*xanmod1*' update-grub echo "هسته Xanmod حذف نشده است. بعد از راه اندازی مجدد عمل کنید" server_reboot ;; *) break # 跳出循环,退出菜单 ;; esac done else clear echo "شتاب BBR3 را تنظیم کنید" echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv14k421x7bs؟t=0.1" echo "------------------------------------------------" echo "فقط از دبیان/اوبونتو پشتیبانی کنید" echo "لطفاً از داده ها نسخه پشتیبان تهیه کنید و BBR3 را برای ارتقاء هسته لینوکس فعال کنید." echo "VPS دارای حافظه 512 متر است ، لطفاً حافظه مجازی 1G را از قبل اضافه کنید تا از تماس تلفنی به دلیل حافظه ناکافی جلوگیری شود!" echo "------------------------------------------------" read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice case "$choice" in [Yy]) if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then echo "محیط فعلی از آن پشتیبانی نمی کند ، فقط از سیستم های Debian و Ubuntu پشتیبانی می کند" break_end linux_Settings fi else echo "برای تعیین نوع سیستم عامل امکان پذیر نیست" break_end linux_Settings fi check_swap install wget gnupg # wget -qO - https://dl.xanmod.org/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes wget -qO - ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes # مرحله 3: یک مخزن اضافه کنید echo 'deb [signed-by=/usr/share/keyrings/xanmod-archive-keyring.gpg] http://deb.xanmod.org releases main' | tee /etc/apt/sources.list.d/xanmod-release.list # version=$(wget -q https://dl.xanmod.org/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+') local version=$(wget -q ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+') apt update -y apt install -y linux-xanmod-x64v$version bbr_on echo "هسته XANMOD نصب شده و BBR3 با موفقیت فعال می شود. بعد از راه اندازی مجدد عمل کنید" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot ;; [Nn]) echo "لغو شده" ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac fi } elrepo_install() { # وارد کردن کلید عمومی Elrepo GPG echo "کلید عمومی Elrepo GPG را وارد کنید ..." rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # نسخه سیستم را تشخیص دهید local os_version=$(rpm -q --qf "%{VERSION}" $(rpm -qf /etc/os-release) 2>/dev/null | awk -F '.' '{print $1}') local os_name=$(awk -F= '/^NAME/{print $2}' /etc/os-release) # اطمینان حاصل کنید که ما روی یک سیستم عامل پشتیبانی شده اجرا می کنیم if [[ "$os_name" != *"Red Hat"* && "$os_name" != *"AlmaLinux"* && "$os_name" != *"Rocky"* && "$os_name" != *"Oracle"* && "$os_name" != *"CentOS"* ]]; then echo "سیستم عامل های پشتیبانی نشده:$os_name" break_end linux_Settings fi # اطلاعات سیستم عامل شناسایی شده را چاپ کنید echo "سیستم عامل شناسایی شده:$os_name $os_version" # پیکربندی انبار الپو مربوطه را مطابق با نسخه سیستم نصب کنید if [[ "$os_version" == 8 ]]; then echo "تنظیمات مخزن Elrepo (نسخه 8) را نصب کنید ..." yum -y install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm elif [[ "$os_version" == 9 ]]; then echo "تنظیمات مخزن Elrepo را نصب کنید (نسخه 9) ..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm else echo "نسخه های سیستم پشتیبانی نشده:$os_version" break_end linux_Settings fi # مخزن هسته Elrepo را فعال کرده و جدیدترین هسته اصلی را نصب کنید echo "مخزن هسته Elrepo را فعال کنید و آخرین هسته اصلی را نصب کنید ..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml echo "پیکربندی مخزن Elrepo در آخرین هسته اصلی خط نصب و به روز شده است." server_reboot } elrepo() { root_use send_stats "مدیریت هسته Red Hat" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) echo "شما هسته Elrepo را نصب کرده اید" echo "نسخه هسته فعلی:$kernel_version" echo "" echo "مدیریت هسته" echo "------------------------" echo "1. هسته Elrepo را به روز کنید." echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps elrepo_install send_stats "هسته Red Hat را به روز کنید" server_reboot ;; 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps echo "هسته Elrepo حذف نشده است. بعد از راه اندازی مجدد عمل کنید" send_stats "هسته Red Hat را حذف نصب کنید" server_reboot ;; *) break # 跳出循环,退出菜单 ;; esac done else clear echo "لطفاً از داده ها نسخه پشتیبان تهیه کنید و هسته لینوکس را برای شما به روز می کند" echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1mh4y1w7qa؟t=529.2" echo "------------------------------------------------" echo "فقط پشتیبانی از توزیع سری Red Hat Centos/Redhat/Alma/Rocky/Oracle" echo "ارتقاء هسته لینوکس می تواند عملکرد و امنیت سیستم را بهبود بخشد. توصیه می شود در صورت اجازه و ارتقاء محیط تولید با احتیاط ، آن را امتحان کنید!" echo "------------------------------------------------" read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice case "$choice" in [Yy]) check_swap elrepo_install send_stats "升级红帽内核" server_reboot ;; [Nn]) echo "已取消" ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac fi } clamav_freshclam() { echo -e "${gl_huang}正在更新病毒库...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ clamav/clamav-debian:latest \ freshclam } clamav_scan() { if [ $# -eq 0 ]; then echo "لطفاً دایرکتوری را برای اسکن مشخص کنید." return fi echo -e "${gl_huang}正在扫描目录$@... ${gl_bai}" # 构建 mount 参数 local MOUNT_PARAMS="" for dir in "$@"; do MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done # 构建 clamscan 命令参数 local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " done mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 # 执行 Docker 命令 docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ $MOUNT_PARAMS \ -v /home/docker/clamav/log/:/var/log/clamav/ \ clamav/clamav-debian:latest \ clamscan -r --log=/var/log/clamav/scan.log $SCAN_PARAMS echo -e "${gl_lv}$@ اسکن تکمیل شده است ، گزارش ویروس ذخیره می شود${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" echo -e "${gl_lv}如果有病毒请在${gl_huang}scan.log${gl_lv}文件中搜索FOUND关键字确认病毒位置 ${gl_bai}" } clamav() { root_use send_stats "病毒扫描管理" while true; do clear echo "ابزار اسکن ویروس Clamav" echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1tqvze4eqm؟t=0.1" echo "------------------------" echo "این یک ابزار نرم افزاری آنتی ویروس منبع باز است که عمدتاً برای تشخیص و حذف انواع بدافزار مورد استفاده قرار می گیرد." echo "از جمله ویروس ها ، اسب های تروجان ، جاسوس ، اسکریپت های مخرب و سایر نرم افزارهای مضر." echo "------------------------" echo -e "${gl_lv}1 اسکن کامل دیسک${gl_bai} ${gl_huang}2. فهرست مهم را اسکن کنید${gl_bai} ${gl_kjlan}3. اسکن دایرکتوری سفارشی${gl_bai}" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) send_stats "اسکن دیسک کامل" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam clamav_scan / break_end ;; 2) send_stats "اسکن دایرکتوری مهم" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam clamav_scan /etc /var /usr /home /root break_end ;; 3) send_stats "اسکن دایرکتوری سفارشی" read -e -p "لطفاً برای اسکن ، جدا شده توسط فضاها (به عنوان مثال: /etc /var /usr /home /root) دایرکتوری را وارد کنید:" directories install_docker clamav_freshclam clamav_scan $directories break_end ;; *) break # 跳出循环,退出菜单 ;; esac done } # عملکرد بهینه سازی حالت با کارایی بالا optimize_high_performance() { echo -e "${gl_lv}روی دادن${tiaoyou_moshi}...${gl_bai}" echo -e "${gl_lv}توصیف کننده های پرونده را بهینه کنید ...${gl_bai}" ulimit -n 65535 echo -e "${gl_lv}بهینه سازی حافظه مجازی ...${gl_bai}" sysctl -w vm.swappiness=10 2>/dev/null sysctl -w vm.dirty_ratio=15 2>/dev/null sysctl -w vm.dirty_background_ratio=5 2>/dev/null sysctl -w vm.overcommit_memory=1 2>/dev/null sysctl -w vm.min_free_kbytes=65536 2>/dev/null echo -e "${gl_lv}تنظیمات شبکه را بهینه کنید ...${gl_bai}" sysctl -w net.core.rmem_max=16777216 2>/dev/null sysctl -w net.core.wmem_max=16777216 2>/dev/null sysctl -w net.core.netdev_max_backlog=250000 2>/dev/null sysctl -w net.core.somaxconn=4096 2>/dev/null sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216' 2>/dev/null sysctl -w net.ipv4.tcp_wmem='4096 65536 16777216' 2>/dev/null sysctl -w net.ipv4.tcp_congestion_control=bbr 2>/dev/null sysctl -w net.ipv4.tcp_max_syn_backlog=8192 2>/dev/null sysctl -w net.ipv4.tcp_tw_reuse=1 2>/dev/null sysctl -w net.ipv4.ip_local_port_range='1024 65535' 2>/dev/null echo -e "${gl_lv}بهینه سازی مدیریت حافظه پنهان ...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null echo -e "${gl_lv}تنظیمات CPU را بهینه کنید ...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null echo -e "${gl_lv}بهینه سازی های دیگر ...${gl_bai}" # برای کاهش تأخیر صفحات بزرگ را غیرفعال کنید echo never > /sys/kernel/mm/transparent_hugepage/enabled # تعادل Numa را غیرفعال کنید sysctl -w kernel.numa_balancing=0 2>/dev/null } # عملکرد بهینه سازی حالت تساوی optimize_balanced() { echo -e "${gl_lv}تغییر به حالت تساوی ...${gl_bai}" echo -e "${gl_lv}توصیف کننده های پرونده را بهینه کنید ...${gl_bai}" ulimit -n 32768 echo -e "${gl_lv}بهینه سازی حافظه مجازی ...${gl_bai}" sysctl -w vm.swappiness=30 2>/dev/null sysctl -w vm.dirty_ratio=20 2>/dev/null sysctl -w vm.dirty_background_ratio=10 2>/dev/null sysctl -w vm.overcommit_memory=0 2>/dev/null sysctl -w vm.min_free_kbytes=32768 2>/dev/null echo -e "${gl_lv}تنظیمات شبکه را بهینه کنید ...${gl_bai}" sysctl -w net.core.rmem_max=8388608 2>/dev/null sysctl -w net.core.wmem_max=8388608 2>/dev/null sysctl -w net.core.netdev_max_backlog=125000 2>/dev/null sysctl -w net.core.somaxconn=2048 2>/dev/null sysctl -w net.ipv4.tcp_rmem='4096 87380 8388608' 2>/dev/null sysctl -w net.ipv4.tcp_wmem='4096 32768 8388608' 2>/dev/null sysctl -w net.ipv4.tcp_congestion_control=bbr 2>/dev/null sysctl -w net.ipv4.tcp_max_syn_backlog=4096 2>/dev/null sysctl -w net.ipv4.tcp_tw_reuse=1 2>/dev/null sysctl -w net.ipv4.ip_local_port_range='1024 49151' 2>/dev/null echo -e "${gl_lv}بهینه سازی مدیریت حافظه پنهان ...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null echo -e "${gl_lv}تنظیمات CPU را بهینه کنید ...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null echo -e "${gl_lv}بهینه سازی های دیگر ...${gl_bai}" # صفحه شفاف را بازیابی کنید echo always > /sys/kernel/mm/transparent_hugepage/enabled # تعادل Numa را بازیابی کنید sysctl -w kernel.numa_balancing=1 2>/dev/null } # عملکرد تنظیمات پیش فرض را بازیابی کنید restore_defaults() { echo -e "${gl_lv}به تنظیمات پیش فرض بازگردید ...${gl_bai}" echo -e "${gl_lv}بازگرداندن توصیف کننده پرونده ...${gl_bai}" ulimit -n 1024 echo -e "${gl_lv}بازیابی حافظه مجازی ...${gl_bai}" sysctl -w vm.swappiness=60 2>/dev/null sysctl -w vm.dirty_ratio=20 2>/dev/null sysctl -w vm.dirty_background_ratio=10 2>/dev/null sysctl -w vm.overcommit_memory=0 2>/dev/null sysctl -w vm.min_free_kbytes=16384 2>/dev/null echo -e "${gl_lv}بازگرداندن تنظیمات شبکه ...${gl_bai}" sysctl -w net.core.rmem_max=212992 2>/dev/null sysctl -w net.core.wmem_max=212992 2>/dev/null sysctl -w net.core.netdev_max_backlog=1000 2>/dev/null sysctl -w net.core.somaxconn=128 2>/dev/null sysctl -w net.ipv4.tcp_rmem='4096 87380 6291456' 2>/dev/null sysctl -w net.ipv4.tcp_wmem='4096 16384 4194304' 2>/dev/null sysctl -w net.ipv4.tcp_congestion_control=cubic 2>/dev/null sysctl -w net.ipv4.tcp_max_syn_backlog=2048 2>/dev/null sysctl -w net.ipv4.tcp_tw_reuse=0 2>/dev/null sysctl -w net.ipv4.ip_local_port_range='32768 60999' 2>/dev/null echo -e "${gl_lv}بازگرداندن مدیریت حافظه پنهان ...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null echo -e "${gl_lv}تنظیمات CPU را بازیابی کنید ...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null echo -e "${gl_lv}بهینه سازی های دیگر را بازیابی کنید ...${gl_bai}" # صفحه شفاف را بازیابی کنید echo always > /sys/kernel/mm/transparent_hugepage/enabled # تعادل Numa را بازیابی کنید sysctl -w kernel.numa_balancing=1 2>/dev/null } # عملکرد بهینه سازی ساختمان وب سایت optimize_web_server() { echo -e "${gl_lv}به حالت بهینه سازی ساختمان وب سایت بروید ...${gl_bai}" echo -e "${gl_lv}توصیف کننده های پرونده را بهینه کنید ...${gl_bai}" ulimit -n 65535 echo -e "${gl_lv}بهینه سازی حافظه مجازی ...${gl_bai}" sysctl -w vm.swappiness=10 2>/dev/null sysctl -w vm.dirty_ratio=20 2>/dev/null sysctl -w vm.dirty_background_ratio=10 2>/dev/null sysctl -w vm.overcommit_memory=1 2>/dev/null sysctl -w vm.min_free_kbytes=65536 2>/dev/null echo -e "${gl_lv}تنظیمات شبکه را بهینه کنید ...${gl_bai}" sysctl -w net.core.rmem_max=16777216 2>/dev/null sysctl -w net.core.wmem_max=16777216 2>/dev/null sysctl -w net.core.netdev_max_backlog=5000 2>/dev/null sysctl -w net.core.somaxconn=4096 2>/dev/null sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216' 2>/dev/null sysctl -w net.ipv4.tcp_wmem='4096 65536 16777216' 2>/dev/null sysctl -w net.ipv4.tcp_congestion_control=bbr 2>/dev/null sysctl -w net.ipv4.tcp_max_syn_backlog=8192 2>/dev/null sysctl -w net.ipv4.tcp_tw_reuse=1 2>/dev/null sysctl -w net.ipv4.ip_local_port_range='1024 65535' 2>/dev/null echo -e "${gl_lv}بهینه سازی مدیریت حافظه پنهان ...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null echo -e "${gl_lv}تنظیمات CPU را بهینه کنید ...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null echo -e "${gl_lv}بهینه سازی های دیگر ...${gl_bai}" # برای کاهش تأخیر صفحات بزرگ را غیرفعال کنید echo never > /sys/kernel/mm/transparent_hugepage/enabled # تعادل Numa را غیرفعال کنید sysctl -w kernel.numa_balancing=0 2>/dev/null } Kernel_optimize() { root_use while true; do clear send_stats "مدیریت تنظیم هسته لینوکس" echo "بهینه سازی پارامترهای هسته در سیستم لینوکس" echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1kb421j7yg؟t=0.1" echo "------------------------------------------------" echo "انواع مختلفی از حالت های تنظیم پارامتر سیستم ارائه شده است و کاربران می توانند مطابق سناریوهای استفاده خودشان انتخاب و تغییر کنند." echo -e "${gl_huang}نکته:${gl_bai}لطفاً از آن با احتیاط در محیط تولید استفاده کنید!" echo "--------------------" echo "1. حالت بهینه سازی با کارایی بالا: عملکرد سیستم را به حداکثر برساند و توصیف کننده های فایل ، حافظه مجازی ، تنظیمات شبکه ، مدیریت حافظه نهان و تنظیمات CPU را بهینه کنید." echo "2. حالت بهینه سازی متعادل: تعادل بین عملکرد و مصرف منابع ، مناسب برای استفاده روزانه." echo "3. حالت بهینه سازی وب سایت: برای بهبود قابلیت های پردازش اتصال همزمان ، سرعت پاسخ و عملکرد کلی ، برای سرور وب سایت بهینه سازی کنید." echo "4. حالت بهینه سازی پخش زنده: برای کاهش تأخیر و بهبود عملکرد انتقال ، نیازهای ویژه جریان پخش زنده را بهینه کنید." echo "5. حالت بهینه سازی سرور بازی: برای بهبود قابلیت های پردازش همزمان و سرعت پاسخ ، برای سرورهای بازی بهینه سازی کنید." echo "6. تنظیمات پیش فرض را بازیابی کنید: تنظیمات سیستم را به پیکربندی پیش فرض بازیابی کنید." echo "--------------------" echo "0. به منوی قبلی برگردید" echo "--------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance send_stats "بهینه سازی حالت با کارایی بالا" ;; 2) cd ~ clear optimize_balanced send_stats "بهینه سازی حالت متعادل" ;; 3) cd ~ clear optimize_web_server send_stats "مدل بهینه سازی وب سایت" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance send_stats "بهینه سازی جریان مستقیم" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance send_stats "بهینه سازی سرور بازی" ;; 6) cd ~ clear restore_defaults send_stats "تنظیمات پیش فرض را بازیابی کنید" ;; *) break ;; esac break_end done } update_locale() { local lang=$1 local locale_file=$2 if [ -f /etc/os-release ]; then . /etc/os-release case $ID in debian|ubuntu|kali) install locales sed -i "s/^\s*#\?\s*${locale_file}/${locale_file}/" /etc/locale.gen locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} echo -e "${gl_lv}زبان سیستم به:$langاتصال مجدد SSH عملی می شود.${gl_bai}" hash -r break_end ;; centos|rhel|almalinux|rocky|fedora) install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf echo -e "${gl_lv}زبان سیستم به:$langاتصال مجدد SSH عملی می شود.${gl_bai}" hash -r break_end ;; *) echo "سیستم های پشتیبانی نشده:$ID" break_end ;; esac else echo "سیستم های پشتیبانی نشده ، نوع سیستم قابل تشخیص نیست." break_end fi } linux_language() { root_use send_stats "سوئیچ زبان سیستم" while true; do clear echo "زبان فعلی سیستم:$LANG" echo "------------------------" echo "1. انگلیسی 2. ساده چینی 3. چینی سنتی" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "انتخاب خود را وارد کنید:" choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" send_stats "تغییر به انگلیسی" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" send_stats "تغییر به چینی ساده شده" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" send_stats "به چینی سنتی بروید" ;; *) break ;; esac done } shell_bianse_profile() { if command -v dnf &>/dev/null || command -v yum &>/dev/null; then sed -i '/^PS1=/d' ~/.bashrc echo "${bianse}" >> ~/.bashrc # source ~/.bashrc else sed -i '/^PS1=/d' ~/.profile echo "${bianse}" >> ~/.profile # source ~/.profile fi echo -e "${gl_lv}تغییر تکمیل شده است SSH را دوباره وصل کنید تا تغییرات را مشاهده کنید!${gl_bai}" hash -r break_end } shell_bianse() { root_use send_stats "ابزار زیباسازی خط فرمان" while true; do clear echo "ابزار زیباسازی خط فرمان" echo "------------------------" echo -e "1. \033[1;32mroot \033[1;34mlocalhost \033[1;31m~ \033[0m${gl_bai}#" echo -e "2. \033[1;35mroot \033[1;36mlocalhost \033[1;33m~ \033[0m${gl_bai}#" echo -e "3. \033[1;31mroot \033[1;32mlocalhost \033[1;34m~ \033[0m${gl_bai}#" echo -e "4. \033[1;36mroot \033[1;33mlocalhost \033[1;37m~ \033[0m${gl_bai}#" echo -e "5. \033[1;37mroot \033[1;31mlocalhost \033[1;32m~ \033[0m${gl_bai}#" echo -e "6. \033[1;33mroot \033[1;34mlocalhost \033[1;35m~ \033[0m${gl_bai}#" echo -e "7. root localhost ~ #" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "انتخاب خود را وارد کنید:" choice case $choice in 1) local bianse="PS1='\[\033[1;32m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\] \[\033[1;31m\]\w\[\033[0m\] # '" shell_bianse_profile ;; 2) local bianse="PS1='\[\033[1;35m\]\u\[\033[0m\]@\[\033[1;36m\]\h\[\033[0m\] \[\033[1;33m\]\w\[\033[0m\] # '" shell_bianse_profile ;; 3) local bianse="PS1='\[\033[1;31m\]\u\[\033[0m\]@\[\033[1;32m\]\h\[\033[0m\] \[\033[1;34m\]\w\[\033[0m\] # '" shell_bianse_profile ;; 4) local bianse="PS1='\[\033[1;36m\]\u\[\033[0m\]@\[\033[1;33m\]\h\[\033[0m\] \[\033[1;37m\]\w\[\033[0m\] # '" shell_bianse_profile ;; 5) local bianse="PS1='\[\033[1;37m\]\u\[\033[0m\]@\[\033[1;31m\]\h\[\033[0m\] \[\033[1;32m\]\w\[\033[0m\] # '" shell_bianse_profile ;; 6) local bianse="PS1='\[\033[1;33m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\] \[\033[1;35m\]\w\[\033[0m\] # '" shell_bianse_profile ;; 7) local bianse="" shell_bianse_profile ;; *) break ;; esac done } linux_trash() { root_use send_stats "ایستگاه بازیافت سیستم" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" while true; do local trash_status if ! grep -q "trash-put" "$bashrc_profile"; then trash_status="${gl_hui}未启用${gl_bai}" else trash_status="${gl_lv}已启用${gl_bai}" fi clear echo -e "سطل بازیافت فعلی${trash_status}" echo -e "پس از فعال کردن ، پرونده های حذف شده توسط RM ابتدا وارد سطل بازیافت می شوند تا از حذف اشتباه پرونده های مهم جلوگیری شود!" echo "------------------------------------------------" ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "سطل بازیافت خالی است" echo "------------------------" echo "1. سطل بازیافت را فعال کنید. سطل بازیافت را ببندید" echo "3. بازیابی مطالب 4. سطل بازیافت را پاک کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "انتخاب خود را وارد کنید:" choice case $choice in 1) install trash-cli sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" echo "سطل بازیافت فعال شده و پرونده های حذف شده به سطل بازیافت منتقل می شوند." sleep 2 ;; 2) remove trash-cli sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" echo "سطل بازیافت بسته است و پرونده مستقیماً حذف می شود." sleep 2 ;; 3) read -e -p "برای بازیابی نام پرونده را وارد کنید:" file_to_restore if [ -e "$TRASH_DIR/$file_to_restore" ]; then mv "$TRASH_DIR/$file_to_restore" "$HOME/" echo "$file_to_restoreبه فهرست خانه بازگردانده شد." else echo "پرونده وجود ندارد" fi ;; 4) read -e -p "تأیید سطل بازیافت را تأیید کنید؟ [y/n]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty echo "سطل بازیافت پاک شده است." fi ;; *) break ;; esac done } # تهیه نسخه پشتیبان create_backup() { send_stats "تهیه نسخه پشتیبان" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # کاربر را وادار به وارد کردن فهرست پشتیبان کنید echo "یک مثال پشتیبان ایجاد کنید:" echo "- از یک دایرکتوری واحد نسخه پشتیبان تهیه کنید: /var /www" echo "- پشتیبان گیری از دایرکتوری های متعدد: /etc /home /var /log" echo "- Enter Enter از دایرکتوری پیش فرض ( /etc /usr /home) استفاده می کند" read -r -p "لطفاً برای تهیه نسخه پشتیبان از دایرکتوری وارد کنید (چندین دایرکتوری توسط فضاها از هم جدا می شوند و اگر مستقیماً وارد شوید ، از فهرست پیش فرض استفاده کنید):" input # اگر کاربر دایرکتوری را وارد نکرد ، از فهرست پیش فرض استفاده کنید if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 "/usr" # 已安装的软件文件 "/home" # 用户数据 ) else # دایرکتوری را که توسط کاربر وارد شده است در یک آرایه توسط فضاها جدا کنید IFS=' ' read -r -a BACKUP_PATHS <<< "$input" fi # پیشوند پرونده پشتیبان تهیه کنید local PREFIX="" for path in "${BACKUP_PATHS[@]}"; do # نام دایرکتوری را استخراج کنید و برش ها را حذف کنید dir_name=$(basename "$path") PREFIX+="${dir_name}_" done # آخرین زیر را حذف کنید local PREFIX=${PREFIX%_} # نام پرونده پشتیبان تهیه کنید local BACKUP_NAME="${PREFIX}_$TIMESTAMP.tar.gz" # دایرکتوری را که توسط کاربر انتخاب شده است چاپ کنید echo "دایرکتوری پشتیبان که شما انتخاب کردید:" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done # تهیه نسخه پشتیبان echo "ایجاد یک نسخه پشتیبان$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" # بررسی کنید که آیا دستور موفقیت آمیز است if [ $? -eq 0 ]; then echo "نسخه پشتیبان با موفقیت ایجاد شد:$BACKUP_DIR/$BACKUP_NAME" else echo "ایجاد پشتیبان گیری نشد!" exit 1 fi } # بازیابی پشتیبان گیری restore_backup() { send_stats "بازیابی پشتیبان گیری" # پشتیبان مورد نظر برای بازیابی را انتخاب کنید read -e -p "لطفاً نام پرونده پشتیبان را برای بازیابی وارد کنید:" BACKUP_NAME # بررسی کنید که آیا پرونده پشتیبان وجود دارد if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then echo "پرونده پشتیبان وجود ندارد!" exit 1 fi echo "بازیابی پشتیبان گیری$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then echo "پشتیبان گیری و بازیابی با موفقیت!" else echo "بازیابی پشتیبان گیری نشد!" exit 1 fi } # تهیه نسخه پشتیبان list_backups() { echo "نسخه پشتیبان تهیه شده در دسترس:" ls -1 "$BACKUP_DIR" } # تهیه نسخه پشتیبان delete_backup() { send_stats "تهیه نسخه پشتیبان" read -e -p "لطفاً نام پرونده پشتیبان را وارد کنید تا حذف شود:" BACKUP_NAME # بررسی کنید که آیا پرونده پشتیبان وجود دارد if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then echo "پرونده پشتیبان وجود ندارد!" exit 1 fi # تهیه نسخه پشتیبان rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then echo "نسخه پشتیبان با موفقیت حذف شد!" else echo "حذف پشتیبان انجام نشد!" exit 1 fi } # منوی اصلی تهیه نسخه پشتیبان linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear send_stats "عملکرد پشتیبان گیری سیستم" echo "عملکرد پشتیبان گیری سیستم" echo "------------------------" list_backups echo "------------------------" echo "1. یک نسخه پشتیبان تهیه کنید. بازیابی پشتیبان 3 را بازیابی کنید. نسخه پشتیبان را حذف کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac read -e -p "برای ادامه ... Enter را فشار دهید ..." done } # نمایش لیست اتصال list_connections() { echo "اتصال ذخیره شده:" echo "------------------------" cat "$CONFIG_FILE" | awk -F'|' '{print NR " - " $1 " (" $2 ")"}' echo "------------------------" } # یک اتصال جدید اضافه کنید add_connection() { send_stats "یک اتصال جدید اضافه کنید" echo "مثال برای ایجاد یک اتصال جدید:" echo "- نام اتصال: my_server" echo "- آدرس IP: 192.168.1.100" echo "- نام کاربری: ریشه" echo "- بندر: 22" echo "------------------------" read -e -p "لطفاً نام اتصال را وارد کنید:" name read -e -p "لطفا آدرس IP خود را وارد کنید:" ip read -e -p "لطفاً نام کاربری (پیش فرض: ریشه) را وارد کنید:" user local user=${user:-root} # 如果用户未输入,则使用默认值 root read -e -p "لطفاً شماره پورت را وارد کنید (پیش فرض: 22):" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 echo "لطفاً روش احراز هویت را انتخاب کنید:" echo "1. رمز عبور" echo "2. کلید" read -e -p "لطفاً انتخاب را وارد کنید (1/2):" auth_choice case $auth_choice in 1) read -s -p "لطفا رمز ورود خود را وارد کنید:" password_or_key echo # 换行 ;; 2) echo "لطفاً محتوای کلیدی را بچسبانید (بعد از چسباندن دو بار فشار دهید) را فشار دهید:" local password_or_key="" while IFS= read -r line; do # اگر ورودی خالی باشد و محتوای کلیدی در حال حاضر حاوی آغاز باشد ، ورودی به پایان می رسد if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi # اگر خط اول است یا محتوای کلید وارد شده است ، به اضافه کردن ادامه دهید if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then local password_or_key+="${line}"$'\n' fi done # بررسی کنید که آیا این محتوای کلیدی است if [[ "$password_or_key" == *"-----BEGIN"* && "$password_or_key" == *"PRIVATE KEY-----"* ]]; then local key_file="$KEY_DIR/$name.key" echo -n "$password_or_key" > "$key_file" chmod 600 "$key_file" local password_or_key="$key_file" fi ;; *) echo "انتخاب نامعتبر!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" echo "اتصال ذخیره می شود!" } # اتصال را حذف کنید delete_connection() { send_stats "اتصال را حذف کنید" read -e -p "لطفاً شماره اتصال را وارد کنید تا حذف شود:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then echo "خطا: اتصال مربوطه یافت نشد." return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" # اگر اتصال از یک فایل کلید استفاده می کند ، پرونده کلید را حذف کنید if [[ "$password_or_key" == "$KEY_DIR"* ]]; then rm -f "$password_or_key" fi sed -i "${num}d" "$CONFIG_FILE" echo "اتصال حذف شده است!" } # از اتصال استفاده کنید use_connection() { send_stats "از اتصال استفاده کنید" read -e -p "لطفاً شماره اتصال را برای استفاده وارد کنید:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then echo "خطا: اتصال مربوطه یافت نشد." return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" echo "اتصال به$name ($ip)..." if [[ -f "$password_or_key" ]]; then # با یک کلید ارتباط برقرار کنید ssh -o StrictHostKeyChecking=no -i "$password_or_key" -p "$port" "$user@$ip" if [[ $? -ne 0 ]]; then echo "اتصال شکست خورد! لطفا موارد زیر را بررسی کنید:" echo "1. آیا مسیر فایل کلید صحیح است؟$password_or_key" echo "2. آیا مجوزهای پرونده کلیدی صحیح است (باید 600 باشد)." echo "3. آیا سرور هدف اجازه ورود به سیستم را با استفاده از کلید می دهد." fi else # با یک رمز عبور ارتباط برقرار کنید if ! command -v sshpass &> /dev/null; then echo "خطا: SShpass نصب نشده است ، لطفاً ابتدا SSHPASS را نصب کنید." echo "روش نصب:" echo " - Ubuntu/Debian: apt install sshpass" echo " - CentOS/RHEL: yum install sshpass" return fi sshpass -p "$password_or_key" ssh -o StrictHostKeyChecking=no -p "$port" "$user@$ip" if [[ $? -ne 0 ]]; then echo "اتصال شکست خورد! لطفا موارد زیر را بررسی کنید:" echo "1. آیا نام کاربری و رمز عبور صحیح است." echo "2. آیا سرور هدف اجازه ورود به رمز عبور را می دهد." echo "3. آیا سرویس SSH سرور هدف به طور عادی در حال اجرا است." fi fi } ssh_manager() { send_stats "ابزار اتصال از راه دور SSH" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" # بررسی کنید که آیا پرونده پیکربندی و فهرست کلید وجود دارد و آیا وجود ندارد ، آن را ایجاد کنید if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi if [[ ! -d "$KEY_DIR" ]]; then mkdir -p "$KEY_DIR" chmod 700 "$KEY_DIR" fi while true; do clear echo "ابزار اتصال از راه دور SSH" echo "از طریق SSH می تواند به سایر سیستم های لینوکس متصل شود" echo "------------------------" list_connections echo "1. یک اتصال جدید ایجاد کنید. از یک اتصال استفاده کنید 3. یک اتصال را حذف کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; *) echo "انتخاب نامعتبر ، لطفاً دوباره امتحان کنید." ;; esac done } # لیست پارتیشن های دیسک سخت موجود list_partitions() { echo "پارتیشن های دیسک سخت موجود:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } # پارتیشن را سوار کنید mount_partition() { send_stats "پارتیشن را سوار کنید" read -e -p "لطفاً نام پارتیشن را برای نصب وارد کنید (به عنوان مثال SDA1):" PARTITION # بررسی کنید که آیا پارتیشن وجود دارد if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then echo "پارتیشن وجود ندارد!" return fi # بررسی کنید که آیا پارتیشن از قبل نصب شده است if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then echo "پارتیشن از قبل نصب شده است!" return fi # یک نقطه کوه ایجاد کنید MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" # پارتیشن را سوار کنید mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then echo "پارتیشن با موفقیت:$MOUNT_POINT" else echo "پارتیشن کوه شکست خورد!" rmdir "$MOUNT_POINT" fi } # پارتیشن را حذف نصب کنید unmount_partition() { send_stats "پارتیشن را حذف نصب کنید" read -e -p "لطفاً نام پارتیشن را وارد کنید (به عنوان مثال SDA1):" PARTITION # بررسی کنید که آیا پارتیشن از قبل نصب شده است MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then echo "پارتیشن نصب نشده است!" return fi # پارتیشن را حذف نصب کنید umount "/dev/$PARTITION" if [ $? -eq 0 ]; then echo "حذف پارتیشن با موفقیت:$MOUNT_POINT" rmdir "$MOUNT_POINT" else echo "حذف پارتیشن انجام نشد!" fi } # لیست پارتیشن های نصب شده list_mounted_partitions() { echo "پارتیشن نصب شده:" df -h | grep -v "tmpfs\|udev\|overlay" } # پارتیشن فرمت format_partition() { send_stats "پارتیشن فرمت" read -e -p "لطفاً نام پارتیشن را به قالب وارد کنید (به عنوان مثال SDA1):" PARTITION # بررسی کنید که آیا پارتیشن وجود دارد if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then echo "پارتیشن وجود ندارد!" return fi # بررسی کنید که آیا پارتیشن از قبل نصب شده است if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then echo "پارتیشن نصب شده است ، لطفاً ابتدا آن را حذف کنید!" return fi # نوع سیستم فایل را انتخاب کنید echo "لطفاً نوع سیستم فایل را انتخاب کنید:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" read -e -p "لطفا انتخاب خود را وارد کنید:" FS_CHOICE case $FS_CHOICE in 1) FS_TYPE="ext4" ;; 2) FS_TYPE="xfs" ;; 3) FS_TYPE="ntfs" ;; 4) FS_TYPE="vfat" ;; *) echo "انتخاب نامعتبر!"; return ;; esac # تأیید قالب بندی read -e -p "تأیید قالب بندی پارتیشن /dev /$PARTITIONبرای$FS_TYPEاین است؟ (y/n):" CONFIRM if [ "$CONFIRM" != "y" ]; then echo "این عملیات لغو شده است." return fi # پارتیشن فرمت echo "قالب بندی پارتیشن /dev /$PARTITIONبرای$FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then echo "قالب پارتیشن موفقیت آمیز بود!" else echo "قالب بندی پارتیشن شکست خورد!" fi } # وضعیت پارتیشن را بررسی کنید check_partition() { send_stats "وضعیت پارتیشن را بررسی کنید" read -e -p "لطفاً نام پارتیشن را برای بررسی وارد کنید (به عنوان مثال SDA1):" PARTITION # بررسی کنید که آیا پارتیشن وجود دارد if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then echo "پارتیشن وجود ندارد!" return fi # وضعیت پارتیشن را بررسی کنید echo "پارتیشن /dev /را بررسی کنید$PARTITIONوضعیت:" fsck "/dev/$PARTITION" } # منوی اصلی disk_manager() { send_stats "عملکرد مدیریت دیسک سخت" while true; do clear echo "مدیریت پارتیشن دیسک سخت" echo -e "${gl_huang}این عملکرد در داخل دوره آزمایش آزمایش می شود ، لطفاً از آن در محیط تولید استفاده نکنید.${gl_bai}" echo "------------------------" list_partitions echo "------------------------" echo "1. پارتیشن را سوار کنید. پارتیشن را حذف کنید. نمایش پارتیشن نصب شده" echo "4. پارتیشن 5 را قالب بندی کنید. وضعیت پارتیشن را بررسی کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; 3) list_mounted_partitions ;; 4) format_partition ;; 5) check_partition ;; *) break ;; esac read -e -p "برای ادامه ... Enter را فشار دهید ..." done } # لیست کار را نشان دهید list_tasks() { echo "وظایف همگام سازی ذخیره شده:" echo "---------------------------------" awk -F'|' '{print NR " - " $1 " ( " $2 " -> " $3":"$4 " )"}' "$CONFIG_FILE" echo "---------------------------------" } # یک کار جدید اضافه کنید add_task() { send_stats "یک کار همگام سازی جدید اضافه کنید" echo "یک مثال کار همگام سازی جدید ایجاد کنید:" echo "- نام کار: backup_www" echo "- دایرکتوری محلی: /var /www" echo "- آدرس از راه دور: user@192.168.1.100" echo "- دایرکتوری از راه دور: /پشتیبان /www" echo "- شماره پورت (پیش فرض 22)" echo "---------------------------------" read -e -p "لطفاً نام کار را وارد کنید:" name read -e -p "لطفا وارد فهرست محلی شوید:" local_path read -e -p "لطفاً فهرست راه دور را وارد کنید:" remote_path read -e -p "لطفاً کاربر از راه دور IP را وارد کنید:" remote read -e -p "لطفاً درگاه SSH را وارد کنید (پیش فرض 22):" port port=${port:-22} echo "لطفاً روش احراز هویت را انتخاب کنید:" echo "1. رمز عبور" echo "2. کلید" read -e -p "لطفاً (1/2) را انتخاب کنید:" auth_choice case $auth_choice in 1) read -s -p "لطفا رمز ورود خود را وارد کنید:" password_or_key echo # 换行 auth_method="password" ;; 2) echo "لطفاً محتوای کلیدی را بچسبانید (بعد از چسباندن دو بار فشار دهید) را فشار دهید:" local password_or_key="" while IFS= read -r line; do # اگر ورودی خالی باشد و محتوای کلیدی در حال حاضر حاوی آغاز باشد ، ورودی به پایان می رسد if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi # اگر خط اول است یا محتوای کلید وارد شده است ، به اضافه کردن ادامه دهید if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then password_or_key+="${line}"$'\n' fi done # بررسی کنید که آیا این محتوای کلیدی است if [[ "$password_or_key" == *"-----BEGIN"* && "$password_or_key" == *"PRIVATE KEY-----"* ]]; then local key_file="$KEY_DIR/${name}_sync.key" echo -n "$password_or_key" > "$key_file" chmod 600 "$key_file" password_or_key="$key_file" auth_method="key" else echo "محتوای کلیدی نامعتبر!" return fi ;; *) echo "انتخاب نامعتبر!" return ;; esac echo "لطفاً حالت همگام سازی را انتخاب کنید:" echo "1. حالت استاندارد (-AVZ)" echo "2. پرونده هدف را حذف کنید (-avz-delete)" read -e -p "لطفاً (1/2) را انتخاب کنید:" mode case $mode in 1) options="-avz" ;; 2) options="-avz --delete" ;; *) echo "انتخاب نامعتبر ، از پیش فرض -avz استفاده کنید"; options="-avz" ;; esac echo "$name|$local_path|$remote|$remote_path|$port|$options|$auth_method|$password_or_key" >> "$CONFIG_FILE" install rsync rsync echo "کار ذخیره شد!" } # یک کار را حذف کنید delete_task() { send_stats "کارهای همگام سازی را حذف کنید" read -e -p "لطفاً شماره کار را وارد کنید تا حذف شود:" num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then echo "خطا: کار مربوطه یافت نشد." return fi IFS='|' read -r name local_path remote remote_path port options auth_method password_or_key <<< "$task" # اگر کار از یک فایل کلید استفاده می کند ، پرونده کلید را حذف کنید if [[ "$auth_method" == "key" && "$password_or_key" == "$KEY_DIR"* ]]; then rm -f "$password_or_key" fi sed -i "${num}d" "$CONFIG_FILE" echo "کار حذف شد!" } run_task() { send_stats "انجام کارهای هماهنگ سازی" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" # پارامترها را تجزیه و تحلیل کنید local direction="push" # 默认是推送到远端 local num if [[ "$1" == "push" || "$1" == "pull" ]]; then direction="$1" num="$2" else num="$1" fi # اگر شماره کار ورودی وجود ندارد ، کاربر را مجبور به ورود کنید if [[ -z "$num" ]]; then read -e -p "لطفاً شماره کار را برای اجرای آن وارد کنید:" num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then echo "خطا: کار یافت نشد!" return fi IFS='|' read -r name local_path remote remote_path port options auth_method password_or_key <<< "$task" # منبع و مسیر هدف را مطابق با جهت همگام سازی تنظیم کنید if [[ "$direction" == "pull" ]]; then echo "کشیدن هماهنگ سازی به محلی:$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else echo "همگام سازی را به انتهای از راه دور فشار دهید:$local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi # پارامترهای مشترک اتصال SSH را اضافه کنید local ssh_options="-p $port -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" if [[ "$auth_method" == "password" ]]; then if ! command -v sshpass &> /dev/null; then echo "خطا: SShpass نصب نشده است ، لطفاً ابتدا SSHPASS را نصب کنید." echo "روش نصب:" echo " - Ubuntu/Debian: apt install sshpass" echo " - CentOS/RHEL: yum install sshpass" return fi sshpass -p "$password_or_key" rsync $options -e "ssh $ssh_options" "$source" "$destination" else # بررسی کنید که آیا پرونده اصلی وجود دارد و آیا مجوزها صحیح هستند if [[ ! -f "$password_or_key" ]]; then echo "خطا: پرونده کلیدی وجود ندارد:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then echo "هشدار: مجوزهای کلیدی پرونده نادرست است و تعمیر می شوند ..." chmod 600 "$password_or_key" fi rsync $options -e "ssh -i $password_or_key $ssh_options" "$source" "$destination" fi if [[ $? -eq 0 ]]; then echo "هماهنگ سازی کامل است!" else echo "هماهنگ سازی شکست خورد! لطفا موارد زیر را بررسی کنید:" echo "1. آیا اتصال شبکه طبیعی است؟" echo "2. آیا میزبان از راه دور در دسترس است؟" echo "3. آیا اطلاعات احراز هویت صحیح است؟" echo "4. آیا دایرکتوری های محلی و از راه دور مجوزهای دسترسی صحیح دارند" fi } # یک کار به موقع ایجاد کنید schedule_task() { send_stats "کارهای زمان بندی همگام سازی را اضافه کنید" read -e -p "لطفاً شماره کار را وارد کنید تا مرتباً هماهنگ شود:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then echo "خطا: لطفاً یک شماره کار معتبر وارد کنید!" return fi echo "لطفاً فاصله اجرای به موقع را انتخاب کنید:" echo "1) یک بار در ساعت اجرا کنید" echo "2) یک بار در روز اجرا کنید" echo "3) هفته ای یک بار اجرا کنید" read -e -p "لطفاً گزینه ها را وارد کنید (1/2/3):" interval local random_minute=$(shuf -i 0-59 -n 1) # 生成 0-59 之间的随机分钟数 local cron_time="" case "$interval" in 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 *) echo "خطا: لطفاً یک گزینه معتبر وارد کنید!" ; return ;; esac local cron_job="$cron_time k rsync_run $num" local cron_job="$cron_time k rsync_run $num" # بررسی کنید که آیا همان کار قبلاً وجود دارد if crontab -l | grep -q "k rsync_run $num"; then echo "خطا: همگام سازی زمان این کار از قبل وجود دارد!" return fi # یک crontab برای کاربر ایجاد کنید (crontab -l 2>/dev/null; echo "$cron_job") | crontab - echo "کار زمان بندی ایجاد شده است:$cron_job" } # مشاهده وظایف برنامه ریزی شده view_tasks() { echo "کارهای زمان بندی فعلی:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } # کارهای زمان بندی را حذف کنید delete_task_schedule() { send_stats "وظایف زمان بندی همگام سازی را حذف کنید" read -e -p "لطفاً شماره کار را وارد کنید تا حذف شود:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then echo "خطا: لطفاً یک شماره کار معتبر وارد کنید!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - echo "شماره کار حذف شده$numکارهای زمان بندی" } # منوی اصلی مدیریت کار rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear echo "ابزار همگام سازی از راه دور RSYNC" echo "هماهنگ سازی بین دایرکتوری های از راه دور از هماهنگ سازی افزایشی ، کارآمد و پایدار پشتیبانی می کند." echo "---------------------------------" list_tasks echo view_tasks echo echo "1. ایجاد یک کار جدید 2. یک کار را حذف کنید" echo "3. هماهنگ سازی محلی را در انتهای از راه دور انجام دهید. هماهنگ سازی از راه دور را به انتهای محلی انجام دهید" echo "5. یک کار زمان بندی ایجاد کنید 6. یک کار زمان بندی را حذف کنید" echo "---------------------------------" echo "0. به منوی قبلی برگردید" echo "---------------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" choice case $choice in 1) add_task ;; 2) delete_task ;; 3) run_task push;; 4) run_task pull;; 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; *) echo "انتخاب نامعتبر ، لطفاً دوباره امتحان کنید." ;; esac read -e -p "برای ادامه ... Enter را فشار دهید ..." done } linux_ps() { clear send_stats "پرس و جو اطلاعاتی سیستم" ip_address local cpu_info=$(lscpu | awk -F': +' '/Model name:/ {print $2; exit}') local cpu_usage_percent=$(awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else printf "%.0f\n", (($2+$4-u1) * 100 / (t-t1))}' \ <(grep 'cpu ' /proc/stat) <(sleep 1; grep 'cpu ' /proc/stat)) local cpu_cores=$(nproc) local cpu_freq=$(cat /proc/cpuinfo | grep "MHz" | head -n 1 | awk '{printf "%.1f GHz\n", $4/1000}') local mem_info=$(free -b | awk 'NR==2{printf "%.2f/%.2fM (%.2f%%)", $3/1024/1024, $2/1024/1024, $3*100/$2}') local disk_info=$(df -h | awk '$NF=="/"{printf "%s/%s (%s)", $3, $2, $5}') local ipinfo=$(curl -s ipinfo.io) local country=$(echo "$ipinfo" | grep 'country' | awk -F': ' '{print $2}' | tr -d '",') local city=$(echo "$ipinfo" | grep 'city' | awk -F': ' '{print $2}' | tr -d '",') local isp_info=$(echo "$ipinfo" | grep 'org' | awk -F': ' '{print $2}' | tr -d '",') local load=$(uptime | awk '{print $(NF-2), $(NF-1), $NF}') local dns_addresses=$(awk '/^nameserver/{printf "%s ", $2} END {print ""}' /etc/resolv.conf) local cpu_arch=$(uname -m) local hostname=$(uname -n) local kernel_version=$(uname -r) local congestion_algorithm=$(sysctl -n net.ipv4.tcp_congestion_control) local queue_algorithm=$(sysctl -n net.core.default_qdisc) local os_info=$(grep PRETTY_NAME /etc/os-release | cut -d '=' -f2 | tr -d '"') output_status local current_time=$(date "+%Y-%m-%d %I:%M %p") local swap_info=$(free -m | awk 'NR==3{used=$3; total=$2; if (total == 0) {percentage=0} else {percentage=used*100/total}; printf "%dM/%dM (%d%%)", used, total, percentage}') local runtime=$(cat /proc/uptime | awk -F. '{run_days=int($1 / 86400);run_hours=int(($1 % 86400) / 3600);run_minutes=int(($1 % 3600) / 60); if (run_days > 0) printf("%d天 ", run_days); if (run_hours > 0) printf("%d时 ", run_hours); printf("%d分\n", run_minutes)}') local timezone=$(current_timezone) echo "" echo -e "پرس و جو اطلاعاتی سیستم" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}نام میزبان:${gl_bai}$hostname" echo -e "${gl_kjlan}نسخه سیستم:${gl_bai}$os_info" echo -e "${gl_kjlan}نسخه لینوکس:${gl_bai}$kernel_version" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}معماری CPU:${gl_bai}$cpu_arch" echo -e "${gl_kjlan}مدل CPU:${gl_bai}$cpu_info" echo -e "${gl_kjlan}تعداد هسته های CPU:${gl_bai}$cpu_cores" echo -e "${gl_kjlan}فرکانس CPU:${gl_bai}$cpu_freq" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}اشغال CPU:${gl_bai}$cpu_usage_percent%" echo -e "${gl_kjlan}بار سیستم:${gl_bai}$load" echo -e "${gl_kjlan}حافظه فیزیکی:${gl_bai}$mem_info" echo -e "${gl_kjlan}حافظه مجازی:${gl_bai}$swap_info" echo -e "${gl_kjlan}اشغال دیسک سخت:${gl_bai}$disk_info" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}$output" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}الگوریتم شبکه:${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}اپراتور:${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then echo -e "${gl_kjlan}آدرس IPv4:${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then echo -e "${gl_kjlan}آدرس IPv6:${gl_bai}$ipv6_address" fi echo -e "${gl_kjlan}آدرس DNS:${gl_bai}$dns_addresses" echo -e "${gl_kjlan}موقعیت جغرافیایی:${gl_bai}$country $city" echo -e "${gl_kjlan}زمان سیستم:${gl_bai}$timezone $current_time" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}زمان اجرا:${gl_bai}$runtime" echo } linux_tools() { while true; do clear # send_stats "ابزارهای اساسی" echo -e "ابزارهای اساسی" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}ابزار دانلود فرفری${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}ابزار بارگیری Wget${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}3. ${gl_bai}ابزار مجوز مدیریت فوق العاده سودو${gl_kjlan}4. ${gl_bai}ابزار ارتباط ارتباطی SOCAT" echo -e "${gl_kjlan}5. ${gl_bai}ابزار نظارت بر سیستم HTOP${gl_kjlan}6. ${gl_bai}ابزار نظارت بر ترافیک شبکه IFTOP" echo -e "${gl_kjlan}7. ${gl_bai}ابزار فشرده سازی فشرده سازی زیپ از حالت فشرده${gl_kjlan}8. ${gl_bai}ابزار فشرده سازی فشرده سازی TAR GZ" echo -e "${gl_kjlan}9. ${gl_bai}ابزار اجرای پس زمینه چند کانال Tmux${gl_kjlan}10. ${gl_bai}FFMPEG ویدیوی رمزگذاری ابزار پخش مستقیم" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${gl_bai}ابزارهای نظارت مدرن BTOP${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ابزار مدیریت پرونده" echo -e "${gl_kjlan}13. ${gl_bai}ابزار مشاهده اشغال دیسک NCDU${gl_kjlan}14. ${gl_bai}ابزار جستجوی جهانی FZF" echo -e "${gl_kjlan}15. ${gl_bai}ویرایشگر متن VIM${gl_kjlan}16. ${gl_bai}ویرایشگر متن نانو${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}17. ${gl_bai}سیستم کنترل نسخه GIT" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${gl_bai}ضمانت صفحه ماتریس${gl_kjlan}22. ${gl_bai}امنیت صفحه نمایش" echo -e "${gl_kjlan}26. ${gl_bai}بازی تتریس${gl_kjlan}27. ${gl_bai}بازی خوردن مار" echo -e "${gl_kjlan}28. ${gl_bai}بازی مهاجم فضا" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}31. ${gl_bai}همه را نصب کنید${gl_kjlan}32. ${gl_bai}همه نصب ها (به استثنای ذخیره کننده های صفحه نمایش و بازی)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${gl_bai}حذف همه" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}41. ${gl_bai}ابزار مشخص شده را نصب کنید${gl_kjlan}42. ${gl_bai}ابزار مشخص شده را حذف کنید" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) clear install curl clear echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:" curl --help send_stats "پیچ را نصب کنید" ;; 2) clear install wget clear echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:" wget --help send_stats "نصب wget" ;; 3) clear install sudo clear echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:" sudo --help send_stats "sudo را نصب کنید" ;; 4) clear install socat clear echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:" socat -h send_stats "SOCAT را نصب کنید" ;; 5) clear install htop clear htop send_stats "HTOP را نصب کنید" ;; 6) clear install iftop clear iftop send_stats "iftop را نصب کنید" ;; 7) clear install unzip clear echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:" unzip send_stats "anzip را نصب کنید" ;; 8) clear install tar clear echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:" tar --help send_stats "تار نصب" ;; 9) clear install tmux clear echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:" tmux --help send_stats "نصب tmux" ;; 10) clear install ffmpeg clear echo "این ابزار نصب شده است و روش استفاده به شرح زیر است:" ffmpeg --help send_stats "نصب ffmpeg" ;; 11) clear install btop clear btop send_stats "BTOP را نصب کنید" ;; 12) clear install ranger cd / clear ranger cd ~ send_stats "Ranger را نصب کنید" ;; 13) clear install ncdu cd / clear ncdu cd ~ send_stats "NCDU را نصب کنید" ;; 14) clear install fzf cd / clear fzf cd ~ send_stats "FZF را نصب کنید" ;; 15) clear install vim cd / clear vim -h cd ~ send_stats "نصب ویم" ;; 16) clear install nano cd / clear nano -h cd ~ send_stats "نانو را نصب کنید" ;; 17) clear install git cd / clear git --help cd ~ send_stats "git را نصب کنید" ;; 21) clear install cmatrix clear cmatrix send_stats "نصب cmatrix" ;; 22) clear install sl clear sl send_stats "نصب SL" ;; 26) clear install bastet clear bastet send_stats "باست را نصب کنید" ;; 27) clear install nsnake clear nsnake send_stats "nsnake را نصب کنید" ;; 28) clear install ninvaders clear ninvaders send_stats "ninvaders را نصب کنید" ;; 31) clear send_stats "همه را نصب کنید" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git ;; 32) clear send_stats "نصب همه (به استثنای بازی ها و ذخیره های صفحه نمایش)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear send_stats "حذف همه" remove htop iftop tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git ;; 41) clear read -e -p "لطفاً نام ابزار نصب شده را وارد کنید (wget curl sudo htop):" installname install $installname send_stats "نرم افزار مشخص شده را نصب کنید" ;; 42) clear read -e -p "لطفاً نام ابزار حذف شده را وارد کنید (HTOP UFW TMUX CMATRIX):" removename remove $removename send_stats "نرم افزار مشخص شده را حذف کنید" ;; 0) kejilion ;; *) echo "ورودی نامعتبر!" ;; esac break_end done } linux_bbr() { clear send_stats "مدیریت BBR" if [ -f "/etc/alpine-release" ]; then while true; do clear local congestion_algorithm=$(sysctl -n net.ipv4.tcp_congestion_control) local queue_algorithm=$(sysctl -n net.core.default_qdisc) echo "الگوریتم مسدود کننده TCP فعلی:$congestion_algorithm $queue_algorithm" echo "" echo "مدیریت BBR" echo "------------------------" echo "1. BBRV3 را روشن کنید. BBRV3 را خاموش کنید (راه اندازی مجدد)" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) bbr_on send_stats "Alpine BBR3 را فعال کنید" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf sysctl -p server_reboot ;; *) break # 跳出循环,退出菜单 ;; esac done else install wget wget --no-check-certificate -O tcpx.sh ${gh_proxy}raw.githubusercontent.com/ylx2016/Linux-NetSpeed/master/tcpx.sh chmod +x tcpx.sh ./tcpx.sh fi } linux_docker() { while true; do clear # Send_stats "مدیریت داکر" echo -e "مدیریت داکر" docker_tato echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}محیط داکر را نصب و به روز کنید${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}2. ${gl_bai}مشاهده وضعیت جهانی Docker${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}3. ${gl_bai}مدیریت کانتینر داکر${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}4. ${gl_bai}مدیریت تصویر داکر" echo -e "${gl_kjlan}5. ${gl_bai}مدیریت شبکه داکر" echo -e "${gl_kjlan}6. ${gl_bai}مدیریت حجم داکر" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}7. ${gl_bai}ظروف داکر بی فایده و حجم داده های شبکه آینه را تمیز کنید" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}8. ${gl_bai}منبع Docker را جایگزین کنید" echo -e "${gl_kjlan}9. ${gl_bai}پرونده daemon.json را ویرایش کنید" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${gl_bai}دسترسی Docker-IPV6 را فعال کنید" echo -e "${gl_kjlan}12. ${gl_bai}دسترسی نزدیک Docker-IPV6" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}20. ${gl_bai}محیط داکر را حذف کنید" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) clear send_stats "محیط داکر را نصب کنید" install_add_docker ;; 2) clear local container_count=$(docker ps -a -q 2>/dev/null | wc -l) local image_count=$(docker images -q 2>/dev/null | wc -l) local network_count=$(docker network ls -q 2>/dev/null | wc -l) local volume_count=$(docker volume ls -q 2>/dev/null | wc -l) send_stats "داکر وضعیت جهانی" echo "نسخه داکر" docker -v docker compose version echo "" echo -e "تصویر داکر:${gl_lv}$image_count${gl_bai} " docker image ls echo "" echo -e "ظرف داکر:${gl_lv}$container_count${gl_bai}" docker ps -a echo "" echo -e "حجم داکر:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" echo -e "شبکه داکر:${gl_lv}$network_count${gl_bai}" docker network ls echo "" ;; 3) docker_ps ;; 4) docker_image ;; 5) while true; do clear send_stats "مدیریت شبکه داکر" echo "لیست شبکه داکر" echo "------------------------------------------------------------" docker network ls echo "" echo "------------------------------------------------------------" container_ids=$(docker ps -q) printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址" for container_id in $container_ids; do local container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id") local container_name=$(echo "$container_info" | awk '{print $1}') local network_info=$(echo "$container_info" | cut -d' ' -f2-) while IFS= read -r line; do local network_name=$(echo "$line" | awk '{print $1}') local ip_address=$(echo "$line" | awk '{print $2}') printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address" done <<< "$network_info" done echo "" echo "شبکه" echo "------------------------" echo "1. ایجاد یک شبکه" echo "2. به اینترنت بپیوندید" echo "3. از شبکه خارج شوید" echo "4. شبکه را حذف کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) send_stats "ایجاد یک شبکه" read -e -p "یک نام شبکه جدید تنظیم کنید:" dockernetwork docker network create $dockernetwork ;; 2) send_stats "به اینترنت بپیوندید" read -e -p "به نام شبکه بپیوندید:" dockernetwork read -e -p "این ظروف به شبکه اضافه می شوند (نام های چند ظرف توسط فضاها از هم جدا می شوند):" dockernames for dockername in $dockernames; do docker network connect $dockernetwork $dockername done ;; 3) send_stats "به اینترنت بپیوندید" read -e -p "نام شبکه خروجی:" dockernetwork read -e -p "این ظروف از شبکه خارج می شوند (نام های چند ظرف توسط فضاها از هم جدا می شوند):" dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername done ;; 4) send_stats "شبکه را حذف کنید" read -e -p "لطفاً نام شبکه را وارد کنید تا حذف شود:" dockernetwork docker network rm $dockernetwork ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 6) while true; do clear send_stats "مدیریت حجم داکر" echo "لیست حجم داکر" docker volume ls echo "" echo "عملیات حجم" echo "------------------------" echo "1. یک جلد جدید ایجاد کنید" echo "2. حجم مشخص شده را حذف کنید" echo "3. همه جلد ها را حذف کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) send_stats "یک جلد جدید ایجاد کنید" read -e -p "نام جلد جدید را تنظیم کنید:" dockerjuan docker volume create $dockerjuan ;; 2) read -e -p "نام حجم حذف را وارد کنید (لطفاً چندین نام حجم را با فضاها جدا کنید):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan done ;; 3) send_stats "همه حجم ها را حذف کنید" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) docker volume prune -f ;; [Nn]) ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 7) clear send_stats "تمیز کردن داکر" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) docker system prune -af --volumes ;; [Nn]) ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac ;; 8) clear send_stats "منبع" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; 9) clear install nano mkdir -p /etc/docker && nano /etc/docker/daemon.json restart docker ;; 11) clear send_stats "Docker V6 باز است" docker_ipv6_on ;; 12) clear send_stats "Docker V6 سطح" docker_ipv6_off ;; 20) clear send_stats "داکر حذف نصب" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) docker ps -a -q | xargs -r docker rm -f && docker images -q | xargs -r docker rmi && docker network prune -f && docker volume prune -f remove docker docker-compose docker-ce docker-ce-cli containerd.io rm -f /etc/docker/daemon.json hash -r ;; [Nn]) ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac ;; 0) kejilion ;; *) echo "ورودی نامعتبر!" ;; esac break_end done } linux_test() { while true; do clear # send_stats "مجموعه اسکریپت تست" echo -e "مجموعه اسکریپت تست" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}تشخیص وضعیت IP و باز کردن وضعیت" echo -e "${gl_kjlan}1. ${gl_bai}تشخیص وضعیت قفل chatgpt" echo -e "${gl_kjlan}2. ${gl_bai}تست قفل رسانه جریان منطقه" echo -e "${gl_kjlan}3. ${gl_bai}Yeahwu Streaming Media Detection Ollock" echo -e "${gl_kjlan}4. ${gl_bai}اسکریپت معاینه فیزیکی با کیفیت IP Xykt${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}اندازه گیری سرعت شبکه" echo -e "${gl_kjlan}11. ${gl_bai}BestTrace سه تست مسیریابی تأخیر Backhaul Network" echo -e "${gl_kjlan}12. ${gl_bai}تست خط سه شبکه MTR_TRACE" echo -e "${gl_kjlan}13. ${gl_bai}اندازه گیری سرعت سه شبکه فوق العاده" echo -e "${gl_kjlan}14. ${gl_bai}اسکریپت تست Backhaul NxTrace" echo -e "${gl_kjlan}15. ${gl_bai}NxTrace اسکریپت تست Backhaul IP را مشخص می کند" echo -e "${gl_kjlan}16. ${gl_bai}آزمون خط سه شبکه Ludashi2020" echo -e "${gl_kjlan}17. ${gl_bai}اسکریپت تست سرعت چند منظوره I-ABC" echo -e "${gl_kjlan}18. ${gl_bai}اسکریپت معاینه فیزیکی با کیفیت شبکه NetQuality${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}تست عملکرد سخت افزار" echo -e "${gl_kjlan}21. ${gl_bai}تست عملکرد YABS" echo -e "${gl_kjlan}22. ${gl_bai}اسکریپت تست عملکرد CPU IICU/GB5" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}تست جامع" echo -e "${gl_kjlan}31. ${gl_bai}تست عملکرد نیمکت" echo -e "${gl_kjlan}32. ${gl_bai}بررسی هیولا فیوژن SpiritySDX${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) clear send_stats "تشخیص وضعیت قفل chatgpt" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear send_stats "تست قفل رسانه جریان منطقه" bash <(curl -L -s check.unlock.media) ;; 3) clear send_stats "Yeahwu Streaming Media Detection Ollock" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear send_stats "اسکریپت معاینه فیزیکی با کیفیت xykt_ip" bash <(curl -Ls IP.Check.Place) ;; 11) clear send_stats "BestTrace سه تست مسیریابی تأخیر Backhaul Network" install wget wget -qO- git.io/besttrace | bash ;; 12) clear send_stats "MTR_TRACE سه تست خط بازگشت شبکه" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear send_stats "اندازه گیری سرعت سه شبکه فوق العاده" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear send_stats "اسکریپت تست Backhaul NxTrace" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear send_stats "NxTrace اسکریپت تست Backhaul IP را مشخص می کند" echo "لیست IP هایی که می توانند ارجاع شوند" echo "------------------------" echo "مخابرات پکن: 219.141.136.12" echo "پکن یونیکوم: 202.106.50.1" echo "موبایل پکن: 221.179.155.161" echo "مخابرات شانگهای: 202.96.209.133" echo "شانگهای یونیکوم: 210.22.97.1" echo "موبایل شانگهای: 211.136.112.200" echo "Telecom Guangzhou: 58.60.188.222" echo "Guangzhou Unicom: 210.21.196.6" echo "موبایل گوانگژو: 120.196.165.24" echo "چنگدو از راه دور: 61.139.2.69" echo "چنگدو یونیکوم: 119.6.6.6" echo "Chengdu Mobile: 211.137.96.205" echo "Hunan Telecom: 36.111.200.100" echo "Hunan Unicom: 42.48.16.100" echo "Hunan Mobile: 39.134.254.6" echo "------------------------" read -e -p "یک IP مشخص را وارد کنید:" testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear send_stats "آزمون خط سه شبکه Ludashi2020" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear send_stats "اسکریپت تست سرعت چند منظوره I-ABC" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear send_stats "اسکریپت تست کیفیت شبکه" bash <(curl -sL Net.Check.Place) ;; 21) clear send_stats "تست عملکرد YABS" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear send_stats "اسکریپت تست عملکرد CPU IICU/GB5" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear send_stats "تست عملکرد نیمکت" curl -Lso- bench.sh | bash ;; 32) send_stats "بررسی هیولا فیوژن SpiritySDX" clear curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; 0) kejilion ;; *) echo "ورودی نامعتبر!" ;; esac break_end done } linux_Oracle() { while true; do clear send_stats "مجموعه اسکریپت Oracle Cloud" echo -e "مجموعه اسکریپت Oracle Cloud" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}اسکریپت فعال دستگاه بیکار را نصب کنید" echo -e "${gl_kjlan}2. ${gl_bai}اسکریپت فعال دستگاه بیکار را حذف نصب کنید" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}3. ${gl_bai}DD اسکریپت سیستم را دوباره نصب کنید" echo -e "${gl_kjlan}4. ${gl_bai}کارآگاه r فیلمنامه را شروع کنید" echo -e "${gl_kjlan}5. ${gl_bai}حالت ورود به سیستم رمز عبور را روشن کنید" echo -e "${gl_kjlan}6. ${gl_bai}ابزار بازیابی IPv6" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) clear echo "اسکریپت فعال: CPU 10-20 ٪ حافظه 20 ٪ اشغال می کند" read -e -p "آیا مطمئناً آن را نصب می کنید؟ (y/n):" choice case "$choice" in [Yy]) install_docker # مقادیر پیش فرض را تنظیم کنید local DEFAULT_CPU_CORE=1 local DEFAULT_CPU_UTIL="10-20" local DEFAULT_MEM_UTIL=20 local DEFAULT_SPEEDTEST_INTERVAL=120 # کاربر را وادار کنید تا تعداد هسته های CPU و درصد اشغال را وارد کند و در صورت ورود ، از مقدار پیش فرض استفاده کنید. read -e -p "لطفاً تعداد هسته های CPU را وارد کنید [پیش فرض:$DEFAULT_CPU_CORE]: " cpu_core local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE} read -e -p "لطفاً محدوده درصد استفاده از CPU را وارد کنید (به عنوان مثال ، 10-20) [پیش فرض:$DEFAULT_CPU_UTIL]: " cpu_util local cpu_util=${cpu_util:-$DEFAULT_CPU_UTIL} read -e -p "لطفاً درصد استفاده از حافظه را وارد کنید [پیش فرض:$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} read -e -p "لطفاً زمان فاصله زمانی (ثانیه) را وارد کنید [پیش فرض:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} # ظرف داکر را اجرا کنید docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ -e CPU_CORE="$cpu_core" \ -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy send_stats "اسکریپت فعال نصب Oracle Cloud" ;; [Nn]) ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac ;; 2) clear docker rm -f lookbusy docker rmi fogforest/lookbusy send_stats "Oracle Cloud اسکریپت فعال را حذف نصب کرد" ;; 3) clear echo "نصب مجدد سیستم" echo "--------------------------------" echo -e "${gl_hong}توجه:${gl_bai}نصب مجدد برای از دست دادن تماس خطرناک است و کسانی که نگران هستند باید با احتیاط از آن استفاده کنند. انتظار می رود نصب مجدد 15 دقیقه طول بکشد ، لطفاً از قبل از داده ها نسخه پشتیبان تهیه کنید." read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice case "$choice" in [Yy]) while true; do read -e -p "لطفاً سیستم را برای نصب مجدد انتخاب کنید: 1. Debian12 | 2. Ubuntu20.04:" sys_choice case "$sys_choice" in 1) local xitong="-d 12" break # 结束循环 ;; 2) local xitong="-u 20.04" break # 结束循环 ;; *) echo "انتخاب نامعتبر ، لطفاً دوباره وارد شوید." ;; esac done read -e -p "لطفاً رمز ورود مجدد خود را وارد کنید:" vpspasswd install wget bash <(wget --no-check-certificate -qO- "${gh_proxy}raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh") $xitong -v 64 -p $vpspasswd -port 22 send_stats "Oracle Cloud دوباره نصب اسکریپت سیستم" ;; [Nn]) echo "لغو شده" ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac ;; 4) clear echo "این ویژگی در مرحله توسعه است ، بنابراین با ما همراه باشید!" ;; 5) clear add_sshpasswd ;; 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) echo "این عملکرد توسط استاد JHB ارائه شده است ، به لطف او!" send_stats "رفع IPv6" ;; 0) kejilion ;; *) echo "ورودی نامعتبر!" ;; esac break_end done } docker_tato() { local container_count=$(docker ps -a -q 2>/dev/null | wc -l) local image_count=$(docker images -q 2>/dev/null | wc -l) local network_count=$(docker network ls -q 2>/dev/null | wc -l) local volume_count=$(docker volume ls -q 2>/dev/null | wc -l) if command -v docker &> /dev/null; then echo -e "${gl_kjlan}------------------------" echo -e "${gl_lv}محیط نصب شده است${gl_bai}ظرف:${gl_lv}$container_count${gl_bai}آینه:${gl_lv}$image_count${gl_bai}شبکه:${gl_lv}$network_count${gl_bai}رول:${gl_lv}$volume_count${gl_bai}" fi } ldnmp_tato() { local cert_count=$(ls /home/web/certs/*_cert.pem 2>/dev/null | wc -l) local output="站点: ${gl_lv}${cert_count}${gl_bai}" local dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml 2>/dev/null | tr -d '[:space:]') if [ -n "$dbrootpasswd" ]; then local db_count=$(docker exec mysql mysql -u root -p"$dbrootpasswd" -e "SHOW DATABASES;" 2>/dev/null | grep -Ev "Database|information_schema|mysql|performance_schema|sys" | wc -l) fi local db_output="数据库: ${gl_lv}${db_count}${gl_bai}" if command -v docker &>/dev/null; then if docker ps --filter "name=nginx" --filter "status=running" | grep -q nginx; then echo -e "${gl_huang}------------------------" echo -e "${gl_lv}محیط نصب شده است${gl_bai} $output $db_output" fi fi } fix_phpfpm_conf() { local container_name=$1 docker exec "$container_name" sh -c "mkdir -p /run/$container_name && chmod 777 /run/$container_name" docker exec "$container_name" sh -c "sed -i '1i [global]\\ndaemonize = no' /usr/local/etc/php-fpm.d/www.conf" docker exec "$container_name" sh -c "sed -i '/^listen =/d' /usr/local/etc/php-fpm.d/www.conf" docker exec "$container_name" sh -c "echo -e '\nlisten = /run/$container_name/php-fpm.sock\nlisten.owner = www-data\nlisten.group = www-data\nlisten.mode = 0777' >> /usr/local/etc/php-fpm.d/www.conf" docker exec "$container_name" sh -c "rm -f /usr/local/etc/php-fpm.d/zz-docker.conf" find /home/web/conf.d/ -type f -name "*.conf" -exec sed -i "s#fastcgi_pass ${container_name}:9000;#fastcgi_pass unix:/run/${container_name}/php-fpm.sock;#g" {} \; } linux_ldnmp() { while true; do clear # SEND_STATS "ساختمان وب سایت LDNMP" echo -e "${gl_huang}ساختمان وب سایت LDNMP" ldnmp_tato echo -e "${gl_huang}------------------------" echo -e "${gl_huang}1. ${gl_bai}محیط LDNMP را نصب کنید${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}وردپرس را نصب کنید${gl_huang}★${gl_bai}" echo -e "${gl_huang}3. ${gl_bai}تالار گفتمان دیسکو را نصب کنید${gl_huang}4. ${gl_bai}دسک تاپ Kadao Cloud را نصب کنید" echo -e "${gl_huang}5. ${gl_bai}ایستگاه فیلم و تلویزیون Apple CMS را نصب کنید${gl_huang}6. ${gl_bai}یک شبکه کارت دیجیتال Unicorn نصب کنید" echo -e "${gl_huang}7. ${gl_bai}وب سایت Flarum Forum را نصب کنید${gl_huang}8. ${gl_bai}وب سایت وبلاگ سبک Typecho را نصب کنید" echo -e "${gl_huang}9. ${gl_bai}بستر لینک مشترک Linkstack را نصب کنید${gl_huang}20. ${gl_bai}سایت پویا را سفارشی کنید" echo -e "${gl_huang}------------------------" echo -e "${gl_huang}21. ${gl_bai}فقط nginx را نصب کنید${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}هدایت سایت" echo -e "${gl_huang}23. ${gl_bai}پورت معکوس Proxy-IP+${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}پروکسی معکوس سایت - نام دامنه" echo -e "${gl_huang}25. ${gl_bai}بستر مدیریت رمز عبور Bitwarden را نصب کنید${gl_huang}26. ${gl_bai}وب سایت وبلاگ هاله را نصب کنید" echo -e "${gl_huang}27. ${gl_bai}Generator Word Prompt Word Painting AI را نصب کنید${gl_huang}28. ${gl_bai}تعادل بار پروکسی معکوس سایت" echo -e "${gl_huang}30. ${gl_bai}سایت استاتیک را سفارشی کنید" echo -e "${gl_huang}------------------------" echo -e "${gl_huang}31. ${gl_bai}مدیریت داده های سایت${gl_huang}★${gl_bai} ${gl_huang}32. ${gl_bai}از کل داده های سایت پشتیبان تهیه کنید" echo -e "${gl_huang}33. ${gl_bai}پشتیبان گیری از راه دور به موقع${gl_huang}34. ${gl_bai}کل داده های سایت را بازیابی کنید" echo -e "${gl_huang}------------------------" echo -e "${gl_huang}35. ${gl_bai}محافظت از محیط LDNMP${gl_huang}36. ${gl_bai}محیط LDNMP را بهینه کنید" echo -e "${gl_huang}37. ${gl_bai}محیط LDNMP را به روز کنید${gl_huang}38. ${gl_bai}حذف محیط LDNMP" echo -e "${gl_huang}------------------------" echo -e "${gl_huang}0. ${gl_bai}بازگشت به منوی اصلی" echo -e "${gl_huang}------------------------${gl_bai}" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) ldnmp_install_status_one ldnmp_install_all ;; 2) ldnmp_wp ;; 3) clear # تالار گفتمان webname="Discuz论坛" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming repeat_add_yuming ldnmp_install_status install_ssltls certs_status add_db wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/discuz.com.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf nginx_http_on cd /home/web/html mkdir $yuming cd $yuming wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/main/Discuz_X3.5_SC_UTF8_20240520.zip unzip latest.zip rm latest.zip restart_ldnmp ldnmp_web_on echo "آدرس پایگاه داده: MySQL" echo "نام بانک اطلاعاتی:$dbname" echo "نام کاربری:$dbuse" echo "رمز عبور:$dbusepasswd" echo "پیشوند جدول: discuz_" ;; 4) clear # دسک تاپ کدا webname="可道云桌面" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming repeat_add_yuming ldnmp_install_status install_ssltls certs_status add_db wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/kdy.com.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf nginx_http_on cd /home/web/html mkdir $yuming cd $yuming wget -O latest.zip ${gh_proxy}github.com/kalcaddle/kodbox/archive/refs/tags/1.50.02.zip unzip -o latest.zip rm latest.zip mv /home/web/html/$yuming/kodbox* /home/web/html/$yuming/kodbox restart_ldnmp ldnmp_web_on echo "آدرس پایگاه داده: MySQL" echo "نام کاربری:$dbuse" echo "رمز عبور:$dbusepasswd" echo "نام بانک اطلاعاتی:$dbname" echo "میزبان redis: redis" ;; 5) clear # CM Apple webname="苹果CMS" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming repeat_add_yuming ldnmp_install_status install_ssltls certs_status add_db wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/maccms.com.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf nginx_http_on cd /home/web/html mkdir $yuming cd $yuming # wget ${gh_proxy}github.com/magicblack/maccms_down/raw/master/maccms10.zip && unzip maccms10.zip && rm maccms10.zip wget ${gh_proxy}github.com/magicblack/maccms_down/raw/master/maccms10.zip && unzip maccms10.zip && mv maccms10-*/* . && rm -r maccms10-* && rm maccms10.zip cd /home/web/html/$yuming/template/ && wget ${gh_proxy}github.com/kejilion/Website_source_code/raw/main/DYXS2.zip && unzip DYXS2.zip && rm /home/web/html/$yuming/template/DYXS2.zip cp /home/web/html/$yuming/template/DYXS2/asset/admin/Dyxs2.php /home/web/html/$yuming/application/admin/controller cp /home/web/html/$yuming/template/DYXS2/asset/admin/dycms.html /home/web/html/$yuming/application/admin/view/system mv /home/web/html/$yuming/admin.php /home/web/html/$yuming/vip.php && wget -O /home/web/html/$yuming/application/extra/maccms.php ${gh_proxy}raw.githubusercontent.com/kejilion/Website_source_code/main/maccms.php restart_ldnmp ldnmp_web_on echo "آدرس پایگاه داده: MySQL" echo "درگاه پایگاه داده: 3306" echo "نام بانک اطلاعاتی:$dbname" echo "نام کاربری:$dbuse" echo "رمز عبور:$dbusepasswd" echo "پیشوند پایگاه داده: MAC_" echo "------------------------" echo "پس از موفقیت نصب ، وارد آدرس پس زمینه شوید" echo "https://$yuming/vip.php" ;; 6) clear # کارت شمارش یک پا webname="独脚数卡" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming repeat_add_yuming ldnmp_install_status install_ssltls certs_status add_db wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/dujiaoka.com.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf nginx_http_on cd /home/web/html mkdir $yuming cd $yuming wget ${gh_proxy}github.com/assimon/dujiaoka/releases/download/2.0.6/2.0.6-antibody.tar.gz && tar -zxvf 2.0.6-antibody.tar.gz && rm 2.0.6-antibody.tar.gz restart_ldnmp ldnmp_web_on echo "آدرس پایگاه داده: MySQL" echo "درگاه پایگاه داده: 3306" echo "نام بانک اطلاعاتی:$dbname" echo "نام کاربری:$dbuse" echo "رمز عبور:$dbusepasswd" echo "" echo "آدرس redis: redis" echo "رمز عبور redis: به طور پیش فرض پر نشده است" echo "بندر ردیس: 6379" echo "" echo "URL وب سایت: https: //$yuming" echo "مسیر ورود به سیستم پس زمینه: /مدیر" echo "------------------------" echo "نام کاربری: مدیر" echo "رمز عبور: مدیر" echo "------------------------" echo "اگر Red Error0 هنگام ورود به سیستم در گوشه سمت راست بالا ظاهر می شود ، لطفاً از دستور زیر استفاده کنید:" echo "من همچنین بسیار عصبانی هستم که کارت شماره یونیکورن بسیار مشکل ساز است و چنین مشکلاتی وجود خواهد داشت!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear # انجمن webname="flarum论坛" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming repeat_add_yuming ldnmp_install_status install_ssltls certs_status add_db wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/flarum.com.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf nginx_http_on docker exec php rm -f /usr/local/etc/php/conf.d/optimized_php.ini cd /home/web/html mkdir $yuming cd $yuming docker exec php sh -c "php -r \"copy('https://getcomposer.org/installer', 'composer-setup.php');\"" docker exec php sh -c "php composer-setup.php" docker exec php sh -c "php -r \"unlink('composer-setup.php');\"" docker exec php sh -c "mv composer.phar /usr/local/bin/composer" docker exec php composer create-project flarum/flarum /var/www/html/$yuming docker exec php sh -c "cd /var/www/html/$yuming && composer require flarum-lang/chinese-simplified" docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/polls" docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/sitemap" docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/oauth" docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/best-answer:*" docker exec php sh -c "cd /var/www/html/$yuming && composer require v17development/flarum-seo" docker exec php sh -c "cd /var/www/html/$yuming && composer require clarkwinkelmann/flarum-ext-emojionearea" restart_ldnmp ldnmp_web_on echo "آدرس پایگاه داده: MySQL" echo "نام بانک اطلاعاتی:$dbname" echo "نام کاربری:$dbuse" echo "رمز عبور:$dbusepasswd" echo "پیشوند جدول: flarum_" echo "اطلاعات سرپرست توسط خودتان تنظیم شده است" ;; 8) clear # typecho webname="typecho" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming repeat_add_yuming ldnmp_install_status install_ssltls certs_status add_db wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/typecho.com.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf nginx_http_on cd /home/web/html mkdir $yuming cd $yuming wget -O latest.zip ${gh_proxy}github.com/typecho/typecho/releases/latest/download/typecho.zip unzip latest.zip rm latest.zip restart_ldnmp clear ldnmp_web_on echo "پیشوند پایگاه داده: typecho_" echo "آدرس پایگاه داده: MySQL" echo "نام کاربری:$dbuse" echo "رمز عبور:$dbusepasswd" echo "نام بانک اطلاعاتی:$dbname" ;; 9) clear # LinkStack webname="LinkStack" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming repeat_add_yuming ldnmp_install_status install_ssltls certs_status add_db wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/refs/heads/main/index_php.conf sed -i "s|/var/www/html/yuming.com/|/var/www/html/yuming.com/linkstack|g" /home/web/conf.d/$yuming.conf sed -i "s|yuming.com|$yuming|g" /home/web/conf.d/$yuming.conf nginx_http_on cd /home/web/html mkdir $yuming cd $yuming wget -O latest.zip ${gh_proxy}github.com/linkstackorg/linkstack/releases/latest/download/linkstack.zip unzip latest.zip rm latest.zip restart_ldnmp clear ldnmp_web_on echo "آدرس پایگاه داده: MySQL" echo "درگاه پایگاه داده: 3306" echo "نام بانک اطلاعاتی:$dbname" echo "نام کاربری:$dbuse" echo "رمز عبور:$dbusepasswd" ;; 20) clear webname="PHP动态站点" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming repeat_add_yuming ldnmp_install_status install_ssltls certs_status add_db wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/index_php.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf nginx_http_on cd /home/web/html mkdir $yuming cd $yuming clear echo -e "[${gl_huang}1/6${gl_bai}] کد منبع PHP را بارگذاری کنید" echo "-------------" echo "در حال حاضر ، فقط بسته های کد منبع زیپ مجاز است. لطفاً بسته های کد منبع را در/صفحه اصلی/وب/html/قرار دهید${yuming}در فهرست" read -e -p "همچنین می توانید لینک بارگیری را برای بارگیری از راه دور بسته کد منبع وارد کنید. مستقیماً Enter را فشار دهید تا از راه دور بارگیری کنید:" url_download if [ -n "$url_download" ]; then wget "$url_download" fi unzip $(ls -t *.zip | head -n 1) rm -f $(ls -t *.zip | head -n 1) clear echo -e "[${gl_huang}2/6${gl_bai}] مسیری که در آن index.php قرار دارد" echo "-------------" # find "$(realpath .)" -name "index.php" -print find "$(realpath .)" -name "index.php" -print | xargs -I {} dirname {} read -e -p "لطفاً مسیر index.php را وارد کنید ، مشابه (/home/web/html/$yuming/wordpress/): " index_lujing sed -i "s#root /var/www/html/$yuming/#root $index_lujing#g" /home/web/conf.d/$yuming.conf sed -i "s#/home/web/#/var/www/#g" /home/web/conf.d/$yuming.conf clear echo -e "[${gl_huang}3/6${gl_bai}] لطفاً نسخه PHP را انتخاب کنید" echo "-------------" read -e -p "1. آخرین نسخه PHP | 2. PHP7.4:" pho_v case "$pho_v" in 1) sed -i "s#php:9000#php:9000#g" /home/web/conf.d/$yuming.conf local PHP_Version="php" ;; 2) sed -i "s#php:9000#php74:9000#g" /home/web/conf.d/$yuming.conf local PHP_Version="php74" ;; *) echo "انتخاب نامعتبر ، لطفاً دوباره وارد شوید." ;; esac clear echo -e "[${gl_huang}4/6${gl_bai}] پسوند مشخص شده را نصب کنید" echo "-------------" echo "پسوند نصب شده" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions if [ -n "$php_extensions" ]; then docker exec $PHP_Version install-php-extensions $php_extensions fi clear echo -e "[${gl_huang}5/6${gl_bai}] پیکربندی سایت را ویرایش کنید" echo "-------------" echo "برای ادامه هر کلید ، هر کلید را فشار دهید ، و می توانید پیکربندی سایت را با جزئیات ، مانند محتوای شبه استاتیک و غیره تنظیم کنید." read -n 1 -s -r -p "" install nano nano /home/web/conf.d/$yuming.conf clear echo -e "[${gl_huang}6/6${gl_bai}] مدیریت پایگاه داده" echo "-------------" read -e -p "1. من یک سایت جدید می سازم. من یک سایت قدیمی می سازم و یک نسخه پشتیبان از پایگاه داده دارم:" use_db case $use_db in 1) echo ;; 2) echo "پشتیبان گیری از پایگاه داده باید یک بسته فشرده شده .GZ-end باشد. لطفاً آن را در/خانه/فهرست قرار دهید تا از واردات داده های پشتیبان Pagoda/1Panel پشتیبانی کنید." read -e -p "همچنین می توانید لینک بارگیری را برای بارگیری از راه دور داده های پشتیبان وارد کنید. مستقیماً Enter را فشار دهید از راه دور بارگیری می شود:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then wget "$url_download_db" fi gunzip $(ls -t *.gz | head -n 1) latest_sql=$(ls -t *.sql | head -n 1) dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]') docker exec -i mysql mysql -u root -p"$dbrootpasswd" $dbname < "/home/$latest_sql" echo "داده های جدول واردات پایگاه داده" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql echo "واردات پایگاه داده تکمیل شد" ;; *) echo ;; esac docker exec php rm -f /usr/local/etc/php/conf.d/optimized_php.ini restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" echo "آدرس پایگاه داده: MySQL" echo "نام بانک اطلاعاتی:$dbname" echo "نام کاربری:$dbuse" echo "رمز عبور:$dbusepasswd" echo "پیشوند جدول:$prefix" echo "اطلاعات ورود به سیستم توسط خود شما تنظیم شده است" ;; 21) ldnmp_install_status_one nginx_install_all ;; 22) clear webname="站点重定向" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming read -e -p "لطفاً نام دامنه پرش را وارد کنید:" reverseproxy nginx_install_status install_ssltls certs_status wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/rewrite.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf sed -i "s/baidu.com/$reverseproxy/g" /home/web/conf.d/$yuming.conf nginx_http_on docker exec nginx nginx -s reload nginx_web_on ;; 23) ldnmp_Proxy ;; 24) clear webname="反向代理-域名" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming echo -e "قالب نام دامنه:${gl_huang}google.com${gl_bai}" read -e -p "لطفاً نام دامنه ضد نسل خود را وارد کنید:" fandai_yuming nginx_install_status install_ssltls certs_status wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-domain.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf sed -i "s|fandaicom|$fandai_yuming|g" /home/web/conf.d/$yuming.conf nginx_http_on docker exec nginx nginx -s reload nginx_web_on ;; 25) clear webname="Bitwarden" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming nginx_install_status install_ssltls certs_status docker run -d \ --name bitwarden \ --restart always \ -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server duankou=3280 reverse_proxy nginx_web_on ;; 26) clear webname="halo" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming nginx_install_status install_ssltls certs_status docker run -d --name halo --restart always -p 8010:8090 -v /home/web/html/$yuming/.halo2:/root/.halo2 halohub/halo:2 duankou=8010 reverse_proxy nginx_web_on ;; 27) clear webname="AI绘画提示词生成器" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming nginx_install_status install_ssltls certs_status wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/html.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf nginx_http_on cd /home/web/html mkdir $yuming cd $yuming wget ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/ai_prompt_generator.zip unzip $(ls -t *.zip | head -n 1) rm -f $(ls -t *.zip | head -n 1) docker exec nginx chmod -R nginx:nginx /var/www/html docker exec nginx nginx -s reload nginx_web_on ;; 28) ldnmp_Proxy_backend ;; 30) clear webname="静态站点" send_stats "نصب کردن$webname" echo "استقرار را شروع کنید$webname" add_yuming repeat_add_yuming nginx_install_status install_ssltls certs_status wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/html.conf sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf nginx_http_on cd /home/web/html mkdir $yuming cd $yuming clear echo -e "[${gl_huang}1/2${gl_bai}] کد منبع استاتیک را بارگذاری کنید" echo "-------------" echo "در حال حاضر ، فقط بسته های کد منبع زیپ مجاز است. لطفاً بسته های کد منبع را در/صفحه اصلی/وب/html/قرار دهید${yuming}در فهرست" read -e -p "همچنین می توانید لینک بارگیری را برای بارگیری از راه دور بسته کد منبع وارد کنید. مستقیماً Enter را فشار دهید تا از راه دور بارگیری کنید:" url_download if [ -n "$url_download" ]; then wget "$url_download" fi unzip $(ls -t *.zip | head -n 1) rm -f $(ls -t *.zip | head -n 1) clear echo -e "[${gl_huang}2/2${gl_bai}] مسیری که در آن index.html واقع شده است" echo "-------------" # find "$(realpath .)" -name "index.html" -print find "$(realpath .)" -name "index.html" -print | xargs -I {} dirname {} read -e -p "لطفاً مسیر index.html را وارد کنید ، مشابه (/home/web/html/$yuming/index/): " index_lujing sed -i "s#root /var/www/html/$yuming/#root $index_lujing#g" /home/web/conf.d/$yuming.conf sed -i "s#/home/web/#/var/www/#g" /home/web/conf.d/$yuming.conf docker exec nginx chmod -R nginx:nginx /var/www/html docker exec nginx nginx -s reload nginx_web_on ;; 31) ldnmp_web_status ;; 32) clear send_stats "نسخه پشتیبان از محیط زیست LDNMP" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" echo -e "${gl_huang}پشتیبان گیری$backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear echo "پرونده پشتیبان ایجاد شده است: /صفحه اصلی$backup_filename" read -e -p "آیا می خواهید داده های پشتیبان را به یک سرور از راه دور منتقل کنید؟ (y/n):" choice case "$choice" in [Yy]) read -e -p "لطفاً IP از راه دور سرور را وارد کنید:" remote_ip if [ -z "$remote_ip" ]; then echo "خطا: لطفاً IP از راه دور سرور را وارد کنید." continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) if [ -n "$latest_tar" ]; then ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" echo "این پرونده به دایرکتوری خانه از راه دور سرور منتقل شده است." else echo "پرونده منتقل شده یافت نشد." fi break ;; [Nn]) break ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac done ;; 33) clear send_stats "پشتیبان گیری از راه دور به موقع" read -e -p "IP سرور از راه دور را وارد کنید:" useip read -e -p "رمز ورود سرور از راه دور را وارد کنید:" usepasswd cd ~ wget -O ${useip}_beifen.sh ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/beifen.sh > /dev/null 2>&1 chmod +x ${useip}_beifen.sh sed -i "s/0.0.0.0/$useip/g" ${useip}_beifen.sh sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" echo "1. پشتیبان گیری هفتگی 2. پشتیبان گیری روزانه" read -e -p "لطفا انتخاب خود را وارد کنید:" dingshi case $dingshi in 1) check_crontab_installed read -e -p "روز هفته را برای پشتیبان گیری هفتگی خود انتخاب کنید (0-6 ، 0 نشان دهنده یکشنبه):" weekday (crontab -l ; echo "0 0 * * $weekday ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; 2) check_crontab_installed read -e -p "زمان پشتیبان گیری روزانه (ساعت ، 0-23) را انتخاب کنید:" hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac install sshpass ;; 34) root_use send_stats "ترمیم محیط LDNMP" echo "پشتیبان گیری سایت موجود" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" read -e -p "برای بازیابی آخرین نسخه پشتیبان وارد شوید ، نام فایل پشتیبان را وارد کنید تا نسخه پشتیبان تهیه شده را بازیابی کنید ، 0 را وارد کنید تا از آن خارج شوید:" filename if [ "$filename" == "0" ]; then break_end linux_ldnmp fi # اگر کاربر نام پرونده را وارد نکرد ، از آخرین بسته فشرده شده استفاده کنید if [ -z "$filename" ]; then local filename=$(ls -t /home/*.tar.gz | head -1) fi if [ -n "$filename" ]; then cd /home/web/ > /dev/null 2>&1 docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 echo -e "${gl_huang}رفع فشار انجام می شود$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port install_dependency install_docker install_certbot install_ldnmp else echo "هیچ بسته فشرده سازی یافت نشد." fi ;; 35) send_stats "دفاع محیط زیست LDNMP" while true; do check_waf_status check_cf_mode if [ -x "$(command -v fail2ban-client)" ] ; then clear remove fail2ban rm -rf /etc/fail2ban else clear docker_name="fail2ban" check_docker_app echo -e "برنامه دفاع وب سایت سرور${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" echo "1. برنامه دفاع را نصب کنید" echo "------------------------" echo "5. مشاهده سابقه رهگیری SSH 6. مشاهده سابقه رهگیری وب سایت" echo "7. لیست قوانین دفاعی را مشاهده کنید 8. مشاهده نظارت بر زمان واقعی سیاههها" echo "------------------------" echo "11. پیکربندی پارامترهای رهگیری 12. همه IP های مسدود شده را پاک کنید" echo "------------------------" echo "21. حالت Cloudflare 22. بار زیاد در 5 ثانیه سپر" echo "------------------------" echo "31. WAF 32 را روشن کنید. WAF را خاموش کنید" echo "33. DDOS Defense 34 را روشن کنید. دفاع DDOS را خاموش کنید" echo "------------------------" echo "9. برنامه دفاعی را حذف کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) f2b_install_sshd cd /path/to/fail2ban/config/fail2ban/filter.d curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/fail2ban-nginx-cc.conf cd /path/to/fail2ban/config/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf sed -i "/cloudflare/d" /path/to/fail2ban/config/fail2ban/jail.d/nginx-docker-cc.conf f2b_status ;; 5) echo "------------------------" f2b_sshd echo "------------------------" ;; 6) echo "------------------------" local xxx="fail2ban-nginx-cc" f2b_status_xxx echo "------------------------" local xxx="docker-nginx-418" f2b_status_xxx echo "------------------------" local xxx="docker-nginx-bad-request" f2b_status_xxx echo "------------------------" local xxx="docker-nginx-badbots" f2b_status_xxx echo "------------------------" local xxx="docker-nginx-botsearch" f2b_status_xxx echo "------------------------" local xxx="docker-nginx-deny" f2b_status_xxx echo "------------------------" local xxx="docker-nginx-http-auth" f2b_status_xxx echo "------------------------" local xxx="docker-nginx-unauthorized" f2b_status_xxx echo "------------------------" local xxx="docker-php-url-fopen" f2b_status_xxx echo "------------------------" ;; 7) docker exec -it fail2ban fail2ban-client status ;; 8) tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log ;; 9) docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null echo "برنامه دفاعی Fail2ban حذف نشده است" ;; 11) install nano nano /path/to/fail2ban/config/fail2ban/jail.d/nginx-docker-cc.conf f2b_status break ;; 12) docker exec -it fail2ban fail2ban-client unban --all ;; 21) send_stats "حالت CloudFlare" echo "به گوشه سمت راست بالای پس زمینه CF بروید ، API Token را در سمت چپ انتخاب کنید و کلید جهانی API را بدست آورید" echo "https://dash.cloudflare.com/login" read -e -p "شماره حساب CF را وارد کنید:" cfuser read -e -p "کلید جهانی API را برای CF وارد کنید:" cftoken wget -O /home/web/conf.d/default.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/default11.conf docker exec nginx nginx -s reload cd /path/to/fail2ban/config/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf cd /path/to/fail2ban/config/fail2ban/action.d curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/cloudflare-docker.conf sed -i "s/kejilion@outlook.com/$cfuser/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status echo "حالت CloudFlare برای مشاهده سوابق رهگیری در پس زمینه CF ، سایت های امنیت-امنیت پیکربندی شده است" ;; 22) send_stats "بار زیاد در سپر 5 ثانیه" echo -e "${gl_huang}وب سایت به طور خودکار هر 5 دقیقه یکبار تشخیص می دهد. هنگامی که بار زیاد تشخیص داده می شود ، سپر به طور خودکار روشن می شود و بار کم به مدت 5 ثانیه به طور خودکار خاموش می شود.${gl_bai}" echo "--------------" echo "پارامترهای CF را دریافت کنید:" echo -e "به گوشه سمت راست بالای پس زمینه CF بروید ، API Token را در سمت چپ انتخاب کنید و آن را بدست آورید${gl_huang}Global API Key${gl_bai}" echo -e "برای دریافت به سمت راست پایین صفحه خلاصه نام دامنه پس زمینه CF بروید${gl_huang}شناسه منطقه${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" read -e -p "شماره حساب CF را وارد کنید:" cfuser read -e -p "کلید جهانی API را برای CF وارد کنید:" cftoken read -e -p "شناسه منطقه نام دامنه را در CF وارد کنید:" cfzonID cd ~ install jq bc check_crontab_installed curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/CF-Under-Attack.sh chmod +x CF-Under-Attack.sh sed -i "s/AAAA/$cfuser/g" ~/CF-Under-Attack.sh sed -i "s/BBBB/$cftoken/g" ~/CF-Under-Attack.sh sed -i "s/CCCC/$cfzonID/g" ~/CF-Under-Attack.sh local cron_job="*/5 * * * * ~/CF-Under-Attack.sh" local existing_cron=$(crontab -l 2>/dev/null | grep -F "$cron_job") if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - echo "اسکریپت باز شدن محافظ اتوماتیک بار بالا اضافه شده است" else echo "اسکریپت Shield Automatic در حال حاضر وجود دارد ، نیازی به اضافه کردن آن نیست" fi ;; 31) nginx_waf on echo "سایت WAF فعال است" send_stats "سایت WAF فعال است" ;; 32) nginx_waf off echo "سایت WAF بسته شده است" send_stats "سایت WAF بسته شده است" ;; 33) enable_ddos_defense ;; 34) disable_ddos_defense ;; *) break ;; esac fi break_end done ;; 36) while true; do clear send_stats "محیط LDNMP را بهینه کنید" echo "محیط LDNMP را بهینه کنید" echo "------------------------" echo "1. حالت استاندارد 2. حالت عملکرد بالا (توصیه می شود 2H2G یا بالاتر)" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) send_stats "حالت استاندارد سایت" # تنظیم nginx sed -i 's/worker_connections.*/worker_connections 10240;/' /home/web/nginx.conf sed -i 's/worker_processes.*/worker_processes 4;/' /home/web/nginx.conf # تنظیم PHP wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini docker cp /home/optimized_php.ini php:/usr/local/etc/php/conf.d/optimized_php.ini docker cp /home/optimized_php.ini php74:/usr/local/etc/php/conf.d/optimized_php.ini rm -rf /home/optimized_php.ini # تنظیم PHP wget -O /home/www.conf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/www-1.conf docker cp /home/www.conf php:/usr/local/etc/php-fpm.d/www.conf docker cp /home/www.conf php74:/usr/local/etc/php-fpm.d/www.conf rm -rf /home/www.conf fix_phpfpm_conf php fix_phpfpm_conf php74 # تنظیم mysql wget -O /home/custom_mysql_config.cnf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/custom_mysql_config-1.cnf docker cp /home/custom_mysql_config.cnf mysql:/etc/mysql/conf.d/ rm -rf /home/custom_mysql_config.cnf cd /home/web && docker compose restart restart_redis optimize_balanced echo "محیط LDNMP روی حالت استاندارد تنظیم شده است" ;; 2) send_stats "حالت عملکرد بالا سایت" # تنظیم nginx sed -i 's/worker_connections.*/worker_connections 20480;/' /home/web/nginx.conf sed -i 's/worker_processes.*/worker_processes 8;/' /home/web/nginx.conf # تنظیم PHP wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini docker cp /home/optimized_php.ini php:/usr/local/etc/php/conf.d/optimized_php.ini docker cp /home/optimized_php.ini php74:/usr/local/etc/php/conf.d/optimized_php.ini rm -rf /home/optimized_php.ini # تنظیم PHP wget -O /home/www.conf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/www.conf docker cp /home/www.conf php:/usr/local/etc/php-fpm.d/www.conf docker cp /home/www.conf php74:/usr/local/etc/php-fpm.d/www.conf rm -rf /home/www.conf fix_phpfpm_conf php fix_phpfpm_conf php74 # تنظیم mysql wget -O /home/custom_mysql_config.cnf ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/custom_mysql_config.cnf docker cp /home/custom_mysql_config.cnf mysql:/etc/mysql/conf.d/ rm -rf /home/custom_mysql_config.cnf cd /home/web && docker compose restart restart_redis optimize_web_server echo "محیط LDNMP روی حالت عملکرد بالا تنظیم شده است" ;; *) break ;; esac break_end done ;; 37) root_use while true; do clear send_stats "محیط LDNMP را به روز کنید" echo "محیط LDNMP را به روز کنید" echo "------------------------" ldnmp_v echo "نسخه جدیدی از قطعات را کشف کنید" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then echo -e "${gl_huang}nginx $update_status${gl_bai}" fi check_docker_image_update php if [ -n "$update_status" ]; then echo -e "${gl_huang}php $update_status${gl_bai}" fi check_docker_image_update mysql if [ -n "$update_status" ]; then echo -e "${gl_huang}mysql $update_status${gl_bai}" fi check_docker_image_update redis if [ -n "$update_status" ]; then echo -e "${gl_huang}redis $update_status${gl_bai}" fi echo "------------------------" echo echo "1. به روزرسانی Nginx 2. MySQL 3 را به روز کنید. PHP 4 را به روز کنید. Redis را به روز کنید" echo "------------------------" echo "5. محیط کامل را به روز کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) nginx_upgrade ;; 2) local ldnmp_pods="mysql" read -e -p "لطفا وارد کنید${ldnmp_pods}شماره نسخه (مانند: 8.0 8.3 8.4 9.0) (برای دریافت آخرین نسخه وارد شوید):" version local version=${version:-latest} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml sed -i "s/image: mysql/image: mysql:${version}/" /home/web/docker-compose.yml docker rm -f $ldnmp_pods docker images --filter=reference="$ldnmp_pods*" -q | xargs docker rmi > /dev/null 2>&1 docker compose up -d --force-recreate $ldnmp_pods docker restart $ldnmp_pods cp /home/web/docker-compose1.yml /home/web/docker-compose.yml send_stats "تمدید کردن$ldnmp_pods" echo "تمدید کردن${ldnmp_pods}پایان" ;; 3) local ldnmp_pods="php" read -e -p "لطفا وارد کنید${ldnmp_pods}شماره نسخه (مانند: 7.4 8.0 8.1 8.2 8.3) (برای دریافت آخرین نسخه وارد شوید):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml sed -i "s/kjlion\///g" /home/web/docker-compose.yml > /dev/null 2>&1 sed -i "s/image: php:fpm-alpine/image: php:${version}-fpm-alpine/" /home/web/docker-compose.yml docker rm -f $ldnmp_pods docker images --filter=reference="$ldnmp_pods*" -q | xargs docker rmi > /dev/null 2>&1 docker images --filter=reference="kjlion/${ldnmp_pods}*" -q | xargs docker rmi > /dev/null 2>&1 docker compose up -d --force-recreate $ldnmp_pods docker exec php chown -R www-data:www-data /var/www/html run_command docker exec php sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories > /dev/null 2>&1 docker exec php apk update curl -sL ${gh_proxy}github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions -o /usr/local/bin/install-php-extensions docker exec php mkdir -p /usr/local/bin/ docker cp /usr/local/bin/install-php-extensions php:/usr/local/bin/ docker exec php chmod +x /usr/local/bin/install-php-extensions docker exec php install-php-extensions mysqli pdo_mysql gd intl zip exif bcmath opcache redis imagick docker exec php sh -c 'echo "upload_max_filesize=50M " > /usr/local/etc/php/conf.d/uploads.ini' > /dev/null 2>&1 docker exec php sh -c 'echo "post_max_size=50M " > /usr/local/etc/php/conf.d/post.ini' > /dev/null 2>&1 docker exec php sh -c 'echo "memory_limit=256M" > /usr/local/etc/php/conf.d/memory.ini' > /dev/null 2>&1 docker exec php sh -c 'echo "max_execution_time=1200" > /usr/local/etc/php/conf.d/max_execution_time.ini' > /dev/null 2>&1 docker exec php sh -c 'echo "max_input_time=600" > /usr/local/etc/php/conf.d/max_input_time.ini' > /dev/null 2>&1 docker exec php sh -c 'echo "max_input_vars=5000" > /usr/local/etc/php/conf.d/max_input_vars.ini' > /dev/null 2>&1 fix_phpfpm_con $ldnmp_pods docker restart $ldnmp_pods > /dev/null 2>&1 cp /home/web/docker-compose1.yml /home/web/docker-compose.yml send_stats "تمدید کردن$ldnmp_pods" echo "تمدید کردن${ldnmp_pods}پایان" ;; 4) local ldnmp_pods="redis" cd /home/web/ docker rm -f $ldnmp_pods docker images --filter=reference="$ldnmp_pods*" -q | xargs docker rmi > /dev/null 2>&1 docker compose up -d --force-recreate $ldnmp_pods docker restart $ldnmp_pods > /dev/null 2>&1 restart_redis send_stats "تمدید کردن$ldnmp_pods" echo "تمدید کردن${ldnmp_pods}پایان" ;; 5) read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}长时间不更新环境的用户,请慎重更新LDNMP环境,会有数据库更新失败的风险。确定更新LDNMP环境吗?(Y/N): ")" choice case "$choice" in [Yy]) send_stats "محیط LDNMP را کاملاً به روز کنید" cd /home/web/ docker compose down --rmi all check_port install_dependency install_docker install_certbot install_ldnmp ;; *) ;; esac ;; *) break ;; esac break_end done ;; 38) root_use send_stats "حذف محیط LDNMP" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) cd /home/web/ docker compose down --rmi all docker compose -f docker-compose.phpmyadmin.yml down > /dev/null 2>&1 docker compose -f docker-compose.phpmyadmin.yml down --rmi all > /dev/null 2>&1 rm -rf /home/web ;; [Nn]) ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac ;; 0) kejilion ;; *) echo "ورودی نامعتبر!" esac break_end done } linux_panel() { while true; do clear # send_stats "بازار برنامه" echo -e "بازار کاربرد" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}نسخه رسمی پنل باوتا${gl_kjlan}2. ${gl_bai}نسخه بین المللی Aapanel" echo -e "${gl_kjlan}3. ${gl_bai}پانل مدیریت نسل 1 پانل${gl_kjlan}4. ${gl_bai}پانل بصری nginxproxymanager" echo -e "${gl_kjlan}5. ${gl_bai}برنامه لیست پرونده های چند فروشگاهی Alist${gl_kjlan}6. ${gl_bai}نسخه وب دسک تاپ Ubuntu از راه دور" echo -e "${gl_kjlan}7. ${gl_bai}پانل نظارت Nezha Probe VPS${gl_kjlan}8. ${gl_bai}پانل بارگیری مغناطیسی QB آفلاین BT" echo -e "${gl_kjlan}9. ${gl_bai}برنامه سرور پستی Poste.io${gl_kjlan}10. ${gl_bai}سیستم چت آنلاین چند نفره Rocketchat" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${gl_bai}نرم افزار مدیریت پروژه Zendao${gl_kjlan}12. ${gl_bai}پانل qinglong پانل مدیریت وظیفه به موقع" echo -e "${gl_kjlan}13. ${gl_bai}دیسک شبکه CloudReve${gl_huang}★${gl_bai} ${gl_kjlan}14. ${gl_bai}برنامه ساده مدیریت عکس تختخواب" echo -e "${gl_kjlan}15. ${gl_bai}سیستم مدیریت چندرسانه ای Emby${gl_kjlan}16. ${gl_bai}پانل تست سرعت سرعت" echo -e "${gl_kjlan}17. ${gl_bai}Adguardhome Adware${gl_kjlan}18. ${gl_bai}Office Office Office Office Office" echo -e "${gl_kjlan}19. ${gl_bai}پانل فایروال Thunder Pool WAF${gl_kjlan}20. ${gl_bai}پانل مدیریت کانتینر Portainer" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${gl_bai}نسخه وب VScode${gl_kjlan}22. ${gl_bai}ابزار نظارت بر Uptimekuma" echo -e "${gl_kjlan}23. ${gl_bai}یادداشت صفحه وب یادداشت${gl_kjlan}24. ${gl_bai}Webtop Remote Desktop Edition${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}25. ${gl_bai}دیسک شبکه NextCloud${gl_kjlan}26. ${gl_bai}چارچوب مدیریت وظیفه زمان بندی QD-Today" echo -e "${gl_kjlan}27. ${gl_bai}پنل مدیریت پشته ظرف Dockge${gl_kjlan}28. ${gl_bai}ابزار تست سرعت Librespeed" echo -e "${gl_kjlan}29. ${gl_bai}سایت جستجوی جمع آوری Searxng${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}سیستم آلبوم خصوصی Photoprism" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}31. ${gl_bai}مجموعه ابزار stirlingpdf${gl_kjlan}32. ${gl_bai}نرم افزار نمودار آنلاین Drawio رایگان${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${gl_bai}پانل ناوبری آفتاب${gl_kjlan}34. ${gl_bai}پلت فرم اشتراک فایل Pingvin-Share" echo -e "${gl_kjlan}35. ${gl_bai}دایره مینیمالیستی دوستان${gl_kjlan}36. ${gl_bai}وب سایت جمع آوری چت Lobechatai" echo -e "${gl_kjlan}37. ${gl_bai}جعبه ابزار myip${gl_huang}★${gl_bai} ${gl_kjlan}38. ${gl_bai}سطل خانوادگی شیایایا آلیست" echo -e "${gl_kjlan}39. ${gl_bai}ابزار ضبط پخش زنده Bililive${gl_kjlan}40. ${gl_bai}نسخه وب وب سایت ابزار اتصال SSH" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}41. ${gl_bai}پنل مدیریت ماوس${gl_kjlan}42. ${gl_bai}ابزار اتصال از راه دور Nexte" echo -e "${gl_kjlan}43. ${gl_bai}میز از راه دور Rustdesk (سرور)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${gl_bai}میز از راه دور Rustdesk (رله)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${gl_bai}ایستگاه شتاب داکر${gl_kjlan}46. ${gl_bai}ایستگاه شتاب GitHub${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${gl_bai}نظارت بر پرومتئوس${gl_kjlan}48. ${gl_bai}پرومتئوس (نظارت میزبان)" echo -e "${gl_kjlan}49. ${gl_bai}پرومتئوس (نظارت بر کانتینر)${gl_kjlan}50. ${gl_bai}ابزار نظارت دوباره پر کردن" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}51. ${gl_bai}پنل مرغ PVE${gl_kjlan}52. ${gl_bai}پنل مدیریت کانتینر dpanel" echo -e "${gl_kjlan}53. ${gl_bai}LLAMA3 CHAT AI MODEL${gl_kjlan}54. ${gl_bai}پانل مدیریت ساختمان وب سایت میزبان AMH" echo -e "${gl_kjlan}55. ${gl_bai}نفوذ اینترانت FRP (سمت سرور)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${gl_bai}نفوذ اینترانت FRP (مشتری)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}57. ${gl_bai}Deepseek Chat AI مدل بزرگ${gl_kjlan}58. ${gl_bai}پایگاه دانش مدل بزرگ متفاوت${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}59. ${gl_bai}مدیریت دارایی مدل بزرگ Newapi${gl_kjlan}60. ${gl_bai}ماشین سنگر منبع باز Jumpserver" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}61. ${gl_bai}سرور ترجمه آنلاین${gl_kjlan}62. ${gl_bai}پایه دانش مدل بزرگ ragflow" echo -e "${gl_kjlan}63. ${gl_bai}پلت فرم AI خود میزبان OpenWebui${gl_huang}★${gl_bai} ${gl_kjlan}64. ${gl_bai}جعبه ابزار آن" echo -e "${gl_kjlan}65. ${gl_bai}پلت فرم گردش کار اتوماسیون N8N${gl_huang}★${gl_bai} ${gl_kjlan}66. ${gl_bai}ابزار بارگیری ویدیویی YT-DLP" echo -e "${gl_kjlan}67. ${gl_bai}DDNS-GO ابزار مدیریت DNS DNS${gl_huang}★${gl_bai} ${gl_kjlan}68. ${gl_bai}بستر مدیریت گواهینامه Allinssl" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" local panelurl="https://www.bt.cn/new/index.html" panel_app_install() { if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec } panel_app_manage() { bt } panel_app_uninstall() { curl -o bt-uninstall.sh http://download.bt.cn/install/bt-uninstall.sh > /dev/null 2>&1 && chmod +x bt-uninstall.sh && ./bt-uninstall.sh chmod +x bt-uninstall.sh ./bt-uninstall.sh } install_panel ;; 2) local lujing="[ -d "/www/server/panel" ]" local panelname="aapanel" local panelurl="https://www.aapanel.com/new/index.html" panel_app_install() { URL=https://www.aapanel.com/script/install_7.0_en.sh && if [ -f /usr/bin/curl ];then curl -ksSO "$URL" ;else wget --no-check-certificate -O install_7.0_en.sh "$URL";fi;bash install_7.0_en.sh aapanel } panel_app_manage() { bt } panel_app_uninstall() { curl -o bt-uninstall.sh http://download.bt.cn/install/bt-uninstall.sh > /dev/null 2>&1 && chmod +x bt-uninstall.sh && ./bt-uninstall.sh chmod +x bt-uninstall.sh ./bt-uninstall.sh } install_panel ;; 3) local lujing="command -v 1pctl > /dev/null 2>&1" local panelname="1Panel" local panelurl="https://1panel.cn/" panel_app_install() { install bash curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh } panel_app_manage() { 1pctl user-info 1pctl update password } panel_app_uninstall() { 1pctl uninstall } install_panel ;; 4) local docker_name="npm" local docker_img="jc21/nginx-proxy-manager:latest" local docker_port=81 docker_rum() { docker run -d \ --name=$docker_name \ -p ${docker_port}:81 \ -p 80:80 \ -p 443:443 \ -v /home/docker/npm/data:/data \ -v /home/docker/npm/letsencrypt:/etc/letsencrypt \ --restart=always \ $docker_img } local docker_describe="如果您已经安装了其他面板或者LDNMP建站环境,建议先卸载,再安装npm!" local docker_url="官网介绍: https://nginxproxymanager.com/" local docker_use="echo \"初始用户名: admin@example.com\"" local docker_passwd="echo \"初始密码: changeme\"" local app_size="1" docker_app ;; 5) local docker_name="alist" local docker_img="xhofe/alist-aria2:latest" local docker_port=5244 docker_rum() { docker run -d \ --restart=always \ -v /home/docker/alist:/opt/alist/data \ -p ${docker_port}:5244 \ -e PUID=0 \ -e PGID=0 \ -e UMASK=022 \ --name="alist" \ xhofe/alist-aria2:latest } local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" local docker_url="官网介绍: https://alist.nn.ci/zh/" local docker_use="docker exec -it alist ./alist admin random" local docker_passwd="" local app_size="1" docker_app ;; 6) local docker_name="webtop-ubuntu" local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" local docker_port=3006 docker_rum() { docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ -p ${docker_port}:3000 \ -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ --restart unless-stopped \ lscr.io/linuxserver/webtop:ubuntu-kde } local docker_describe="webtop基于Ubuntu的容器,包含官方支持的完整桌面环境,可通过任何现代 Web 浏览器访问" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" local docker_use="" local docker_passwd="" local app_size="2" docker_app ;; 7) clear send_stats "Nezha بسازید" local docker_name="nezha-dashboard" local docker_port=8008 while true; do check_docker_app check_docker_image_update $docker_name clear echo -e "نظارت بر نزا$check_docker $update_status" echo "منبع باز ، نظارت بر سرور سبک و کاربردی آسان و کاربردی و بهره برداری از سرور" echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1wv421c71t؟t=0.1" if docker inspect "$docker_name" &>/dev/null; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" echo "1. استفاده کنید" echo "------------------------" echo "5. دسترسی به نام دامنه را اضافه کنید 6. دسترسی به نام دامنه را حذف کنید" echo "7. اجازه دسترسی به پورت IP+ 8 را داشته باشید." echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "انتخاب خود را وارد کنید:" choice case $choice in 1) check_disk_space 1 install unzip jq install_docker curl -sL ${gh_proxy}raw.githubusercontent.com/nezhahq/scripts/refs/heads/main/install.sh -o nezha.sh && chmod +x nezha.sh && ./nezha.sh local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip ;; 5) echo "${docker_name}تنظیمات دسترسی دامنه" send_stats "${docker_name}تنظیمات دسترسی دامنه" add_yuming ldnmp_Proxy ${yuming} ${ipv4_address} ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) echo "فرمت نام دامنه مثال. com با https: // همراه نیست" web_del ;; 7) send_stats "دسترسی به IP${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) send_stats "دسترسی به IP${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) break ;; esac break_end done ;; 8) local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" local docker_port=8081 docker_rum() { docker run -d \ --name=qbittorrent \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Etc/UTC \ -e WEBUI_PORT=${docker_port} \ -e TORRENTING_PORT=56881 \ -p ${docker_port}:${docker_port} \ -p 56881:56881 \ -p 56881:56881/udp \ -v /home/docker/qbittorrent/config:/config \ -v /home/docker/qbittorrent/downloads:/downloads \ --restart unless-stopped \ lscr.io/linuxserver/qbittorrent:latest } local docker_describe="qbittorrent离线BT磁力下载服务" local docker_url="官网介绍: https://hub.docker.com/r/linuxserver/qbittorrent" local docker_use="sleep 3" local docker_passwd="docker logs qbittorrent" local app_size="1" docker_app ;; 9) send_stats "یک اداره پست بسازید" clear install telnet local docker_name=“mailserver” while true; do check_docker_app check_docker_image_update $docker_name clear echo -e "خدمات پستی$check_docker $update_status" echo "Poste.io یک راه حل سرور Mail Source Source است." echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1wv421c71t؟t=0.1" echo "" echo "تشخیص بندر" port=25 timeout=3 if echo "quit" | timeout $timeout telnet smtp.qq.com $port | grep 'Connected'; then echo -e "${gl_lv}بندر$portدر حال حاضر موجود است${gl_bai}" else echo -e "${gl_hong}بندر$portدر حال حاضر موجود نیست${gl_bai}" fi echo "" if docker inspect "$docker_name" &>/dev/null; then yuming=$(cat /home/docker/mail.txt) echo "آدرس دسترسی:" echo "https://$yuming" fi echo "------------------------" echo "1. نصب 2. بروزرسانی 3. حذف نصب کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "انتخاب خود را وارد کنید:" choice case $choice in 1) check_disk_space 2 read -e -p "لطفاً نام دامنه ایمیل را به عنوان مثال ، mail.yuming.com تنظیم کنید:" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address echo "ابتدا این سوابق DNS را تجزیه کنید" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" echo "CNAME smtp $yuming" echo "MX @ $yuming" echo "TXT @ v=spf1 mx ~all" echo "TXT ? ?" echo "" echo "------------------------" echo "برای ادامه ... هر کلید را فشار دهید ..." read -n 1 -s -r -p "" install jq install_docker docker run \ --net=host \ -e TZ=Europe/Prague \ -v /home/docker/mail:/data \ --name "mailserver" \ -h "$yuming" \ --restart=always \ -d analogic/poste.io clear echo "poste.io نصب شده است" echo "------------------------" echo "با استفاده از آدرس زیر می توانید به Poste.io دسترسی پیدا کنید:" echo "https://$yuming" echo "" ;; 2) docker rm -f mailserver docker rmi -f analogic/poste.i yuming=$(cat /home/docker/mail.txt) docker run \ --net=host \ -e TZ=Europe/Prague \ -v /home/docker/mail:/data \ --name "mailserver" \ -h "$yuming" \ --restart=always \ -d analogic/poste.i clear echo "poste.io نصب شده است" echo "------------------------" echo "با استفاده از آدرس زیر می توانید به Poste.io دسترسی پیدا کنید:" echo "https://$yuming" echo "" ;; 3) docker rm -f mailserver docker rmi -f analogic/poste.io rm /home/docker/mail.txt rm -rf /home/docker/mail echo "برنامه حذف شده است" ;; *) break ;; esac break_end done ;; 10) local app_name="Rocket.Chat聊天系统" local app_text="Rocket.Chat 是一个开源的团队通讯平台,支持实时聊天、音视频通话、文件共享等多种功能," local app_url="官方介绍: https://www.rocket.chat/" local docker_name="rocketchat" local docker_port="3897" local app_size="2" docker_app_install() { docker run --name db -d --restart=always \ -v /home/docker/mongo/dump:/dump \ mongo:latest --replSet rs5 --oplogSize 256 sleep 1 docker exec -it db mongosh --eval "printjson(rs.initiate())" sleep 5 docker run --name rocketchat --restart=always -p ${docker_port}:3000 --link db --env ROOT_URL=http://localhost --env MONGO_OPLOG_URL=mongodb://db:27017/rs5 -d rocket.chat clear ip_address echo "نصب شده" check_docker_app_ip } docker_app_update() { docker rm -f rocketchat docker rmi -f rocket.chat:latest docker run --name rocketchat --restart=always -p ${docker_port}:3000 --link db --env ROOT_URL=http://localhost --env MONGO_OPLOG_URL=mongodb://db:27017/rs5 -d rocket.chat clear ip_address echo "Rocket.Chat نصب شده است" check_docker_app_ip } docker_app_uninstall() { docker rm -f rocketchat docker rmi -f rocket.chat docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo echo "برنامه حذف شده است" } docker_app_plus ;; 11) local docker_name="zentao-server" local docker_img="idoop/zentao:latest" local docker_port=82 docker_rum() { docker run -d -p ${docker_port}:80 \ -e ADMINER_USER="root" -e ADMINER_PASSWD="password" \ -e BIND_ADDRESS="false" \ -v /home/docker/zentao-server/:/opt/zbox/ \ --add-host smtp.exmail.qq.com:163.177.90.125 \ --name zentao-server \ --restart=always \ idoop/zentao:latest } local docker_describe="禅道是通用的项目管理软件" local docker_url="官网介绍: https://www.zentao.net/" local docker_use="echo \"初始用户名: admin\"" local docker_passwd="echo \"初始密码: 123456\"" local app_size="2" docker_app ;; 12) local docker_name="qinglong" local docker_img="whyour/qinglong:latest" local docker_port=5700 docker_rum() { docker run -d \ -v /home/docker/qinglong/data:/ql/data \ -p ${docker_port}:5700 \ --name qinglong \ --hostname qinglong \ --restart unless-stopped \ whyour/qinglong:latest } local docker_describe="青龙面板是一个定时任务管理平台" local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 13) local app_name="cloudreve网盘" local app_text="cloudreve是一个支持多家云存储的网盘系统" local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1" local docker_name="cloudreve" local docker_port="5212" local app_size="2" docker_app_install() { cd /home/ && mkdir -p docker/cloud && cd docker/cloud && mkdir temp_data && mkdir -vp cloudreve/{uploads,avatar} && touch cloudreve/conf.ini && touch cloudreve/cloudreve.db && mkdir -p aria2/config && mkdir -p data/aria2 && chmod -R 777 data/aria2 curl -o /home/docker/cloud/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/cloudreve-docker-compose.yml sed -i "s/5212:5212/${docker_port}:5212/g" /home/docker/cloud/docker-compose.yml cd /home/docker/cloud/ docker compose up -d clear echo "نصب شده" check_docker_app_ip } docker_app_update() { cd /home/docker/cloud/ && docker compose down --rmi all cd /home/docker/cloud/ && docker compose up -d } docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud echo "برنامه حذف شده است" } docker_app_plus ;; 14) local docker_name="easyimage" local docker_img="ddsderek/easyimage:latest" local docker_port=85 docker_rum() { docker run -d \ --name easyimage \ -p ${docker_port}:80 \ -e TZ=Asia/Shanghai \ -e PUID=1000 \ -e PGID=1000 \ -v /home/docker/easyimage/config:/app/web/config \ -v /home/docker/easyimage/i:/app/web/i \ --restart unless-stopped \ ddsderek/easyimage:latest } local docker_describe="简单图床是一个简单的图床程序" local docker_url="官网介绍: ${gh_proxy}github.com/icret/EasyImages2.0" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 15) local docker_name="emby" local docker_img="linuxserver/emby:latest" local docker_port=8096 docker_rum() { docker run -d --name=emby --restart=always \ -v /home/docker/emby/config:/config \ -v /home/docker/emby/share1:/mnt/share1 \ -v /home/docker/emby/share2:/mnt/share2 \ -v /mnt/notify:/mnt/notify \ -p ${docker_port}:8096 \ -e UID=1000 -e GID=100 -e GIDLIST=100 \ linuxserver/emby:latest } local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" local docker_url="官网介绍: https://emby.media/" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 16) local docker_name="looking-glass" local docker_img="wikihostinc/looking-glass-server" local docker_port=89 docker_rum() { docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server } local docker_describe="Speedtest测速面板是一个VPS网速测试工具,多项测试功能,还可以实时监控VPS进出站流量" local docker_url="官网介绍: ${gh_proxy}github.com/wikihost-opensource/als" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 17) local docker_name="adguardhome" local docker_img="adguard/adguardhome" local docker_port=3000 docker_rum() { docker run -d \ --name adguardhome \ -v /home/docker/adguardhome/work:/opt/adguardhome/work \ -v /home/docker/adguardhome/conf:/opt/adguardhome/conf \ -p 53:53/tcp \ -p 53:53/udp \ -p ${docker_port}:3000/tcp \ --restart always \ adguard/adguardhome } local docker_describe="AdGuardHome是一款全网广告拦截与反跟踪软件,未来将不止是一个DNS服务器。" local docker_url="官网介绍: https://hub.docker.com/r/adguard/adguardhome" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 18) local docker_name="onlyoffice" local docker_img="onlyoffice/documentserver" local docker_port=8082 docker_rum() { docker run -d -p ${docker_port}:80 \ --restart=always \ --name onlyoffice \ -v /home/docker/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \ -v /home/docker/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \ onlyoffice/documentserver } local docker_describe="onlyoffice是一款开源的在线office工具,太强大了!" local docker_url="官网介绍: https://www.onlyoffice.com/" local docker_use="" local docker_passwd="" local app_size="2" docker_app ;; 19) send_stats "یک استخر رعد و برق بسازید" local docker_name=safeline-mgt local docker_port=9443 while true; do check_docker_app clear echo -e "سرویس استخر تندر$check_docker" echo "لی چی یک صفحه برنامه فایروال سایت WAF است که توسط Changting Technology ساخته شده است که می تواند سایت آژانس را برای دفاع خودکار معکوس کند." echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1mz421t74c؟t=0.1" if docker inspect "$docker_name" &>/dev/null; then check_docker_app_ip fi echo "" echo "------------------------" echo "1. نصب 2. بروزرسانی 3. تنظیم مجدد رمز عبور 4. حذف نصب کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "انتخاب خود را وارد کنید:" choice case $choice in 1) install_docker check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" clear echo "پانل Whunder Pool WAF نصب شده است" check_docker_app_ip docker exec safeline-mgt resetadmin ;; 2) bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/upgrade.sh)" docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}') echo "" clear echo "پانل WAF THIRDER POOL WAF به روز شده است" check_docker_app_ip ;; 3) docker exec safeline-mgt resetadmin ;; 4) cd /data/safeline docker compose down --rmi all echo "اگر شما فهرست نصب پیش فرض هستید ، این پروژه اکنون حذف نشده است. اگر دایرکتوری نصب را سفارشی می کنید ، برای اجرای آن باید به دایرکتوری نصب بروید:" echo "docker compose down && docker compose down --rmi all" ;; *) break ;; esac break_end done ;; 20) local docker_name="portainer" local docker_img="portainer/portainer" local docker_port=9050 docker_rum() { docker run -d \ --name portainer \ -p ${docker_port}:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /home/docker/portainer:/data \ --restart always \ portainer/portainer } local docker_describe="portainer是一个轻量级的docker容器管理面板" local docker_url="官网介绍: https://www.portainer.io/" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 21) local docker_name="vscode-web" local docker_img="codercom/code-server" local docker_port=8180 docker_rum() { docker run -d -p ${docker_port}:8080 -v /home/docker/vscode-web:/home/coder/.local/share/code-server --name vscode-web --restart always codercom/code-server } local docker_describe="VScode是一款强大的在线代码编写工具" local docker_url="官网介绍: ${gh_proxy}github.com/coder/code-server" local docker_use="sleep 3" local docker_passwd="docker exec vscode-web cat /home/coder/.config/code-server/config.yaml" local app_size="1" docker_app ;; 22) local docker_name="uptime-kuma" local docker_img="louislam/uptime-kuma:latest" local docker_port=3003 docker_rum() { docker run -d \ --name=uptime-kuma \ -p ${docker_port}:3001 \ -v /home/docker/uptime-kuma/uptime-kuma-data:/app/data \ --restart=always \ louislam/uptime-kuma:latest } local docker_describe="Uptime Kuma 易于使用的自托管监控工具" local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 23) local docker_name="memos" local docker_img="ghcr.io/usememos/memos:latest" local docker_port=5230 docker_rum() { docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart always ghcr.io/usememos/memos:latest } local docker_describe="Memos是一款轻量级、自托管的备忘录中心" local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 24) local docker_name="webtop" local docker_img="lscr.io/linuxserver/webtop:latest" local docker_port=3083 docker_rum() { docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ -e LC_ALL=zh_CN.UTF-8 \ -e DOCKER_MODS=linuxserver/mods:universal-package-install \ -e INSTALL_PACKAGES=font-noto-cjk \ -p ${docker_port}:3000 \ -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ --restart unless-stopped \ lscr.io/linuxserver/webtop:latest } local docker_describe="webtop基于 Alpine、Ubuntu、Fedora 和 Arch 的容器,包含官方支持的完整桌面环境,可通过任何现代 Web 浏览器访问" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" local docker_use="" local docker_passwd="" local app_size="2" docker_app ;; 25) local docker_name="nextcloud" local docker_img="nextcloud:latest" local docker_port=8989 local rootpasswd=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) docker_rum() { docker run -d --name nextcloud --restart=always -p ${docker_port}:80 -v /home/docker/nextcloud:/var/www/html -e NEXTCLOUD_ADMIN_USER=nextcloud -e NEXTCLOUD_ADMIN_PASSWORD=$rootpasswd nextcloud } local docker_describe="Nextcloud拥有超过 400,000 个部署,是您可以下载的最受欢迎的本地内容协作平台" local docker_url="官网介绍: https://nextcloud.com/" local docker_use="echo \"账号: nextcloud 密码: $rootpasswd\"" local docker_passwd="" local app_size="3" docker_app ;; 26) local docker_name="qd" local docker_img="qdtoday/qd:latest" local docker_port=8923 docker_rum() { docker run -d --name qd -p ${docker_port}:80 -v /home/docker/qd/config:/usr/src/app/config qdtoday/qd } local docker_describe="QD-Today是一个HTTP请求定时任务自动执行框架" local docker_url="官网介绍: https://qd-today.github.io/qd/zh_CN/" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 27) local docker_name="dockge" local docker_img="louislam/dockge:latest" local docker_port=5003 docker_rum() { docker run -d --name dockge --restart unless-stopped -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge } local docker_describe="dockge是一个可视化的docker-compose容器管理面板" local docker_url="官网介绍: ${gh_proxy}github.com/louislam/dockge" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 28) local docker_name="speedtest" local docker_img="ghcr.io/librespeed/speedtest" local docker_port=8028 docker_rum() { docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest } local docker_describe="librespeed是用Javascript实现的轻量级速度测试工具,即开即用" local docker_url="官网介绍: ${gh_proxy}github.com/librespeed/speedtest" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 29) local docker_name="searxng" local docker_img="alandoyle/searxng:latest" local docker_port=8700 docker_rum() { docker run --name=searxng \ -d --init \ --restart=unless-stopped \ -v /home/docker/searxng/config:/etc/searxng \ -v /home/docker/searxng/templates:/usr/local/searxng/searx/templates/simple \ -v /home/docker/searxng/theme:/usr/local/searxng/searx/static/themes/simple \ -p ${docker_port}:8080/tcp \ alandoyle/searxng:latest } local docker_describe="searxng是一个私有且隐私的搜索引擎站点" local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 30) local docker_name="photoprism" local docker_img="photoprism/photoprism:latest" local docker_port=2342 local rootpasswd=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) docker_rum() { docker run -d \ --name photoprism \ --restart always \ --security-opt seccomp=unconfined \ --security-opt apparmor=unconfined \ -p ${docker_port}:2342 \ -e PHOTOPRISM_UPLOAD_NSFW="true" \ -e PHOTOPRISM_ADMIN_PASSWORD="$rootpasswd" \ -v /home/docker/photoprism/storage:/photoprism/storage \ -v /home/docker/photoprism/Pictures:/photoprism/originals \ photoprism/photoprism } local docker_describe="photoprism非常强大的私有相册系统" local docker_url="官网介绍: https://www.photoprism.app/" local docker_use="echo \"账号: admin 密码: $rootpasswd\"" local docker_passwd="" local app_size="1" docker_app ;; 31) local docker_name="s-pdf" local docker_img="frooodle/s-pdf:latest" local docker_port=8020 docker_rum() { docker run -d \ --name s-pdf \ --restart=always \ -p ${docker_port}:8080 \ -v /home/docker/s-pdf/trainingData:/usr/share/tesseract-ocr/5/tessdata \ -v /home/docker/s-pdf/extraConfigs:/configs \ -v /home/docker/s-pdf/logs:/logs \ -e DOCKER_ENABLE_SECURITY=false \ frooodle/s-pdf:latest } local docker_describe="这是一个强大的本地托管基于 Web 的 PDF 操作工具,使用 docker,允许您对 PDF 文件执行各种操作,例如拆分合并、转换、重新组织、添加图像、旋转、压缩等。" local docker_url="官网介绍: ${gh_proxy}github.com/Stirling-Tools/Stirling-PDF" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 32) local docker_name="drawio" local docker_img="jgraph/drawio" local docker_port=7080 docker_rum() { docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio } local docker_describe="这是一个强大图表绘制软件。思维导图,拓扑图,流程图,都能画" local docker_url="官网介绍: https://www.drawio.com/" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 33) local docker_name="sun-panel" local docker_img="hslr/sun-panel" local docker_port=3009 docker_rum() { docker run -d --restart=always -p ${docker_port}:3002 \ -v /home/docker/sun-panel/conf:/app/conf \ -v /home/docker/sun-panel/uploads:/app/uploads \ -v /home/docker/sun-panel/database:/app/database \ --name sun-panel \ hslr/sun-panel } local docker_describe="Sun-Panel服务器、NAS导航面板、Homepage、浏览器首页" local docker_url="官网介绍: https://doc.sun-panel.top/zh_cn/" local docker_use="echo \"账号: admin@sun.cc 密码: 12345678\"" local docker_passwd="" local app_size="1" docker_app ;; 34) local docker_name="pingvin-share" local docker_img="stonith404/pingvin-share" local docker_port=3060 docker_rum() { docker run -d \ --name pingvin-share \ --restart always \ -p ${docker_port}:3000 \ -v /home/docker/pingvin-share/data:/opt/app/backend/data \ stonith404/pingvin-share } local docker_describe="Pingvin Share 是一个可自建的文件分享平台,是 WeTransfer 的一个替代品" local docker_url="官网介绍: ${gh_proxy}github.com/stonith404/pingvin-share" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 35) local docker_name="moments" local docker_img="kingwrcy/moments:latest" local docker_port=8035 docker_rum() { docker run -d --restart unless-stopped \ -p ${docker_port}:3000 \ -v /home/docker/moments/data:/app/data \ -v /etc/localtime:/etc/localtime:ro \ -v /etc/timezone:/etc/timezone:ro \ --name moments \ kingwrcy/moments:latest } local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" local docker_url="معرفی رسمی وب سایت:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" local docker_use="echo \"账号: admin 密码: a123456\"" local docker_passwd="" local app_size="1" docker_app ;; 36) local docker_name="lobe-chat" local docker_img="lobehub/lobe-chat:latest" local docker_port=8036 docker_rum() { docker run -d -p ${docker_port}:3210 \ --name lobe-chat \ --restart=always \ lobehub/lobe-chat } local docker_describe="LobeChat聚合市面上主流的AI大模型,ChatGPT/Claude/Gemini/Groq/Ollama" local docker_url="官网介绍: ${gh_proxy}github.com/lobehub/lobe-chat" local docker_use="" local docker_passwd="" local app_size="2" docker_app ;; 37) local docker_name="myip" local docker_img="jason5ng32/myip:latest" local docker_port=8037 docker_rum() { docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip:latest } local docker_describe="是一个多功能IP工具箱,可以查看自己IP信息及连通性,用网页面板呈现" local docker_url="官网介绍: ${gh_proxy}github.com/jason5ng32/MyIP/blob/main/README_ZH.md" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 38) send_stats "سطل خانوادگی شیایایا" clear install_docker check_disk_space 1 bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" ;; 39) if [ ! -d /home/docker/bililive-go/ ]; then mkdir -p /home/docker/bililive-go/ > /dev/null 2>&1 wget -O /home/docker/bililive-go/config.yml ${gh_proxy}raw.githubusercontent.com/hr3lxphr6j/bililive-go/master/config.yml > /dev/null 2>&1 fi local docker_name="bililive-go" local docker_img="chigusa/bililive-go" local docker_port=8039 docker_rum() { docker run --restart=always --name bililive-go -v /home/docker/bililive-go/config.yml:/etc/bililive-go/config.yml -v /home/docker/bililive-go/Videos:/srv/bililive -p ${docker_port}:8080 -d chigusa/bililive-go } local docker_describe="Bililive-go是一个支持多种直播平台的直播录制工具" local docker_url="官网介绍: ${gh_proxy}github.com/hr3lxphr6j/bililive-go" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 40) local docker_name="webssh" local docker_img="jrohy/webssh" local docker_port=8040 docker_rum() { docker run -d -p ${docker_port}:5032 --restart always --name webssh -e TZ=Asia/Shanghai jrohy/webssh } local docker_describe="简易在线ssh连接工具和sftp工具" local docker_url="官网介绍: ${gh_proxy}github.com/Jrohy/webssh" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 41) local lujing="[ -d "/www/server/panel" ]" local panelname="耗子面板" local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" panel_app_install() { mkdir -p ~/haozi && cd ~/haozi && curl -fsLm 10 -o install.sh https://dl.cdn.haozi.net/panel/install.sh && bash install.sh cd ~ } panel_app_manage() { panel-cli } panel_app_uninstall() { mkdir -p ~/haozi && cd ~/haozi && curl -fsLm 10 -o uninstall.sh https://dl.cdn.haozi.net/panel/uninstall.sh && bash uninstall.sh cd ~ } install_panel ;; 42) local docker_name="nexterm" local docker_img="germannewsmaker/nexterm:latest" local docker_port=8042 docker_rum() { docker run -d \ --name nexterm \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ --restart unless-stopped \ germannewsmaker/nexterm:latest } local docker_describe="nexterm是一款强大的在线SSH/VNC/RDP连接工具。" local docker_url="官网介绍: ${gh_proxy}github.com/gnmyt/Nexterm" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 43) local docker_name="hbbs" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 docker_rum() { docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs } local docker_describe="rustdesk开源的远程桌面(服务端),类似自己的向日葵私服。" local docker_url="官网介绍: https://rustdesk.com/zh-cn/" local docker_use="docker logs hbbs" local docker_passwd="echo \"把你的IP和key记录下,会在远程桌面客户端中用到。去44选项装中继端吧!\"" local app_size="1" docker_app ;; 44) local docker_name="hbbr" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 docker_rum() { docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr } local docker_describe="rustdesk开源的远程桌面(中继端),类似自己的向日葵私服。" local docker_url="官网介绍: https://rustdesk.com/zh-cn/" local docker_use="echo \"前往官网下载远程桌面的客户端: https://rustdesk.com/zh-cn/\"" local docker_passwd="" local app_size="1" docker_app ;; 45) local docker_name="registry" local docker_img="registry:2" local docker_port=8045 docker_rum() { docker run -d \ -p ${docker_port}:5000 \ --name registry \ -v /home/docker/registry:/var/lib/registry \ -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \ --restart always \ registry:2 } local docker_describe="Docker Registry 是一个用于存储和分发 Docker 镜像的服务。" local docker_url="官网介绍: https://hub.docker.com/_/registry" local docker_use="" local docker_passwd="" local app_size="2" docker_app ;; 46) local docker_name="ghproxy" local docker_img="wjqserver/ghproxy:latest" local docker_port=8046 docker_rum() { docker run -d --name ghproxy --restart always -p ${docker_port}:8080 wjqserver/ghproxy:latest } local docker_describe="使用Go实现的GHProxy,用于加速部分地区Github仓库的拉取。" local docker_url="官网介绍: https://github.com/WJQSERVER-STUDIO/ghproxy" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 47) local app_name="普罗米修斯监控" local app_text="Prometheus+Grafana企业级监控系统" local app_url="官网介绍: https://prometheus.io" local docker_name="grafana" local docker_port="8047" local app_size="2" docker_app_install() { prometheus_install clear ip_address echo "نصب شده" check_docker_app_ip echo "نام کاربری و رمز عبور اولیه عبارتند از: مدیر" } docker_app_update() { docker rm -f node-exporter prometheus grafana docker rmi -f prom/node-exporter docker rmi -f prom/prometheus:latest docker rmi -f grafana/grafana:latest docker_app_install } docker_app_uninstall() { docker rm -f node-exporter prometheus grafana docker rmi -f prom/node-exporter docker rmi -f prom/prometheus:latest docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring echo "برنامه حذف شده است" } docker_app_plus ;; 48) local docker_name="node-exporter" local docker_img="prom/node-exporter" local docker_port=8048 docker_rum() { docker run -d \ --name=node-exporter \ -p ${docker_port}:9100 \ --restart unless-stopped \ prom/node-exporter } local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" local docker_url="官网介绍: https://github.com/prometheus/node_exporter" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 49) local docker_name="cadvisor" local docker_img="gcr.io/cadvisor/cadvisor:latest" local docker_port=8049 docker_rum() { docker run -d \ --name=cadvisor \ --restart unless-stopped \ -p ${docker_port}:8080 \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ gcr.io/cadvisor/cadvisor:latest \ -housekeeping_interval=10s \ -docker_only=true } local docker_describe="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" local docker_url="官网介绍: https://github.com/google/cadvisor" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 50) local docker_name="changedetection" local docker_img="dgtlmoon/changedetection.io:latest" local docker_port=8050 docker_rum() { docker run -d --restart always -p ${docker_port}:5000 \ -v /home/docker/datastore:/datastore \ --name changedetection dgtlmoon/changedetection.io:latest } local docker_describe="这是一款网站变化检测、补货监控和通知的小工具" local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 51) clear send_stats "مرغ" check_disk_space 1 curl -L ${gh_proxy}raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh && chmod +x install_pve.sh && bash install_pve.sh ;; 52) local docker_name="dpanel" local docker_img="dpanel/dpanel:lite" local docker_port=8052 docker_rum() { docker run -it -d --name dpanel --restart=always \ -p ${docker_port}:8080 -e APP_NAME=dpanel \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /home/docker/dpanel:/dpanel \ dpanel/dpanel:lite } local docker_describe="Docker可视化面板系统,提供完善的docker管理功能。" local docker_url="官网介绍: https://github.com/donknap/dpanel" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 53) local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 docker_rum() { docker run -d -p ${docker_port}:8080 -v /home/docker/ollama:/root/.ollama -v /home/docker/ollama/open-webui:/app/backend/data --name ollama --restart always ghcr.io/open-webui/open-webui:ollama } local docker_describe="OpenWebUI一款大语言模型网页框架,接入全新的llama3大语言模型" local docker_url="官网介绍: https://github.com/open-webui/open-webui" local docker_use="docker exec ollama ollama run llama3.2:1b" local docker_passwd="" local app_size="5" docker_app ;; 54) local lujing="[ -d "/www/server/panel" ]" local panelname="AMH面板" local panelurl="官方地址: https://amh.sh/index.htm?amh" panel_app_install() { cd ~ wget https://dl.amh.sh/amh.sh && bash amh.sh } panel_app_manage() { panel_app_install } panel_app_uninstall() { panel_app_install } install_panel ;; 55) frps_panel ;; 56) frpc_panel ;; 57) local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 docker_rum() { docker run -d -p ${docker_port}:8080 -v /home/docker/ollama:/root/.ollama -v /home/docker/ollama/open-webui:/app/backend/data --name ollama --restart always ghcr.io/open-webui/open-webui:ollama } local docker_describe="OpenWebUI一款大语言模型网页框架,接入全新的DeepSeek R1大语言模型" local docker_url="官网介绍: https://github.com/open-webui/open-webui" local docker_use="docker exec ollama ollama run deepseek-r1:1.5b" local docker_passwd="" local app_size="5" docker_app ;; 58) local app_name="Dify知识库" local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成" local app_url="官方网站: https://docs.dify.ai/zh-hans" local docker_name="docker-nginx-1" local docker_port="8058" local app_size="3" docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/langgenius/dify.git && cd dify/docker && cp .env.example .env # sed -i 's/^EXPOSE_NGINX_PORT=.*/EXPOSE_NGINX_PORT=${docker_port}/; s/^EXPOSE_NGINX_SSL_PORT=.*/EXPOSE_NGINX_SSL_PORT=8858/' /home/docker/dify/docker/.env sed -i "s/^EXPOSE_NGINX_PORT=.*/EXPOSE_NGINX_PORT=${docker_port}/; s/^EXPOSE_NGINX_SSL_PORT=.*/EXPOSE_NGINX_SSL_PORT=8858/" /home/docker/dify/docker/.env docker compose up -d clear echo "نصب شده" check_docker_app_ip } docker_app_update() { cd /home/docker/dify/docker/ && docker compose down --rmi all cd /home/docker/dify/ git pull origin main sed -i 's/^EXPOSE_NGINX_PORT=.*/EXPOSE_NGINX_PORT=8058/; s/^EXPOSE_NGINX_SSL_PORT=.*/EXPOSE_NGINX_SSL_PORT=8858/' /home/docker/dify/docker/.env cd /home/docker/dify/docker/ && docker compose up -d } docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify echo "برنامه حذف شده است" } docker_app_plus ;; 59) local app_name="New API" local app_text="新一代大模型网关与AI资产管理系统" local app_url="官方网站: https://github.com/Calcium-Ion/new-api" local docker_name="new-api" local docker_port="8059" local app_size="3" docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/Calcium-Ion/new-api.git && cd new-api sed -i -e "s/- \"3000:3000\"/- \"${docker_port}:3000\"/g" \ -e 's/container_name: redis/container_name: redis-new-api/g' \ -e 's/container_name: mysql/container_name: mysql-new-api/g' \ docker-compose.yml docker compose up -d clear echo "نصب شده" check_docker_app_ip } docker_app_update() { cd /home/docker/new-api/ && docker compose down --rmi all cd /home/docker/new-api/ git pull origin main sed -i -e "s/- \"3000:3000\"/- \"${docker_port}:3000\"/g" \ -e 's/container_name: redis/container_name: redis-new-api/g' \ -e 's/container_name: mysql/container_name: mysql-new-api/g' \ docker-compose.yml docker compose up -d clear echo "نصب شده" check_docker_app_ip } docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api echo "برنامه حذف شده است" } docker_app_plus ;; 60) local app_name="JumpServer开源堡垒机" local app_text="是一个开源的特权访问管理 (PAM) 工具,该程序占用80端口不支持添加域名访问了" local app_url="官方介绍: https://github.com/jumpserver/jumpserver" local docker_name="jms_web" local docker_port="80" local app_size="2" docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear echo "نصب شده" check_docker_app_ip echo "نام کاربری اولیه: مدیر" echo "رمز عبور اولیه: Changeme" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade echo "برنامه به روز شده است" } docker_app_uninstall() { cd /opt/jumpserver-installer*/ ./jmsctl.sh uninstall cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver echo "برنامه حذف شده است" } docker_app_plus ;; 61) local docker_name="libretranslate" local docker_img="libretranslate/libretranslate:latest" local docker_port=8061 docker_rum() { docker run -d \ -p ${docker_port}:5000 \ --name libretranslate \ libretranslate/libretranslate \ --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru } local docker_describe="免费开源机器翻译 API,完全自托管,它的翻译引擎由开源Argos Translate库提供支持。" local docker_url="官网介绍: https://github.com/LibreTranslate/LibreTranslate" local docker_use="" local docker_passwd="" local app_size="5" docker_app ;; 62) local app_name="RAGFlow知识库" local app_text="基于深度文档理解的开源 RAG(检索增强生成)引擎" local app_url="官方网站: https://github.com/infiniflow/ragflow" local docker_name="ragflow-server" local docker_port="8062" local app_size="8" docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/infiniflow/ragflow.git && cd ragflow/docker sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear echo "نصب شده" check_docker_app_ip } docker_app_update() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all cd /home/docker/ragflow/ git pull origin main cd /home/docker/ragflow/docker/ sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d } docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow echo "برنامه حذف شده است" } docker_app_plus ;; 63) local docker_name="open-webui" local docker_img="ghcr.io/open-webui/open-webui:main" local docker_port=8063 docker_rum() { docker run -d -p ${docker_port}:8080 -v /home/docker/open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main } local docker_describe="OpenWebUI一款大语言模型网页框架,官方精简版本,支持各大模型API接入" local docker_url="官网介绍: https://github.com/open-webui/open-webui" local docker_use="" local docker_passwd="" local app_size="3" docker_app ;; 64) local docker_name="it-tools" local docker_img="corentinth/it-tools:latest" local docker_port=8064 docker_rum() { docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest } local docker_describe="对开发人员和 IT 工作者来说非常有用的工具" local docker_url="官网介绍: https://github.com/CorentinTh/it-tools" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 65) local docker_name="n8n" local docker_img="docker.n8n.io/n8nio/n8n" local docker_port=8065 docker_rum() { add_yuming mkdir -p /home/docker/n8n chmod -R 777 /home/docker/n8n docker run -d --name n8n \ --restart always \ -p ${docker_port}:5678 \ -v /home/docker/n8n:/home/node/.n8n \ -e N8N_HOST=${yuming} \ -e N8N_PORT=5678 \ -e N8N_PROTOCOL=https \ -e N8N_WEBHOOK_URL=https://${yuming}/ \ docker.n8n.io/n8nio/n8n ldnmp_Proxy ${yuming} ${ipv4_address} ${docker_port} block_container_port "$docker_name" "$ipv4_address" } local docker_describe="是一款功能强大的自动化工作流平台" local docker_url="官网介绍: https://github.com/n8n-io/n8n" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 66) yt_menu_pro ;; 67) local docker_name="ddns-go" local docker_img="jeessy/ddns-go" local docker_port=9876 docker_rum() { docker run -d \ --name ddns-go \ --restart=always \ -p ${docker_port}:9876 \ -v /home/docker/ddns-go:/root \ jeessy/ddns-go } local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" local docker_url="官网介绍: https://github.com/CorentinTh/it-tools" local docker_use="" local docker_passwd="" local app_size="1" docker_app ;; 68) local docker_name="allinssl" local docker_img="allinssl/allinssl:latest" local docker_port=7979 docker_rum() { docker run -itd --name allinssl -p ${docker_port}:8888 -v /home/docker/allinssl/data:/www/allinssl/data -e ALLINSSL_USER=allinssl -e ALLINSSL_PWD=allinssldocker -e ALLINSSL_URL=allinssl allinssl/allinssl:latest } local docker_describe="开源免费的 SSL 证书自动化管理平台" local docker_url="官网介绍: https://allinssl.com" local docker_use="echo \"初始用户名: allinssl\"" local docker_passwd="echo \"初始密码: allinssldocker\"" local app_size="1" docker_app ;; 0) kejilion ;; *) echo "ورودی نامعتبر!" ;; esac break_end done } linux_work() { while true; do clear send_stats "فضای کاری من" echo -e "فضای کاری من" echo -e "این سیستم فضای کاری را در اختیار شما قرار می دهد که می تواند روی پس زمینه اجرا شود ، که می توانید برای انجام کارهای بلند مدت از آن استفاده کنید." echo -e "حتی اگر SSH را قطع کنید ، وظایف موجود در فضای کاری قطع نمی شود و وظایف موجود در پس زمینه مقیم خواهد شد." echo -e "${gl_huang}نکته:${gl_bai}پس از ورود به فضای کاری ، از Ctrl+B استفاده کنید و D را به تنهایی فشار دهید تا از فضای کاری خارج شوید!" echo -e "${gl_kjlan}------------------------" echo "لیست فضاهای کاری موجود موجود" echo -e "${gl_kjlan}------------------------" tmux list-sessions echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}فضای کاری شماره 1" echo -e "${gl_kjlan}2. ${gl_bai}فضای کاری شماره 2" echo -e "${gl_kjlan}3. ${gl_bai}فضای کاری شماره 3" echo -e "${gl_kjlan}4. ${gl_bai}فضای کاری شماره 4" echo -e "${gl_kjlan}5. ${gl_bai}فضای کاری شماره 5" echo -e "${gl_kjlan}6. ${gl_bai}فضای کاری شماره 6" echo -e "${gl_kjlan}7. ${gl_bai}فضای کاری شماره 7" echo -e "${gl_kjlan}8. ${gl_bai}فضای کاری شماره 8" echo -e "${gl_kjlan}9. ${gl_bai}فضای کاری شماره 9" echo -e "${gl_kjlan}10. ${gl_bai}فضای کاری شماره 10" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${gl_bai}حالت مقیم SSH${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}22. ${gl_bai}فضای کاری را ایجاد و وارد کنید" echo -e "${gl_kjlan}23. ${gl_bai}دستورات را به فضای کاری پس زمینه تزریق کنید" echo -e "${gl_kjlan}24. ${gl_bai}فضای کاری مشخص شده را حذف کنید" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) clear install tmux local SESSION_NAME="work1" send_stats "فضای کاری را شروع کنید$SESSION_NAME" tmux_run ;; 2) clear install tmux local SESSION_NAME="work2" send_stats "فضای کاری را شروع کنید$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" send_stats "فضای کاری را شروع کنید$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" send_stats "فضای کاری را شروع کنید$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" send_stats "فضای کاری را شروع کنید$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" send_stats "فضای کاری را شروع کنید$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" send_stats "فضای کاری را شروع کنید$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" send_stats "فضای کاری را شروع کنید$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" send_stats "فضای کاری را شروع کنید$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" send_stats "فضای کاری را شروع کنید$SESSION_NAME" tmux_run ;; 21) while true; do clear if grep -q 'tmux attach-session -t sshd || tmux new-session -s sshd' ~/.bashrc; then local tmux_sshd_status="${gl_lv}开启${gl_bai}" else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi send_stats "حالت مقیم SSH" echo -e "حالت مقیم SSH${tmux_sshd_status}" echo "پس از فعال شدن اتصال SSH ، مستقیماً وارد حالت مقیم شده و به حالت کار قبلی باز می گردد." echo "------------------------" echo "1. روشن را روشن کنید. خاموش کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" gongzuoqu_del case "$gongzuoqu_del" in 1) install tmux local SESSION_NAME="sshd" send_stats "فضای کاری را شروع کنید$SESSION_NAME" grep -q "tmux attach-session -t sshd" ~/.bashrc || echo -e "\ n# به طور خودکار جلسه tmux \ nif را وارد کنید [[-z \"\$TMUX\" ]]; then\n tmux attach-session -t sshd || tmux new-session -s sshd\nfi" >> ~/.bashrc source ~/.bashrc tmux_run ;; 2) sed -i '/# 自动进入 tmux 会话/,+4d' ~/.bashrc tmux kill-window -t sshd ;; *) break ;; esac done ;; 22) read -e -p "لطفاً نام فضای کاری را که ایجاد کرده اید یا وارد کرده اید ، مانند 1001 KJ001 Work1 وارد کنید:" SESSION_NAME tmux_run send_stats "فضای کاری سفارشی" ;; 23) read -e -p "لطفاً دستور مورد نظر خود را در پس زمینه وارد کنید ، مانند: curl -fssl https://get.docker.com | sh:" tmuxd tmux_run_d send_stats "دستورات را به فضای کاری پس زمینه تزریق کنید" ;; 24) read -e -p "لطفاً نام فضای کاری را که می خواهید حذف کنید وارد کنید:" gongzuoqu_name tmux kill-window -t $gongzuoqu_name send_stats "فضای کاری را حذف کنید" ;; 0) kejilion ;; *) echo "ورودی نامعتبر!" ;; esac break_end done } linux_Settings() { while true; do clear # SEND_STATS "ابزارهای سیستم" echo -e "ابزار سیستم" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}کلیدهای میانبر راه اندازی اسکریپت را تنظیم کنید${gl_kjlan}2. ${gl_bai}رمز ورود ورود به سیستم را تغییر دهید" echo -e "${gl_kjlan}3. ${gl_bai}حالت ورود به سیستم رمز عبور${gl_kjlan}4. ${gl_bai}نسخه مشخص شده پایتون را نصب کنید" echo -e "${gl_kjlan}5. ${gl_bai}همه بنادر را باز کنید${gl_kjlan}6. ${gl_bai}پورت اتصال SSH را اصلاح کنید" echo -e "${gl_kjlan}7. ${gl_bai}优化DNS地址 ${gl_kjlan}8. ${gl_bai}سیستم نصب مجدد یک کلیک${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}9. ${gl_bai}禁用ROOT账户创建新账户 ${gl_kjlan}10. ${gl_bai}اولویت IPv4/IPv6 را تغییر دهید" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${gl_bai}查看端口占用状态 ${gl_kjlan}12. ${gl_bai}اندازه حافظه مجازی را تغییر دهید" echo -e "${gl_kjlan}13. ${gl_bai}مدیریت کاربر${gl_kjlan}14. ${gl_bai}ژنراتور کاربر/رمز عبور" echo -e "${gl_kjlan}15. ${gl_bai}تنظیم منطقه زمانی سیستم${gl_kjlan}16. ${gl_bai}شتاب BBR3 را تنظیم کنید" echo -e "${gl_kjlan}17. ${gl_bai}فایروال مدیر پیشرفته${gl_kjlan}18. ${gl_bai}نام میزبان را تغییر دهید" echo -e "${gl_kjlan}19. ${gl_bai}منبع به روزرسانی سیستم سوئیچ${gl_kjlan}20. ${gl_bai}مدیریت وظیفه زمان بندی" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${gl_bai}تجزیه میزبان بومی${gl_kjlan}22. ${gl_bai}SSH防御程序" echo -e "${gl_kjlan}23. ${gl_bai}خاموش کردن خودکار از حد فعلی${gl_kjlan}24. ${gl_bai}حالت ورود به سیستم کلید خصوصی" echo -e "${gl_kjlan}25. ${gl_bai}نظارت بر سیستم TG-BOT و هشدار زودهنگام${gl_kjlan}26. ${gl_bai}رفع آسیب پذیری های پرخطر Openssh (Xiuyuan)" echo -e "${gl_kjlan}27. ${gl_bai}ارتقاء هسته Red Hat Linux${gl_kjlan}28. ${gl_bai}بهینه سازی پارامترهای هسته در سیستم لینوکس${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}29. ${gl_bai}ابزار اسکن ویروس${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}مدیر پرونده" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}31. ${gl_bai}سوئیچ زبان سیستم${gl_kjlan}32. ${gl_bai}ابزار زیباسازی خط فرمان${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${gl_bai}سطل بازیافت سیستم را تنظیم کنید${gl_kjlan}34. ${gl_bai}تهیه نسخه پشتیبان از سیستم و بازیابی" echo -e "${gl_kjlan}35. ${gl_bai}ابزار اتصال از راه دور SSH${gl_kjlan}36. ${gl_bai}ابزار مدیریت پارتیشن دیسک سخت" echo -e "${gl_kjlan}37. ${gl_bai}تاریخ خط فرمان${gl_kjlan}38. ${gl_bai}ابزار همگام سازی از راه دور RSYNC" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}41. ${gl_bai}صفحه پیام${gl_kjlan}66. ${gl_bai}بهینه سازی سیستم یک مرحله ای${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}99. ${gl_bai}سرور را مجدداً راه اندازی کنید${gl_kjlan}100. ${gl_bai}حریم خصوصی و امنیت" echo -e "${gl_kjlan}101. ${gl_bai}استفاده پیشرفته از فرمان k${gl_huang}★${gl_bai} ${gl_kjlan}102. ${gl_bai}حذف اسکریپت شیر ​​فناوری" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) while true; do clear read -e -p "لطفاً کلید میانبر خود را وارد کنید (0 را برای خروج وارد کنید):" kuaijiejian if [ "$kuaijiejian" == "0" ]; then break_end linux_Settings fi find /usr/local/bin/ -type l -exec bash -c 'test "$(readlink -f {})" = "/usr/local/bin/k" && rm -f {}' \; ln -s /usr/local/bin/k /usr/local/bin/$kuaijiejian echo "کلیدهای میانبر تنظیم شده اند" send_stats "کلیدهای میانبر اسکریپت تنظیم شده اند" break_end linux_Settings done ;; 2) clear send_stats "رمز ورود ورود خود را تنظیم کنید" echo "رمز ورود ورود خود را تنظیم کنید" passwd ;; 3) root_use send_stats "حالت رمز عبور" add_sshpasswd ;; 4) root_use send_stats "مدیریت نسخه PY" echo "مدیریت نسخه پایتون" echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1pm42157ck؟t=0.1" echo "---------------------------------------" echo "این ویژگی یکپارچه هر نسخه ای را که به طور رسمی توسط پایتون پشتیبانی می شود نصب می کند!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "شماره نسخه پیتون فعلی:${gl_huang}$VERSION${gl_bai}" echo "------------" echo "نسخه توصیه شده: 3.12 3.11 3.10 3.9 3.8 2.7" echo "پرس و جو نسخه های بیشتر: https://www.python.org/downloads/" echo "------------" read -e -p "شماره نسخه Python را که می خواهید نصب کنید وارد کنید (0 را برای خروج وارد کنید):" py_new_v if [[ "$py_new_v" == "0" ]]; then send_stats "مدیریت اسکریپت PY" break_end linux_Settings fi if ! grep -q 'export PYENV_ROOT="\$HOME/.pyenv"' ~/.bashrc; then if command -v yum &>/dev/null; then yum update -y && yum install git -y yum groupinstall "Development Tools" -y yum install openssl-devel bzip2-devel libffi-devel ncurses-devel zlib-devel readline-devel sqlite-devel xz-devel findutils -y curl -O https://www.openssl.org/source/openssl-1.1.1u.tar.gz tar -xzf openssl-1.1.1u.tar.gz cd openssl-1.1.1u ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib make make install echo "/usr/local/openssl/lib" > /etc/ld.so.conf.d/openssl-1.1.1u.conf ldconfig -v cd .. export LDFLAGS="-L/usr/local/openssl/lib" export CPPFLAGS="-I/usr/local/openssl/include" export PKG_CONFIG_PATH="/usr/local/openssl/lib/pkgconfig" elif command -v apt &>/dev/null; then apt update -y && apt install git -y apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev libgdbm-dev libnss3-dev libedit-dev -y elif command -v apk &>/dev/null; then apk update && apk add git apk add --no-cache bash gcc musl-dev libffi-dev openssl-dev bzip2-dev zlib-dev readline-dev sqlite-dev libc6-compat linux-headers make xz-dev build-base ncurses-dev else echo "مدیر بسته ناشناخته!" return fi curl https://pyenv.run | bash cat << EOF >> ~/.bashrc export PYENV_ROOT="\$HOME/.pyenv" if [[ -d "\$PYENV_ROOT/bin" ]]; then export PATH="\$PYENV_ROOT/bin:\$PATH" fi eval "\$(pyenv init --path)" eval "\$(pyenv init -)" eval "\$(pyenv virtualenv-init -)" EOF fi sleep 1 source ~/.bashrc sleep 1 pyenv install $py_new_v pyenv global $py_new_v rm -rf /tmp/python-build.* rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') echo -e "شماره نسخه پیتون فعلی:${gl_huang}$VERSION${gl_bai}" send_stats "نسخه PY SCRIPT SCRIPT" ;; 5) root_use send_stats "بندر" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 echo "همه درگاه ها باز هستند" ;; 6) root_use send_stats "درگاه SSH را اصلاح کنید" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config # شماره پورت SSH فعلی را بخوانید local current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') # شماره پورت SSH فعلی را چاپ کنید echo -e "شماره پورت SSH فعلی:${gl_huang}$current_port ${gl_bai}" echo "------------------------" echo "اعداد با شماره پورت از 1 تا 65535. (برای خروج 0 را وارد کنید)" # کاربر را وادار به وارد کردن شماره پورت SSH جدید کنید read -e -p "لطفاً شماره پورت جدید SSH را وارد کنید:" new_port # تعیین کنید که آیا شماره پورت در محدوده معتبر است if [[ $new_port =~ ^[0-9]+$ ]]; then # 检查输入是否为数字 if [[ $new_port -ge 1 && $new_port -le 65535 ]]; then send_stats "درگاه SSH اصلاح شده است" new_ssh_port elif [[ $new_port -eq 0 ]]; then send_stats "از اصلاح بندر SSH خارج شوید" break else echo "شماره پورت نامعتبر است ، لطفاً یک عدد بین 1 تا 65535 وارد کنید." send_stats "ورودی پورت SSH نامعتبر است" break_end fi else echo "ورودی نامعتبر است ، لطفاً شماره را وارد کنید." send_stats "ورودی پورت SSH نامعتبر است" break_end fi done ;; 7) set_dns_ui ;; 8) dd_xitong ;; 9) root_use send_stats "کاربران جدید ریشه را غیرفعال می کنند" read -e -p "لطفاً نام کاربری جدید را وارد کنید (برای خروج 0 را وارد کنید):" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings fi useradd -m -s /bin/bash "$new_username" passwd "$new_username" echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers passwd -l root echo "این عملیات به پایان رسیده است." ;; 10) root_use send_stats "اولویت V4/V6 را تنظیم کنید" while true; do clear echo "اولویت V4/V6 را تنظیم کنید" echo "------------------------" local ipv6_disabled=$(sysctl -n net.ipv6.conf.all.disable_ipv6) if [ "$ipv6_disabled" -eq 1 ]; then echo -e "تنظیمات اولویت شبکه فعلی:${gl_huang}IPv4${gl_bai}اولویت" else echo -e "تنظیمات اولویت شبکه فعلی:${gl_huang}IPv6${gl_bai}اولویت" fi echo "" echo "------------------------" echo "1. اولویت IPv4 2. اولویت IPv6 3. ابزار تعمیر IPv6" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "یک شبکه ترجیحی را انتخاب کنید:" choice case $choice in 1) sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1 echo "به اولویت IPv4 تبدیل شد" send_stats "به اولویت IPv4 تبدیل شد" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 echo "به اولویت IPv6 تغییر یافته است" send_stats "به اولویت IPv6 تغییر یافته است" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) echo "این عملکرد توسط استاد JHB ارائه شده است ، به لطف او!" send_stats "رفع IPv6" ;; *) break ;; esac done ;; 11) clear ss -tulnape ;; 12) root_use send_stats "حافظه مجازی را تنظیم کنید" while true; do clear echo "حافظه مجازی را تنظیم کنید" local swap_used=$(free -m | awk 'NR==3{print $3}') local swap_total=$(free -m | awk 'NR==3{print $2}') local swap_info=$(free -m | awk 'NR==3{used=$3; total=$2; if (total == 0) {percentage=0} else {percentage=used*100/total}; printf "%dM/%dM (%d%%)", used, total, percentage}') echo -e "حافظه مجازی فعلی:${gl_huang}$swap_info${gl_bai}" echo "------------------------" echo "1. 1024m 2 را اختصاص دهید. 2048m 3 را اختصاص دهید. 4096m را اختصاص دهید. اندازه سفارشی" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" choice case "$choice" in 1) send_stats "حافظه مجازی 1G تنظیم شده است" add_swap 1024 ;; 2) send_stats "2G حافظه مجازی تنظیم شده است" add_swap 2048 ;; 3) send_stats "حافظه مجازی 4G تنظیم شده است" add_swap 4096 ;; 4) read -e -p "لطفاً اندازه حافظه مجازی (واحد M) را وارد کنید:" new_swap add_swap "$new_swap" send_stats "حافظه مجازی سفارشی تنظیم شده است" ;; *) break ;; esac done ;; 13) while true; do root_use send_stats "مدیریت کاربر" echo "لیست کاربری" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do local groups=$(groups "$username" | cut -d : -f 2) local sudo_status=$(sudo -n -lU "$username" 2>/dev/null | grep -q '(ALL : ALL)' && echo "Yes" || echo "No") printf "%-20s %-30s %-20s %-10s\n" "$username" "$homedir" "$groups" "$sudo_status" done < /etc/passwd echo "" echo "عملیات حساب" echo "------------------------" echo "1. یک حساب عادی ایجاد کنید. یک حساب حق بیمه ایجاد کنید" echo "------------------------" echo "3. بالاترین مجوزها را بدهید 4. بالاترین مجوزها را لغو کنید" echo "------------------------" echo "5. حساب را حذف کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) # کاربر را وادار به وارد کردن نام کاربری جدید کند read -e -p "لطفا یک نام کاربری جدید وارد کنید:" new_username # یک کاربر جدید ایجاد کنید و رمز عبور را تنظیم کنید useradd -m -s /bin/bash "$new_username" passwd "$new_username" echo "این عملیات به پایان رسیده است." ;; 2) # کاربر را وادار به وارد کردن نام کاربری جدید کند read -e -p "لطفا یک نام کاربری جدید وارد کنید:" new_username # یک کاربر جدید ایجاد کنید و رمز عبور را تنظیم کنید useradd -m -s /bin/bash "$new_username" passwd "$new_username" # به کاربران جدید مجوزهای سودو را اعطا کنید echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers echo "این عملیات به پایان رسیده است." ;; 3) read -e -p "لطفا نام کاربری خود را وارد کنید:" username # به کاربران جدید مجوزهای سودو را اعطا کنید echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers ;; 4) read -e -p "لطفا نام کاربری خود را وارد کنید:" username # مجوزهای سودو کاربر را از پرونده sudoers حذف کنید sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) read -e -p "لطفاً برای حذف نام کاربری را وارد کنید:" username # کاربر و فهرست خانه آن را حذف کنید userdel -r "$username" ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 14) clear send_stats "تولید کننده اطلاعات کاربر" echo "نام کاربری تصادفی" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" echo "نام کاربری تصادفی$i: $username" done echo "" echo "نام تصادفی" echo "------------------------" local first_names=("John" "Jane" "Michael" "Emily" "David" "Sophia" "William" "Olivia" "James" "Emma" "Ava" "Liam" "Mia" "Noah" "Isabella") local last_names=("Smith" "Johnson" "Brown" "Davis" "Wilson" "Miller" "Jones" "Garcia" "Martinez" "Williams" "Lee" "Gonzalez" "Rodriguez" "Hernandez") # 5 نام کاربری تصادفی ایجاد کنید for i in {1..5}; do local first_name_index=$((RANDOM % ${#first_names[@]})) local last_name_index=$((RANDOM % ${#last_names[@]})) local user_name="${first_names[$first_name_index]} ${last_names[$last_name_index]}" echo "نام کاربری تصادفی$i: $user_name" done echo "" echo "uuid تصادفی" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) echo "uuid تصادفی$i: $uuid" done echo "" echo "رمز عبور تصادفی 16 بیتی" echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) echo "رمز عبور تصادفی$i: $password" done echo "" echo "رمز عبور تصادفی 32 بیتی" echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32) echo "رمز عبور تصادفی$i: $password" done echo "" ;; 15) root_use send_stats "تغییر منطقه زمانی" while true; do clear echo "اطلاعات زمان سیستم" # منطقه زمانی سیستم فعلی را دریافت کنید local timezone=$(current_timezone) # زمان فعلی سیستم را دریافت کنید local current_time=$(date +"%Y-%m-%d %H:%M:%S") # منطقه زمانی و زمان را نشان دهید echo "منطقه زمانی فعلی سیستم:$timezone" echo "زمان فعلی سیستم:$current_time" echo "" echo "سوئیچینگ منطقه زمانی" echo "------------------------" echo "آسیا" echo "1. زمان شانگهای در چین 2. زمان هنگ کنگ در چین" echo "3 زمان توکیو در ژاپن 4. زمان سئول در کره جنوبی" echo "5. زمان سنگاپور 6. زمان کلکته در هند" echo "7. زمان دبی در امارات 8. زمان سیدنی در استرالیا" echo "9. زمان در بانکوک ، تایلند" echo "------------------------" echo "اروپا" echo "11. زمان لندن در انگلستان 12. زمان پاریس در فرانسه" echo "13. برلین زمان ، آلمان 14. زمان مسکو ، روسیه" echo "15. زمان اوترخت در هلند 16. زمان مادرید در اسپانیا" echo "------------------------" echo "آمریکا" echo "21. زمان غربی 22. زمان شرقی" echo "23. زمان کانادا 24. زمان مکزیک" echo "25. زمان برزیل 26. زمان آرژانتین" echo "------------------------" echo "31. UTC زمان استاندارد جهانی" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) set_timedate Asia/Shanghai ;; 2) set_timedate Asia/Hong_Kong ;; 3) set_timedate Asia/Tokyo ;; 4) set_timedate Asia/Seoul ;; 5) set_timedate Asia/Singapore ;; 6) set_timedate Asia/Kolkata ;; 7) set_timedate Asia/Dubai ;; 8) set_timedate Australia/Sydney ;; 9) set_timedate Asia/Bangkok ;; 11) set_timedate Europe/London ;; 12) set_timedate Europe/Paris ;; 13) set_timedate Europe/Berlin ;; 14) set_timedate Europe/Moscow ;; 15) set_timedate Europe/Amsterdam ;; 16) set_timedate Europe/Madrid ;; 21) set_timedate America/Los_Angeles ;; 22) set_timedate America/New_York ;; 23) set_timedate America/Vancouver ;; 24) set_timedate America/Mexico_City ;; 25) set_timedate America/Sao_Paulo ;; 26) set_timedate America/Argentina/Buenos_Aires ;; 31) set_timedate UTC ;; *) break ;; esac done ;; 16) bbrv3 ;; 17) iptables_panel ;; 18) root_use send_stats "نام میزبان را تغییر دهید" while true; do clear local current_hostname=$(uname -n) echo -e "نام میزبان فعلی:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" read -e -p "لطفاً نام میزبان جدید را وارد کنید (0 را برای خروج وارد کنید):" new_hostname if [ -n "$new_hostname" ] && [ "$new_hostname" != "0" ]; then if [ -f /etc/alpine-release ]; then # Alpine echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else # سیستم های دیگر مانند Debian ، Ubuntu ، Centos و غیره hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed fi if grep -q "127.0.0.1" /etc/hosts; then sed -i "s/127.0.0.1 .*/127.0.0.1 $new_hostname localhost localhost.localdomain/g" /etc/hosts else echo "127.0.0.1 $new_hostname localhost localhost.localdomain" >> /etc/hosts fi if grep -q "^::1" /etc/hosts; then sed -i "s/^::1 .*/::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback/g" /etc/hosts else echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi echo "نام میزبان به:$new_hostname" send_stats "نام میزبان تغییر کرده است" sleep 1 else echo "خارج شده ، نام میزبان تغییر نکرده است." break fi done ;; 19) root_use send_stats "منبع بروزرسانی سیستم را تغییر دهید" clear echo "منطقه منبع بروزرسانی را انتخاب کنید" echo "برای تغییر منبع به روزرسانی سیستم به LinuxMirrors متصل شوید" echo "------------------------" echo "1. سرزمین اصلی چین [پیش فرض] 2. سرزمین اصلی چین [شبکه آموزش] 3 مناطق خارج از کشور" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "انتخاب خود را وارد کنید:" choice case $choice in 1) send_stats "منبع پیش فرض در سرزمین اصلی چین" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) send_stats "منبع آموزش در سرزمین اصلی چین" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) send_stats "مبداء خارج از کشور" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) echo "لغو شده" ;; esac ;; 20) send_stats "مدیریت وظیفه زمان بندی" while true; do clear check_crontab_installed clear echo "لیست کار به موقع" crontab -l echo "" echo "عمل کردن" echo "------------------------" echo "1. اضافه کردن وظایف زمان بندی 2. کارهای زمان بندی را حذف کنید." echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) read -e -p "لطفاً دستور اجرای کار جدید را وارد کنید:" newquest echo "------------------------" echo "1. وظایف ماهانه 2. وظایف هفتگی" echo "3 وظایف روزانه 4. وظایف ساعتی" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" dingshi case $dingshi in 1) read -e -p "انتخاب کنید چه روز از هر ماه برای انجام وظایف؟ (1-30):" day (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1 ;; 2) read -e -p "انتخاب کنید که چه هفته ای برای انجام کار انجام شود؟ (0-6 ، 0 نشان دهنده یکشنبه):" weekday (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) read -e -p "انتخاب کنید که هر روز چه زمانی انجام دهید؟ (ساعت ، 0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) read -e -p "برای انجام کار کدام دقیقه از ساعت را وارد کنید؟ (دقیقه ، 0-60):" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac send_stats "کارهای به موقع اضافه کنید" ;; 2) read -e -p "لطفاً کلمات کلیدی را که باید حذف شوند وارد کنید:" kquest crontab -l | grep -v "$kquest" | crontab - send_stats "کارهای زمان بندی را حذف کنید" ;; 3) crontab -e send_stats "کارهای زمان بندی را ویرایش کنید" ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 21) root_use send_stats "تجزیه میزبان محلی" while true; do clear echo "لیست تجزیه میزبان بومی" echo "اگر مسابقات پارس را در اینجا اضافه کنید ، دیگر از تجزیه پویا استفاده نمی شود" cat /etc/hosts echo "" echo "عمل کردن" echo "------------------------" echo "1. یک تجزیه جدید را اضافه کنید. آدرس تجزیه را حذف کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" host_dns case $host_dns in 1) read -e -p "لطفاً یک فرمت جدید تجزیه و تحلیل را وارد کنید: 110.25.5.5.33 Kejilion.pro:" addhost echo "$addhost" >> /etc/hosts send_stats "تجزیه میزبان محلی اضافه شده است" ;; 2) read -e -p "لطفاً کلمات کلیدی محتوای تجزیه کننده را که باید حذف شوند وارد کنید:" delhost sed -i "/$delhost/d" /etc/hosts send_stats "تجزیه و حذف میزبان محلی" ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 22) root_use send_stats "دفاع SSH" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear remove fail2ban rm -rf /etc/fail2ban else clear docker_name="fail2ban" check_docker_app echo -e "برنامه دفاعی SSH$check_docker" echo "Fail2ban ابزاری SSH برای جلوگیری از نیروی بی رحمانه است" echo "معرفی رسمی وب سایت:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" echo "1. برنامه دفاع را نصب کنید" echo "------------------------" echo "2. مشاهده سوابق رهگیری SSH" echo "3. نظارت بر ورود به سیستم در زمان واقعی" echo "------------------------" echo "9. برنامه دفاعی را حذف کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) install_docker f2b_install_sshd cd ~ f2b_status break_end ;; 2) echo "------------------------" f2b_sshd echo "------------------------" break_end ;; 3) tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log break ;; 9) docker rm -f fail2ban rm -rf /path/to/fail2ban echo "برنامه دفاعی Fail2ban حذف نشده است" ;; *) break ;; esac fi done ;; 23) root_use send_stats "عملکرد خاموش محدودیت فعلی" while true; do clear echo "عملکرد خاموش محدودیت فعلی" echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1mc411j7qd؟t=0.1" echo "------------------------------------------------" echo "استفاده فعلی ترافیک ، راه اندازی مجدد محاسبه ترافیک سرور پاک می شود!" output_status echo "$output" # بررسی کنید که آیا پرونده Limiting_shut_down.sh وجود دارد if [ -f ~/Limiting_Shut_down.sh ]; then # مقدار آستانه_ gb را دریافت کنید local rx_threshold_gb=$(grep -oP 'rx_threshold_gb=\K\d+' ~/Limiting_Shut_down.sh) local tx_threshold_gb=$(grep -oP 'tx_threshold_gb=\K\d+' ~/Limiting_Shut_down.sh) echo -e "${gl_lv}آستانه محدودیت جریان ورودی جریان فعلی: این است:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" echo -e "${gl_lv}آستانه محدودیت جریان خروجی فعلی:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" else echo -e "${gl_hui}عملکرد خاموش محدود فعلی فعال نیست${gl_bai}" fi echo echo "------------------------------------------------" echo "این سیستم تشخیص می دهد که آیا ترافیک واقعی هر دقیقه به آستانه می رسد و سرور پس از رسیدن به طور خودکار خاموش می شود!" echo "------------------------" echo "1. عملکرد خاموش کردن محدودیت فعلی را روشن کنید. عملکرد خاموش کردن محدودیت فعلی را غیرفعال کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" Limiting case "$Limiting" in 1) # اندازه حافظه مجازی جدید را وارد کنید echo "اگر سرور واقعی دارای 100 گرم ترافیک باشد ، می توان آستانه را روی 95 گرم تنظیم کرده و از قبل برق را خاموش کرد تا از خطاهای ترافیکی یا سرریز جلوگیری شود." read -e -p "لطفاً آستانه ترافیک دریافتی را وارد کنید (واحد G ، پیش فرض 100 گرم است):" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} read -e -p "لطفاً آستانه ترافیک برون مرزی را وارد کنید (واحد G ، پیش فرض 100 گرم است):" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} read -e -p "لطفاً تاریخ تنظیم مجدد ترافیک را وارد کنید (تنظیم مجدد پیش فرض در اول هر ماه):" cz_day cz_day=${cz_day:-1} cd ~ curl -Ss -o ~/Limiting_Shut_down.sh ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/Limiting_Shut_down1.sh chmod +x ~/Limiting_Shut_down.sh sed -i "s/110/$rx_threshold_gb/g" ~/Limiting_Shut_down.sh sed -i "s/120/$tx_threshold_gb/g" ~/Limiting_Shut_down.sh check_crontab_installed crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab - (crontab -l ; echo "* * * * * ~/Limiting_Shut_down.sh") | crontab - > /dev/null 2>&1 crontab -l | grep -v 'reboot' | crontab - (crontab -l ; echo "0 1 $cz_day * * reboot") | crontab - > /dev/null 2>&1 echo "خاموش کردن محدودیت فعلی تنظیم شده است" send_stats "خاموش کردن محدودیت فعلی تنظیم شده است" ;; 2) check_crontab_installed crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab - crontab -l | grep -v 'reboot' | crontab - rm ~/Limiting_Shut_down.sh echo "عملکرد خاموش کردن محدودیت فعلی خاموش شده است" ;; *) break ;; esac done ;; 24) root_use send_stats "ورود به سیستم خصوصی" while true; do clear echo "حالت ورود به سیستم کلید خصوصی" echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1q4421x78n؟t=209.4" echo "------------------------------------------------" echo "یک جفت کلیدی تولید می شود ، یک روش امن تر برای ورود به سیستم SSH" echo "------------------------" echo "1. یک کلید جدید را تولید کنید. یک کلید موجود را وارد کنید 3. کلید بومی را مشاهده کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" host_dns case $host_dns in 1) send_stats "یک کلید جدید ایجاد کنید" add_sshkey break_end ;; 2) send_stats "یک کلید عمومی موجود را وارد کنید" import_sshkey break_end ;; 3) send_stats "کلید مخفی محلی را مشاهده کنید" echo "------------------------" echo "اطلاعات کلیدی عمومی" cat ~/.ssh/authorized_keys echo "------------------------" echo "اطلاعات کلید خصوصی" cat ~/.ssh/sshkey echo "------------------------" break_end ;; *) break # 跳出循环,退出菜单 ;; esac done ;; 25) root_use send_stats "هشدار تلگرام" echo "نظارت بر TG-BOT و عملکرد هشدار زودهنگام" echo "مقدمه ویدیویی: https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" echo "برای دریافت هشدارهای اولیه برای تحقق نظارت بر زمان واقعی و هشدار زودهنگام CPU ، حافظه ، هارد دیسک ، ترافیک و ورود به سیستم SSH ، باید API TG Robot و ID کاربر را پیکربندی کنید." echo "پس از رسیدن به آستانه ، کاربر به کاربر ارسال می شود" echo -e "${gl_hui}- در مورد ترافیک ، راه اندازی مجدد سرور دوباره محاسبه می شود-${gl_bai}" read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice case "$choice" in [Yy]) send_stats "هشدار تلگرام فعال است" cd ~ install nano tmux bc jq check_crontab_installed if [ -f ~/TG-check-notify.sh ]; then chmod +x ~/TG-check-notify.sh nano ~/TG-check-notify.sh else curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/TG-check-notify.sh chmod +x ~/TG-check-notify.sh nano ~/TG-check-notify.sh fi tmux kill-session -t TG-check-notify > /dev/null 2>&1 tmux new -d -s TG-check-notify "~/TG-check-notify.sh" crontab -l | grep -v '~/TG-check-notify.sh' | crontab - > /dev/null 2>&1 (crontab -l ; echo "@reboot tmux new -d -s TG-check-notify '~/TG-check-notify.sh'") | crontab - > /dev/null 2>&1 curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/TG-SSH-check-notify.sh > /dev/null 2>&1 sed -i "3i$(grep '^TELEGRAM_BOT_TOKEN=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh > /dev/null 2>&1 sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh # به پرونده ~/.profile اضافه کنید if ! grep -q 'bash ~/TG-SSH-check-notify.sh' ~/.profile > /dev/null 2>&1; then echo 'bash ~/TG-SSH-check-notify.sh' >> ~/.profile if command -v dnf &>/dev/null || command -v yum &>/dev/null; then echo 'source ~/.profile' >> ~/.bashrc fi fi source ~/.profile clear echo "سیستم هشدار زودهنگام TG-BOT آغاز شده است" echo -e "${gl_hui}You can also place the TG-check-notify.sh warning file in the root directory on other machines and use it directly!${gl_bai}" ;; [Nn]) echo "لغو شده" ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac ;; 26) root_use send_stats "آسیب پذیری های پرخطر را در SSH رفع کنید" cd ~ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/upgrade_openssh9.8p1.sh chmod +x ~/upgrade_openssh9.8p1.sh ~/upgrade_openssh9.8p1.sh rm -f ~/upgrade_openssh9.8p1.sh ;; 27) elrepo ;; 28) Kernel_optimize ;; 29) clamav ;; 30) linux_file ;; 31) linux_language ;; 32) shell_bianse ;; 33) linux_trash ;; 34) linux_backup ;; 35) ssh_manager ;; 36) disk_manager ;; 37) clear send_stats "تاریخ خط فرمان" get_history_file() { for file in "$HOME"/.bash_history "$HOME"/.ash_history "$HOME"/.zsh_history "$HOME"/.local/share/fish/fish_history; do [ -f "$file" ] && { echo "$file"; return; } done return 1 } history_file=$(get_history_file) && cat -n "$history_file" ;; 38) rsync_manager ;; 41) clear send_stats "صفحه پیام" echo "صفحه پیام Lion Technology به جامعه رسمی منتقل شده است! لطفاً پیامی را در جامعه رسمی بگذارید!" echo "https://bbs.kejilion.pro/" ;; 66) root_use send_stats "تنظیم یک مرحله" echo "بهینه سازی سیستم یک مرحله ای" echo "------------------------------------------------" echo "موارد زیر اداره و بهینه می شود" echo "1. سیستم را به جدیدترین به روز کنید" echo "2. پرونده های ناخواسته سیستم را تمیز کنید" echo -e "3. حافظه مجازی را تنظیم کنید${gl_huang}1G${gl_bai}" echo -e "4. شماره پورت SSH را روی آن تنظیم کنید${gl_huang}5522${gl_bai}" echo -e "5. همه درگاه ها را باز کنید" echo -e "6. روشن کنید${gl_huang}BBR${gl_bai}تسریع کردن" echo -e "7. منطقه زمانی را تنظیم کنید${gl_huang}وابسته به شانگهای${gl_bai}" echo -e "8. به طور خودکار آدرس DNS را بهینه کنید${gl_huang}خارج از کشور: 1.1.1.1 8.8.8.8 داخلی: 223.5.5.5${gl_bai}" echo -e "9. ابزارهای اساسی را نصب کنید${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "10. بهینه سازی پارامتر هسته در سیستم لینوکس را تغییر دهید${gl_huang}حالت بهینه سازی متعادل${gl_bai}" echo "------------------------------------------------" read -e -p "آیا مطمئناً تعمیر و نگهداری یک کلیک دارید؟ (y/n):" choice case "$choice" in [Yy]) clear send_stats "شروع تنظیم یک مرحله ای" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/10. سیستم را به آخرین به روز کنید" echo "------------------------------------------------" linux_clean echo -e "[${gl_lv}OK${gl_bai}] 2/10. پرونده های ناخواسته سیستم را تمیز کنید" echo "------------------------------------------------" add_swap 1024 echo -e "[${gl_lv}OK${gl_bai}] 3/10. حافظه مجازی را تنظیم کنید${gl_huang}1G${gl_bai}" echo "------------------------------------------------" local new_port=5522 new_ssh_port echo -e "[${gl_lv}OK${gl_bai}] 4/10. شماره پورت SSH را روی تنظیم کنید${gl_huang}5522${gl_bai}" echo "------------------------------------------------" echo -e "[${gl_lv}OK${gl_bai}] 5/10. همه بنادر را باز کنید" echo "------------------------------------------------" bbr_on echo -e "[${gl_lv}OK${gl_bai}] 6/10. باز${gl_huang}BBR${gl_bai}تسریع کردن" echo "------------------------------------------------" set_timedate Asia/Shanghai echo -e "[${gl_lv}OK${gl_bai}] 7/10. منطقه زمانی را تنظیم کنید${gl_huang}وابسته به شانگهای${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) if [ "$country" = "CN" ]; then local dns1_ipv4="223.5.5.5" local dns2_ipv4="183.60.83.19" local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" else local dns1_ipv4="1.1.1.1" local dns2_ipv4="8.8.8.8" local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" fi set_dns echo -e "[${gl_lv}OK${gl_bai}] 8/10. به طور خودکار آدرس DNS را بهینه کنید${gl_huang}${gl_bai}" echo "------------------------------------------------" install_docker install wget sudo tar unzip socat btop nano vim echo -e "[${gl_lv}OK${gl_bai}] 9/10. ابزارهای اساسی را نصب کنید${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo "------------------------------------------------" echo "------------------------------------------------" optimize_balanced echo -e "[${gl_lv}OK${gl_bai}] 10/10. بهینه سازی پارامترهای هسته برای سیستم لینوکس" echo -e "${gl_lv}تنظیم سیستم یک مرحله ای به پایان رسیده است${gl_bai}" ;; [Nn]) echo "لغو شده" ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac ;; 99) clear send_stats "سیستم را مجدداً راه اندازی کنید" server_reboot ;; 100) root_use while true; do clear if grep -q '^ENABLE_STATS="true"' /usr/local/bin/k > /dev/null 2>&1; then local status_message="${gl_lv}正在采集数据${gl_bai}" elif grep -q '^ENABLE_STATS="false"' /usr/local/bin/k > /dev/null 2>&1; then local status_message="${gl_hui}采集已关闭${gl_bai}" else local status_message="无法确定的状态" fi echo "حریم خصوصی و امنیت" echo "اسکریپت داده هایی را در مورد توابع کاربر جمع آوری می کند ، تجربه اسکریپت را بهینه می کند و عملکردهای سرگرم کننده و مفید تری ایجاد می کند." echo "شماره نسخه اسکریپت ، زمان استفاده ، نسخه سیستم ، معماری CPU ، کشور دستگاه و نام عملکرد مورد استفاده را جمع آوری می کند." echo "------------------------------------------------" echo -e "وضعیت فعلی:$status_message" echo "--------------------" echo "1. مجموعه را روشن کنید" echo "2. مجموعه را ببندید" echo "--------------------" echo "0. به منوی قبلی برگردید" echo "--------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) cd ~ sed -i 's/^ENABLE_STATS="false"/ENABLE_STATS="true"/' /usr/local/bin/k sed -i 's/^ENABLE_STATS="false"/ENABLE_STATS="true"/' ~/kejilion.sh echo "مجموعه فعال شده است" send_stats "جمع آوری حریم خصوصی و امنیت فعال شده است" ;; 2) cd ~ sed -i 's/^ENABLE_STATS="true"/ENABLE_STATS="false"/' /usr/local/bin/k sed -i 's/^ENABLE_STATS="true"/ENABLE_STATS="false"/' ~/kejilion.sh echo "مجموعه بسته" send_stats "حریم خصوصی و امنیت برای جمع آوری بسته شده است" ;; *) break ;; esac done ;; 101) clear k_info ;; 102) clear send_stats "حذف اسکریپت شیر ​​فناوری" echo "حذف اسکریپت شیر ​​فناوری" echo "------------------------------------------------" echo "اسکریپت kejilion را کاملاً حذف کرده و بر عملکردهای دیگر شما تأثیر نمی گذارد" read -e -p "آیا مطمئناً ادامه خواهید داد؟ (y/n):" choice case "$choice" in [Yy]) clear (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh echo "فیلمنامه حذف شده است ، خداحافظ!" break_end clear exit ;; [Nn]) echo "لغو شده" ;; *) echo "انتخاب نامعتبر ، لطفاً Y یا N را وارد کنید." ;; esac ;; 0) kejilion ;; *) echo "ورودی نامعتبر!" ;; esac break_end done } linux_file() { root_use send_stats "مدیر پرونده" while true; do clear echo "مدیر پرونده" echo "------------------------" echo "مسیر فعلی" pwd echo "------------------------" ls --color=auto -x echo "------------------------" echo "1. دایرکتوری را وارد کنید 2. دایرکتوری را ایجاد کنید. مجوزهای فهرست را تغییر دهید." echo "5. فهرست را حذف کنید 6. به فهرست منو قبلی برگردید" echo "------------------------" echo "11. یک پرونده 12 ایجاد کنید. یک پرونده را ویرایش کنید." echo "15. پرونده را حذف کنید" echo "------------------------" echo "21. دایرکتوری پرونده فشرده 22. فهرست پرونده unzip 23. فهرست پرونده های پرونده 24. کپی کردن دایرکتوری پرونده" echo "25. پرونده را به سرور دیگری منتقل کنید" echo "------------------------" echo "0. به منوی قبلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" Limiting case "$Limiting" in 1) # 进入目录 read -e -p "لطفاً نام دایرکتوری را وارد کنید:" dirname cd "$dirname" 2>/dev/null || echo "ورود به دایرکتوری امکان پذیر نیست" send_stats "به دایرکتوری بروید" ;; 2) # 创建目录 read -e -p "لطفاً نام دایرکتوری را وارد کنید تا ایجاد کنید:" dirname mkdir -p "$dirname" && echo "دایرکتوری ایجاد شده است" || echo "آفرینش شکست خورد" send_stats "دایرکتوری ایجاد کنید" ;; 3) # 修改目录权限 read -e -p "لطفاً نام دایرکتوری را وارد کنید:" dirname read -e -p "لطفاً مجوزها را وارد کنید (مانند 755):" perm chmod "$perm" "$dirname" && echo "مجوزها اصلاح شده اند" || echo "اصلاح انجام نشد" send_stats "مجوزهای فهرست را اصلاح کنید" ;; 4) # 重命名目录 read -e -p "لطفاً نام فهرست فعلی را وارد کنید:" current_name read -e -p "لطفاً نام دایرکتوری جدید را وارد کنید:" new_name mv "$current_name" "$new_name" && echo "دایرکتوری تغییر نام داده است" || echo "تغییر نام انجام نشد" send_stats "تغییر نام دایرکتوری" ;; 5) # 删除目录 read -e -p "لطفاً نام دایرکتوری را وارد کنید تا حذف شود:" dirname rm -rf "$dirname" && echo "فهرست حذف شده است" || echo "حذف انجام نشد" send_stats "فهرست را حذف کنید" ;; 6) # 返回上一级选单目录 cd .. send_stats "به فهرست منوی قبلی برگردید" ;; 11) # 创建文件 read -e -p "لطفاً نام پرونده را برای ایجاد وارد کنید:" filename touch "$filename" && echo "پرونده ایجاد شده است" || echo "آفرینش شکست خورد" send_stats "یک فایل ایجاد کنید" ;; 12) # 编辑文件 read -e -p "لطفاً نام پرونده را برای ویرایش وارد کنید:" filename install nano nano "$filename" send_stats "پرونده ها را ویرایش کنید" ;; 13) # 修改文件权限 read -e -p "لطفاً نام پرونده را وارد کنید:" filename read -e -p "لطفاً مجوزها را وارد کنید (مانند 755):" perm chmod "$perm" "$filename" && echo "مجوزها اصلاح شده اند" || echo "اصلاح انجام نشد" send_stats "مجوزهای پرونده را اصلاح کنید" ;; 14) # 重命名文件 read -e -p "لطفاً نام پرونده فعلی را وارد کنید:" current_name read -e -p "لطفاً یک نام پرونده جدید وارد کنید:" new_name mv "$current_name" "$new_name" && echo "پرونده تغییر نام داد" || echo "تغییر نام انجام نشد" send_stats "تغییر نام پرونده" ;; 15) # 删除文件 read -e -p "لطفاً نام پرونده را وارد کنید تا حذف شود:" filename rm -f "$filename" && echo "پرونده حذف شده است" || echo "حذف انجام نشد" send_stats "پرونده ها را حذف کنید" ;; 21) # 压缩文件/目录 read -e -p "لطفاً نام پرونده/دایرکتوری را وارد کنید تا فشرده شود:" name install tar tar -czvf "$name.tar.gz" "$name" && echo "فشرده به$name.tar.gz" || echo "فشرده سازی انجام نشد" send_stats "پرونده ها/دایرکتوری های فشرده شده" ;; 22) # 解压文件/目录 read -e -p "لطفاً نام پرونده را وارد کنید (.tar.gz):" filename install tar tar -xzvf "$filename" && echo "فشرده شده$filename" || echo "رفع فشار انجام نشد" send_stats "پرونده ها/دایرکتوری ها" ;; 23) # 移动文件或目录 read -e -p "لطفاً برای حرکت پرونده یا مسیر دایرکتوری را وارد کنید:" src_path if [ ! -e "$src_path" ]; then echo "خطا: پرونده یا فهرست وجود ندارد." send_stats "جابجایی پرونده یا دایرکتوری انجام نشد: پرونده یا دایرکتوری وجود ندارد" continue fi read -e -p "لطفاً مسیر هدف را وارد کنید (از جمله نام پرونده جدید یا نام دایرکتوری):" dest_path if [ -z "$dest_path" ]; then echo "خطا: لطفاً مسیر هدف را وارد کنید." send_stats "فایل یا فهرست جابجایی انجام نشد: مسیر مقصد مشخص نشده است" continue fi mv "$src_path" "$dest_path" && echo "پرونده یا دایرکتوری به$dest_path" || echo "جابجایی پرونده ها یا دایرکتوری ها انجام نشد" send_stats "جابجایی پرونده ها یا دایرکتوری ها" ;; 24) # 复制文件目录 read -e -p "لطفاً برای کپی کردن پرونده یا مسیر دایرکتوری را وارد کنید:" src_path if [ ! -e "$src_path" ]; then echo "خطا: پرونده یا فهرست وجود ندارد." send_stats "کپی کردن یک پرونده یا دایرکتوری انجام نشد: پرونده یا دایرکتوری وجود ندارد" continue fi read -e -p "لطفاً مسیر هدف را وارد کنید (از جمله نام پرونده جدید یا نام دایرکتوری):" dest_path if [ -z "$dest_path" ]; then echo "خطا: لطفاً مسیر هدف را وارد کنید." send_stats "کپی کردن پرونده یا دایرکتوری انجام نشد: مسیر مقصد مشخص نشده است" continue fi # از گزینه -r برای کپی مجدد دایرکتوری استفاده کنید cp -r "$src_path" "$dest_path" && echo "پرونده یا دایرکتوری در آن کپی شده است$dest_path" || echo "کپی کردن یک پرونده یا فهرست انجام نشد" send_stats "کپی کردن پرونده ها یا دایرکتوری ها" ;; 25) # 传送文件至远端服务器 read -e -p "لطفاً مسیر فایل را برای انتقال وارد کنید:" file_to_transfer if [ ! -f "$file_to_transfer" ]; then echo "خطا: پرونده وجود ندارد." send_stats "انتقال پرونده انجام نشد: پرونده وجود ندارد" continue fi read -e -p "لطفاً IP از راه دور سرور را وارد کنید:" remote_ip if [ -z "$remote_ip" ]; then echo "خطا: لطفاً IP از راه دور سرور را وارد کنید." send_stats "انتقال پرونده انجام نشد: IP از راه دور سرور وارد نشده است" continue fi read -e -p "لطفاً نام کاربری سرور از راه دور (ریشه پیش فرض) را وارد کنید:" remote_user remote_user=${remote_user:-root} read -e -p "لطفاً رمز عبور سرور از راه دور را وارد کنید:" -s remote_password echo if [ -z "$remote_password" ]; then echo "خطا: لطفاً رمز عبور سرور از راه دور را وارد کنید." send_stats "انتقال پرونده انجام نشد: رمز عبور سرور از راه دور وارد نشده است" continue fi read -e -p "لطفاً درگاه ورود را وارد کنید (پیش فرض 22):" remote_port remote_port=${remote_port:-22} # ورودی های قدیمی را برای میزبان های شناخته شده پاک کنید ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 等待时间 # انتقال پرونده ها با استفاده از SCP scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < ~/cluster/servers.py << EOF servers = [ ] EOF fi while true; do clear send_stats "مرکز کنترل خوشه" echo "کنترل خوشه سرور" cat ~/cluster/servers.py echo echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}مدیریت لیست سرور${gl_bai}" echo -e "${gl_kjlan}1. ${gl_bai}یک سرور اضافه کنید${gl_kjlan}2. ${gl_bai}سرور را حذف کنید${gl_kjlan}3. ${gl_bai}ویرایش سرور" echo -e "${gl_kjlan}4. ${gl_bai}خوشه${gl_kjlan}5. ${gl_bai}بازگرداندن خوشه" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}وظایف را در دسته ها انجام دهید${gl_bai}" echo -e "${gl_kjlan}11. ${gl_bai}اسکریپت شیر ​​فنی را نصب کنید${gl_kjlan}12. ${gl_bai}سیستم را به روز کنید${gl_kjlan}13. ${gl_bai}سیستم را تمیز کنید" echo -e "${gl_kjlan}14. ${gl_bai}داکر را نصب کنید${gl_kjlan}15. ${gl_bai}BBR3 را نصب کنید${gl_kjlan}16. ${gl_bai}حافظه مجازی 1G را تنظیم کنید" echo -e "${gl_kjlan}17. ${gl_bai}منطقه زمانی را به شانگهای تنظیم کنید${gl_kjlan}18. ${gl_bai}همه بنادر را باز کنید${gl_kjlan}51. ${gl_bai}دستورات سفارشی" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}0. ${gl_bai}بازگشت به منوی اصلی" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "لطفا انتخاب خود را وارد کنید:" sub_choice case $sub_choice in 1) send_stats "یک سرور خوشه اضافه کنید" read -e -p "نام سرور:" server_name read -e -p "IP سرور:" server_ip read -e -p "درگاه سرور (22):" server_port local server_port=${server_port:-22} read -e -p "نام کاربری سرور (ریشه):" server_username local server_username=${server_username:-root} read -e -p "رمز عبور کاربر سرور:" server_password sed -i "/servers = \[/a\ {\"name\": \"$server_name\", \"hostname\": \"$server_ip\", \"port\": $server_port, \"username\": \"$server_username\", \"password\": \"$server_password\", \"remote_path\": \"/home/\"}," ~/cluster/servers.py ;; 2) send_stats "سرور خوشه را حذف کنید" read -e -p "لطفاً کلمات کلیدی مورد نیاز برای حذف را وارد کنید:" rmserver sed -i "/$rmserver/d" ~/cluster/servers.py ;; 3) send_stats "سرور خوشه را ویرایش کنید" install nano nano ~/cluster/servers.py ;; 4) clear send_stats "خوشه" echo -e "لطفا${gl_huang}/root/cluster/servers.py${gl_bai}فایل را بارگیری کنید و نسخه پشتیبان تهیه کنید!" break_end ;; 5) clear send_stats "بازگرداندن خوشه" echo "لطفاً Servers.py خود را بارگذاری کرده و برای شروع بارگذاری ، هر کلید را فشار دهید!" echo -e "لطفا خود را بارگذاری کنید${gl_huang}servers.py${gl_bai}پرونده به${gl_huang}/root/cluster/${gl_bai}بازیابی را کامل کنید!" break_end ;; 11) local py_task="install_kejilion.py" cluster_python3 ;; 12) run_commands_on_servers "k update" ;; 13) run_commands_on_servers "k clean" ;; 14) run_commands_on_servers "k docker install" ;; 15) run_commands_on_servers "k bbr3" ;; 16) run_commands_on_servers "k swap 1024" ;; 17) run_commands_on_servers "k time Asia/Shanghai" ;; 18) run_commands_on_servers "k iptables_open" ;; 51) send_stats "اجرای دستورات را سفارشی کنید" read -e -p "لطفاً دستور اجرای دسته را وارد کنید:" mingling run_commands_on_servers "${mingling}" ;; *) kejilion ;; esac done } kejilion_Affiliates() { clear send_stats "ستون تبلیغاتی" echo "ستون تبلیغاتی" echo "------------------------" echo "این یک تجربه تبلیغی و خرید ساده تر و زیبا تر را در اختیار کاربران قرار می دهد!" echo "" echo -e "پیشنهادات سرور" echo "------------------------" echo -e "${gl_lan}Leica Cloud Hong Kong CN2 GIA کره جنوبی دوتایی ISP US CN2 GIA تخفیف${gl_bai}" echo -e "${gl_bai}وب سایت: https://www.lcayun.com/aff/zexuqbim${gl_bai}" echo "------------------------" echo -e "${gl_lan}Racknerd 10.99 دلار در سال ایالات متحده 1 هسته اصلی 1G حافظه 20G هارد 1T ترافیک در هر ماه${gl_bai}" echo -e "${gl_bai}وب سایت: https://my.racknerd.com/aff.php؟aff=5501&pid=879${gl_bai}" echo "------------------------" echo -e "${gl_zi}Hostinger 52.7 دلار در سال ایالات متحده 1 Core 4g Memory 50G هارد 4T ترافیک در هر ماه${gl_bai}" echo -e "${gl_bai}وب سایت: https://cart.hostinger.com/pay/d83c51e9-0c28-47a6-8414-b8ab010ef94f؟_ga=GA1.3.942352702.1711283207${gl_bai}" echo "------------------------" echo -e "${gl_huang}آجر کننده ، 49 دلار در هر سه ماهه ، CN2GIA ایالات متحده ، ژاپن Softbank ، 2 هسته ، حافظه 1 گرم ، هارد 20 گرم ، ترافیک 1T در هر ماه${gl_bai}" echo -e "${gl_bai}وب سایت: https://bandwagonhost.com/aff.php؟aff=69004&pid=87${gl_bai}" echo "------------------------" echo -e "${gl_lan}DMIT 28 دلار در هر سه ماهه CN2GIA 1 CORE 2G حافظه 20G هارد 800 گرم ترافیک در هر ماه${gl_bai}" echo -e "${gl_bai}وب سایت: https://www.dmit.io/aff.php؟aff=4966&pid=100${gl_bai}" echo "------------------------" echo -e "${gl_zi}V.PS 6.9 دلار در هر ماه توکیو SoftBank 2 هسته 1G حافظه 20G هارد 1T ترافیک در هر ماه${gl_bai}" echo -e "${gl_bai}وب سایت: https://vps.hosting/cart/tokyo-cloud-kvm-vps/؟id=148&؟affid=1355&؟affid=1355${gl_bai}" echo "------------------------" echo -e "${gl_kjlan}پیشنهادات VPS محبوب تر${gl_bai}" echo -e "${gl_bai}وب سایت: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" echo -e "تخفیف نام دامنه" echo "------------------------" echo -e "${gl_lan}GNAME 8.8 دلار نام دامنه COM سال اول 6.68 دلار نام دامنه CC سال اول${gl_bai}" echo -e "${gl_bai}وب سایت: https://www.gname.com/register؟tt=86836&ttcode=kejilion86836&ttbj=sh${gl_bai}" echo "------------------------" echo "" echo -e "شیر فناوری اطراف" echo "------------------------" echo -e "${gl_kjlan}ایستگاه ب:${gl_bai}https://b23.tv/2mqnQyh ${gl_kjlan}لوله روغن:${gl_bai}https://www.youtube.com/@kejilion${gl_bai}" echo -e "${gl_kjlan}وب سایت رسمی:${gl_bai}https://kejilion.pro/ ${gl_kjlan}ناوبری:${gl_bai}https://dh.kejilion.pro/${gl_bai}" echo -e "${gl_kjlan}وبلاگ:${gl_bai}https://blog.kejilion.pro/ ${gl_kjlan}مرکز نرم افزار:${gl_bai}https://app.kejilion.pro/${gl_bai}" echo "------------------------" echo "" } kejilion_update() { send_stats "به روزرسانی اسکریپت" cd ~ while true; do clear echo "گزارش به روزرسانی" echo "------------------------" echo "همه گزارش ها:${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion_sh_log.txt" echo "------------------------" curl -s ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion_sh_log.txt | tail -n 30 local sh_v_new=$(curl -s ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion.sh | grep -o 'sh_v="[0-9.]*"' | cut -d '"' -f 2) if [ "$sh_v" = "$sh_v_new" ]; then echo -e "${gl_lv}شما در حال حاضر آخرین نسخه هستید!${gl_huang}v$sh_v${gl_bai}" send_stats "اسکریپت به روز است و به روزرسانی لازم نیست" else echo "نسخه جدیدی را کشف کنید!" echo -e "نسخه فعلی V$sh_vآخرین نسخه${gl_huang}v$sh_v_new${gl_bai}" fi local cron_job="kejilion.sh" local existing_cron=$(crontab -l 2>/dev/null | grep -F "$cron_job") if [ -n "$existing_cron" ]; then echo "------------------------" echo -e "${gl_lv}به روزرسانی خودکار فعال است و اسکریپت هر روز به طور خودکار ساعت 2 صبح به روز می شود!${gl_bai}" fi echo "------------------------" echo "1. به روز کنید اکنون 2. بروزرسانی خودکار را روشن کنید. به روزرسانی خودکار را خاموش کنید" echo "------------------------" echo "0. به منوی اصلی برگردید" echo "------------------------" read -e -p "لطفا انتخاب خود را وارد کنید:" choice case "$choice" in 1) clear local country=$(curl -s ipinfo.io/country) if [ "$country" = "CN" ]; then curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/cn/kejilion.sh && chmod +x kejilion.sh else curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh fi canshu_v6 CheckFirstRun_true yinsiyuanquan2 cp -f ~/kejilion.sh /usr/local/bin/k > /dev/null 2>&1 echo -e "${gl_lv}اسکریپت به آخرین نسخه به روز شده است!${gl_huang}v$sh_v_new${gl_bai}" send_stats "فیلمنامه به روز است$sh_v_new" break_end ~/kejilion.sh exit ;; 2) clear local country=$(curl -s ipinfo.io/country) local ipv6_address=$(curl -s --max-time 1 ipv6.ip.sb) if [ "$country" = "CN" ]; then SH_Update_task="curl -sS -O https://gh.kejilion.pro/raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh && sed -i 's/canshu=\"default\"/canshu=\"CN\"/g' ./kejilion.sh" elif [ -n "$ipv6_address" ]; then SH_Update_task="curl -sS -O https://gh.kejilion.pro/raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh && sed -i 's/canshu=\"default\"/canshu=\"V6\"/g' ./kejilion.sh" else SH_Update_task="curl -sS -O https://raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh" fi check_crontab_installed (crontab -l | grep -v "kejilion.sh") | crontab - # (crontab -l 2>/dev/null; echo "0 2 * * * bash -c \"$SH_Update_task\"") | crontab - (crontab -l 2>/dev/null; echo "$(shuf -i 0-59 -n 1) 2 * * * bash -c \"$SH_Update_task\"") | crontab - echo -e "${gl_lv}به روزرسانی خودکار فعال است و اسکریپت هر روز به طور خودکار ساعت 2 صبح به روز می شود!${gl_bai}" send_stats "بروزرسانی خودکار اسکریپت را روشن کنید" break_end ;; 3) clear (crontab -l | grep -v "kejilion.sh") | crontab - echo -e "${gl_lv}به روزرسانی خودکار بسته است${gl_bai}" send_stats "به روزرسانی خودکار اسکریپت را ببندید" break_end ;; *) kejilion_sh ;; esac done } kejilion_sh() { while true; do clear echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" echo -e "جعبه ابزار Script Lion Technology V$sh_v" echo -e "ورودی خط فرمان${gl_huang}k${gl_kjlan}سریع اسکریپت ها را شروع کنید${gl_bai}" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}1. ${gl_bai}پرس و جو اطلاعاتی سیستم" echo -e "${gl_kjlan}2. ${gl_bai}بروزرسانی سیستم" echo -e "${gl_kjlan}3. ${gl_bai}پاکسازی سیستم" echo -e "${gl_kjlan}4. ${gl_bai}ابزارهای اساسی" echo -e "${gl_kjlan}5. ${gl_bai}مدیریت BBR" echo -e "${gl_kjlan}6. ${gl_bai}مدیریت داکر" echo -e "${gl_kjlan}7. ${gl_bai}مدیریت پیچ و خم" echo -e "${gl_kjlan}8. ${gl_bai}مجموعه اسکریپت تست" echo -e "${gl_kjlan}9. ${gl_bai}مجموعه اسکریپت Oracle Cloud" echo -e "${gl_huang}10. ${gl_bai}ساختمان وب سایت LDNMP" echo -e "${gl_kjlan}11. ${gl_bai}بازار کاربرد" echo -e "${gl_kjlan}12. ${gl_bai}فضای کاری من" echo -e "${gl_kjlan}13. ${gl_bai}ابزار سیستم" echo -e "${gl_kjlan}14. ${gl_bai}کنترل خوشه سرور" echo -e "${gl_kjlan}15. ${gl_bai}ستون تبلیغاتی" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}p. ${gl_bai}اسکریپت افتتاح سرور Palu Palu Phantom Beast" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}00. ${gl_bai}به روزرسانی اسکریپت" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}0. ${gl_bai}اسکریپت خروجی" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "لطفا انتخاب خود را وارد کنید:" choice case $choice in 1) linux_ps ;; 2) clear ; send_stats "بروزرسانی سیستم" ; linux_update ;; 3) clear ; send_stats "پاکسازی سیستم" ; linux_clean ;; 4) linux_tools ;; 5) linux_bbr ;; 6) linux_docker ;; 7) clear ; send_stats "مدیریت پیچ و خم" ; install wget wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh ; bash menu.sh [option] [lisence/url/token] ;; 8) linux_test ;; 9) linux_Oracle ;; 10) linux_ldnmp ;; 11) linux_panel ;; 12) linux_work ;; 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; p) send_stats "اسکریپت افتتاح سرور Palu Palu Phantom Beast" ; cd ~ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh exit ;; 00) kejilion_update ;; 0) clear ; exit ;; *) echo "ورودی نامعتبر!" ;; esac break_end done } k_info() { send_stats "k مورد استفاده مرجع فرمان" echo "-------------------" echo "مقدمه ویدیویی: https://www.bilibili.com/video/bv1ib421e7it؟t=0.1" echo "موارد زیر مورد استفاده مرجع فرمان K است:" echo "شروع اسکریپت k" echo "نصب بسته نرم افزاری k نصب nano wget | k اضافه کردن نانو wget | k نصب نانو wget" echo "بسته بندی k حذف nano wget | K Del Nano Wget | k حذف نانو wget | k حذف نانو wget" echo "به روزرسانی سیستم K به روزرسانی | k به روزرسانی" echo "زباله های سیستم تمیز K Clean | k تمیز" echo "نصب مجدد صفحه سیستم k dd | k نصب مجدد" echo "کنترل پنل BBR3 K BBR3 | k bbrv3" echo "پنل تنظیم هسته K NHYH | بهینه سازی هسته" echo "تنظیم حافظه مجازی k مبادله 2048" echo "تنظیم منطقه زمانی مجازی k زمان آسیا/شانگهای | k منطقه زمانی آسیا/شانگهای" echo "سطل زباله بازیافت سیستم | K HSZ | سطل بازیافت k" echo "عملکرد پشتیبان گیری از سیستم K Backup | k bf | پشتیبان گیری K" echo "ابزار اتصال از راه دور SSH K SSH | k اتصال از راه دور" echo "ابزار همگام سازی از راه دور RSYNC K RSYNC | k هماهنگ سازی از راه دور" echo "ابزار مدیریت دیسک سخت دیسک k | مدیریت دیسک سخت" echo "نفوذ Intranet (سمت سرور) K FRPS" echo "نفوذ Intranet (مشتری) K FRPC" echo "نرم افزار شروع K شروع SSHD | k شروع SSHD" echo "نرم افزار STOP K STOP SSHD | k متوقف SSHD" echo "راه اندازی مجدد نرم افزار K Restart SSHD | k راه اندازی مجدد SSHD" echo "مشاهده وضعیت نرم افزار وضعیت K SSHD | K وضعیت SSHD" echo "نرم افزار بوت K فعال کردن Docker | k autostart docke | k Docker Startup" echo "گواهی نام دامنه برنامه K SSL" echo "نام دامنه گواهینامه انقضاء k ssl ps" echo "نصب محیط Docker نصب K Docker | K Docker نصب" echo "Docker Container Management K Docker PS | K Docker Container" echo "docker镜像管理 k docker img |k docker 镜像" echo "مدیریت سایت LDNMP K وب" echo "پاک کردن حافظه پنهان LDNMP k حافظه نهان" echo "نصب وردپرس k wp | k وردپرس | k wp xxx.com" echo "پروکسی معکوس k fd | k rp | k anti-generation | k fd xxx.com" echo "نصب بار تعادل K LoadBalance | K متعادل کننده بار" echo "صفحه فایروال K FHQ | K فایروال" echo "Open Port K DKDK 8080 | K درگاه باز 8080" echo "بستن بندر K GBDK 7800 | K نزدیک بندر 7800" echo "انتشار IP K fxip 127.0.0.0/8 | k نسخه IP 127.0.0.0/8" echo "Block IP K Zzip 177.5.25.36 | K بلوک IP 177.5.25.36" } if [ "$#" -eq 0 ]; then # اگر پارامتری وجود ندارد ، منطق تعاملی را اجرا کنید kejilion_sh else # اگر پارامترهایی وجود دارد ، عملکرد مربوطه را اجرا کنید case $1 in install|add|安装) shift send_stats "نصب نرم افزار" install "$@" ;; remove|del|uninstall|卸载) shift send_stats "نرم افزار را حذف نصب کنید" remove "$@" ;; update|更新) linux_update ;; clean|清理) linux_clean ;; dd|重装) dd_xitong ;; bbr3|bbrv3) bbrv3 ;; nhyh|内核优化) Kernel_optimize ;; trash|hsz|回收站) linux_trash ;; backup|bf|备份) linux_backup ;; ssh|远程连接) ssh_manager ;; rsync|远程同步) rsync_manager ;; rsync_run) shift send_stats "همگام سازی RSYNC به موقع" run_task "$@" ;; disk|硬盘管理) disk_manager ;; wp|wordpress) shift ldnmp_wp "$@" ;; fd|rp|反代) shift ldnmp_Proxy "$@" ;; loadbalance|负载均衡) ldnmp_Proxy_backend ;; swap) shift send_stats "به سرعت حافظه مجازی را تنظیم کنید" add_swap "$@" ;; time|时区) shift send_stats "به سرعت منطقه زمانی را تنظیم کنید" set_timedate "$@" ;; iptables_open) iptables_open ;; frps) frps_panel ;; frpc) frpc_panel ;; 打开端口|dkdk) shift open_port "$@" ;; 关闭端口|gbdk) shift close_port "$@" ;; 放行IP|fxip) shift allow_ip "$@" ;; 阻止IP|zzip) shift block_ip "$@" ;; 防火墙|fhq) iptables_panel ;; status|状态) shift send_stats "نمای وضعیت نرم افزار" status "$@" ;; start|启动) shift send_stats "راه اندازی نرم افزار" start "$@" ;; stop|停止) shift send_stats "مکث نرم افزاری" stop "$@" ;; restart|重启) shift send_stats "راه اندازی مجدد نرم افزار" restart "$@" ;; enable|autostart|开机启动) shift send_stats "چکمه های نرم افزاری بالا" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then send_stats "وضعیت گواهی را بررسی کنید" ssl_ps elif [ -z "$1" ]; then add_ssl send_stats "به سرعت برای یک گواهی درخواست کنید" elif [ -n "$1" ]; then add_ssl "$1" send_stats "به سرعت برای یک گواهی درخواست کنید" else k_info fi ;; docker) shift case $1 in install|安装) send_stats "داکر را به سرعت نصب کنید" install_docker ;; ps|容器) send_stats "مدیریت سریع کانتینر" docker_ps ;; img|镜像) send_stats "مدیریت سریع آینه" docker_image ;; *) k_info ;; esac ;; web) shift if [ "$1" = "cache" ]; then web_cache elif [ -z "$1" ]; then ldnmp_web_status else k_info fi ;; *) k_info ;; esac fi